Documents

                 

CodeMR

User Guide

v2018


Installation

Overview

CodeMR Model Editor

Overview        

Graph List

Working Set List        

Metric Distribution

CodeMR Metric Chart

Package Structure

Sunburst

TreeMap

Package Dependency        

Project Outline

CodeMR Main Tool Window

Outline View

Graph Relations

Metric Queries

Label Queries

CodeMR Metrics Tool Window

CodeMR Graph Editor

Drawing a New Graph

Graph Editor Toolbar

Modularization

Report Generation

Appendix A: Supported Metric List


Installation

You can install CodeMR IntelliJ plugin by two different way

Install from JetBrains plugin repository:

  • Select IntelliJ File Menu→Settings→Plugins→Browse Repositories
  • Search for CodeMR and click Install.

Manual install:


Overview

CodeMR is a software quality and static code analysis tool that helps software companies developing better code, better quality products.

CodeMR visualizes code metrics and high level quality attributes (Coupling, Complexity, Size) for C++, Java and Scala projects in different views, such as Package Structure, TreeMap, Sunburst, Dependency and Graph Views.

The graph visualization technique applied in CodeMR is simple yet intuitive. CodeMR has different filtering options and supports custom queries. It visualizes high-level Object Oriented quality attributes and low level metrics. Quality attributes are derived from the combinations of several metrics. You can also create different HTML reports for the project.

With Community Edition you can extract up to 50 source files and 60 classes.


CodeMR Model Editor

Model editor is the main entry point for the CodeMR analyze process. It displays different quality views of the project, also it allows you to create and edit working sets and graphs for the project. To create a CodeMR analysis model first select project, packages or files you would like analyze, then select Extract Model menu item from the CodeMR Menu.

You can specify a name for the model and also select basic options for the model extraction.

Once the tool finishes analyzing the software code, it will create a model file from the project and open this model in the CodeMR model editor.

Model Editor basically has the following tabs:

Overview

Overview Tab in the model editor gives general information about the extracted project such as total lines of code, number of classes, number of packages number of problematic classes, and number of highly problematic classes. Also, percentages of metric levels for the selected metric are illustrated in a pie chart proportional to the code size of classes in this level.

The following legends are commonly used to indicate the metric levels throughout different  CodeMR charts and graphs.:

Overview Tab in the model editor also includes two important list: The graph list and the project working sets list.

Graph List

Graph list shows the list of all graphs created for the project.  You can add, delete and copy graph from graph list with toolbar buttons

  •  add a new graph.
  • remove the selected graph.
  •  copy the selected graph.

You can open graph in graph editor by clicking graph name in the list. You can use rename option in the context menu to rename the selected graph.

Working Set List

Working sets are used to divide big projects into smaller, more easy to analyze modules.

If the project contains multiple Java modules, each module is automatically added as a working set in the extraction phase. User can also add new working sets.

In the working set edit dialog, give a name to the working set and select packages and classes that you would like to add to the working set.

Working set list toolbar buttons are as follows:

  •  add a new new working sets.
  • remove the selected working set.
  • edit the selected working set
  •  generate HTML report for the project.

Metric Distribution

Metric Distribution Tab shows percentages of metric levels for the each metric in a pie charts. Slices of pie charts are proportional to the code size of classes for the corresponding level.

CodeMR Metric Chart

CodeMR Metric Chart is used to indicate software metric values and metric levels in an intuitive way. Each metric bar is scaled to its predefined range, and metric bar is colorized according to the level thresholds of the selected metric. Following are the examples of class metric chart of a class and metric chart of a method respectively.

Metric Chart for class:

Metric Chart for methods

Metric Chart are available in the the CodeMR metrics tool window and insides several views in model editor.

Package Structure

