52
Sebas&an Marek, So.ware Architect Magic behind the numbers So.ware metrics in prac&ce

PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Embed Size (px)

DESCRIPTION

We use static code analysis tools more often these days that create great reports and funky graphs. But do we understand what it all means? Software metrics tends to be magic numbers for a lot of people, but they don’t really have to be. Seb will introduce you to a few basic, the most popular software metrics and tools. He will explain to you what they mean and how you can use them to produce better software.

Citation preview

Page 1: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Sebas&an  Marek,  So.ware  Architect  

Magic  behind  the  numbers    

So.ware  metrics  in  prac&ce  

Page 2: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

@proofek  

•  a  Pole  living  in  Sheffield  •  over  12  years  in  

development  •  Pascal,  C++,  PHP,  perl,  

python,  Java  •  co-­‐author  of  2  PHP  books    •  big  fan  of  process  

automa&on  •  TDD  and  CI  •  occasionally  contributes  to  

open  source  projects  •  wants  to  be  a  knight  

Page 3: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Agenda  

• What  I  will  be  talking  about  •  Code  metrics  •  Design  metrics  

• What  I  will  not  be  talking  about  •  Project  metrics  

Page 4: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Most  effec&ve  code  quality  measure  

Page 5: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
Page 6: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

What  is  a  metric?  

“It is the mapping of a particular

characteristic of a measured entity to a numerical value”

Source: Object-Oriented Metrics in Practice

Page 7: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

So.ware  design  

“Good design quality metrics are not necessarily indicative of good designs. Likewise, bad design quality metrics are

not necessarily indicative of bad designs”

Source: Jdepend Docs

Page 8: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

System  maintenance    

•  Obsolete  documenta&on  

•  Convoluted  design  

•  Intensive  patch  mechanism  (hacking)  

•  Large  size  

•  Severe  duplica&on  

•  Obsolete  parts  (dead  code)  

•  Long  build  &mes  

•  Loss  of  original  developers  

Page 9: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Simple  metrics  

•  CLOC  –  comment  lines  of  code  

•  ELOC  –  executable  lines  of  code  

•  LOC  –  lines  of  code  

•  NCLOC  –  non  comment  lines  of  code  

•  NOP  –  number  of  packages  

•  NOC  –  number  of  classes  

•  NOM  –  number  of  methods  

Page 10: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Cycloma&c  Complexity  (CYCLO)  

Cyclomatic complexity measures the amount of decision logic in a single software module

Page 11: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Cycloma&c  Complexity  Number  (CCN)  

Condi3onal  statements:    •  ?  •  case  •  elseif  •  for  •  foreach  •  if  •  while  

Page 12: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

CCN2  

Condi3onal  statements:    •  ?  •  case  •  elseif  •  for  •  foreach  •  if  •  while  

•  &&  •  ||  •  or  •  and  •  xor  

Page 13: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Cycloma&c  Complexity  

Condi3onal  statements:    •  ?  •  case  •  elseif  •  for  •  foreach  •  if  •  while  

•  &&  •  ||  •  or  •  and  •  xor  •  catch  

Page 14: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Cycloma&c  complexity  -­‐  example  

class Foo { public function example() { if ($a == $b) { if ($a1 == $b1) { fiddle(); } elseif ($a2 == $b2) { fiddle(); } else { fiddle(); } } elseif ($e == $f) { for ($n = 0; $n < $h; $n++) { fiddle(); } } else { fiddle(); } } }

Page 15: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Cycloma&c  complexity  -­‐  example  

class Foo { public function example() { 1 if ($a == $b) { 2 if ($a1 == $b1) { 3 fiddle(); } elseif ($a2 == $b2) { 4 fiddle(); } else { fiddle(); } } elseif ($e == $f) { 5 for ($n = 0; $n < $h; $n++) { 6 fiddle(); } } else { fiddle(); } } }

Page 16: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

phploc  

