Tarea: Planificar las de pruebas del desarrollo
Planificar las pruebas del desarrollo de la solución tecnológica.
Disciplinas: Verificación y ValidaciónVerificación y Validación
Objetivo

Esta actividad comprende:

  • Planificar cómo se van a verificar los productos relacionados a la construcción de la solución tecnológica
  • Identificar y describir los métodos a ser usados para realizar la verificación
  • Identificar y describir los métodos a ser usados para verificar que se mantiene la trazabilidad entre los diferentes productos de trabajo a verificar.
Relaciones
Descripción principal

Las pruebas y la verificación del software deben ser pensadas de forma estratégica y organizada, administrando de la mejor manera posible los recursos y el tiempo disponible, de forma tal de maximizar su eficiencia.

El establecimiento de políticas para la verificación del software dan una guía y un marco en el cual la verificación del software debe ser llevada a cabo. El plan de pruebas deberá ser creado respondiendo a las políticas que se definan en el organismo. Hay organismos que adoptan políticas que rigen para todos los proyectos de software, mientras que otros, solo aplican las políticas a un número limitado de proyectos. Lo ideal es tener un conjunto de políticas que se apliquen a todos los proyectos que tiene el organismo. El uso de políticas da paso a una mejor comprensión y organización del proceso de pruebas porque contribuyen a servir como guía en la planificación de las pruebas de los proyectos de software. Ejemplo de políticas para el plan de verificación.

Además del establecimiento de políticas, es necesario definir la estrategia de verificación. Para esto, se recomienda consultar los pasos detallados en esta actividad, con la ayuda de la plantilla para Plan de Verificación y Pruebas.

Pasos
Definir los niveles de pruebas

Los niveles de pruebas definen grupos de actividades que se deberán realizar sobre el software, siguiendo su ciclo de construcción y desde la perpectiva del objeto o artefacto que está bajo verificación (si es una clase, un conjunto de clases, o un subsistema).

Ejemplos de niveles de pruebas son: las pruebas de componente (o unitarias), las pruebas de integración, las pruebas de sistema y pruebas de aceptación de usuario. Para cada proyecto de software se debe definir una estrategia de pruebas y dicha estrategia debe contemplar los diferentes niveles de pruebas a realizar.

Los objetivos de los diferentes niveles de prueba son:

  • Pruebas de componente (o unitarias): El foco de dichas pruebas es verificar las funcionalidades de cada componente (puede ser una clase, un conjunto de clases, un método, una función, etc) de forma aislada del resto del sistema, considerando el comportamiento que el mismo debe tener según su especificación.
  • Pruebas de integración: El objetivo es verificar que la comunicación e interacción de los componentes es adecuada. El foco principal de la integración es evaluar la comunicación (intercambio de información) entre los diferentes componentes prestando atención a las interfaces entre ellos y que el funcionamiento en conjunto sea el correcto. También en este caso se verifica la comunicación con otros sistemas (sistemas externos).
  • Pruebas de sistema: En estas pruebas se verifica el sistema como un todo (con todos sus componentes ya integrados) y también en comunicación con otros sistemas (externos).
  • Pruebas de aceptación de usuario (UAT): Son pruebas que se realizan con el objetivo de validar el software. El foco es comprobar que el software se comporte como el usuario espera que lo haga y cumpla con sus necesidades. Estas pruebas es recomendable que sean ejecutadas por el cliente/usuarios.

 La siguiente imagen es una representación de cómo se agrupan los principales niveles de pruebas mencionados:


Es necesario definir en el plan de pruebas qué niveles de pruebas se van a cubrir (van a estar contempladas) y cuáles no. Un aspecto importante a definir para cada nivel de pruebas es el criterio de parada (o de terminación) de las pruebas.

Al definir los niveles de prueba, es necesario definir los ambientes en donde se realizarán dichas pruebas. Para esto, sugerimos revisar la Guia para la definición de ambientes.

Definir tipos de pruebas a realizar

Existen diferentes tipos de prueba que se pueden realizar sobre los productos de software. Estos tipos de prueba se pueden realizar a distintos niveles (unitario, de integración o de sistema) y con diferente grado de profundidad.

Es necesario definir los tipos de prueba a realizar en base a los requerimientos (funcionales y no funcionales) del sistema y los aspectos de calidad críticos definidos para el software a construir. En la plantilla de Plan de Verificación y Pruebas se presentan varios tipos de pruebas (de esfuerzo, de seguridad, de usabilidad, entre otras) entre los cuales se puede elegir cuáles aplican y cuales no al proyecto.

