Ich habe kürzlich eine Frage zu Tests in der Spieleentwicklung gestellt - das ist übrigens der Grund, warum ich von diesem wusste. Die Antworten dort wiesen auf einige merkwürdige, spezifische Nachteile hin:
- Es ist teuer zu tun , wenn Ihr Code sollte stark gekoppelt werden .
- Dies ist schwierig, wenn Sie die verschiedenen Hardwareplattformen kennen müssen, wenn Sie die Ausgabe für den Benutzer analysieren sollen und das Code-Ergebnis nur in einem breiteren Kontext Sinn macht .
- UI- und UX-Tests sind sehr schwierig .
- Insbesondere können automatisierte Tests teurer und weniger effektiv sein als eine Reihe von sehr kostengünstigen (oder kostenlosen) Betatestern .
Der vierte Punkt erinnert mich an einige meiner Erfahrungen. Ich habe in einem sehr schlanken, XP-orientierten, von Scrum verwalteten Unternehmen gearbeitet, in dem Unit-Tests dringend empfohlen wurden. Auf dem Weg zu einem schlankeren, weniger bürokratischen Stil vernachlässigte das Unternehmen jedoch den Aufbau eines QA-Teams - wir hatten keine Tester. So häufig fanden die Kunden bei einigen Systemen sogar bei einer Testabdeckung von> 95% triviale Fehler. Also würde ich einen weiteren Punkt hinzufügen:
- Bei automatisierten Tests haben Sie möglicherweise das Gefühl, dass Qualitätssicherung und Tests nicht wichtig sind.
Außerdem dachte ich damals über Dokumentation nach und stellte eine Hypothese auf, die (in geringerem Umfang) für die Prüfung von zwei gültig sein könnte. Ich hatte nur das Gefühl, dass sich Code so schnell entwickelt, dass es ziemlich schwierig ist, eine Dokumentation zu erstellen, die einer solchen Geschwindigkeit folgt. Daher ist es wertvoller, Zeit damit zu verbringen, Code lesbar zu machen, als schwere, leicht veraltete Dokumentation zu schreiben. (Dies gilt natürlich nicht für APIs, sondern nur für die interne Implementierung.) Der Test weist das gleiche Problem auf: Im Vergleich zum getesteten Code ist das Schreiben möglicherweise zu langsam. OTOH, es ist ein geringeres Problem, da die Tests darauf hinweisen, dass sie veraltet sind, während Ihre Dokumentation stumm bleibt, solange Sie sie nicht sehr, sehr sorgfältig durchlesen .
Schließlich stelle ich manchmal ein Problem fest: Automatisierte Tests hängen möglicherweise von Tools ab, und diese Tools sind möglicherweise schlecht geschrieben. Ich habe vor einiger Zeit ein Projekt mit XUL gestartet, und es tut mir weh, Unit-Tests für eine solche Plattform zu schreiben. Ich habe eine andere Anwendung mit Objective-C, Cocoa und Xcode 3 gestartet und das Testmodell darauf bestand im Grunde aus einer Reihe von Problemumgehungen.
Ich habe andere Erfahrungen mit Nachteilen des automatisierten Testens gemacht, aber die meisten davon sind in anderen Antworten aufgeführt. Trotzdem bin ich ein vehementer Befürworter des automatisierten Testens. Dies ersparte eine Menge Arbeit und Kopfschmerzen und ich empfehle es immer standardmäßig. Ich schätze, diese Nachteile sind nur Details im Vergleich zu den Vorteilen des automatisierten Testens. (Es ist wichtig, immer deinen Glauben zu verkünden, nachdem du Häresien kommentiert hast, um das Auto-Da-Fé zu vermeiden.)