Thomas HaugMATHEMA Software GmbH
80% der Projektkostenfallen nach derEntwicklung an                  http://users.jyu.fi/~koskinen/smcosts.htm
Thin Client                Thick Client         Presentation layer           Application layer           Integration layer...
Thin Client                Thick Client         Presentation layer                                          KEEP IT       ...
© by AskDaveTaylor at flickr
© by DArcy Norman at flickr                 9
> Process   –   Test Driven Development   –   Short development cycles> Runtime Analysis   –   Test Coverage   –   Memory ...
 Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur   und Werkzeuge                        ...
70er Jahre         Basis MetricsSLOC     Complexity      ...LOC    McCabe    Halstead
Quellcodezeilen (Source Lines of Code - SLOC) Physikalische Codezeilen (Lines of code - LOC)   o Abzählen von Codezeilen,...
 LOC vs lLOC for (int i = 0; i < 10; i++)            LOC = 2    System.out.println(i + ". value");   lLOC = 2 for (int i ...
 Cyclomatic Komplexität (CC(N))                                             function gcd (x, y) McCabe, 1976            ...
Original McCabe values        PMD (per method) 1-10 : low complexity         1-4   : low complexity11-20 : medium complexi...
165 Methoden  CC > 11 : very high complexity
? Kopplung ?
? Kopplung ?               ? Vererbung ?
Software Metrics  70er Jahre                                            90er Jahre         Basis Metrics                  ...
 Basis Metriken decken wichtige Aspekte der Objekt-Orientierung nicht ab OO Metriken messen alle drei Dimensionen   o Gr...
 Weighted Method Count (WMC)                                Sehr hohe Klassen-                                komplexität...
 Coupling Between Object Classes (CBO) Heuristik: “Werte über 14 vermeiden“ (Sahraoui, Godin, Miceli: „Can Metrics Help ...
25© gjeewAaytee at flickr
Informelle Beschreibung      der Metrik 1Metrik 1 > Schwellwert                                Potentieller               ...
 Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur  und Werkzeuge                         ...
NASA Heuristik (Rosenberg et al, 1999) Eine Klasse sollte analysiert werden, sollten zwei  oder mehr Bedingungen erfüllt ...
WMC > 100                                    CBO > 5NASA Heuristik                      NOM > 40     Spring 2.5.6 (26 Klas...
 Nutzen bestehende Metriken, z.B. CK-suite Definieren eigene Metriken, z.B. ATFD Haben Schwellwerte für Metriken auf Ba...
 Gleichzeitige Darstellung von mehreren Metriken                                Metrik 1                                 ...
 System Complexity View                                                  Beispiel                  Number of             ...
AbstractEntityPersister   Hibernate 3.3.2      NOA       90      NOM      299                                UnionSubclass...
Informelle Beschreibung      der Metrik 1  metric1 > threshold                          UNDInformelle Beschreibung      de...
Lanza und Marienscu                                                                  identity                             ...
 Feature Envy (Fowler)                                      identity   o Die Methoden sind übermäßig an Daten anderer Kla...
Definition                                                                        identity                                ...
Detection strategy                                                      identity                                          ...
identity                                                    disharmonyAbstractEntityPersister                             ...
identity          disharmony          collaboration          disharmony49Klassen          classification          disharmony
identitydisharmonycollaborationdisharmonyclassificationdisharmony
identitydisharmonycollaborationdisharmonyclassificationdisharmony
identitydisharmonycollaborationdisharmonyclassificationdisharmony
identitydisharmonycollaborationdisharmonyclassificationdisharmony
identitydisharmonycollaborationdisharmonyclassificationdisharmony
identitydisharmonycollaborationdisharmonyclassificationdisharmony
identitydisharmonycollaborationdisharmonyclassificationdisharmony
 Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur  und Werkzeuge                         ...
 Metriken zur Analyse von    Größe und Komplexität    Kopplung    Vererbung                                          F...
 Metriken müssen immer im Kontext des Projekts           interpretiert werden         Total Lines Of Code (LOC)3500003000...
•Code Duplizierung reduzierenPrio 1         •Größe und Komplexität reduzierenPrio 2         •Kopplung reduzierenPrio 3    ...
 JavaNCSS    http://www.kclee.de/clemens/java/javancss/ ckjm        http://www.spinellis.gr/sw/ckjm/ PMD         http:/...
„However, a metric is not a god; it is merelya measurement against an arbitrary standard“                                 ...
> Refused Parent Bequest (Fowler)                                                                   identity   –   Child c...
> Refused Parent Bequest (Fowler)   identity> Tradition Breaker                 disharmony                                ...
> Shotgun Surgery (Fowler)                                                                identity   –   The suspicious me...
[CM = Changing Methods]                     identityMethod is called by too   CM: Anzahl der Methoden, die die            ...
identitydisharmonycollaborationdisharmonyclassificationdisharmony
ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"
ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"
ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"
ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"
ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"
ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"
ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"
Upcoming SlideShare
Loading in...5
×

ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"

1,231

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,231
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken""

  1. 1. Thomas HaugMATHEMA Software GmbH
  2. 2. 80% der Projektkostenfallen nach derEntwicklung an http://users.jyu.fi/~koskinen/smcosts.htm
  3. 3. Thin Client Thick Client Presentation layer Application layer Integration layerDatabase Filesystem Legacy system
  4. 4. Thin Client Thick Client Presentation layer KEEP IT Application layer SIMPLE Integration layer STUPID.Database Filesystem Legacy system
  5. 5. © by AskDaveTaylor at flickr
  6. 6. © by DArcy Norman at flickr 9
  7. 7. > Process – Test Driven Development – Short development cycles> Runtime Analysis – Test Coverage – Memory Analysis – Deadlock Detection – Monitoring / Logging> Static Code Analysis – Design and Code guidelines – → Design- and Code Reviews – Static analysis tools – Metrics 10
  8. 8.  Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur und Werkzeuge © Emi Yanez @ Flickr
  9. 9. 70er Jahre Basis MetricsSLOC Complexity ...LOC McCabe Halstead
  10. 10. Quellcodezeilen (Source Lines of Code - SLOC) Physikalische Codezeilen (Lines of code - LOC) o Abzählen von Codezeilen, Kommentare und Klammern Logische Codezeilen (Logical lines of code - lLOC und Non Commented Source Statements -NCSS) o Abzählen von Anweisungen “Measuring programming progress by lines of code is like measuring aircraft building progress by weight” Bill Gates
  11. 11.  LOC vs lLOC for (int i = 0; i < 10; i++) LOC = 2 System.out.println(i + ". value"); lLOC = 2 for (int i = 0; i < 10; i++) { // print to console LOC = 5 System.out.println(i + ". value"); lLOC = 2 }
  12. 12.  Cyclomatic Komplexität (CC(N)) function gcd (x, y) McCabe, 1976 while (y>0) p: Anzahl der Komponenten e: Anzahl der Kanten (edges) rest = x % y n: Anzahl der Knoten (nodes) x=y y = rest Beispiel return x CC = 4 – 4 + 2*1 = 2
  13. 13. Original McCabe values PMD (per method) 1-10 : low complexity 1-4 : low complexity11-20 : medium complexity 5-7 : medium complexity21-50 : high complexity 8-10 : high complexity> 51 : very high complexity > 11 : very high complexity http://www.enerjy.com/blog/?p=198
  14. 14. 165 Methoden CC > 11 : very high complexity
  15. 15. ? Kopplung ?
  16. 16. ? Kopplung ? ? Vererbung ?
  17. 17. Software Metrics 70er Jahre 90er Jahre Basis Metrics O-O MetricsSLOC Complexity ... CK MOOD LK ...LOC McCabe Halstead WMC ... MHF ... ... ...
  18. 18.  Basis Metriken decken wichtige Aspekte der Objekt-Orientierung nicht ab OO Metriken messen alle drei Dimensionen o Größe und Komplexität o Kopplung o Vererbung Unüberschaubare Anzahl an Metriken vorhanden (>= 375) Beispiel o Chidamber und Kemerer (CK) Metric suite (1994) WMC, CBO, DIT, NOC, RFC, LCOM o Robert C. Martin Metrics (1994) Coupling, Stability, Abstractness,...
  19. 19.  Weighted Method Count (WMC) Sehr hohe Klassen- komplexität, aber durchschnittliche Methodenkom- . plexität ist niedrig . . Sehr hohe Klassen- komplexität, durch- schnittliche Methoden- komplexität ist hoch / sehr hoch
  20. 20.  Coupling Between Object Classes (CBO) Heuristik: “Werte über 14 vermeiden“ (Sahraoui, Godin, Miceli: „Can Metrics Help Bridging the Gap Between the Improvement of OO Design Quality and Its Automation?“) 24
  21. 21. 25© gjeewAaytee at flickr
  22. 22. Informelle Beschreibung der Metrik 1Metrik 1 > Schwellwert Potentieller UND DefektInformelle Beschreibung der Metrik 2Metrik 2 < Schwellwert
  23. 23.  Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur und Werkzeuge © Emi Yanez @ Flickr
  24. 24. NASA Heuristik (Rosenberg et al, 1999) Eine Klasse sollte analysiert werden, sollten zwei oder mehr Bedingungen erfüllt sein: o WMC > 100 o CBO > 5 o RFC > 100 (Response for a class) o NOM > 40 o RFC > 5 * NOM Spinellis empfiehlt aufgrund seiner Erfahrungen dass mindestens drei Bedingungen erfüllt sein sollten
  25. 25. WMC > 100 CBO > 5NASA Heuristik NOM > 40 Spring 2.5.6 (26 Klassen, aber NASA Heuristik gibt keine Indizien, welche Defekte gefunden wurden)
  26. 26.  Nutzen bestehende Metriken, z.B. CK-suite Definieren eigene Metriken, z.B. ATFD Haben Schwellwerte für Metriken auf Basis o von 45 Java und 37 C++ Projekten definiert Beschreiben Darstellungsmöglichkeiten o Pyramidal Overview o Polymetric views o Class Blue Print Definieren “code smell detection strategies” basierend auf Metriken
  27. 27.  Gleichzeitige Darstellung von mehreren Metriken Metrik 1 Metrik 2 Artefakt 1 Metrik 3 Metrik 4 Artefakt 2
  28. 28.  System Complexity View Beispiel Number of attributes (NOA) Number of methods (NOM) Class 1 WeightedMethod Count (WMC) Inheritance Class 2
  29. 29. AbstractEntityPersister Hibernate 3.3.2 NOA 90 NOM 299 UnionSubclassEntityPersister NOA 14JoinedSubclassEntityPersister NOM 41NOA 28NOM 44 SingleTableEntityPersister NOA 40 NOM 55
  30. 30. Informelle Beschreibung der Metrik 1 metric1 > threshold UNDInformelle Beschreibung der Metrik 2 Potentieller Oder Defekt metric2 < thresholdInformelle Beschreibung der Metrik 3 metric3 > threshold
  31. 31. Lanza und Marienscu identity disharmony Beschreiben drei unterschiedliche Kategorien von disharmonies o Identity disharmonies o Collaboration disharmonies collaboration disharmony o Classification disharmonies Sind teilweise an die Codegerüche von Martin Fowler angelehnt classification disharmony Designschwächen kommen oft im Verbund vor
  32. 32.  Feature Envy (Fowler) identity o Die Methoden sind übermäßig an Daten anderer Klassen disharmony interessiert Data Class (Fowler) o Aggregieren Daten, beinhalten aber kein Verhalten God class (Riel / Fowler) collaboration disharmony o Interagieren mit vielen anderen Kassen, besitzen eine sehr hohe Komplexität Brain Method o Methode hat eine sehr hohe Komplexität und beinhaltet große Teile der Klassen funktionalität classification Brain Class disharmony o Klasse besitzt viele Brain Methods Significant Duplication (Fowler) o Hoher Grad an Code Duplizierung
  33. 33. Definition identity disharmony beinhaltet fundamentale Funktionalität des Systems o Sehr Hohe Komplexität (McCabe) Verwendet Daten( Wissen) anderer Klassen collaboration disharmony o Access to Foreign Data (ATFD) Besitzt zu viele Verantwortlichkeiten o Tight Class Cohersion (TCC) classification disharmony “Do not create god classes/objects in your system. Be very suspicious of an abstraction whose name contains Driver, Manager, System, or Subsystem.” Arthur Riel, Object-Oriented Design Heuristics, 1996
  34. 34. Detection strategy identity disharmony Klasse nutzt Attri- ATFD Access To Foreign Databute anderer Klassen TCC Tight Class Cohesion ATFD > FEW collaboration disharmonyKomplexität sehr hoch God WMC >= VERY UND Class HIGH classification disharmony Niedrige Kohäsion FEW = 2-5 VERY HIGH = 47 (for WMC) TCC < ONE THIRD ONE THIRD = 0.33
  35. 35. identity disharmonyAbstractEntityPersister collaboration disharmony classification disharmonySingleTableEntityPersister JoinedSubclassEntityPersister
  36. 36. identity disharmony collaboration disharmony49Klassen classification disharmony
  37. 37. identitydisharmonycollaborationdisharmonyclassificationdisharmony
  38. 38. identitydisharmonycollaborationdisharmonyclassificationdisharmony
  39. 39. identitydisharmonycollaborationdisharmonyclassificationdisharmony
  40. 40. identitydisharmonycollaborationdisharmonyclassificationdisharmony
  41. 41. identitydisharmonycollaborationdisharmonyclassificationdisharmony
  42. 42. identitydisharmonycollaborationdisharmonyclassificationdisharmony
  43. 43. identitydisharmonycollaborationdisharmonyclassificationdisharmony
  44. 44.  Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur und Werkzeuge © Emi Yanez @ Flickr
  45. 45.  Metriken zur Analyse von  Größe und Komplexität  Kopplung  Vererbung Foto: pixelio.de - Olaf Rendler von Klassen nutzen Metriken können zum Aufdecken potentieller Refaktorisierungen genutzt werden Durch geeignete Kombination können code smells entdeckt werden  Komplementär zu Werkzeugen wie PMD, JDepend, FxCop, StyleCop, …
  46. 46.  Metriken müssen immer im Kontext des Projekts interpretiert werden Total Lines Of Code (LOC)350000300000250000200000 Average complexity per line of150000100000 code 50000 0,21 0 Hibernate Hibernate Hibernate Hibernate Hibernate 0,2 3.0 3.1 3.2 3.3 3.5 0,19 Gesamtanzahl Lines Of Code (LOC) 0,18 0,17 Hibernate Hibernate Hibernate Hibernate Hibernate 3.0 3.1 3.2 3.3 3.5 Durchschnittliche Komplexitäten
  47. 47. •Code Duplizierung reduzierenPrio 1 •Größe und Komplexität reduzierenPrio 2 •Kopplung reduzierenPrio 3 •Vererbungstiefe reduzierenPrio 4
  48. 48.  JavaNCSS http://www.kclee.de/clemens/java/javancss/ ckjm http://www.spinellis.gr/sw/ckjm/ PMD http://pmd.sourceforge.net/ IPlasma http://loose.upt.ro/iplasma/index.html InFushion http://www.intooitus.com InCode http://loose.upt.ro/incode/pmwiki.php/Main/Incode?from=Main.InCode CodeCity http://www.inf.unisi.ch/phd/wettel/codecity.html MOOSE http://moose.unibe.ch/ Metrics http://metrics.sourceforge.net/ SonarJ http://www.hello2morrow.com/products/sonarj
  49. 49. „However, a metric is not a god; it is merelya measurement against an arbitrary standard“ Robert C. Martin
  50. 50. > Refused Parent Bequest (Fowler) identity – Child class only partially uses or does not use inherited disharmony methods at all.> Tradition Breaker – Subclass provides a large set of new Interface methods collaboration disharmony which are unrelated to the services provided by the parent class classification disharmony
  51. 51. > Refused Parent Bequest (Fowler) identity> Tradition Breaker disharmony collaboration disharmony classification disharmony
  52. 52. > Shotgun Surgery (Fowler) identity – The suspicious method is used by many other methods disharmony> Intensive Coupling (Fowler) – The suspicious method heavily interacts with few other method collaboration disharmony> Dispersed Coupling – The suspicious class interacts with many other classes classification disharmony
  53. 53. [CM = Changing Methods] identityMethod is called by too CM: Anzahl der Methoden, die die disharmony many methods betrachtete Methode aufrufenCM > Short Memory Cap Short Memory Capacity = 7- 8 collaboration disharmony Shotgun AND Surgery [CC = Changing Classes]Incoming calls are from CC : Anzahl der Klassen, deren classification many other classes Methoden die betrachtete disharmony Methode aufrufen. CC > Many Many > 7
  54. 54. identitydisharmonycollaborationdisharmonyclassificationdisharmony

×