Articulo de referencia

Pruebas de software

TestingCup – Campeonato Polaco de Pruebas de Software, Katowice , mayo de 2016 Las pruebas de software consisten en comprobar si el software cumple sus objetivos previstos y sat...

TestingCup Campeonato Polaco de Pruebas de Software, Katowice , mayo de 2016

Las pruebas de software consisten en comprobar si el software cumple sus objetivos previstos y satisface las expectativas.

Las pruebas de software pueden proporcionar información objetiva e independiente sobre la calidad del software y el riesgo de su fallo para un usuario , patrocinador o cualquier otra parte interesada. [ 1 ]

Las pruebas de software pueden determinar la corrección del software para escenarios específicos , pero no pueden determinar la corrección para todos los escenarios. [ 2 ] [ 3 ] No pueden encontrar todos los errores .

Basándose en los criterios para medir la corrección a partir de un oráculo , las pruebas de software emplean principios y mecanismos que pueden identificar un problema. Ejemplos de oráculos incluyen especificaciones , contratos , [ 4 ] productos comparables, versiones anteriores del mismo producto, inferencias sobre el propósito previsto o esperado, expectativas del usuario o cliente, estándares relevantes y leyes aplicables.

Las pruebas de software pueden ser de naturaleza funcional o no funcional.

Las pruebas de software suelen ser dinámicas : se ejecuta el software para verificar que el resultado real coincida con el esperado. También pueden ser estáticas : se revisa el código y su documentación asociada .

Las pruebas de software se utilizan a menudo para responder a la pregunta: ¿El software hace lo que se supone que debe hacer y lo que necesita hacer?

La información obtenida de las pruebas de software puede utilizarse para mejorar el proceso de desarrollo de software. [ 5 ] : 41–43

Un enfoque comúnmente sugerido para las pruebas automatizadas es la "pirámide de pruebas", donde la mayoría de las pruebas son pruebas unitarias , seguidas de un conjunto más pequeño de pruebas de integración y, finalmente, algunas pruebas de extremo a extremo (e2e) . [ 6 ] [ 7 ] [ 8 ]

Ciencias económicas

Un estudio realizado por el NIST en 2002 informó que los errores de software le cuestan a la economía estadounidense 59.500 millones de dólares anuales. Más de un tercio de este costo podría evitarse si se realizaran mejores pruebas de software. [ 9 ]

La subcontratación de pruebas de software debido a los costos es muy común, siendo China, Filipinas, India y Pakistán los destinos preferidos. [ 10 ]

Historia

Glenford J. Myers introdujo inicialmente la separación de la depuración de las pruebas en 1979. [ 11 ] Aunque su atención se centró en las pruebas de ruptura ("Un caso de prueba exitoso es aquel que detecta un error aún no descubierto." [ 11 ] : 16 ), ilustró el deseo de la comunidad de ingeniería de software de separar las actividades fundamentales de desarrollo, como la depuración, de la verificación. Las pruebas de software normalmente incluyen el manejo de errores de software , un defecto en el código que causa un resultado indeseado. [ 12 ] : 31 Los errores generalmente ralentizan el progreso de las pruebas y requieren la asistencia del programador para depurar y corregir.

No todos los defectos provocan un fallo. Por ejemplo, un defecto en código muerto no se considerará un fallo.

Un defecto que no causa fallas en un momento dado puede provocar fallas posteriormente debido a cambios en el entorno. Ejemplos de cambios en el entorno incluyen el uso de nuevo hardware informático , cambios en los datos y la interacción con software diferente. [ 13 ]

Objetivos

Las pruebas de software suelen estar orientadas a la consecución de objetivos.

Encontrar errores

Las pruebas de software normalmente incluyen el manejo de errores de software , un defecto en el código que causa un resultado no deseado. [ 12 ] : 31 Los errores generalmente ralentizan el progreso de las pruebas y requieren la asistencia del programador para depurar y corregir.

No todos los defectos provocan un fallo. Por ejemplo, un defecto en código muerto no se considerará un fallo.

Un defecto que no causa fallas en un momento dado puede provocar fallas posteriormente debido a cambios en el entorno. Ejemplos de cambios en el entorno incluyen el uso de nuevo hardware informático , cambios en los datos y la interacción con software diferente. [ 13 ]

Un único defecto puede provocar múltiples síntomas de fallo.

Garantizar que se cumplan los requisitos.

Las pruebas de software pueden implicar una brecha de requisitos : omisión en el diseño de un requisito. [ 5 ] : 426 Las brechas de requisitos a menudo pueden ser requisitos no funcionales como la capacidad de prueba , la escalabilidad , la mantenibilidad , el rendimiento y la seguridad .

Cobertura de código

Una limitación fundamental de las pruebas de software es que probar bajo todas las combinaciones de entradas y precondiciones (estado inicial) no es factible, incluso con un producto simple. [ 3 ] : 17–18 [ 14 ] Los defectos que se manifiestan en condiciones inusuales son difíciles de encontrar en las pruebas. Además, las dimensiones no funcionales de la calidad (cómo se supone que debe ser frente a lo que se supone que debe hacer ) usabilidad , escalabilidad , rendimiento , compatibilidad y fiabilidad pueden ser subjetivas; algo que constituye un valor suficiente para una persona puede no serlo para otra.

Aunque probar para cada posible entrada no es factible, las pruebas pueden usar combinatoria para maximizar la cobertura y minimizar las pruebas. [ 15 ]

Categorías

Las pruebas se pueden categorizar de muchas maneras. [ 16 ]

Pruebas automatizadas

La automatización de pruebas consiste en el uso de software (independiente del software que se está probando) para controlar la ejecución de las pruebas y comparar el resultado real con el previsto. [ 17 ] La automatización de pruebas permite probar el sistema bajo prueba (SUT) sin interacción manual, lo que puede conducir a una ejecución de pruebas más rápida y a una mayor frecuencia de pruebas. La automatización de pruebas es un aspecto clave de las pruebas continuas y, a menudo, de la integración continua y la entrega continua (CI/CD). [ 18 ]

Niveles

Las pruebas de software se pueden categorizar en niveles según la cantidad del sistema de software que se analiza. [ 19 ] [ 20 ] [ 21 ] [ 22 ]

Pruebas unitarias

Las pruebas unitarias , también conocidas como pruebas de componentes o módulos, son una forma de prueba de software mediante la cual se prueba código fuente aislado para validar el comportamiento esperado. [ 23 ]

Pruebas de integración

Las pruebas de integración son un tipo de prueba de software en la que se prueban conjuntamente varios componentes, módulos o servicios para verificar que funcionan correctamente al combinarse. El objetivo es probar las interacciones y el intercambio de datos entre las partes integradas, en lugar de probar los componentes de forma aislada.

Pruebas del sistema

Las pruebas de sistema , también conocidas como pruebas de extremo a extremo (E2E), son pruebas realizadas en un sistema de software completo .

Pruebas estáticas, dinámicas y pasivas

Existen muchos enfoques para las pruebas de software. Las revisiones , los recorridos o las inspecciones se denominan pruebas estáticas, mientras que la ejecución de código programado con un conjunto dado de casos de prueba se denomina pruebas dinámicas . [ 24 ] [ 25 ]

Las pruebas estáticas suelen ser implícitas, como la revisión de pruebas, además de cuando las herramientas de programación/editores de texto comprueban la estructura del código fuente o los compiladores (precompiladores) comprueban la sintaxis y el flujo de datos como análisis estático del programa . Las pruebas dinámicas se realizan cuando se ejecuta el programa. Las pruebas dinámicas pueden comenzar antes de que el programa esté completo al 100% para probar secciones particulares del código y se aplican a funciones o módulos discretos. [ 24 ] [ 25 ] Las técnicas típicas para estas son el uso de stubs /controladores o la ejecución desde un entorno de depuración . [ 25 ]

Las pruebas estáticas implican verificación , mientras que las pruebas dinámicas también implican validación . [ 25 ]

Las pruebas pasivas consisten en verificar el comportamiento del sistema sin interactuar con el producto de software. A diferencia de las pruebas activas, los evaluadores no proporcionan datos de prueba, sino que analizan los registros y trazas del sistema. Buscan patrones y comportamientos específicos para tomar decisiones. [ 26 ] Esto se relaciona con la verificación en tiempo de ejecución fuera de línea y el análisis de registros .

Exploratorio

Las pruebas exploratorias son un enfoque para las pruebas de software que se describe concisamente como aprendizaje, diseño y ejecución de pruebas simultáneos. Cem Kaner , quien acuñó el término en 1984, [ 27 ] define las pruebas exploratorias como "un estilo de pruebas de software que enfatiza la libertad y responsabilidad personal del evaluador individual para optimizar continuamente la calidad de su trabajo al tratar el aprendizaje relacionado con las pruebas, el diseño de pruebas, la ejecución de pruebas y la interpretación de los resultados de las pruebas como actividades que se apoyan mutuamente y que se ejecutan en paralelo a lo largo del proyecto". [ 28 ]

Pruebas preestablecidas frente a pruebas adaptativas

El tipo de estrategia de prueba que se debe realizar depende de si las pruebas que se aplicarán a la IUT deben decidirse antes de que comience la ejecución del plan de prueba (pruebas preestablecidas [ 29 ] ) o si cada entrada que se aplicará a la IUT puede depender dinámicamente de las salidas obtenidas durante la aplicación de las pruebas anteriores (pruebas adaptativas [ 30 ] [ 31 ] ).

Caja blanca/negra

Las pruebas de software suelen dividirse en pruebas de caja blanca y de caja negra. Estos dos enfoques se utilizan para describir el punto de vista que adopta el evaluador al diseñar los casos de prueba. También se puede aplicar a la metodología de pruebas de software un enfoque híbrido denominado de caja gris, que incluye aspectos de ambos enfoques. [ 32 ] [ 33 ]

Pruebas de caja blanca

Diagrama de prueba de caja blanca
Diagrama de prueba de caja blanca

Las pruebas de caja blanca (también conocidas como pruebas de caja transparente, pruebas de caja de cristal, pruebas de caja transparente y pruebas estructurales) verifican las estructuras internas o el funcionamiento de un programa, a diferencia de la funcionalidad expuesta al usuario final. En las pruebas de caja blanca, se utiliza una perspectiva interna del sistema (el código fuente), así como habilidades de programación, para diseñar casos de prueba. El evaluador elige entradas para probar rutas a través del código y determina las salidas apropiadas. [ 32 ] [ 33 ] Esto es análogo a probar nodos en un circuito, por ejemplo, pruebas en circuito (ICT).

