El término “Prueba” se ha utilizado a lo largo de los años como referencia a diferentes conceptos: haciendo mención a técnicas para realizar pruebas (pruebas de caja blanca y de caja negra) o dando nombre a diferentes estrategias y objetivos en la forma de aplicar las pruebas (unitarias, integración, aceptación o sistema) o presentando diferentes enfoques en la realización de las pruebas (TDD ,ATDD,STDD) o, finalmente, para dar soporte a nuevas metodologías relacionadas con los proyectos de pruebas como TMAP.
Las pruebas tienen objetivos diferentes: en las metodologías convencionales se utilizan como validación del producto desarrollado, mientras que en las metodologías ágiles se utilizan en sustitución de las especificaciones de requisitos y como guía para el desarrollo de software. Por lo tanto, se puede afirmar que las pruebas del software están evolucionando para desempeñar nuevos papeles en el desarrollo de software y sistemas. Este nuevo papel de las pruebas, como sustitución de los requisitos convencionales, es importante para subsanar algunos problemas que tienen las metodologías ágiles en relación con la identificación de requisitos.
Técnicas básicas de pruebas
Se han considerado dos categorías: caja blanca y caja negra.
Por un lado, las técnicas de caja blanca (caminos básicos, control de flujo, control de datos o pruebas de ramificación) están basadas en código fuente y se utilizan, principalmente, desde una perspectiva interna en el desarrollo de software. Como están basadas en el estado actual del código fuente, si se realizan cambios en la implementación, en la mayoría de los casos, también habrá que realizar cambios en los casos de pruebas. Esto requiere una alta cualificación en el equipo de desarrollo, tanto para la identificación de los casos de pruebas como para su implementación. Incluso, aunque las pruebas de caja blanca se pueden aplicar en diferentes estrategias de pruebas (unitarias, integración y sistema) fundamentalmente se aplican en el ámbito de las pruebas unitarias. En la actualidad herramientas como Clover o Cobertura permiten conocer la cobertura de código de las pruebas diseñadas.
En oposición a las pruebas de caja blanca, las pruebas de caja negra (particiones de equivalencia, análisis de valores límite, pruebas transversales, etc.) tienen una visión externa del producto software y no están centradas en el código fuente. Los casos de prueba se basan en las diferentes entradas que puede recibir el software y sus correspondientes valores de salida. Por lo tanto, están centradas en realizar pruebas del software a través de la funcionalidad. Estas técnicas se pueden aplicar a cualquiera de los niveles de pruebas (unitarias, integración, aceptación).
Fundamentalmente, en las metodologías convencionales las pruebas de caja negra las llevan a cabo los probadores. Sin embargo, en las metodologías ágiles se presentan dos perspectivas: por un lado los desarrolladores, que conocen los tipos de datos de cada uno de los parámetros, ejecutan las pruebas de caja negra a nivel de pruebas unitarias. Por otro lado, los del resto del equipo, que aunque no están directamente involucrados en el desarrollo, también participan en el diseño y ejecución de las pruebas. Aunque estos aspectos dependen claramente de los equipos de trabajo.
Dado que las técnicas básicas están directamente relacionadas con la cualificación de las personas que llevan a cabo el desarrollo y de las herramientas disponibles para el diseño de casos de prueba, no se puede considerar que las técnicas básicas tengan un papel diferente en las metodologías convencionales y en ágiles. En ambas metodologías, es muy importante la existencia de herramientas que, de forma automática, tomen medidas sobre la calidad del código o sobre el grado de cobertura que alcanzan los test diseñados.
Las pruebas en los enfoques convencionales
Cuando se habla de las pruebas en los enfoques convencionales, fundamentalmente se identifican cuatro actividades relacionadas: pruebas unitarias, pruebas de integración, pruebas de aceptación y pruebas de sistema. En estas metodologías se presta especial atención a la elaboración de la especificación de requisitos software. Dicha especificación se refina dentro del proceso de identificación de los requisitos del software mediante iteraciones. En este enfoque, el proceso de desarrollo se dirige desde la especificación de requisitos hacia el código y posteriormente desde el código hasta las pruebas.
En consecuencia, aunque en las metodologías convencionales las pruebas son importantes, éstas dependen directamente del resto de actividades del proceso de desarrollo. Y por lo tanto, en estos casos, el proceso de validación se entiende como un complemento del proceso de desarrollo.
El enfoque de las pruebas en las metodologías convencionales se basa en la definición de los casos de prueba correspondientes a las estrategias de prueba que se van a aplicar y su representación mediante los lenguajes adecuados del nivel en el que se realicen. Por ejemplo, en el caso del desarrollo de una aplicación utilizando el lenguaje Java, las pruebas unitarias y de integración se podrían realizar utilizando jUnit, y las pruebas de aceptación y de sistema utilizando, por ejemplo FIT.
Las pruebas en las metodologías ágiles
Ágile en general, y una particularmente Extreme Programming (XP), son de alguna manera los responsables del aumento de popularidad de las pruebas del software. En XP las necesidades de los usuarios se representan mediante “historias de usuario” que representan los requisitos del sistema. Cada historia de usuario lleva asociada criterios de aceptación y para cada criterio de aceptación se definen casos de prueba. Las pruebas de aceptación se escriben en las fases tempranas del desarrollo, y antes de que el sistema se implemente, para validar las necesidades de los usuarios y para dirigir la implementación. Se puede considerar que las historias de usuario y, por extensión, las pruebas asociadas juegan el papel de especificaciones del sistema.
En los enfoques ágiles las pruebas son el centro de la metodología y, por lo tanto son ellas las dirigen el proceso de desarrollo.
Las metodologías ágiles plantean que el desarrollo no es un conjunto de fases en las que las pruebas son una fase más, sino que abogan porque las prácticas y el desarrollo estén completamente integradas, lo que puede llevar a modificar las estructuras organizativas de las empresas. Las metodologías ágiles no consideran las pruebas como un conjunto de niveles que hay que ir superando para alcanzar la validación final del sistema que se está desarrollando. Las metodologías ágiles presentan distintos enfoques del proceso de desarrollo que vienen determinados por los tipos de pruebas que se realizan.
Conclusión
Las pruebas desempeñan un papel importante en los diferentes modelos de procesos que van desde los modelos convencionales a los ágiles. Mientras en las metodologías convencionales, las pruebas no se ejecutarán hasta que el código esté terminado, aunque puedan diseñarse antes de la codificación, en las ágiles las pruebas se escriben antes comenzar la codificación y sólo se escribe el código necesario para superar las pruebas y guían el proceso de desarrollo. El hecho de que las pruebas se hacen tan pronto como es posible, está alineado con la reducción del impacto del coste de la detección de errores en las fases de pruebas.
Con respecto a las actividades de diseño de las pruebas, éstas son de alguna forma distintas en las metodologías ágiles y convencionales. Las últimas tendencias dan más relevancia a las pruebas unitarias y de aceptación. En las metodologías ágiles, no se distinguen de forma específica las pruebas de integración sino que éstas se incorporan en las pruebas que se definen ya sea en la aplicación de TDD o de ATDD. Para lograr la integración en cada una de las iteraciones, se aplican entornos de integración continua. Estos entornos además permiten la realización automatizada de las pruebas de regresión del sistema desarrollado.
Desde el punto de vista de las técnicas básicas de pruebas, ambas metodologías aplican las mismas técnicas básicas de pruebas: caja blanca y caja negra. Aunque los actores y el papel que desempeñan las técnicas de pruebas son algo diferentes; aunque las prácticas puedan parecer semejantes a nivel práctico, no lo son a nivel semántico.
Finalmente, este papel cambiante de las pruebas también tiene una fuerte implicación en la definición general del proceso de desarrollo y que debe ser tenido en cuenta por los estándares de desarrollo.
Preguntas
1. ¿Cual de las siguientes afirmaciones sobre las pruebas es cierta?
a) En las metodologías convencionales se utilizan como validación del producto desarrollado
b) En las metodologías ágiles se utilizan como sustitución de las especificaciones de requisitos y como guia para el desarrollo de software.
c) El papel de las pruebas, como sustitución de los requisitos convencionales, es importante para subsanar algunos problemas que tienen las metodologías ágiles
d) Todas las respuestas son ciertas
2. Indica la afirmación correcta:
a) Las técnicas de caja negra se utilizan principalmente desde una perspectiva interna del desarrollo software
b) Las técnicas de caja blanca están basadas en código fuente
c) Las técnicas de caja negra están basadas en código fuente
d) Todas las afirmaciones son correctas
3. Fundamentalmente, en las metodologías convencionales las pruebas de caja negra las llevan a cabo los....
a) ninguna de las respuestas es correcta
b) los clientes
c) desarrolladores
d) probadores
4. Indica cual no es correcta
a) En las metodologias de caja blanca y negra es importante la automatización mediante herramientas de medidas de calidad del código o la cobertura que alcanzan los test
b) En los enfoques convencionales, se identifican cuatro actividades relacionadas: pruebas unitarias, pruebas de integración, pruebas de aceptación y pruebas de sistema.
c) En las técnicas de caja blanca se requiere una alta cualificación en el equipo de desarrollo
d) En oposición a las pruebas de caja blanca, las pruebas de caja negra están centradas en el código fuente.
a) Si
b) Depende el caso
c) No siempre
d) No
6. En las metodologías ágiles para lograr la integración en cada una de las iteraciones, se aplican:
a) entornos de integración fase a fase
b) entornos de integración continua
c) entornos de integración discontinua
d) entornos de integración discontinua y además permiten las realización automatizada de las pruebas de regresión del sistema desarrollado
7. Indica cual es correcta
a) Las pruebas de caja negra tienen una visión externa del producto software
b) Las pruebas de caja blanca tienen una visión externa del producto software
c) Las pruebas de caja negra están centradas en el código fuente
d) Las actividades de diseño de las pruebas son igueles en metodologías ágiles y convencionales
8. Cuan de las siguientes no es correcta
a) Las metodologías ágiles plantean que el desarrollo no es un conjunto de fases en las que las pruebas son una fase más
b) Las metodologías ágiles consideran las pruebas como un conjunto de niveles que hay que ir superando para alcanzar la validación final del sistema que se está desarrollando
c) Las metodologías ágiles abogan porque las prácticas y el desarrollo estén completamente integradas
d) Las metodologías ágiles presentan distintos enfoques del proceso de desarrollo que vienen determinados por los tipos de pruebas que se realizan
No hay comentarios:
Publicar un comentario