Suchen

Expertenbeitrag

Mark Hermeling

Mark Hermeling

Senior Director Product Marketing, GrammaTech, Inc., GrammaTech, Inc.

Codeinspektionen

Code Reviews profitieren von statischer Analyse

| Autor/ Redakteur: Mark Hermeling / Redaktion IoT

Code Reviews (oder Inspektionen) sind eine effektive Möglichkeit, die Zahl der der Defekte in Softwareprojekten zu reduzieren. Tatsächlich ist eine Defektentfernungsrate von bis zu 75% möglich, was nichts anderes bedeutet, als dass zwei Drittel aller Bugs während der Entwicklungsphase eines Projekts entfernt werden. Führt man sich die Kosten der Fehlerbehandlung an bereits ausgelieferten Produkten vor Augen, wird deutlich, dass Codeinspektionen fester Bestandteil einer jeden guten Entwicklungsarbeit sein sollten.

Codeinspektionen sollten ein fester Bestandteil einer jeden guten Entwicklungsarbeit sein.
Codeinspektionen sollten ein fester Bestandteil einer jeden guten Entwicklungsarbeit sein.
( Bild: Pixabay )

Dieser Beitrag erläutert, wie statische Analysetools eine ideale (und zudem automatisierte) Ergänzung zu Code Reviews darstellen, indem sie den Ablauf unterstützen und die Defektentfernungsrate erhöhen. 

Integration in einen bestehenden Prozess

Immer schon propagiert GrammaTech, dass CodeSonar für die Einbindung in einen existierenden Entwicklungsprozess vorgesehen ist und die bereits vorhandenen Tools aufwertet. Inspektionen sind nicht nur bei Code ein wertvolles Hilfsmittel, um Defekte einzudämmen. Wie woanders auch, gilt bei der Codeentwicklung, dass sich die Folgekosten umso wirksamer reduzieren lassen, je früher die Inspektion während des Entwicklungsprozesses vorgenommen wird. Bild 1 verdeutlicht die Einordnung der Inspektionen (die eine Übermenge der Code Reviews sind) über den gesamten Softwareentwicklungs-Lebenszyklus hinweg. Es ist wichtig darauf hinzuweisen, dass die Nutzung von Tools und Inspektionen nicht mit dem Deployment aufhört, denn die Tools sind auch ein Bestandteil der sich möglicherweise anschließenden Wartungs- und Upgradeprozesse.

Abbildung: Grammatech

Wie sich statische Analysetools schnell in einen bestehenden Code-Review-Prozess integrieren lassen, wird nachfolgend beschrieben. Bild 2 zeigt dazu einen modifizierten Code-Review-Prozess, der die statische Analyse vor den manuellen Review-Meetings vorsieht. Es ist davon auszugehen, dass die von den Tools gelieferten Reports in der Inspektion und der erneuten Prüfung Verwendung finden.

Abbildung: Grammatech

Vorteile der statischen Analyse für Codeinspektionen

Dass Code Reviews äußerst vorteilhaft sind, ist unstrittig, jedoch verschlingt der damit einhergehende Aufwand immens viel Arbeitszeit. Jede Möglichkeit, den Zeitaufwand zu reduzieren und gleichzeitig die Ergebnisqualität zu steigern, ist somit eine sichere Win-Win-Situation. Genau hier kommen statische Analysetools ins Spiel, die einen großen Umfang an Input liefern und einen Teil des Prüfungsprozesses automatisieren. Damit sind die Vorteile, die eine automatisierte statische Analyse bietet, jedoch nur zu einem Bruchteil beschrieben. Es gibt noch weitere Pluspunkte, eine Auswahl folgt hier:

  • Arbeit an großen Codemengen: Da es oft nicht praktikabel ist, den gesamten Quellcode zu untersuchen, hat meist nur der neu hinzukommende Code die Priorität bei der Inspektion. CodeSonar aber kann Millionen von Codezeilen, darunter auch binären Objektcode und Bibliotheken, auf Defekte und Sicherheitslücken untersuchen.
  • Aufdeckung schwer sichtbarer, verschleierter Fehler: Statische Analysetools können Fehler detektieren, die bei visuellen Inspektionen und sogar bei Funktionstests unentdeckt bleiben würden.
  • Prozess- und dateiübergreifende Fehler: Die fortschrittliche statische Analyse nimmt eine komplexe Code- und Datenpfad-Prüfung vor. Diese kann sich über mehrere Funktionen und Dateien erstrecken und damit einen Bereich abdecken, der über den Rahmen eines geprüften Moduls hinausgeht. Mit speziellen Concurrency Checkern detektiert CodeSonar auch Multithreaded/Multitasking-Probleme, die per Inspektion nur sehr schwierig zu ermitteln sind.
  • Detektierung von Sicherheitslücken: Das Prüfen auf Sicherheitslücken ist schwierig und erfordert eine andere Herangehensweise als das Prüfen auf korrekte Funktionalität. Statische Analysetools aber können sowohl Schwachstellen als auch unsichere Programmierpraktiken aufzeigen. Darüber hinaus verfolgt die Tainted-Data-Analyse die Eingangsdaten bis zu ihrer Verwendung im System und stellt sie den aufgedeckten Defekten gegenüber.
  • Toolintegration: CodeSonar lässt sich mit verschiedenen integrierten Entwicklungsumgebungen (IDEs) wie Eclipse, mit Build-Systemen wie Jenkins, mit Versioning-Systemen wie GitHub sowie mit Defektreport-Tools wie JIRA integrieren. Damit wird die Leistungsfähigkeit der statischen Analyse den Entwicklern direkt zur Verfügung gestellt und in die üblichen Programmier-, Build- und Testaktivitäten eingebunden.
  • Geringerer Code-Review-Aufwand: Statische Analysetools arbeiten automatisch, schnell und effektiv. Wird die statische Analyse an Code vor der Prüfung angewandt, reduziert sie die Zahl der Defekte im Code, die noch auf manuellem Weg gefunden werden müssen. Außerdem können statische Analysetools bei der Durchsetzung von Programmierstandards wie etwa MISRA helfen, sodass dieser Aspekt aus den Code Reviews herausfällt. Die für jede Analyse verfügbaren Reports können als unterstützende Dokumentation für den Prüfprozess herangezogen werden.