Aunque las pruebas de caja blanca pueden aplicarse a nivel de unidad , integración y sistema en el proceso de pruebas de software, generalmente se realizan a nivel de unidad. [ 34 ] Permiten probar rutas dentro de una unidad, rutas entre unidades durante la integración y entre subsistemas durante una prueba a nivel de sistema. Si bien este método de diseño de pruebas puede revelar muchos errores o problemas, es posible que no detecte partes no implementadas de la especificación ni requisitos faltantes.

Las técnicas utilizadas en las pruebas de caja blanca incluyen: [ 33 ] [ 35 ]

Las herramientas de cobertura de código pueden evaluar la completitud de un conjunto de pruebas creado con cualquier método, incluidas las pruebas de caja negra. Esto permite al equipo de software examinar partes de un sistema que rara vez se prueban y garantiza que se hayan probado los puntos de función más importantes. [ 36 ] La cobertura de código como métrica de software se puede informar como un porcentaje para: [ 32 ] [ 36 ] [ 37 ]

  • Cobertura de funciones , que informa sobre las funciones ejecutadas
  • Cobertura de sentencias , que informa sobre el número de líneas ejecutadas para completar la prueba.
  • Cobertura de decisiones , que informa si se han ejecutado tanto la rama Verdadera como la Falso de una prueba determinada.

La cobertura de sentencias del 100 % garantiza que todas las rutas o ramas del código (en términos de flujo de control ) se ejecuten al menos una vez. Esto es útil para asegurar una funcionalidad correcta, pero no suficiente, ya que el mismo código puede procesar diferentes entradas de forma correcta o incorrecta. [ 38 ]

Pruebas de caja negra

Diagrama de caja negra

Las pruebas de caja negra (también conocidas como pruebas funcionales) describen el diseño de casos de prueba sin conocimiento de la implementación, sin leer el código fuente. Los evaluadores solo saben lo que se supone que debe hacer el software, no cómo lo hace. [ 39 ] Los métodos de prueba de caja negra incluyen: partición de equivalencia , análisis de valores límite , pruebas de todos los pares , tablas de transición de estados , pruebas de tablas de decisión , pruebas de fuzzing , pruebas basadas en modelos , pruebas de casos de uso , pruebas exploratorias y pruebas basadas en especificaciones. [ 32 ] [ 33 ] [ 37 ]

Las pruebas basadas en especificaciones buscan probar la funcionalidad del software de acuerdo con los requisitos aplicables. [ 40 ] Este nivel de pruebas generalmente requiere que se proporcionen casos de prueba exhaustivos al evaluador, quien luego puede simplemente verificar que para una entrada dada, el valor de salida (o comportamiento) "es" o "no es" el mismo que el valor esperado especificado en el caso de prueba. Los casos de prueba se construyen en torno a especificaciones y requisitos, es decir, lo que se supone que debe hacer la aplicación. Utiliza descripciones externas del software, incluidas especificaciones, requisitos y diseños, para derivar los casos de prueba. Estas pruebas pueden ser funcionales o no funcionales , aunque generalmente son funcionales. Las pruebas basadas en especificaciones pueden ser necesarias para asegurar la funcionalidad correcta, pero son insuficientes para protegerse contra situaciones complejas o de alto riesgo. [ 41 ]

Las pruebas de caja negra se pueden utilizar en cualquier nivel de prueba, aunque normalmente no a nivel de unidad. [ 34 ]

Pruebas de interfaz de componentes

Las pruebas de interfaz de componentes son una variación de las pruebas de caja negra , con el enfoque en los valores de datos más allá de las acciones relacionadas de un componente de subsistema. [ 42 ] La práctica de las pruebas de interfaz de componentes se puede utilizar para verificar el manejo de datos pasados ​​entre varias unidades o componentes de subsistema, más allá de las pruebas de integración completas entre esas unidades. [ 43 ] [ 44 ] Los datos que se pasan pueden considerarse como "paquetes de mensajes" y el rango o los tipos de datos se pueden verificar para los datos generados por una unidad y probar su validez antes de pasarlos a otra unidad. Una opción para las pruebas de interfaz es mantener un archivo de registro separado de los elementos de datos que se pasan, a menudo con una marca de tiempo registrada para permitir el análisis de miles de casos de datos pasados ​​entre unidades durante días o semanas. Las pruebas pueden incluir la verificación del manejo de algunos valores de datos extremos mientras que otras variables de interfaz se pasan como valores normales. [ 43 ] Los valores de datos inusuales en una interfaz pueden ayudar a explicar el rendimiento inesperado en la siguiente unidad.

Pruebas visuales

El objetivo de las pruebas visuales es proporcionar a los desarrolladores la capacidad de examinar lo que sucedía en el momento de la falla del software, presentando los datos de tal manera que el desarrollador pueda encontrar fácilmente la información que necesita, y que dicha información se exprese con claridad. [ 45 ] [ 46 ]

La esencia de las pruebas visuales radica en la idea de que mostrar un problema (o un fallo en la prueba), en lugar de simplemente describirlo, mejora considerablemente la claridad y la comprensión. Por lo tanto, las pruebas visuales requieren la grabación de todo el proceso, capturando en vídeo todo lo que ocurre en el sistema de prueba. Los vídeos resultantes se complementan con la información del evaluador en tiempo real mediante una cámara web con imagen dentro de imagen y comentarios de audio grabados con micrófonos.

Las pruebas visuales ofrecen numerosas ventajas. La calidad de la comunicación mejora drásticamente, ya que los evaluadores pueden mostrar el problema (y los eventos que lo provocaron) al desarrollador, en lugar de simplemente describirlo. Además, en muchos casos, ya no será necesario replicar los fallos de las pruebas. El desarrollador dispondrá de toda la evidencia necesaria sobre un fallo y podrá centrarse en la causa del problema y en cómo solucionarlo.

Las pruebas ad hoc y las pruebas exploratorias son metodologías importantes para verificar la integridad del software porque requieren menos tiempo de preparación para su implementación, mientras que los errores importantes pueden encontrarse rápidamente. [ 47 ] En las pruebas ad hoc, donde las pruebas se llevan a cabo de manera improvisada, la capacidad del o los evaluadores para basar las pruebas en métodos documentados y luego improvisar variaciones de esas pruebas puede resultar en un examen más riguroso de las correcciones de defectos. [ 47 ] Sin embargo, a menos que se mantenga una documentación estricta de los procedimientos, una de las limitaciones de las pruebas ad hoc es la falta de repetibilidad. [ 47 ]

Pruebas de caja gris

Las pruebas de caja gris (o "gray-box testing") implican el uso del conocimiento de las estructuras de datos y algoritmos internos para diseñar pruebas, ejecutándolas a nivel de usuario o caja negra. El evaluador suele tener acceso tanto al código fuente como al binario ejecutable. [ 48 ] Las pruebas de caja gris también pueden incluir ingeniería inversa (mediante análisis dinámico de código) para determinar, por ejemplo, valores límite o mensajes de error. [ 48 ] Manipular los datos de entrada y formatear la salida no se considera prueba de caja gris, ya que la entrada y la salida están claramente fuera de la "caja negra" que denominamos sistema bajo prueba. Esta distinción es particularmente importante al realizar pruebas de integración entre dos módulos de código escritos por dos desarrolladores diferentes, donde solo las interfaces están expuestas para la prueba.

Al conocer los conceptos subyacentes del funcionamiento del software, el evaluador toma decisiones de prueba mejor fundamentadas al probar el software desde fuera. Normalmente, a un evaluador de caja gris se le permite configurar un entorno de prueba aislado con actividades como la inicialización de una base de datos . El evaluador puede observar el estado del producto que se está probando después de realizar ciertas acciones, como ejecutar sentencias SQL en la base de datos y luego ejecutar consultas para asegurarse de que se hayan reflejado los cambios esperados. Las pruebas de caja gris implementan escenarios de prueba inteligentes basados ​​en información limitada. Esto se aplica particularmente al manejo de tipos de datos, manejo de excepciones , etc. [ 49 ]

Con el concepto de pruebas de caja gris, esta "distinción arbitraria" entre pruebas de caja negra y de caja blanca se ha desvanecido un tanto. [ 34 ]

Pruebas de instalación

Las pruebas de instalación son un tipo de prueba de software que verifica que los usuarios puedan instalar y configurar correctamente el software en sus entornos previstos (por ejemplo, sistemas operativos , hardware de computadora ). La mayoría de los sistemas de software tienen procedimientos de instalación necesarios antes de que puedan usarse para su propósito principal. Las pruebas de instalación se centran en estos procedimientos y en si son suficientes para lograr un sistema de software instalado y utilizable. [ 50 ] : 139 Los procedimientos de este tipo pueden incluir actualizaciones completas o parciales, y procesos de instalación/desinstalación.

  • El usuario debe seleccionar una variedad de opciones.
  • Los archivos y bibliotecas dependientes deben asignarse, cargarse o localizarse.
  • Deben estar presentes configuraciones de hardware válidas.
  • Los sistemas de software pueden necesitar conectividad para conectarse con otros sistemas de software. [ 50 ] : 145
  • Debe existir y ser accesible documentación válida, precisa y suficiente (por ejemplo, guía de instalación, manual de usuario , referencia rápida, archivo README , etc.). [ 51 ]

Pruebas de compatibilidad

Una causa común de fallos de software (reales o percibidos) es la falta de compatibilidad con otros programas de aplicación , sistemas operativos (o versiones de sistemas operativos , antiguas o nuevas) o entornos de destino que difieren considerablemente del original (como una aplicación de terminal o GUI diseñada para ejecutarse en el escritorio que ahora debe convertirse en una aplicación web , la cual debe visualizarse en un navegador web ). Por ejemplo, en el caso de la falta de retrocompatibilidad , esto puede ocurrir porque los programadores desarrollan y prueban el software únicamente en la última versión del entorno de destino, que no todos los usuarios pueden estar utilizando. Esto conlleva la consecuencia no deseada de que el trabajo más reciente puede no funcionar en versiones anteriores del entorno de destino, o en hardware antiguo que las versiones anteriores del entorno de destino sí podían utilizar. A veces, estos problemas pueden solucionarse abstraiendo de forma proactiva la funcionalidad del sistema operativo en un módulo o biblioteca de programa independiente .

