The size and complexity of industrial strength software systems are constantly increasing. This means that the task of managing a large software project is becoming even more challenging, especially in light of high turnover of experienced personnel. Software clustering approaches can help with the task of understanding large, complex software systems by automatically decomposing them into smaller, easier-to-manage subsystems. The main objective of this paper is to identify important research directions in the area of software clustering that require further attention in order to develop more effective and efficient clustering methodologies for software engineering. To that end, we first present the state of the art in software clustering research. We discuss the clustering methods that have received the most attention from the research community and outline their strengths and weaknesses. Our paper describes each phase of a clustering algorithm separately. We also present the most important approaches for evaluating the effectiveness of software clustering. 1. Introduction Software clustering methodologies group entities of a software system, such as classes or source files, into meaningful subsystems in order to help with the process of understanding the high-level structure of a large and complex software system. A software clustering approach that is successful in accomplishing this task can have significant practical value for software engineers, particularly those working on legacy systems with obsolete or nonexistent documentation. Research in software clustering has been actively carried out for more than twenty years. During this time, several software clustering algorithms have been published in the literature [1–8]. Most of these algorithms have been applied to particular software systems with considerable success. There is consensus between software clustering researchers that a software clustering approach can never hope to cluster a software system as well as an expert who is knowledgeable about the system [9]. Therefore, it is important to understand how good a solution created by a software clustering algorithm is. The research community has developed several methods to assess the quality of software clustering algorithms [10–14]. In this paper, we present a review of the most important software clustering methodologies that have been presented in the literature. We also outline directions for further research in software clustering, such as the development of better software clustering algorithms or the improvement and evaluation of
References
[1]
H. A. Muller, M. A. Orgun, S. R. Tilley, and J. S. Uhl, “A reverse engineering approach to subsystem structure identification,” Journal of Software Maintenance, vol. 5, pp. 181–204, 1993.
[2]
S. C. Choi and W. Scacchi, “Extracting and restructuring the design of large systems,” IEEE Software, vol. 7, no. 1, pp. 66–71, 1990.
[3]
N. Anquetil and T. Lethbridge, “File clustering using naming conventions for legacy systems,” in Proceedings of the Conference of the Center for Advanced Studies on Collaborative research (CASCON '97), pp. 184–195, November 1997.
[4]
C. Lindig and G. Snelting, “Assessing modular structure of legacy code based on mathematical concept analysis,” in Proceedings of the IEEE 19th International Conference on Software Engineering, pp. 349–359, May 1997.
[5]
R. W. Schwanke, R. Altucher, and M. A. Platoff, “Discovering, visualizing, and controlling software structure,” in Proceedings of the International Workshop on Software Specification and Design (IWSSD '89), pp. 147–150, IEEE Computer Society Press, 1989.
[6]
J. F. Cui and H. S. Chae, “Applying agglomerative hierarchical clustering algorithms to component identification for legacy systems,” Information and Software Technology, vol. 53, no. 6, pp. 601–614, 2011.
[7]
Y. Wang, P. Liu, H. Guo, H. Li, and X. Chen, “Improved hierarchical clustering algorithm for software architecture recovery,” in Proceedings of the International Conference on Intelligent Computing and Cognitive Informatics (ICICCI '10), pp. 247–250, Kuala Lumpur, Malaysia, June 2010.
[8]
C. Patel, A. Hamou-Lhadj, and J. Rilling, “Software clustering using dynamic analysis and static dependencies,” in Proceedings of the Software Maintenance and Reengineering (CSMR '09), pp. 27–36, IEEE Computer Society, Kaiserslautern, Germany, March 2009.
[9]
V. Tzerpos, Comprehension-Driven Software Clustering, Ph.D. thesis, University of Toronto, Toronto, Canada, 2001.
[10]
V. Tzerpos and R. C. Holt, “MoJo: a distance metric for software clusterings,” in Proceedings of the 6th Working Conference on Reverse Engineering (WCRE '99), pp. 187–193, October 1999.
[11]
M. Shtern and V. Tzerpos, “A framework for the comparison of nested software decompositions,” in Proceedingsof the 11th Working Conference on Reverse Engineering (WCRE '04), pp. 284–292, Delft, The Netherlands, November 2004.
[12]
B. S. Mitchell and S. Mancoridis, “Craft: a framework for evaluating software clustering results in the absence of benchmark decompositions,” in Proceedings of the 8th Working Conference on Reverse Engineering (WCRE 2001), pp. 93–102, Suttgart, Germany, October 2001.
[13]
N. Anquetil and T. C. Lethbridge, “Experiments with clustering as a software remodularization method,” in Proceedings of the 6th Working Conference on Reverse Engineering (WCRE '99), pp. 235–255, Atlanta, Ga, USA, October 1999.
[14]
R. Koschke and T. Eisenbarth, “A framework for experimental evaluation of clustering techniques,” in Proceedings of the International Workshop on Program Comprehension (IWPC '00), pp. 201–210, Limerick, Ireland, June 2000.
[15]
G. C. Murphy, D. Notkin, and K. Sullivan, “Software reflexion models: bridging the gap between source and high-level models,” in Proceedings of the 1995 3rd ACM SIGSOFT Symposium on the Foundations of Software Engineering, pp. 18–27, October 1995.
[16]
A. Christl, R. Koschke, and M. A. Storey, “Automated clustering to support the reflexion method,” Information and Software Technology, vol. 49, no. 3, pp. 255–274, 2007.
[17]
X. Xu, C.-H. Lung, M. Zaman, and A. Srinivasan, “Program restructuring through clustering techniques,” in Proceedings of the IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM '04), pp. 75–84, IEEE Computer Society, Ottawa, Canada, September 2004.
[18]
S. Zhong, T. M. Khoshgoftaar, and N. Seliya, “Analyzing software measurement data with clustering techniques,” IEEE Intelligent Systems, vol. 19, no. 2, pp. 20–27, 2004.
[19]
C. H. Lung, M. Zaman, and A. Nandi, “Applications of clustering techniques to software partitioning, recovery and restructuring,” Journal of Systems and Software, vol. 73, no. 2, pp. 227–244, 2004.
[20]
R. W. Schwanke, “An intelligent tool for re-engineering software modularity,” in Proceedings of the 13th International Conference on Software Engineering, pp. 83–92, May 1991.
[21]
M. Bauer and M. Trifu, “Architecture-aware adaptive clustering of OO systems,” in Proceedings of the 8th European Conference on Software Maintainance and Reengineering (CSMR '04), pp. 3–14, Tampere, Finland, March 2004.
[22]
K. Mahdavi, M. Harman, and R. M. Hierons, “A multiple hill climbing approach to software module clustering,” in Proceedings of the19th IEEE International Conference on Software Maintenance (ICSM '03), p. 315, IEEE Computer Society, Amsterdam, The Netherlands, September 2003.
[23]
C. Xiao and V. Tzerpos, “Software clustering based on dynamic dependencies,” in Proceedings of the Software Maintenance and Reengineering (CSMR '05), pp. 124–133, IEEE Computer Society, Manchester, UK, March 2005.
[24]
P. Andritsos and V. Tzerpos, “Information-theoretic software clustering,” IEEE Transactions on Software Engineering, vol. 31, no. 2, pp. 150–165, 2005.
[25]
A. Shokoufandeh, S. Mancoridis, and M. Maycock, “Applying spectral methods to software clustering,” in Proceedings of the Working Conference on Reverse Engineering (WCRE '02), p. 3, IEEE Computer Society, Richmond, VA, USA, November 2002.
[26]
G. Canfora, J. Czeranski, and R. Koschke, “Revisiting the delta IC approach to component recovery,” in Proceedings of the 7th Working Conference on Reverse Engineering (WCRE '00), p. 140, IEEE Computer Society, Brisbane, Australia, 2000.
[27]
D. Pollet, S. Ducasse, L. Poyet, I. Alloui, S. C?mpan, and H. Verjus, “Towards a process-oriented software architecture reconstruction taxonomy,” in Proceedings of the 11th European Conference on Software Maintenance and Reengineering (CSMR '07), pp. 137–148, Amsterdam, Netherlands, March 2007.
[28]
S. Demeyer, S. Tichekaar, and S. Ducasse, “FAMIX 2.1—the FAMOOS information exchange model,” Tech. Rep., University of Bern, Bern, Switzerland, 2001.
[29]
R. C. Holt, “Structural manipulations of software architecture using Tarski relational algebra,” in Proceedings of the 1998 5th Working Conference on Reverse Engineering, pp. 210–219, October 1998.
[30]
T. C. Lethbridge, S. Tichelaar, and E. Ploedereder, “The Dagstuhl Middle Metamodel: a schema for reverse engineering,” Electronic Notes in Theoretical Computer Science, vol. 94, pp. 7–18, 2004.
[31]
R. C. Holt, A. Schürr, S. E. Sim, and A. Winter, “GXL: a graph-based standard exchange format for reengineering,” Science of Computer Programming, vol. 60, no. 2, pp. 149–170, 2006.
[32]
B. S. Mitchell, A Heuristic Search Approach to Solving the Software Clustering Problem, Ph.D. thesis, Drexel University, Philadelphia, Pa, USA, 2002, Adviser-Spiros Mancoridis.
[33]
H. A. Muller, S. R. Tilley, and K. Wong, “Understanding software systems using reverse engineering technology perspectives from the Rigi project,” in Proceedings of the Conference of the Center for Advanced Studies on Collaborative research (CASCON '93), pp. 217–226, IBM Press, Ontario, Canada, 1993.
[34]
J. Bézivin, F. Jouault, and P. Valduriez, “On the need for megamodels,” in Proceedings of the Workshop on Best Practices for Model-Driven Software Development at ACM Conference on Object-Oriented Programming, Systems, Languages & Applications (OOPSLA '04), Vancouver, British Columbia, Canada, October 2004.
[35]
L. Tahvildari, R. Gregory, and K. Kontogianni, “An approach for measuring software evolution using source code features,” in Proceedings of the Asia-Pacific Software Engineering Conference, p. 10, 1999.
[36]
S. Kawaguchi, P. K. Garg, M. Matsushita, and K. Inoue, “MUDABlue: an automatic categorization system for open source repositories,” in Proceedings of the 11th Asia-Pacific Software Engineering Conference (APSEC '04), pp. 184–193, Busan, Korea, December 2004.
[37]
A. Kuhn, S. Ducasse, and T. G?rba, “Enriching reverse engineering with semantic clustering,” in Proceedings of the 12th Working Conference on Reverse Engineering (WCRE '05), pp. 133–142, Pittsburgh, Pa, USA, November 2005.
[38]
J. Dietrich, V. Yakovlev, C. McCartiny, G. Jenson, and M. Duchrow, “Cluster analysis of Java dependency graphs,” in Proceedings of the 4th ACM Symposium on Software Visualization (SOFTVIS '08), pp. 91–94, Munich, Germany, September 2008.
[39]
http://www.swag.uwaterloo.ca.
[40]
J. Korn, Y. F. Chen, and E. Koutsofios, “Chava: reverse engineering and tracking of Java applets,” in Proceedings of the 6th Working Conference on Reverse Engineering (WCRE '99), pp. 314–325, October 1999.
[41]
G. Huang, H. Mei, and F. Q. Yang, “Runtime recovery and manipulation of software architecture of component-based systems,” Automated Software Engineering, vol. 13, no. 2, pp. 257–281, 2006.
[42]
E. Stroulia and T. Systa, “Dynamic analysis for reverse engineering and program understanding,” ACM SIGAPP Applied Computing Review, vol. 10, no. 1, pp. 8–17, 2002.
[43]
R. J. Walker, G. C. Murphy, B. N. Freeman-Benson, D. Wright, D. Swanson, and J. Isaak, “Visualizing dynamic software system information through high-level models,” in Proceedings of the ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages & Applications (OOPSLA '98), pp. 271–283, Vancouver, Canada, 1998.
[44]
H. Yan, D. Garlan, B. Schmerl, J. Aldrich, and R. Kazman, “DiscoTect: a system for discovering architectures from running systems,” in Proceedings of the 26th International Conference on Software Engineering (ICSE '04), pp. 470–479, Scotland, UK, May 2004.
[45]
Q. Zhang, Q. Qiu, and L. Sun, “Objectoriented software architecture recovery using a new hybrid clustering algorithm,” in Proceedings of the International Conference on Fuzzy Systems and Knowledge Discovery (FSKD '10), vol. 6, pp. 2546–2550, Shandong, china, August 2010.
D. B. Lange and Y. Nakamura, “Object-oriented program tracing and visualization,” Computer, vol. 30, no. 5, pp. 63–70, 1997.
[48]
T. Systa, Static and Dynamic Reverse Engineering Techniques for Java Software Systems, Ph.D. thesis, Tampere University, Tampere, Finland, 2000.
[49]
M. Dmitriev, “Profiling Java applications using code hotswapping and dynamic call graph revelation,” ACM SIGSOFT Software Engineering Notes, vol. 29, no. 1, pp. 139–150, 2004.
[50]
M. Lungu, M. Lanza, and T. G?rba, “Package patterns for visual architecture recovery,” in Proceedings of the 10th European Conference on Software Maintenance and Reengineering (CSMR '06), pp. 185–194, Bari, Italy, March 2006.
[51]
M. Conway, “How do committees invent,” Datamation, vol. 14, no. 4, pp. 28–31, 1968.
[52]
R. Wuyts, A Logic Meta-Programming Approach to Support the Co-Evolution of Object-Oriented Design and Implementation, Ph.D. thesis, Vrije Universiteit Brussel, Amsterdam, Netherlands, 2001.
[53]
G. Canfora and L. Cerulo, “Impact analysis by mining software and change request repositories,” in Proceedings of the 11th IEEE International Software Metrics Symposium (METRICS '05), pp. 261–269, Como, Italy, September 2005.
[54]
M. Fischer, M. Pinzger, and H. Gall, “Populating a release history database from version control and bug tracking systems,” in Proceedings of the International Conference on Software Maintenance, pp. 23–32, Amsterdam, The Netherlands, September 2003.
[55]
A. Hassan and R. Holt, “Studying the evolution of software systems using evolutionary code extractors,” in Proceedings of the InternationalWorkshop on Principles of Software Evolution (IWPSE '04), pp. 76–81, Kyoto, Japan, September 2004.
[56]
N. Medvidovic and V. Jakobac, “Using software evolution to focus architectural recovery,” Automated Software Engineering, vol. 13, no. 2, pp. 225–256, 2006.
[57]
A. E. Hassan and R. C. Holt, “Reference architecture for web servers,” in Proceedings of the 7th Conference on Reverse Engineering (WCRE '00), pp. 150–159, November 2000.
[58]
H. A. Muller, J. H. Jahnke, D. B. Smith, M.-A. D. Storey, S. R. Tilley, and K. Wong, “Reverse engineering: a roadmap,” in Proceedings of the Proceedings of International Conference on Software Engineering (ICSE '00), pp. 47–60, Limerick, Ireland, June 2000.
[59]
B. Andreopoulos, A. An, V. Tzerpos, and X. Wang, “Clustering large software systems at multiple layers,” Information and Software Technology, vol. 49, no. 3, pp. 244–254, 2007.
[60]
C. H. Lung, M. Zaman, and A. Nandi, “Applications of clustering techniques to software partitioning, recovery and restructuring,” Journal of Systems and Software, vol. 73, no. 2, pp. 227–244, 2004.
[61]
D. M. German, D. Cubranic, and M.-A. D. Storey, “A framework for describing and understanding mining tools in software development,” in Proceedings of the International Workshop on Mining Software Repositories (MSR '05), Proceedings of the International Workshop on Mining software repositories, pp. 1–5, ACM, Saint Louis, Mo, USA, July 2005.
[62]
S. Mancoridis, B. Mitchell, Y. Chen, and E. Gansner, “Bunch: a clustering tool for the recovery and maintenanceof software system structures,” in Proceedings of the International Conference on Software Maintenance (ICSM '99), IEEE Computer Society Press, Oxford, UK, August 1999.
[63]
A. Hamou-Lhadj, E. Braun, D. Amyot, and T. Lethbridge, “Recovering behavioral design models from execution traces,” in Proceedings of the Ninth European Conference on Software Maintenance and Reengineering (CSMR '05), pp. 112–121, Manchester, UK, March 2005.
[64]
Z. Wen and V. Tzerpos, “Software clustering based on omnipresent object detection,” in Proceedings of the 13th International Workshop on Program Comprehension (IWPC '05), pp. 269–278, St. Louis, Mo, USA, May 2005.
[65]
A. K. Jain and R. C. Dubes, Algorithms for Clustering Data, Prentice-Hall, Upper Saddle River, NJ, USA, 1988.
[66]
H. C. Romesburg, Clustering Analysis for Researchers, Krieger, Melbourne, Fla, USA, 1990.
[67]
R. Naseem, O. Maqbool, and S. Muhammad, “Improved similarity measures for software clustering,” in Proceedings of the Software Maintenance and Reengineering (CSMR '11), pp. 45–54, march 2011.
[68]
R. Naseem, O. Maqbool, and S. Muhammad, “An improved similarity measure for binary features in software clustering,” in Proceedings of the 2nd International Conference on Computational Intelligence, Modelling and Simulation (CIMSim '10), pp. 111–116, Islamabad, Pakistan, September 2010.
[69]
H. Dhama, “Quantitative models of cohesion and coupling in software,” in Proceedings of the Annual Oregon Workshop on SoftwareMetrics (AOWSM '95), pp. 65–74, Elsevier Science, June 1995.
[70]
J. Davey and E. Burd, “Evaluating the suitability of data clustering for software remodularisation,” in Proceedings of the 7th Conference on Reverse Engineering (WCRE '00), pp. 268–276, November 2000.
[71]
T. M. Lim and H. W. Khoo, “Sampling properties of Gower's general coefficient of similarity,” Ecology, vol. 66, no. 5, pp. 1682–1685, 1985.
[72]
T. A. Wiggerts, “Using clustering algorithms in legacy systems remodularization,” in Proceedings of the 4th Working Conference on Reverse Engineering, pp. 33–43, October 1997.
[73]
P. H. A. Sneath and R. R. Sokal, Numerical Taxonomy: The Principles and Practice of Numerical Classification, Series of books in biology, W. H. Freeman, Gordonsville, VA, USA, 1973.
[74]
R. W. Schwanke, “An intelligent tool for re-engineering software modularity,” in Proceedings of the 13th International Conference on Software Engineering, pp. 83–92, May 1991.
[75]
R. Koschke, Atomic Architectural Component Recovery for Program Understanding and Evolution, Ph.D. thesis, Stuttgart University, Stuttgart, Germany, 2000.
[76]
G. von Laszewski, May 1993, A collection of graph partitioning algorithms:Simulated annealing, simulated tempering, kemighan lin, two optimal, graph reduction, bisection.
[77]
R. A. Botafogo and B. Shneiderman, “Identifying aggregates in hypertext structures,” in Proceedings of the ACM Hypertext and Hypermedia, pp. 63–74, ACM Press, NewYork, NY, USA, 1991.
[78]
A. Trifu, Using Cluster Analysis in the Architecture Recovery of Object-Oriented Systems, M.S. thesis, University of Karlsruhe, Karlsruhe, Germany, 2001.
[79]
I. Gitman and M. D. Levine, “An algorithm for detecting unimodal fuzzy sets and Its application as a clustering technique,” IEEE Transactions on Computers, vol. C-19, no. 7, pp. 583–593, 1970.
[80]
D. Wishart, “Mode Analysis: a generalization of nearest neighbour which reduces chaining effects,” in Numerical Taxonomy, N. Taxonomy, Ed., pp. 282–311, Academic Press, New York, NY, USA, 1969.
[81]
R. Lutz, “Evolving good hierarchical decompositions of complex systems,” Journal of Systems Architecture, vol. 47, no. 6, pp. 613–634, 2001.
[82]
A. S. Mamaghani and M. R. Meybodi, “Clustering of software systems using new hybrid algorithms,” in Proceedings of the IEEE 9th International Conference on Computer and Information Technology (CIT '09), pp. 20–25, Xiamen, China, October 2009.
[83]
J. Clarke, J. J. Dolado, M. Harman et al., “Reformulating software engineering as a search problem,” IEE Proceedings, vol. 150, no. 3, pp. 161–175, 2003.
[84]
K. Praditwong, “Solving software module clustering problem by evolutionary algorithms,” in Proceedings of the 8th International Joint Conference on Computer Science and Software Engineering (JCSSE '11), pp. 154–159, Pathom, Thailand, May 2011.
[85]
M. R. Anderberg, Cluster Analysis for Applications, Academic Press, New York, NY, USA, 1973.
[86]
D. Doval, S. Mancoridis, and B. Mitchell, “Automatic clustering of software systems using a genetic algorithm,” in Proceedings of the Software Technology and Engineering Practice (STEP '99), pp. 73–81, Pittsburgh, PA , USA, August 1999.
[87]
B. S. Mitchell and S. Mancoridis, “On the automatic modularization of software systems using the bunch tool,” IEEE Transactions on Software Engineering, vol. 32, no. 3, pp. 193–208, 2006.
[88]
A. Shokoufandeh, S. Mancoridis, T. Denton, and M. Maycock, “Spectral and meta-heuristic algorithms for software clustering,” Journal of Systems and Software, vol. 77, no. 3, pp. 213–223, 2005.
[89]
O. Seng, M. Bauer, M. Biehl, and G. Pache, “Searchbased improvement of subsystem decompositions,” in Proceedings of the Conference on Genetic and Evolutionary Computation (GECCO '05), pp. 1045–1051, ACM Press, Washington, DC, USA, June 2005.
[90]
P. de Lit, E. Falkenauer, and A. Delchambre, “Grouping genetic algorithms: an efficient method to solve the cell formation problem,” Mathematics and Computers in Simulation, vol. 51, no. 3-4, pp. 257–271, 2000.
[91]
B. Mitchell and S. Mancoridis, “Using heuristic search techniques to extract design abstractions from source code,” in Proceedings of the Conference on Genetic and Evolutionary Computation (GECCO '02), New York, NY, USA, July 2002.
[92]
S. Mancoridis, B. Mitchell, C. Rorres, Y. Chen, and E. Gansner, “Using automatic clustering to produce high-level system organizations of source code,” in Proceedings of the International Workshop on Program Comprehension (IWPC '98), IEEE Computer Society Press, Ischia , Italy, Junuary1998.
[93]
S. Xanthos, 2006, Clustering Object-Oriented Software Systems using Spectral Graph Partitioning.
[94]
L. Kaufman and P. J. Rousseeuw, Finding Groups in Data: An Introduction to Cluster Analysis, John Wiley, New York, NY, USA, 1990.
[95]
O. Maqbool and H. A. Babri, “The weighted combined algorithm: a linkage algorithm for software clustering,” in Proceedings of the European Conference on Software Maintainance and Reengineering (CSMR '04), pp. 15–24, Tampere, Finland, March 2004.
[96]
V. Tzerpos and R. C. Holt, “ACDC: an algorithm for comprehension-driven clustering,” in Proceedings of the 7th Conference on Reverse Engineering (WCRE '00), pp. 258–267, November 2000.
[97]
V. Tzerpos and R. C. Holt, “Orphan adoption problem in architecture maintenance,” in Proceedings of the 4th Working Conference on Reverse Engineering, pp. 76–82, October 1997.
[98]
M. Lanza and S. Ducasse, “Polymetric views—a lightweight visual approach to reverse engineering,” IEEE Transactions on Software Engineering, vol. 29, no. 9, pp. 782–795, 2003.
[99]
R. Wettel and M. Lanza, “Program comprehension through software habitability,” in Proceedings of the International Conference on Program Comprehension (ICPC '07), pp. 231–240, Banff, Canada, June 2007.
[100]
A. Lakhotia and J. M. Gravley, “Toward experimental evaluation of subsystem classification recovery techniques,” in Proceedings of the 2nd Working Conference on Reverse Engineering, pp. 262–269, July 1995.
[101]
B. S. Mitchell and S. Mancoridis, “Comparing the decompositions produced by software clustering algorithms using similarity measurements,” in Proceedings of the IEEE International Conference on Software Maintenance (ICSM '01), pp. 744–753, Florence, Italy, November 2001.
[102]
Z. Wen and V. Tzerpos, “An optimal algorithm for MoJo distance,” in Proceedings of the International Workshop on Program Comprehension (IWPC '03), pp. 227–235, Portland, Ore, USA, May 2003.
[103]
Z. Wen and V. Tzerpos, “An effectiveness measure for software clustering algorithms,” in Proceedings of the 12th International Workshop on Program Comprehension (IWPC '04), pp. 194–203, Bari, Italy, June 2004.
[104]
M. Shtern and V. Tzerpos, “Lossless comparison of nested software decompositions,” in Proceedings of the 14th Working Conference on Reverse Engineering (WCRE '07), pp. 249–258, Vancouver, Canada, October 2007.
[105]
Z. Wen and V. Tzerpos, “Evaluating similarity measures for software decompositions,” in Proceedings of the International Conference on Software Maintenance (ICSM '04), pp. 368–377, IEEE Computer Society, Chicago Ill, USA, September 2004.
[106]
J. F. Girard and R. Koschke, “Comparison of abstract data types and objects recovery techniques,” Science of Computer Programming, vol. 36, no. 2, pp. 149–181, 2000.
[107]
J. Wu, A. E. Hassan, and R. C. Holt, “Comparison of clustering algorithms in the context of software evolution,” in Proceedings of the International Conference on SoftwareMaintenance (ICSM '05), pp. 525–535, IEEE Computer Society, Budapest, Hungary, September 2005.
[108]
V. V. Raghavan, “Approaches for measuring the stability of clustering methods,” SIGIR Forum, vol. 17, no. 1, pp. 6–20, 1982.
[109]
V. Tzerpos and R. C. Holt, “On the stability of software clustering algorithms,” in Proceedings of the InternationalWorkshop on Program Comprehension (IWPC '00), pp. 211–218, Limerick, Ireland, June 2000.