am 16. April 2012
1982 haben die US-amerikanischen Sozialforscher James Q. Wilson und George L. Kelling die „Broken Window Theory“ aufgestellt[1]. Diese Theorie handelt von der Verwahrlosung New Yorks zu der damaligen Zeit. Sie besagt, dass harmlose Verstöße gegen die Norm, wie beispielsweise ein zerbrochenes Fenster, der Beginn sind für den vollständigen Niedergang eines ganzen Systems.
Mögliche Beweise kann man viele finden. So wurde zur Unterlegung der Theorie ein vollkommen intakter Jaguar in die südliche Bronx gestellt. Vier Tage vergingen und das Auto konnte ohne Kratzer wieder abgeholt werden. Keiner kam auf die Idee den Wagen anzufassen oder schlimmeres damit zu machen. Das gleiche Experiment wurde kurz darauf wieder mit diesem Jaguar ausgeführt. Die einzige kleine Schraube an der gedreht wurde, war das Einschlagen eines der kleinen Fenster. Innerhalb von vier Stunden lag das Auto auf dem Rücken, wurde angezündet und ausgenommen. Die Lehre aus diesem Test lautet „Beschädige etwas und kümmere dich nicht darum, andere werden es somit genauso behandeln“. Man muss aber nicht unbedingt ein Auto opfern, um einen Beweis für eine solche Theorie zu gewinnen. Die Beobachtung seines eigenen Mikrokosmos reicht häufig aus. Da wäre die aufgeräumte Wohnung, in der man sich am wohlsten fühlt und die erste Zeit wird man den Teufel tun und irgendwo etwas liegen lassen, sobald aber die ersten Teile nicht mehr auf ihrem Platz liegen findet das Chaos seinen Weg.
Wir als Softwareentwickler kennen dieses Vorgehen nur zu gut. Ist der erste Verstoß gegen die geltenden Regeln erst mal geschehen, so lassen der zweite und dritte nicht lange auf sich warten. Ist das System aber sauber, so tut es uns Entwicklern in der Seele weh, den ersten Fehler zu begehen, denn die meisten erkennen die Eleganz eines reinen Systems.
Es darf nicht vergessen werden, dass es viele Junior-Entwickler in Projekten gibt. Häufig passen sie sich an die Qualität des Codes an, den sie vorfinden. Sollten also keine Kommentare vorhanden sein, so wird er auch keine schreiben. Fehlt die Testabdeckung, so wird sich ein Junior nicht hinsetzen und Unit Tests schreiben. Dafür fehlen meist einfach die Erfahrungswerte und das Wissen, dass diese Eigenschaften von gutem Code einem zum späteren Zeitpunkt weiterhelfen.
Um ein System auf die Dauer sauber zu halten, gilt es möglichst viele Regeln, die man sich gesetzt hat automatisiert zu überprüfen. Es darf nicht passieren, dass sich der Verfall heimlich einschleicht. Ist ein Verstoß erst mal eine Weile im System wird sich niemand mehr verantwortlich fühlen, passiert das Auffinden jedoch zeitnah, so existiert auch noch eine Bindung zum Code.
Regeln die heutzutage einfach automatisiert geprüft werden können sind beispielsweise:
- Formatierungsregeln
- Validierung des Output-Formats
- Einhaltung minimaler Testabdeckung
- Fehlerfreier Testdurchlauf
- Softwaremetriken
Alles was einfach überprüft werden kann, sollte auch gemacht werden.
Bei der Einführung solcher Prüfungen, kann auch sehr viel falsch gemacht werden. Leicht kann der verantwortliche Qualitätsmanager über sein Ziel herausschießen. Sollte zum Beispiel jemand auf die Idee kommen nach dem Lesen dieses Abschnitts die aufgestellten Formatierungsregeln automatisiert zu testen, so ist dies fürs erste eine gute Idee. Wenn der Mechanismus dann das erste Mal durchgelaufen ist, wird man feststellen, dass bereits hunderte von Fenstern eingeschlagen wurden, also viele falsche Formatierungen gefunden wurden. Die Entwickler werden auf diese Art nicht mitgenommen werden. Ob man jetzt 50 oder 51 Probleme hat, ist einem herzlich egal.
Um neue Regeln sauber einzuführen müssen wir das Problem in kleine Häppchen zerlegen und diese dann peu à peu bereinigen. Wir haben neue Formatierungsregeln? Diese müssen vielleicht nur für neuen Code gelten oder wir schalten jeden Monat ein neues Verzeichnis zur Überprüfung hinzu. Wichtig dabei ist, dass der Schmutz, welcher sich über die Jahre gesammelt hat überschaubar bleibt, die Entwickler müssen das Gefühl haben es in einer humanen Zeit hinzubekommen. Wer räumt schon gerne den Müll von anderen auf?
[1] Broken Windows (http://www.theatlantic.com/magazine/archive/1982/03/broken-windows/4465)