Del curso: Fundamentos esenciales de la programación
Testing y prueba de código
El testing o pruebas de software es la realización de pruebas sobre el código con el fin de detectar errores y mejorar su calidad. Según quién realiza las pruebas, tenemos dos tipos. Las pruebas manuales, que son aquellas en las que se prueba la navegación por la aplicación interactuando con la misma, por ejemplo accediendo a la aplicación y pulsando los botones para comprobar si funcionan o no, y las pruebas automáticas en las que se utiliza una herramienta para realizar los test. Por ejemplo, en una prueba automatizada podemos grabar una navegación y luego ejecutarla de forma automática desde la herramienta. En cuanto a las pruebas automáticas, tenemos las pruebas unitarias, en las que lo que hacemos es tomar cada unidad de software por separado y analizarla fuera de su contexto para validar lo que hace y que hace lo que tiene que hacer. Esto nos ayuda con la refactorización del código, que es reescribir el código de una manera más concisa y optimizada, facilita la integración con otras piezas de software y agiliza la documentación del código porque nos deja muy claro lo que hace y no hace el software. Para poder realizar test unitarios necesitamos una herramienta que nos permita, por un lado, escribir los test y, por otro, ejecutarlos. Una prueba unitaria, por ejemplo, sería probar si una función que calcula un impuesto aplica el cálculo correcto en base a un determinado precio. Por otro lado, tenemos las pruebas de integración con las que tratamos de complementar a las pruebas unitarias. Con ellas validamos la interacción del sistema completo, es decir, revisamos cómo se comportan las piezas del software entre sí. Es conveniente hacer los test de integración teniendo test unitarios para comprobar la fiabilidad en la comunicación de los componentes testeados entre sí. Tenemos, por un lado, pruebas estáticas que se realizan sin ejecutar el código de la aplicación y que pueden referirse a la revisión de documentos o pruebas de escritorio con el objetivo de seguir los flujos de la aplicación. Por otro lado, tenemos pruebas dinámicas, que son aquellas para cuya resolución requerimos la ejecución de la aplicación. Estas pruebas permiten recopilar datos sobre la performance de la aplicación y, debido a la naturaleza dinámica de la ejecución de pruebas, es posible medir con mayor precisión el comportamiento de la aplicación desarrollado. Existen, por otro lado, pruebas contra las especificaciones o ESRE. antes de explicarte qué son las pruebas debo explicarte que ESRE son las especificaciones de requerimientos, es decir, las especificaciones que plantea el arquitecto en base a las necesidades del cliente en nuestro proyecto. Estas pruebas las realizan los betatester o probadores beta, que se guían por este documento para validar si el sistema se comporta de la manera en que indican los requerimientos. Este documento contiene información detallada sobre requisitos funcionales y no funcionales que el cliente debe tener en el sistema. También se pueden ejecutar casos de pruebas a partir de las especificaciones de requerimiento, ya que estos son muy sencillos de seguir y se conocen de antemano los posibles resultados. Las pruebas, según lo que verifican, pueden ser funcionales o no funcionales. Una prueba funcional es una prueba basada en la ejecución, revisión y retroalimentación de las funcionalidades. Hay distintos tipos de pruebas como, por ejemplo, las unitarias, las de componente, de integración, de sistema, pruebas de humo, pruebas alpha, pruebas beta, pruebas de aceptación y pruebas de regresión. En las pruebas funcionales tenemos varios niveles. En primer lugar se empieza por las pruebas unitarias, luego las de integración, luego las pruebas de sistema, las de humo, las alpha, beta y finalmente las pruebas de aceptación. Además tenemos pruebas de regresión, que se pueden considerar como la ejecución, normalmente automática, de las pruebas ya realizadas hasta el momento. Por otro lado, tenemos las pruebas no funcionales. Estas pruebas tienen como objetivo la verificación de un requisito que especifica los criterios de requisitos. Por ejemplo, tenemos la disponibilidad, la accesibilidad, la usabilidad, mantenibilidad, seguridad y rendimiento. En primer lugar, tenemos las pruebas de compatibilidad, seguridad, estrés, usabilidad y rendimiento, y, por otro lado, realizamos las pruebas de escalabilidad mantenibilidad, instalabilidad y portabilidad. Si quieres contar con herramientas para realizar pruebas de software automáticas, puedes contar con Selenium, con Soapui, con LoadRunner, con lambaTest y con WebLOAD Professional, que son herramientas ampliamente conocidas para realizar test online a tu software.