En este artículo conoceremos las técnicas de caja negra más utilizadas.
Las técnicas de prueba son mecanismos que los testers utilizan con el objetivo de identificar los casos de prueba con mayor probabilidad de encontrar defectos y obtener la mayor cobertura posible en cuanto a las pruebas de algún sistema. Cuando hablamos de técnicas de caja negra, esto significa que al poner en práctica estas técnicas, solo nos concentraremos en los datos de entrada y los resultados obtenidos en la prueba, sin ver la estructura interna de la funcionalidad.
¿Por qué utilizar técnicas de pruebas de caja negra?
Según mi experiencia profesional a través de los años, las técnicas de prueba de caja negra, brindan los siguientes beneficios:
Ayudan a determinar los casos de prueba negativos de una manera más eficaz.
Hacen más visible los casos de prueba con la mayor probabilidad de tener defectos.
Ahorra el diseño y la ejecución de pruebas redundantes.
Ayudan a medir el porcentaje de cobertura de las pruebas.
Veamos algunas de estas técnicas de prueba de caja negra y como se manifiestan los beneficios listados arriba.
Partición de equivalencia (equivalence partitioning): en esta técnica se dividen los datos de entrada en particiones o clases de equivalencia, los datos que producen el mismo resultado son agrupados en una misma clase, es decir, se espera que todos los miembros de una partición sean procesados de la misma manera. Algunas consideraciones a tener en cuenta con esta técnica:
Cada dato de entrada de debe pertenecer a una sola partición o clase de equivalencia.
Los valores válidos son los que se supone que el sistema debe aceptar. Las particiones que contienen los valores válidos son llamadas "partición de equivalencia válida".
Similar al punto anterior, los valores que son rechazados por un sistema son llamados valores no válidos y las particiones que los contienen se conocen como "partición de equivalencia no válida".
Cada una de las particiones de equivalencia no válidas son un caso de prueba diferente y deben probarse de manera independiente, no deben combinarse como un solo caso de prueba solo por el simple hecho de que son inválidas.
Ejemplo:
Imaginemos que tenemos un sistema que solo permite el acceso a personas de 18 a 60 años de edad (para fines de este ejemplo vamos a obviar la existencia de números negativos) y el sistema le pide al usuario que introduzca su edad, si el usuario tiene menos de 18 años o más de 60 no permite el acceso y lanza un mensaje dependiendo de la edad, a los menores de 18 les dice: "No puede acceder, su edad es menor a la requerida" y a los mayores de 60: "No puede acceder, su edad es mayor a la requerida". Veamos las particiones de equivalencia:
Partición no válida | Partición válida | Partición no válida |
---|---|---|
<=17 | 18-60 | >=61 |
Ya que el sistema debe comportarse de la misma manera para todos los menores de 18 años, todas esas edades se agrupan en una misma partición y así igual con los otros dos grupos. Para lograr un 100% de cobertura los casos de prueba deben cubrir cada una de las particiones identificadas, utilizando como mínimo un valor de cada partición para las pruebas. Esto quiere decir que utilizando solo tres valores (uno de cada partición) ya probamos todos los casos. Aquí vemos dos de los beneficios mencionados arriba:
Nos ahorrarnos la ejecución de pruebas redundantes, por ejemplo, sería lo mismo probar con 18 que probar con 25, o probar con 1 que probar con 17.
Podemos medir el porcentaje de cobertura fácilmente, por ejemplo, si probamos con 15, 20 y 62 ya tenemos el 100% de cobertura.
Análisis de valor de límite (Boundary Value Analysis): Esta técnica es una extensión de la partición de equivalencia, solo se utiliza para valores numéricos y cuando los valores se encuentran ordenados. Una partición contiene un valor inicial y un valor final (un número mínimo y uno máximo) y son denominados como valores límite.
A diferencia de la partición de equivalencia, que toma como mínimo un número dentro del rango de la partición como dato de entrada, en esta técnica obligatoriamente deben tomarse como mínimo los dos valores límite y opcionalmente, un valor entre los límites. Veamos un ejemplo:
Para este sistema de calificaciones cada letra representa un rango (F=0-64, D=65-69, C=70-79, B=80-89, A=90-100), los valores válidos van de 0 a 100, los valores menores que 0 representan una partición inválida, al igual que los valores mayores a 100.
Para obtener una cobertura de 100% el usuario debe introducir al menos todos los valores que se encuentran en azul en la imagen siguiente:
Esta técnica surge como respuesta a un caso muy común: es muy probable encontrar defectos en los valores límites, siguiendo el ejemplo dado, puede que se haya cometido un error al programar uno de los rangos de calificaciones y que 65 se registe como F en el sistema.
Aquí nuevamente vemos algunos de los beneficios que se mencionan más arriba:
Ayudan a determinar los escenarios negativos de una manera más eficaz: vemos claramente cuales son las particiones inválidas.
Hacen más visible los casos de prueba con la mayor probabilidad de tener defectos: en los límites se tiende a encontrar más defectos que en el medio de un rango.
Tabla de decisión (Decision table): Es una técnica utilizada para probar el comportamiento de un sistema utilizando diferentes combinaciones de entrada. Este es un enfoque donde las diferentes combinaciones de entrada y los resultados se muestran en forma tabular.
En las filas se colocan las condiciones y los resultados, donde las condiciones se ponen en la parte superior y los resultados en la parte inferior.
Cada columna corresponde a una regla la cual es definida por las combinaciones de entrada.
Los valores a colocarse son generalmente booleanos como V (verdadero) y F (Falso). Si hay un valor que no importa para obtener cierto resultado se puede marcar con un guion "-".
Ejemplo:
Vamos a crear una tabla de desición para una página de inicio de sesión.
Las codiciones son simples, si se proporciona un usuario y una contraseña válida, el usuario puede iniciar sesión exitosamente, de lo contrario aparecerán mensajes de error. Para la siguiente tabla E=Error, S=Inicio de sesión exitoso.
Condiciones | Regla 1 | Regla 2 | Regla 3 | Regla 4 |
Usuario válido (V/F) | F | V | F | V |
Contraseña válida (V/F) | F | F | V | V |
Resultados | E | E | E | S |
Ya con esta tabla fuimos capaces de generar 4 casos de pruebas para probar una página de inicio de sesión.
Técnica de Transición de Estado (State Transition Testing): En esta técnica las condiciones de entrada provocan cambios de estado. Es ideal para cuando el sistema bajo prueba dependende de eventos o valores pasados y para cuando se debe probar un sistema que consta de una secuencia de eventos. Ejemplo:
Utilizando el mismo de inicio de sesión de la técnica anterior, supongamos que si una persona introduce una contraseña incorrecta tres veces seguidas el usuario se bloquea. Veamos como se representa esto en un diagrama de transición de estado.
La cobertura para esta técnica se mide, habitualmente, como el número de estados o transiciones identificados probados, dividido por el número total de estados o transiciones identificados en el sistema, y es normalmente expresado como un porcentaje.
Hola amigo lector, estas son las técnicas de pruebas de caja negra más conocidas y utilizadas, espero que este artículo te sea de ayuda. Cualquier pregunta acerca del tema, no dudes en contactarme.
Para conocer acerca de las pruebas estructurales visita mi artículo anterior ---> Tipos de pruebas - Pruebas de caja blanca
Fuentes: Syllabus ISTQB Foundation Level, Guru99
En testing existen los tester y en Aseguramiento de la Calidad los QA
Saludos, excelente artículo :)