• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
 

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

on

  • 4,025 views

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? ...

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.

Statistics

Views

Total Views
4,025
Views on SlideShare
4,020
Embed Views
5

Actions

Likes
2
Downloads
19
Comments
0

1 Embed 5

http://protalk.me 5

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Magic  behind  the  numbers    So.ware  metrics  in  prac&ce  Sebas&an  Marek,  So.ware  Architect  
    • •  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  @proofek  
    • • What  I  will  be  talking  about   •  Code  metrics   •  Design  metrics   • What  I  will  not  be  talking  about   •  Project  metrics  Agenda  
    • Most  effec&ve  code  quality  measure  
    • “It is the mapping of a particular characteristic of a measured entity to a numerical value” Source: Object-Oriented Metrics in PracticeWhat  is  a  metric?  
    • “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 DocsSo.ware  design  
    • •  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  System  maintenance    
    • •  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  Simple  metrics  
    • Cyclomatic complexity measures the amount of decision logic in a single software moduleCycloma&c  Complexity  (CYCLO)  
    • Condi3onal  statements:     •  ?   •  case   •  elseif   •  for   •  foreach   •  if   •  while  Cycloma&c  Complexity  Number  (CCN)  
    • Condi3onal  statements:     •  ?   •  &&   •  case   •  ||   •  elseif   •  for   •  or   •  foreach   •  and   •  if   •  xor   •  while  CCN2  
    • Condi3onal  statements:     •  ?   •  &&   •  case   •  ||   •  elseif   •  for   •  or   •  foreach   •  and   •  if   •  xor   •  while   •  catch  Cycloma&c  Complexity  
    • 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(); } }}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(); } }}Cycloma&c  complexity  -­‐  example  
    • phploc 1.6.1 by Sebastian Bergmann. Directories: 6 Files: 20 Lines of Code (LOC): 5478 Cyclomatic Complexity / Lines of Code: 0.13 Comment Lines of Code (CLOC): 2143 Non-Comment Lines of Code (NCLOC): 3335 Namespaces: 0 Interfaces: 1 Classes: 18 Abstract: 2 (11.11%) Concrete: 16 (88.89%) Average Class Length (NCLOC): 191 Methods: 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.72 Anonymous Functions: 0 Functions: 2 Constants: 4 Global constants: 3 Class constants: 1  phploc  
    • Low   Avg   High   V.High   Complexity   1-­‐4   5-­‐7   8-­‐10   >  11  Cycloma&c  complexity  -­‐  thresholds  
    • 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)  JAVA  
    • 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)  C++  
    • Weighted  Method  Count  –  total  complexity  of  a  class   Average  Method  Weight  –  average  complexity  of  a  method  WMC  and  AMW  
    • 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   Source:  Object-­‐Oriented  Metrics  in  Prac5ce  (based  on  45  Java  projects)  JAVA  
    • 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   Source:  Object-­‐Oriented  Metrics  in  Prac5ce  (based  on  37  C++  projects)  C++  
    • Coverage  report  
    • Coverage  report  
    • C.R.A.P  
    • Change   Risk   Analysis  and     Predic&ons  C.R.A.P  
    • Code  coverage  =  100%   Code  coverage  =  0%  C.R.A.P  formula  
    • C.R.A.P  thresholds  
    • “NPATH is an objective measure of software complexity related to the ease with which software can be comprehensively tested” Edgar H. SibleyNPATH  –  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 NPATH  –  acyclic  execu&on  path  complexity  
    • 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; }}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 }}NPATH  –  example  
    • PHP_Depend 0.10.6 by Manuel Pichler Parsing source files: .................... 20 Executing CyclomaticComplexity-Analyzer: ............. 261 Executing ClassLevel-Analyzer: ............ 247 Executing CodeRank-Analyzer: . 28 Executing Coupling-Analyzer: ............. 267 Executing Hierarchy-Analyzer: ............ 246 Executing Inheritance-Analyzer: . 30 Executing NPathComplexity-Analyzer: .............. 283 Executing NodeCount-Analyzer: ........ 174 Executing NodeLoc-Analyzer: .......... 205 Generating pdepend log files, this may take a moment. Time: 00:05; Memory: 25.50Mb  PHP  Depend  
    • PHP  Mess  Detector  
    • Overview  pyramid  
    • Size  and  complexity  –  direct  metrics  
    • Size  and  complexity  –  computed  propor&ons  
    • System  coupling  –  direct  metrics  
    • System  coupling  –  computed  propor&ons  
    • System  inheritance  
    • Complete  Overview  Pyramid  
    • 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/  PHP  
    • Metrics  visualisa&on  with  Sonar  
    • Metrics  visualisa&on  with  Sonar  
    • Viola&ons  repor&ng  
    • -­‐-­‐   Very  bad   -­‐   Bad   0   Average   +   Good   ++   Very  good    SIG  Maintainability  Model  
    • Technical  Debt  
    • “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  Summary  
    • •  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/  Resources  
    • “Object-­‐Oriented  Metrics  in  Prac&ce”  by  Michele  Lanza  and   Radu  Marinescu  (ISBN  978-­‐3540244295)    Object-­‐Oriented  Metrics  in  Prac&ce  
    • •  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/    Thanks  to…  
    • Ques&ons?   hmps://joind.in/6445  Ques&ons?