JavaNCSS Metric Results

[ package ] [ object ] [ method ] [ explanation ]

The following document contains the results of a JavaNCSS metric analysis, using JavaNCSS version 32.53.
JavaNCSS web site.

Packages

[ package ] [ object ] [ method ] [ explanation ]

Packages sorted by NCSS.

PackageClassesMethodsNCSSJavadocsJavadoc linesSingle lines commentMulti lines comment
com.rsmart.kuali.tools.liquibase714715374175916
com.rsmart.kuali.tools.ant.tasks128772530143796
Classes totalMethods totalNCSS totalJavadocsJavadoc linesSingle lines commentMulti lines comment
1923422623416066112

Objects

[ package ] [ object ] [ method ] [ explanation ]

TOP 30 classes containing the most NCSS.

ObjectNCSSMethodsClassesJavadocs
com.rsmart.kuali.tools.liquibase.DiffResult6618201
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler4851021
com.rsmart.kuali.tools.ant.tasks.MigrateData3422044
com.rsmart.kuali.tools.liquibase.Diff2113602
com.rsmart.kuali.tools.ant.tasks.GenerateChangeLog1312101
com.rsmart.kuali.tools.liquibase.XMLChangeLogParser58210
com.rsmart.kuali.tools.ant.tasks.RdbmsConfig4918015
com.rsmart.kuali.tools.ant.tasks.TableSet37903
com.rsmart.kuali.tools.ant.tasks.MigrateData.ProgressObserver34200
com.rsmart.kuali.tools.ant.tasks.DatabaseUpdateTask29301
com.rsmart.kuali.tools.ant.tasks.DropAllTask29300
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler.ExpandingAttributes281300
com.rsmart.kuali.tools.ant.tasks.LiquibaseSetup11303
com.rsmart.kuali.tools.ant.tasks.MigrateData.Incrementor10400
com.rsmart.kuali.tools.liquibase.XMLChangeLogParser.ErrorHandler9300
com.rsmart.kuali.tools.ant.tasks.Include6203
com.rsmart.kuali.tools.ant.tasks.MigrateData.ProgressObservable5100
com.rsmart.kuali.tools.ant.tasks.MigrateData.Runnable2100
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler.Comparator2100

TOP 30 classes containing the most methods.

ObjectNCSSMethodsClassesJavadocs
com.rsmart.kuali.tools.liquibase.DiffResult6618201
com.rsmart.kuali.tools.liquibase.Diff2113602
com.rsmart.kuali.tools.ant.tasks.GenerateChangeLog1312101
com.rsmart.kuali.tools.ant.tasks.MigrateData3422044
com.rsmart.kuali.tools.ant.tasks.RdbmsConfig4918015
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler.ExpandingAttributes281300
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler4851021
com.rsmart.kuali.tools.ant.tasks.TableSet37903
com.rsmart.kuali.tools.ant.tasks.MigrateData.Incrementor10400
com.rsmart.kuali.tools.ant.tasks.DatabaseUpdateTask29301
com.rsmart.kuali.tools.ant.tasks.DropAllTask29300
com.rsmart.kuali.tools.ant.tasks.LiquibaseSetup11303
com.rsmart.kuali.tools.liquibase.XMLChangeLogParser.ErrorHandler9300
com.rsmart.kuali.tools.ant.tasks.Include6203
com.rsmart.kuali.tools.ant.tasks.MigrateData.ProgressObserver34200
com.rsmart.kuali.tools.liquibase.XMLChangeLogParser58210
com.rsmart.kuali.tools.ant.tasks.MigrateData.ProgressObservable5100
com.rsmart.kuali.tools.ant.tasks.MigrateData.Runnable2100
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler.Comparator2100

Averages.

NCSS averageProgram NCSSClasses averageMethods averageJavadocs average
112.582,262.000.3712.321.79

Methods

[ package ] [ object ] [ method ] [ explanation ]

TOP 30 Methods containing the most NCSS.

