Softwaremetriken verstehen und nutzen

Ähnliche Dokumente
Softwaremetriken verstehen und nutzen

Software-Metriken: Purismus vs. Pragmatismus

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

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

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

Qualitätsmanagement im Projekt

Verwendung von OO-Metriken zur Vorhersage

Codequalitätskontrolle mit SonarQube

SOMA Reverse Engineering

Software Engineering. 13. Automatische Code Analyse. Franz-Josef Elmer, Universität Basel, WS 2005/06

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

Software Tests (2) Quellcode Reviews

Messung. Mariem Ben Rehouma

Softwaretechnik (Allgemeine Informatik) Überblick

Messen & Metriken Ist Qualität messbar? André Fleischer

Programmieren von Webinformationssystemen

Einstieg in die Informatik mit Java

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Management von Softwaresystemen Systembewertung: Metriken und Prozess

Musterlösung Stand: 5. Februar 2009

Probeklausur: Programmierung WS04/05

Codequalität: Code-Metrik Version 0.1

0/28. Software-Metriken. Andreas Zeller. Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken

Arten von Klassen-Beziehungen

Code Quality. Steigerung der Codequalität mit Visual Studio & TFS

Software-Qualität sichtbar machen

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

5. Tutorium zu Programmieren

Was bringt TDD wirklich?

Inhalt Software-Metriken Software-Metriken mit Together FindBugs. Software-Metriken. Raimar Lill Matthias Meitner David Föhrweiser Marc Spisländer

Faustregeln zu Zusicherungen

Softwaremessung und -metrik

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich

Programmieren von Webinformationssystemen

Software Engineering in der Praxis

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Inhalt. Fragestellungen. ...we make the invisible visible... Analysen und deren Anwendung Erfahrungen

Verwendung von objektorientierten Metriken zur Softwarequalitätsvorhersage. Arno Egger,

Objektorientierung: Klassen und Objekte

Von Continuous Integration zu Continuous Deployment

Vorlesung Software-Reengineering

Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken

Metriken für Objektorientierte Software

JAVA für Nichtinformatiker - Probeklausur -

Inhalt. Zusammenfassung Abstract LOC. Seminar Qualitative und Quantitative Methoden im Software Engineering

Entwurfsprinzip. Entwurfsprinzip

SmallTalk - Eine kurze Einführung

Messen & Metriken Ist Qualität messbar?

Testen und Metriken. Einige Fehler. Fehler vermeiden. Andreas Zeller Universität des Saarlandes Microsoft Research.

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Vorlesung Software-Reengineering

Software Engineering II Refactoring, Style, Software Metriken

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Objektorientierte und Funktionale Programmierung SS 2014

Algorithmen und Programmierung II

Softwarequalität. 20. Januar 2015

Vorteile einer Tool gestützten Modernisierung von Forms und Reports

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

Klausur Grundlagen der Programmierung

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

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Java-Schulung Grundlagen

Probeklausur: Programmierung WS04/05

Arten von Klassen-Beziehungen

Einführung in Javadoc

System.out.println("TEXT");

Department of Computer Science Chair of Software Engineering Faculty of Engineering. Grundlagen der Softwarearchitektur (im Softwarepraktikum)

Grundlagen von C# - 1

Thema: Testen von objektorientierter Software

Coding Standards Brandbox

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Statische Code-Analyse zur Qualitätsmessung

Visualisierung feingranularer Abhängigkeiten

Object Relational Mapping Layer

Beispiel für überladene Methode

Ziele und Tätigkeiten von Architekten

Allgemeine Informatik II SS :30-13:30 Uhr

7. Transitive Hülle. Kante des Graphen. Zusatz-Kante der transitiven Hülle

Aktuelle Themen der Informatik Metriken für den Softwaretest

Software Echtzeitverhalten in den Griff Bekommen

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4

Einführung in die Informatik II

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1

Transkript:

Softwaremetriken verstehen und nutzen Kore Nordmann <kore@php.net>, Manuel Pichler <mapi@pdepend.org> 17. November 2009

Über uns Kore Nordmann <kore@php.net> Langzeit PHP Entwickler Speaker auf diversen Konferenzen, Autor etc. Entwickler diverser Open-Source-Projekte: EZ Components, Arbit, PHPUnit, PHPillow Manuel Pichler <mapi@pdepend.org> Jahrgang 1978 Diplom Informatiker, Softwarearchitekt Entwickler diverser Projekte: PHP_Depend, phpundercontrol, PHPMD Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 2

Agenda Was sind Metriken? Welche Arten an Metriken gibt es? Klassische Softwaremetriken Umfang Komplexität Objektorientierte Softwaremetriken Kopplung Abstraktion Karlsruhe, 17. Nov. 09 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) Auch wenn er diese Aussage bereits relativierte Ohne Messung können Auswirkungen durch Änderungen nicht bewertet werden (A. Fleischer) Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 4

Arten an Metriken Prozessmetrik Aufwandsmetrik Projektlaufzeitmetrik Anwendungsmetrik Quelle: Wikipedia Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 5

Vergesst das aber alles wir beschäftigen uns ausschließlich mit Produktmetriken Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 6

Produktmetriken Umfang Komplexität Kopplung & Abstraktion Lesbarkeit Karlsruhe, 17. Nov. 09 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 Karlsruhe, 17. Nov. 09 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 = Karlsruhe, 17. Nov. 09 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 = Karlsruhe, 17. Nov. 09 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 = Karlsruhe, 17. Nov. 09 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 = Karlsruhe, 17. Nov. 09 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 = Karlsruhe, 17. Nov. 09 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 = Karlsruhe, 17. Nov. 09 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 = Karlsruhe, 17. Nov. 09 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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 16

