Ho lavorato su un grande sistema di transazioni finanziarie per una banca che si occupava di pensioni e investimenti. Dopo 15 anni di modifiche alle funzionalità, il costo del test di regressione manuale era salito a $ 200.000 per versione. (10 milioni di LOC, $ 10 milioni di transazioni al giorno). Questo sistema si interfaccia anche con altri 19 sistemi all'interno dell'azienda spostando 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 luoghi quando viene toccato. Quindi, nonostante 'DRY - Non ripetere te stesso' - cioè non copiare e incollare il codice - osserviamo un incentivo finanziario per copiare e incollare il codice. Questo serve a ridurre i costi del test di regressione, perché non vogliamo modificare il codice che potrebbe essere condiviso, perché ciò provocherebbe un grande impatto sul test di regressione.)
La mia domanda è : esiste un principio di ingegneria del software che descrive la relazione tra riutilizzo e costi dei test di regressione?
Il motivo per cui vorrei porre questa domanda è che probabilmente c'è un vantaggio in termini di costi nel decomporre il sistema in parti più piccole da testare.
ipotesi:
"Test di regressione" significa "test di accettazione", ovvero un altro gruppo che trascorre del tempo per scrivere nuovi test e riutilizzare vecchi test sul sistema per conto dell'azienda, comprese le configurazioni 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 automatizzati sono meno utili oltre i confini del sistema, a meno che anche quel sistema abbia un'elevata copertura dei test automatizzati. (Sfera della sfera di influenza).
(b) È culturalmente difficile ottenere lo slancio sul tempo del programmatore o investimenti di capitale su una copertura di test automatizzata elevata quando il sistema è già ampio e complesso.
(c) Il costo del mantenimento dei test automatizzati è nascosto in un progetto e quindi può essere facilmente scartato a livello di progetto.
(d) Questa è solo la realtà culturale di lavorare in una banca.
(e) Sto lavorando per risolvere questo problema in modo diverso (decomposizione).