Pruebas de humo y cordura

Las pruebas de viabilidad determinan si es razonable proceder con pruebas adicionales.

Las pruebas de humo consisten en intentos mínimos de operar el software, diseñados para determinar si existen problemas básicos que impidan su funcionamiento. Estas pruebas pueden utilizarse como prueba de verificación de compilación .

Pruebas de regresión

Las pruebas de regresión se centran en encontrar defectos después de un cambio importante en el código. Específicamente, buscan descubrir regresiones de software , como funcionalidades degradadas o perdidas, incluyendo errores antiguos que han reaparecido. Estas regresiones ocurren cuando una funcionalidad del software que antes funcionaba correctamente deja de hacerlo como se esperaba. Por lo general, las regresiones ocurren como consecuencia no deseada de los cambios en el programa, cuando la parte del software recién desarrollada entra en conflicto con el código previamente existente. Las pruebas de regresión suelen ser el mayor esfuerzo de prueba en el desarrollo de software comercial, [ 52 ] debido a la verificación de numerosos detalles en las funcionalidades de software anteriores, e incluso se puede desarrollar software nuevo utilizando algunos casos de prueba antiguos para probar partes del nuevo diseño y asegurar que la funcionalidad anterior siga siendo compatible.

Los métodos comunes de pruebas de regresión incluyen volver a ejecutar conjuntos de casos de prueba anteriores y verificar si han reaparecido fallos previamente corregidos. La profundidad de las pruebas depende de la fase del proceso de lanzamiento y del riesgo de las nuevas funcionalidades. Pueden ser exhaustivas, para cambios añadidos al final del lanzamiento o considerados arriesgados, o muy superficiales, consistiendo en pruebas positivas para cada funcionalidad, si los cambios se realizan al principio del lanzamiento o se consideran de bajo riesgo.

Pruebas de aceptación

Las pruebas de aceptación son pruebas a nivel de sistema para garantizar que el software cumpla con las expectativas del cliente. [ 53 ] [ 54 ] [ 55 ] [ 56 ]

Las pruebas de aceptación pueden realizarse al final o en la mitad de un proyecto, incluso después de cada historia de usuario completada en un proyecto ágil. [ 57 ]

Las pruebas se agrupan frecuentemente en estos niveles según el lugar del proceso de desarrollo de software en el que se realizan o según el nivel de especificidad de la prueba. [ 56 ]

  • Pruebas de aceptación del usuario (UAT)
  • Pruebas de aceptación operativa (OAT)
  • Pruebas de aceptación contractuales y reglamentarias
  • Pruebas alfa y beta

En ocasiones, las pruebas de aceptación del usuario (UAT, por sus siglas en inglés) las realiza el propio cliente, en su entorno y con su propio hardware.

Las OAT se utilizan para realizar pruebas de preparación operativa (prelanzamiento) de un producto, servicio o sistema como parte de un sistema de gestión de calidad . Las OAT son un tipo común de prueba de software no funcional, utilizada principalmente en proyectos de desarrollo y mantenimiento de software . Este tipo de prueba se centra en la preparación operativa del sistema para su soporte o para su integración en el entorno de producción. Por lo tanto, también se conocen como pruebas de preparación operativa (ORT) o pruebas de preparación y aseguramiento de operaciones (OR&A). Las pruebas funcionales dentro de las OAT se limitan a aquellas necesarias para verificar los aspectos no funcionales del sistema.

Además, las pruebas de software deben garantizar que la portabilidad del sistema, además de funcionar como se espera, no dañe ni corrompa parcialmente su entorno operativo ni provoque que otros procesos dentro de ese entorno dejen de funcionar. [ 58 ]

Las pruebas de aceptación contractual se realizan según los criterios de aceptación definidos durante la firma del contrato, mientras que las pruebas de aceptación regulatoria se realizan según la normativa aplicable al producto de software. Ambas pruebas pueden ser realizadas por usuarios o evaluadores independientes. En ocasiones, las pruebas de aceptación regulatoria implican la auditoría de los resultados por parte de los organismos reguladores. [ 56 ]

Pruebas alfa

Las pruebas alfa son pruebas operativas simuladas o reales realizadas por usuarios/clientes potenciales o un equipo de pruebas independiente en las instalaciones de los desarrolladores. Las pruebas alfa se utilizan a menudo para software comercial como una forma de prueba de aceptación interna antes de que el software pase a las pruebas beta. [ 59 ]

Pruebas beta

Las pruebas beta se realizan después de las pruebas alfa y pueden considerarse una forma de prueba de aceptación por parte de usuarios externos . Las versiones del software, conocidas como versiones beta , se lanzan a un público limitado fuera del equipo de programación, denominados beta testers. El software se lanza a grupos de personas para que las pruebas posteriores garanticen que el producto tenga pocos fallos o errores . Las versiones beta pueden ponerse a disposición del público general para ampliar el campo de retroalimentación al mayor número posible de usuarios futuros y ofrecer valor antes, durante un período de tiempo prolongado o incluso indefinido ( beta perpetua ). [ 60 ]

Pruebas funcionales frente a pruebas no funcionales

Las pruebas funcionales se refieren a las actividades que verifican una acción o función específica del código. Estas suelen encontrarse en la documentación de requisitos del código, aunque algunas metodologías de desarrollo trabajan con casos de uso o historias de usuario. Las pruebas funcionales tienden a responder a la pregunta de "¿puede el usuario hacer esto?" o "¿funciona esta característica en particular?".

Las pruebas no funcionales se refieren a aspectos del software que pueden no estar relacionados con una función específica o una acción del usuario, como la escalabilidad u otros aspectos del rendimiento , el comportamiento bajo ciertas restricciones o la seguridad . Las pruebas determinarán el punto crítico, es decir, el punto en el que los extremos de escalabilidad o rendimiento provocan una ejecución inestable. Los requisitos no funcionales suelen reflejar la calidad del producto, especialmente en lo que respecta a la idoneidad para sus usuarios.

Pruebas continuas

Las pruebas continuas son el proceso de ejecutar pruebas automatizadas como parte del proceso de entrega de software para obtener retroalimentación inmediata sobre los riesgos comerciales asociados con una versión candidata del software. [ 61 ] [ 62 ] Las pruebas continuas incluyen la validación de los requisitos funcionales y no funcionales ; el alcance de las pruebas se extiende desde la validación de requisitos ascendentes o historias de usuario hasta la evaluación de los requisitos del sistema asociados con los objetivos comerciales generales. [ 63 ] [ 64 ]

Ensayos destructivos

Las pruebas destructivas buscan provocar fallos en el software o en un subsistema. Verifican si el software funciona correctamente al recibir entradas no válidas o inesperadas, evaluando así la robustez de las rutinas de validación de entrada y gestión de errores. [ 65 ] La inyección de fallos de software , en forma de fuzzing , es un ejemplo de prueba de fallos. En la página de inyección de fallos de software se incluyen enlaces a diversas herramientas comerciales de pruebas no funcionales ; también existen numerosas herramientas de software libre y de código abierto que realizan pruebas destructivas.

Pruebas de rendimiento de software

Las pruebas de rendimiento se realizan generalmente para determinar cómo se comporta un sistema o subsistema en términos de capacidad de respuesta y estabilidad bajo una carga de trabajo específica. También pueden servir para investigar, medir, validar o verificar otros atributos de calidad del sistema, como la escalabilidad, la fiabilidad y el uso de recursos.

Las pruebas de carga se centran principalmente en comprobar que el sistema puede seguir funcionando bajo una carga específica, ya sean grandes cantidades de datos o un gran número de usuarios . Esto se conoce generalmente como escalabilidad del software . La actividad relacionada de pruebas de carga, cuando se realiza como una actividad no funcional, se suele denominar prueba de resistencia . Las pruebas de volumen son una forma de probar las funciones del software incluso cuando ciertos componentes (por ejemplo, un archivo o una base de datos) aumentan radicalmente de tamaño. Las pruebas de estrés son una forma de probar la fiabilidad bajo cargas de trabajo inesperadas o poco frecuentes. Las pruebas de estabilidad (a menudo denominadas pruebas de carga o de resistencia) comprueban si el software puede funcionar correctamente de forma continua durante un período aceptable o superior.

Existe poco consenso sobre cuáles son los objetivos específicos de las pruebas de rendimiento. Los términos pruebas de carga, pruebas de rendimiento, pruebas de escalabilidad y pruebas de volumen se utilizan a menudo indistintamente.

Los sistemas de software en tiempo real tienen estrictas restricciones de temporización. Para comprobar si se cumplen dichas restricciones, se utilizan pruebas en tiempo real .

Pruebas de usabilidad

Las pruebas de usabilidad consisten en comprobar si la interfaz de usuario es fácil de usar y comprender. Se centran principalmente en el uso de la aplicación. Este tipo de prueba no se puede automatizar; se necesitan usuarios reales, supervisados ​​por diseñadores de interfaz de usuario cualificados . Las pruebas de usabilidad pueden utilizar modelos estructurados para comprobar el buen funcionamiento de una interfaz. El modelo de Stanton, Theofanos y Joshi (2015) analiza la experiencia del usuario, y el modelo de Al-Sharafat y Qadoumi (2016) se utiliza para la evaluación de expertos, ayudando a evaluar la usabilidad en aplicaciones digitales. [ 66 ]

Pruebas de accesibilidad

Las pruebas de accesibilidad se realizan para garantizar que el software sea accesible para personas con discapacidades. Algunas de las pruebas de accesibilidad web más comunes son:

  • Asegurarse de que el contraste de color entre la fuente y el color de fondo sea apropiado.
  • Tamaño de fuente
  • Textos alternativos para contenido multimedia
  • Capacidad para utilizar el sistema mediante el teclado del ordenador, además del ratón.

Normas comunes para el cumplimiento

Pruebas de seguridad

Las pruebas de seguridad son esenciales para el software que procesa datos confidenciales, con el fin de prevenir la intrusión de piratas informáticos en el sistema .

La Organización Internacional de Normalización (ISO) lo define como un "tipo de ensayo realizado para evaluar el grado en que un elemento de ensayo, y los datos e información asociados, están protegidos de manera que personas o sistemas no autorizados no puedan utilizarlos, leerlos o modificarlos, y a las personas o sistemas autorizados no se les niegue el acceso a ellos". [ 67 ]

Internacionalización y localización

