Project Analyzer

Design quality report – PicInfo sample application

Source file size

Source file size Minimum Maximum Average
Source lines (LINES) 50 249 145
Lines of code (LLOC) 13 144 74
Procedures 4 7 5.8
Kilobytes 2 10 5.6

LINES = Total number of physical source lines.
LLOC  = Logical lines of code, excluding whitespace and comments.

Procedure length

Lines of code (LLOC) Procs % Distribution
1–4 12 46% ********************
5–9 9 35% ***************
10–14 1 4% **
15–19 1 4% **
20–39 2 8% ***
40–59 0 0%  
60–79 0 0%  
80 1 4% **
Total procedures 26 100%  
       
Longest procedure 80 lines  
Average procedure 9.7 lines  

LLOC  = Logical lines of code, excluding whitespace and comments.

Procedure complexity

Cyclomatic complexity

Complexity Procs % Description
1–4 24 92% Simple procedure
5–10 1 4% Well structured, stable
11–20 0 0% More complex
21–50 1 4% Complex, alarming
51– 0 0% Error-prone, troublesome
Total 26 100%  

Cyclomatic complexity (CC) = Number of decisions + 1. Recommended: 1–10.

Average complexity 2.65 CC = Number of decisions + 1
Total complexity 44 TCC = Total number of decisions + 1
Decision density 0.27 DECDENS = CC/LLOC, complexity per line of code
Bad fix probability 10% Crude estimate

Bad fix probability:
Probability of introducing a new error while trying to fix a previous error.

Nesting of conditional statements

Nesting depth Procs % Description
0 12 46% No conditional statements in procedure
1 11 42% Conditional statements not nested
2–5 3 12% Conditional statements nested moderately
6– 0 0% Deeply nested complex procedure
Total 26 100%  
       
Max depth 5 Most deeply nested procedure

Depth of conditional statement nesting in procedure (DCOND). Recommended: 0–5.

Structural fan-in and internal reuse

SFIN Procs % Description
0–1 28 97% No reuse
2–4 1 3% Slight reuse
5–9 0 0% Significant reuse
10– 0 0% High reuse
Total 29 100%  
       
Maximum SFIN 2 Most reused procedure
Average SFIN 0.7    

Structural fan-in (SFIN) = number of procedures that call this procedure.
Higher values indicates more internal reuse of code.

Understandability

Comments

Logical lines      
Lines of code (LLOC) 371 52%  
Lines of comment (LLOC') 173 24%  
Lines of whitespace (LLOW) 173 24%  
Total logical lines (LLINES) 717 100%  
       
Comment types      
Full-line comments 173 75%  
End-of-line comments 58 25%  
All comments 231 100%  
       
Comment contents      
Meaningful comments (MCOMM) 224 97%  
Meaningless comments 7 3%  
All comments 231 100%  
       
Commented-out code      
Comments with commented-out code 1 0% approximate
Other comments 230 100% approximate
All comments 231 100%  
       
Comment density      
Meaningful comments per code line 60%   MCOMM% = MCOMM/LLOC

Meaningful comments in proc Procs % Distribution
0 (uncommented procedure) 1 4% **
1–2 11 42% ********************
3–5 9 35% ****************
6–9 0 0%  
10–30 5 19% *********
Total procedures 26 100%  
       
Average MCOMM 5.4 Average meaningful comments/procedure

Logical line: Lines continued on several lines are counted as one logical line.
Lines excluded by conditional compilation are not included in the logical line counts.
A meaningful comment contains text rather than just whitespace or punctuation.

Naming

Total number of names 168  
Unique names 144  
Name uniqueness ratio UNIQ 86%  

Average name length Chars Details
Procedure names (LENP) 10.9 excl. event handlers/implements procs
Variables names (LENV) 9.3 variables and parameters
• Global and module-level 10.8  
• Local variables 7.9  
• Parameters 9.4 excl. event handler/implements params
Constant names (LENC) 16.1 excl. enum and compiler constants
Enum constant names 16.4  
Control names 6.7  
Other names 10.4  
All names (LEN) 11.3 Average length of names

Name length % Distribution
1 1%  
3 1%  
4–6 17% *************
7–9 27% ********************
10–14 27% ********************
15–19 17% ************
20–24 11% ********

Line length and whitespace

Line length Lines Distribution    
0 173 ******************    
01–19 114 ************    
20–39 190 ********************    
40–59 129 **************    
60–79 71 *******    
80–99 26 ***    
100–119 11 *    
120–139 5 *    
140–159 2      
160–179 1      
180–199 1      
200–296 2      
Total lines 725      

Average line 32 characters
Longest line 296 characters
Length >80 45 6% of lines
Length >132 7 1% of lines

Line length is visible length of physical lines.
Indentation is included in length but trailing spaces are not.

Whitespace

Blank lines 24%  
Non-blank 76%  
Whiteness 66%  

Whiteness means blank lines, indentation and unused space after end-of-line.
Assumption: Code is viewed with a fixed-pitch font at a width of 80 characters.

Indentation

Of all non-blank lines, 45% are indented.
Average indentation: 3 spaces.
Maximum indentation: 28 spaces.

Tab stops

________________________________________________________________________________

          10        20        30        40        50        60        70        
0123456789|123456789|123456789|123456789|123456789|123456789|123456789|123456789
+ · +   +   +   ·   +   ·   ·                                                   
________________________________________________________________________________

+ = common tab stop
· = uncommon tab stop, less than 1.00% of lines
  = no tab stop here

Most likely tab width: 4

Object-orientedness

Object-orientedness of code 59% (executable statements)
Object-orientedness of data 91% (variables)

Object-orientedness is the relative amount of code or data in class-like modules.
OO code or data found in: 2 Classes and 1 Form.
Non-OO code or data found in: 1 standard module.

Problems

Dead code Problematic Total %
Dead procedures 3 29 10%
Removable code lines in procs 11 254 4%
Dead variables 2 25 8%
Dead constants 2 20 10%
Dead Types 0 6 0%
Dead Enums 0 2 0%
Overall deadness     5%

Dead code counts do not include exposed code.

Problems with declarations Problematic Total %
Missing variable type 0 25 0%
Excess var/const scope 0 45 0%
No var/const scope 0 45 0%
Missing ByVal/ByRef 0 37 0%
Missing function type 0 21 0%
Excess procedure scope 1 29 3%
No procedure scope 0 29 0%

Problem summary Value
Problems reported 46
Problems/line of code (LLOC) 0.1
Problems/procedure 1.6

Filter: <Default>

Quality assessment

Quality (0-10) Level Based on
Complexity 8.6 Cyclomatic complexity
Internal reuse 0.9 Structural fan-in
Understandability 9.3 Comments and name lengths
Dead code 8.8 Overall deadness
Overall quality level 7.0 Good

Quality levels:
0..4 = Questionable, 5..6 = Moderate, 7..8 = Good, 9..10 = Excellent

Quality levels are based on:
Complexity: Bad fix probability (5% is best, 40% or above is worst)
Dead code: Overall deadness (0% is best, 40% or above is worst)
Internal reuse: Amount of procedures reused (30% represents level 8)
Understandability: MCOMM% (20% represents level 8) and LEN (10.0 is level 8)