German talk.
Hold at the enterJS 2014 in Cologne at 1st July 2014 (11:40 - 12:25)
German description:
Bei gesetzten Sprachen wie Java, C und PHP gehören Tools zum Messen von Kennzahlen zur Bestimmung der Qualität von Software zum Alltag. Für JavaScript ist das noch ein recht neuer Bereich. Besonders in modernen Webprojekten ist eine Charakterisierung der Software in Bezug auf Qualitätskennzahlen allerdings ein wichtiger Faktor hinsichtlich der Entwicklungs- und Ausführungsgeschwindigkeit sowie der Stabilität. Dieser Vortrag gibt eine Einführung in Metriken, wie sie sich erfassen und für die tägliche Arbeit nutzen lassen.
5. –Helmut Balzert
„Unter Softwarequalität versteht man die
Gesamtheit der Merkmale … eines
Softwareprodukts, …, festgelegte oder
vorausgesetzte Erfordernisse zu erfüllen.“
9. Source Code
Functions count
Nested depth
Halstead
Maintainability index
LOC
Parameter count
Cyclomatic Complexity
nPath
Lint errors
CLOC
LLOC
Your metric here
10. Source Code
Functions count
Nested depth
Halstead
Maintainability index
LOC
Parameter count
Cyclomatic Complexity
nPath
Lint errors
CLOC
LLOC
Your metric here
16. Source Code
Functions count
Nested depth
Halstead
Maintainability index
LOC
Parameter count
Cyclomatic Complexity
nPath
Lint errors
CLOC
LLOC
Your metric here
17. Source Code
Functions count
Nested depth
Halstead
Maintainability index
LOC
Parameter count
Cyclomatic Complexity
nPath
Lint errors
CLOC
LLOC
Your metric here
18. Cyclomatic Complexity / McCabe
Anzahl von Entscheidungspunkten
innerhalb einer Funktion (if, switch, for, while, …)
40. Source Code
Functions count
Nested depth
Halstead
Maintainability index
LOC
Parameter count
Cyclomatic Complexity
nPath
Lint errors
CLOC
LLOC
Your metric here
41.
42.
43.
44. Verwendete Bilder
• „Ruler“ by Scott Akerman:
https://www.flickr.com/photos/sterlic/4299631538/
• „the JavaScript Code“ by Dmitry Baranovskiy:
https://www.flickr.com/photos/dmitry-
baranovskiy/2378867408
• „Ignition“ by Zach Dischner:
https://www.flickr.com/photos/zachd1_618/3489625168
• „Tools IMG_0171“ by OZinOH:
https://www.flickr.com/photos/75905404@N00/7126146
307
45. Verwendete Bilder
• „Danger & Skull, Legoland“ by bixentro:
https://www.flickr.com/photos/bixentro/338433029
• „Baby“ by The Noun Project:
http://thenounproject.com/term/baby/47/
• „Man“ by The Noun Project:
http://thenounproject.com/term/man/2/
• „Sasquatch“ by Mike Wirth:
http://thenounproject.com/term/sasquatch/2680/
46. Verwendete Bilder
• „Waking Up In Abbeyford Woods“ by Miles
Wolstenholme:
https://www.flickr.com/photos/oaktorphotography/14444
806464
• „Danke 102/365“ by Dennis Skley:
https://www.flickr.com/photos/dskley/13796815083/
• „Questions“ by Oberazzi:
https://www.flickr.com/photos/oberazzi/318947873/in/ph
otostream/
47. Zitate und Tabellen
• Helmut Balzert: Lehrbuch der Softwaretechnik. Band 2:
Softwaremanagement, Software-Qualitätssicherung,
Unternehmensmodellierung, Spektrum Akademischer
Verlag, Heidelberg 1998, ISBN 3-8274-0065-1, S. 257
• Michele Lanza, Radu Marinescu: Object-Oriented
Metrics in Practice: Using Software Metrics to
Characterize, Evaluate, and Improve the Design of
Object-Oriented Systems, Springer 2006, ISBN
3540244298
Hinweis der Redaktion
Verteilung:
Wer ist denn Entwickler? Wer ist denn Teamleader oder Entscheider?
Vorlieben:
Wer mag denn Mathe bzw. Statistik?
Bachelor of Science in Wirtschaftsinformatik
Anfang 2013 bei trivago
Backend: Skalierung, Caching-Infrastruktur, Architektur (Hardware + Software)
@PHPUGDus: Alles außer PHP … Web / Developer-Themen
Was bedeutet „Codequalität messen“ eigentlich?
Im Duden steht “leider” nichts
Code
JavaScript-Konferenz
=> Quellcode bzw. Innenleben von Software ==> JavaScript
Viele der Konzepte / Kennzahlen auf andere Sprachen übertragbar!
Bitte beachten: OOP, Funktionsorientiert, Prototyporientiert, etc.
Qualität
Softwarequalität: Ist === Soll-Zustand
Codequalität: Teilaspekt von Softwarequalität
Nicht-funktionale Anforderungen:
Konformität, Verständlichkeit, Analysierbarkeit, Modifizierbarkeit,Prüfbarkeit
=> Codestruktur!
messen
Merkmale / Eigenschaften werden als numerische Werte zusammengefasst.
Ergebnis: Messwert + Einheit
=> Übertragen auf Software: Software-Metriken
Wer hat denn bereits Erfahrungen mit Kennzahlen oder Metriken?
trivago usecase: Reicht die Server-Infrastruktur für die TV-Werbung?
Argumente für
… eine Anschaffung?
… Refactoring?
=> Steigen wir ein…
====> „Was wollen wir messen?“
Fast alles messbar. Macht alles Sinn?
Codequalität … Nicht funktionale Anforderungen
Qualitätsmerkmale wie z.B. Wartbarkeit, Erweiterbarkeit oder Verständlichkeit
Auch hier: ==> „Was wollen wir messen?“
Fast alles messbar. Macht alles Sinn?
Kleiner Ausschnitt von Metriken.
Zählmetriken: LOC …
Zusammengesetzte Metriken + mehreren Faktoren: Halstead, Maintainability Index
Kleiner Anfang mit simplen Metriken: LOC, CLOC, NCLOC, LLOC
Leicht gekürzte isEmpty von Underscore.js
LOC, CLOC, NCLOC, LLOC
Lines of code
Commented LOC
Non commented LOC / Physical LOC
Logical LOC
Soweit alles klar?
Recht einfach, oder?
Noch mal zur Übersicht.
4 Metriken. 3 dargestellt.
Etwas komplizierter
Allein betrachtet (meiner Meinung nach) sinnvoller
Start: Definition
Indikator für die Komplexität des (Teil)-Programms
=> Variablennamen + Kommentare tragen auch dazu bei
Synonym: McCabe
Cyclomatic Complexity
Nicht der schönste Code.
Hat bestimmt jeder Entwickler schon gesehen
Branch coverage:
Anzahl der Tests um alle Möglichkeiten getestet zu haben
nPath
Nun könnte man meinen:
Beides das selbe?
=> Nein: Ein anderes Beispiel
Cyclomatic Complexity
nPath
Tools
Es gibt nicht DAS Tool (leider)
Tooling ist bescheiden, da gibt es noch viel zu tun
ScanJS: Security Analyse von Mozilla, kann auch dazu verwendet werden
JSHint: maxcomplexity option
jsprime: Security Analyse Tool -> basiert auf Esprima
DoctorJs: Mozilla
JSWhiz: Static Analysis for JavaScript Memory Leaks (Google)
Weitere Tools: WALA, cloc, sloc, sclc, pmd
Open platform to manage code quality
Plugins für jede Sprache: JavaScript, CSS, PHP, Java, .NET, …
Multi-Language-Projects
Jetzt kommt das große AAAAABER …
Es besteht Gefahr bei falscher Nutzung von Metriken
Viele der Konzepte / Kennzahlen auf andere Sprachen übertragbar!
Bitte beachten: OOP, Funktionsorientiert, Prototyporientiert, etc.
Einfache Portierung von Tools aus Java und C nicht möglich.
foo-loop: Jeder
for-in: Steigen die meisten aus
.forEach: Selten -> yardstick
Statische Code-Analyse
Code wird nicht ausgeführt, sondern nur untersucht
=> Wissenschafter: v8 gehooked … Analyse beim ausführen
Vorteile: Analyse zur Ausführung (dynamische Inhalte)
Nachteil: Nicht der ganze Code
Ein normaler Mensch: 1,80m groß. Normal? Groß? Klein?
Gegenüber einem Baby: Groß
Gegenüber einem Yeti: Klein
Es kommt nicht nur auf die Sprache an, sondern auch auf den Kontext
Was ist das für eine Software?
=> Library, Framework, Applikation?
=> Aus welchem Bereich? Medizin? Statische Code Analyse? etc.
Welche Metriken sind wichtig?
Wald vor lauter Bäumen nicht
Eine Herausforderung.
Wie ist die Fragestellung? Was will ich erreichen?