Anti-patterns describe poor solutions to design and
implementation problems which are claimed to make object
oriented systems hard to maintain. Anti-patterns indicate weaknesses in design that may slow down development or increase the
risk of faults or failures in the future. Classes in anti-patterns
have some dependencies, such as static relationships, that may
propagate potential problems to other classes. To the best of our
knowledge, the relationship between anti-patterns dependencies
(with non anti-patterns classes) and faults has yet to be studied
in details. This paper presents the results of an empirical study
aimed at analysing anti-patterns dependencies in three open
source software systems, namely ArgoUML, JFreeChart, and
XerecesJ. We show that, in almost all releases of the three
systems, classes having dependencies with anti-patterns are more
fault-prone than others. We also report other observations about
these dependencies such as their impact on fault prediction.
Software organizations could make use of these knowledge about
anti-patterns dependencies to better focus their testing and
reviews activities toward the most risky classes, e.g., classes with fault-prone dependencies with anti-patterns.
1. Mining the Relationship betweenMining the Relationship between
AntiAnti--patternspatterns
Dependencies and FaultDependencies and Fault--
PronenessProneness
FehmiFehmi JaafarJaafar,,
Sylvie HamelSylvie Hamel
YannYann--GaGaëëll GuGuééhhééneuc,neuc,
FoutseFoutse KhomhKhomh
2. 2
Anti-patterns describe poor solutions to
design and implementation problems…
…they are not technically incorrect and don't
currently prevent the program from
functioning.
Instead, they indicate weaknesses in design
that may be slowing down development or
increasing the risk of bugs or failures in the
future.
3. 3
Examples of AntiExamples of Anti--patternspatterns
Large controller class, low cohesion,
associated with simple, data-object
classes…
Blob Spaghetti Code
Process oriented methods, object methods with
no parameters, class or global variables utilization,
flow of execution dictated by object
implementation, not by the clients of the objects.
4. 4
MotivationMotivation
Many studies have investigated the
impact of anti-patterns on
•Maintenance [Yamashita, 2013]
•Fault-proneness [Khomh, 2012]
•Change-proneness [Romano, 2012]
-----
5. 5
MotivationMotivation
Yet, classes sharing static
relationships with anti-patterns
have been mostly ignored…
We conjecture that, static and co-change relationships with
anti-patterns can impact the fault-proneness of classes
without anti-patterns.
10. 10
Analysis MethodsAnalysis Methods
HRQ: The proportions of faults carried by classes
having static (resp. Co-change) relationships with
anti-patterns and other classes are the same.
11. RQ1: Are classes that have staticRQ1: Are classes that have static
relationships with antirelationships with anti--patternspatterns
more faultmore fault--prone than otherprone than other
classes?classes?
Classes with S.R with AP 1062 1003
Classes with S.R with AP and that are not AP 402 600
Other classes 681 579
Classes with S.R with AP 432 226
Classes with S.R with AP and that are not AP. 281 103
Other classes 310 647
Classes with S.R with AP 445 121
Classes with S.R with AP and that are not AP. 262 75
Other classes 126 499
Faults No-Faults Odd Ratios
Total of classes related to AP 1939 1350 2.22
Classes with S.R with AP and that are not AP. 945 778 1.88
Total of other classes 1117 1725 1
P-value = 2.2 e-16
12. RQ2: Are classes that coRQ2: Are classes that co--changechange
with antiwith anti--patterns more faultpatterns more fault--proneprone
than other classes?than other classes?
Classes co-changing with AP 241 102
Classes co-changing with AP and that are not AP 120 59
Other classes 1502 1480
Classes co-changing with AP 68 26
Classes co-changing with AP and that are not AP 33 10
Other classes 674 847
Classes co-changing with AP 37 21
Classes co-changing with AP and that are not AP 20 12
Other classes 534 599
Faults No-Faults Odd Ratios
Total of classes co-changing with AP 346 149 2.5
Classes co-changing with AP and that are not AP 173 81 2.3
Total of other classes 2710 2926 1
P-value = 2.2 e-16
13. 13
We found no class having a static dependency (i.e. use, association,
aggregation, and composition relationships) or that co-changed with a
SpaghettiCode.
We found that classes having static relationships with Blob,
ComplexClass, and SwissArmyKnife are significantly more fault prone
than other classes with similar complexity, change history, and code size.
Many anti-patterns’ relationships were with classes playing roles in
design patterns.
Some ObservationsSome Observations
Classes that are co-changing with anti-patterns classes are
significantly more fault prone than other classes with similar
complexity, change history, and code size.