Algunos tipos son los siguientes:

  • Pruebas de humo: Corresponden a un conjunto acotado de pruebas que son imprescindibles para verficar que el sistema no tiene defectos bloqueantes que impidan una correcta verificación del mismo en su totalidad. En general estas pruebas se realizan por el equipo de verificación cuando una nueva versión es liberada, para comprobar que el sistema tiene la calidad mínima necesaria como para no entorpecer en gran medida el proceso de pruebas.
  • Pruebas funcionales: El objetivo es verificar el correcto funcionamiento de las distintas funcionalidades que debe proveer el sistema, ya sea de forma individual o en conjunto.
  • Pruebas no funcionales:
  • Pruebas de performance: En este tipo de pruebas se mide y evalúa el rendimiento del sistema. En general puede incluir: los tiempos de respuesta, de procesamiento y otros requerimientos sensitivos al tiempo. El objetivo de la prueba es verificar que se logren los niveles esperados de rendimiento del sistema.
  • Pruebas de seguridad: Las pruebas de seguridad se enfocan en evaluar el sistema en dos aspectos:
    • Seguridad en el ámbito de aplicación, incluyendo el acceso a los datos y a las funciones de negocios: en base a la seguridad deseada, se verifica que los actores estén restringidos a funciones o casos de uso específicos o limitados en los datos que están disponibles para ellos.
    • Seguridad en el ámbito de sistema, incluyendo conexión, o acceso remoto al sistema: la seguridad en el ámbito de aplicación asegura que solo los usuarios con derecho a acceder al sistema son capaces de acceder a las aplicaciones únicamente a través de los puntos de ingresos apropiados.
  • Pruebas de regresión: Permiten corroborar que luego de realizar cambios en el sistema (corregir defectos o agregar nuevas funcionalidades), el resto del sistema continúa comportandose correctamente (no se rompió nada que antes funcionaba).
  • Pruebas automatizadas: pueden ser de varios tipos y corresponder a múltiples niveles. Son pruebas en las cuales no hay una ejecución manual realizada por una persona, donde las mismas se implementan utilizando algún lenguaje de programación (o utilizando alguna biblioteca específica para un determinado lenguaje, como ser JUnit, NUnit o similar) y se ejecutan en algún software de apoyo para ejecución automatizada de pruebas (ej: Jmeter) . Es imporante que al momento de decidir qué pruebas automatizar se evalue el costo/beneficio de hacerlo, ya que requieren mantenimiento como cualquier proyecto de software. Este tipo de pruebas se recomiendan generalmente para pruebas de performance y de regresión (unitarias, de integración y de sistema).

De cada tipo de prueba definida a realizar y que aplica a la solución a construir, se debe definir:

  • Técnicas y herramientas a utilizar
  • Niveles en los cuales aplica este tipo de prueba y sobre qué partes de la solución
  • Criterios de terminación (o parada) para las pruebas (se puede definir un determinado grado de cobertura por ejemplo)
  • Otras informaciones adicionales dependiendo del tipo de prueba a realizar

En relación a las técnicas para la especificación (diseño) de pruebas, éstas facilitan la identificación y definición de los escenarios de pruebas necesarios. Las siguientes técnicas de diseño son recomendadas por el estándar internacional ISTQB:

  • Clases de Equivalencia o Partición de Equivalencia: Esta técnica permite definir los valores válidos y no válidos que son necesarios para la ejecución de un determinado escenario de prueba. Esta técnica le da al Probador de software, dominio de los datos y contexto de entrada.
  • Valores Límites: Esta técnica está directamente asociada a las clases de equivalencia. Para cada clase de equivalencia válida o inválida se analizan los valores que están en el límite, por encima y por debajo del límite. Está demostrado que muchos defectos se encuentran en los límites de las clases de equivalencia del dominio.
  • Tablas de Decisión: Esta técnica se usa para representar reglas complejas del negocio. Se identifican todas las posibles condiciones (entradas) y posibles acciones (salidas) y sus posibles combinaciones. Debe existir una regla para cada posible combinación de condiciones.
  • Diagramas de Transición de Estado: Esta técnica es usada para diseñar las pruebas a partir de máquinas de estado. Permite ilustrar la secuencia de funciones en un orden válido y encontrar el orden correcto para la ejecución de los casos de prueba ya que el comportamiento posterior de un caso de prueba, depende del comportamiento del caso anterior.
  • Basadas en la Experiencia: Se basa en la habilidad, la experiencia y la intuición del Probador de software. No tiene un método o proceso a seguir (no se realiza de forma sistemática. Se utiliza fuertemente la predicción de errores, basados en el histórico de pruebas y comportamiento del sistema.

Se recomienda fuertemente considerar y aplicar algunas de las técnicas antes mencionadas. Éstas colaborarán en un resultado exitoso del proceso de pruebas, en el logro de los objetivos, y en la satisfacción, confianza y seguridad del cliente en el uso de la solución tecnológica.

Definir los procesos de comunicación y reporte de incidencias

Es necesario definir el proceso de reporte de incidencias, cómo una incidencia o potencial error debe ser reportado y las diferentes fases o etapas por las cuales pasa el incidente hasta ser resuelto. También las jerarquías y permisos para cambiar una incidencia de estado o cerrarla. Un ejemplo de estados por los que puede pasar una incidencia son los siguientes:

Imagen relacionada

También es necesario definir diferentes niveles de gravedad de las incidencias reportadas, entre otros datos o información relevante.

Lo que se recomienda fuertemente es el uso de una herramienta de gestión de incidentes o de gestión de tareas. Algunas opciones gratuitas pueden ser: Bugzilla, Mantis, Request Tracker (RT), o similares.

Definir los recursos necesarios

Los recursos a definir en general son de dos tipos: humanos y de sistema.

Para los recursos humanos es necesario definir los roles que deberán participar, la cantidad de recursos necesarios para ese rol y las responsabilidades.

Para los de sistema será necesario definir los recursos materiales en relación a hardware y software necesario para poder llevar a cabo las pruebas.
Validar el plan de pruebas

Como último paso, se deberá validar el plan de pruebas. En la Guia para verificar el plan de pruebas se puede encontrar un procedimiento sugerido para realizar esta actividad.

Factores clave