Man stelle sich mal eine Firma mit zwei großen Entwickler-Teams vor.
Beide Teams arbeiten unter denselben knappen Ressourcen am gleichen Produkt.
Features müssen entwickelt- und weite Landschaften im Code stark abgeändert werden.
Aus organisatorischen Gründen, werden die forks nur sporadisch gemergt.
Team A entwickelt verantwortungsbewusst und professionell jedoch ohne großartig auf Tests zu achten. Die Zeit ist knapp und der Product Owner will Resultate sehen, stabiler oder gar schöner Code ist zweitrangig. Kernfeatures sind durch Unit-Tests abgedeckt, alles andere händisch von mindestens zwei Instanzen abgesegnet.
Team B folgt dem Prinzip von TDD. Nicht nur eine Handvoll Unit-Tests, sondern das komplette Programm: Integration-, Smoke- und Snapshot-Tests, hohe Testabdeckung, you name it.
Nach Monaten der Entwicklung kommt dann der Zeitpunkt, in dem beide Teams ihre Arbeit mergen müssen. Team B hat nun einen entscheidenden Vorteil: noch bevor das Produkt das Licht des Monitors erblicken konnte, meldete der Build-Prozess, dass einiges im Argen liegt.
Die Fehler ausfindig zu machen, zu identifizieren und zu beheben sind da nur eine reine Fleißarbeiten die sich mit relativ wenig personellem Aufwand lösen lassen. Bei Team A sieht das ganze anders aus.
Funktionieren die Features noch? Das erfährt man erst wenn sich jemand die Zeit nimmt und das Programm händisch testet. Falls nicht, wo liegt der Fehler im Code? Das kann nur der Entwickler sagen, der das Feature implementiert hat. Im besten Fall hat besagter Entwickler eine Kleinigkeit übersehen, im schlimmsten Fall handelt es sich um eine Regression durch den Merge.
Auch wenn Team B im Laufe der Entwicklung mehr Aufwand betreiben musste, so hat es sich für das Team und vor allem für das Unternehmen doch gelohnt.
TDD hat aber auch noch viel mehr Vorteile, die nicht nur beim Mergen und Refactoring zu tragen kommen. An dieser Stelle würde ich jedem Entwickler, egal ob jung oder alt, Clean Code ans Herz legen. Denn bei TDD geht es nicht nur um die Testabdeckung, sondern auch darüber WIE man Code schreibt. Die Kollegen werden es euch danken.
Cheers ;D
Have fun. Enjoy coding.
Your INNO coding team.