¿Cuántas veces hemos oído esta frase? Sin embargo, ¿cuántas veces hemos oído hablar también de retrasos en la entrega por un error inesperado o accidentes por sobrecarga de un sistema de tráfico o de transporte?
Como verdaderos profesionales del software es nuestra responsabilidad testear nuestro software y garantizar la calidad de este. Un software que no se testea correctamente no solo daña nuestra reputación o el nombre de nuestra empresa sino al cliente que ha pagado por él y en casos extremos, puede poner en peligro muchas vidas.
La industria del software ha avanzado mucho en los últimos años. Y en el tema de testing hay muchos libros y artículos que demuestran la importancia de hacer tests automáticos. Se han desarrollado diversas técnicas y modelos que facilitan la creación y mantenimiento de tests. Y aún así vemos a muchas empresas que están renuentes a incluir tests automáticos en su software.
Mi objetivo con este post es dar una introducción muy básica al arte del testing hoy en día y mostrar los diversos tipos de tests que hay, así como una pequeña descripción a modo de resumen.
A continuación, muestro una lista de los tipos de test que conozco:
- Unit Tests: Verifican la corrección de partes individuales de software (usualmente una función).
- Integration Tests: Verifican que las funcionalidades están correctas cuando todos los componentes o piezas de un proyecto están integrados y trabajando juntos.
- User Interface Tests: Verifican operabilidad, usabilidad y acceso a la funcionalidad deseada de un sistema.
- Stress Tests: Verifican situaciones extremas donde se necesita una gran capacidad de respuesta en el servidor u ordenador que ejecuta nuestra aplicación como por ejemplo: muchos usuarios accediendo a la misma vez, muchos datos a transmitir o pedidos a la base de datos, en fin, mucho… estrés.
- User Acceptance Tests: Verifica que la funcionalidad real de la aplicación responde a las necesidades del cliente.
- Smoke Testing: Verifican la funcionalidad más básica del programa antes de testear cosas complejas. Por ejemplo: El usuario hace click en un botón y una ventana (sin importar cuál) es abierta.
- Characterization Tests: Verifican que la funcionalidad anteriormente observada en el software sigue siendo la misma(no la correcta sino la observada). En realidad con detectores de modificaciones en el software.
- Regression Tests: Verifican que no hay daños colaterales después de añadir nuevas funcionalidades o cambios. Normalmente es un conjunto de unit tests preparados para correr después de codificar cualquier cambio. Testear solamente los nuevos cambios se suele llamar Non-regression testing.
- Security Tests: Buscan huecos en los mecanismos de seguridad de una aplicación (posibles vías de hacking).
- Destructive Tests: Verifican la robustez de un sistema al introducir datos inválidos o hacer comportamientos bizarros y anormales. Algunos de estos pueden ser una forma de Stress Tests.
- Recovery Tests: Verifica la recuperación del sistema después de que un error inesperado ocurra. Por ejemplo: un usuario desconecta el cable de red, el formato de los datos recibidos es incorrecto (podría ser incluso un hacker).
- Test-driven Development o TDD es un proceso de desarrollo en el cual los tests se hacen antes que el código (codificación guiada por tests). Esta es la última moda relacionada con tests y no creo que sea solo una moda, es una forma de programar que de llegar a implantarse finalmente en las empresas puede llegar a cambiar la forma en la que programamos para siempre, de la misma forma que lo hizo la Programación Orientada a Objetos en su momento o el copy & paste en su otro momento.
Os invito a añadir otros tipos de tests que conozcáis y no estén en la lista. ¡Feliz Testing!
Más información
Jorge Casals, estudió Cibernética en Cuba.
Es un fiel seguidor de la Programación Orientada a Objetos, los principios SOLID y los Patrones de Diseño.
Actualmente, trabaja como Analista-Programador en Sogeti.
0 comments on “¿TESTEAR? NO, NO HAY TIEMPO”