List of Metrics

  • Class metrics
    • NumAttr : Size : The number of attributes in the class.
    • NumOps : Size : The number of operations in a class.
    • NumPubOps : Size : The number of public operations in a class.
    • Setters : Size : The number of operations with a name starting with 'set'.
    • Getters : Size : The number of operations with a name starting with 'get', 'is', or 'has'.
    • NOC : Inheritance : The number of children of the class (UML Generalization).
    • NumDesc : Inheritance : The number of descendents of the class (UML Generalization).
    • NumAnc : Inheritance : The number of ancestors of the class.
    • OpsInh : Inheritance : The number of inherited operations.
    • AttrInh : Inheritance : The number of inherited attributes.
    • NumAssEl_P : Coupling : The number of associated elements in the same package.
    • NumAssEl_M : Coupling : The number of associated elements in the same model.
    • Connectors : Complexity : The number of connectors owned by the class.
    • Diags : Diagram : The number of times the class appears on a diagram.
  • Package metrics
    • NumCls : Size : The number of classes in the package.
    • NumCls_tc : Size : The number of classes in the package, its subpackages, and so on.
    • NumOpsCls : Size : The number of operations in the classes of the package.
    • H : Cohesion : Relational cohesion. (H = (R+1) / NumCls)
    • Ca : Coupling : Afferent coupling. The number of elements outside this package that depend on classes or interfaces in this package.
    • Ce : Coupling : Efferent coupling. The number of elements outside this package that classes or interfaces in this package depend on.
    • I :  : Instability or ease of change. (I = Ce / (Ca + Ce))
    • A :  : Abstractness (or generality) of the package. (A = NbAbstractClass / NbClass)
    • D :  : Distance from the main sequence. (D = (A+I-1)*sqrt(2))
    • DN :  : Normalized distance D' from the main sequence. (DN = |A+I-1|)
    • Nesting : Nesting : Nesting level of the package in the package hierarchy.
    • ConnComp : Cohesion : The connected components formed by the classes and interfaces of the package.
  • Use case metrics
    • NumUseUC :  : The number of profile use this use case.
    • NumUseUC_Rec : The number of profile use this use case recursively.
    • NumLevelUC :  : The number of level included.
    • NumLevelUC_Rec : The number of level included recursively.
    • NumPortletUC :  : The number of portlet included.
    • NumPortletUC_Rec : The number of portlet included recursively.
    • ExtPts :  : The number of extension points of the use case.
    • Diags : Diagram : The number of times the use case appears on a diagram.
  • Profile metrics
    • NumUseCase :  : The number of use case directly linked.
    • NumUseCase_Rec : The number of use case linked recursively.
    • NumLevel :  : The number of level directly linked.
    • NumLevel_Rec :  : The number of level linked recursively.
    • NumPortlet :  : The number of portlet directly linked.
    • NumPortlet_Rec : The number of portlet linked recursively.
    • NOC : Inheritance : The number of children of the profile.
    • NumDesc : Inheritance : The number of descendents of the profile.
    • NumAnc : Inheritance : The number of ancestors of the profile.

List of design rules

  • Class rules
    • AttrNameOvr : Naming : The class defines a property of the same name as an inherited attribute.
    • ConcreteSuper : Style : The abstract class has a parent class that is not abstract.
    • CyclicInheritance : Inheritance : Class inherits from itself directly or indirectly.
    • DepCycle : Style : The class has circular references.
    • DescendentRef : Style : The class references a descendent class via associations, UML dependencies, attribute or parameter types.
    • DupAttrNames : Correctness : The class has two or more properties with identical names.
    • DupOps : Correctness : Class has duplicate operations.
    • GodClass : Style : The class has more than 60 attributes and operations.
    • Keyword : Naming : Class name is a Java or C++ keyword.
    • MultipleInheritance : Inheritance : Use of multiple inheritance - class has more than one parent.
    • NoSpec : Completeness : Abstract class has no child classes.
    • NotCapitalized : Naming : Class names should start with a capital letter.
    • Unnamed : Completeness : Class has no name.
    • Unused : Completeness : The class is not used anywhere.
  • Property rules
    • Capitalized : Naming : Attribute names should start with a lowercase letter.
    • Keyword : Naming : Attribute name is a Java or C++ keyword.
    • NoType : Completeness : The attribute has no specified type.
    • PublicAttr : Style : Non-constant attribute is public.
    • Unnamed : Completeness : The attribute has no name.
  • Operation rules
    • Capitalized : Naming : Operation names should start with a lower case letter.
    • DupName : Naming : The operation has two or more parameters with identical names.
    • Keyword : Naming : Operation name is a Java or C++ keyword.
    • LongParList : Style : The operation has a long parameter list with five or more parameters.
    • Unnamed : Completeness : Operation has no name.
  • Parameter rules
    • Keyword : Naming : Parameter name is a Java or C++ keyword.
    • NoType : Completeness : The parameter has no specified type.
    • Unnamed : Completeness : Parameter has no name.
  • Package rules
    • Capitalization : Naming : Package name has upper case letters.
    • DupClsName : Naming : The package has two or more classes or interfaces with identical names.
    • EmptyPackage : Completeness : The package has no contents.
    • Keyword : Naming : Package name is a Java or C++ keyword.
    • SDP1 : Style : Package violates the Stable-Dependencies Principle (SDP).
    • SDP2 : Style : Package violates the Stable-Dependencies Principle (SDP).
    • Unnamed : Completeness : Package has no name.
  • Association rules
    • AggEnds : Correctness : The binary association has two composite or shared aggregation ends.
    • LooseEnd : Completeness : The association has one or more ends not connected to a model element.
    • NaryAgg : Style : The association has three or more association ends.
    • NaryAggEnds : Correctness : The n-ary association has a composite or shared aggregation end.
    • NaryNavEnds : Correctness : The n-ary association indicates a navigable association end.
  • Associationclass rules
    • AssocClass : Style : Avoid association classes.
  • Generalization rules
    • NoChild : Completeness : The child end of the generalization is not connected to a model element.
    • NoParent : Completeness : The parent end of the generalization is not connected to a model element.
    • TypeMismatch : Correctness : Parent and child of the generalization are not of the same type.
  • Actor rules
    • NoAssoc : Completeness : The actor is not associated with any use cases, classes, or subsystems.
    • Unnamed : Correctness : The actor has no name.
  • Usecase rules
    • CyclicIncludes : Correctness : Use case directly or indirectly includes itself.
    • DupExPoint : Correctness : The use case has two or more extension points of the same name.
    • FunctionalDecomp : Style : Use case both includes and is included in other use cases.
    • Unnamed : Correctness : The use case has no name.
    • Unused : Completeness : The use case is not used.