Codemr: For Intellij Idea

Download as pdf or txt
Download as pdf or txt
You are on page 1of 33

CodeMR

for IntelliJ IDEA

User Guide
v2018
Installation 2

Overview 3

CodeMR Model Editor 4


Overview 4
Graph List 5
Working Set List 6
Metric Distribution 7
CodeMR Metric Chart 7
Package Structure 8
Sunburst 9
TreeMap 11
Package Dependency 12
Project Outline 13

CodeMR Main Tool Window 16


Outline View 16
Graph Relations 16
Metric Queries 18
Label Queries 18

CodeMR Metrics Tool Window 19

CodeMR Graph Editor 20


Drawing a New Graph 20
Graph Editor Toolbar 22
Modularization 23

Report Generation 24

Appendix A: Supported Metric List 28

CodeMR for IntelliJ IDEA - User Guide v2018


1
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:
● Download CodeMR plugin to your local file system from ​CodeMR website or from
IntelliJ Plugin repository site​.
● Select IntelliJ File Menu→Settings→Plugins→Install Plugin from disk

CodeMR for IntelliJ IDEA - User Guide v2018


2
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 for IntelliJ IDEA - User Guide v2018


3
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.:

CodeMR for IntelliJ IDEA - User Guide v2018


4
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.

CodeMR for IntelliJ IDEA - User Guide v2018


5
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

CodeMR for IntelliJ IDEA - User Guide v2018


6
● 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:

CodeMR for IntelliJ IDEA - User Guide v2018


7
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 Char​t.
● It is zoomable, you can change the zoom level by clicking the circles.

CodeMR for IntelliJ IDEA - User Guide v2018


8
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 Char​t.
● It is zoomable, you can change the zoom level by clicking the arc.

CodeMR for IntelliJ IDEA - User Guide v2018


9
Zoomed to package:

CodeMR for IntelliJ IDEA - User Guide v2018


10
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 Char​t.
● It is zoomable, you can change the zoom level by clicking the rectangles.

CodeMR for IntelliJ IDEA - User Guide v2018


11
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
CodeMR for IntelliJ IDEA - User Guide v2018
12
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.

CodeMR for IntelliJ IDEA - User Guide v2018


13
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 for IntelliJ IDEA - User Guide v2018


14
CodeMR for IntelliJ IDEA - User Guide v2018
15
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.

CodeMR for IntelliJ IDEA - User Guide v2018


16
CodeMR for IntelliJ IDEA - User Guide v2018
17
Metric Queries

Label Queries

CodeMR for IntelliJ IDEA - User Guide v2018


18
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 for IntelliJ IDEA - User Guide v2018


19
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.

CodeMR for IntelliJ IDEA - User Guide v2018


20
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.

CodeMR for IntelliJ IDEA - User Guide v2018


21
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

CodeMR for IntelliJ IDEA - User Guide v2018


22
● 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.

CodeMR for IntelliJ IDEA - User Guide v2018


23
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.

CodeMR for IntelliJ IDEA - User Guide v2018


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

CodeMR for IntelliJ IDEA - User Guide v2018


25
You can also get more information about a metric, by clicking question mark icon next 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.

CodeMR for IntelliJ IDEA - User Guide v2018


26
Graph part displays the list of graph generated with CodeMR.

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

CodeMR for IntelliJ IDEA - User Guide v2018


27
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

CodeMR for IntelliJ IDEA - User Guide v2018


28
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

CodeMR for IntelliJ IDEA - User Guide v2018


29
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

CodeMR for IntelliJ IDEA - User Guide v2018


30
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.

CodeMR for IntelliJ IDEA - User Guide v2018


31
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:
TODO
Abstractness
Related Quality Attributes:
TODO
Normalized Distance
Related Quality Attributes:
TODO
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


32

You might also like