Package structure shows project’s packages and encapsulated classes in a hierarchical way with circle pack layout. It has the following properties:

  • Size of each circle is proportional to the size of the represented software entity.
  • Color of each circle represents the level for the selected metric.
  • If Metric Chart option is selected when you hover the class you can see its metrics in CodeMR Metric Chart.
  • It is zoomable, you can change the zoom level by clicking the circles.

Sunburst

Sunburst view also useful for displaying hierarchical data. It uses a radial layout, the root node of the tree is at the center, with leaves on the circumference. The angle of each arc corresponds to size (Line of Code) of elements it represents. User can select class,package, and project metrics separately.  It has the following properties:

  • angle of each arc is proportional to the size of the represented software entity.
  • Color of each arc represents the level for the selected metric.
  • If Metric Chart option is selected when you hover the class you can see its metrics in CodeMR Metric Chart.
  • It is zoomable, you can change the zoom level by clicking the arc.

Zoomed to package:

TreeMap

treemap recursively subdivides area into rectangles; the area of any node in the tree corresponds to size (Line of Code) of elements it represents. It has the following properties:

  • Area of each rectangle is proportional to the size of the represented software entity.
  • Color of each rectangle represents the level for the selected metric.
  • If Metric Chart option is selected when you hover the class you can see its metrics in CodeMR Metric Chart.
  • It is zoomable, you can change the zoom level by clicking the rectangles.

Zoomed to package:

Package Dependency

Package Dependency view arranges the packages radially, drawing thick curves between nodes. The thickness of the curve encodes the frequency of relations between two packages. If a chord is tapered, there are more relations from a given package than to it. You can see the number of relation in the tool tip if you hover the chord between packages.

Project Outline

Outline view shows quality attributes and metrics of software elements in a structured tree table. You can sort elements by column of different metrics and quality attributes and see the most problematic elements quickly and jump to source code of selected element.


Toolbar of outline view allows you to following functionalities:

  •  Group elements by package
  •  Expand tree one level
  •  Collapse tree one level
  • Jump to source of the selected element.
  • Copy name of the selected element(s).
  • Copy properties of the selected element(s).
  • Select class metrics to show/hide in the table.
  • Select package metrics to show/hide in the table.
  • Select method metrics to show/hide in the table.


CodeMR Main Tool Window

CodeMR main tool window has several views to allow users interact with the graph.

Outline View

Outline View is available inside the CodeMR main tool window. It is basically the same with the project outline view in model editor. However it shows only the displayed classes in the active graph editor. Additionally it has the following functionalities

  • Group elements in the outline table by the modules in the graph.
  •  Refresh elements in the outline table by the elements in the graphs.
  •  Remove selected elements from the graph.
  •  Highlight  selected elements in the graph.

Graph Relations

After drawing a graph you can still change the edge display options from the graph relation views.

Metric Queries

Label Queries


CodeMR Metrics Tool Window

CodeMR Metrics tool window shows metric values and level of selected software entity. Metric Chart is used to indicate software metric values and metric levels in an intuitive way. Each metric bar is scaled to its predefined range, and metric bar is colorized according to the level thresholds of the selected metric.


CodeMR Graph Editor

Graph Editor let you edit graphs for the project. When you select and double click a graph in the  model editor, this graph opened in the Graph Editor.

Drawing a New Graph

When you click draw graph button on the graph editor, it launches the graph rendering wizard to customize graph rendering options.  First you should determine the subset of project classes to display in the graph you can select one of project working set (defined in the model editor) or the whole project.

After that you can choose a grouping option to display a more modular graph and easy to understand graph.

In the last stage, you can select how relations in the source code will be reflected in the graph. You can filter only some relations,also assign different weights and colors to the edges representing those relations. In case there are more than one relation between two classes, all types of relations can be seen from the edge label or the tool tip of the edge. However, for the sake of simplicity, the color of edge is determined by relation type with the highest priority.

Fundamental Graph Operations

Zoom in/out:  use mouse wheel for zoom in and zoom out the graph view

