Softwaremetriken verstehen und nutzen



Ähnliche Dokumente
Softwaremetriken verstehen und nutzen

Software-Metriken: Purismus vs. Pragmatismus

Verwendung von OO-Metriken zur Vorhersage

Software-Metriken. Dipl.-Ing.(BA) Henning Sievert Seminar Software-Entwurf WS 2004/05

Qualitätsmanagement im Projekt

SOMA Reverse Engineering

Software-Metriken. Wolfgang Globke. Seminar Moderne Softwareentwicklung SS Software-Metriken. Wolfgang Globke. Metriken und Qualitätsmodelle

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Programmierkurs Java

Jan Schumann, G+J Manuel Pichler, Trainer & Consultant - Qafoo. Statische Codeanalyse wirklich effektiv nutzen

Messung. Mariem Ben Rehouma

Was bringt TDD wirklich?

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einführung in die Programmierung

Werkzeugunterstützte Betrachtungen von Software-Qualität und -Architekturen

Thermodynamik Wärmeempfindung

SEP 114. Design by Contract

Software-Metriken. B. Sc. Michael Thomas. Seminar Software-Entwurf WS 2004/05.

Aufgabe 1 Berechne den Gesamtwiderstand dieses einfachen Netzwerkes. Lösung Innerhalb dieser Schaltung sind alle Widerstände in Reihe geschaltet.

Also kann nur A ist roter Südler und B ist grüner Nordler gelten.

