 |
(31.03.04 09:45)
Ein befreundeter Entwickler steht am Anfang seiner Testlaufbahn und kämpft noch gegen seine eigenen Widerstände. Auf meine Frage, ob er schon test-infiziert sei, schreibt er in einer E-Mail:
hmmm, weiss noch nicht wirklich ob ich infiziert bin oder nicht... kommt mir alles noch etwas seltsam und unendlich aufwendig vor.
Und hier meine Antwort:
Das seltsame Gefühl verschwindet meist relativ bald, spätestens dann, wenn du den ersten unerwarteten Fehler aufdeckst. Die Aussage, dass Testen aufwendig ist, höre ich immer wieder. Dazu lässt sich nur folgendes sagen: Das Testen mit Unit-Tests kostet nicht mehr Zeit als herkömmliche Entwicklung, mit zunehmender Erfahrung ist eher das Gegenteil der Fall. Unit-Tests machen lediglich den Zeitverbrauch offensichtlich, der in jedem Fall anfällt, um eine Anwendung zu testen und möglichst von Fehlern zu befreien. Nur ist dieser Aufwand ohne Unit-Testing gut in der täglichen Entwicklerarbeit versteckt. Test-First hat darüber hinaus den grossen Vorteil, dass die Qualität der Entwürfe sich verbessert, insbesondere dann wenn du Mock-basiert entwirfst und testest. Wenn du Software dann noch als Wertschöpfungselement (Asset) betrachtest, das es zu pflegen und den sich wandelnden Erfordernissen anzupassen gilt, dann werden Unit-Tests zum Muss. Denn nur so kannst du verhindern, dass Änderungen an deinem System zu ungewollten Seitenefekten führen. Wir bei der empros schreiben ja ziemlich komplexe Software, die ständigen Änderungen und Erweiterungen unterworfen ist. Ohne systematisches Unit-Testing wäre aus unserer Software schon lange ein unwartbarer Zementhaufen geworden.
Weiter schreibt mein Freund: Ich werde diese woche wieder codieren und es dann sicher auch versuchen - mal sehn!
Hier meine etwas undiplomatische Antwort:
Ich bin jetzt mal etwas unhöflich und zitiere Yoda aus Star Wars: "Do it or don't - there is no try!" Der Erfolg wird sich bei einem Versuch nicht einstellen. Du wirst zu Beginn ziemlich schlechte Tests schreiben, die wenig zu bringen scheinen. Ausserdem ist es schwierig, ein System, das ohne Rücksicht auf Testbarkeit entworfen worden ist, nachträglich testbar zu bekommen. Das alles sind dann bald einmal vermeintlich gute Gründe, den Versuch wieder aufzugeben.
Ich will dir hier nichts verkaufen! Ich weiss einfach aus eigener Erfahrung, dass sich die Entwicklung von Software, die an sich schon anspruchsvoll genug ist, durch systematisches Testing und insbesondere Test-getriebene Entwicklung besser und auch entspannter bewältigen lässt.
Ergänzend lässt sich noch folgendes sagen: Das Ziel des Testens ist es nicht, so schnell wie möglich damit fertig zu werden, sondern möglichst viele Fehler aufzudecken und dafür zu sorgen, dass einmal gefundene Fehler sich nicht wieder einschleichen. Zudem sind entsprechend entworfene Unit-Tests ein hervorragendes Hilfsmittel, um die Verwendung von APIs zu illustrieren. Alles in allem übersteigt der Nutzen systematischer Tests den Aufwand zu ihrer Erstellung und Wartung um ein Vielfaches.
-nemo :-)
Über diesen Artikel diskutieren.
|
 |