Estamos en la recta final, hemos pasado muchos obstáculos pero al final nos encontramos en la etapa de validación y verificación. Unos pocos kilómetros antes de al fin entregarle al cliente, pero, no subestimemos esta última etapa ya que de hecho, es de las más importantes.

Cuando un equipo de desarrollo termina las tareas asignadas se llega el momento de poner a prueba el sistema contra todo tipo de hechizos malignos que se nos ocurran. Lo ideal es que el sistema resista, demostrando que esta listo para salir a producción, al mundo real.

Entonces, partimos de dos conceptos fundamentales, la validación y la verificación. Son dos palabras que suenan muy similares, sin embargo, a lo largo de este post haré lo posible para explicarte en qué difieren una de otra. Comencemos pues.

En la etapa de testing de software el proceso de verificación y validación (V&V) consiste en revisar que el sistema en cuestión cumpla con todas las especificaciones y requerimientos para los cuales fue creado. Algo así como control de calidad.

Básicamente, la diferencia entre Verificación y Validación se puede explicar en dos preguntas:

¿Estamos construyendo el producto de manera correcta? – VERIFICACIÓN

¿Estamos construyendo el producto correcto? – VALIDACIÓN

En sí, la verificación es asegurarnos que todos los criterios de calidad se cumplan, mientras que la validación confirma que los requerimientos establecidos en junta del cliente hayan sido desarrollados y que el sistema haga lo que el cliente necesita.

Para marcar la diferencia aún mas claro haré dos secciones, hablando específicamente de cada concepto.

Verificación

Se define como el proceso de evaluar la funcionalidad estable en cierta etapa de desarrollo, así determina si ya se han alcanzado los objetivos de la etapa o aún no.

El objetivo es asegurarse que el producto esta siendo desarrollado de acuerdo a los requerimientos de diseño. En otras palabras, la verificación asegura que el producto en el que se esta trabajando cumpla con las especificaciones requeridas.

Para evaluar el progreso se utilizan revisiones, inspecciones de código, e inclusive, demostraciones de su funcionamiento.

Validación

Esta definido como el proceso de evaluación de software durante o al final del proceso de desarrollo, para así determinar si es que satisface los requerimientos definidos por el cliente.

El objetivo es asegurar que el producto en realidad esté cubriendo las necesidades pactadas directamente con el cliente, y demostrar, a través de su funcionamiento y testeo, que así es.

Software verification and validation
Obtenido de: tryqa.com

Como se puede ver en la figura superior, el proceso de validación se efectúa al inicio del proceso de ingeniería de software y al final. Esto con el objetivo de asegurarnos que los requerimientos levantados en la primer etapa hayan sido cubiertos en la última. Mientras que la verificación se realiza cada que una especificación es cubierta, o bien, en cada iteración. Si surgen errores, se corrige y se pasa a la siguiente.

Para realizar todas las pruebas tanto de verificación como de validación de software se abordan distintas modalidades, cada una consiste en someter nuestro sistema a distintas condiciones que lo pongan a prueba. Algunas de las modalidades más conocidas son:

  • Pruebas unitarias.
  • Pruebas de integración.
  • Pruebas funcionales.
  • Pruebas de rendimiento.
Pruebas unitarias

Esta prueba se aplica en el elemento más pequeño de un sistema, cada componente es testeado para asegurar que funciona correctamente. Se utiliza principalmente por desarrolladores ágil, especialmente en extreme programming.

Algunas herramientas para pruebas unitarias son:

JunitPhpunitMochaMockitoChaiSinonJasmineJest,  Ava y TestNGPowermockXCTest

Pruebas de integración

Este tipo de pruebas son una extensión lógica de las pruebas unitarias. A partir de que dos o mas unidades han sido testeado se integran para hacer pruebas de la manera en la que funcionan uno complementando al otro. El motivo de esto es verificar la funcionalidad y seguridad entre componentes, se identifican problemas que surgen únicamente cuando comienzas a unir una función con otra.

Algunas herramientas de pruebas de integración son:

MochaJasmineJest y Ava

Pruebas funcionales

Las pruebas funcionales se basan en asegurarse que todas las características funcionen completamente, en todos los escenarios posibles. Es decir, se debe escudriñar todo el sistema, desde frontend hasta backend, hasta tener la certeza que cada función especificada en los requerimientos sea cumplida y funcione bajo cualquier escenario.

Algunas herramientas de pruebas funcionales son:

JmeterGatlingSupertestSoapUICucumberRobolectricKIF

Pruebas de rendimiento

El rendimiento es sumamente importante en un sistema, es parte de la calidad de todo el software, por lo que también nos debemos asegurar que funcione de la manera correcta. En sí, este tipo de pruebas determinan la actuación del sistema en términos de respuesta y estabilidad de carga en un trabajo particular. En pocas palabras, un buen rendimiento mantiene la eficiencia del sistema en todo tipo de escenario.

Algunas herramientas de pruebas de rendimiento son:

JmeterGatling

Como puedes ver, la validación y verificación de software y todo lo que conlleva un concepto u otro pueden llegar a diferir bastante, pero al final del día están enfocadas en mantener un software integro, funcional y útil tanto para el cliente como para los usuarios que tendrá.

Fuentes consultadas:

https://en.wikipedia.org/wiki/Software_verification_and_validation

http://softwaretestingfundamentals.com/verification-vs-validation/

http://tryqa.com/what-is-validation-in-software-testing-or-what-is-software-validation/

https://reqtest.com/testing-blog/software-verification-and-validation-differences/

https://apiumhub.com/es/tech-blog-barcelona/tecnicas-de-testeo-de-software/

Photo by Lukas from Pexels