Sonntag, 14. September 2008

Coverity scanned Haiku Code

Wie vielleicht schon einige an den "CID#" Codes bei den Code commits gemerkt haben, nutzt Haiku seit kurzen den Service von Coverity. Urias McCollough schrieb dazu eine entsprechende Ankündigung.

Momentan sind die ursprünglichen Coverity Berichte nur Entwicklern zugängig, die sich bei Urias gemeldet haben. An einem nur-lesen Zugriff für alle wird jedoch gearbeitet.
UPDATE 1:
Da Coverity z.Zt. keinen read-only Zugriff auf die Berichte bietet, müssen sich alle, die Bugs fixen möchten bei Urias melden, damit der bei Coverity die entsprechenden Login Daten anfordern kann.

Weil ich wissen wollte, was sich hinter den ganzen von Coverity aufgedeckten Bugs und deren Lösungen in den commits verbirgt, habe ich Stephan Aßmus danach gefragt. Hier seine Antwort:

"Das Coverity Projekt hat seine Unterstützung für das Haiku Projekt in der Vergangenheit schon mehrfach angeboten. Beispielsweise wurde ich auf dem Google Summer of Code Mentor Summit letztes Jahr angesprochen. Dass die Zusammenarbeit nun endlich hergestellt wurde, ist vor allem Urias zu verdanken. Dazu muss der Source Code dem Coverity Projekt in einer bestimmten Form zur Verfügung gestellt werden. Genaueres weiß ich gar nicht.

Wie der Name schon ein bisschen andeutet wird der gesamte Source Code von Coverity gewissermaßen "ausgeleuchtet" und darauf untersucht, wie die Abdeckung zur Laufzeit aussieht. Sämtliche Verzweigungen werden verfolgt und auf bestimmte Fehlermuster hin untersucht.
Zum Beispiel treten viele Stellen zu tage, wo in einer Verzweigung für einen Fehlerfall zuvor angeforderte Resourcen nicht wieder freigegeben werden. Wenn diese Fehler berichtigt werden, verbessert das freilich nur die Robustheit des Systems in Stresssituationen auf den normalen Ablauf hat das erstmal keinen Einfluss.
Der Coverity Scan kann aber auch viele Fehler aufdecken, wo Haiku Code logische Fehler aufweist. Beispielsweise entdeckt Coverity, wenn an einer Stelle davon ausgegangen wird, dass eine Variable auch ungültig sein kann, dann aber an anderer Stelle trotzdem darauf zugegriffen wird. Dies sind Fehler, die tatsächlich als Bugs im in der normalen Benutzung auftreten.

Leider produziert der Coverity Scan auch viele sogenannte "Falsche Positive". Dass die Fehler-IDs vierstellig sind, trügt also zumindest ein wenig. Beispielsweise lässt sich Coverity oft durch "Reference counting" verwirren, welches zu großen Teilen im Kernelcode angewendet wird. Dann denkt Coverity, eine Resource wird fälschlicherweise freigegeben, obwohl dies durch eine vorangestellte Erhöhung des Referencecounts ausgeschlossen wird.
Leider sind die Codestellen im Kernel, wo Coverity entsprechende Fehler meldet, recht komplex und mir fehlt ein bisschen die Erfahrung und der Überblick, da die Spreu vom Weizen zu trennen. Dazu kenne ich den Kernelcode einfach zu wenig.
Wie sich aber an der Fülle der Commits erkennen lässt, die losgebrochen ist, seitdem die Coverity-Scans verfügbar wurden, ist es insgesamt eine super Sache und sehr hilfreich. Oft sind die Beschreibungen des Coverity-Scans relativ klar und zeigen auf eine klar abgegrenzte Stelle im Code, wo der Fehler ist. Es ist quasi "Low Hanging Fruit", diese Fehler zu beheben.

Ich freue mich sehr, dass uns dieses Mittel kostenlos zur Verfügung gestellt wurde und dass es sich solch eines Anklangs bei unseren Entwicklern erfreut. Haiku kann dadruch nur besser werden und es trägt dazu bei, dass viele Entwickler einmal ihnen bis dahin unbekannte Teile des Haiku Codes anschauen und ihren Überblick verbessern."


Danke, stippi, für deine Erklärungen.
Na dann, Hallali!

UPDATE 2:
Von Urias McCullough gibt es noch einige Details wie die Coverity Scans zustande kommen.

Demnach muss der Code nicht mehr in einem speziellen Format an Coverity übergeben werden. Stattdessen bekam Urias die Software "Coverity Prevent", die nach Installation und Konfiguration den Haiku Code scanned während er auf dem eigenen Rechner kompiliert wird.
Dabei wurden über 600mb XML-Daten erzeugt, die dann komprimiert auf 200mb an Coverity übergeben wurden. Dort werden die Daten analysiert und die Ergebnisse auf deren speziellen Web Service gestellt, bei dem sich Entwickler anmelden müssen, um die Details zu den gefundenen Fehlern zu sehen.

Der Vorteil dieser Methode ist natürlich, dass die Scans von den Projekten selbst angestoßen werden können, wann immer sie es für nötig halten, und die Leute von Coverity nicht alle Details zum Buildsystem jedes einzelnen Projekts kennen müssen.
Laut Urias ist die Software erstaunlich einfach zu konfigurieren. Die Ergebnisse des ersten Scans waren binnen weniger Stunden nach Erhalt des Programms verfügbar.

Auch Urias sieht in Coverity eine hervorragende Möglichkeit Haikus Codequalität zu verbessern und freut sich zu sehen, wie enthusiastisch die Entwickler die Coverity Meldungen angenommen haben und die nötigen Änderungen am Code vornehmen.

Keine Kommentare:

Kommentar veröffentlichen