am 2. März 2009
Eigentlich habe ich ja nicht gedacht, dass ich so schnell wieder was über Unit Tests schreibe, aber mir war gerade danach. Vor ein paar Tagen habe ich ja ein wenig aus dem Nähkästchen geplaudert, was die Einführung von Unit Tests angeht. Heute soll es darum gehen zu definieren, was man testen sollte.
Gleich vorne weg, das Beste was man haben kann ist eine 100% Pfadabedeckung, am zweitbesten wäre eine 100% Code Coverage. Und soll ich euch was sagen: Ich glaube kein größeres PHP Projekt hat eines der beiden erreicht. Muss man aber auch gar nicht. Wenn die Kernkomponenten gut getestet sind, dann hat man schon viel gewonnen. 80-90% Codeabdeckung sind immer noch unglaublich gut.
Nehmen wir uns aber den Standardfall vor. Wir haben ein Projekt, das es schon seit Monaten oder Jahren gibt und führen erst sehr spät die Tests ein. Problem erkannt? Im Nachhinein ist es sehr schwer eine hohe Testabdeckung zu erhalten. Sollte man aber trotzdem versuchen den alten Code abzudecken? Meiner Meinung nach ja, aber nicht sofort.
Alter Code wird dann mit einem Test abgedeckt, wenn man ihn erweitert. Sobald man ihn anfasst und/oder refaktoriert, wird ein Test fällig. Was aber noch wichtiger ist, ist das Schreiben von Tests, sobald man einen Bug gefixed hat. Auf diese Weise kann man sicher sein, dass Fehler, die bereits behoben wurden nicht noch einmal auftreten. Solche Tests nennt man übrigens Regressionstests. Wenn man dies eine Weile beherzigt, sollte man alten Code immer besser abgedeckt haben.
Was neuen Code angeht, da bin ich der Überzeugung, dass man alles testen sollte, was neu frisch geschrieben wurde. Ganz einfach.