User Tools

Site Tools


This is an old revision of the document!


SAD stands for Software Architectural Defects and is our implementation of DETEX, following the DECOR method to specify and identify occurrences of anti-patterns in PADL models. A paper introducing DETEX and DECOR has been published by Moha, Guéhéneuc, Duchien, and Le Meur and can be used as reference.

Anti-patterns Definition

Names Definitions
AntiSingleton A class that provides mutable class variables, which consequently could be used as global variables.
BaseClassKnowsDerivedClass A class that invokes or has at least binary-class relationship pointing to one of its subclasses.
BaseClassShouldBeAbstract A class that has many subclasses without being abstract.
Blob The Blob (also called God class) corresponds to a large controller class that depends on data stored in surrounding data classes. A large class declares many fields and methods with a low cohesion. A controller class monopolises most of the processing done by a system, takes most of the decisions, and closely directs the processing of other classes. Controller classes can be identified using suspicious names such as Process, Control, Manage, System, and so on. A data class contains only data and performs no processing on these data. It is composed of highly cohesive fields and accessors.
ClassDataShouldBePrivate A class that exposes its fields, thus violating the principle of encapsulation.
ComplexClass A class that has (at least) one large and complex method, in terms of cyclomatic complexity and LOCs.
FunctionalDecomposition The Functional Decomposition antipattern may occur if experienced procedural developers with little knowledge of object-orientation implement an object-oriented system. Brown describes this antipattern as “a 'main' routine that calls numerous subroutines”. The Functional Decomposition design smell consists of a main class, i.e., a class with a procedural name, such as Compute or Display, in which inheritance and polymorphism are scarcely used, that is associated with small classes, which declare many private fields and implement only a few methods.
LargeClass A class that has grown too large in term of LOCs.
LazyClass A class that has few fields and methods.
LongMethod A class that has (at least) a method that is very long, in term of LOCs.
LongParameterList A class that has (at least) one method with a too long list of parameters in comparison to the average number of parameters per methods in the system.
ManyFieldAttributesButNotComplex A class that declares many attributes but which is not complex and, hence, more likely to be some kind of data class holding values without providing behaviour.
MessageChains A class that uses a long chain of method invocations to realise (at least) one of its functionality.
RefusedParentBequest A class that redefines inherited method using empty bodies, thus breaking polymorphism.
SpaghettiCode The Spaghetti Code is an antipattern that is characteristic of procedural thinking in object-oriented programming. Spaghetti Code is revealed by classes with no structure, declaring long methods with no parameters, and utilising global variables. Names of classes and methods may suggest procedural programming. Spaghetti Code does not exploit and prevents the use of object-orientation mechanisms, polymorphism and inheritance.
SpeculativeGenerality A class that is defined as abstract but that has very few children, which do not make use of its methods.
SwissArmyKnife The Swiss Army Knife refers to a tool fulfilling a wide range of needs. The Swiss Army Knife design smell is a complex class that offers a high number of services, for example, a complex class implementing a high number of interfaces. A Swiss Army Knife is different from a Blob, because it exposes a high complexity to address all foreseeable needs of a part of a system, whereas the Blob is a singleton monopolising all processing and data of a system. Thus, several Swiss Army Knives may exist in a system, for example utility classes.
TraditionBreaker A class that inherits from a large parent class but that provides little behaviour and without subclasses.

Anti-patterns Identification

sad.1390376718.txt.gz · Last modified: 2018/03/04 02:53 (external edit)