MethodsNCSSCCNJavadocs
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler.startElement(String,String,String,Attributes)2571000
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler.endElement(String,String,String)117530
com.rsmart.kuali.tools.liquibase.DiffResult.addInsertDataChanges(ChangeSet,String)94300
com.rsmart.kuali.tools.ant.tasks.MigrateData.migrate(RdbmsConfig,RdbmsConfig,String,ProgressObservable)86250
com.rsmart.kuali.tools.liquibase.DiffResult.addMissingTableChanges(ChangeSet,Database)60250
com.rsmart.kuali.tools.liquibase.XMLChangeLogParser.parse(String,ChangeLogParameters,ResourceAccessor)55240
com.rsmart.kuali.tools.ant.tasks.MigrateData.getTableData(RdbmsConfig,RdbmsConfig,Incrementor)43161
com.rsmart.kuali.tools.liquibase.DiffResult.printChangeLog(String,Database,ChangeLogSerializer)4060
com.rsmart.kuali.tools.liquibase.DiffResult.addChangedColumnChanges(ChangeSet)40110
com.rsmart.kuali.tools.ant.tasks.GenerateChangeLog.execute()36110
com.rsmart.kuali.tools.ant.tasks.MigrateData.execute()3280
com.rsmart.kuali.tools.liquibase.Diff.compare()32120
com.rsmart.kuali.tools.liquibase.DiffResult.addMissingColumnChanges(ChangeSet,Database)32120
com.rsmart.kuali.tools.ant.tasks.GenerateChangeLog.exportData(Database,Database)2960
com.rsmart.kuali.tools.ant.tasks.MigrateData.getColumnMap(RdbmsConfig,RdbmsConfig,String)2790
com.rsmart.kuali.tools.liquibase.DiffResult.printChangeLog(PrintStream,Database,ChangeLogSerializer)2421
com.rsmart.kuali.tools.ant.tasks.DatabaseUpdateTask.execute()23130
com.rsmart.kuali.tools.ant.tasks.DropAllTask.execute()23110
com.rsmart.kuali.tools.liquibase.DiffResult.printResult(PrintStream)2310
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler.handleIncludedChangeLog(String,boolean,String)21130
com.rsmart.kuali.tools.ant.tasks.MigrateData.getTableRecordCount(Connection,String)2070
com.rsmart.kuali.tools.liquibase.DiffResult.printColumnComparison(Column,PrintStream)2080
com.rsmart.kuali.tools.liquibase.XMLChangeLogSAXHandler.extractZipFile(URL)1930
com.rsmart.kuali.tools.liquibase.Diff.removeDuplicateIndexes(Index)1791
com.rsmart.kuali.tools.liquibase.DiffResult.addMissingIndexChanges(ChangeSet)1660
com.rsmart.kuali.tools.liquibase.DiffResult.addMissingForeignKeyChanges(ChangeSet)1620
com.rsmart.kuali.tools.ant.tasks.GenerateChangeLog.openConnection(RdbmsConfig)1560
com.rsmart.kuali.tools.ant.tasks.MigrateData.ProgressObserver.update(Observable,Object)1560
com.rsmart.kuali.tools.liquibase.Diff.removeDuplicateUniqueConstraints(UniqueConstraint)1591
com.rsmart.kuali.tools.ant.tasks.MigrateData.openConnection(RdbmsConfig)1440

Averages.

Program NCSSNCSS averageCCN averageJavadocs average
2,262.008.313.350.10

Explanations

[ package ] [ object ] [ method ] [ explanation ]

Non Commenting Source Statements (NCSS)

Statements for JavaNCSS are not statements as specified in the Java Language Specification but include all kinds of declarations too. Roughly spoken, NCSS is approximately equivalent to counting ';' and '{' characters in Java source files.

Not counted are empty statements, empty blocks or semicolons after closing brackets. Of course, comments don't get counted too. Closing brackets also never get counted, the same applies to blocks in general.

Examples
Package declarationpackage java.lang;
Import declarationimport java.awt.*;
Class declaration
  • public class Foo {
  • public class Foo extends Bla {
Interface declarationpublic interface Able ; {
Field declaration
  • int a;
  • int a, b, c = 5, d = 6;
Method declaration
  • public void cry();
  • public void gib() throws DeadException {
Constructor declarationpublic Foo() {
Constructor invocation
  • this();
  • super();
Statement declaration
  • i = 0;
  • if (ok)
  • if (exit) {
  • if (3 == 4);
  • if (4 == 4) { ;
  • } else {
Label declarationfine :

In some cases consecutive semicolons are illegal according to the JLS but JavaNCSS still tolerates them (thought JavaNCSS is still more strict as 'javac'). Nevertheless they are never counted as two statements.

Cyclomatic Complexity Number (CCN)

CCN is also know as McCabe Metric. There exists a much hyped theory behind it based on graph theory, but it all comes down to simply counting 'if', 'for', 'while' statements etc. in a method. Whenever the control flow of a method splits, the "CCN counter" gets incremented by one.

Each method has a minimum value of 1 per default. For each of the following Java keywords/statements this value gets incremented by one:

  • if
  • for
  • while
  • case
  • catch

Also if the control flow of a method returns abortively the CCNvalue will be incremented by one:

  • if
  • for

An ordinary return at the end of method will not be counted.

Note that 'else', 'default', and 'finally' don't increment the CCN value any further. On the other hand, a simple method with a 'switch' statement and a huge block of 'case' statements can have a surprisingly high CCN value (still it has the same value when converting a 'switch' block to an equivalent sequence of 'if' statements).