User Tools

Site Tools


sad

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
sad [2014/01/22 07:46]
yann
sad [2017/09/06 01:54] (current)
Line 24: Line 24:
 | SwissArmyKnife | 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. | | SwissArmyKnife | 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. | | TraditionBreaker | A class that inherits from a large parent class but that provides little behaviour and without subclasses. |
 +
 +===== Anti-patterns Generation =====
 +
 +The generation of code and design smell identification algorithms is straightforward. Class ''​sad.rule.creator.RULECreator''​ expects to find rule cards, i.e., files with extensions ''​.rule''​ in the ''​rsc''​ directory of project ''​SAD Rules Creator''​. It provides a main method that iterates through all the rule cards and generates the corresponding identification algorithms into the ''​SAD''​ project. Once the generation process done, refresh and compile the ''​SAD''​ project and the new identification algorithms are available.
  
 ===== Anti-patterns Identification ===== ===== Anti-patterns Identification =====
  
 +Identifying code and design smells using PADL is made easy by the helper class ''​sad.helper.SmellsIdentifier''​. After having installed CPL, PADL, and POM, just go into the ''​SAD Tests''​ project and have a look at this class. It provides a main method with snippets of code to call the method ''​analyseIdiomLevelModel(String[],​ String, IIdiomLevelModel,​ String)'',​ which handles all the details. Also have a look at the constant array listing the smells that must be identified or avoided: ''​SMELLS_TO_IDENTIFY''​.
 +
 +SAD requires [[POM]] to compute various metrics involved in the definitions of the code and design smells. These metrics are referenced by name in the rule cards, for example:
 +
 +<​code>​
 +RULE_CARD : ComplexClass { 
 +   RULE : ComplexClass { UNION LargeClassOnly ComplexClassOnly } ; 
 +   RULE : LargeClassOnly { (METRIC: NMD + NAD, VERY_HIGH, 0) } ; 
 +   RULE : ComplexClassOnly { (METRIC: McCabe, VERY_HIGH, 20) } ;
 +};
 +</​code>​
sad.1390376810.txt.gz ยท Last modified: 2017/09/06 01:54 (external edit)