Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329
Verbesserung der Code-"Qualität" durch statische Code-Analyse
1. Verbesserung der Code-”Qualit¨t” durch
a
statische Code-Analyse
Andi Albrecht
ProUnix
PyCon DE 2011
05. Oktober 2011
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
2. Andi Albrecht – @andialbrecht
Erster Python-Kontakt vor knapp 10 Jahren als Studentische
Hilfskraft bei der DFG
Aktuell: Anwendungsentwickler f¨r Webapplikationen bei
u
ProUnix in Bonn
Entwicklung und Pflege mittlerer und großer Systeme
OpenSource: Rietveld Code Review Tool, python-sqlparse,
CrunchyFrog, hgsvn, ...
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
3. ¨
Ubersicht
QS in der Entwicklung
Statische Code-Analyse
Begriff
Probleme, Fehler, Warnungen, Infos
Die Tools f¨r Python-Code
u
¨
Ubersicht
Ausf¨hrung und Interpretation
u
Integration
Verbesserung der Code-Qualit¨t
a
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
4. QS in der Entwicklung
Qualit¨tssicherung bei ProUnix
a
Prozessbegleitende QS vom Konzept bis zum fertigem
Produkt
QS in der Entwicklung ab der ersten Zeile Code
(oder besser noch: als erste Zeile)
Code Reviews, UnitTests, Continous Integration (BuildBot),
Statische Code-Analyse
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
5. Was ist Statische Code-Analyse?
Statisches Testverfahren (ohne Programmausf¨hrung)
u
Inspektion des Source-Codes
Leicht automatisierbar, sollte auch automatisiert ausgef¨hrt
u
werden
¨
Regelm¨ßige Analysen, um Anderungen zwischen zwei
a
Durchg¨ngen zu erkennen
a
Umfangreiche Ausgaben (“Informationsflut”)
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
6. Was kann gefunden werden?
Syntaktische Fehler
Stilfehler, Einhaltung von Coding-Standards
Software Metriken: LOC, Komplexit¨t, ...
a
“Bad Smells”
! Keine Aussagen uber Korrektheit oder Zuverl¨ssigkeit
¨ a
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
7. Tools f¨r Python-Code (Auswahl)
u
PyLint Syntax-Checks, Bad Smells, Style-Checks, Metriken
PyChecker Syntax-Checks, Bad Smells, Modul-Import
erforderlich
pyflakes Syntax-Checks, Bad Smells
pep8 Style-Checks
”McCabe” Metriken
flake8 Syntax-Checks, Bad Smells, Style-Checks, Metriken
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
8. Beispiel: PyLint
1 import sys
2 def mergesort(l):
3 # sort l using mergesort algorithm
4 if len(l) <= 1: return l
5 left_part = mergesort(l[:len(l)/2])
6 right_part = mergesort(l[len(l)/2:])
7 return merge(left_part, right-part)
8
9 def merge(left, right):
10 """Wrong implementation of merge step."""
11 return left + right
C: 1,0: Missing docstring
C: 2,0:mergesort: Missing docstring
C: 2,14:mergesort: Invalid name "l" (should match [a-z_][a-z0-9_]{2,30}$)
C: 4,20:mergesort: More than one statement on a single line
E: 7,28:mergesort: Undefined variable ’right’
E: 7,34:mergesort: Undefined variable ’part’
W: 6,4:mergesort: Unused variable ’right_part’
W: 1,0: Unused import sys
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
9. Beispiel: PyFlakes
1 import sys
2 def mergesort(l):
3 # sort l using mergesort algorithm
4 if len(l) <= 1: return l
5 left_part = mergesort(l[:len(l)/2])
6 right_part = mergesort(l[len(l)/2:])
7 return merge(left_part, right-part)
8
9 def merge(left, right):
10 """Wrong implementation of merge step."""
11 return left + right
demo1.py:1: ’sys’ imported but unused
demo1.py:7: local variable ’right_part’ is assigned to but never used
demo1.py:8: undefined name ’right’
demo1.py:8: undefined name ’part’
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
10. Beispiel: pep8.py
1 import sys
2 def mergesort(l):
3 # sort l using mergesort algorithm
4 if len(l) <= 1: return l
5 left_part = mergesort(l[:len(l)/2])
6 right_part = mergesort(l[len(l)/2:])
7 return merge(left_part, right-part)
8
9 def merge(left, right):
10 """Wrong implementation of merge step."""
11 return left + right
demo1.py:2:1: E302 expected 2 blank lines, found 0
demo1.py:4:19: E701 multiple statements on one line (colon)
demo1.py:5:36: E225 missing whitespace around operator
demo1.py:8:1: W293 blank line contains whitespace
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
11. Beispiel: McCabe
1 import sys
2 def mergesort(l):
3 # sort l using mergesort algorithm
4 if len(l) <= 1: return l
5 left_part = mergesort(l[:len(l)/2])
6 right_part = mergesort(l[len(l)/2:])
7 return merge(left_part, right-part)
8
9 def merge(left, right):
10 """Wrong implementation of merge step."""
11 return left + right
2:1: ’mergesort’ 2
*Richtwert f¨r zu hohe Komplexit¨t: 7
u a
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
12. Den richtigen Zeitpunkt finden
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
13. Verbesserung der Code-Qualit¨t
a
Unmittelbare Beseitigung von Fehlern
Vermeiden von Bad Smells, unn¨tig hoher Komplexit¨t, ...
o a
Sauberer Code f¨hrt zu besserer Wartbarkeit
u
Aufzeigen m¨glicher Fehlerquellen
o
Schulung des Gesp¨rs f¨r problematische Stellen im Code
u u
Einhaltung von Standards/Konventionen ist Team-Aufgabe
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011
14. Danke!
E-Mail albrecht@prounix.de
Twitter @andialbrecht
Homepage http://andialbrecht.de
http://www.prounix.de/unternehmen/jobs/python/
QS in der Entwicklung Statische Code-Analyse Die Tools f¨r Python-Code
u Verbesserung der Code-Qualit¨t
a
Statische Code-Analyse / Andi Albrecht ProUnix / PyCon DE 2011