Beispiel Ein Beispiel Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 17

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 18

Beispiel 2: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; CCN = 0 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 19

Beispiel 2: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) CCN = 1 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 20

Beispiel 2: Cyclomatic Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) if($y) CCN = 2 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 21

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 22

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 23

Beispiel 2: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; NPath = 0 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 24

Beispiel 2: NPath Complexity <?php class Foo { public function foo() { if ($x) { if ($y) { if ($z) { return $x; if($x) NPath = 0 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 25

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 26

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 27

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 28

Grenzwerte Zahlen allein sagen noch nichts aus Oder was bedeuten die Werte 4 und 8? Für eine Beurteilung 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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 29

Beispiel Ein Beispiel Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 30

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 31

Schluss damit, beschäftigen wir uns mit den OO-Metriken. Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 32

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 33

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 34

CK OO-Metriken AbstractClass AbstractClass NOC = ; DIT = BaseClass +baz() Dependent +foo() BaseClass NOC = ; DIT = SubClass SubClass +foo() NOC = ; DIT = Dependent NOC = ; DIT = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 35

CK OO-Metriken AbstractClass AbstractClass NOC = 1; DIT = 0 BaseClass +baz() Dependent +foo() BaseClass NOC = ; DIT = SubClass SubClass +foo() NOC = ; DIT = Dependent NOC = ; DIT = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 36

CK OO-Metriken AbstractClass AbstractClass NOC = 1; DIT = 0 BaseClass +baz() Dependent +foo() BaseClass NOC = ; DIT = SubClass SubClass +foo() NOC = ; DIT = Dependent NOC = ; DIT = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 37

CK OO-Metriken AbstractClass AbstractClass NOC = 1; DIT = 0 BaseClass +baz() Dependent +foo() BaseClass NOC = 1; DIT = 1 SubClass SubClass +foo() NOC = ; DIT = Dependent NOC = ; DIT = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 38

CK OO-Metriken AbstractClass AbstractClass NOC = 1; DIT = 0 BaseClass +baz() Dependent +foo() BaseClass NOC = 1; DIT = 1 SubClass SubClass +foo() NOC = ; DIT = Dependent NOC = ; DIT = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 39

CK OO-Metriken AbstractClass AbstractClass NOC = 1; DIT = 0 BaseClass +baz() Dependent +foo() BaseClass NOC = 1; DIT = 1 SubClass SubClass +foo() NOC = 0; DIT = 2 Dependent NOC = ; DIT = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 40

CK OO-Metriken AbstractClass AbstractClass NOC = 1; DIT = 0 BaseClass +baz() Dependent +foo() BaseClass NOC = 1; DIT = 1 SubClass SubClass +foo() NOC = 0; DIT = 2 Dependent NOC = ; DIT = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 41

CK OO-Metriken AbstractClass AbstractClass NOC = 1; DIT = 0 BaseClass +baz() Dependent +foo() BaseClass NOC = 1; DIT = 1 SubClass SubClass +foo() NOC = 0; DIT = 2 Dependent NOC = 0; DIT = 0 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 42

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 43

Afferent- & Efferent-Coupling AbstractClass AbstractClass Ce = ; Ca = BaseClass +baz() Dependent +foo() BaseClass Ce = ; Ca = SubClass SubClass +foo() Ce = ; Ca = Dependent Ce = ; Ca = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 44

Afferent- & Efferent-Coupling AbstractClass AbstractClass Ce = 0; Ca = 1 BaseClass +baz() Dependent +foo() BaseClass Ce = ; Ca = SubClass SubClass +foo() Ce = ; Ca = Dependent Ce = ; Ca = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 45

Afferent- & Efferent-Coupling AbstractClass AbstractClass Ce = 0; Ca = 1 BaseClass +baz() Dependent +foo() BaseClass Ce = 1; Ca = 2 SubClass SubClass +foo() Ce = ; Ca = Dependent Ce = ; Ca = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 46

Afferent- & Efferent-Coupling AbstractClass AbstractClass Ce = 0; Ca = 1 BaseClass +baz() Dependent +foo() BaseClass Ce = 1; Ca = 2 SubClass SubClass +foo() Ce = ; Ca = Dependent Ce = ; Ca = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 47

Afferent- & Efferent-Coupling AbstractClass AbstractClass Ce = 0; Ca = 1 BaseClass +baz() Dependent +foo() BaseClass Ce = 1; Ca = 2 SubClass SubClass +foo() Ce = 1; Ca = 1 Dependent Ce = ; Ca = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 48

Afferent- & Efferent-Coupling AbstractClass AbstractClass Ce = 0; Ca = 1 BaseClass +baz() Dependent +foo() BaseClass Ce = 1; Ca = 2 SubClass SubClass +foo() Ce = 1; Ca = 1 Dependent Ce = ; Ca = Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 49

Afferent- & Efferent-Coupling AbstractClass AbstractClass Ce = 0; Ca = 1 BaseClass +baz() Dependent +foo() BaseClass Ce = 1; Ca = 2 SubClass SubClass +foo() Ce = 1; Ca = 1 Dependent Ce = 2; Ca = 0 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 50

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 51

Abstraction, Instability&Distance Unser Beispiel übertragen auf einen Graphen Baz Bar Foo FooBar Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 52

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 )) Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 53

CodeRank CR n (FooBar) CR n (Foo) CR n (Bar) = (1 -d) + d * CR n - 1 (Foo) = (1 -d) + d * (CR n - 1 (Bar) + 0,5 * CR n - 1 (Baz)) = (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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 54

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 55

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 56

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 57

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 58

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 59

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 60

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 Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 61

Done...... Karlsruhe, 17. Nov. 09 Softwaremetriken verstehen und nutzen 62