Common refactorings, a dependency graph and some code smells: an empirical study of Java OSS
Proceedings of the 2006 ACM/IEEE international symposium on Empirical software engineering
Quality of manual data collection in Java software: an empirical investigation
Empirical Software Engineering
A replicated and refined empirical study of the use of friends in C++ software
Journal of Systems and Software
Hi-index | 0.01 |
Comprehension of an Object-Oriented (OO) system, its architecture and use of OO features such as aggregation, generalization and other forms of association is a difficult task to undertake without the original design documentation for reference. In this paper, a reverse engineering tool was used to reproduce the UML design documentation from code of three industrial-sized systems. High-level class metrics were then collected directly from the design documents. Three hypotheses were tested to establish relationships between these high-level features and the low-level class features of number of class methods and attributes. A further hypothesis was tested to determine features of key classes in a system.Results indicated that, whilst no clear patterns emerged for hypotheses relating to generalization, there was a clear (positive) statistical significance for all three systems studied between aggregation, other types of association and the number of method and attributes in a class. The final hypothesis tested supported the view that key classes in each of the three systems tended to contain a large number of methods, attributes, and associations, significant amounts of aggregation but very little inheritance. An important factor in the comprehension of a systems' architecture is therefore an understanding of the systems' key classes and the coupling patterns (due to aggregation and association) of those classes.