Hola a tod@s,
El pasado 27 de Mayo con la comunidad Arandasoft realicé una presentación sobre el ciclo de vida del proceso de pruebas en Windows Mobile y en desarrollo general; en esta entrada quisiera compartirles los apuntes más importantes. El proceso de pruebas debería contar con estas etapas: creación de plan de pruebas, revisión del diseño, revisión de la implementación, ejecución de pruebas desde la perspectiva de caja negra y blanca. La siguiente figura ilustra las anteriores etapas  y hace énfasis en que el proceso es paralelo al ciclo de desarrollo:
El plan de pruebas antes mencionado, es un plan general a todo el proceso y cada etapa debería tener su propio plan; la siguiente figura muestra un formato de un plan de pruebas de ejemplo:
Como podemos apreciar, los planes de prueba siempre hacen referencia a un escenario de implementación y sirven para asignar una prioridad a cada caso de prueba; adicionalmente cada caso de prueba debe tener su propio formato detallado como el que se muestra a continución:
Durante la etapa de revisión de diseño lo más importante es verificar que el diseño de la solución cumpla los requisitos funcionales y no funcionales, para lo cual debemos revisar los documentos de diseño (diagramas de arquitectura, componentes, casos de uso, etc); la manera de realizar ese proceso de forma ágil y repetible es a través de una lista de revisión como la siguiente:
En la lista de revisión (check list) de requerimientos funcionales podemos relacionar la funcionalidad y los componentes que la implementan. Luego avanzamos a la revisión de la implementación, que involucra revisar el código para verificar que se ajusta al diseño propuesto; en esta etapa también revisamos buenas práticas de codificación, para lo cual analizamos estáticamente el código con herramientas como FxCop en su versión stand-alone o embebida en Visual Studio (2005 en adelante).
Luego avanzamos hacia la etapa de ejecución de pruebas de caja negra para verificar la funcionalidad y las interfaces externas de nuestro sistema; en esta etapa también realizamos pruebas de rendimiento (estrés y carga), globalización y seguridad. Finalmente ejecutamos las pruebas de caja blanca para verificar y analizar la forma en que el código se comporta (análisis dinámico); en todas las etapas anteriores a esta verificamos si la implementación cumple con sus requerimientos y en esta etapa revisamos la forma como los cumple.
En las pruebas de caja blanca perfilamos el código (con herramientas como Visual Studio Profiler), ejecutamos las pruebas unitarias para conseguir métricas de coberura de código, analizamos el patrón de alocación de objetos en memoria (con el CLR Profiler o el .Net Memory Profiler), probamos las rutinas internas y revisamos la seguridad. El mensaje de la charla lo podemos sintetizar en la siguiente imagen:
En un nivel superior de abstracción tenemos los puntos de vista (caja negra/blanca/gris), de los cuales se desprenden las técnicas de prueba (funcionales, no funcionales y estructurales). Con base en las técnicas de prueba elaboramos los casos de  prueba y en dichos casos utilizamos herramientas. Entre más herramientas y datos de prueba formales utilicemos, más fácil será automatizar las pruebas.
Finalmente les quisiera compartir una foto de la charla en Microsoft Colombia:
Bueno, saludos y espero que aprovechen este recurso.