Implanta procesos de Quality Assurance en tu organización

Asegura la calidad para que los requisitos de tu producto o servicio sean satisfechos

Visitas: 102

Quality Assurance es un concepto muy amplio, no solo aplicable al desarrollo del software, sino al desarrollo de cualquier actividad. Básicamente consiste en las medidas a aplicar a un proceso para asegurar la calidad del resultado.

Este punto (conjuntamente con la creación de la documentación) suele ser el talón de Aquiles de los proyectos de software. A la hora de planificar un desarrollo, no se suele tener en cuenta de forma adecuada la cantidad de tiempo, recursos y materiales necesarios para desarrollar esta actividad y eso repercute en la calidad del producto final.

El equipo

Se necesita un equipo especializado en QA, es decir, desarrolladores de software que han enfocado su carrera hacia esta rama del desarrollo, que si bien, su código no va a ir incluido en el producto final, el código que desarrollen es tan importante como el código del producto.

Para ello necesitamos un mínimo de tres personas, con las siguientes responsabilidades:

  • QA Manager - Responsable de determinar la mejor estrategia a seguir para testar el producto, la metodología a seguir, y seleccionar las herramientas a utilizar
  • 2 x QA Engineer - Responsables de implementar los diferentes tipos de test determinados por el QA Manager

A la hora de planificar el proyecto, el Project Manager debe tener en cuenta el tiempo necesario para implementar la infraestructura necesaria para testar el producto, y hacer un seguimiento, conjuntamente con el QA Manager, de la misma forma que se hace con el desarrollo del proyecto.

La metodología

Existe multitud de tipos de test que se pueden realizar, dependiendo del tipo de software, por lo que en este artículo recojo los más básicos, aplicables a la mayor parte de proyectos.

Test unitarios (Unit Testing)

Los test unitarios se encargan de verificar que el código se comporta de forma esperada. Se comprueba que los métodos/funciones devuelven los resultados esperados en base a unos parámetros específicos. El objetivo es asegurar que, de forma independiente, el código funciona como se espera. Esto, que inicialmente puede parecer suficiente, solo supone una manera de asegurar que las piezas que componen el software funcionan adecuadamente, pero no cubre los casos donde esas piezas, cuando se junten, funcionarán bien.

Code Coverage

Dentro de los test unitarios, se suele intentar cubrir la mayor parte de código posible, para ello, cuando se ejecutan los test unitarios, se lleva un control del código ejecutado en comparación con el código total escrito. Esto nos da un porcentaje, que determina la cantidad de código que se está comprobando con los test unitarios.

Pruebas de aceptación (Acceptance Testing)

Las pruebas de aceptación, por el contrario, comprueban una determinada característica del software, sin importar los resultados intermedios. Es decir, que apretando un botón, se realiza la acción esperada. Por lo general, este tipo de test intentan emular a un usuario utilizando el software, y requieren de algún tipo de automatización.

Test manuales

Aunque lo ideal es automatizar lo máximo posible la ejecución de los tests, dicha automatización conlleva un coste elevado, no solo de creación de los test, sino de su mantenimiento, ya que a medida que el software evolucione, los test tenderán a fallar y hay que revisar si lo que falla es el test, o es el software.

Para ello, y para evitar que el producto contenga fallos denominados catastróficos, lo que se suele hacer es la escritura de una serie de tests, que no son más que una lista de pasos a realizar por una persona de forma manual. Estos test se ejecutan cada cierto tiempo, y siempre antes de una release para garantizar que la operativa básica del producto funciona correctamente.

Test de estrés (Stress testing)

Finalmente, cuando el software así lo requiere, se realizan las pruebas de estrés. Por ejemplo, para una página web, se simula una carga determinada de usuarios concurrentes para revisar que el sistema se comportará adecuadamente ante una afluencia masiva de usuarios. Esto puede repercutir en tener que escalar los sistemas de forma dinámica para soportar esa carga. En un software de escritorio, puede requerir simular la carga de datos masiva para revisar que un proceso se ejecuta lo suficientemente rápido.

Las herramientas

Dependiendo del tipo de test, del tipo de aplicación, y de diversos factores, se requieren diversas herramientas, aquí indico algunas que puedo recomendar:

Test unitarios (Unit Testing)

Utilizar un framework xUnit, es decir, dependiendo del tipo de lenguaje de programación, se utilizara una librería que incorpora una serie de facilidades para escribir los test unitarios y las suites de test:

Pruebas de aceptación (Acceptance Testing)

Test manuales

Test de estrés (Stress testing)

Autor

Imagen de José León

Director Área Business Software Solutions