• Save
ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"
Upcoming SlideShare
Loading in...5
×
 

ESeconf2011 - Haug Thomas: "Sauberer Code mit Metriken"

on

  • 1,312 views

 

Statistics

Views

Total Views
1,312
Views on SlideShare
1,312
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

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

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

  • 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 layerDatabase Filesystem Legacy system
  • Thin Client Thick Client Presentation layer KEEP IT Application layer SIMPLE Integration layer STUPID.Database Filesystem Legacy system
  • © by AskDaveTaylor at flickr
  • © by DArcy Norman at flickr 9
  • > 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
  •  Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur und Werkzeuge © Emi Yanez @ Flickr
  • 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, 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
  •  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 }
  •  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
  • 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
  • 165 Methoden CC > 11 : very high complexity
  • ? Kopplung ?
  • ? Kopplung ? ? Vererbung ?
  • Software Metrics 70er Jahre 90er Jahre Basis Metrics O-O MetricsSLOC Complexity ... CK MOOD LK ...LOC McCabe Halstead WMC ... MHF ... ... ...
  •  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,...
  •  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
  •  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
  • 25© gjeewAaytee at flickr
  • Informelle Beschreibung der Metrik 1Metrik 1 > Schwellwert Potentieller UND DefektInformelle Beschreibung der Metrik 2Metrik 2 < Schwellwert
  •  Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur und Werkzeuge © Emi Yanez @ Flickr
  • 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
  • WMC > 100 CBO > 5NASA Heuristik NOM > 40 Spring 2.5.6 (26 Klassen, aber NASA Heuristik gibt keine Indizien, welche Defekte gefunden wurden)
  •  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
  •  Gleichzeitige Darstellung von mehreren Metriken Metrik 1 Metrik 2 Artefakt 1 Metrik 3 Metrik 4 Artefakt 2
  •  System Complexity View Beispiel Number of attributes (NOA) Number of methods (NOM) Class 1 WeightedMethod Count (WMC) Inheritance Class 2
  • AbstractEntityPersister Hibernate 3.3.2 NOA 90 NOM 299 UnionSubclassEntityPersister NOA 14JoinedSubclassEntityPersister NOM 41NOA 28NOM 44 SingleTableEntityPersister NOA 40 NOM 55
  • Informelle Beschreibung der Metrik 1 metric1 > threshold UNDInformelle Beschreibung der Metrik 2 Potentieller Oder Defekt metric2 < thresholdInformelle Beschreibung der Metrik 3 metric3 > threshold
  • 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
  •  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
  • 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
  • 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
  • identity disharmonyAbstractEntityPersister collaboration disharmony classification disharmonySingleTableEntityPersister JoinedSubclassEntityPersister
  • identity disharmony collaboration disharmony49Klassen classification disharmony
  • identitydisharmonycollaborationdisharmonyclassificationdisharmony
  • identitydisharmonycollaborationdisharmonyclassificationdisharmony
  • identitydisharmonycollaborationdisharmonyclassificationdisharmony
  • identitydisharmonycollaborationdisharmonyclassificationdisharmony
  • identitydisharmonycollaborationdisharmonyclassificationdisharmony
  • identitydisharmonycollaborationdisharmonyclassificationdisharmony
  • identitydisharmonycollaborationdisharmonyclassificationdisharmony
  •  Motivation Metriken Überblick Metriken kombinieren Zusammenfassung, Literatur und Werkzeuge © Emi Yanez @ Flickr
  •  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, …
  •  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
  • •Code Duplizierung reduzierenPrio 1 •Größe und Komplexität reduzierenPrio 2 •Kopplung reduzierenPrio 3 •Vererbungstiefe reduzierenPrio 4
  •  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
  • „However, a metric is not a god; it is merelya measurement against an arbitrary standard“ Robert C. Martin
  • > 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
  • > Refused Parent Bequest (Fowler) identity> Tradition Breaker disharmony collaboration disharmony classification disharmony
  • > 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
  • [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
  • identitydisharmonycollaborationdisharmonyclassificationdisharmony