Fit to view: double click on the graph background area

Drag-to-pan: by default if  you drag the mouse on graph background area, and, ctrl shift or cmd modifier keys are not  down,

Multiple element selection: use control, shift or cmd modifiers key down and left mouse button to select multiple element in a rectangle area selected by mouse.

Clear selection: Escape Key

Delete selected elements: delete or escape key.

Undo: ctrl+ z (on Mac: cmd + z)

Redo: ctrl+ shift + z (onMac cmd + shift +  z)

Graph Editor Toolbar

Graph Editor let you edit graphs for the project. It has a toolbar at the top. Items in the toolbar have the following functionalities:

  •  Draw a New Graph
  •  Select Layout Algorithm
  •  Start  Layout Algorithm
  • Stop Layout Algorithm
  • Add Synthetic Edges (useful for layouting disconnected groups)
  • Show Names of Vertices
  • Show Names of Highlighted Vertices
  • Show Vertex Label (assigned via label queries)
  • Show Problematic Classes in the Graph
  • Set Vertex Size
  •  Select Modularization Algorithm
  •  Restart Modularization
  •  Draw Module Boundaries.
  •  Draw Vertex Color By Module (Vertices in the same module will look the same)
  • Show Edges
  • Show Edge Label

Modularization

You can modularize big graphs to see relations between modules and also inside the modules. You can modularize graph by different algorithms:

  • Project: classes of the same Eclipse Project (or Java Module in IntelliJ) are grouped in the same module
  • Package: classes of the same package are grouped in the same module.
  • Clean: no group for all classes.
  • Authoritative: grouping are manually given by the user.
  • Fast Community: Graph automatically grouped by fast community modularization algorithm.


Report Generation

CodeMR can generate HTML reports for the project. You can easily generate HTML report by selecting working sets and clicking generate report button  in the working set toolbar of model editor.

Reports are generated for the whole project and also for each working set. You can navigate between working sets via “working sets” menu on the top-right corner of the page.

HTMl report consists of four parts. The Dashboard, Detailed Metric List, Metric explanations, and Graphs.

Dashboard part is very similar model editor in the IntelliJ IDE. it contains, general information, distribution of quality and metric attributes, and also, sunburst, package structure, treemap and package dependency charts.

Detailed metric tables part list classes and their metric values in different tables according to their quality level.

Metric Explanations part is the description of used metrics in the report.

You can also get more information about a metric, by clicking question mark iconnext to the metric selection combobox. It will show up a tooltip displaying scope, description, related quality attributes and thresholds of the selected metric. If you click more information link, it redirects you to the metric explanation page.

Graph part displays the list of graph generated with CodeMR.

By clicking the graph you can see and edit graphs in HTML form.

Appendix A: Supported Metric List

Software Quality Attributes

Software external quality displays the visible symptoms when there are issues, but the roots are invisible internal quality attributes: program structure, complexity, coupling, testability, reusability, readability, maintainability. Coupling, Complexity, Cohesion and Size are the fundamental internal quality attributes of a software.

Coupling

Coupling between two classes A and B if:

  • A has an attribute that refers to (is of type) B.
  • A calls on services of an object B.
  • A has a method that references B (via return type or parameter).
  • A has a local variable which type is class B.
  • A is a subclass of (or implements) class B.

Tightly coupled systems tend to exhibit the following characteristics:

  • A change in a class usually forces a ripple effect of changes in other classes.
  • Require more effort and/or time due to the increased dependency.
  • Might be harder to reuse a class because dependent classes must be included.

Lack of Cohesion

Measure how well the methods of a class are related to each other. High cohesion (low lack of cohesion) tend to be preferable, because high cohesion is associated with several desirable traits of software including robustness, reliability, reusability, and understandability. In contrast, low cohesion is associated with undesirable traits such as being difficult to maintain, test, reuse, or even understand.

Complexity