Las pruebas de internacionalización y localización validan que el software pueda utilizarse en diferentes idiomas y regiones geográficas. El proceso de pseudolocalización se utiliza para probar la capacidad de una aplicación para ser traducida a otro idioma y facilita la identificación de posibles errores que puedan surgir durante el proceso de localización.

Las pruebas de globalización verifican que el software esté adaptado a una nueva cultura, como diferentes monedas o zonas horarias. [ 68 ]

También es necesario probar la traducción real a idiomas humanos. Entre los posibles fallos de localización y globalización se incluyen:

  • Es posible que algunos mensajes no estén traducidos.
  • A menudo, el software se localiza traduciendo una lista de cadenas de texto fuera de contexto, y el traductor puede elegir la traducción incorrecta para una cadena de origen ambigua.
  • La terminología técnica puede volverse inconsistente si el proyecto es traducido por varias personas sin la debida coordinación o si el traductor es imprudente.
  • Las traducciones literales palabra por palabra pueden sonar inapropiadas, artificiales o demasiado técnicas en el idioma de destino.
  • Los mensajes sin traducir en el idioma original pueden estar codificados directamente en el código fuente y, por lo tanto, ser intraducibles.
  • Es posible que algunos mensajes se generen automáticamente durante la ejecución y que la cadena resultante sea agramatical, funcionalmente incorrecta, engañosa o confusa.
  • Es posible que el software utilice una combinación de teclas que no tenga ninguna función en la distribución del teclado del idioma de origen , pero que se utilice para escribir caracteres en la distribución del teclado del idioma de destino.
  • Es posible que el software no sea compatible con la codificación de caracteres del idioma de destino.
  • Las fuentes y los tamaños de fuente que son apropiados en el idioma de origen pueden ser inapropiados en el idioma de destino; por ejemplo, los caracteres CJK pueden volverse ilegibles si la fuente es demasiado pequeña.
  • Una cadena de texto en el idioma de destino puede ser más larga de lo que el software puede procesar. Esto puede hacer que la cadena sea parcialmente invisible para el usuario o provocar que el software falle o funcione incorrectamente.
  • Es posible que el software no ofrezca el soporte adecuado para leer o escribir texto bidireccional .
  • Es posible que el software muestre imágenes con texto que no ha sido localizado.
  • Los sistemas operativos localizados pueden tener archivos de configuración del sistema y variables de entorno con nombres diferentes , así como formatos distintos para la fecha y la moneda .

Pruebas de desarrollo

Las pruebas de desarrollo son un proceso de desarrollo de software que implica la aplicación sincronizada de un amplio espectro de estrategias de prevención y detección de defectos para reducir los riesgos, el tiempo y los costos del desarrollo. Las realiza el desarrollador o ingeniero de software durante la fase de construcción del ciclo de vida del desarrollo. El objetivo de las pruebas de desarrollo es eliminar los errores de construcción antes de que el código pase a otras fases de prueba; esta estrategia busca aumentar la calidad del software resultante, así como la eficiencia del proceso de desarrollo en general.

Dependiendo de las expectativas de la organización en cuanto al desarrollo de software, las pruebas de desarrollo pueden incluir análisis de código estático , análisis de flujo de datos, análisis de métricas, revisiones de código por pares, pruebas unitarias, análisis de cobertura de código, trazabilidad y otras prácticas de prueba de software.

Pruebas A/B

Las pruebas A/B son un método para realizar un experimento controlado y determinar si un cambio propuesto es más efectivo que el enfoque actual. Los clientes son dirigidos a la versión actual (control) de una función o a una versión modificada (tratamiento), y se recopilan datos para determinar qué versión logra mejor el resultado deseado.

Pruebas concurrentes

Las pruebas de concurrencia evalúan el comportamiento y el rendimiento del software y los sistemas que utilizan computación concurrente , generalmente en condiciones de uso normales. Los problemas típicos que este tipo de pruebas revela son los interbloqueos, las condiciones de carrera y los problemas con la gestión de la memoria/recursos compartidos.

Pruebas de conformidad o pruebas de tipo

En las pruebas de software, las pruebas de conformidad verifican que un producto funcione de acuerdo con los estándares especificados. Los compiladores, por ejemplo, se someten a pruebas exhaustivas para determinar si cumplen con el estándar reconocido para ese lenguaje.

Pruebas de comparación de resultados

La creación de una visualización de la salida esperada, ya sea como comparación de datos de texto o capturas de pantalla de la interfaz de usuario, [ 3 ] : 195 a veces se denomina prueba de instantánea o prueba Golden Master. A diferencia de muchas otras formas de prueba, esta no puede detectar fallas automáticamente y, en cambio, requiere que un humano evalúe la salida en busca de inconsistencias.

Pruebas de propiedad

Las pruebas de propiedades son una técnica de prueba en la que, en lugar de afirmar que entradas específicas producen salidas esperadas específicas, el usuario genera aleatoriamente múltiples entradas, ejecuta el programa con todas ellas y verifica la veracidad de alguna "propiedad" que debería cumplirse para cada par de entrada y salida. Por ejemplo, cada salida de una función de serialización debería ser aceptada por la función de deserialización correspondiente, y cada salida de una función de ordenación debería ser una lista monótonamente creciente que contenga exactamente los mismos elementos que su entrada.

Las bibliotecas de prueba de propiedades permiten al usuario controlar la estrategia mediante la cual se construyen las entradas aleatorias, para garantizar la cobertura de casos degenerados o entradas que presenten patrones específicos necesarios para ejercitar completamente aspectos de la implementación bajo prueba.

Las pruebas de propiedades también se conocen a veces como "pruebas generativas" o "pruebas QuickCheck", ya que fueron introducidas y popularizadas por la biblioteca Haskell QuickCheck . [ 69 ]

Pruebas metamórficas

Las pruebas metamórficas (MT) son una técnica de prueba de software basada en propiedades que puede ser un enfoque eficaz para abordar el problema del oráculo de prueba y el problema de la generación de casos de prueba. El problema del oráculo de prueba radica en la dificultad de determinar los resultados esperados de los casos de prueba seleccionados o de determinar si los resultados reales coinciden con los resultados esperados.

Pruebas de VCR

Las pruebas de reproducción (también conocidas como pruebas de grabación/reproducción) son una técnica para aumentar la fiabilidad y la velocidad de las pruebas de regresión que involucran un componente con el que la comunicación es lenta o poco fiable, a menudo una API de terceros ajena al control del evaluador. Consisten en grabar las interacciones del sistema con el componente externo y, posteriormente, reproducir dichas interacciones como sustituto de la comunicación con el sistema externo en ejecuciones posteriores de la prueba.

Esta técnica se popularizó en el desarrollo web gracias a la biblioteca Ruby vcr .

Pruebas por contrato

Las pruebas de contrato , que no deben confundirse con las pruebas de aceptación contractual con motivación legal mencionadas anteriormente, son una metodología que consiste en probar el punto de integración entre dos servicios de software cualesquiera, verificando si las solicitudes y respuestas enviadas entre ellos se ajustan a un conjunto compartido de expectativas, comúnmente denominado contrato. Se utilizan frecuentemente en el contexto de sistemas distribuidos , arquitecturas de software orientadas a servicios y microservicios . [ 70 ] [ 71 ]

pruebas asistidas por IA

Desde principios de la década de 2020, la inteligencia artificial se ha integrado cada vez más en los flujos de trabajo de pruebas de software. Los métodos de prueba basados ​​en IA automatizan la creación de casos de prueba, se adaptan dinámicamente a los cambios y aprovechan el aprendizaje automático para identificar áreas de alto riesgo en el código fuente; un enfoque que mejora la eficiencia de las pruebas de regresión al tiempo que amplía la cobertura general de las pruebas. [ 72 ]

Un avance clave es la automatización de pruebas autorreparables , en la que las pruebas automatizadas detectan y se adaptan automáticamente a los cambios en una interfaz de usuario sin intervención humana. Estudios sobre la automatización de pruebas impulsada por IA en más de 3600 fuentes de literatura gris identificaron los scripts de prueba autorreparables como una de las soluciones de IA más comunes en la práctica. [ 73 ]

Un estudio terciario publicado en ACM Computing Surveys (2023) encontró que los métodos de IA se han aplicado ampliamente en todas las fases principales del ciclo de vida del desarrollo de software, e identificó la generación de casos de prueba, la predicción de fallas y la reparación automatizada como las tres áreas más activas de investigación de pruebas asistidas por IA. [ 74 ]

Pruebas de desplazamiento a la izquierda

Las pruebas de inicio temprano (shift-left testing) consisten en integrar las actividades de prueba lo antes posible en el ciclo de vida del desarrollo de software, de modo que los defectos se detecten cuando su corrección sea menos costosa. El término se describió por primera vez en la literatura académica en la revista Dr. Dobb's Journal y se formalizó en investigaciones posteriores de ACM / IEEE . [ 75 ]

La investigación empírica ha demostrado que las pruebas tempranas (shift-left testing) reducen entre un 40 % y un 60 % el tiempo necesario para detectar defectos, y entre un 75 % y un 85 % el coste de eliminarlos cuando se identifican en las primeras etapas del desarrollo, en comparación con los enfoques tradicionales en los que las pruebas se posponen hasta etapas posteriores. [ 76 ]

Un estudio de caso presentado en la Conferencia Internacional sobre Gestión y Tecnología de la Información (ICIMTech) de 2023 reveló que la integración de las pruebas de desplazamiento a la izquierda en una metodología de desarrollo ágil durante un año redujo notablemente el número de errores que llegaban a producción. [ 77 ]

Trabajo en equipo

Roles

En una organización, los evaluadores pueden pertenecer a un equipo independiente del resto del equipo de desarrollo de software o estar integrados en un mismo equipo. Las pruebas de software también pueden ser realizadas por evaluadores no especializados.

En la década de 1980, el término " probador de software" comenzó a utilizarse para designar una profesión independiente.

Entre los roles y títulos notables en las pruebas de software se incluyen: [ 78 ] gerente de pruebas , líder de pruebas , analista de pruebas , diseñador de pruebas , probador , desarrollador de automatización y administrador de pruebas . [ 79 ]

Procesos

Las organizaciones que desarrollan software realizan las pruebas de manera diferente, pero existen patrones comunes. [ 2 ]

Desarrollo de cascadas

