×

Comparison and evaluation of code clone detection techniques and tools: A qualitative approach. (English) Zbl 1183.68205

Summary: Over the last decade many techniques and tools for software clone detection have been proposed. In this paper, we provide a qualitative comparison and evaluation of the current state-of-the-art in clone detection techniques and tools, and organize the large amount of information into a coherent conceptual framework. We begin with background concepts, a generic clone detection process and an overall taxonomy of current techniques and tools. We then classify, compare and evaluate the techniques and tools in two different dimensions. First, we classify and compare approaches based on a number of facets, each of which has a set of (possibly overlapping) attributes. Second, we qualitatively evaluate the classified techniques and tools with respect to a taxonomy of editing scenarios designed to model the creation of Type-1, Type-2, Type-3 and Type-4 clones. Finally, we provide examples of how one might use the results of this study to choose the most appropriate clone detection tool or technique in the context of a particular set of goals and constraints. The primary contributions of this paper are: (1) a schema for classifying clone detection techniques and tools and a classification of current clone detectors based on this schema, and (2) a taxonomy of editing scenarios that produce different clone types and a qualitative evaluation of current clone detectors based on this taxonomy.

MSC:

68N99 Theory of software
PDF BibTeX XML Cite
Full Text: DOI Link

References:

[1] G. Antoniol, G. Casazza, M. Di Penta, E. Merlo, Modeling clones evolution through time series, in: Proceedings of the 17th IEEE International Conference on Software Maintenance, ICSM 2001, 2001, pp. 273–280
[2] Antoniol, G.; Villano, U.; Merlo, E.; Penta, M. D.: Analyzing cloning evolution in the Linux kernel, Information and software technology 44, No. 13, 755-765 (2002)
[3] L. Aversano, L. Cerulo, M. Di Penta, How clones are maintained: An empirical study, in: Proceedings of the 11th European Conference on Software Maintenance and Reengineering, CSMR 2007, 2007, pp. 81–90
[4] Baker, B.: Finding clones with dup: analysis of an experiment, IEEE transactions on software engineering 33, No. 9, 608-621 (2007)
[5] B. Baker, U. Manber, Deducing similarities in Java sources from bytecodes, in: Proceedings of the USENIX Annual Technical Conference, 1998, pp. 179–190
[6] Baker, B.: A program for identifying duplicated code, Proceedings of computing science and statistics: 24th symposium on the interface 24, 49-57 (1992)
[7] Baker, B.: Parameterized pattern matching: algorithms and applications, Journal computer system science 52, No. 1, 28-42 (1996) · Zbl 0849.68019
[8] B. Baker, On finding duplication and near-duplication in large software systems, in: Proceedings of the 2nd Working Conference on Reverse Engineering, WCRE 1995, 1995, pp. 86–95
[9] Baker, B.; Giancarlo, R.: Sparse dynamic programming for longest common subsequence from fragments, Journal algorithms 42, No. 2, 231-254 (2002) · Zbl 1002.68193
[10] M. Balazinska, E. Merlo, M. Dagenais, B. Lague, K. Kontogiannis, Measuring clone based reengineering opportunities, in: Proceedings of the IEEE Symposium on Software Metrics, METRICS 1999, 1999, pp. 292–303
[11] M. Balint, T. Girba, R. Marinescu, How developers copy, in: Proceedings of the 14th IEEE International Conference on Program Comprehension, ICPC 2006, 2006, pp. 56–68
[12] H. Basit, S. Pugliesi, W. Smyth, A. Turpin, S. Jarzabek, Efficient token based clone detection with flexible tokenization, in: Proceedings of the 6th European Software Engineering Conference and Foundations of Software Engineering, ESEC/FSE 2007, 2007, pp. 513–515
[13] I.D. Baxter, C. Pidgeon, M. Mehlich, DMS: Program transformations for practical scalable software evolution, in: Proceedings of the 26th International Conference on Software Engineering, ICSE 2004, 2004, pp. 625–634
[14] Project Bauhaus. Last Accessed November 2008. URL http://www.bauhaus-stuttgart.de
[15] I. Baxter, A. Yahin, L. Moura, M. Anna, Clone detection using abstract syntax trees, in: Proceedings of the 14th International Conference on Software Maintenance, ICSM 1998, 1998, pp. 368–377
[16] S. Bellon, Vergleich von techniken zur erkennung duplizierten quellcodes, Diploma Thesis, University of Stuttgart, 2002
[17] S. Bellon, R. Koschke, Detection of software clone: Tool comparison experiment, December 2007. http://www.bauhaus-stuttgart.de/clones/
[18] Bellon, S.; Koschke, R.; Antoniol, G.; Krinke, J.; Merlo, E.: Comparison and evaluation of clone detection tools, Transactions on software engineering 33, No. 9, 577-591 (2007)
[19] Bruntink, M.; Deursen, A.; Engelen, R.; Tourwe, T.: On the use of clone detection for identifying crosscutting concern code, Transactions on software engineering 31, No. 10, 804-818 (2005)
[20] P. Bulychev, M. Minea, Duplicate code detection using anti-unification, in: Spring Young Researchers Colloquium on Software Engineering, SYRCoSE 2008, 2008, p. 4
[21] P. Bulychev, CloneDigger Results. Last Accessed February 2009. http://clonedigger.sourceforge.net/
[22] E. Burd, J. Bailey, Evaluating clone detection tools for use during preventative maintenance, in: Proceedings of the 2nd IEEE International Workshop on Source Code Analysis and Manipulation, SCAM 2002, 2002, pp. 36–43
[23] Calefato, F.; Lanubile, F.; Mallardo, T.: Function clone detection in web applications: A semiautomated approach, Journal of web engineering 3, No. 1, 3-21 (2004)
[24] G. Casazza, G. Antoniol, U. Villano, E. Merlo, M. Penta, Identifying clones in the linux kernel, in: Proceedings of the 1st IEEE International Workshop on Source Code Analysis and Manipulation, SCAM 2001, 2001, pp. 90–97
[25] Church, K.; Helfman, J.: Dotplot: A program for exploring self-similarity in millions of lines for text and code, Journal of American statistical association 2, No. 2, 153-174 (1993)
[26] K. Cooper, N. McIntosh, Enhanced code compression for embedded risc processors, in: Proceedings of the ACM SIGPLAN 1999 Conference on Programming Language Design and Implementation, SIGPLAN PLDI 1999, 1999, pp. 139–149
[27] Cordy, J. R.: The TXL source transformation language, Science of computer programming 61, No. 3, 190-210 (2006) · Zbl 1102.68434
[28] J.R. Cordy, T.R. Dean, N. Synytskyy, Practical language-independent detection of near-miss clones, in: Proceedings of the 14th IBM Centre for Advanced Studies Conference, CASCON 2004, 2004, pp. 29–40
[29] PMD’s CPD. Last Accessed November 2008. URL http://pmd.sourceforge.net/cpd.html
[30] M. Dagenais, E. Merlo, B. Laguë, Daniel Proulx, Clones occurrence in large object oriented software packages, in: Proceedings of the 8th IBM Centre for Advanced Studies Conference, CASCON 1998, 1998, pp. 192–200
[31] Davey, N.; Barson, P.; Field, S.; Frank, R.: The development of a software clone detector, International journal of applied software technology 1, No. 3/4, 219-236 (1995)
[32] Debray, S. K.; Evans, W.; Muth, R.; De Sutter, B.: Compiler techniques for code compaction, ACM transactions on programming languages and systems 22, No. 2, 378-415 (2000)
[33] F. Deissenboeck, B. Hummel, E. Juergens, B. Schaetz, S. Wagner, S. Teuchert, J. Girard, Clone detection in automotive model-based development, in: Proceedings of the 30th International Conference on Software Engineering, ICSE 2008, 2008, pp. 603–612
[34] B. De Sutter, B. De Bus, K. De Bosschere, Sifting out the mud: Low level C++ code reuse, in: Proceedings of the 17th ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2002, 2002, pp. 275–291
[35] A. De Lucia, R. Francese, G. Scanniello, G. Tortora, Understanding cloned patterns in web applications, in: Proceedings of the 13th International Workshop on Program Comprehension, IWPC 2005, 2005, pp. 333–336
[36] G.A. Di Lucca, M. Di Penta, A.R. Fasolino, P. Granato, Clone analysis in the web era: An approach to identify cloned web pages, in: Proceedings of the 7th IEEE Workshop on Empirical Studies of Software Maintenance, WESS 2009, 2001, pp. 107–113
[37] Tool Clone Detective (Part of ConQAT). Last Accessed November 2008. URL http://conqat.in.tum.de/index.php/Main_Page
[38] G. Di Lucca, M. Penta, A. Fasolino, An approach to identify duplicated web pages, in: Proceedings of the 26th International Computer Software and Applications Conference, COMPSAC 2002, 2002, pp. 481–486
[39] Tool Dupman. Last Accessed November 2008. URL http://sourceforge.net/projects/dupman
[40] Ducasse, S.; Nierstrasz, O.; Rieger, M.: On the effectiveness of clone detection by string matching, International journal on software maintenance and evolution: research and practice 18, No. 1, 37-58 (2006)
[41] S. Ducasse, M. Rieger, S. Demeyer, A language independent approach for detecting duplicated code, in: Proceedings of the 15th International Conference on Software Maintenance, ICSM 1999, 1999, pp. 109–118
[42] W. Evans, C. Fraser, M. Fei, Clone detection via structural abstraction, in: Proceedings of the 14th Working Conference on Reverse Engineering, WCRE 2007, 2007, pp. 150–159
[43] Falke, R.; Koschke, R.; Frenzel, P.: Empirical evaluation of clone detection using syntax suffix trees, Empirical software engineering 13, 601-643 (2008)
[44] Fowler, M.: Refactoring: improving the design of existing code, (2000) · Zbl 1020.68632
[45] C. Fraser, E. Myers, A. Wendt, Analyzing and compressing assembly code, in: Proceedings of the ACM SIGPLAN’84 Symposium on Compiler Construction, 1984, pp. 117–121
[46] M. Gabel, L. Jiang, Z. Su, Scalable detection of semantic clones, in: Proceedings of the 30th International Conference on Software Engineering, ICSE 2008, 2008, pp. 321–330
[47] Gitchell, D.; Tran, N.: Sim: A utility for detecting similarity in computer programs, SIGCSE bulletin 31, No. 1, 266-270 (1999)
[48] N. Göde, Incremental clone detection, Diploma Thesis, Department of Mathematics and Computer Science, University of Bremen, Germany, 2008
[49] J. Guo, Y. Zou, Detecting clones in business applications, in: Proceedings of the 15th Working Conference on Reverse Engineering, WCRE 2008, 2008, pp. 91–100
[50] Y. Higo, Y. Ueda, T. Kamiya, S. Kusumoto, K. Inoue, On software maintenance process improvement based on code clone analysis, in: Proceedings of the 4th International Conference on Product Focused Software Process Improvement, PROFES 2002, 2002, pp. 185–197
[51] P. Jablonski, D. Hou, CReN: A tool for tracking copy-and-paste code clones and renaming identifiers consistently in the IDE, in: Proceedings of Eclipse Technology Exchange Workshop at OOPSLA 2007, 2007, pp. 16–20
[52] L. Jiang, G. Misherghi, Z. Su, S. Glondu, DECKARD: Scalable and accurate tree-based detection of code clones, in: Proceedings of the 29th International Conference on Software Engineering, ICSE 2007, 2007, pp. 96–105
[53] J. Johnson, Identifying redundancy in source code using fingerprints, in: Proceedings of the 1993 Conference of the Centre for Advanced Studies on Collaborative Research, CASCON 1993, 1993, pp. 171–183
[54] J. Johnson, Visualizing textual redundancy in legacy source, in: Proceedings of the 1994 Conference of the Centre for Advanced Studies on Collaborative research, CASCON 2004, 1994, pp. 171–183
[55] J. Johnson, Substring matching for clone detection and change tracking, in: Proceedings of the 10th International Conference on Software Maintenance, ICSM 1994, 1994, pp. 120–126
[56] E. Juergens, F. Deissenboeck, B. Hummel, S. Wagner, Do code clones matter?, in: Proceedings of the 31st International Conference on Software Engineering, ICSE 2009, 2009, p. 11 (in press)
[57] N. Juillerat, B. Hirsbrunner, An algorithm for detecting and removing clones in java code, in: Proceedings of the 3rd Workshop on Software Evolution through Transformations: Embracing the Change, SeTra 2006, 2006, pp. 63–74
[58] T. Kamiya, The Official CCFinderX Website. Last Accessed November 2008. URL http://www.ccfinder.net/ccfinderx.html
[59] Kamiya, T.; Kusumoto, S.; Inoue, K.: Ccfinder: A multilinguistic token-based code clone detection system for large scale source code, IEEE transactions on software engineering 28, No. 7, 654-670 (2002)
[60] C. Kapser, M. Godfrey, Aiding comprehension of cloning through categorization, in: Proceedings of the 7th International Workshop on Principles of Software Evolution, IWPSE 2004, 2004, pp. 85–94
[61] Kapser, Cory; Godfrey, Michael W.: Cloning considered harmful considered harmful: patterns of cloning in software, Empirical software engineering 13, No. 6, 645-692 (2008)
[62] H.M. Kienle, H.A. Müller, A. Weber, In the web of generated clones, in: Proceedings of 2nd International Workshop on Detection of Software Clones, IWDSC 2003, 2003, p. 2
[63] M. Kim, L. Bergman, T. Lau, D. Notkin, An ethnographic study of copy and paste programming practices in OOPL, in: Proceedings of 3rd International ACM–IEEE Symposium on Empirical Software Engineering, ISESE 2004, 2004, pp. 83–92
[64] M. Kim, G. Murphy, An empirical study of code clone genealogies, in: Proceedings of the 10th European Software Engineering Conference Held Jointly with 13th ACM SIGSOFT International Symposium on Foundations of Software Engineering, ESEC/SIGSOFT FSE 2005, 2005, pp. 187–196
[65] R. Komondoor, S. Horwitz, Using slicing to identify duplication in source code, in: Proceedings of the 8th International Symposium on Static Analysis, SAS 2001, 2001, pp. 40–56 · Zbl 0997.68644
[66] Kontogiannis, K.; Demori, R.; Merlo, E.; Galler, M.; Bernstein, M.: Pattern matching for clone and concept detection, Journal of automated software engineering 3, No. 1–2, 77-108 (1996)
[67] K. Kontogiannis, Evaluation experiments on the detection of programming patterns using software metrics, in: Proceedings of the 3rd Working Conference on Reverse Engineering, WCRE 1997, 1997, pp. 44–54
[68] S. Rao Kosaraju, Faster algorithms for the construction of parameterized suffix trees, in: Proceedings of the 36th Annual Symposium on Foundations of Computer Science, FOCS 1995, 1995, pp. 631–638 · Zbl 0938.68918
[69] R. Koschke, Frontiers on software clone management, in: Proceedings of the Frontiers of Software Maintenance, 24th IEEE International Conference in Software Maintenance, ICSM 2008, 2008, pp. 119–128
[70] Koschke, R.: Identifying and removing software clones, Software evolution, 15-39 (2008)
[71] R. Koschke, J.-F. Girard, M. Wrthner, An intermediate representation for reverse engineering analyzes, in: Proceedings of the 5th Working Conference on Reverse Engineering, WCRE 1998, 1998, pp. 241–250
[72] R. Koschke, R. Falke, P. Frenzel, Clone detection using abstract syntax suffix trees, in: Proceedings of the 13th Working Conference on Reverse Engineering, WCRE 2006, 2006, pp. 253–262
[73] R. Koschke, Survey of research on software clones, in: Proceedings of Dagstuhl Seminar 06301: Duplication, Redundancy, and Similarity in Software, 2006, p. 24
[74] N. Kraft, B. Bonds, R. Smith, Cross-language clone detection, in: Proceedings of the 20th International Conference on Software Engineering and Knowledge Engineering, SEKE 2008, 2008, p. 6
[75] J. Krinke, Identifying similar code with program dependence graphs, in: Proceedings of the 8th Working Conference on Reverse Engineering, WCRE 2001, 2001, pp. 301–309
[76] I. Landwerth, Clone Detective. Last Accessed November 2008. URL http://www.codeplex.com/CloneDetectiveVS
[77] F. Lanubile, T. Mallardo, Finding function clones in web applications, in: Proceedings of the 7th European Conference on Software Maintenance and Reengineering, CSMR 2003, 2003, pp. 379–386
[78] S. Lee, I. Jeong, SDD: High performance code clone detection system for large scale source code, in: Proceedings of the Object Oriented Programming Systems Languages and Applications Companion to the 20th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA Companion 2005, 2005, pp. 140–141
[79] Leitão, A.: Detection of redundant code using R2D2, Software quality journal 12, No. 4, 361-382 (2004)
[80] H. Li, S. Thompson, Clone detection and removal for erlang/OTP within a refactoring environment, in: ACM/SIGPLAN Workshop Partial Evaluation and Semantics-Based Program Manipulation, Proceedings of the 2009 ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation, 2009, pp. 169–178
[81] C. Liu, C. Chen, J. Han, P. Yu, GPLAG: Detection of software plagiarism by program dependence graph analysis, in: Proceedings of the 12th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, KDD 2006, 2006, pp. 872–881
[82] H. Liu, Z. Ma, L. Zhang, W. Shao, Detecting duplications in sequence diagrams based on suffix trees, in: Proceedings of the 13th Asia Pacific Software Engineering Conference, APSEC 2006, 2006, pp. 269–276
[83] S. Livieri, Y. Higo, M. Matsushita, K. Inoue, Very-large scale code clone analysis and visualization of open source programs using distributed CCFinder, in: Proceedings of 29th International Conference on Software Engineering, ICSE 2007, 2007, pp. 106–115
[84] Li, Z.; Lu, S.; Myagmar, S.; Zhou, Y.: CP-miner: finding copy-paste and related bugs in large-scale software code, IEEE transactions on software engineering 32, No. 3, 176-192 (2006)
[85] U. Manber, Finding similar files in a large file system, in: Proceedings of the Winter 1994 Usenix Technical Conference, 1994, pp. 1–10
[86] A. Marcus, J. Maletic, Identification of high-level concept clones in source code, in: Proceedings of the 16th IEEE International Conference on Automated Software Engineering, ASE 2001, 2001, pp. 107–114
[87] J. Mayrand, C. Leblanc, E. Merlo, Experiment on the automatic detection of function clones in a software system using metrics, in: Proceedings of the 12th International Conference on Software Maintenance, ICSM 1996, 1996, pp. 244–253
[88] Mccreight, E.: A space-economical suffix tree construction algorithm, Journal of the ACM 32, No. 2, 262-272 (1976) · Zbl 0329.68042
[89] E. Merlo, M. Dagenais, P. Bachand, J.S. Sormani, S. Gradara, G. Antoniol, Investigating large software system evolution: The linux kernel, in: Proceedings of the 26th International Computer Software and Applications Conference, COMPSAC 2002, 2002, pp. 421–426
[90] E. Merlo, G. Antoniol, M. Penta, V. Rollo, Linear complexity object-oriented similarity for clone detection and software evolution analyses, in: Proceedings of the 20th International Conference Conference on Software Maintenance, ICSM 2004, 2004, pp. 412–416
[91] L. Moonen, Generating robust parsers using island grammars, in: Proceedings of the 8th Working Conference on Reverse Engineering, WCRE 2001, 2001, pp. 13–22
[92] S. Nasehi, G. Sotudeh, M. Gomrokchi, Source code enhancement using reduction of duplicated code, in: Proceedings of the 25th conference on IASTED International Multi-Conference: Software Engineering, IASTED SE 2007, 2007, pp. 192–197
[93] J. Patenaude, E. Merlo, M. Dagenais, B. Lague, Extending software quality assessment techniques to java systems, in: Proceedings of the 7th International Workshop on Program Comprehension, IWPC 1999, 1999, pp. 49–56
[94] D. Rajapakse, S. Jarzabek, Using server pages to unify clones in web applications: A trade-off analysis, in: Proceedings of the 29th International Conference of Software Engineering, ICSE 2007, 2007, pp. 116–126
[95] F. Ricca, P. Tonella, Using clustering to support the migration from static to dynamic web pages, in: Proceedings of the 11th International Workshop on Program Comprehension, IWPC 2003, 2003, pp. 207–216
[96] M. Rieger, Effective clone detection without language barriers, Ph.D. Thesis, University of Bern, Switzerland, 2005
[97] C.K. Roy, J.R. Cordy, Near-Miss function clones in open source software: An empirical study, Journal of Software Maintenance and Evolution: Research and Practice (2009) 23 (special issue on WCRE’08) (submitted for publication)
[98] C.K. Roy, J.R. Cordy, A mutation / injection-based automatic framework for evaluating clone detection tools, in: Proceedings of the 4th International Workshop on Mutation Analysis, Mutation 2009, 2009, p. 10 (in press)
[99] C.K. Roy, J.R. Cordy, An empirical study of function clones in open source software systems, in: Proceedings of the 15th Working Conference on Reverse Engineering, WCRE 2008, 2008, pp. 81–90
[100] C.K. Roy, J.R. Cordy, WCRE’08 Clones. Last Accessed November 2008. http://www.cs.queensu.ca/home/stl/download/NICADOutput/
[101] C.K. Roy, J.R. Cordy, Towards a mutation-based automatic framework for evaluating clone detectiontools, in: Proceedings of the Canadian Conference on Computer Science and Software Engineering, C3S2E 2008, 2008, pp. 137–140
[102] C.K. Roy, J.R. Cordy, A survey on software clone detection research, Queen’s Technical Report: 541, 2007, p. 115
[103] C.K. Roy, J.R. Cordy, Scenario-based comparison of clone detection techniques, in: Proceedings of the 16th IEEE International Conference on Program Comprehension, ICPC 2008, 2008, pp. 153–162
[104] C.K. Roy, J.R. Cordy, NICAD: Accurate detection of near-miss intentional clones using flexible pretty-printing and code normalization, in: Proceedings of the 16th IEEE International Conference on Program Comprehension, ICPC 2008, 2008, pp. 172–181
[105] F. Rysselberghe, S. Demeyer, Evaluating clone detection techniques, in: Proceedings of the International Workshop on Evolution of Large Scale Industrial Applications, ELISA 2003, 2003, p. 12
[106] F. Rysselberghe, S. Demeyer, Evaluating clone detection techniques from a refactoring perspective, in: Proceedings of the 9th IEEE International Conference Automated Software Engineering, ASE 2004, 2004, pp. 336–339
[107] Tool Simian. Last Accessed November 2008. URL http://www.redhillconsulting.com.au/products/simian/
[108] Tool SimScan. Last Accessed November 2008. URL http://www.blue-edge.bg/simscan/
[109] T. Sager, A. Bernstein, M. Pinzger, C. Keifer, Detecting similar Java classes using tree algorithms, in: Proceedings of the 2006 International Workshop on Mining Software Repositories, MSR 2006, 2006, pp. 65–71
[110] N. Synytskyy, J.R. Cordy, T.R. Dean, Resolution of static clones in dynamic web page, in: Proceedings of the 5th IEEE International Workshop on Web Site Evolution, WSE 2003, 2003, pp. 49–58
[111] R. Tairas, J. Gray, Phoenix-based clone detection using suffix trees, in: Proceedings of the 44th Annual Southeast Regional Conference, ACM-SE 2006, 2006, pp. 679–684
[112] Y. Ueda, T. Kamiya, S. Kusumoto, K. Inoue, On detection of gapped code clones using gap locations, in: Proceedings 9th Asia-Pacific Software Engineering Conference, APSEC 2002, 2002, pp. 327–336
[113] V. Wahler, D. Seipel, J. Gudenberg, G. Fischer, Clone detection in source code by frequent itemset techniques, in: Proceedings of the 4th IEEE International Workshop Source Code Analysis and Manipulation, SCAM 2004, 2004, pp. 128–135
[114] R. Wettel, R. Marinescu, Archeology of code duplication: Recovering duplication chains from small duplication fragments, in: Proceedings of the 7th International Symposium on Symbolic and Numeric Algorithms for Scientific Computing, SYNASC 2005, 2005, p. 8
[115] T. Yamashina, H. Uwano, K. Fushida, Y. Kamei, M. Nagura, S. Kawaguchi, H. Iida, SHINOBI: A real-time code clone detection tool for software maintenance, Technical Report: NAIST-IS-TR2007011, Graduate School of Information Science, Nara Institute of Science and Technology, 2008
[116] Yang, W.: Identifying syntactic differences between two programs, Software practice and experience 21, No. 7, 739-755 (1991)
This reference list is based on information provided by the publisher or from digital mathematics libraries. Its items are heuristically matched to zbMATH identifiers and may contain data conversion errors. It attempts to reflect the references listed in the original paper as accurately as possible without claiming the completeness or perfect precision of the matching.