“Las pruebas de software son el proceso de ejecutar un programa con la intención de encontrar errores” — Glenford J. Myers.
La fase de prueba de un producto constituye hoy en día una de las labores más importantes de todo negocio, no únicamente en el mundo del software. Los alimentos que consumimos, los coches que conducimos, los juguetes que compramos y hasta la pasta de diente que usamos deben pasar por múltiples y minuciosas pruebas que garanticen la calidad antes de ser puesta en manos del cliente.
El objetivo esta fase es, en gran medida, garantizar un mínimo de calidad para evitar que el cliente encuentre fallos en el producto que puedan causar una perdida de confianza en la empresa, una mala imagen pública y en algunos casos, multas por valor de millones de dólares, como ocurrió con Samsung con el modelo Galaxy Note 7 y sus baterías defectuosas y explosivas.
Pero, como no podía ser de otra manera, el origen de esta necesidad de calidad es meramente económico. El principal motivo por el que este mercado a empezar a crecer tanto es debido a los altos costes que supone corregir estos fallos en etapas avanzadas, en cambio, detectarlos en fases tempranas es muy rentable.
Aunque términos como “testing” o “pruebas de calidad” puedan parecer novedosos, las pruebas de software se han venido realizando y evolucionando desde los inicios de la computación, diferenciando 5 importantes periodos en según los modelos de pruebas más influyentes:
Periodo de debugging (1947–1956)
En 1947, se acuñan los términos “bug” y “debugging”. Grace Murray, una científica de la universidad de Harvard que trabajaba con la computadora Mark II, detectó que una polilla se había quedado pegada en un relé provocando que éste no hiciera contacto. Detalló el incidente en la bitácora de trabajo, pegando la polilla con cinta adhesiva como evidencia y refiriéndose a la polilla como el “bug” (bicho) causante del error, y a la acción de eliminar el error como “debugging”.
Por entonces, las pruebas que se realizaban estaban enfocadas en el hardware debido a que no estaba tan desarrollado como hoy en día y su fiabilidad era imprescindible para el correcto funcionamiento del software. El término debugging estaba asociado a la aplicación de un parche para un determinado fallo como fase dentro de la etapa de desarrollo del software, y es por ello por lo que las pruebas que se realizaban eran únicamente de índole correctiva tomando ciertas medidas con el propósito de hacer funcionar el programa.
Es en 1949 cuando Alan Turing escribe su primer artículo acerca de realizar comprobaciones sobre un programa y después en 1950, en el artículo “Turing test”, expone la situación de cómo un software debe adaptarse a los requisitos de un proyecto y el comportamiento de una máquina o un sistema de referencia (lógica humana) debe ser indistinguible.
Periodo de demostración (1957–1878)
En 1957, Charles Baker expone la necesidad de desarrollar pruebas que garanticen que el software satisface los requisitos prediseñados (testing) además de la funcionalidad del programa (debugging).
El desarrollo de pruebas adquirió mayor importancia debido a que cada más aplicaciones, más caras y complejas estaban siendo desarrolladas, y el coste de solucionar todas esas deficiencias afectaba suponía un claro riesgo para la rentabilidad del proyecto, además de que la experiencia en este nuevo sector estaba aumentando.
Se puso especial foco en aumento del número y la calidad de pruebas, y por primera vez se empezó a relacionar la calidad de un producto con el estado de la fase de testing.
El objetivo era demostrar que el programa hacía lo que anteriormente se había dicho que debía hacer, usando parámetros esperados y reconocibles.
Periodo de destrucción (1979–1982)
En 1979, Glenford J. Myers, con la definición que leíste al comienzo de este capítulo, cambia radicalmente el procedimiento para la detección de fallos en el programa.
La preocupación de Myers era que al perseguir la meta de demostrar que un programa no tiene fallos, uno podría seleccionar subconscientemente datos de prueba que tienen una baja probabilidad de causar fallos en el programa, en cambio, si el objetivo es demostrar que un programa tiene fallos, nuestros datos de prueba tendrán una mayor probabilidad de detectarlos y tendremos más éxito en las pruebas y por ende en la calidad del software.
“Las pruebas de software son el proceso de ejecutar un programa con la intención de encontrar errores” — Glenford J. Myers.
Desde este momento, las pruebas intentarán demostrar que un programa no funciona como debería, al contrario de como se venía haciendo hasta entonces, conduciendo a nuevas técnicas de testing y análisis.
Periodo de evaluación (1983-l987)
En 1983 se propone una metodología que integra actividades de análisis, revisión y prueba durante el ciclo de vida del software con el fin de obtener una evaluación del producto según avanza el desarrollo.
La fase de testing se reconoce como una fase íntegra en la elaboración de un producto, adquiriendo especial importancia por la aparición de herramientas para el desarrollo de pruebas automatizadas, lo cual mejoró notablemente la eficiencia.
Periodo de prevención (1988 — actualidad)
En 1988, William Hetzel publica “The Growth of Software Testing” donde se redefine el concepto de prueba como la planificación, diseño, construcción, mantenimiento y ejecución de pruebas y entornos de prueba. Esta etapa, principalmente se reflejó en la aparición de la fase de testing en la fase más temprana en la elaboración de un producto, la etapa de planificación.
“Podemos seguir la evolución de la ingeniería de pruebas de software examinando los cambios en el modelo de procesado de pruebas y el nivel de profesionalidad a lo largo de los años. La definición actual de una buena práctica de prueba de software implica una metodología preventiva.”— William C. Hetzel
Es importante visualizar como la etapa de prueba de software ha evolucionado y ha ido emergiendo desde su ausencia hasta su presencia continua en todo el ciclo de vida.
Si imagináramos la fase completa del desarrollo como una línea finita, donde el principio es la planificación y el final es la monitorización del producto vendido, veríamos como la fase de pruebas se ha ido desplazando hacia la izquierda. Apareció siendo una etapa posterior a la fabricación, más tarde fue una etapa previa a la venta y actualmente se encuentra en toda la fase completa. Esta práctica es conocida como Shift-Left, y está ocurriendo en muchos otros campos, como trataremos en otros posts más adelante.
Comentarios