La diferencia radica en lo que prueban. Las pruebas funcionales comprueban el funcionamiento adecuado de la aplicación de acuerdo con los esperado (requisitos del cliente). Las pruebas no funcionales comprueban otros aspectos de la aplicación que afectan a la satisfacción del usuario y a la calidad de la aplicación.
Las pruebas funcionales y no funcionales se realizan en distintas fases de las pruebas de software, pero ambos tipos de pruebas suelen llevarse a cabo durante la fase de pruebas del sistema.
Tanto las pruebas funcionales como las no funcionales pueden ayudarnos a comprender lo bien que funciona una aplicación y si realiza su trabajo adecuadamente.
Por ejemplo, si estás probando una aplicación móvil que permite a los usuarios guardar listas de tareas pendientes y listas de la compra, las pruebas funcionales pueden probar funciones como crear una lista nueva, guardar una lista y modificar las listas existentes.
Las pruebas no funcionales pueden evaluar lo bien que funciona la aplicación en distintos dispositivos móviles, lo rápido que se cargan las listas y cuánto se ve afectado el rendimiento de la aplicación cuando otras Apps se ejecutan en segundo plano.
¿Qué tipos de pruebas existen dentro de funcional?
Existen muchos enfoques y clasificaciones. Por ejemplo, podríamos comenzar hablando de testing exploratorio o planificado (o guionado, scripted en Inglés).
La particularidad del testing exploratorio es que presenta una estructura externa que es sencilla de describir, en la que durante un lapso de tiempo preestablecido, un tester interactúa con un producto para cumplir con el objetivo de una misión. El objetivo de esto es poder luego presentar y reportar los resultados del proceso, los cuales serán utilizados por el resto de los actores del proyecto para tomar decisiones a conciencia.
Por otra parte, podemos clasificar según el nivel al que realizamos las pruebas o el momento en el ciclo de desarrollo. Así es que podemos distinguir entre pruebas unitarias, pruebas de componentes, pruebas de humo, pruebas de integración, pruebas de sistemas, de regresión, pruebas de aceptación del usuario y más.
Nos enfocaremos en algunas de ellas:
- En las pruebas unitarias, se prueban las diferentes unidades de modo individual, generalmente acá hablamos de unidades a nivel de código. Se trata de pruebas muy específicas, para las cuales es preciso aislar un fragmento del código, el cual corresponde exclusivamente a lo que se quiere probar. Realizar este tipo de pruebas busca detectar errores tempranamente y evitar que escalen.
- Realizamos pruebas de integración cuando necesitamos integrar una funcionalidad al sistema y verificarla en conjunto con el resto de componentes del sistema que estamos probando, con el fin de evaluar si funcionan correctamente en conjunto. Esto puede darse a nivel de integración de unidades de código, a nivel de servicios (a nivel de la API de un sistema en capas), a nivel de aplicaciones o incluso a nivel de sistema, cuando estamos integrando los cambios en distintos componentes.
- Las pruebas de regresión son un subconjunto de las pruebas planificadas que se seleccionan para ejecutar periódicamente, por ejemplo ante cada nueva liberación del producto. Tienen el objetivo de verificar que el producto no haya sufrido alteraciones en su funcionamiento ante el ingreso de nuevas funcionalidades o procesos..
En otras palabras, y en línea con el punto previo, si queremos verificar que las integraciones que realizamos no hayan afectado otra funcionalidad previamente probada, precisamos realizar testing de regresión. Además, son pruebas muy relevantes para verificar que lo que antes andaba bien ahora siga funcionando.
¿Qué tipos de pruebas existen dentro del no funcional?
Cada tipo de pruebas se asocia a un factor de calidad. Algunos de los más destacados son:
- Pruebas de usabilidad, evalúan el grado en que el sistema puede ser utilizado por usuarios específicos con efectividad, eficiencia y satisfacción en un contexto de uso específico. Existen varias técnicas para analizar la usabilidad, las cuales buscan detectar mejoras posibles en características asociadas a la experiencia de usuario, como por ejemplo que un sistema sea más intuitivo y fácil de utilizar, entre otras cosas.
- Pruebas de accesibilidad, es parte del testing de usabilidad, pero su foco es que todas las personas puedan utilizar el sistema, incluyendo en todos los casos a quienes tienen algún tipo de discapacidad, contextual, temporal o permanente.
- El testing de accesibilidad ayuda a detectar los errores y barreras que pueden existir en el software, pero que no son fácilmente detectables si no se realizan pruebas específicas para encontrarlas. Se recomienda la incorporación de la accesibilidad en todo el ciclo de vida del desarrollo de software.
- Pruebas de seguridad, buscan posibles vulnerabilidades o amenazas que puedan afectar la protección, disponibilidad e integridad de los datos o la funcionalidad del sistema. Este tipo de pruebas son importantes como mecanismo preventivo, en búsqueda de posibles vulnerabilidades.
De todos modos, no es posible prevenir todo y es crucial contar con protocolos específicos para ser utilizados ante eventuales ataques informáticos.
Según el Informe de Riesgos Globales 2022 del Foro Económico Mundial, el malware aumentó un 358% en 2020, mientras que el ransomware se incrementó en un 435%.
- Pruebas de performance, analizan tanto los tiempos de respuesta como el consumo de recursos. Para ello, se simulan múltiples usuarios concurrentes y se analiza el rendimiento de la aplicación bajo prueba. Cuanto más expuesta, más usuarios y variables haya en torno a una aplicación, más importante se torna realizar este tipo de prueba.
Para analizar estos comportamientos, se suele poner al sistema bajo una gran cantidad de usuarios en concurrencia mientras se mide el uso de recursos en búsqueda de cuellos de botella. Dentro de esta categoría, podemos encontrar pruebas de carga, volumen y estrés entre otras.
Para concluir, este tema, nuestros expertos recomiendan siempre diseñar una estrategia en la que se combinen ambos tipos de testing desde fases tempranas (shift left), trabajarlas en todo el proceso (testing continuo), monitorear en producción, y usar esa información para mejorar la calidad del software y la calidad de nuestras pruebas (shift right).
¡Síguenos en nuestras redes sociales para ser parte de nuestra comunidad y afianzar tus conocimientos en Aseguramiento de calidad y pruebas de Software!