En el trabajo tenemos un sistema bastante complicado. Llamemos a este sistema, System_A. Nuestro equipo de control de calidad ha creado otro sistema, llame a este sistema, System_B, para probar System_A.
La forma en que se usa System_B es la siguiente. Generamos entradas (usando el propio System_B), IN, procesamos dichas entradas a través de System_B y generamos salidas, O_B. Entonces el proceso es el siguiente:
System_B(IN) -> O_B
.
Luego hacemos lo mismo para que System_A genere sus propias salidas, O_A:
System_A(IN) -> O_A
.
En cualquier momento, se supone que O_B es la salida esperada y O_A es la salida observada / real. Implícito es que O_B es la fuente "dorada" (la verdad). Sin embargo, nos hemos encontrado con una combinación de problemas.
- O_A está mal, O_B está bien
- O_A tiene razón, O_B tiene razón
- O_A está mal, O_B está mal
- O_A está bien, O_B está mal
¿Quién determina lo correcto si se supone que O_B siempre tiene la razón (o lo que se espera)? Bueno, resulta que O_B a veces (o con frecuencia) está mal con la inspección y el análisis humanos. Las cosas pasarán QA usando este proceso, y los usuarios reales se quejarán, y volveremos a encontrar que O_B estaba mal después de todo.
La pregunta es esta: ¿es una mala práctica crear un "sistema de prueba" para probar el sistema real?
- ¿Qué pasa con la pendiente resbaladiza? Entonces, ¿no podemos argumentar que necesitamos otro sistema para probar el "sistema de prueba"?
- El costo es definitivamente prohibitivo, ya que los desarrolladores ahora necesitan aprender al menos 2 bases de código, con quizás la complejidad de System_B mayor que System_A. ¿Cómo cuantificaríamos cuán bueno o malo es tener System_B para la organización?
- Una de las razones "convincentes" originales para crear System_B fue "automatizar" las pruebas. Ahora estamos muy orgullosos de estar completamente automatizados (porque System_B genera la entrada para arrancar el proceso de usarlo para generar también la salida). Pero creo que hemos hecho más daño e introducido más complejidad, de manera no cuantificable. ¿El trabajo de QA debe ser completamente automatizado? ¿Es esa razón suficiente para justificar la creación de un sistema paralelo?
- Mi verdadera preocupación es esta, a pesar de que todos sabemos que System_B está mal (con bastante frecuencia). Si System_B es tan bueno procesando la entrada y su salida es la fuente de oro, ¿por qué no reemplazar System_A con System_B? A eso, nadie en el trabajo puede proporcionar una respuesta satisfactoria.
Cualquier orientación sobre este tema es apreciada.