En el desarrollo en cascada , las pruebas generalmente se realizan después de que el código está completo, pero antes de que el producto se entregue al cliente. [ 80 ] Esta práctica a menudo resulta en que la fase de pruebas se utilice como un margen de tiempo para compensar los retrasos del proyecto, lo que compromete el tiempo dedicado a las pruebas. [ 11 ] : 145–146

Algunos sostienen que el proceso en cascada permite que las pruebas comiencen cuando se inicia el proyecto de desarrollo y que sean un proceso continuo hasta que el proyecto finalice. [ 81 ]

desarrollo ágil

El desarrollo ágil de software suele implicar realizar pruebas mientras se escribe el código y organizar equipos con programadores y probadores, y con miembros del equipo que realicen tanto la programación como las pruebas.

Una práctica ágil, el desarrollo de software guiado por pruebas (TDD), es una forma de realizar pruebas unitarias en la que las pruebas a nivel de unidad se llevan a cabo mientras se escribe el código del producto. [ 82 ] El código de prueba se actualiza a medida que se agregan nuevas funcionalidades y se descubren condiciones de fallo (corrección de errores). Comúnmente, el código de prueba unitaria se mantiene junto con el código del proyecto, se integra en el proceso de compilación y se ejecuta en cada compilación y como parte de las pruebas de regresión. Los objetivos de esta integración continua son apoyar el desarrollo y reducir los defectos. [ 83 ] [ 82 ]

Incluso en organizaciones que separan equipos por funciones de programación y pruebas, muchas suelen hacer que los programadores realicen las pruebas unitarias . [ 84 ]

Proceso de muestra

El ejemplo que se muestra a continuación es común en el desarrollo en cascada. Si bien estas mismas actividades se encuentran habitualmente en otros modelos de desarrollo, podrían describirse de manera diferente.

  • Análisis de requisitos : las pruebas deben comenzar en la fase de requisitos del ciclo de vida del desarrollo de software . Durante la fase de diseño, los evaluadores trabajan para determinar qué aspectos de un diseño son comprobables y con qué parámetros funcionan esas pruebas.
  • Planificación de pruebas: estrategia de pruebas , plan de pruebas , creación del entorno de pruebas . Dado que se realizarán muchas actividades durante las pruebas, es necesario un plan.
  • Desarrollo de pruebas: procedimientos de prueba, escenarios de prueba , casos de prueba , conjuntos de datos de prueba, scripts de prueba para usar en las pruebas de software.
  • Ejecución de pruebas: los evaluadores ejecutan el software según los planes y documentos de prueba, y luego informan de cualquier error encontrado al equipo de desarrollo. Esta parte puede resultar compleja al realizar pruebas sin tener conocimientos de programación.
  • Informes de prueba: una vez finalizadas las pruebas, los evaluadores generan métricas y elaboran informes finales sobre su trabajo de prueba y sobre si el software probado está listo para su lanzamiento.
  • Análisis de resultados de pruebas: o análisis de defectos , lo realiza el equipo de desarrollo, generalmente junto con el cliente, para decidir qué defectos deben asignarse, corregirse, rechazarse (es decir, se encontró que el software funcionaba correctamente) o posponerse para ser tratados más adelante.
  • Repetición de pruebas de defectos: una vez que el equipo de desarrollo ha solucionado un defecto, el equipo de pruebas lo vuelve a probar.
  • Pruebas de regresión : es común contar con un pequeño programa de pruebas, compuesto por un subconjunto de pruebas, para cada integración de software nuevo, modificado o corregido, con el fin de garantizar que la última entrega no haya dañado nada y que el producto de software en su conjunto siga funcionando correctamente.
  • Cierre de la prueba: una vez que la prueba cumple con los criterios de salida, las actividades como la recopilación de los resultados clave, las lecciones aprendidas, los resultados, los registros y los documentos relacionados con el proyecto se archivan y se utilizan como referencia para proyectos futuros.

Calidad

Verificación y validación de software

Las pruebas de software se utilizan en asociación con la verificación y validación : [ 85 ]

  • Verificación: ¿Hemos desarrollado el software correctamente? (es decir, ¿cumple con los requisitos?).
  • Validación: ¿Hemos desarrollado el software adecuado? (Es decir, ¿los entregables satisfacen al cliente?).

Los términos verificación y validación se utilizan comúnmente de forma indistinta en la industria; también es común encontrar definiciones contradictorias de estos dos términos. Según el Glosario estándar de terminología de ingeniería de software del IEEE : [ 12 ] : 80–81

La verificación es el proceso de evaluar un sistema o componente para determinar si los productos de una fase de desarrollo determinada cumplen las condiciones impuestas al inicio de dicha fase.
La validación es el proceso de evaluar un sistema o componente durante o al final del proceso de desarrollo para determinar si cumple con los requisitos especificados.

Y, según la norma ISO 9000:

La verificación consiste en la confirmación, mediante examen y aportación de pruebas objetivas, de que se han cumplido los requisitos especificados.
La validación consiste en la confirmación, mediante examen y aportación de pruebas objetivas, de que se han cumplido los requisitos para un uso o aplicación específicos previstos.

La contradicción se debe al uso de los conceptos de requisitos y requisitos específicos, pero con significados diferentes.

En el caso de los estándares IEEE, los requisitos especificados, mencionados en la definición de validación, son el conjunto de problemas, necesidades y deseos de las partes interesadas que el software debe resolver y satisfacer. Dichos requisitos se documentan en una Especificación de Requisitos de Software (SRS). Por otro lado, los productos mencionados en la definición de verificación son los artefactos resultantes de cada fase del proceso de desarrollo de software. Estos productos son, de hecho, especificaciones como la Especificación de Diseño Arquitectónico, la Especificación de Diseño Detallado, etc. La SRS también es una especificación, pero no se puede verificar (al menos no en el sentido que se utiliza aquí; se abordará este tema más adelante).

Sin embargo, para la norma ISO 9000, los requisitos especificados son el conjunto de especificaciones, como se mencionó anteriormente, que deben verificarse. Una especificación, como se explicó previamente, es el producto de una fase del proceso de desarrollo de software que recibe otra especificación como entrada. Una especificación se verifica con éxito cuando implementa correctamente la especificación de entrada. Todas las especificaciones pueden verificarse, excepto la SRS, ya que es la primera (aunque puede validarse). Un ejemplo sería que la Especificación de Diseño debe implementar la SRS, y los artefactos de la fase de Construcción deben implementar la Especificación de Diseño.

Así pues, cuando estas palabras se definen en términos comunes, la aparente contradicción desaparece.

Tanto la especificación de requisitos de software (SRS) como el software deben validarse. La SRS puede validarse de forma estática consultando con las partes interesadas. Sin embargo, ejecutar una implementación parcial del software o un prototipo (pruebas dinámicas) y obtener retroalimentación positiva puede aumentar la certeza de que la SRS está correctamente formulada. Por otro lado, el software, como producto final y en funcionamiento (no sus artefactos ni documentos, incluido el código fuente), debe validarse dinámicamente con las partes interesadas, ejecutándolo y permitiéndoles probarlo.

Algunos podrían argumentar que, para los SRS, la información de entrada son las palabras de las partes interesadas y, por lo tanto, la validación de los SRS es lo mismo que la verificación de los mismos. Pensar así no es recomendable, ya que solo genera más confusión. Es mejor concebir la verificación como un proceso que incluye un documento de entrada formal y técnico.

garantía de calidad del software

En algunas organizaciones, las pruebas de software forman parte de un proceso de aseguramiento de la calidad del software (SQA). [ 3 ] : 347 En SQA, los especialistas en procesos de software y los auditores se ocupan del proceso de desarrollo de software en lugar de solo de los artefactos como la documentación, el código y los sistemas. Examinan y modifican el propio proceso de ingeniería de software para reducir el número de fallos que terminan en el software entregado: la llamada tasa de defectos. Lo que constituye una tasa de defectos aceptable depende de la naturaleza del software; un videojuego de simulación de vuelo tendría una tolerancia a defectos mucho mayor que el software para un avión real. Aunque existen vínculos estrechos con SQA, los departamentos de pruebas a menudo funcionan de forma independiente, y puede que no exista una función de SQA en algunas empresas.

Las pruebas de software consisten en investigar el software que se está probando para proporcionar información sobre su calidad a las partes interesadas. Por el contrario, el control de calidad (CC ) es la implementación de políticas y procedimientos destinados a evitar que los defectos lleguen a los clientes.

Medidas

Las medidas de calidad incluyen temas como la corrección , la integridad, la seguridad y los requisitos de la norma ISO/IEC 9126 , tales como capacidad, fiabilidad , eficiencia , portabilidad , mantenibilidad , compatibilidad y usabilidad .

Existen diversas métricas o medidas de software de uso frecuente que ayudan a determinar el estado del software o la adecuación de las pruebas.

Artefactos

Un proceso de prueba de software puede generar diversos artefactos . Los artefactos generados dependen del modelo de desarrollo de software utilizado, las necesidades de las partes interesadas y de la organización.

Plan de pruebas

Un plan de pruebas es un documento que detalla el enfoque que se adoptará para las actividades de prueba previstas. El plan puede incluir aspectos como objetivos, alcance, procesos y procedimientos, requisitos de personal y planes de contingencia. [ 53 ] El plan de pruebas puede presentarse como un único plan que incluya todos los tipos de pruebas (como un plan de pruebas de aceptación o de sistema) y consideraciones de planificación, o puede emitirse como un plan maestro de pruebas que proporciona una visión general de más de un plan de pruebas detallado (un plan de un plan). [ 53 ] En algunos casos, un plan de pruebas puede formar parte de una " estrategia de pruebas " más amplia que documenta los enfoques generales de las pruebas, que a su vez puede ser un plan maestro de pruebas o incluso un documento independiente.

Matriz de trazabilidad

En el desarrollo de software , una matriz de trazabilidad (MT) [ 86 ] : 244 es un documento, generalmente en forma de tabla, que se utiliza para ayudar a determinar la completitud de una relación correlacionando cualquier par de documentos de referencia mediante una comparación de relaciones de muchos a muchos. [ 86 ] : 3–22 A menudo se utiliza con requisitos de alto nivel (que a menudo consisten en requisitos de marketing) y requisitos detallados del producto a las partes correspondientes del diseño de alto nivel , el diseño detallado, el plan de pruebas y los casos de prueba .

Caso de prueba

