Ich habe an einem großen Finanztransaktionssystem für eine Bank gearbeitet, die sich um Renten und Investitionen kümmerte. Nach 15 Jahren Funktionsänderungen waren die Kosten für den manuellen Regressionstest auf 200.000 USD pro Release gestiegen. (10 Millionen LOC, 10 Millionen US-Dollar pro Tag). Dieses System ist auch mit 19 anderen Systemen im Unternehmen verbunden, die viele Daten übertragen. Dieses System wurde in Java implementiert.
Was wir jedoch beobachten, ist, dass die Kosten für Regressionstests umso höher sind, je mehr wir wiederverwenden. (Der Grund dafür ist, dass Sie "den Code testen müssen, den Sie berühren" - und wiederverwendeten / freigegebenen Code beeinflusst eine Vielzahl von Stellen, wenn er berührt wird. Trotz "DRY - Wiederholen Sie sich nicht" - dh kopieren Sie den Code nicht und fügen Sie ihn nicht ein - Wir sehen einen finanziellen Anreiz, Code zu kopieren und einzufügen, um die Kosten für Regressionstests zu senken, da wir den Code, der gemeinsam genutzt werden kann, nicht ändern möchten, da dies einen großen Einfluss auf die Regressionstests hat.)
Meine Frage ist, ob es ein Software-Engineering-Prinzip gibt, das den Zusammenhang zwischen Wiederverwendungs- und Regressionstestkosten beschreibt.
Der Grund, warum ich diese Frage stelle, ist, dass die Zerlegung des Systems in kleinere zu testende Teile möglicherweise einen Kostenvorteil mit sich bringt.
Annahmen:
"Regressionstest" bedeutet "Abnahmetest" - dh eine andere Gruppe verbringt Zeit damit, neue Tests zu schreiben und alte Tests für das Unternehmen, einschließlich Umgebungs- und Datenkonfigurationen, erneut für das System zu verwenden.
Ich weiß, dass die Reaktion auf die hohen Kosten eines Regressionstests eher automatisierte Tests sind. Das ist ein gutes Prinzip. In diesem Umfeld gibt es einige Herausforderungen.
(a) Automatisierte Tests sind über Systemgrenzen hinweg weniger nützlich, es sei denn, das System verfügt auch über eine hohe Abdeckung durch automatisierte Tests. (Einflussbereich Herausforderung).
(b) Wenn Ihr System bereits groß und komplex ist, ist es kulturell schwierig, die Programmiererzeit oder die Kapitalinvestition für eine hohe automatisierte Testabdeckung in Schwung zu bringen.
(c) Die Kosten für die Aufrechterhaltung automatisierter Tests sind in einem Projekt verborgen, sodass sie auf Projektebene leicht verworfen werden können.
(d) Dies ist nur die kulturelle Realität der Arbeit in einer Bank.
(e) Ich arbeite daran, dieses Problem auf andere Weise zu lösen (Zersetzung).