phploc 1.6.1 by Sebastian Bergmann.Directories: 6Files: 20Lines of Code (LOC): 5478 Cyclomatic Complexity / Lines of Code: 0.13Comment Lines of Code (CLOC): 2143Non-Comment Lines of Code (NCLOC): 3335Namespaces: 0Interfaces: 1Classes: 18 Abstract: 2 (11.11%) Concrete: 16 (88.89%) Average Class Length (NCLOC): 191Methods: 151 Scope: Non-Static: 143 (94.70%) Static: 8 (5.30%) Visibility: Public: 116 (76.82%) Non-Public: 35 (23.18%) Average Method Length (NCLOC): 22 Cyclomatic Complexity / Number of Methods: 3.72Anonymous Functions: 0Functions: 2Constants: 4 Global constants: 3 Class constants: 1  

Page 17: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Cycloma&c  complexity  -­‐  thresholds  

Low   Avg   High   V.High  

Complexity   1-­‐4   5-­‐7   8-­‐10   >  11  

Page 18: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

JAVA  

Metric   Low   Avg   High   V.High  

CYCLO/Line  of  code   0.16   0.20   0.24   0.36  

LOC/Method   7   10   13   19.5  

NOM/Class   4   7   10   15  

Source:  Object-­‐Oriented  Metrics  in  Prac5ce  (based  on  45  Java  projects)  

Page 19: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

C++  

Metric   Low   Avg   High   V.High  

CYCLO/Line  of  code   0.20   0.25   0.30   0.45  

LOC/Method   5   10   16   24  

NOM/Class   4   9   15   22.5  

Source:  Object-­‐Oriented  Metrics  in  Prac5ce  (based  on  37  C++  projects)  

Page 20: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

WMC  and  AMW  

Weighted  Method  Count  –  total  complexity  of  a  class  

Average  Method  Weight  –  average  complexity  of  a  method  

Page 21: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

JAVA  

Source:  Object-­‐Oriented  Metrics  in  Prac5ce  (based  on  45  Java  projects)  

Metric   Low   Avg   High   V.High  

WMC   5   14   31   47  

AMW   1.1   2.0   3.1   4.7  

LOC/Class   28   70   130   195  

Page 22: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

C++  

Source:  Object-­‐Oriented  Metrics  in  Prac5ce  (based  on  37  C++  projects)  

Metric   Low   Avg   High   V.High  

WMC   4   23   72   108  

AMW   1.0   2.5   4.8   7.0  

LOC/Class   20   90   240   360  

Page 23: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Coverage  report  

Page 24: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Coverage  report  

Page 25: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

C.R.A.P  

Page 26: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

C.R.A.P  

Change  Risk  Analysis  and    Predic&ons  

Page 27: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

C.R.A.P  formula  

Code  coverage  =  100%  

Code  coverage  =  0%  

Page 28: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

C.R.A.P  thresholds  

Page 29: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

NPATH  –  acyclic  execu&on  path  complexity  

“NPATH is an objective measure of software complexity related to the ease with which software

can be comprehensively tested”

Edgar H. Sibley

Page 30: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

NPATH  –  acyclic  execu&on  path  complexity  

expressions Number of && and || operators in expression if NP(<if-range>)+NP(<expr>)+1 if-else NP(<if-range>)+NP(<else-range>)+NP(<expr>) while NP(<while-range>)+NP(<expr>)+1    for NP(<for-range>)+NP(<expr1>)+NP(<expr2>)+ NP(<expr3>)+1 break 1 continue 1 return 1 sequential 1 function call 1

Page 31: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

NPATH  –  example  

class Foo { public function example() {

if ($a == $b) { if ($a1 == $b1) { fiddle(); } else { fiddle(); } }

if ($e == $f && $g == $z) { for ($n = 0; $n < $h; $n++) { fiddle(); } }

return true; } }

Page 32: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

NPATH  –  example  

class Foo { public function example() {

if ($a == $b) { if ($a1 == $b1) { fiddle(); } else { 3 fiddle(); } }

if ($e == $f && $g == $z) { for ($n = 0; $n < $h; $n++) { fiddle(); 4 } }

return true; 1 } }

