JavaNCSS Metric Results

[ package ] [ object ] [ function ] [ explanation ]

The following document contains the results of a JavaNCSS metric analysis.
JavaNCSS web site.

Packages

[ package ] [ object ] [ function ] [ explanation ]

Packages sorted by NCSS.

PackageClassesFunctionsNCSSJavadocsJavadoc linesSingle lines commentMulti lines comment
siouxsie.mvc.impl13804422012438183
siouxsie.mvc.test719160940148
siouxsie.mvc.spring111100846715
siouxsie.mvc11288225120019
Classes totalFunctions totalNCSS totalJavadocsJavadoc linesSingle lines commentMulti lines comment
321387846233046265

Objects

[ package ] [ object ] [ function ] [ explanation ]

TOP 30 classes containing the most NCSS.

ObjectNCSSFunctionsClassesJavadocs
siouxsie.mvc.spring.SpringObjectFactory871108
siouxsie.mvc.impl.ScreenSupport672414
siouxsie.mvc.impl.Controller611303
siouxsie.mvc.impl.PanelScreenHandler42501
siouxsie.mvc.test.JFrameScreenLauncher26111
siouxsie.mvc.test.ScreenCreator23101
siouxsie.mvc.ActionTriggerDescription21701
siouxsie.mvc.test.ConfigurationFinder20312
siouxsie.mvc.impl.ExceptionHandler19501
siouxsie.mvc.test.ConsoleActionTrigger18401
siouxsie.mvc.test.LaunchConfiguration16501
siouxsie.mvc.impl.ScreenExceptionHandler14301
siouxsie.mvc.impl.ActionTrigger13400
siouxsie.mvc.impl.ScreenResult13401
siouxsie.mvc.impl.InitializerInterceptor12501
siouxsie.mvc.impl.SiouxsieMVCConfigurationProvider12601
siouxsie.mvc.Message11301
siouxsie.mvc.impl.InitializerContainer10301
siouxsie.mvc.impl.GuiceInitializer9401
siouxsie.mvc.impl.ForwardAction8304
siouxsie.mvc.test.TestContainerProvider7401
siouxsie.mvc.IActionTrigger6405
siouxsie.mvc.IScreen6505
siouxsie.mvc.IScreenHandler4304
siouxsie.mvc.IInitializer3203
siouxsie.mvc.impl.SimpleActionLauncher3101
siouxsie.mvc.IActionLauncher2102
siouxsie.mvc.IController2100
siouxsie.mvc.IInitializerContainer2102
siouxsie.mvc.IValueStackAware2102

TOP 30 classes containing the most functions.

ObjectNCSSFunctionsClassesJavadocs
siouxsie.mvc.impl.ScreenSupport672414
siouxsie.mvc.impl.Controller611303
siouxsie.mvc.spring.SpringObjectFactory871108
siouxsie.mvc.ActionTriggerDescription21701
siouxsie.mvc.impl.SiouxsieMVCConfigurationProvider12601
siouxsie.mvc.impl.ExceptionHandler19501
siouxsie.mvc.impl.InitializerInterceptor12501
siouxsie.mvc.impl.PanelScreenHandler42501
siouxsie.mvc.IScreen6505
siouxsie.mvc.test.LaunchConfiguration16501
siouxsie.mvc.IActionTrigger6405
siouxsie.mvc.impl.ActionTrigger13400
siouxsie.mvc.impl.GuiceInitializer9401
siouxsie.mvc.impl.ScreenResult13401
siouxsie.mvc.test.ConsoleActionTrigger18401
siouxsie.mvc.test.TestContainerProvider7401
siouxsie.mvc.impl.ForwardAction8304
siouxsie.mvc.impl.InitializerContainer10301
siouxsie.mvc.impl.ScreenExceptionHandler14301
siouxsie.mvc.IScreenHandler4304
siouxsie.mvc.Message11301
siouxsie.mvc.test.ConfigurationFinder20312
siouxsie.mvc.IInitializer3203
siouxsie.mvc.IActionLauncher2102
siouxsie.mvc.IController2100
siouxsie.mvc.IInitializerContainer2102
siouxsie.mvc.impl.SimpleActionLauncher3101
siouxsie.mvc.IValueStackAware2102
siouxsie.mvc.test.IScreenLauncher2102
siouxsie.mvc.test.JFrameScreenLauncher26111
Averages.
NCSS averageProgram NCSSClasses averageFunctions averageJavadocs average
16.94784.000.094.311.94

