Eingeschleuste Fehler verbessern Softwaretests
Aus Fehlern klug
Normalerweise bekämpfen Entwickler Programmfehler. Forscher aus Saarbrücken bauen jedoch sogar absichtlich Fehler in Quelltexte ein. So schätzen sie ab, wie gut Testumgebungen arbeiten.
© tournee, Fotolia.com
Normalerweise bekämpfen Entwickler Programmfehler. Forscher aus Saarbrücken bauen jedoch sogar absichtlich Fehler in Quelltexte ein. So schätzen sie ab, wie gut Testumgebungen arbeiten.
| Inhalt |
|---|
| 104 | Workflows mit BPEL beschreiben
Abläufe in Unternehmen ändern sich regelmäßig. 112 | Perl-Snapshot: Abschussrampe
Die Kollegen des Perlmeisters sollten in Deckung gehen: Mike |
Pädagogen wissen, dass die besten Lernerfolge aus Fehlern erwachsen. Professor Andreas Zeller nahm das offenbar zum Anlass, diese Erkenntnis in einen Bereich zu übertragen, der reich an Irrtümern ist: die Software-Entwicklung [1]. Software-Anbieter produzieren immer mehr und umfangreicheren Code. Da wird es für Menschen ständig schwieriger, zu bestimmen, ob er korrekt oder effektiv ist. Es gibt zwar Ausnahmetalente wie Torvalds, Cox & Co, aber selbst sie kennen nicht mehr jede einzelne Zeile des Kerns. Daher entstand die Disziplin des Testens, die mittlerweile auch in der professionellen Software-Entwicklung angekommen ist.
So existiert mit Junit ein Rahmenwerk für Java, das Entwickler dazu anhält, parallel zum eigenen Code Testroutinen zu schreiben. Wer mit der Qualitätssicherung betraut ist, vermag so die Korrektheit aller Einzelkomponenten festzustellen. Auch wenn das Verfahren unter vielerlei Namen in Paradigmen wie dem Extreme Programming verbreitet ist, hat es einen Makel: Es ist nämlich abhängig von den Tests selbst und lässt sich nur eingeschränkt automatisieren.
Wer also überwacht die Überwacher, fragen sich kritische Qualitätsbeauftragte. Lässt sich gar messen, wie gut ein solcher Test funktioniert?
Hier setzt die Methode der Forschergruppe der Universität des Saarlands an. Sie baut absichtlich Fehler, Mutationen genannt, in den Code ein. So verifizieren sie, wie gut die Tests arbeiten. Beispiele sind etwa um einen Offset veränderte Variablen oder negierte Bedingungen. Normalerweise ist so etwas aufwändig, da jede Mutation erfordert, den Code neu zu übersetzen.
Die Wissenschaftler ändern darum in ihrer Javalanche genannten Umgebung direkt den Java-Bytecode [2]. So decken sie Fehler auf, die bei klassischen Unit-Tests durchschlüpften. Dabei stellt sich heraus, dass Computer Schwierigkeiten haben, geeignete Fehler in Programme einzubauen. Oft prüfen Bedingungen beispielsweise einen Rückgabewert:
if (int ret = isCondMet() > 0) handleCondition(ret);
Einige der beschriebenen Änderungen haben auf diese Codesequenz gar keine Wirkung und sind äquivalent zu ihr:
if (int ret = isCondMet() * 2 > 0) handleCondition(ret);
Der Code bewirkt in beiden Fällen das Gleiche, hilft also nicht, schlechte Tests aufzudecken. Mutationstesten, von amerikanischen Forschern schon Anfang der 1970er Jahre erfunden, stand wegen der vielen unwirksamen Veränderungen in dem Ruf, ineffizient zu sein.
Die Saarbrücker haben das Verfahren daher um Code erweitert, den die Forschung der Programmanalyse hervorgebracht hat. So überprüfen sie nun, ob sich die Invarianten von Funktionen durch die Mutationen ändern, in anderen Worten, ob sich logisch überhaupt etwas tut. Zudem decken sie Zweige des Programms auf, die es niemals durchläuft. Dort sind keine Mutationen nötig. Nicht zuletzt hat sich das Team eine Bewertung ausgedacht, die besonders effektive Veränderungen prämiert.
Solche Verfahren könnten künftig QA-Mitarbeiter nutzen, um ihrerseits die Tests zu verbessern, mit denen sie Programme bewerten. So bleibt - frei nach Konfuzius - den Entwicklern nur noch, die Bugs zu entfernen: "Wenn du weißt, dass du einen Fehler begangen hast, und ihn nicht verbesserst, dann war dies wirklich ein Fehler."
| Infos |
|---|
| [1] D. Schuler, V. Dallmeier, A. Zeller, "Efficient Mutation Testing by Checking Invariant Violations": Universität des Saarlandes [2] Mutationstesten und Javalanche: [http://www.st.cs.uni-saarland.de/mutation/] |
Alle Rezensionen aus dem Linux-Magazin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...