Trabalhei em um grande sistema de transações financeiras para um banco que cuidava de pensões e investimentos. Após 15 anos de alterações nos recursos, o custo do teste de regressão manual subiu para US $ 200 mil por versão. (10M LOC, US $ 10M negociados por dia). Esse sistema também faz interface com outros 19 sistemas da empresa, movendo muitos dados. Este sistema foi implementado em Java.
O que observamos, no entanto, é que, quanto mais "reutilização" fazemos, mais custos de teste de regressão aumentam. (O motivo é que você precisa "testar o código em que toca" - e o código reutilizado / compartilhado afeta uma multiplicidade de lugares quando é tocado. Portanto, apesar de 'DRY - Não se repita' - por exemplo, não copie e cole o código - observamos um incentivo financeiro para copiar e colar código, reduzindo os custos do teste de regressão, porque não queremos modificar o código que pode ser compartilhado, porque isso causará um grande impacto no teste de regressão.
Minha pergunta é : existe um princípio de engenharia de software que descreva a relação entre reutilização e custos de teste de regressão?
A razão pela qual eu faria essa pergunta é que, sem dúvida, há um custo benefício em decompor o sistema em partes menores a serem testadas.
Premissas:
'Teste de regressão' significa 'teste de aceitação' - ou seja, outro grupo que gasta tempo para escrever novos e reutilizar testes antigos no sistema em nome da empresa, incluindo configurações de dados e ambiente.
Eu sei que a reação instintiva a um grande custo de teste de regressão é 'testes mais automatizados'. Este é um bom princípio. Nesse ambiente, existem alguns desafios.
(a) Testes automatizados são menos úteis além dos limites do sistema, a menos que esse sistema também tenha uma alta cobertura de testes automatizados. (Desafio esfera de influência).
(b) É culturalmente difícil obter impulso no tempo do programador ou no investimento de capital em alta cobertura automatizada de teste quando seu sistema já é grande e complexo.
(c) O custo de manutenção de testes automatizados está oculto em um projeto e, portanto, eles são facilmente descartados no nível do projeto.
(d) Essa é apenas a realidade cultural de trabalhar em um banco.
(e) estou trabalhando para resolver este problema de uma maneira diferente (decomposição).