Functions

[ package ] [ object ] [ function ] [ explanation ]

TOP 30 functions containing the most NCSS.

FunctionsNCSSCCNJavadocs
siouxsie.mvc.impl.PanelScreenHandler.displayScreen(ActionInvocation)29130
siouxsie.mvc.test.ScreenCreator.create(LaunchConfiguration)2140
siouxsie.mvc.spring.SpringObjectFactory.setAutowireStrategy(int)2061
siouxsie.mvc.impl.Controller.init()1750
siouxsie.mvc.spring.SpringObjectFactory.getClassInstance(String)1450
siouxsie.mvc.test.ConsoleActionTrigger.triggerActionLaunch(String,String,Map)1340
siouxsie.mvc.test.JFrameScreenLauncher.launch(Collection)1320
siouxsie.mvc.test.ConfigurationFinder.getConfigurations()1171
siouxsie.mvc.spring.SpringObjectFactory.findAutoWiringBeanFactory(ApplicationContext)1071
siouxsie.mvc.spring.SpringObjectFactory.buildBean(String,Map,boolean)931
siouxsie.mvc.spring.SpringObjectFactory.buildBean(Class,Map)821
siouxsie.mvc.impl.ScreenExceptionHandler.execute(ActionInvocation)710
siouxsie.mvc.spring.SpringObjectFactory.autoWireBean(Object,AutowireCapableBeanFactory)731
siouxsie.mvc.test.JFrameScreenLauncher.SelectionListener.valueChanged(ListSelectionEvent)740
siouxsie.mvc.impl.Controller.executeAction(String,String,Map)620
siouxsie.mvc.impl.Controller.propertyChange(PropertyChangeEvent)621
siouxsie.mvc.impl.ExceptionHandler.execute(ActionInvocation)610
siouxsie.mvc.ActionTriggerDescription.ActionTriggerDescription(String,String,Map)510
siouxsie.mvc.test.ConfigurationFinder.ConfigurationFinder(Class)520
siouxsie.mvc.impl.ActionTrigger.triggerActionLaunch(String,String,Map)410
siouxsie.mvc.impl.Controller.addConfigurationProvider(ConfigurationProvider)421
siouxsie.mvc.impl.ScreenSupport.LaunchSwingAction.LaunchSwingAction(String,String,Map)410
siouxsie.mvc.impl.ScreenSupport.configureSwingAction(Action,String,String,Icon)410
siouxsie.mvc.Message.Message(String,Severity)410
siouxsie.mvc.impl.InitializerContainer.initializeAction(Object)320
siouxsie.mvc.impl.InitializerContainer.initializeScreen(IScreen)320
siouxsie.mvc.impl.InitializerInterceptor.intercept(ActionInvocation)310
siouxsie.mvc.impl.PanelScreenHandler.displayMessages(Collection)320
siouxsie.mvc.impl.ScreenSupport.configureSwingAction(Action,String,String)310
siouxsie.mvc.impl.ScreenSupport.findValueFromStack(String,Class)310

Averages.

Program NCSSNCSS averageCCN averageJavadocs average
784.003.181.430.26

Explanations

[ package ] [ object ] [ function ] [ 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.

ExamplesComments
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 {
expression, if, else, while, do, for, switch, break, continue, return, throw, synchronized, catch, finally
Label declarationfine :normal, case, default
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 (no matter if it's a function or a procedure) will not be counted.Note that else, default, and finallydon't increment the CCN value any further. On the other hand, a simple method with a switchstatement and a huge block of casestatements can have a surprisingly high CCN value (still it has the same value when converting a switchblock to an equivalent sequence of ifstatements).The first article about this trivial software metric is one of the most cited papers in computer science. Sometimes you just must be the first to point out some basic shit and you are history. It seems just like a wonder that nobody was able to package Lines of Code in a more scientific manner. Now it's too late to label someone's name on it :).