Las pruebas de software, como un proceso separado, presenciaron un crecimiento vertical y recibieron la atención de los interesados en el proyecto y los patrocinadores comerciales en la última década. Se han introducido continuamente nuevas técnicas. Muchas empresas se especializan en un tipo particular, como las pruebas automatizadas de Inflectra. Además de las técnicas de prueba tradicionales, se realizaron varias técnicas nuevas necesarias por la complicada lógica de negocios y desarrollo para hacer que las pruebas de software sean más significativas y útiles. Esta parte discute algunas de las técnicas de prueba populares que han sido adoptadas por la comunidad de prueba. Estas técnicas son
Prueba de caja negra (funcional)
Prueba de caja blanca (estructural)
Prueba de caja gris (funcional y estructural)
- ¿El diseño web tendrá demanda este 2017? ¿Por qué?
- ¿Qué debería ser en lugar de un diseñador de moda?
- ¿Cuál es la diferencia entre un director de diseño y un director de arte?
- ¿Cuáles son las características del diseño gráfico moderno de mediados de siglo?
- ¿Los diseñadores web necesitan saber cómo ilustrar?
Prueba manual versus prueba automatizada
Pruebas estáticas versus dinámicas
Prueba de caja negra (funcional)
En las pruebas de caja negra o funcional, las condiciones de prueba se desarrollan sobre la base de la funcionalidad del programa o sistema; es decir, el probador requiere información sobre los datos de entrada y la salida observada, pero no sabe cómo funciona el programa o sistema. Así como uno no tiene que saber cómo funciona internamente un automóvil para conducirlo, no es necesario conocer la estructura interna de un programa para ejecutarlo.
El probador se enfoca en probar la funcionalidad del programa contra la especificación. Con las pruebas de recuadro negro, el probador ve el programa como un recuadro negro y no se preocupa por la estructura interna del programa o sistema. Algunos ejemplos en esta categoría incluyen tablas de decisión, partición de equivalencia, prueba de rango, prueba de valor límite, prueba de integridad de base de datos, gráficos de causa y efecto, prueba de matriz ortogonal, prueba de matriz y tabla, prueba de excepción, prueba de límite y prueba aleatoria.
Una ventaja importante de las pruebas de caja negra es que las pruebas están orientadas a lo que se supone que debe hacer el programa o sistema, lo cual es natural y entendido por todos. Esto debe verificarse con técnicas como recorridos estructurados, inspecciones y diseños de aplicaciones conjuntas (JAD). Una limitación es que no se pueden realizar pruebas exhaustivas de entrada, ya que esto requiere que se prueben todas las condiciones o combinaciones de entrada posibles. Además, debido a que no hay conocimiento de la estructura interna o lógica, podría haber errores o travesuras deliberadas por parte de un programador que pueden no ser detectables con las pruebas de caja negra. Por ejemplo, supongamos que un programador de nómina desea insertar algo de seguridad laboral en una aplicación de nómina que está desarrollando. Al insertar el siguiente código adicional en la aplicación, si el empleado fuera despedido, es decir, su identificación de empleado ya no existiera en el sistema, la justicia tarde o temprano prevalecería:
si mi identificación de empleado existe
depositar cheque de pago regular en mi cuenta bancaria
más
depositar una enorme cantidad de dinero en mi cuenta bancaria
borrar cualquier posible rastro de auditoría financiera
borrar este código
Prueba de caja blanca (estructural)
En las pruebas de caja blanca o estructural, las condiciones de prueba se diseñan examinando las rutas de la lógica. El probador examina la estructura interna del programa o sistema. Los datos de prueba se controlan examinando la lógica del programa o sistema, sin preocuparse por los requisitos del programa o sistema. El probador conoce la estructura y lógica interna del programa, tal como un mecánico de automóviles conoce el funcionamiento interno de un automóvil. Los ejemplos específicos en esta categoría incluyen análisis de ruta de base, cobertura de estado de cuenta, cobertura de sucursal, cobertura de condición y cobertura de sucursal / condición.
Una ventaja de las pruebas de caja blanca es que es exhaustiva y se centra en el código producido. Debido a que existe un conocimiento de la estructura interna o la lógica, los errores o las travesuras deliberadas de un programador tienen una mayor probabilidad de ser detectados. Una desventaja de las pruebas de caja blanca es que no verifica que las especificaciones sean correctas; es decir, se centra solo en la lógica interna y no verifica la conformidad de la lógica con la especificación. Otra desventaja es que no hay forma de detectar rutas faltantes y errores sensibles a los datos. Por ejemplo, si la declaración en un programa se codifica “if | ab | <10" pero se codifica "if (ab) <1", esto no sería detectable sin detalles de la especificación. Una desventaja final es que las pruebas de caja blanca no pueden ejecutar todas las rutas lógicas posibles a través de un programa porque esto implicaría una gran cantidad de pruebas astronómicamente.
Prueba de caja gris (funcional y estructural)
Las pruebas de caja negra se centran en la funcionalidad del programa contra la especificación. Las pruebas de caja blanca se centran en los caminos de la lógica. Las pruebas de caja gris son una combinación de pruebas de caja negra y blanca. El probador estudia las especificaciones de requisitos y se comunica con el desarrollador para comprender la estructura interna del sistema. La motivación es aclarar especificaciones ambiguas y “leer entre líneas” para diseñar pruebas implícitas. Un ejemplo del uso de las pruebas de caja gris es cuando el evaluador le parece que cierta funcionalidad parece reutilizarse en una aplicación. Si el probador se comunica con el desarrollador y comprende el diseño interno y la arquitectura, se eliminarán muchas pruebas, ya que es posible probar la funcionalidad solo una vez. Otro ejemplo es cuando la sintaxis de un comando consta de siete parámetros posibles que se pueden ingresar en cualquier orden, de la siguiente manera:
Comando parm1, parm2, parm3, parm4, parm5, parm6, parm7
En teoría, un probador tendría que crear 7 !, o 5040 pruebas. El problema se agrava aún más si algunos de los parámetros son opcionales. Si el probador usa pruebas de recuadro gris, al hablar con el desarrollador y comprender el algoritmo del analizador, si cada parámetro es independiente, solo se requieren siete pruebas.
Prueba manual versus prueba automatizada
La base de la categorización de la prueba manual es que, por lo general, no se lleva a cabo por personas y no se implementa en la computadora. Los ejemplos incluyen recorridos estructurados, inspecciones, JAD y verificación de escritorio.
La base de la categorización de pruebas automatizadas es que se implementa en la computadora. Los ejemplos incluyen pruebas de valor límite, pruebas de cobertura de sucursales, creación de prototipos y pruebas de sintaxis. La prueba de sintaxis la realiza un compilador de idiomas, y el compilador es un programa que se ejecuta en una computadora.
Pruebas estáticas versus dinámicas
Los enfoques de pruebas estáticas son independientes del tiempo y se clasifican de esta manera porque no implican necesariamente la ejecución manual o automatizada del producto que se está probando. Los ejemplos incluyen verificación de sintaxis, recorridos estructurados e inspecciones. Se realiza una inspección de un programa contra un listado de código fuente en el que cada línea de código se lee línea por línea y se discute. Un ejemplo de prueba estática usando la computadora es una herramienta de análisis de flujo estático, que investiga otros programas en busca de errores sin ejecutar el programa. Analiza el control y el flujo de datos del otro programa para descubrir problemas como referencias a una variable que no se ha inicializado y código inalcanzable.
Las técnicas de prueba dinámicas dependen del tiempo e implican ejecutar una secuencia específica de instrucciones en papel o por la computadora. Los ejemplos incluyen tutoriales estructurados, en los que la lógica del programa se simula recorriendo el código y describiéndolo verbalmente. La prueba de límite es una técnica de prueba dinámica que requiere la ejecución de casos de prueba en la computadora con un enfoque específico en los valores de límite asociados con las entradas o salidas del programa.
Taxonomía de técnicas de prueba de software
Una técnica de prueba es un conjunto de procedimientos interrelacionados que, juntos, producen una entrega entregable. Existen muchos esquemas de clasificación posibles para las pruebas de software, y la Tabla 1 describe una forma. La tabla revisa las técnicas de prueba populares formales y también clasifica cada una de ellas según la discusión anterior como manual, automatizada, estática, dinámica, funcional (caja negra) o estructural (caja blanca). La Tabla 2 describe cada uno de los métodos de prueba de software.