Die Formel sieht komplizierter aus, als sie ist; gehen wir sie daher Stück für Stück durch. Berechnet werden soll rT(mi), also der Rank der Methode mi mit Hilfe des Tarantula-Lokators rT. Der Ausdruck f(mi) bezeichnet die Menge an fehlgeschlagenen Tests, welche die Methode mi aufrufen; f bezeichnet dagegen die Menge aller Tests, die fehlschlagen. Der Term f(mi) / f bezeichnet damit das Verhältnis zwischen den fehlschlagenden Tests, die mi aufrufen, und allen fehlschlagenden Tests. Analog dazu bezeichnet p(mi) die Menge an erfolgreichen Tests, die mi aufrufen und p die Menge aller erfolgreichen Tests.
Schauen wir uns dazu ein konkretes Beispiel an. Gegeben sei die folgende Abdeckungsmatrix, wobei die mit fi bezeichneten Spalten fehlschlagende und die mit pi bezeichneten Spalten erfolgreiche Tests kennzeichnen:
|
f1 |
f2 |
f3 |
f4 |
| |
p1 |
p2 |
p3 |
m1 |
1 |
|
|
|
| |
|
|
|
m2 |
1 |
1 |
|
|
| |
1 |
|
|
m3 |
|
|
1 |
|
| |
1 |
1 |
1 |
m4 |
|
|
1 |
1 |
| |
1 |
1 |
1 |
|
|
|
Rechts neben der Tabelle sind die Verdächtigkeitswerte zu sehen, die durch den Tarantula-Lokator berechnet wurden. m1 wird nur durch einen einzigen (fehlschlagenden) Test aufgerufen, wodurch sich für die Berechnung der Verdächtigkeit folgende Formel ergibt:
Die Methode m2 wird von 2 fehlschlagenden und einem erfolgreichen Test aufgerufen, weswegen das Ranking folgendermaßen berechnet wird:
Anschließend werden die Methoden entsprechend ihres Rankings sortiert, in diesem Fall also m1, m2, m4 und als letztes m3. Der Tarantula-Lokator bewertet Methoden, die von vielen fehlschlagenden und wenig erfolgreichen Tests aufgerufen werden, als größere Kandidaten für einen Fehler als Methoden, die von wenigen fehlschlagenden und vielen erfolgreichen Tests aufgerufen werden. Für die systematische Fehlersuche würde man nun beginnen, zuerst m1 nach einem Fehler zu durchsuchen, da dies die Methode mit der größten Fehlerwahrscheinlichkeit ist. Sollte sich hier ein Fehler finden, ist die Suche beendet; ansonsten würde mit m2 fortgefahren werden, dann m4 und als letztes m3 (wo dann hoffentlich ein Fehler gefunden wird). Eine Voraussetzung für den Einsatz von Tarantula ist, dass wenigstens ein Test fehlschlägt und wenigstens ein Test erfolgreich durchläuft – ansonsten würde sich in der Formel eine Division durch 0 ergeben, was ja nicht im Sinne der Mathematik ist.
Neben Tarantula gibt es noch weitere (und bessere) Lokatoren, durch welche die getesteten Methoden in ein Ranking überführt werden können. Die meisten von ihnen arbeiten über Formeln, die auf die ein oder andere Weise das Verhältnis von fehlschlagenden zu erfolgreichen Tests, die eine Methode ausführen, bewerten. Ein Problem ist allerdings allen gemein (darin liegt wohl auch begründet, dass die Fehlerlokalisierung nach wie vor ein eher akademisch bearbeitetes Thema ist): Bei hinreichend großen Programmen müssen sehr viele Methoden entsprechend ihres Rankings untersucht werden, bis ein Fehler gefunden wird – zu viele, um in der Praxis gegen den “intuitiven Ansatz” (d. h. einen fehlschlagenden Test debuggen und den Fehler auf Grundlage der Kenntnisse über das Programm suchen) zu bestehen.
Weiterhin ist problematisch, dass dieser Ansatz nur für das Finden eines einzelnen Fehlers geeignet ist. Warum das so ist und welche Lösung es hierfür gibt, werde ich im nächsten Teil der Serie beleuchten.
Kommentare (12)