Implies being difficult to understand and describes the interactions between a number of entities. Higher levels of complexity in software increase the risk of unintentionally interfering with interactions and so increases the chance of introducing defects when making changes. Size

Size is one of the oldest and most common forms of software measurement. Measured by the number of lines or methods in the code. A very high count might indicate that a class or method is trying to do too much work and should be split up. It might also indicate that the class might be hard to maintain.

Class Lines of Code

Related Quality Attributes: Size

The number of all nonempty, non-commented lines of the body of the class. CLOC is a measure of size and also indirectly related to the class complexity.

Weighted Method Count

Related Quality Attributes: Complexity, Size

The weighted sum of all class’ methods an represents the McCabe complexity of a class. It is equal to number of methods, if the complexity is taken as 1 for each method. The number of methods and complexity can be used to predict development, maintaining and testing effort estimation. In inheritance if base class has high number of method, it affects its' child classes and all methods are represented in subclasses. If number of methods is high, that class possibly domain specific. Therefore they are less reusable. Also these classes tend to more change and defect prone.

Depth of Inheritance Tree

Related Quality Attributes: Complexity

The position of the class in the inheritance tree. Has 0 (zero) value for root and non-inherited classes.For the multiple inheritance, the metric shows the maximum length. Deeper class in the inheritance tree, probably inherit. Therefore, it is harder to predict its behavior. Also this class relatively complex to develop, test and maintain.

Number of Children

Related Quality Attributes: Coupling

The number of direct subclasses of a class. The size of NOC approximately indicates how an application reuses itself. It is assumed that the more children a class has, the more responsibility there is on the maintainer of the class not to break the children's behaviour. As a result, it is harder to modify the class and requires more testing.

Coupling Between Object Classes

Related Quality Attributes: Coupling

The number of classes that a class is coupled to. It is calculated by counting other classes whose attributes or methods are used by a class, plus those that use the attributes or methods of the given class. Inheritance relations are excluded. As a measure of coupling CBO metric is related with reusability and testability of the class. More coupling means that the code becomes more difficult to maintain because changes in other classes can also cause changes in that class. Therefore these classes are less reusable and need more testing effort.

CBO_LIB

Related Quality Attributes: Coupling

The number of dependent library classes.

CBO_APP

Related Quality Attributes: Coupling

The number of dependent classes in the application.

Response For a Class

Related Quality Attributes: Complexity

The number of the methods that can be potentially invoked in response to a public message received by an object of a particular class. It includes the full call graph of any method called from the originating method.If the number of methods that can be invoked at a class is high, then the class is considered more complex and can be highly coupled to other classes. Therefore more test and maintain effort is required.

Simple Response For a Class

Related Quality Attributes: Complexity

The number of the methods that can be potentially invoked in response to a public message received by an object of a particular class. It includes methods directly invoked from the class. If the number of methods that can be invoked at a class is high, then the class is considered more complex and can be highly coupled to other classes. Therefore more test and maintain effort is required.

Lack of Cohesion of Methods

Related Quality Attributes: Cohesion

Measure how methods of a class are related to each other. Low cohesion means that the class implements more than one responsibility. A change request by either a bug or a new feature, on one of these responsibilities will result change of that class. Lack of cohesion also influences understandability and implies classes should probably be split into two or more subclasses. LCOM3 defined as follows LCOM3 = (m - sum(mA)/a) / (m-1) where :

m        number of procedures (methods) in class

a        number of variables (attributes) in class. a contains all variables whether shared (static) or not.

mA        number of methods that access a variable (attribute)

sum(mA)        sum of mA over attributes of a class

LCOM3 varies between 0 and 2. Values 1..2 are considered alarming. In a normal class whose methods access the class's own variables, LCOM3 varies between 0 (high cohesion) and 1 (no cohesion). When LCOM3=0, each method accesses all variables. This indicates the highest possible cohesion. LCOM3=1 indicates extreme lack of cohesion. In this case, the class should be split.

