Cyclomatic Complexity Metric
James Derrick, Pascal Programmer
v1.0.a0 © 1997 James Derrick
If you have problems or suggestions, email me at jamesderrick@pobox.com.
If possible, please use the bug reporting application that I have provided with the
plugin.
The Metrics package contains the following:
Download the Metrics package
Aim
This is a plug in for the Codewarrior IDE to calculate the cyclomatic complexity
metric for Pascal source code. I am putting this up for comment on its usefulness.
I am particularly interested in any problems that you might encounter with it. I
am also interested in suggestions for other coding errors that you think that you
think that this code analyser should pick up.
Background
The cyclomatic complexity metric is a measure complexity of a routine, originally
described by Tom McCabe. More information is available in a
large number of references, including "Code Complete".
The score is basically the number of decision points in a routine + 1. Decision points
are taken to be
if
while
repeat
for
and
or
and each limb of a case statement.
If the routine has a score of 5 or less, it is fairly simple.
If the score is 6-10, it has been suggested that you start to think about ways of
simplifying it.
Greater than 10 you should simplify the routine.
The way that I have implemented it
Scores of 8-10 will give you a note.
Scores of 11-19 will give you a warning
Scores of 20 or greater will give you an error.
Use
I have implemented this as a compiler plugin for the Codewarrior IDE.
To use it:
1. Put the file "Metrics" into the compiler plugins folder.
2. Put the folder "Metrics PPC" into the Pascal folder inside the (Project
Stationery) folder.
3. Create a new project using the Metrics stationery.
4. Add any files that you wish to analyse to the project.
5. Run, compile or make the project.
Note, the code analyser will only analyse TEXT files with filenames ending in .p
or .pas.
Although I have implemented this as a compiler extension, no object code is generated,
and the files are never updated. No attempt is made to change the source code in
any way. The original files are opened with read only permission, and closed as soon
as the file has been read. The plug in will not check the correctness of your code,
only its complexity.
Although I don't try to change the source in any way, it would be sensible to have
a backup before you run this analyser over it.
Requirements
Only works on a PPC. Requires Codewarrior 9 or greater. (I should mention that I
have only tested it on Codewarrior 11).
Legal Bits
I am uploading this plugin FREE, as a service to the Pascal community, and in the
hope that you will help me find any errors in my code. It is worth what you paid
for it! I make no guarantee explicitly or implicitly that the plugin will work, that
it is bug free, that it won't destroy your valuable source code, reformat your hard
disc, telephone ex partners or notify Microsoft about pirated software on your hard
disk. If you choose to use this plugin it is entirely at your own risk. Changing
your source code to decrease complexity may introduce new bugs. I retain all rights
to the ownership of the plugin. The source code is a trade secret belonging to me,
James Derrick. Any attempt to disassemble or reverse engineer the plugin is expressly
prohibited.
1. McCabe, Tom. 1976. "A Complexity
Measure." IEEE Transactions on Software Engineering, SE-2, no. 4 (December):
308-20.
2. McConnell, Steve. 1993. "Code Complete". Redmond:
Microsoft Press.
Updated: 17-June-1997