12 research outputs found
Evaluating code complexity triggers, use of complexity measures and the influence of code complexity on maintenance time
Error Correcting Graph Matching Application to Software Evolution
none4siGraph representations and graph algorithms are widely adopted to model and resolve problems in many different areas from telecommunications, to bio-informatics, to civil and software engineering. Many software artefacts such as the class diagram can be thought of as graphs and thus, many software evolution problems can be reformulated as a graph matching problem. In this paper, we investigate the applicability of an error-correcting graph matching algorithm to object-oriented software evolution and report results, obtained on a small system - the Latazza application -, supporting applicability and usefulness of our proposal.S. Kpodjedo; F. Ricca; P. Galinier; G. AntoniolS., Kpodjedo; Ricca, Filippo; P., Galinier; G., Antonio
Evolution and Search Based Metrics to Improve Defects Prediction
none4siTesting activity is the most widely adopted practice to ensure software quality. Testing effort should be focused on defect prone and critical resources i.e., on resources highly coupled with other entities of the software application.In this paper, we used search based techniquesto define software metrics accounting for the role aclass plays in the class diagram and for its evolutionover time. We applied Chidamber and Kemerer and the newly defined metrics to Rhino, a Java ECMA script interpreter, to predict version 1.6R5 defect prone classes. Preliminary results show that the new metrics favorably compare with traditional object oriented metricsS. Kpodjedo; F. Ricca; G. Antoniol; P. GalinierS., Kpodjedo; Ricca, Filippo; G., Antoniol; P., Galinie
Recovering the Evolution Stable Part Using an ECGM Algorithm: Is There a Tunnel in Mozilla?
Analyzing the evolutionary history of the design of Object-Oriented Software is an important and difficult task where matching algorithms play a fundamental role. In this paper, we investigate the applicability of an errorcorrecting graph matching (ECGM) algorithm to objectoriented software evolution. By means of a case study, we report evidence of ECGM applicability in studying the Mozilla class diagram evolution. We collected 144 Mozilla snapshots over the past six years, reverse-engineered class diagrams and recovered traceability links between subsequent class diagrams. Our algorithm allows us to identify evolving classes that maintain a stable structure of relations (associations, inheritances and aggregations) with other classes and thus likely constitute the backbone of Mozill
Design evolution metrics for defect prediction in object oriented systems
Testing is the most widely adopted practice to ensure software quality. However, this activity is often a compromise between the available resources and software quality. In object-oriented development, testing effort should be focused on defective classes. Unfortunately, identifying those classes is a challenging and difficult activity on which many metrics, techniques, and models have been tried. In this paper, we investigate the usefulness of elementary design evolution metrics to identify defective classes. The metrics include the numbers of added, deleted, and modified attributes, methods, and relations. The metrics are used to recommend a ranked list of classes likely to contain defects for a system. They are compared to Chidamber and Kemerer's metrics on several versions of Rhino and of ArgoUML. Further comparison is conducted with the complexity metrics computed by Zimmermann et al. on several releases of Eclipse. The comparisons are made according to three criteria: presence of defects, number of defects, and defect density in the top-ranked classes. They show that the design evolution metrics, when used in conjunction with known metrics, improve the identification of defective classes. In addition, they show that the design evolution metrics make significantly better predictions of defect density than other metrics and, thus, can help in reducing the testing effort by focusing test activity on a reduced volume of code