When there are variables that are not accessed by any of the class's methods, 1 < LCOM3 <= 2. This happens if the variables are dead or they are only accessed outside the class. Both cases represent a design flaw. The class is a candidate for rewriting as a module. Alternatively, the class variables should be encapsulated with accessor methods or properties. There may also be some dead variables to remove. If there are no more than one method in a class, LCOM3 is undefined. If there are no variables in a class, LCOM3 is undefined. An undefined LCOM3 is displayed as zero [http://www.aivosto.com/project/help/pm-oo-cohesion.html]

LCAM Lack of Cohesion Among Methods(1-CAM)

Related Quality Attributes: Cohesion

CAM metric is the measure of cohesion based on parameter types of methods. LCAM = 1-CAM

Number of Fields

Related Quality Attributes: Size

The number of fields (attributes) in a class

Number of Methods

Related Quality Attributes: Size

The number of methods in a class.

Number of Static Fields

Related Quality Attributes: Size

The number of static fields in a class.

Number of Static Methods

Related Quality Attributes: Size

The number of static methods in a class.

Specialization Index

Related Quality Attributes: Complexity

Defined as NORM * DIT / NOM. The Specialization Index metric measures the extent to which subclasses override their ancestors classes. This index is the ratio between the number of overridden methods and total number of methods in a Class, weighted by the depth of inheritance for this class. Lorenz and Kidd precise : Methods that invoke the superclass’ method or override template are not included.

Class-Methods Lines of Code

Related Quality Attributes: Size

Total number of all nonempty, non-commented lines of methods inside a class.

Efferent Coupling

Related Quality Attributes: Coupling

Outgoing Coupling. The number of classes in other packages that the classes in the package depend upon is an indicator of the package's dependence on externalities.

Afferent Coupling

Related Quality Attributes: Coupling

Incoming Coupling. The number of classes in other packages that depend upon classes within the package is an indicator of the package's responsibility.

Number of Interfaces

Related Quality Attributes: Size

Total number of Interfaces.

Number of Classes

Related Quality Attributes: Size

Total number of classes.

Number of Entities

Related Quality Attributes: Size

Total number of Interfaces and classes.

Number of Overridden Methods

Related Quality Attributes: Complexity

The number of Overridden Methods.

C3

Related Quality Attributes: Coupling, Cohesion, Complexity

The max value of Coupling, Cohesion, Complexity metrics

Number of Packages

Related Quality Attributes: Size

Number of Packages in the project

Number of External Packages

Related Quality Attributes: Size

Number of External Packages referenced by the project

Number of External Entities

Related Quality Attributes: Size

Number of External classes and interfaces referenced by the project

Number of Problematic Classes

Number of classes with high coupling, high complexity or low cohesion in the project

Number of Highly Problematic Classes

Number of classes with high coupling, high complexity and low cohesion in the project

Lack of Tight Class Cohesion

Related Quality Attributes: Cohesion

The Lack of Tight Class Cohesion metric measures the lack cohesion between the public methods of a class. That is the relative number of directly connected public methods in the class. Classes having a high lack of cohesion indicate errors in the design.

Access to Foreign Data

Related Quality Attributes: Coupling

ATFD (Access to Foreign Data) is the number of classes whose attributes are directly or indirectly reachable from the investigated class. Classes with a high ATFD value rely strongly on data of other classes and that can be the sign of the God Class.

Instability

Related Quality Attributes:

Abstractness

Related Quality Attributes:

Normalized Distance

Related Quality Attributes:

InDegree

Related Quality Attributes:

In-degree of corresponding graph vertex of the class

OutDegree

Related Quality Attributes:

Out-degree of corresponding graph vertex of the class

Degree Degree

Related Quality Attributes:

Degree of corresponding graph vertex of the class

CodeMR for IntelliJ IDEA  - User Guide v2018