Un caso de prueba normalmente consta de un identificador único, referencias de requisitos de una especificación de diseño, precondiciones, eventos, una serie de pasos (también conocidos como acciones) a seguir, entrada, salida, resultado esperado y resultado real. Clínicamente definido, un caso de prueba es una entrada y un resultado esperado. [ 87 ] Esto puede ser tan conciso como "para la condición x su resultado derivado es y", aunque normalmente los casos de prueba describen con más detalle el escenario de entrada y los resultados que podrían esperarse. Ocasionalmente puede ser una serie de pasos (pero a menudo los pasos están contenidos en un procedimiento de prueba separado que puede ejecutarse contra múltiples casos de prueba, por una cuestión de economía) pero con un resultado esperado o desenlace esperado. Los campos opcionales son un ID de caso de prueba, paso de prueba o número de orden de ejecución, requisito(s) relacionado(s), profundidad, categoría de prueba, autor y casillas de verificación para indicar si la prueba es automatizable y ha sido automatizada. Los casos de prueba más grandes también pueden contener estados o pasos de prerrequisitos y descripciones. Un caso de prueba también debe contener un espacio para el resultado real. Estos pasos se pueden almacenar en un documento de procesador de texto, una hoja de cálculo, una base de datos u otros repositorios comunes. En un sistema de base de datos, también es posible consultar los resultados de pruebas anteriores, quién los generó y qué configuración del sistema se utilizó. Estos resultados suelen almacenarse en una tabla aparte.

Script de prueba

Un script de prueba es un procedimiento o código de programación que replica las acciones del usuario. Inicialmente, el término se derivó del trabajo realizado con herramientas automatizadas de pruebas de regresión. Un caso de prueba servirá como base para crear scripts de prueba utilizando una herramienta o un programa.

Conjunto de pruebas

En el desarrollo de software , un conjunto de pruebas , también conocido como conjunto de validación, es una colección de casos de prueba diseñados para probar un programa de software y demostrar que posee un conjunto específico de comportamientos. [ 88 ] Un conjunto de pruebas suele contener instrucciones o objetivos detallados para cada conjunto de casos de prueba e información sobre la configuración del sistema que se utilizará durante las pruebas. Un grupo de casos de prueba también puede incluir estados o pasos prerrequisito y descripciones de las pruebas subsiguientes.

Dispositivo de prueba o datos de prueba

En la mayoría de los casos, se utilizan varios conjuntos de valores o datos para probar la misma funcionalidad de una característica específica. Todos los valores de prueba y los componentes ambientales modificables se recopilan en archivos separados y se almacenan como datos de prueba. También es útil proporcionar estos datos al cliente junto con el producto o proyecto. Existen técnicas para generar datos de prueba.

arnés de prueba

El software, las herramientas, las muestras de entrada y salida de datos y las configuraciones se denominan colectivamente " banco de pruebas" .

Ejecución de prueba

Una ejecución de prueba consiste en un conjunto de casos o conjuntos de pruebas que el usuario ejecuta, comparando los resultados esperados con los reales. Una vez finalizada, se puede generar un informe con todas las pruebas ejecutadas.

Certificaciones

Existen varios programas de certificación para apoyar las aspiraciones profesionales de los probadores de software y los especialistas en control de calidad. Algunos profesionales sostienen que el campo de las pruebas aún no está preparado para la certificación, como se menciona en la sección de controversias .

Controversia

Algunas de las principales controversias en torno a las pruebas de software incluyen:

Ágil frente a tradicional
¿Deberían los evaluadores aprender a trabajar en condiciones de incertidumbre y cambio constante o deberían aspirar a la "madurez" del proceso ? El movimiento de pruebas ágiles ha ganado popularidad desde principios de la década de 2000, principalmente en círculos comerciales, [ 89 ] [ 90 ] mientras que los proveedores de software gubernamentales y militares [ 91 ] utilizan esta metodología, pero también los modelos tradicionales de prueba al final (por ejemplo, en el modelo en cascada ). [ 92 ]
Pruebas manuales frente a pruebas automatizadas
Algunos autores creen que la automatización de pruebas es tan costosa en relación con su valor que debería usarse con moderación. [ 93 ] La automatización de pruebas puede considerarse entonces como una forma de capturar e implementar los requisitos. Por regla general, cuanto mayor sea el sistema y mayor su complejidad, mayor será el retorno de la inversión en automatización de pruebas. Además, la inversión en herramientas y experiencia puede amortizarse a lo largo de múltiples proyectos con el nivel adecuado de intercambio de conocimientos dentro de una organización.
¿Está justificada la existencia de la norma ISO 29119 para pruebas de software?
Ha surgido una importante oposición dentro de la escuela de pruebas de software orientada al contexto con respecto a la norma ISO 29119. Asociaciones profesionales de pruebas, como la Sociedad Internacional para Pruebas de Software, han intentado que se retire la norma. [ 94 ] [ 95 ]
Algunos profesionales afirman que el campo de las pruebas no está preparado para la certificación.
[ 96 ] Ninguna certificación que se ofrece actualmente exige que el solicitante demuestre su capacidad para probar software. Ninguna certificación se basa en un conjunto de conocimientos ampliamente aceptado. La certificación en sí misma no puede medir la productividad, la habilidad ni el conocimiento práctico de un individuo, ni puede garantizar su competencia o profesionalismo como probador. [ 97 ]
Los estudios se utilizaban para mostrar el costo relativo de reparar defectos.
Existen opiniones divergentes sobre la aplicabilidad de los estudios utilizados para mostrar el costo relativo de la reparación de defectos según su introducción y detección. Por ejemplo:

Se suele creer que cuanto antes se detecta un defecto, más barato resulta corregirlo. La siguiente tabla muestra el coste de corregir el defecto en función de la etapa en la que se detectó. [ 98 ] Por ejemplo, si se detecta un problema en los requisitos solo después del lanzamiento, corregirlo costaría entre 10 y 100 veces más que si ya se hubiera detectado durante la revisión de requisitos. Con la llegada de las prácticas modernas de despliegue continuo y los servicios en la nube, el coste de la redistribución y el mantenimiento podría disminuir con el tiempo.

Los datos a partir de los cuales se extrapola esta tabla son escasos. Laurent Bossavit dice en su análisis:

La curva de "proyectos más pequeños" resulta provenir de solo dos equipos de estudiantes de primer año, un tamaño de muestra tan reducido que extrapolarla a "proyectos más pequeños en general" es totalmente indefendible. El estudio de GTE no explica sus datos, salvo para indicar que proceden de dos proyectos, uno grande y otro pequeño. El artículo citado para el proyecto "Safeguard" de Bell Labs niega explícitamente haber recopilado los datos detallados que sugieren los puntos de datos de Boehm. El estudio de IBM (el artículo de Fagan) contiene afirmaciones que parecen contradecir el gráfico de Boehm y ningún resultado numérico que se corresponda claramente con sus puntos de datos.

Boehm ni siquiera cita un artículo para los datos de TRW, excepto cuando escribió para "Making Software" en 2010, donde citó el artículo original de 1976. Existe un estudio extenso realizado en TRW en el momento adecuado para que Boehm lo cite, pero ese artículo no contiene el tipo de datos que respaldarían las afirmaciones de Boehm. [ 99 ]

Véase también

