Ein faszinierender Einblick in ein richtig großes Softwareprojekt mit schlechter Code-Qualität: Unter der Überschrift “What’s the largest amount of bad code you have ever seen work?” beschreibt der Insider ‘oraguy’ den Alltag bei der Entwicklung der Oracle-Datenbank. Die Oracle-Datenbank (Version 12.2, ca. 2013) hatte 25 Mio Zeilen Code. Zum Vergleich, ausgedruckt wären das 500.000 Buchseiten, oder 500 dicke Wälzer auf ca. 25 laufenden Regalmetern.
In Kurzfassung beschreibt ‘oraguy’ den Alltag eines Softwareentwicklers so: Er nimmt sich z.B. vor, einen Bug zu beheben. Um zu verstehen, wodurch ein Bug zustande kommt, braucht der Entwickler schon mal 2 Wochen Anlaufzeit, weil der Code komplex und schlecht strukturiert ist.
“Generations of programmers have worked on that code under difficult deadlines and filled the code with all kinds of crap.”
Dann fügt er als workaround einen neuen Spezialfall zum Code hinzu (ein neues “Flag”), und vermeidet so gut er kann, damit neue Problem an anderer Stelle einzubauen. Wenn er glaubt, dass es fertig ist, wird seine Änderung auf einer Farm von Servern getestet. Es gibt “Millionen von Tests”, sie alle abzuarbeiten dauert 30-40 Stunden. Nach 1-2 Tagen sieht er also, was alles durch die Änderung kaputt gegangen ist, in der Regel schlagen jetzt Hunderte oder Tausende von Tests fehl. Weil der Code so unstrukturiert ist (“a big spaghetti mess”), waren diese Test-Fehlschläge nicht vorherzusehen. Wieder Nachdenken, kleine Änderung machen und auf zur nächsten Test-Runde, usw.
Die Wartezeit auf die Testergebnisse wird mit Arbeit an einem anderen Bug ausgefüllt, so dass man als Entwickler immer 2-3 Bugs parallel in Bearbeitung hat. Insgesamt braucht dieser Zyklus (für einen einzelnen Bug!) 2-4 Wochen, danach kommt noch ein Review, der 2 Wochen bis 2 Monate dauert. Etwas neues braucht natürlich noch länger, weil mehr Änderungen nötig sind. Schon kleine Features dauern 6 bis 24 Monate.
Warum ist dann Oracle überhaupt noch in der Lage, neue Versionen seines Datenbankprodukts zu liefern? Zum Einen, weil sie “Millionen von Tests” haben, die automatisiert alle möglichen Szenarien abdecken. Das sind übrigens keine Unit Tests, sondern eher Functional Tests, die für jeden Testfall die ganze Datenbank-Maschinerie neu starten. Ohne diese Tests würde das Produkt sofort sterben, weil eine Lawine von neuen Bugs die Oracle-Endanwender überrollen würde.
Zum Anderen hat Oracle als Monopolist die Mittel, um den enormen Personalaufwand zu bezahlen, der für ihren “speziellen” Software-Lieferprozess nötig ist. Dazu kommen noch die Kosten, um ständig neue Leute zu rekrutieren, denn in so einem frustrierenden Arbeitsumfeld bleiben die meisten nicht lange. So lautet denn auch oraguy’s Fazit:
“I don’t work for Oracle anymore. Will never work for Oracle again!”
Hier ist der ganze Thread, die hitzige Diskussion über Sinn und Unsinn von TDD kann man überspringen. Der User oraguy bleibt aus verständlichen Gründen anonym, er hat noch ein paar weitere wenig schmeichelhafte Dinge über Oracle zu berichten.
Matthias Berth