-
- The Prototype
-
-
- Research
Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering
The following smells and metrics are sorted alphabetically and grouped by the internal cultivate structure.
Have a look at our tutorial to see how you find the smells and metrics in Eclipse and to read our tribute to one of the most recent books on the topic.
A software metric, maps parts of the code structure to a positive numerical value. For example lines of code is a (very simple) software metric.
# | Short | Metric | Source | Description |
---|---|---|---|---|
1 | mean_relative_height_in_inheritance_tree | (dsp) | improved ratio of abstract classes. | |
2 | Ca | afferent_couplings | [Martin94] | Number of afferent coupelings that means the number of classes outside of this package that depend on classes inside of this package. |
3 | average_method_weight | [Lanza06] | average cyclomatic complexity. | |
4 | base_class_overriding_ratio | [Lanza06] | ratio of overridden to total members of baseclass. | |
5 | base_class_usage_ratio | [Lanza06] | ratio of used to total inheritance-specific members of baseclass. | |
6 | changing_classes | [Lanza06] | number of classes calling this method. | |
7 | changing_methods | [Lanza06] | number of methods calling this method. | |
8 | class_instability | [Martin94]? | degree of class instability. | |
9 | co | [Briand98]? | normalized count of the number of edges of G of lcom4. | |
10 | coupling_dispersion | [Lanza06] | number of classes called divided by coupling_intensity. | |
11 | coupling_intensity | [Lanza06] | number of distinct methods called. | |
12 | cyclomatic_complexity | McCabe | Number of linear indipendent path through the control flow. | |
13 | D | distance | [Martin94] | distance from the main line. |
14 | DIT | depth_of_inheritance_tree | [CK94] | depth of inheritance tree. |
15 | TDOI | temporal_degree_of_interest | [Jancke10] | temporal degree of interest (T-DOI). |
16 | Ce | efferent_couplings | [Martin94] | number of classes inside this package that depend on classes outside this package. |
17 | lines_of_code_in_file | ??? | Lines of Code for every file. | |
18 | I | instability | [Martin94] | degree of instability. |
19 | LCOM1 | lack_of_cohesion_of_methods_1 | [CK94] | number of methods that not refer to same field. |
20 | LCOM2 | lack_of_cohesion_of_methods_2 | [Briand98]? | lack of cohesion of methods. |
21 | LCOM3 | lack_of_cohesion_of_methods_3 | [Briand98]? | number of connected components. |
22 | LCOM4 | lack_of_cohesion_of_methods_4 | [Briand98]? | number of connected components (modified edge definition). |
23 | LCOM5 | lack_of_cohesion_of_methods_5 | [Briand98]? | lack of cohesion of methods. |
24 | max_depth_of_nesting | [Lanza06] | Maximal nesting depth of a method. | |
25 | mean_variable_usage | [Gasper10] | Mean usage of all variables. | |
26 | method_access_to_foreign_data | [Lanza06] | number of attributes from unrelated classes that are accessed by a method. | |
27 | method_delegation_ratio | [Lanza06]? | ratio of delegating methods in a class. | |
28 | method_foreign_data_providers | [Lanza06] | number of attributes from unrelated classes that are accessed by a method. | |
29 | method_local_attribute_usage | [Lanza06] | number of used local attributes. | |
30 | method_locality_of_attribute_access | [Lanza06] | ratio of used local attributes to accessed foreign attributes. | |
31 | newCoh | [Briand98]? | alternative for lcom5 modified by briand. | |
32 | NOC | number_of_children | [CK94] | number of children. |
33 | NOD | number_of_descendants | ??? | number of descendants. |
34 | NORM | number_of_overriden_methods | [Lanza06]? | number of overridden methods. |
35 | number_of_accessed_variables | [Lanza06]? | number of accessed variables (inc. locals arguments and instance fields). | |
36 | number_of_added_services | [Lanza06]? | number of public methods that do not override or specialize the baseclass. | |
37 | number_of_delegating_methods | [Lanza06]? | number of delegating methods in a class. | |
38 | NOM | number_of_methods | [Lanza06]? | number of methods in a class. |
39 | number_of_private_methods | [Lanza06]? | number of private methods in a type. | |
40 | number_of_protected_members | [Lanza06]? | number of protected members and fields. | |
41 | number_of_public_accessor_methods | [Lanza06]? | number of public accessor methods. | |
42 | number_of_public_attributes | [Lanza06]? | number of public attributes. | |
43 | number_of_public_methods | [Lanza06]? | number of public methods in a type. | |
44 | number_of_statements | ??? | The number of statements in a method. | |
45 | number_of_statements_in_class | ??? | alternative for lcom5 modified by briand. | |
46 | number_of_abstract_classes | [Martin94]? | number of abstract classes. | |
47 | number_of_interfaces | [Martin94]? | number of interfaces. | |
48 | number_of_classes | [Martin94]? | number of classes. | |
49 | paths | [Fenton1997]? | Number of paths though the controlflow of a method. | |
50 | percentage_of_newly_added_services | [Lanza06]? | ratio of added public services. | |
51 | private_class_complexity | [Lanza06]? | cyclomatic complexity of private methods. | |
52 | lines_of_code_in_project | ??? | Lines of Code in the project. | |
53 | rcm_abstractness | [Martin94] | ratio of abstract classes. | |
54 | SIX | specialization_index | ???! | specialisation index. |
55 | percentage_of_tested_methods | [dsp] | percentage of tested methods. | |
56 | tight_class_cohesion | [Briand98]? | relative number of method pairs in a class accessing at least one common attribute. | |
57 | type_access_to_foreign_data | [Lanza06]? | number of attributes from unrelated classes that are accessed by a class. | |
58 | variable_usage_ratio | [Gasper10] | Number of linear indipendent path through the control flow. | |
59 | weight_of_a_class | [Lanza06]? | number of “functional” public methods divided by total number of public members (Mar02a). | |
60 | weighted_method_count | [CK94] | sum of CYCLO metric for a class over all methods of the class. |
# | Short | Metric | Source | Description |
---|---|---|---|---|
1 | term_idf | (jn) | Returns two list with the terms and their corresponding nr of occurence. | |
2 | termfrequency | (jn) | Returns two list with the terms and their corresponding nr of occurence. | |
3 | termsurprise | (jn) | Returns two list with the terms and tf x idf suprisingness. |
# | Short | Metric | Source | Description |
---|---|---|---|---|
1 | package_dependency_degree | (dsp) | dependency degree between two packages. | |
2 | term_dependency_degree | (dsp) | dependency degree between two packages based on terms. |
Kent Beck defines a “Smell” as structures in code that possibly need a refactoring.
# | Smell | Source | Description |
---|---|---|---|
1 | assignment_to_parameter | [Gasper10] | assigning a value to a parameter. |
2 | brain_class | [Lanza06] | complex class accumulating excessive intelligence amounts. |
3 | brain_method | [Lanza06] | complex method that is very long and accesses many variables. |
4 | complex_method_in_godclass | complex method contributing to a godclass. | |
5 | consistencyViolation | ||
6 | data_class | [Lanza06] | indicates a class with lots of public data and reduced complexity. |
7 | dispersed_coupling | [Lanza06] | calls too many classes and methods. |
8 | feature_envy | [Lanza06] | indicates a method with feature envy: using more foreign attributes from only some classes than own attributes. |
9 | forbidden_access | ||
10 | only_used_by_tests | method only called by tests. | |
11 | god_class | [Lanza06] | indicates a godclass: non-cohesive overly complex accessing to many foreign attributes. |
12 | iceberg_class | class with significant more private than public methods opportunity to extract class. | |
13 | intensive_coupling | [Lanza06] | calls too many methods from few classes. |
14 | law_of_demeter_violation | law of demeter violation. | |
15 | method_chain | chained method calls ignores external (library) methods. | |
16 | middle_man | class delegates more than taking responsibility. | |
17 | test_class_misnamed | test class with invalid name. | |
18 | attribute_has_no_accessor | a class variable should be private and have getter/setter. | |
19 | unused_method | method is not called. | |
20 | package_assigned_to_multiple_layers | Every package has to be assigned to at most one layer. | |
21 | package_assigned_to_no_layer | Every package has to be assigned to at least one layer. | |
22 | no_operation | empty statement. | |
23 | public_variable | a class variable should be private and have getter/setter. | |
24 | public_variable_has_accessors | ||
25 | refused_parent_bequest | [Lanza06] | refusing its bequest: protected members not used or overridden. |
26 | shotgun_surgery | [Lanza06] | too many incoming method calls. |
27 | getter_has_sideeffect | direct or indirect sideeffect in getter method. | |
28 | tradition_breaker | [Lanza06] | excessive increase of child class interface where bequest was already substantial. |
29 | layer_access_rules_violated | Dependency of given package violates layer access rule. |
# | Smell | Source | Description |
---|---|---|---|
1 | forbidden_access | Dependency from given type violates layer access rule for the containing package | |
2 | consistencyViolation | consistency violation. | |
3 | rcm_adp | Acyclic Dependencies Principle Violation. | |
4 | rcm_dip | Dependency Inversion Principle Violation. | |
5 | rcm_sdp | Stable Dependencies Principle Violation. |