SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
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
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
¨
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
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
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
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
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
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
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
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
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
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
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
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

Weitere ähnliche Inhalte

Ähnlich wie Verbesserung der Code-"Qualität" durch statische Code-Analyse

Statische Code-Analyse mit Python
Statische Code-Analyse mit PythonStatische Code-Analyse mit Python
Statische Code-Analyse mit Python
Timo Stollenwerk
 
Einführung in die Software-Qualitätssicherung
Einführung in die Software-QualitätssicherungEinführung in die Software-Qualitätssicherung
Einführung in die Software-Qualitätssicherung
Christian Baranowski
 
Dtq4_deu
Dtq4_deuDtq4_deu
Dtq4_deu
DTQ4
 
Open Source Data Mining - Data Mining Cup 2007
Open Source Data Mining - Data Mining Cup 2007Open Source Data Mining - Data Mining Cup 2007
Open Source Data Mining - Data Mining Cup 2007
Christian Schieder
 
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
FotiosKaramitsos
 
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-GroßprojekteAgil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
QAware GmbH
 

Ähnlich wie Verbesserung der Code-"Qualität" durch statische Code-Analyse (20)

Statische Code-Analyse mit Python
Statische Code-Analyse mit PythonStatische Code-Analyse mit Python
Statische Code-Analyse mit Python
 
Einführung in die Software-Qualitätssicherung
Einführung in die Software-QualitätssicherungEinführung in die Software-Qualitätssicherung
Einführung in die Software-Qualitätssicherung
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
 
Dtq4_deu
Dtq4_deuDtq4_deu
Dtq4_deu
 
DevDay_Christian Mauth.pdf
DevDay_Christian Mauth.pdfDevDay_Christian Mauth.pdf
DevDay_Christian Mauth.pdf
 
BI und ECM - Verbindung von strukturierten und unstrukturierten Daten
BI und ECM - Verbindung von strukturierten und unstrukturierten DatenBI und ECM - Verbindung von strukturierten und unstrukturierten Daten
BI und ECM - Verbindung von strukturierten und unstrukturierten Daten
 
Gerhard Jungwirth (mobilkom austria), Andreas Icha (Aschauer EDV)
Gerhard Jungwirth (mobilkom austria), Andreas Icha (Aschauer EDV)Gerhard Jungwirth (mobilkom austria), Andreas Icha (Aschauer EDV)
Gerhard Jungwirth (mobilkom austria), Andreas Icha (Aschauer EDV)
 
Big Data - Die große Innovation?
Big Data - Die große Innovation?Big Data - Die große Innovation?
Big Data - Die große Innovation?
 
Dr. Clemens Wagner-Bruschek, ERP (d-fine Austria)
Dr. Clemens Wagner-Bruschek, ERP (d-fine Austria)Dr. Clemens Wagner-Bruschek, ERP (d-fine Austria)
Dr. Clemens Wagner-Bruschek, ERP (d-fine Austria)
 
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...
 
Der Markt für Planungs- und Controlling-Systeme
Der Markt für Planungs- und Controlling-SystemeDer Markt für Planungs- und Controlling-Systeme
Der Markt für Planungs- und Controlling-Systeme
 
Open Source Data Mining - Data Mining Cup 2007
Open Source Data Mining - Data Mining Cup 2007Open Source Data Mining - Data Mining Cup 2007
Open Source Data Mining - Data Mining Cup 2007
 
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
2023-08_RPA-ChapterEvent_Überprüfung-der-Codequalität
 
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-GroßprojekteAgil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
Agil zum Ziel: Erfolgsfaktoren für agile IT-Großprojekte
 
TFS 2010 Überblick
TFS 2010 ÜberblickTFS 2010 Überblick
TFS 2010 Überblick
 
Heicon global engineering
Heicon global engineeringHeicon global engineering
Heicon global engineering
 
Effektive Code Reviews Solutions
Effektive Code Reviews SolutionsEffektive Code Reviews Solutions
Effektive Code Reviews Solutions
 
Dashboards gibt’s wie Sand am Meer – aber wozu eigentlich?
Dashboards gibt’s wie Sand am Meer – aber wozu eigentlich?Dashboards gibt’s wie Sand am Meer – aber wozu eigentlich?
Dashboards gibt’s wie Sand am Meer – aber wozu eigentlich?
 
Shift Left fängt ganz links an
Shift Left fängt ganz links anShift Left fängt ganz links an
Shift Left fängt ganz links an
 
Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329
Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329Topologien verstehen und erstellen - Methoden der Wirtschaftsinformatik-200329
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