Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
204<br />
10 <strong>Race</strong> <strong>Conditions</strong><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Abb. 10–2<br />
Eraser bedient für jede Variable einen hier gezeigten Zustandsautomaten.<br />
Bewertung von Eraser<br />
Was sind nun die Stärken und Schwächen von Eraser? Zunächst muss Eraser die<br />
Software instrumentieren, um jede Variable mit einem Zustandsautomaten assoziieren<br />
zu können, oder das auf Eraser basierende Werkzeug muss Zugang zu<br />
Debug-Information haben. Instrumentieren heißt, dass der Quellcode oder der<br />
Binärcode automatisch verändert werden muss, damit Eraser arbeiten kann. Des<br />
Weiteren muss Eraser das (instrumentierte) Programm ausführen können. Das<br />
könnte nicht immer so leicht sein. Denken wir an Systeme mit knappem Speicher<br />
(die Instrumentierung macht das Programm größer und langsamer) oder nicht<br />
vorhandene Test-Hardware.<br />
Eraser findet nur Fehler in Programmteilen, die auch tatsächlich ausgeführt<br />
wurden. Es obliegt dem Benutzer, sich darum zu kümmern, dass alle Programmteile,<br />
die zu Data <strong>Race</strong>s führen könnten, auch tatsächlich im Testlauf ausgeführt<br />
werden. Eraser kann nicht mit anderen Synchronisationsmechanismen außer<br />
Locks umgehen. Bedient sich die zu prüfende Software aber keiner anderen<br />
Mechanismen außer Locks, so findet Eraser Data <strong>Race</strong>s recht zuverlässig. Auch<br />
dann, wenn die betroffenen Programmteile nach einer Initialisierung nur ein einziges<br />
Mal durchlaufen wurden.<br />
Um seine Stärken ausspielen zu können, fordert Eraser allerdings die Einhaltung<br />
einer Locking-Disziplin: Bei jedem Zugriff auf eine Shared-Variable muss<br />
ein Lock aktiv sein. Auch wenn der Zugriff nur lesend ist.