Weshalb es trotzdem nicht ohne manuelle Prüfungen geht

Code Reviews und andere Inspektionen werden von GrammaTech nach wie vor empfohlen, denn unsere Tools sollen bestehende Prozesse aufwerten und deren Ergebnisse verbessern. Es ist deshalb wichtig zu betonen, weshalb Code Reviews immer noch notwendig sind, wenn ein hohes Maß an Qualität und Sicherheit erzielt werden soll.

  • Auffinden von Defekten, die den Tools entgehen: Da die Erfolgsquote guter Inspektionsprozesse hoch ist, sind Code Reviews effektiv. Menschliche Prüfer verstehen, was mit dem Code bezweckt wird, und sind deshalb wesentlich besser in der Lage, Fehler zu detektieren. Es ist ein glücklicher Umstand, dass sich statische Analyse und manuelle Prüfung wie oben beschrieben so hervorragend ergänzen.
  • Die Inspektion beschränkt sich nicht allein auf den Code: Reviews sollten sämtliche Aspekte der Software einschließen – von den Anforderungen über das Design und die Prüfpläne bis zum Quellcode. In komplexen Projekten zahlt sich das Auffinden und Korrigieren der Anforderungen bei weitem am meisten aus. Es ist wichtig sich zu vergegenwärtigen, dass Code Reviews Bestandteil eines übergreifenden Inspektionsprozesses sind.
  • Bereitstellung wichtiger Kontextinformationen zu Tool-Reports: Entwickler verstehen die an das System gestellten Anforderungen und die zu erwartenden Resultate (oder sollten sie zumindest verstehen). Die statische Analyse und andere Tools können nur Schlussfolgerungen zum Zweck des Codes anstellen, sodass von Menschen gelenkte Prüfungen die nötigen Kontextinformationen zu den Reviews und den entsprechenden Reports beisteuern müssen.
  • Validierung der Tool-Ergebnisse: Statische Analysetools erfordern eine Interpretation der gemeldeten Fehler. Die Code-Review-Meetings dienen als Forum zur Klärung etwaiger strittiger Reports.
  • Immaterielle Vorteile: Code Reviews sind ein sehr menschlicher Prozess, und der Ablauf selbst sowie die damit einhergehenden Meetings, Prüfungen und Interaktionen bringen wichtige Vorteile mit sich, zu denen die Einarbeitung neuer Entwickler, die Stimmigkeit von Design und Implementierung sowie der Zusammenhalt des Teams gehören. Überdies erhält das Management auf diese Weise grobe Indizien für den Fortschritt und die Qualität des Projekts.

Code Reviews werden weiter bestehen und durch statische Analysetools aufgewertet. Die von Menschen geleitete Inspektion ergänzt die Tool-Automation hervorragend. Statische Analysetools senken den Zeit- und Kostenaufwand von Code Reviews und verbessern gleichzeitig die Ergebnisse des Prozesses.

Über den Autor

Mark Hermeling

Mark Hermeling

Senior Director Product Marketing, GrammaTech, Inc., GrammaTech, Inc.