Page 33: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

PHP  Depend  

PHP_Depend 0.10.6 by Manuel PichlerParsing source files:.................... 20Executing CyclomaticComplexity-Analyzer:............. 261Executing ClassLevel-Analyzer:............ 247Executing CodeRank-Analyzer:. 28Executing Coupling-Analyzer:............. 267Executing Hierarchy-Analyzer:............ 246Executing Inheritance-Analyzer:. 30Executing NPathComplexity-Analyzer:.............. 283Executing NodeCount-Analyzer:........ 174Executing NodeLoc-Analyzer:.......... 205Generating pdepend log files, this may take a moment.Time: 00:05; Memory: 25.50Mb  

Page 34: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

PHP  Mess  Detector  

Page 35: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Overview  pyramid  

Page 36: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Size  and  complexity  –  direct  metrics  

Page 37: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Size  and  complexity  –  computed  propor&ons  

Page 38: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

System  coupling  –  direct  metrics  

Page 39: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

System  coupling  –  computed  propor&ons  

Page 40: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

System  inheritance  

Page 41: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Complete  Overview  Pyramid  

Page 42: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

PHP  

Metric   Low   Avg   High  

CYCLO/LOC   0.16   0.20   0.24  

LOC/NOM   7   10   13  

NOM/NOC   4   7   10  

NOC/NOP   6   17   26  

CALLS/NOM   2.01   2.62   3.2  

FANOUT/CALLS   0.56   0.62   0.68  

ANDC   0.25   0.41   0.57  

AHH   0.09   0.21   0.32  

hBp://pdepend.org/  

Page 43: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Metrics  visualisa&on  with  Sonar  

Page 44: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Metrics  visualisa&on  with  Sonar  

Page 45: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Viola&ons  repor&ng  

Page 46: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

SIG  Maintainability  Model  

-­‐-­‐  -­‐  0  +  ++    

Very  bad  Bad  Average  Good  Very  good  

Page 47: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Technical  Debt  

Page 48: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Summary  

“We  believe  that  soIware  metrics,  in  general,  are  just  tools.  No  single  metric  can  tell  the  whole  story;  it’s  just  one  more  data  point.  “  

“Metrics  are  meant  to  be  used  by  developers,  not  the  other  way  around  –  the  metric  should  work  for  you,  you  should  not  have  to  work  

for  the  metric.  “  

“Metrics  should  never  be  an  end  unto  themselves.  Metrics  are  meant  to  help  you  think,  not  to  do  the  thinking  for  you.”  

•  Alberto  Savoia  

Page 49: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Resources  

•  PHP  Depend  -­‐  hmp://pdepend.org/  •  PHP  Mess  Detector  -­‐  hmp://phpmd.org/  •  Manuel’s  home  page  -­‐  hmp://manuel-­‐pichler.de/  •  PHPUnit  -­‐  hmp://www.phpunit.de/  •  phploc  -­‐  hmp://sebas&anbergmann.github.com/phploc/  •  Sonar  -­‐  hmp://www.sonarsource.org/  

Page 50: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Object-­‐Oriented  Metrics  in  Prac&ce  

“Object-­‐Oriented  Metrics  in  Prac&ce”  by  Michele  Lanza  and  Radu  Marinescu  (ISBN  978-­‐3540244295)  

 

Page 51: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Thanks  to…  

•  hmp://www.flickr.com/photos/romainguy/102073478/  •  hmp://www.flickr.com/photos/shanafin/615680234/  •  hmp://www.flickr.com/photos/pahudson/3080270873/  •  hmp://www.flickr.com/photos/smohundro/2243554264/  •  hmp://www.flickr.com/photos/m_a_melendez/5956157581/  •  hmp://www.flickr.com/photos/elkit/7182541802/  •  hmp://www.flickr.com/photos/rickyromero/4209571303/    

Page 52: PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice

Ques&ons?  

Ques&ons?  

hmps://joind.in/6445