Ho lavorato su un grande sistema di transazioni finanziarie per una banca che si occupava di pensioni e investimenti. Dopo 15 anni di modifiche delle funzionalità, il costo del test di regressione manuale era salito a $ 200.000 per versione. (10M LOC, $ 10 milioni di transazioni al giorno). Questo sistema si interfaccia anche con altri 19 sistemi attorno all'azienda che spostano molti dati in giro. Questo sistema è stato implementato in Java.
Ciò che osserviamo tuttavia è che più "riutilizziamo", più aumentano i costi dei test di regressione. (Il motivo è che devi "testare il codice che tocchi" e il codice riutilizzato / condiviso influisce su una molteplicità di punti quando viene toccato, quindi, nonostante "DRY - Non ripeti te stesso" - cioè non copiare e incollare il codice - osserviamo un incentivo finanziario per copiare e incollare il codice, in modo da ridurre i costi del test di regressione, perché non vogliamo modificare il codice che potrebbe essere condiviso, perché ciò causerà un impatto notevole sul test di regressione.)
La mia domanda è c'è un principio di ingegneria del software che descrive la relazione tra i costi di riutilizzo e di regressione?
Il motivo per cui vorrei porre questa domanda è che probabilmente c'è un vantaggio in termini di costi nella scomposizione del sistema in parti più piccole da testare.
Ipotesi:
-
"Test di regressione" significa "test di accettazione", ovvero un altro gruppo che impiega tempo a scrivere nuovi e riutilizzare i vecchi test sul sistema per conto dell'azienda, incluse le impostazioni di ambiente e dati.
-
So che la reazione istintiva a un grande costo del test di regressione è "test più automatizzati". Questo è un buon principio. In questo ambiente ci sono un paio di sfide.
(a) I test automatici sono meno utili oltre i limiti del sistema, a meno che tale sistema non abbia una copertura di test automatizzata elevata. (Sfida sull'influenza).
(b) È culturalmente difficile dare slancio al tempo del programmatore o all'investimento di capitale su una copertura di test automatizzata elevata quando il sistema è già grande e complesso.
(c) Il costo per mantenere i test automatici è nascosto in un progetto, e quindi sono facilmente scartati a livello di progetto.
(d) Questa è solo la realtà culturale di lavorare in una banca.
(e) Sto lavorando per risolvere questo problema in un modo diverso (decomposizione).