Pennington— The Name in Software Engineering Automation

XTRAN Demonstration:  Analyze Cyclomatic Complexity of C

The following analysis used an XTRAN rules file comprising about 200 non-comment lines of "meta-code" (XTRAN's rules language) to analyze C code and show the cyclomatic complexity of each function.

Cyclomatic complexity is essentially a count of the different logic paths through a function's body.  It is regarded by many programming managers as a measure of code maintainability.

Note that the analysis output shows not only the complexity measure for each function, but also the logic flow from which it was determined, eliding "straight line code" that doesn't affect the measure.

The XTRAN rules themselves are not particularly specific to C; they can easily be adapted to analyze any 3GL language.

The input to and output from XTRAN are untouched.



* Input to XTRAN:

short func(short i, long j)
{
	short k = 0;

	if (i < j)				/*predicate node 1*/
	    {
	    for ( ; i < j; i++)			/*predicate node 2*/
		k++;
	    }
	return;
}

int main(int numarg, char **pp_args_txt)
{
	short i, j, k;

	i = 1;
	if (i < 2)				/*predicate node 1*/
	    {
	    i = 2;
	    for (j = 1; j < i; j++)		/*predicate node 2*/
		k = j;
	    if (j < i)				/*predicate node 3*/
		{
		j = i;
		k = j;
		}
	    }
	i = j;
	func();
	switch (i)				/*this won't count*/
	    {
	    case 1 :				/*this won't count*/
	    case 2 :				/*predicate node 4*/
		j = k;
		break;

	    case 3 :				/*this won't count*/
	    case 4 :				/*predicate node 5*/
		if (i == j)			/*predicate node 6*/
		    i = k;

	    default :				/*predicate node 7*/
		k = 1;
		break;
	    }
	i = j;
	while (j < i)				/*predicate node 8*/
	    j++;
	return (1);
}


* Output from XTRAN:

demcyc-a.cyc — Cyclomatic complexity analysis
Created 1997-08-08:02:41:33 by Pennington's XTRAN software engineering
  automation meta-tool using cyclo-c.xac rules, version V1.01

(n) is (arbitrary) node number in function's flow graph;
(n*) indicates a predicate node.


func()
    if (1*)
        for (2*)
            ... (3)
    ... (4)

Cyclomatic complexity of func():  2

main()
    if (1*)
        ... (2)
        for (3*)
            ... (4)
        if (5*)
            ... (6)
    ... (7)
    switch (8)
        case (9*)
            ... (10)
        case (11*)
            if (12*)
                ... (13)
        default (14*)
            ... (15)
    while (16*)
        ... (17)
    ... (18)

Cyclomatic complexity of main():  8


COPYRIGHT 2012; reproduction prohibited without permission.  Revised 2010-02-17

XTRAN is a trademark of Pennington Systems Incorporated.

  Pennington Systems Incorporated
2820 N. Pinal Avenue, Suite 12
Casa Grande, Arizona 85122-7927
USA


  Phone:  +1(480)626-5503
Fax:  +1(480)626-7618
Email:  Info@Pennington.com
Web:  http://WWW.Pennington.com