Mehrere Portale auf einem gemeinsamen Kern zu betreiben, spart Pflegeaufwand. Der Preis steht auf der anderen Seite derselben Rechnung: Ein Fehler in einer Vorlage ist kein Einzelfall, sondern ein Serienfehler.
Ein Beispiel
Bei einer Durchsicht fiel auf, dass ein öffentliches Formular nicht abgeschickt werden konnte. Ursache war ein fehlendes Skript für die Auswahlfelder, in Verbindung mit einem versteckten Pflichtfeld, das dadurch leer blieb. Der Browser bricht in diesem Fall stumm ab.
Die Prüfsummen der betroffenen Dateien waren über alle Portale hinweg identisch. Das ist die gute und die schlechte Nachricht zugleich: Der Fehler steht siebenmal – und eine einzige geprüfte Fassung räumt ihn siebenmal weg.
Systematisch suchen statt durchklicken
Zwei Durchläufe finden einen großen Teil dieser Fehlerklasse, ohne dass man jede Seite aufruft.
Aufrufe gegen Definitionen. Alle statischen Methodenaufrufe einsammeln und gegen die tatsächlich vorhandenen Methoden prüfen. So kam ein Aufruf ans Licht, den es nie gab – jeder Absendevorgang auf der betroffenen Verwaltungsseite endete im Abbruch.
Ausgaben ohne Maskierung. Alle Vorlagen nach Ausgaben durchsuchen, die ein Datenbankfeld ohne Maskierung ausgeben. Vier Fundstellen, alle nach demselben Muster – und alle in Feldern, die die Redaktion füllt.
Beides sind Suchläufe von wenigen Minuten. Der Aufwand liegt nicht im Finden, sondern darin, sie überhaupt anzustoßen.
Die gefährlichste Korrektur ist die naheliegende
Bei den unmaskierten Ausgaben war die erste Idee, das Feld vor dem Maskieren von Markup zu befreien. Das hätte in sechs Einträgen den halben Satz gelöscht – ohne Fehlermeldung, ohne dass es jemandem aufgefallen wäre.
Deshalb gehört zu jedem Sammelpatch ein Vergleich gegen den tatsächlichen Bestand, nicht nur gegen die Vorstellung davon. Zwei Zeilen aus zwei Seeds, durch beide Korrekturvarianten geschickt, hätten in fünf Minuten gezeigt, welche die richtige ist.
Was die Auslieferung braucht
Eine Fassungsnummer, die sich ändert. Eine Liste der geänderten Dateien. Und die Angabe, was zur Laufzeit wirkt und was erst nach einem Neuaufbau – bei statisch erzeugten Seiten ist das der Unterschied zwischen „sofort behoben" und „behoben, sobald gebaut wurde".