Um ein nützliches statisches Analysewerkzeug zu erstellen, müssen eine Reihe widersprüchlicher Bedenken abgewogen werden, darunter mindestens die folgenden:
- Falsch positive (Fehlalarm-) Rate
- Falsch negative Rate (nicht gefangener Fehler)
- Laufzeit und Skalierbarkeit
False Positives sind ein kritisches Problem bei Tools zur Fehlererkennung, da sie Entwicklerzeit verschwenden. Es ist möglich, falsch negative Ergebnisse zu eliminieren, aber für viele Arten von Fehlern, einschließlich Parallelitätsfehlern, würde dies eine inakzeptable Erhöhung der Rate falsch positiver Ergebnisse bedeuten. Die Rate sowohl von falsch positiven als auch von falsch negativen Ergebnissen kann auf Kosten einer längeren Laufzeit verringert werden, aber die genauesten Analysetechniken lassen sich nicht über kleine Anwendungen hinaus skalieren, und sie können ohnehin nicht beide auf Null verringert werden.
Dynamische Analysetools geben häufig eine falsch positive Rate von 0% an. Dies liegt jedoch daran, dass sie Fehler erst dann finden, wenn sie tatsächlich auftreten. Für eine Rennbedingung oder einen Deadlock, der nur einmal in einem blauen Mond auftritt, ist das nicht so nützlich.
Aus diesen Gründen verspricht ThreadSafe nicht, alle Parallelitätsfehler zu finden - es zielt darauf ab, die wichtigsten mit einer niedrigen Falsch-Positiv-Rate zu finden. Einige Benutzer haben ThreadSafe für Code mit einem bekannten Parallelitätsfehler ausprobiert, den sie tagelang gesucht haben, und festgestellt, dass dieser Fehler - und häufig andere echte Fehler, von denen sie nichts wussten - innerhalb von Minuten ohne Fehlalarme gefunden wurden.
Ein guter Ausgangspunkt für Informationen zu ThreadSafe ist dieser InfoQ-Artikel . Weitere Informationen finden Sie auf der ThreadSafe-Website, auf der Sie sich für eine kostenlose Testversion anmelden können.
(Offenlegung: ThreadSafe ist ein kommerzielles Tool und ich bin Mitbegründer von Contemplate, dem Unternehmen, das es produziert.)