Referencias

  1. Kaner, Cem (17 de noviembre de 2006). Pruebas exploratorias (PDF) . Conferencia anual mundial de pruebas de software del Quality Assurance Institute. Orlando, FL . Recuperado el 22 de noviembre de 2014 .
  2. 1 2 Pan, Jiantao (Primavera de 1999). "Pruebas de software" (trabajo de curso). Universidad Carnegie Mellon . Recuperado el 21 de noviembre de 2017 .
  3. 1 2 3 4 Kaner, Cem ; Falk, Jack; Nguyen, Hung Quoc (1999). Pruebas de software informático (2.ª ed.). Nueva York: John Wiley and Sons. ISBN  978-0-471-35846-6.
  4. Leitner, Andreas; Ciupa, Ilinca; Oriol, Manuel; Meyer, Bertrand ; Fiva, Arno (septiembre de 2007). Desarrollo impulsado por contratos = Desarrollo impulsado por pruebas: escritura de casos de prueba (PDF) . ESEC/FSE'07: Conferencia Europea de Ingeniería de Software y Simposio ACM SIGSOFT sobre los Fundamentos de la Ingeniería de Software 2007. Dubrovnik, Croacia . Recuperado el 8 de diciembre de 2017 .
  5. 1 2 Kolawa, Adam; Huizinga, Dorota (2007). Prevención automatizada de defectos: mejores prácticas en la gestión de software . Wiley-IEEE Computer Society Press. ISBN 978-0-470-04212-0.
  6. Cohn, Mike (2009). Succeeding with Agile: Software Development Using Scrum . Addison-Wesley Professional. ISBN 978-0321579362.
  7. Molina, Alessandro (2021). Creación de software guiado por pruebas con Python: Escriba conjuntos de pruebas que se adapten a las necesidades y complejidad de sus aplicaciones utilizando Python y PyTest . Packt Publishing. ISBN 978-1838642655.
  8. Fernandes da Costa, Lucas (2021). Testing JavaScript Applications . Manning. ISBN 978-1617297915.
  9. "Los impactos económicos de una infraestructura inadecuada para las pruebas de software" (PDF) . Instituto Nacional de Estándares y Tecnología . Mayo de 2002. Consultado el 19 de diciembre de 2017 .
  10. Vashistha, Avinash; Khan, Imrana (octubre de 2009). "Las 50 principales ciudades emergentes de subcontratación global: un estudio global de servicios-tholons" . Recuperado el 25 de octubre de 2025 .
  11. 1 2 3 Myers, Glenford J. (1979). El arte de las pruebas de software . John Wiley and Sons. ISBN 978-0-471-04328-7.
  12. 1 2 3 Glosario estándar de terminología de ingeniería de software de IEEE , IEEE, 1990, doi : 10.1109/IEEESTD.1990.101064 , ISBN 978-1-55937-067-7
  13. 1 2 "Programa de estudios de nivel básico para probador certificado" . Junta Internacional de Calificaciones de Pruebas de Software . 31 de marzo de 2011. Sección 1.1.2. Archivado del original (pdf) el 28 de octubre de 2017. Recuperado el 15 de diciembre de 2017 .
  14. "Programa de estudios de nivel básico para probador certificado" (PDF) . International Software Testing Qualifications Board . 1 de julio de 2005. Principio 2, Sección 1.3. Archivado del original (PDF) el 17 de diciembre de 2008. Consultado el 15 de diciembre de 2017 .
  15. Ramler, Rudolf; Kopetzky, Theodorich; Platz, Wolfgang (17 de abril de 2012). Diseño de pruebas combinatorias en el conjunto de pruebas TOSCA: lecciones aprendidas e implicaciones prácticas . Quinta Conferencia Internacional IEEE sobre Pruebas y Validación de Software (ICST). Montreal, QC, Canadá. doi : 10.1109/ICST.2012.142 .
  16. Kaner, Cem; Bach, James; Pettichord, Bret (2001). Lecciones aprendidas en pruebas de software: un enfoque basado en el contexto . Wiley. págs. 31-43 . ISBN  978-0-471-08112-8.
  17. Kolawa, Adam; Huizinga, Dorota (2007). Prevención automatizada de defectos: Mejores prácticas en la gestión de software . Wiley-IEEE Computer Society Press. pág. 74. ISBN  978-0-470-04212-0.
  18. O'Connor, Rory V.; Akkaya, Mariye Umay; Kemaneci, Kerem; Yilmaz, Murat; Poth, Alexander; Messnarz, Richard (15 de octubre de 2015). Mejora de procesos de sistemas, software y servicios: 22.ª Conferencia Europea, EuroSPI 2015, Ankara, Turquía, 30 de septiembre - 2 de octubre de 2015. Actas . Springer. ISBN 978-3-319-24647-5.
  19. Bourque, Pierre; Fairley, Richard E., eds. (2014). «Capítulo 5» . Guía del Cuerpo de Conocimientos de Ingeniería de Software . 3.0. IEEE Computer Society. ISBN 978-0-7695-5166-1. Consultado el 2 de enero de 2018 .
  20. Bourque, P.; Fairley, RD, eds. (2014). «Capítulo 4: Pruebas de software» (PDF) . SWEBOK v3.0: Guía del Cuerpo de Conocimientos de Ingeniería de Software . IEEE. págs. 4–1–4–17. ISBN  978-0-7695-5166-1Archivado del original (PDF) el 19 de junio de 2018. Consultado el 13 de julio de 2018 .
  21. Dooley, J. (2011). Desarrollo de software y práctica profesional . APress. págs. 193–194 . ISBN  978-1-4302-3801-0.
  22. Wiegers, K. (2013). Creando una cultura de ingeniería de software . Addison-Wesley. págs. 211–212 . ISBN  978-0-13-348929-3.
  23. Kolawa, Adam; Huizinga, Dorota (2007). Prevención automatizada de defectos: Mejores prácticas en la gestión de software . Wiley-IEEE Computer Society Press. pág. 75. ISBN  978-0-470-04212-0.
  24. ^ Graham , D.; Van Veenendaal, E.; Evans, I. (2008). Fundamentos de las pruebas de software . Aprendizaje Cengage. págs. 57– 58. ISBN  978-1-84480-989-9.
  25. 1 2 3 4 Oberkampf, WL; Roy, CJ (2010). Verificación y validación en computación científica . Cambridge University Press. págs. 154–155 . ISBN  978-1-139-49176-1.
  26. Lee, D.; Netravali, AN; Sabnani, KK; Sugla, B.; John, A. (1997). "Pruebas pasivas y aplicaciones a la gestión de redes". Actas de la Conferencia Internacional de Protocolos de Red de 1997. IEEE Comput. Soc. pp. 113–122 . doi : 10.1109/icnp.1997.643699 . ISBN  978-0-8186-8061-8. S2CID 42596126 . 
  27. Cem Kaner, " Un tutorial sobre pruebas exploratorias archivado el 12 de junio de 2013 en Wayback Machine ", pág. 2
  28. Cem Kaner, Un tutorial sobre pruebas exploratorias Archivado el 12 de junio de 2013 en Wayback Machine , pág. 36.
  29. Lee, D.; Yannakakis, M. (1996). "Principios y métodos de prueba de máquinas de estados finitos: una revisión" . Actas del IEEE . 84 (8): 1090– 1123. Bibcode : 1996IEEEP..84.1090L . doi : 10.1109/5.533956 .
  30. Petrenko, A.; Yevtushenko, N. (2011). "Pruebas adaptativas de implementaciones deterministas especificadas por máquinas de estados finitos no deterministas" . En Testing Software and Systems: 23.ª Conferencia Internacional IFIP WG 6.1, ICTSS 2011, París, Francia, 7-10 de noviembre . Lecture Notes in Computer Science. Vol. 7019. Springer Berlin Heidelberg. pp. 162–178 . doi : 10.1007/978-3-642-24580-0_12 . ISBN   978-3-642-24579-4.
  31. Petrenko, A.; Yevtushenko, N. (2014). "Pruebas adaptativas de sistemas no deterministas con FSM". En 2014 IEEE 15th International Symposium on High-Assurance Systems Engineering . IEEE. pp. 224–228 . doi : 10.1109/HASE.2014.39 . ISBN  978-1-4799-3466-9.
  32. 1 2 3 4 Limaye, MG (2009). Pruebas de software . Tata McGraw-Hill Education. págs. 108–11 . ISBN  978-0-07-013990-9.
  33. ^ Saleh , KA (2009) . Ingeniería de software . Publicación J. Ross. págs. 224–41 . ISBN  978-1-932159-94-3.
  34. 1 2 3 Ammann, P.; Offutt, J. (2016). Introducción a las pruebas de software . Cambridge University Press. pág. 26. ISBN  978-1-316-77312-3.
  35. Everatt, GD; McLeod Jr., R. (2007). «Capítulo 7: Pruebas funcionales». Pruebas de software: Pruebas a lo largo de todo el ciclo de vida del desarrollo de software . John Wiley & Sons. págs. 99–121 . ISBN  978-0-470-14634-7.
  36. 1 2 Cornett, Steve (c. 1996). "Análisis de cobertura de código" . Bullseye Testing Technology. Introducción . Recuperado el 21 de noviembre de 2017 .
  37. 1 2 Black, R. (2011). Pragmatic Software Testing: Becoming an Effective and Efficient Test Professional . John Wiley & Sons. pp. 44–6 . ISBN  978-1-118-07938-6.
  38. Como ejemplo sencillo, lafunción C consta de una sola instrucción. Todas las pruebas contra una especificacióntendrán éxito, excepto sise elige.intf(intx){returnx*x-6*x+8;}f(x)>=0x=3
  39. Patton, Ron (2005). Pruebas de software (2.ª ed.). Indianápolis: Sams Publishing. ISBN  978-0-672-32798-8.
  40. Laycock, Gilbert T. (1993). The Theory and Practice of Specification Based Software Testing (PDF) (tesis doctoral). Departamento de Informática, Universidad de Sheffield . Recuperado el 2 de enero de 2018 .
  41. Bach, James (junio de 1999). "Pruebas basadas en riesgos y requisitos" (PDF) . Computer . 32 ( 6): 113–114 . Recuperado el 19 de agosto de 2008 .
  42. Mathur, AP (2011). Fundamentos de las pruebas de software . Pearson Education India. pág. 63. ISBN  978-81-317-5908-0.
  43. 1 2 Clapp, Judith A. (1995). Control de calidad de software, análisis de errores y pruebas . William Andrew. pág. 313. ISBN  978-0-8155-1363-6. Consultado el 5 de enero de 2018 .
  44. Mathur, Aditya P. (2007). Fundamentos de las pruebas de software . Pearson Education India. pág. 18. ISBN  978-81-317-1660-1.
  45. Lönnberg, Jan (7 de octubre de 2003). Pruebas visuales de software (PDF) (tesis de maestría). Universidad Tecnológica de Helsinki . Recuperado el 13 de enero de 2012 .
  46. Chima, Raspal. "Pruebas visuales" . Revista TEST . Archivado del original el 24 de julio de 2012. Consultado el 13 de enero de 2012 .
  47. 1 2 3 Lewis, WE (2016). Pruebas de software y mejora continua de la calidad (3.ª ed.). CRC Press. págs. 68–73 . ISBN   978-1-4398-3436-7.
  48. 1 2 Ransome, J.; Misra, A. (2013). Core Software Security: Security at the Source . CRC Press. pp. 140–3 . ISBN  978-1-4665-6095-6.
  49. "Herramientas de prueba SOA para cajas negras, blancas y grises" (documento técnico). Crosscheck Networks. Archivado del original el 1 de octubre de 2018. Recuperado el 10 de diciembre de 2012 .
  50. 1 2 Myers, G. (2004). Sandler, C; Badgett, T; Thomas, M. (eds.). El arte de las pruebas de software (2.ª ed.). Wiley. ISBN  9780471469124.
  51. Kaner, Cem; Falk, Jack; Nguyen, Hung Q. (1999). Pruebas de software informático (2.ª ed.). Wiley. ISBN  0471358460.
  52. Ammann, Paul; Offutt, Jeff (28 de enero de 2008). Introducción a las pruebas de software . Cambridge University Press . pág. 215. ISBN  978-0-521-88038-1Consultado el 29 de noviembre de 2017 .
  53. 1 2 3 Lewis, WE (2016). Pruebas de software y mejora continua de la calidad (3.ª ed.). CRC Press. págs. 92–96 . ISBN   978-1-4398-3436-7.
  54. Machado, P.; Vincenzi, A.; Maldonado, JC (2010). «Capítulo 1: Pruebas de software: una visión general» . En Borba, P.; Cavalcanti, A.; Sampaio, A.; Woodcook, J. (eds.). Técnicas de prueba en ingeniería de software . Springer Science & Business Media. pp. 13–14 . ISBN  978-3-642-14334-2.
  55. Clapp, JA; Stanten, SF; Peng, WW; et al. (1995). Control de calidad de software, análisis de errores y pruebas . Nova Data Corporation. pág. 254. ISBN   978-0-8155-1363-6.
  56. 1 2 3 "ISTQB CTFL Syllabus 2018" (PDF) . ISTQB - International Software Testing Qualifications Board . Archivado (PDF) del original el 24 de marzo de 2022. Recuperado el 11 de abril de 2022 .
  57. Liskin, Olga; Herrmann, Christoph; Knauss, Eric; Kurpick, Thomas; Rumpe, Bernhard; Schneider, Kurt (2012). "Apoyo a las pruebas de aceptación en proyectos de software distribuidos con sistemas de retroalimentación integrados: experiencias y requisitos". 2012 IEEE Seventh International Conference on Global Software Engineering . pp. 84–93 . arXiv : 1409.0402 . doi : 10.1109/ICGSE.2012.34 . 
  58. Woods, Anthony J. (5 de junio de 2015). "Aceptación operativa: una aplicación de la norma ISO 29119 para pruebas de software" (Documento técnico). Capgemini Australia . Consultado el 9 de enero de 2018 .
  59. «Glosario estándar de términos utilizados en las pruebas de software» (PDF) . Versión 3.1. International Software Testing Qualifications Board . Consultado el 9 de enero de 2018 .
  60. O'Reilly, Tim (30 de septiembre de 2005). "¿Qué es la Web 2.0?" . O'Reilly Media. Sección 4. Fin del ciclo de lanzamiento de software . Recuperado el 11 de enero de 2018 .
  61. Auerbach, Adam (3 de agosto de 2015). "Parte del proceso: por qué las pruebas continuas son esenciales" . TechWell Insights . TechWell Corp. Recuperado el 12 de enero de 2018 .
  62. Philipp-Edmonds, Cameron (5 de diciembre de 2014). "La relación entre el riesgo y las pruebas continuas: una entrevista con Wayne Ariola" . Stickyminds . Recuperado el 16 de enero de 2018 .
  63. Ariola, Wayne; Dunlop, Cynthia (octubre de 2015). DevOps: ¿Está usted enviando errores a los clientes más rápido? (PDF) . Conferencia de Calidad de Software del Pacífico Noroeste. Archivado del original (PDF) el 14 de febrero de 2025. Recuperado el 16 de enero de 2018 .
  64. Auerbach, Adam (2 de octubre de 2014). "Desplazamiento a la izquierda y prioridad a la calidad" . TechWell Insights . TechWell Corp. Recuperado el 16 de enero de 2018 .
  65. Miller, Barton P.; Fredriksen, Lars; So, Bryan (1990). "Un estudio empírico de la fiabilidad de las utilidades UNIX". Communications of the ACM . 33 (12): 32– 44. doi : 10.1145/96267.96279 .
  66. Taqi, Farwa; Batool, Syeda Hina; Arshad, Alia (23 de mayo de 2024). "Desarrollo y validación de la escala de desarrollo de usabilidad de aplicaciones en la nube" . Revista internacional de interacción humano-computadora . 41 (7): 4376– 4391. doi : 10.1080/10447318.2024.2351715 . ISSN 1044-7318 . 
  67. "Sección 4.38". ISO/IEC/IEEE 29119-1:2013 – Ingeniería de software y sistemas – Pruebas de software – Parte 1 – Conceptos y definiciones . Organización Internacional de Normalización . Consultado el 17 de enero de 2018 .
  68. "Globalización paso a paso: El enfoque de pruebas preparado para el mundo. Microsoft Developer Network" . Microsoft Developer Network. Archivado del original el 23 de junio de 2012. Consultado el 13 de enero de 2012 .
  69. Claessen, Koen; Hughes, John (2000). "QuickCheck" . Actas de la quinta conferencia internacional ACM SIGPLAN sobre programación funcional . Icfp '00. págs. 268–279 . doi : 10.1145/351240.351266 . ISBN  978-1-58113-202-1. S2CID 5668071 . 
  70. "¿Qué son las pruebas de contrato y cuál es su importancia?" . BrowserStack . Consultado el 15 de noviembre de 2025 .
  71. Fowler, Martin. "bliki: Prueba de contrato" . martinfowler.com . Consultado el 15 de noviembre de 2025 .
  72. Baqar, Mohammad; Khanda, Rajat (2025). Computación inteligente . Lecture Notes in Networks and Systems. Vol. 1424. arXiv : 2409.05808 . doi : 10.1007/978-3-031-92605-1 . ISBN  978-3-031-92604-4.
  73. Ricca, Filippo; Marchetto, Alejandro; Stocco, Andrea (12 de agosto de 2024). "Una revisión de la literatura gris de varios años sobre la automatización de pruebas asistida por IA". arXiv : 2408.06224 [ cs.SE ].
  74. Amalfitano, Domenico; Faralli, Stefano; Hauck, Jean Carlo Rossa; Matalonga, Santiago; Distante, Damián (2023). "Inteligencia artificial aplicada a las pruebas de software: un estudio terciario". Encuestas de Computación ACM . 56 (3): 1– 38. doi : 10.1145/3616372 . hdl : 11573/1689760 .
  75. Smith, Larry (septiembre de 2001). "Pruebas de desplazamiento a la izquierda" . Dr. Dobb's Journal . 26 (9): 56–ff . Recuperado el 19 de junio de 2026 .
  76. "Implementación del paradigma Shift Left: impacto en la calidad del software y la eficiencia de las pruebas" . 25 de julio de 2025. Consultado el 19 de junio de 2026 .
  77. Andriadi, Kus; Soeparno, Haryono; Gaol, Ford Lumban; Arifin, Yulyani (2023). "El impacto de las pruebas Shift-Left en la calidad del software en la metodología ágil: un estudio de caso". Conferencia Internacional de 2023 sobre Gestión de la Información y Tecnología (ICIMTech) . pp. 259–264 . Bibcode : 2023cimt.conf...56A . doi : 10.1109/ICIMTech59029.2023.10277919 . ISBN  979-8-3503-2609-3. S2CID 264294801 . 
  78. Gelperin, David ; Hetzel, Bill (1 de junio de 1988). "El crecimiento de las pruebas de software" . Communications of the ACM . 31 (6): 687– 695. doi : 10.1145/62959.62965 . S2CID 14731341 . 
  79. Gregory, Janet; Crispin, Lisa (2014). Más sobre pruebas ágiles . Addison-Wesley Professional. págs. 23–39 . ISBN  978-0-13-374956-4.
  80. "Ciclo de vida de las pruebas de software" . etestinghub . Fase de pruebas en las pruebas de software . Consultado el 13 de enero de 2012 .
  81. Dustin, Elfriede (2002). Pruebas de software efectivas . Addison-Wesley Professional. pág. 3. ISBN  978-0-201-79429-8.
  82. 1 2 "¿Qué es el desarrollo guiado por pruebas (TDD)?" . Agile Alliance . 5 de diciembre de 2015 . Recuperado el 17 de marzo de 2018 .
  83. "Desarrollo guiado por pruebas e integración continua para aplicaciones móviles" . Microsoft Developer Network . 14 de enero de 2009. Consultado el 17 de marzo de 2018 .
  84. Brown, Chris; Cobb, Gary; Culbertson, Robert (12 de abril de 2002). Introducción a las pruebas rápidas de software .
  85. Tran, Eushiuan (1999). "Verificación/Validación/Certificación" (curso). Universidad Carnegie Mellon . Recuperado el 13 de agosto de 2008 .
  86. 1 2 Gotel, Orlena; Cleland-Huang, Jane ; Hayes, Jane Huffman; Zisman, Andrea; Egyed, Alexander; Grünbacher, Paul; Dekhtyar, Alex; Antoniol, Giuliano; Maletic, Jonathan (1 de enero de 2012). Cleland-Huang, Jane; Gotel, Orlena; Zisman, Andrea (eds.). Trazabilidad de software y sistemas . Springer London. doi : 10.1007/978-1-4471-2239-5_1 . ISBN 9781447122388.
  87. IEEE (1998). Norma IEEE para la documentación de pruebas de software . Nueva York: IEEE. ISBN 978-0-7381-1443-9.
  88. Pinto, Leandro Sales; Sinha, Saurabh; Orso, Alessandro (11 de noviembre de 2012). «Comprendiendo los mitos y las realidades de la evolución de los conjuntos de pruebas» . Actas del 20.º Simposio Internacional ACM SIGSOFT sobre los Fundamentos de la Ingeniería de Software . Association for Computing Machinery. págs. 1-11 . doi : 10.1145/2393596.2393634 . ISBN  9781450316149. S2CID 9072512 . 
  89. Strom, David (1 de julio de 2009). "Todos somos parte de la historia" . Software Test & Performance Collaborative. Archivado del original el 31 de agosto de 2009.
  90. Griffiths, M. (2005). "Enseñanza de la gestión ágil de proyectos al PMI". Conferencia de Desarrollo Ágil (ADC'05) . ieee.org. pp. 318–322 . doi : 10.1109/ADC.2005.45 . ISBN  978-0-7695-2487-0. S2CID 30322339 . 
  91. Willison, John S. (abril de 2004). "Desarrollo ágil de software para una fuerza ágil" . CrossTalk (abril de 2004). STSC. Archivado del original el 29 de octubre de 2005.
  92. Berg, Helene; Ritschel, Jonathan D. (julio de 2023). "Las características de los proyectos de TI militares exitosos: un estudio empírico transnacional" . International Journal of Information Systems and Project Management . 11 (2): 25– 44. doi : 10.12821/ijispm110202 . ISSN 2182-7788 . 
  93. Un ejemplo es Mark Fewster, Dorothy Graham: Software Test Automation. Addison Wesley, 1999, ISBN 978-0-201-33140-0.
  94. "stop29119" . commonsensetesting.org . Archivado del original el 2 de octubre de 2014.
  95. Paul Krill (22 de agosto de 2014). "Los probadores de software se resisten a la propuesta de estándares ISO 29119" . InfoWorld .
  96. Kaner, Cem (2001). "Propuesta de subvención de la NSF para 'sentar las bases de mejoras significativas en la calidad de los cursos académicos y comerciales en pruebas de software'"" (PDF) . Archivado del original (PDF) el 27 de noviembre de 2009 . Recuperado el 13 de octubre de 2006 .
  97. Kaner, Cem (2003). Medición de la eficacia de los probadores de software (PDF) . STAR East. Archivado del original (PDF) el 26 de marzo de 2010. Recuperado el 18 de enero de 2018 .
  98. ↑ McConnell , Steve (2004). Code Complete (2.ª ed.). Microsoft Press. pág. 29. ISBN   978-0-7356-1967-8.
  99. Bossavit, Laurent (20 de noviembre de 2013). "El costo de los defectos: una historia ilustrada". Los duendes de la ingeniería de software: cómo el folclore se convierte en realidad y qué hacer al respecto . leanpub.

Lecturas adicionales

  • Meyer, Bertrand (agosto de 2008). "Siete principios de las pruebas de software" (PDF) . Computer . Vol.  41, n.º  8, págs. 99-101 . doi : 10.1109/MC.2008.306 . Consultado el 21 de noviembre de 2017 .