Verbesserung der Code-"Qualität" durch statische Code-Analyse

2,651 views

Published on

Talk given at PyCon DE 2011. See http://de.pycon.org/2011/schedule/sessions/17/ for details (german).

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,651
On SlideShare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Verbesserung der Code-"Qualität" durch statische Code-Analyse

  1. 1. Verbesserung der Code-”Qualit¨t” durch a statische Code-Analyse Andi Albrecht ProUnix PyCon DE 2011 05. Oktober 2011QS 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. 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. 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 aQS 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. 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-AnalyseQS 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. 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. 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 ¨ aQS 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. 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, MetrikenQS 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. 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 sysQS 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. 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. 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 whitespaceQS 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. 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 aQS 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. 12. Den richtigen Zeitpunkt findenQS 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. 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-AufgabeQS 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. 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

×