He trabajado en un gran sistema de transacciones financieras para un banco que se ocupaba de las pensiones e inversiones. Después de 15 años de cambios en las características, el costo de la prueba de regresión manual había aumentado a $ 200K por lanzamiento. (10M LOC, $ 10M tramitados por día). Este sistema también interactúa con otros 19 sistemas de la compañía que mueven muchos datos. Este sistema fue implementado en Java.
Sin embargo, lo que observamos es que cuanto más 'reutilizamos', más aumentan los costos de la prueba de regresión. (La razón es que necesita "probar el código que toca", y el código reutilizado / compartido afecta a una multiplicidad de lugares cuando se toca. Por lo tanto, a pesar de 'SECO - No se repita', es decir, no copie y pegue el código - observamos un incentivo financiero para copiar y pegar código. Esto es para reducir los costos de la prueba de regresión, porque no queremos modificar el código que podría compartirse, porque eso causará un gran impacto en la prueba de regresión).
Mi pregunta es ¿existe un principio de ingeniería de software que describa la relación entre los costos de reutilización y prueba de regresión?
La razón por la que haría esta pregunta es que posiblemente haya un beneficio de costo al descomponer el sistema en partes más pequeñas para ser probadas.
Suposiciones
'Prueba de regresión' significa 'prueba de aceptación', es decir, otro grupo que dedica tiempo a escribir pruebas nuevas y reutilizarlas contra el sistema en nombre de la empresa, incluidas las configuraciones de entorno y datos.
Sé que la reacción instintiva a un gran costo de prueba de regresión es 'pruebas más automatizadas'. Este es un buen principio. En este entorno hay un par de desafíos.
(a) Las pruebas automatizadas son menos útiles a través de los límites del sistema, a menos que ese sistema también tenga una alta cobertura de pruebas automatizadas. (Desafío de la esfera de influencia).
(b) Es culturalmente difícil impulsar el tiempo del programador o la inversión de capital en una alta cobertura de prueba automatizada cuando su sistema ya es grande y complejo.
(c) El costo de mantener pruebas automatizadas está oculto en un proyecto, por lo que se descartan fácilmente a nivel de proyecto.
(d) Esta es solo la realidad cultural de trabajar en un banco.
(e) Estoy trabajando para resolver este problema de una manera diferente (descomposición).