No trabalho, temos um sistema bastante complicado. Vamos chamar esse sistema, System_A. Nossa equipe de controle de qualidade criou outro sistema, chame esse sistema, System_B, para testar System_A.
A maneira como System_B é usado é a seguinte. Geramos entradas (usando o próprio System_B), IN, processamos essas entradas de volta através do System_B e geramos saídas, O_B. Portanto, o processo é o seguinte:
System_B(IN) -> O_B
.
Em seguida, fazemos o mesmo para o System_A gerar suas próprias saídas, O_A:
System_A(IN) -> O_A
.
A qualquer momento, assume-se que O_B é a saída esperada e O_A é a saída observada / real. Implícito é que O_B é a fonte "ouro" (a verdade). No entanto, encontramos uma combinação de problemas.
- O_A está errado, O_B está certo
- O_A está certo, O_B está certo
- O_A está errado, O_B está errado
- O_A está certo, O_B está errado
Quem determina o que é certo se O_B é considerado sempre correto (ou o que é esperado)? Bem, acontece que O_B às vezes (ou freqüentemente) está errado na inspeção e análise humana. As coisas passarão pelo controle de qualidade usando esse processo, e usuários reais reclamarão, e voltamos a descobrir que O_B estava errado, afinal.
A questão é a seguinte: é uma má prática criar um "sistema de teste" para testar o sistema real?
- E a encosta escorregadia? Então, não podemos argumentar que precisamos de outro sistema para testar o "sistema de teste"?
- O custo é definitivamente proibitivo, pois os desenvolvedores agora precisam aprender pelo menos duas bases de código, talvez com a complexidade do System_B maior que o System_A. Como quantificaríamos quão bom ou ruim ter o System_B por perto é para a organização?
- Um dos motivos "convincentes" originais para criar o System_B foi "automatizar" o teste. Agora, temos muito orgulho de ser totalmente automatizados (porque o System_B gera a entrada para inicializar o processo de uso próprio para também gerar a saída). Mas acho que fizemos mais mal e introduzimos mais complexidade, de maneira não quantificável. O trabalho do controle de qualidade deve ser totalmente automatizado? Essa razão é suficiente para justificar a criação de um sistema paralelo?
- Minha real preocupação é essa, mesmo que todos saibamos que o System_B está errado (com bastante frequência). Se System_B é tão bom no processamento da entrada e sua saída é a fonte de ouro, por que não substituir System_A por System_B? Para isso, ninguém no trabalho é capaz de fornecer uma resposta satisfatória.
Qualquer orientação sobre esse assunto é apreciada.