Source Code Konverter Online: (VB.net <-> C#) Kommerzielle Produkte (VB, C#, C++, Java) Code Nachbearbeitung in der Praxis...

Client-Server-Beziehungen

Tagesprogramm

Das Leitbild vom Verein WIR

Warum sich das Management nicht für agile Softwareentwicklung interessieren sollte - aber für Agilität

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Grundbegriffe der Informatik

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Software Engineering Interaktionsdiagramme

Einführung in die Programmierung

Professionelle Seminare im Bereich MS-Office

Wie Google Webseiten bewertet. François Bry

SDD System Design Document

SEMINAR Modifikation für die Nutzung des Community Builders

Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken

Kapitel 3: Einführung Projektmanagement

Dr. Kraus & Partner Ihr Angebot zu Konfliktmanagement

Und der Schluß vom Beschluß: Beschlossen und verkündet hört sich an wie aus einer Gerichtsserie. Was soll das alles?

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Von Continuous Integration zu Continuous Deployment

Beispiel 19. December 4, 2009

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Programmablauf für die Batch Wlan Komplettpakete mit Windows CE

Überblick. Lineares Suchen

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

WS 2009/10. Diskrete Strukturen

1 topologisches Sortieren

Übungen Programmieren 1 Felix Rohrer. Übungen

Seminar Werkzeuggestütze. tze Softwareprüfung. fung. Slicing. Sebastian Meyer

Orientierungstest für angehende Industriemeister. Vorbereitungskurs Mathematik

Welche Unterschiede gibt es zwischen einem CAPAund einem Audiometrie- Test?

Teambildung. 1 Einleitung. 2 Messen der Produktivität


Vorkurs C++ Programmierung

Software Tests (2) Quellcode Reviews

Objektorientierte Programmierung OOP

Benchmark zur Kompetenzbestimmung in der österreichischen SW Industrie. Mag. Robert Kromer NCP / AWS Konferenz Wien,

Prinzipien Objektorientierter Programmierung

Übersicht Programmablaufsteuerung

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Prozedurale Datenbank- Anwendungsprogrammierung

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Mai Hauptseminar: Nichtrelationale Datenbanken Historisch-Kulturwissenschaftliche Informationsverarbeitung Universität zu Köln

Projektmanagementsoftware: Standard vs. Individual

Elma van Vliet. Mama, erzähl mal!

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

Einführung in die Java- Programmierung

Software Engineering in der Praxis

Einführung in die Programmierung für Wirtschaftsinformatik

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Kapiteltests zum Leitprogramm Binäre Suchbäume

Konzepte der Informatik

YouTube: Video-Untertitel übersetzen

Pragmatik von Programmiersprachen

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Formale Sprachen und Grammatiken

5. Tutorium zu Programmieren

Informationsblatt Induktionsbeweis

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Übung 9 - Lösungsvorschlag

Erfahrungen mit Hartz IV- Empfängern

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

Meet the Germans. Lerntipp zur Schulung der Fertigkeit des Sprechens. Lerntipp und Redemittel zur Präsentation oder einen Vortrag halten

Gesucht und Gefunden: Die Funktionsweise einer Suchmaschine

Aber zuerst: Was versteht man unter Stromverbrauch im Standby-Modus (Leerlaufverlust)?

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

ERGÄNZUNGEN ZUR ANALYSIS II MITTELWERTSATZ UND ANWENDUNGEN

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

Bundesverband Flachglas Großhandel Isolierglasherstellung Veredlung e.v. U g -Werte-Tabellen nach DIN EN 673. Flachglasbranche.

Kontrollstrukturen - Universität Köln

Gründe für fehlende Vorsorgemaßnahmen gegen Krankheit

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Statische Code-Analyse: Software-Metriken Fernstudium Master Wirtschaftsinformatik Formale Methoden

PHP Aufbaukurs. Tag 3. PHP5 & Klassen

Simplex-Umformung für Dummies

Auszug aus der Auswertung der Befragung zur Ermittlung der IT-Basiskompetenz

Transkript:

Softwaremetriken verstehen und nutzen Manuel Pichler http://manuel-pichler.de PHP Unconference Hamburg 12. September 2009

Über mich Manuel Pichler Total stolzer Papa Jahrgang 1978 Diplom Informatiker Softwarearchitekt Autor von: PHP_Depend PHPMD phpundercontrol Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 2

Agenda Was sind Metriken? Welche Arten an Metriken gibt es? Klassische Softwaremetriken Umfang Komplexität Objektorientierte Softwaremetriken Kopplung Abstraktion Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 3

Softwaremetriken Eine Softwaremetrik ist eine Maßzahl für ein Qualitätsmerkmal von Software Funktionen zur Ermittlung von Kennzahlen eines Softwareartefakts (Wikipedia) You cannot control what you cannot measure. (Tom DeMarco) Ohne Messung können Auswirkungen durch Änderungen nicht bewertet werden (A. Fleischer) Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 4

Welche Arten an Metriken gibt es? Prozessmetrik Ressourcen, Kommunikation Aufwandsmetrik Aufwandsverteilung, Produktivität Projektlaufzeitmetrik Entwicklungszeit, Termintreue Anwendungsmetrik Schulungsaufwand, Kundenzufriedenheit Quelle: Wikipedia Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 5

Sprechen wir aber nicht drüber wir beschäftigen uns mit den Produktmetriken Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 6

Produktmetriken Umfang Lines Of Code, Number Of Classes etc... Komplexität Kopplung & Abstraktion Größe von Schnittstellen, Vererbungstiefe Lesbarkeit Laufzeiten Fehleranfälligkeit Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 7

Umfangsmetriken Summen über Softwareartefakte Lines Of * Number Of * LOC - Lines Of Code ELOC - Executable Lines Of Code CLOC - Comment Lines Of Code NCLOC - None Comment Lines Of Code NOC - Number Of Classes NOM - Number Of Methods NOP - Number Of Packages Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 8

Lines Of *, Number Of * <?php namespace foo\bar; abstract class FooBar { abstract function bar(); class Foo extends FooBar { /* Does this... */ public function bar() { /* Does that... */ public function baz() { class Bar extends Foo { public function foo(foo $f) { Lines Of * LOC = ELOC = CLOC = NCLOC = Number Of * NOC = NOM = NOP = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 9

Lines Of *, Number Of * <?php namespace foo\bar; abstract class FooBar { abstract function bar(); class Foo extends FooBar { /* Does this... */ public function bar() { /* Does that... */ public function baz() { class Bar extends Foo { public function foo(foo $f) { Lines Of * LOC = 16 ELOC = CLOC = NCLOC = Number Of * NOC = NOM = NOP = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 10

Lines Of *, Number Of * <?php namespace foo\bar; abstract class FooBar { abstract function bar(); class Foo extends FooBar { /* Does this... */ public function bar() { /* Does that... */ public function baz() { class Bar extends Foo { public function foo(foo $f) { Lines Of * LOC = 16 ELOC = 3 CLOC = NCLOC = Number Of * NOC = NOM = NOP = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 11

Lines Of *, Number Of * <?php namespace foo\bar; abstract class FooBar { abstract function bar(); class Foo extends FooBar { /* Does this... */ public function bar() { /* Does that... */ public function baz() { class Bar extends Foo { public function foo(foo $f) { Lines Of * LOC = 16 ELOC = 3 CLOC = 2 NCLOC = Number Of * NOC = NOM = NOP = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 12

Lines Of *, Number Of * <?php namespace foo\bar; abstract class FooBar { abstract function bar(); class Foo extends FooBar { /* Does this... */ public function bar() { /* Does that... */ public function baz() { class Bar extends Foo { public function foo(foo $f) { Lines Of * LOC = 16 ELOC = 3 CLOC = 2 NCLOC = 14 Number Of * NOC = NOM = NOP = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 13

Lines Of *, Number Of * <?php namespace foo\bar; abstract class FooBar { abstract function bar(); class Foo extends FooBar { /* Does this... */ public function bar() { /* Does that... */ public function baz() { class Bar extends Foo { public function foo(foo $f) { Lines Of * LOC = 16 ELOC = 3 CLOC = 2 NCLOC = 14 Number Of * NOC = 3 NOM = NOP = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 14

Lines Of *, Number Of * <?php namespace foo\bar; abstract class FooBar { abstract function bar(); class Foo extends FooBar { /* Does this... */ public function bar() { /* Does that... */ public function baz() { class Bar extends Foo { public function foo(foo $f) { Lines Of * LOC = 16 ELOC = 3 CLOC = 2 NCLOC = 14 Number Of * NOC = 3 NOM = 4 NOP = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 15

Lines Of *, Number Of * <?php namespace foo\bar; abstract class FooBar { abstract function bar(); class Foo extends FooBar { /* Does this... */ public function bar() { /* Does that... */ public function baz() { class Bar extends Foo { public function foo(foo $f) { Lines Of * LOC = 16 ELOC = 3 CLOC = 2 NCLOC = 14 Number Of * NOC = 3 NOM = 4 NOP = 1 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 16

Komplexitätsmetriken Maß für Komplexität sind Kontrollstrukturen if, elseif, for, while, foreach, catch, case, xor, and, or, &&,,? Cyclomatic Complexity (CCN) Anzahl der Verzweigungen NPath Complexity Anzahl der Ausführungspfade Berücksichtigt die Struktur von Blöcken Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 17

Beispiel 1: CCN NPath Zur Erinnerung: $ccn == 'Verzweigungen' $npath == 'Ausführungspfade' Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 18

Beispiel 1: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; CCN = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 19

Beispiel 1: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) CCN = 1 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 20

Beispiel 1: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) if($y) CCN = 2 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 21

Beispiel 1: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) if($y) if($z) CCN = 3 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 22

Beispiel 1: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) if($y) if($z) CCN = 4 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 23

Beispiel 1: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; NPath = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 24

Beispiel 1: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; false if($x) NPath = 1 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 25

Beispiel 1: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; false if($x) true false if($y) NPath = 2 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 26

Beispiel 1: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; false if($x) true if($y) false false true if($z) NPath = 3 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 27

Beispiel 1: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; false if($x) true if($y) false false true if($z) true NPath = 4 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 28

Sah doch recht ähnlich aus... Noch ein Beispiel Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 29

Beispiel 2: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; CCN = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 30

Beispiel 2: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) CCN = 1 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 31

Beispiel 2: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) if($y) CCN = 2 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 32

Beispiel 2: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) if($y) if($z) CCN = 3 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 33

Beispiel 2: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) if($y) if($z) CCN = 4 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 34

Beispiel 2: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; NPath = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 35

Beispiel 2: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) NPath = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 36

Beispiel 2: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($y) false if($x) true if($y) NPath = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 37

Beispiel 2: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; false if($y) false true if($x) true if($y) false true if($z) if($z) if($z) if($z) NPath = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 38

Beispiel 2: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; false if($y) false true if($x) true if($y) false true if($z) if($z) if($z) if($z) false false false false true true true true NPath = 8 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 39

Subjektives Empfinden Welches Beispiel wirkt komplexer? <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 40

Ach ja, das war natürlich kein Plädoyer für tief geschachtelte Kontrollstrukturen Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 41

Grenzwerte Zahlen allein sagen noch nichts aus Was bedeuten 4, 4, 4, 8? Für eine Aussage benötigt man Grenzwerte Cyclomatic Complexity NPath Complexity 1-4: low, 5-7: medium, 8-10: high, 11+: hell 200: critical mass Grenzwerte sind immer Ermessenssache Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 42

Metriken kombinieren Die Kombination von Metriken erlaubt einen sehr tiefen Einblick in ein System. LOC: 300; CCN: 42; NOC: 5; NOM: 15 CCN / LOC = 0,14 Jede sechste Zeile eine Kontrollstruktur LOC / NOC = 60 Primär prozedural oder große Klassen LOC / NOM = 20 Große Methoden/Funktionen oder prozedural CCN / NOM = 2,8 Übermäßig komplexe Methoden/Funktionen Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 43

Schluss damit, beschäftigen wir uns mit den OO-Metriken. Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 44

Objektorientierte Metriken Chidamber & Kemerer OO-Metriken Afferent Coupling / Efferent Coupling Abstraction, Instability, Distance Modell für eine ausgewogene Architektur Code Rank (In)direkte Abhängigkeiten zwischen Komponenten Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 45

Chidamber & Kemerer Weighted Methods per Class (WMC) Summe der Komplexität aller Methoden Grenzwert 20-50 Number Of Children (NOC) Anzahl der direkten Ableitungen Falsch gewählte Abstraktion Depth of Inheritance Tree (DIT) Vererbungsstrukturen erhöhen die Komplexität Grenzwert <= 5 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 46

CK OO-Metriken FooBar +bar() FooBar NOC = ; DIT = Foo +bar() +baz() Baz +foo() +bar() Foo NOC = ; DIT = Bar Bar +foo() NOC = ; DIT = Baz NOC = ; DIT = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 47

CK OO-Metriken FooBar +bar() FooBar NOC = 1; DIT = 0 Foo +bar() +baz() Baz +foo() +bar() Foo NOC = ; DIT = Bar Bar +foo() NOC = ; DIT = Baz NOC = ; DIT = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 48

CK OO-Metriken FooBar +bar() FooBar NOC = 1; DIT = 0 Foo +bar() +baz() Baz +foo() +bar() Foo NOC = 1; DIT = 1 Bar Bar +foo() NOC = ; DIT = Baz NOC = ; DIT = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 49

CK OO-Metriken FooBar +bar() FooBar NOC = 1; DIT = 0 Foo +bar() +baz() Baz +foo() +bar() Foo NOC = 1; DIT = 1 Bar Bar +foo() NOC = 0; DIT = 2 Baz NOC = ; DIT = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 50

CK OO-Metriken FooBar +bar() FooBar NOC = 1; DIT = 0 Foo +bar() +baz() Baz +foo() +bar() Foo NOC = 1; DIT = 1 Bar Bar +foo() NOC = 0; DIT = 2 Baz NOC = 0; DIT = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 51

Afferent- & Efferent-Coupling Afferent Coupling (Ca) Eingehende Abhängigkeiten anderer Komponenten Großer Einfluss aus die Stabilität des Systems Efferent Coupling (Ce) Ausgehende Abhängigkeiten: Vererbung, Parameter, Exceptions, Allokationen Abhängigkeit von Stabilität anderer Komponenten Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 52

Afferent- & Efferent-Coupling FooBar +bar() FooBar Ce = ; Ca = Foo +bar() +baz() Baz +foo() +bar() Foo Ce = ; Ca = Bar Bar +foo() Ce = ; Ca = Baz Ce = ; Ca = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 53

Afferent- & Efferent-Coupling FooBar +bar() FooBar Ce = 0; Ca = 1 Foo +bar() +baz() Baz +foo() +bar() Foo Ce = ; Ca = Bar Bar +foo() Ce = ; Ca = Baz Ce = ; Ca = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 54

Afferent- & Efferent-Coupling FooBar +bar() FooBar Ce = 0; Ca = 1 Foo +bar() +baz() Baz +foo() +bar() Foo Ce = 1; Ca = 2 Bar Bar +foo() Ce = ; Ca = Baz Ce = ; Ca = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 55

Afferent- & Efferent-Coupling FooBar +bar() FooBar Ce = 0; Ca = 1 Foo +bar() +baz() Baz +foo() +bar() Foo Ce = 1; Ca = 2 Bar Bar +foo() Ce = 1; Ca = 1 Baz Ce = ; Ca = Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 56

Afferent- & Efferent-Coupling FooBar +bar() FooBar Ce = 0; Ca = 1 Foo +bar() +baz() Baz +foo() +bar() Foo Ce = 1; Ca = 2 Bar Bar +foo() Ce = 1; Ca = 1 Baz Ce = 2; Ca = 0 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 57

Abstraction, Instability&Distance Modell für eine ausgewogene Architektur Basiert auf Ce, Ca, abstrakten(ac) und konkreten(cc) Softwareartefakten Abstraction Instability Distance A = AC / (AC + CC) I = Ce / (Ce + Ca) D = A + I - 1 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 58

Abstraction, Instability&Distance Unser Beispiel übertragen auf einen Graphen Baz Bar Foo FooBar Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 59

Zu guter Letzt mein Favorit Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 60

CodeRank Basiert auf dem Google PageRank Software wird auf eine Graphen abgebildet Knoten(π) je Softwareartefakt Pakete, Klassen, Methoden Kanten(ρ) für jede Beziehung Vererbung, Aufrufe, Parameter, Exceptions Für den CodeRank gilt: CR(π i ) = r ((1 - d) + d r (CR(π r ) / ρ r )) Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 61

CodeRank CR n (FooBar) CR n (Foo) = (1 -d) + d * CR n - 1 (Foo) = (1 -d) + d * (CR n - 1 (Bar) + 0,5 * CR n - 1 (Baz)) CR n (Bar) = (1 -d) + d * (0,5 * Cr n - 1 (Baz)) CR n (Baz) = (1 -d) + d * 0 # FooBar Foo Bar Baz 0 1 1 1 1 1 1.0000000 1.4250000 0.5750000 0.1500000 2 1.3612500 0.7025000 0.2137500 0.1500000 3 0.7471250 0.3954375 0.2137500 0.1500000 4 0.4861218 0.3954375 0.2137500 0.1500000 5 0.4861218 0.3954375 0.2137500 0.1500000 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 62

CodeRank CR 1 (FooBar) = (1 -d) + d * CR 0 (1) CR 1 (Foo) = (1 -d) + d * (CR 0 (1) + 0,5 * CR 0 (1)) CR 1 (Bar) = (1 -d) + d * (0,5 * CR 0 (1)) CR 1 (Baz) = (1 -d) + d * 0 # FooBar Foo Bar Baz 0 1 1 1 1 1 1.0000000 1,0000000 1.4250000 1,4250000 0.5750000 0,5750000 0.1500000 0,1500000 2 1.3612500 0.7025000 0.2137500 0.1500000 3 0.7471250 0.3954375 0.2137500 0.1500000 4 0.4861218 0.3954375 0.2137500 0.1500000 5 0.4861218 0.3954375 0.2137500 0.1500000 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 63

CodeRank CR 2 (FooBar) = (1 -d) + d * CR 1 (1,425) CR 2 (Foo) = (1 -d) + d * (CR 1 (0,575) + 0,5 * CR 1 (0,15)) CR 2 (Bar) = (1 -d) + d * (0,5 * CR 1 (0,15)) CR 2 (Baz) = 0,15 # FooBar Foo Bar Baz 0 1 1 1 1 1 1.0000000 1,0000000 1.4250000 1,4250000 0.5750000 0,5750000 0.1500000 0,1500000 2 1.3612500 1,3612500 0.7025000 0,7025000 0.2137500 0,2137500 0.1500000 0,1500000 3 0.7471250 0.3954375 0.2137500 0.1500000 4 0.4861218 0.3954375 0.2137500 0.1500000 5 0.4861218 0.3954375 0.2137500 0.1500000 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 64

CodeRank CR 3 (FooBar) = (1 -d) + d * CR 2 (0,7025) CR 3 (Foo) = (1 -d) + d * (CR 2 (0,21375) + 0,5 * CR 2 (0,15)) CR 3 (Bar) = (1 -d) + d * (0,5 * CR 2 (0,15)) CR 3 (Baz) = 0,15 # FooBar Foo Bar Baz 0 1 1 1 1 1 1.0000000 1,0000000 1.4250000 1,4250000 0.5750000 0,5750000 0.1500000 0,1500000 2 1.3612500 1,3612500 0.7025000 0,7025000 0.2137500 0,2137500 0.1500000 0,1500000 3 0.7471250 0,7471250 0.3954375 0,3954375 0.2137500 0,2137500 0.1500000 0,1500000 4 0.4861218 0.3954375 0.2137500 0.1500000 5 0.4861218 0.3954375 0.2137500 0.1500000 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 65

CodeRank CR 4 (FooBar) = (1 -d) + d * CR 3 (0,3954375) CR 4 (Foo) = (1 -d) + d * (CR 3 (0,21375) + 0,5 * CR 3 (0,15)) CR 4 (Bar) = (1 -d) + d * (0,5 * CR 3 (0,15)) CR 4 (Baz) = 0,15 # FooBar Foo Bar Baz 0 1 1 1 1 1 1.0000000 1,0000000 1.4250000 1,4250000 0.5750000 0,5750000 0.1500000 0,1500000 2 1.3612500 1,3612500 0.7025000 0,7025000 0.2137500 0,2137500 0.1500000 0,1500000 3 0.7471250 0,7471250 0.3954375 0,3954375 0.2137500 0,2137500 0.1500000 0,1500000 4 0.4861218 0,4861218 0.3954375 0,3954375 0.2137500 0,2137500 0.1500000 0,1500000 5 0.4861218 0.3954375 0.2137500 0.1500000 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 66

CodeRank CR 5 (FooBar) = (1 -d) + d * CR 4 (0,3954375) CR 5 (Foo) = (1 -d) + d * (CR 4 (0,21375) + 0,5 * CR 4 (0,15)) CR 5 (Bar) = (1 -d) + d * (0,5 * CR 4 (0,15)) CR 5 (Baz) = 0,15 # FooBar Foo Bar Baz 0 1 1 1 1 1 1,0000000 1,4250000 0,5750000 0,1500000 2 1,3612500 0,7025000 0,2137500 0,1500000 3 0,7471250 0,3954375 0,2137500 0,1500000 4 0,4861218 0,3954375 0,2137500 0,1500000 5 0,4861218 0,3954375 0,2137500 0,1500000 Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 67

CodeRank Mit dem CodeRank können auch indirekte Abhängigkeiten bewertet werden. Logik mit Einfluss auf das gesamte System kann schnell gefunden werden Äquivalent der Reverse CodeRank Kann mit dem selben Algorithmus berechnet werden Gibt Aufschluss über stark abhängige Komponenten Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 68

Metriken sind...... keine Magie, sondern einfache Maßzahlen... nutzlos, ohne Grenz- oder Referenzwerte... skalierbar, wachsen mit der Projektgröße... automatisierbar und reproduzierbar... objektiv, da Software gestützt... interpretierbar, abhängig vom Betrachter Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 69

Done...... Hamburg, 12. Sep. 09 PHP Unconference - Softwaremetriken verstehen und nutzen 70