Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRÁCTICO
SOFTWARE
PRUEBAS
Machine Translated by Google
Saltador
Nueva York
Berlina
Heidelberg
Hong Kong
Londres
Milán
París
tokio
Machine Translated by Google
PRÁCTICO
SOFTWARE
PRUEBAS
UN
ORIENTADO A PROCESOS
ACERCARSE
ILENE BURNSTEIN
Machine Translated by Google
Ilene Burnstein
Departamento de Ciencias de la
Computación Instituto de Tecnología de
Illinois 10 West 31 Street Chicago, IL
60616 EE. UU. burnstei@babbage2.cs.iit.edu
El uso en esta publicación de nombres comerciales, marcas registradas, marcas de servicio y términos similares,
incluso si no están identificados como tales, no debe tomarse como una expresión de opinión sobre si están o no
sujetos a derechos de propiedad.
Modelo de madurez de capacidad y CMM son marcas comerciales registradas del Instituto de ingeniería de software
y la Universidad Carnegie Mellon. Testing Maturity Model y TMM son marcas de servicio del Instituto de Tecnología
de Illinois.
www.springer-ny.com
CONTENIDO
Prefacio XV
2.0 Introducción 19
2.1 Definiciones básicas 19
Machine Translated by Google
vi | Contenido
Contenido | viii
6 NIVELES DE PRUEBA
6.1 Prueba unitaria: funciones, procedimientos, clases y métodos como unidades 137
6.2 Prueba unitaria: la necesidad de preparación 138 6.3 Planificación de la prueba
unitaria 139 6.4 Diseño de las pruebas unitarias 141 6.5 La clase como unidad
comprobable: consideraciones especiales 142 6.6 El arnés de prueba 148
viii | Contenido
Contenido | ix
8 LA ORGANIZACIÓN DE LA PRUEBA
CONTROL Y SEGUIMIENTO
9
EL PROCESO DE PRUEBA
X | Contenido
10.4.3 Roles, participantes, tamaño del equipo y requisitos de tiempo 317 10.4.4
Procedimientos de revisión 320
Contenido | xi
xi | Contenido
12.10 Control de calidad del software y las tres vistas críticas 433
Lista de términos clave 436
Ejercicios 436
Referencias 437
Ejercicios 462
Referencias 463
Contenido | XIII
14.3 El banco de trabajo de probadores y las tres vistas críticas 498
Ejercicios 500
Referencias 501
15.0 Metas de madurez de TMM: soporte para un proceso de prueba de calidad 503 15.1
Ingeniería de procesos y control de calidad 504 15.2 Fundamentos del control cuantitativo
de procesos 509 15.3 Actividades para el control cuantitativo de procesos de prueba 512
15.4 Ejemplos de la aplicación del control estadístico de procesos 516 15.5 Optimización del
proceso de prueba: el Papel de una mejora de procesos
Ejercicios 535
Referencias 536
xiv | Contenido
16.8 Relación del TMM con otros modelos de mejora de procesos 563 16.9 Aplicaciones
industriales del TMM 569
Referencias 583
Índice 701
Machine Translated by Google
PREFACIO
Prefacio
xi |
Metas
Prefacio | xvii
• introducir una visión de las pruebas como un proceso que pasa por un conjunto de
etapas evolutivas hasta un estado óptimo de mejora continua;
• permitir que un profesional de software actúe como agente de cambio cuando una
organización decida que su proceso general de pruebas necesita mejoras;
Organización y Características
Cada capítulo de este texto cubre un tema relacionado con la gestión, técnica y/o
proceso relacionado con las pruebas. Los temas están diseñados para apoyar el
crecimiento del lector como especialista en exámenes. Dentro de cada capítulo, se
describe la relación del contenido del capítulo con uno o más objetivos de madurez de TMM.
Los primeros nueve capítulos contienen material básico que permite al lector dominar
los conceptos fundamentales de las pruebas a nivel técnico y aprender sobre los
conceptos básicos de gestión que promueven un proceso de pruebas repetible y
definido. Estos capítulos también destacan la importancia de un grupo de prueba
independiente y promueven el seguimiento y control del proceso de prueba. Los
objetivos de madurez en los niveles 2 y 3 del TMM están integrados en el material
del capítulo.
Los capítulos 10 a 15 cubren temas más avanzados relacionados con los niveles
4 y 5 del TMM. Estos capítulos respaldan las revisiones como una actividad de
prueba y la automatización de las actividades de prueba con herramientas. También
promueven la evaluación cualitativa y cuantitativa del proceso de prueba y su
evolución continua. También se aborda la evaluación cualitativa y cuantitativa del
producto de software bajo prueba. El capítulo 16 proporciona una discusión de la prueba
Machine Translated by Google
Prefacio
xviii |
Público objetivo
Prefacio | xix
el texto es una herramienta que se puede utilizar para desarrollar las habilidades de prueba necesarias
Este texto se puede utilizar para varios tipos de cursos de posgrado, incluidos los
en pruebas de software, aseguramiento de la calidad del software, verificación de software y
validación e ingeniería de sistemas. También se puede utilizar como texto para un
curso de pregrado de ingeniería de software de dos semestres.
Para los educadores que utilizan este libro como texto para un curso de un semestre en
Las pruebas de software, que cubren los primeros diez capítulos y el Capítulo 14, le darán
sus estudiantes una base sólida en los fundamentos de las pruebas para que puedan
convertirse en probadores de software profesionales. Los capítulos que cubren temas más
avanzados, incluido el TMM, se pueden analizar si el tiempo lo permite. A los estudiantes
se les debe asignar problemas de tarea de los capítulos y recibir retroalimentación sobre
sus resultados. Un proyecto de equipo sugerido para el curso es
el desarrollo de un plan de prueba del sistema con archivos adjuntos para un sistema de
software simple. Los estudiantes necesitarán una descripción de requisitos y/o diseño
dependiendo de la naturaleza del plan de prueba solicitado.
Para los profesionales de software que usan este texto, hay mucho material que
puede ayudar a mejorar su conocimiento del campo de las pruebas. El material
relacionados con el TMM se pueden aplicar para evaluar y hacer cambios en su
proceso de prueba de una manera consistente con las metas organizacionales.
permisos
Definiciones de términos IEEE, componentes del plan de prueba y pasos en una metodología
de métricas de calidad de software reimpreso con permiso de:
Prefacio
XX |
Expresiones de gratitud
Prefacio | xxx
Ilene Burnstein
Machine Translated by Google
1
INTRODUCCIÓN A
PRUEBA COMO
ACTIVIDAD DE INGENIERÍA
2
| Introducción a las pruebas como actividad de ingeniería
•
los modelos de ciclo de vida están definidos y se cumplen;
Ingenieria
Eléctrica
Principios básicos
Ingeniería Ingeniería
Procesos
Mecánica Química
Estándares
Mediciones
Instrumentos
Métodos Ingeniería
Ingeniería civil
Informática
Mejores prácticas
Código ético
Cuerpo de
conocimientos
Trabajo en progreso
Pruebas
Ingeniería de software
HIGO. 1.1
4
| Introducción a las pruebas como actividad de ingeniería
*Modelo de madurez de prueba y TMM son marcas de servicio del Instituto de Tecnología de Illinois.
Machine Translated by Google
Actividades
Políticas Normas y
documentos
planes
Prácticas
Proceso de
ingeniería,
versión 1.0
Métodos y Procedimientos
técnicas
Versión
1.1
Versión
2.0
Versión
XX
HIGO. 1.2
*El Modelo de Madurez de Capacidad y CMM son marcas registradas del Instituto de Ingeniería de
Software y la Universidad Carnegie Mellon.
Machine Translated by Google
6
| Introducción a las pruebas como actividad de ingeniería
de especificación
del producto
Proceso de diseño
Proceso de prueba
Verificación Validación
proceso proceso
HIGO. 1.3
La prueba se puede describir como un proceso utilizado para revelar defectos en el software
y para establecer que el software ha alcanzado un grado específico de calidad con respecto a
Tenga en cuenta que estas definiciones de prueba son de naturaleza general. Cubren las
actividades de validación y verificación, e incluyen en las pruebas todo lo siguiente: revisiones
técnicas, planificación de pruebas, seguimiento de pruebas, diseño de casos de prueba, prueba
unitaria, prueba de integración, prueba del sistema, prueba de aceptación y prueba de
usabilidad. Las definiciones también describen las pruebas como un proceso de doble
propósito: uno que revela defectos y otro que se utiliza para evaluar los atributos de calidad
del software, como la confiabilidad, la seguridad, la facilidad de uso y la corrección.
8
| Introducción a las pruebas como actividad de ingeniería
• planificación mejorada
La mejora del proceso de prueba está respaldada por el conjunto de niveles y madurez.
metas en el TMM. El logro de los objetivos de madurez da como resultado una mejora
incremental del proceso de prueba de una organización. El modelo de evaluación de TMM
admite la evaluación del proceso de prueba. La sección 1.3 da la
lector una descripción general del conjunto de niveles y objetivos de madurez. Los niveles y
objetivos sirven como pautas para la organización de este texto y definen el
secuencia para la introducción de los conceptos de prueba.
El desarrollo de la versión 1.0 del TMM estuvo guiado por el trabajo
hecho en el modelo de madurez de capacidad para software (CMM), un proceso
modelo de mejora que ha recibido un amplio apoyo de la industria del software en los Estados
Unidos [8]. El CMM se clasifica arquitectónicamente como un modelo de mejora de procesos
por etapas. Este tipo de arquitectura de modelo de mejora de procesos prescribe las etapas
que una organización
debe proceder de manera ordenada para mejorar su proceso de desarrollo de software. Se
pueden describir otros modelos de mejora de procesos
como tener un tipo continuo de arquitectura, por ejemplo, el SPICE
modelo. En este tipo de arquitectura no hay un conjunto fijo de niveles o etapas
para proceder. Una organización que aplica un modelo continuo puede
seleccionar áreas de mejora de muchas categorías diferentes.
El CMM tiene cinco niveles o etapas que describen un patrón evolutivo de madurez del
proceso de software y sirven como guía para la mejora.
Cada nivel tiene un conjunto de Áreas de Proceso Clave (KPA) que una organización necesita
concentrarse para alcanzar la madurez a ese nivel. También hay prácticas clave
asociados con cada nivel que brindan apoyo para implementar mejoras en ese nivel. El CMM
también cuenta con un procedimiento de evaluación
que permite a una organización evaluar el estado actual de su software
proceso e identificar las fortalezas y debilidades del proceso.
Machine Translated by Google
Niveles
indicar Contiene
Pruebas
Metas de madurez
capacidad
Apoyado por
Subobjetivos de madurez
conseguido por
Actividades/tareas/responsabilidades
Implementación
y organizacional Puntos de vista críticos
adaptación
HIGO. 1.4
niveles de madurez.
capacidad para realizar actividades y tareas relacionadas con la mejora de la capacidad de prueba.
La visión del desarrollador/probador abarca las actividades y tareas técnicas que, cuando se
aplican, constituyen prácticas de prueba de calidad. La vista del usuario o del cliente se define
como una vista de cooperación o de apoyo. Los desarrolladores/evaluadores trabajan con grupos
de clientes/usuarios en actividades y tareas relacionadas con la calidad que conciernen a las
necesidades orientadas al usuario. La atención se centra en solicitar el apoyo, el consenso y la
participación del cliente/usuario en actividades como el análisis de requisitos, las pruebas de
usabilidad y la planificación de pruebas de aceptación.
Las metas de madurez en cada nivel del TMM se muestran en la Figura 1.5. Se describen
completamente en artículos publicados y también se enumeran a continuación junto con una breve
descripción de las características de una organización en cada nivel de TMM [2–6]. La descripción
presentará al lector el camino evolutivo prescrito en el TMM para la mejora del proceso de prueba.
En el nivel 1 de TMM, las pruebas son un proceso caótico; está mal definido y no se distingue de
la depuración. A menudo no existe un conjunto documentado de especificaciones para el
comportamiento del software. Las pruebas se desarrollan de manera ad hoc una vez que se
completa la codificación. Las pruebas y la depuración se intercalan para eliminar los errores del
software. El objetivo de las pruebas es mostrar que el software funciona (es mínimamente funcional)
[1,5]. Los productos de software a menudo se lanzan sin garantía de calidad. Faltan recursos,
herramientas y personal debidamente capacitado. Este tipo de organización estaría en el nivel 1
del CMM.
En el nivel 2 de TMM, la prueba se separa de la depuración y se define como una fase que sigue a
la codificación. Es una actividad planificada; sin embargo, la planificación de la prueba en el nivel 2
puede ocurrir después de la codificación por razones relacionadas con la inmadurez del proceso
de prueba. Por ejemplo, puede existir la percepción en el nivel 2 de que todas las pruebas se basan
en la ejecución y dependen del código; por lo tanto, debe planificarse solo cuando el código esté
completo.
El objetivo principal de las pruebas en este nivel de madurez es mostrar que el software
cumple con las especificaciones establecidas [2,5]. Técnicas básicas de prueba
Machine Translated by Google
Nivel 5: Optimización/Prevención de
Defectos y Control de Calidad
Nivel 3: Integración
Nivel 1: Inicial
HIGO. 1.5
programas hasta ahora para abordar este importante tema. Código postal, las pruebas basadas en la
En el nivel 3 de TMM, la prueba ya no es una fase que sigue a la codificación, sino que es
integrado en todo el ciclo de vida del software. Las organizaciones pueden aprovechar
las habilidades de planificación de pruebas que han adquirido en el nivel 2. A diferencia del nivel 2, la
continúa durante todo el ciclo de vida respaldado por una versión del modelo V
(ver Sección 8.7) [2]. Los objetivos de la prueba se establecen con respecto a la
requisitos basados en las necesidades del usuario/cliente, y se utilizan para el diseño de casos de prueba.
Hay una organización de pruebas, y las pruebas son reconocidas como profesionales.
Las pruebas se supervisan para garantizar que van de acuerdo con el plan y las acciones.
se puede tomar si se producen desviaciones. Las herramientas básicas respaldan las actividades de prueba clave,
y el proceso de prueba es visible en la organización. Aunque las organizaciones de este nivel comienzan
control, no existe un programa de revisión formal y las revisiones aún no se llevan a cabo.
aún no se han establecido para cuantificar un número significativo de atributos de procesos y productos.
software)
Las revisiones en todas las fases del proceso de desarrollo ahora se reconocen como
Se puede utilizar una extensión del modelo V, como se muestra en la Figura 1.6, para respaldar la
Los casos de prueba de todos los proyectos se recopilan y registran en una base de datos de casos de
se registran y se les asigna un nivel de gravedad. Algunas de las deficiencias que se presentan
Machine Translated by Google
Especificar/diseñar Código
Pruebas de sistema/aceptación
Especificar/diseñar Código
Pruebas de integración
unidad de ejecución
Código
pruebas
Especificar/diseñar Código
Pruebas unitarias
HIGO. 1.6
TÉRMINOS CLAVE
depuración
Proceso
Pruebas
Validación
Verificación
EJERCICIOS
1. ¿Cuáles son las diferencias entre prueba y depuración? ¿Qué tareas específicas
están involucradas en cada uno? ¿Qué grupos deberían tener la responsabilidad de
cada uno de estos procesos?
3. Utilizando la versión del modelo V que se muestra en la figura 1.6, describa las
actividades relacionadas con las pruebas que se deben realizar y por qué se deben
realizar durante las siguientes fases del proceso de desarrollo de software:
especificación de requisitos, diseño, codificación, instalación.
Machine Translated by Google
REFERENCIAS
[1] D. Gotterbarn, K. Miller, S. Rogerson, "Computer Society and [7] I. Burnstein, T. Suwanassart, CR Carlson, "Desarrollo de un
ACM Approv Software Engineering Code of Ethics", IEEE modelo de madurez de prueba: Parte II", Cross Talk: Journal of
Computer, vol. 32, núm. 10, octubre de 1999, págs. 84–88. Defense Software Engineering, vol. 9, núm. 9, septiembre de
1996, págs. 19–26.
[2] J. Velocidad. “¿Qué quiere decir con que no puedo llamarme [8] M. Paulk, C. Weber, B. Curtis, M. Chrissis, El modelo de
ingeniero de software?” IEEE Software, noviembre/ diciembre de madurez de la capacidad, Addison-Wesley, Reading MA, 1995.
1999, págs. 45–50.
[3] I. Burnstein, A. Homyen, T, Suwanassart, G. Saxena, R. [9] M. Paulk, M. Konrad, "Una descripción general del proyecto
Grom, "Un modelo de madurez de prueba para la evaluación y SPICE de ISO", American Programmer, vol. 7, núm. 2, febrero de
mejora del proceso de prueba de software" 1994, págs. 16–20.
Software Quality Professional, Sociedad Estadounidense para la
Calidad, vol. 1, núm. 4, septiembre de 1999, págs. 8–21. [10] L Osterweil, "Direcciones estratégicas en la calidad del
software", ACM Computing Surveys, vol. 28, núm. 4, 1996, págs.
[4] I. Burnstein, A. Homyen, T, Suwanassart, G. Saxena, R.
738–750.
Grom, "Uso del modelo de madurez de prueba para evaluar y
mejorar su proceso de prueba de software" [11] Glosario estándar IEEE de terminología de ingeniería de
proc. de la Semana Internacional de la Calidad Conf. (QW'99), software (Std610.12-1990). Copyright 1990 por IEEE. Reservados
San José, CA, mayo de 1999. todos los derechos.
[5] I. Burnstein, A. Homyen, R. Grom, CR Carlson, "Un modelo [12] D. Gelperin, B. Hetzel, “El crecimiento de las pruebas de
para evaluar la madurez del proceso de prueba" software”, CACM, vol. 31, núm. 6, 1988, págs. 687–
CrossTalk: Revista del Departamento de Ingeniería de Software 695.
de Defensa, vol. 11, núm. 11, noviembre de 1998, págs. 26–30.
[13] B. Beizer, Software Testing Techniques, segunda edición,
Van Nostrand Reinhold, Nueva York, 1990.
[6] I. Burnstein, T. Suwanassart, CR Carlson, "Desarrollo de un
modelo de madurez de prueba: Parte I", Cross Talk: Journal of [14] J. Durant, Informe de encuesta sobre prácticas de prueba de
Defense Software Engineering, vol. 9, núm. 8, agosto de 1996, software, Centro de investigación de prácticas de software, Informe
págs. 21–24. técnico, TR5-93, mayo de 1993.
Machine Translated by Google
2
PRUEBAS
FUNDAMENTOS
El estudio de las pruebas de software en este texto comienza con una descripción de los elementos de
vocabulario esenciales relacionados con las pruebas. El conocimiento de estos términos básicos es esencial
para garantizar que las discusiones sobre los conceptos de prueba que siguen se basen en un vocabulario
principios de prueba basados en la ejecución para ayudar a los especialistas en pruebas. Proporcionan una
base para desarrollar conocimientos sobre pruebas, adquirir habilidades de prueba y desarrollar un grupo
esencial de mejores prácticas. Esta introducción al campo de las pruebas de software concluye con una
descripción del rol del especialista en pruebas en una organización de desarrollo de software.
A continuación, se incluye un conjunto de definiciones básicas de los términos que se utilizarán en este texto.
errores
Averías (Defectos)
Se introduce una falla (defecto) en el software como resultado de un error. Se trata de una
Las fallas o defectos a veces se denominan "errores". El uso del último término
trivializa el impacto que tienen las fallas en la calidad del software. El uso del término
"defecto" también se asocia con artefactos de software, como requisitos y documentos
de diseño. Los defectos que ocurren en estos artefactos también son causados por
errores y generalmente se detectan en el proceso de revisión.
fallas
Se dice que el software que revela fácilmente sus fallas como fallas es más comprobable.
Desde el punto de vista de los probadores, este es un atributo de software deseable. Los
probadores deben trabajar con los diseñadores para asegurarse de que el software se
pueda probar. Hay otros significados asignados a los términos "comprobable" y
"comprobable" que se describirán más adelante en este capítulo.
Casos de prueba
El enfoque habitual para detectar defectos en una pieza de software es que el probador
seleccione un conjunto de datos de entrada y luego ejecute el software con los datos de
entrada bajo un conjunto particular de condiciones. Para decidir si
Machine Translated by Google
Un caso de prueba en un sentido práctico es un elemento relacionado con la prueba que contiene la
siguiente información:
1. Un conjunto de entradas de prueba. Estos son elementos de datos recibidos de una fuente externa por
el código bajo prueba. La fuente externa puede ser hardware, software o humano.
2. Condiciones de ejecución. Estas son condiciones requeridas para ejecutar la prueba, por ejemplo, un
3. Productos esperados. Estos son los resultados especificados que producirá el código.
bajo prueba.
Prueba
Una prueba es un grupo de casos de prueba relacionados, o un grupo de casos de prueba y procedimientos
de prueba relacionados (pasos necesarios para llevar a cabo una prueba, como se describe en el Capítulo 7).
Un oráculo de prueba es un documento o pieza de software que permite a los probadores determinar
Un programa, o un documento que produce o especifica el resultado esperado de una prueba, puede
Las suites suelen contener componentes con resultados correctos para versiones anteriores del
confiable en funcionamiento puede servir como su propio oráculo en una situación en la que se está
banco de pruebas
Esto incluye todo el entorno de prueba, por ejemplo, simuladores, emuladores, verificadores de
1. La calidad se relaciona con el grado en que un sistema, componente del sistema o proceso
2. La calidad se relaciona con el grado en que un sistema, componente del sistema o proceso
Para determinar si un sistema, componente del sistema o proceso es de alta calidad, utilizamos
Se han descrito muchos atributos de calidad diferentes para el software, por ejemplo, en
los estándares IEEE para la metodología de métricas de calidad del software y el trabajo
de Schulmeyer y Grady [6–8]. Algunos ejemplos de atributos de calidad con breves
explicaciones son los siguientes:
Integridad: se relaciona con la capacidad del sistema para soportar ataques tanto
intencionales como accidentales.
Otro atributo de calidad que debe mencionarse aquí es la capacidad de prueba. Este
atributo es más interesante para los desarrolladores/evaluadores que para los clientes.
Se puede expresar de las dos formas siguientes:
Machine Translated by Google
Los evaluadores deben trabajar con analistas, diseñadores y desarrolladores en todo el sistema
de vida del software para garantizar que se aborden los problemas de capacidad de prueba.
El grupo de aseguramiento de la calidad del software (SQA) en una organización tiene vínculos
con problemas de calidad. El grupo actúa como representante y defensor de los clientes. Su
responsabilidad es velar por los intereses de los clientes.
la capacitación y las habilidades necesarias para garantizar que se tomen todas las medidas
necesarias durante el proceso de desarrollo para que el software resultante cumpla con
los requisitos técnicos establecidos.
Trabajan con gerentes de proyecto y evaluadores para desarrollar políticas relacionadas con la
calidad y planes de garantía de calidad para cada proyecto. El grupo también participa en la
recopilación y el análisis de mediciones, el mantenimiento de registros y la elaboración de
informes. Los miembros del equipo de SQA participan en revisiones (consulte el Capítulo 10) y
auditorías (tipos especiales de revisiones que se enfocan en el cumplimiento de estándares,
pautas y procedimientos), registran y rastrean problemas y verifican que se hayan realizado las
correcciones. También desempeñan un papel en la gestión de la configuración del software
(consulte el Capítulo 10).
Reseñas
A diferencia de las técnicas de prueba dinámicas basadas en la ejecución que se pueden usar
para detectar defectos y evaluar la calidad del software, las revisiones son un tipo de técnica de
prueba estática que se puede usar para evaluar la calidad de un artefacto de software, como un
documento de requisitos, un plan de prueba , un documento de diseño, un componente de
código. Las revisiones también son una herramienta que se puede aplicar para revelar defectos
en este tipo de documentos. Sigue una definición.
Machine Translated by Google
Una revisión es una reunión de grupo cuyo propósito es evaluar un artefacto de software o un
Los principios juegan un papel importante en todas las disciplinas de la ingeniería y, por
lo general, se introducen como parte de la formación académica en cada rama de la
ingeniería. La figura 1.1 muestra el papel de los principios básicos en varias disciplinas
de ingeniería. Los principios de las pruebas son importantes para los ingenieros/
especialistas en pruebas porque proporcionan la base para desarrollar el conocimiento
de las pruebas y adquirir habilidades para las pruebas. También brindan orientación
para definir las actividades de prueba como se realizan en la práctica de un especialista en prueba
Un principio se puede definir como:
a las pruebas basadas en la ejecución. Los principios relacionados con las revisiones, la prueba
de corrección y la certificación como actividades de prueba no están cubiertos.
Los ingenieros de software han hecho grandes progresos en el desarrollo de métodos para
prevenir y eliminar defectos. Sin embargo, los defectos ocurren y tienen
un impacto negativo en la calidad del software. Los probadores necesitan detectar estos defectos.
antes de que el software esté operativo. Este principio apoya las pruebas
como una actividad basada en la ejecución para detectar defectos. También admite la separación
de la prueba de la depuración, ya que la intención de esta última es localizar
defectos y reparar el software. El término "componente de software" se utiliza
en este contexto para representar cualquier unidad de software que varíe en tamaño y complejidad
desde un procedimiento o método individual hasta un software completo
sistema. El término “defectos” tal como se utiliza en este principio y en los subsiguientes
representa cualquier desviación en el software que tenga un impacto negativo en
su funcionalidad, desempeño, confiabilidad, seguridad y/o cualquier otra de sus
atributos de calidad especificados.
Bertolino, en la Guía para el Cuerpo de Conocimientos de Ingeniería de Software, da una
visión de las pruebas como un "proceso dinámico que ejecuta un programa en entradas
valiosas" [10]. Esta vista, así como la definición de prueba
dados en el Capítulo 1, sugieren que además de detectar defectos, probar
es también un proceso utilizado para evaluar la calidad del software. El propósito de
El primero ha sido descrito en el párrafo anterior. en el caso de la
En segundo lugar, el probador ejecuta el software utilizando casos de prueba para evaluar
propiedades como la confiabilidad, la usabilidad, la mantenibilidad y el nivel de rendimiento. Los
resultados de las pruebas se utilizan para comparar las propiedades reales del software con las
especificadas en el documento de requisitos como objetivos de calidad.
Deben abordarse las desviaciones o la imposibilidad de alcanzar los objetivos de calidad.
Machine Translated by Google
El lector debe tener en cuenta que las pruebas pueden tener un alcance más
amplio, como se describe en los modelos de mejora del proceso de prueba, como el
TMM y otros modelos de calidad. Las revisiones y otras técnicas de análisis estático
se incluyen bajo el paraguas de las pruebas en los modelos. Estas técnicas, y cómo
se relacionan con la detección de defectos y la evaluación de la calidad, se
describirán en capítulos posteriores de este texto.
• Se puede sospechar una falla cuando en realidad no existe ninguna. En este caso, se le puede
otorgar a la prueba un estado de “reprobado”. Se puede gastar mucho tiempo y esfuerzo
tratando de encontrar el defecto que no existe. Un reexamen cuidadoso de los resultados de
la prueba finalmente podría indicar que no ha ocurrido ninguna falla.
• Es posible que se malinterprete el resultado de una prueba de calidad, lo que da como resultado
una repetición innecesaria del trabajo o la supervisión de un problema crítico.
A menudo es obvio para el probador novato que las entradas de prueba deben ser parte de un caso
de prueba. Sin embargo, el caso de prueba no tiene valor a menos que haya una declaración
explícita de los productos o resultados esperados, por ejemplo, se debe observar un valor de
variable específico o se debe encender un determinado botón del panel.
Los resultados esperados permiten al evaluador determinar (i) si se ha revelado un defecto y (ii) el
estado de aprobación/rechazo de la prueba. Es muy importante tener una declaración correcta de
la salida para que no se pierda tiempo innecesario debido a conceptos erróneos sobre el resultado
de una prueba. La especificación de las entradas y salidas de las pruebas debe ser parte de las
actividades de diseño de las pruebas.
En el caso de las pruebas para la evaluación de la calidad, es útil que los objetivos de calidad
se expresen en términos cuantitativos en el documento de requisitos, si es posible, para que los
evaluadores puedan comparar los atributos reales del software determinados por las pruebas con lo
que se especificó.
Un probador no debe asumir que el software bajo prueba siempre contará con entradas válidas. Las
entradas pueden ser incorrectas por varias razones.
Machine Translated by Google
Por ejemplo, los usuarios de software pueden tener malentendidos o carecer de información
sobre la naturaleza de las entradas. A menudo hacen tipografía
errores incluso cuando se dispone de información completa/correcta. Los dispositivos pueden
también proporcione entradas no válidas debido a condiciones erróneas y mal funcionamiento.
El uso de casos de prueba que se basan en entradas no válidas es muy útil para revelar
defectos, ya que pueden ejercitar el código de formas inesperadas y
identificar el comportamiento inesperado del software. Las entradas no válidas también ayudan a los desarrolladores
Lo que dice este principio es que cuanto mayor sea el número de defectos ya
detectado en un componente, es más probable que tenga defectos adicionales
cuando se somete a más pruebas. Por ejemplo, si hay dos componentes A y B, y los
probadores han encontrado 20 defectos en A y 3 defectos en B,
entonces la probabilidad de la existencia de defectos adicionales en A es mayor
que B. Esta observación empírica puede deberse a varias causas. Defectos
a menudo ocurren en grupos y, a menudo, en código que tiene un alto grado de complejidad
y está mal diseñado. En el caso de dichos componentes, los desarrolladores
y los evaluadores deben decidir si ignorar la versión actual del
componente y trabajar en un rediseño, o planear gastar pruebas adicionales
recursos en este componente para asegurar que cumpla con sus requisitos. Este problema
es especialmente importante para los componentes que implementan la misión o la seguridad
funciones críticas.
Principio 7. Las pruebas deben ser realizadas por un grupo que sea independiente
del grupo de desarrollo.
Machine Translated by Google
del software Los científicos esperan que los experimentos sean repetibles por otros,
¡y los probadores deben esperar lo mismo!
Los planes de prueba deben desarrollarse para cada nivel de prueba y los objetivos
para cada nivel debe describirse en el plan asociado. Los objetivos
debe expresarse de la forma más cuantitativa posible. Planes, con sus precisamente
objetivos especificados, son necesarios para garantizar que se asignan el tiempo y los recursos
adecuados para las tareas de prueba, y que las pruebas pueden ser monitoreadas
y gestionado.
Las actividades de planificación de pruebas deben llevarse a cabo en todo el software.
ciclo de vida (Principio 10). La planificación de la prueba debe coordinarse con el proyecto.
planificación. El director de pruebas y el director de proyecto deben trabajar juntos para
coordinar actividades. Los probadores no pueden planear probar un componente en un determinado
fecha a menos que los desarrolladores lo tengan disponible en esa fecha. Los riesgos de prueba deben
ser evaluado. Por ejemplo, ¿qué tan probables son los retrasos en la entrega de componentes
de software? ¿Qué componentes probablemente sean complejos y difíciles de probar? ¿Los
evaluadores necesitan capacitación adicional con las nuevas herramientas? un plan de prueba
La plantilla debe estar disponible para el administrador de pruebas para guiar el desarrollo de
el plan de acuerdo con las políticas y normas de la organización. prueba cuidadosa
la planificación evita el desperdicio de pruebas "desechables" y los ciclos improductivos y no
planificados de "prueba-parche-nueva prueba" que a menudo conducen a software de mala
calidad y la incapacidad de entregar software a tiempo y dentro del presupuesto.
también puede llevarse a cabo en las primeras etapas del ciclo de vida mediante el uso de
prototipos. Estas actividades pueden continuar hasta que el software se entregue a los
• Un probador necesita tener una buena comprensión del dominio del problema del software
que está probando. La familiaridad con un dominio puede provenir de experiencias
educativas, de capacitación y relacionadas con el trabajo.
• Un probador necesita crear y documentar casos de prueba. Para diseñar los casos de
prueba, el evaluador debe seleccionar entradas a menudo de un dominio muy amplio.
Los seleccionados deben tener la mayor probabilidad de revelar un defecto (Principio
2). Familiarizarse con el dominio es esencial.
Además de cooperar con los desarrolladores de código, los evaluadores también deben
trabajar junto con los ingenieros de requisitos para garantizar que los requisitos
son comprobables, y para planificar el sistema y la prueba de aceptación (los clientes también son
involucrados en este último). Los evaluadores también deben trabajar con los diseñadores para planificar
para integración y prueba unitaria. Además, los gerentes de prueba deberán cooperar con los
gerentes de proyecto para desarrollar planes de prueba razonables,
y con la alta dirección para proporcionar información para el desarrollo y
mantenimiento de los estándares, políticas y objetivos de pruebas de la organización. Finalmente,
los evaluadores también deben cooperar con el personal de control de calidad del software.
y miembros del grupo de procesos de ingeniería de software. En vista de estos requisitos para
múltiples relaciones de trabajo, las habilidades de comunicación y trabajo en equipo son
necesarias para una carrera exitosa como probador.
Si es empleado de una organización evaluada en los niveles de TMM
1 o 2, es posible que no haya una función de prueba de software independiente
en su organización. Los probadores en este caso pueden ser parte del desarrollo.
grupo, pero con asignación especial a las pruebas, o pueden ser parte del
grupo de aseguramiento de la calidad del software. De hecho, incluso en los niveles 3 y superiores de
TÉRMINOS CLAVE
Culpa Prueba
Revisar
EJERCICIOS
2. Con respecto al Principio 3, ''los resultados de las pruebas deben inspeccionarse meticulosamente'',
¿por qué cree que esto es importante para el probador? Hable sobre cualquier experiencia que haya
tenido en la que la inspección deficiente de los resultados de las pruebas haya provocado retrasos en sus prueb
esfuerzos
Considere el tamaño de la organización, los recursos, la cultura y los tipos de sistemas de software
4. Dados los muchos desafíos que enfrenta un probador, ¿qué tipo de habilidades cree que se deben
requerir de una persona contratada como especialista en pruebas? (Puede comparar la lista de
5. ¿Por qué, de acuerdo con el Principio 5, es importante desarrollar casos de prueba para
[1] Colección de estándares IEEE para ingeniería de software, edición [7] Estándar IEEE para métricas de calidad de software
de 1994, copyright 1994 de IEEE, todos los derechos Metodología (IEEE Std 1061-1992), copyright 1993,
reservado. por IEEE, todos los derechos reservados.
[2] Glosario estándar de ingeniería de software IEEE [8] G. Schulmeyer, “Métricas de aseguramiento de la calidad del
Terminología (Std 610.12-1990), copyright 1990 por software”, en Handbook of Software Quality Assurance, G.
IEEE, todos los derechos reservados. Schulmeyer y J. McManus, eds., Van Nostrand
Reinhold, Nueva York, págs. 318–342.
[3] J. Voas, "Un modelo dinámico de fallas para el análisis de
[9] G. Myers, El arte de las pruebas de software, John Wiley,
propagación e infección en programas de computadora"
Nueva York, 1979.
Doctor. Tesis, College of William and Mary en Virginia,
mayo de 1990. [10] A. Bertolino, “Software testing”, en Guía para la
Cuerpo de conocimientos de ingeniería de software, versión de prueba,
[4] B. Beizer, Software Testing Techniques, segunda edición, Van
A. Abran, J. Moore, P. Bourque, R. Dupuis, eds.
Nostrand Reinhold, Nueva York, 1990.
IEEE Computer Society Press, Los Alamitos, CA, 2001.
[5] W. Howden, "Un estudio de los métodos de análisis dinámico", en [11] G. Daich, G. Price, B. Ragland, M. Dawood, Informe de tecnologías
Técnicas de validación y pruebas de software, de prueba de software, agosto de 1994, Centro de soporte de
segunda edición, E. Miller y W. Howden, eds., IEEE tecnología de software (STSC) Hill Air
Computer Society Press, Los Alamitos, CA, 1981. Force Base, UT, agosto de 1994.
[6] R. Grady, Métricas prácticas de software para proyectos [12] J. Whittaker, “¿Qué son las pruebas de software? y por qué
Gestión y Mejora de Procesos, Prentice Hall, ¿Es tan difícil? Software IEEE, enero/ febrero. 2000,
Acantilados de Englewood, Nueva Jersey, 1992. págs. 70–79.
Machine Translated by Google
3
DEFECTOS, HIPÓTESIS,
Y PRUEBAS
El término defecto y su relación con los términos error y falla en el contexto del
dominio de desarrollo de software se discutió en el Capítulo 2. Los defectos tienen
efectos perjudiciales en los usuarios de software, y los ingenieros de software
trabajan muy duro para producir software de alta calidad con un bajo número de
defectos. Pero incluso en las mejores circunstancias de desarrollo, se cometen
errores, lo que da como resultado que se inyecten defectos en el software durante
las fases del ciclo de vida del software. Los defectos que se muestran en la Figura
3.1 provienen de las siguientes fuentes [1,2]:
Fuentes de defectos
Falta de educación
Mala comunicación
Vigilancia
Transcripción
proceso inmaduro Impacto en los artefactos de software
errores
Averías (defectos)
fallas
HIGO. 3.1
Una de las formas en que hacemos esto es diseñando casos de prueba que tienen una alta probabilidad
de revelar defectos. ¿Cómo desarrollamos estos casos de prueba? Un enfoque es pensar en las
pruebas de software como una actividad experimental. Los resultados del experimento de prueba se
un probador desarrolla hipótesis sobre posibles defectos (ver Principios 2 y 9). Luego se diseñan casos
de prueba basados en las hipótesis. Se ejecutan las pruebas y se analizan los resultados para probar o
Myers tiene un enfoque similar para las pruebas. Él describe la prueba exitosa como aquella que
revela la presencia de un defecto (hipótesis) [3]. Compara el papel de un probador con el de un médico
que está en el proceso de construir un diagnóstico para un paciente enfermo. El médico desarrolla
síntomas de los pacientes. Se realizan pruebas para realizar el diagnóstico correcto. Una prueba exitosa
revelará el problema y el médico puede comenzar el tratamiento. Completando la analogía del médico y
el paciente enfermo, uno podría ver el software defectuoso como el paciente enfermo. Los probadores
como médicos necesitan tener conocimiento sobre posibles defectos (enfermedades) para poder
recuperación de datos de defectos de todos los proyectos en una ubicación de acceso central.
se registran todos los defectos de los proyectos de cada clase, junto con su frecuencia de
encontrados durante las revisiones y las pruebas basadas en la ejecución deben catalogarse. Se
por ejemplo, causas raíz del defecto (el análisis causal del defecto es parte de las actividades/
Los miembros del personal pueden usar estos datos para la planificación de pruebas, el diseño de pruebas y
diagnóstico de fallas/defectos. Los datos también se pueden utilizar para la prevención de defectos y
esfuerzos de mejora del proceso en niveles más altos de madurez del proceso de prueba.
Para las organizaciones que están iniciando el desarrollo de un repositorio de defectos, hay
clases de defectos, que son útiles para catalogar este tipo de información.
Por ejemplo, Beizer tiene una extensa discusión sobre los tipos de defectos que él
llama una taxonomía de errores [6]. Describe muchos tipos de defectos, por ejemplo,
La clasificación estándar de IEEE para anomalías de software tiene una colección de clases de
anomalías de todas las fases del ciclo de vida [7]. Grady describe
un esquema de clasificación de defectos utilizado en Hewlett-Packard [8]. Kaner et. Alabama.
también contiene una lista extensa de lo que los autores llaman un “bosquejo
de errores comunes de software” [9]. Las categorías de defectos que se describen a continuación
Los defectos se pueden clasificar de muchas maneras. Es importante para una organización
los evaluadores y el personal de SQA deben tratar de ser lo más consistentes posible
al registrar datos de defectos. Los tipos de defectos y la frecuencia de ocurrencia
deben usarse para guiar la planificación y el diseño de las pruebas. Se deben
seleccionar estrategias de prueba basadas en la ejecución que tengan la mayor
posibilidad de detectar tipos particulares de defectos. Es importante que las pruebas
para el software nuevo y modificado se diseñen para detectar los defectos que ocurren
con mayor frecuencia. El lector debe tener en cuenta que las pruebas basadas en la
ejecución detectarán una gran cantidad de los defectos que se describirán; sin
embargo, las revisiones de software, como se describe en el Capítulo 10, también son
una excelente herramienta de prueba para la detección de muchos de los tipos de
defectos que se analizarán en las siguientes secciones.
Los defectos, tal como se describen en este texto, se asignan a cuatro
clases principales que reflejan su punto de origen en el ciclo de vida del
software: la fase de desarrollo en la que se inyectaron. Estas clases son:
requisitos/especificaciones, diseño, código y defectos de prueba, como se
resume en la Figura 3.2. Cabe señalar que estas clases de defectos y subclases asocia
centrarse en los defectos que son el principal foco de atención de los probadores basados
en la ejecución. La lista no incluye otros tipos de defectos que se encuentran mejor en las
revisiones de software, por ejemplo, los defectos relacionados con la conformidad con
estilos y estándares. Las listas de verificación de revisión del Capítulo 10 se centran en
muchos de estos tipos de defectos.
El comienzo del ciclo de vida del software es fundamental para garantizar una alta
calidad en el software que se está desarrollando. Los defectos inyectados en fases
tempranas pueden persistir y ser muy difíciles de eliminar en fases posteriores. Dado
que muchos documentos de requisitos se escriben utilizando una representación de
lenguaje natural, muy a menudo se presentan requisitos ambiguos, contradictorios,
poco claros, redundantes e imprecisos. Las especificaciones en muchas
organizaciones también se desarrollan utilizando representaciones en lenguaje
natural, y éstas también están sujetas a los mismos tipos de problemas que se mencionaron ant
Sin embargo, en los últimos años, muchas organizaciones han introducido el uso
de lenguajes de especificación formal que, cuando se acompañan de herramientas,
ayudan a evitar descripciones incorrectas del comportamiento del sistema. Algunos
requisitos específicos/defectos de especificación son:
Machine Translated by Google
Descripcion funcional
Rasgo
Interacción de características
Descripción de la interfaz
Informes/análisis de defectos
Clases de defectos de diseño
algorítmica y de procesamiento
Control, lógica y secuencia.
Datos Repositorio de defectos
Descripción de la interfaz del módulo
Descripción de la interfaz externa Clases de defectos
Gravedad
Ocurrencias
algorítmica y de procesamiento
Control, lógica y secuencia.
Flujo de datos tipográficos
Informes/análisis de defectos
Datos
Interfaz del módulo
Documentación de código
Hardware externo, software
Arnés de prueba
Diseño de prueba
Procedimiento de prueba
HIGO. 3.2
2. Defectos de características
Las características se refieren a los aspectos funcionales del software que se corresponden
con los requisitos funcionales descritos por los usuarios y clientes. Las características
también se asignan a los requisitos de calidad, como el rendimiento y la confiabilidad. Los
defectos de funciones se deben a descripciones de funciones faltantes, incorrectas,
incompletas o superfluas.
Los defectos de diseño ocurren cuando los componentes del sistema, las interacciones
entre los componentes del sistema, las interacciones entre los componentes y el software externo
Machine Translated by Google
3. Defectos de datos
Estos están asociados con el diseño incorrecto de las estructuras de datos. Por ejemplo,
es posible que a un registro le falte un campo, que se asigne un tipo incorrecto a una
variable o a un campo en un registro, que una matriz no tenga asignado el número
adecuado de elementos o que el espacio de almacenamiento se asigne incorrectamente. Suave-
Machine Translated by Google
Las revisiones de software y el uso de un diccionario de datos funcionan bien para revelar este
tipo de defectos.
Estos son defectos derivados de, por ejemplo, el uso de tipos de parámetros incorrectos
y/o consistentes, un número incorrecto de parámetros o un orden incorrecto de los
parámetros.
Los defectos en esta categoría incluyen elementos de diseño incorrectos, faltantes y/o
poco claros. Por ejemplo, es posible que el diseño no describa correctamente la
funcionalidad correcta de un módulo. Estos defectos se detectan mejor durante una
revisión del diseño.
3. Defectos Tipográficos
4. Defectos de inicialización
Hay ciertas secuencias operativas razonables a través de las cuales deben fluir los
datos. Por ejemplo, una variable debe inicializarse antes de que se use en un cálculo
o una condición. No debe inicializarse dos veces antes
hay un uso intermedio. No se debe descartar una variable antes de usarla. Las
ocurrencias de estos usos sospechosos de variables en el código pueden, o no,
causar un comportamiento anómalo. Por lo tanto, en el sentido más estricto de la
definición del término “defecto”, no pueden considerarse como verdaderas instancias
de defectos. Sin embargo, su presencia indica que se ha producido un error y que
existe un problema que debe solucionarse.
6. Defectos de datos
Como en el caso de los elementos de diseño del módulo, los defectos de interfaz en el código
puede deberse al uso de tipos de parámetros incorrectos o incoherentes, un número incorrecto
de parámetros o un orden incorrecto de los parámetros. En
Además de los defectos debidos a un diseño incorrecto y una implementación incorrecta.
de diseño, los programadores pueden implementar una secuencia incorrecta de llamadas o
llamadas a módulos inexistentes.
Estos defectos surgen de problemas relacionados con llamadas al sistema, enlaces a bases
de datos, secuencias de entrada/salida, uso de memoria, uso de recursos, interrupciones
y manejo de excepciones, intercambios de datos con hardware, protocolos, formatos, interfaces
con archivos de compilación y secuencias de tiempo (condiciones de carrera
puede resultar).
Los defectos no se limitan al código y sus artefactos relacionados. Los planes de prueba, los casos de
prueba, los arneses de prueba y los procedimientos de prueba también pueden contener defectos. Los
Los siguientes ejemplos ilustran algunas instancias de las clases de defectos que se
analizaron en las secciones anteriores. Se muestran una especificación simple, una
descripción detallada del diseño y el código resultante, y se describen los defectos de
cada uno. Tenga en cuenta que estos defectos podrían inyectarse a través de uno o más
Machine Translated by Google
de las cinco fuentes de defectos discutidas al comienzo de este capítulo. También tenga
en cuenta que puede haber más de una categoría que se ajuste a un defecto determinado.
La figura 3.3 muestra un ejemplo de especificación informal para un programa
simple que calcula el valor monetario total de un conjunto de monedas. El programa
podría ser un componente de un sistema de caja registradora interactiva para
apoyar a los empleados de tiendas minoristas. Este sencillo ejemplo muestra
defectos de requisitos/especificaciones, defectos de descripción funcional y
defectos de descripción de interfaz.
Los defectos de descripción funcional surgen porque la descripción funcional
es ambigua e incompleta. No establece que la entrada, número_de_monedas, y la
salida, número_de_dólares y número_de_centavos, deban tener valores de cero o
mayores. number_of_coins no puede ser negativo, y los valores en dólares y
centavos no pueden ser negativos en el dominio del mundo real. Como
consecuencia de estas ambigüedades y especificaciones incompletas, se puede
omitir una rutina de verificación del diseño, lo que permite que el programa final
acepte valores negativos para el número_de_monedas de entrada para cada una
de las denominaciones y, en consecuencia, puede calcular un valor no válido para
los resultados.
Un conjunto más formal de condiciones previas y posteriores sería útil aquí y
abordaría algunos de los problemas con la especificación. Estos también son útiles
para diseñar pruebas de caja negra.
Una condición previa es una condición que debe cumplirse para que un componente de
En este caso, una condición previa útil sería una que establezca, por ejemplo:
numero_de_monedas 0
Una condición posterior es una condición que debe cumplirse cuando un componente de
numero_de_dolares, numero_de_centavos 0.
HIGO. 3.3
Programa calcular_valores_de_monedas
número_de_monedas es un número entero
valor_total_de_monedas es un número
entero número_de_dólares es un número
entero número_de_centavos es un número
entero valores_de_monedas es una matriz de seis números enteros que
representan el valor de cada moneda en centavos inicializados a:
1,5,10,25,25,100 comenzar
número_de_monedas * valor_moneda[contador_bucle]
incremento contador_bucle
end
number_dollars = total_coin_value/100 number_of_cents
= total_coin_value - 100 * number_of_dollars output (number_of_dollars, number_of_cents)
end
HIGO. 3.4
con defectos.
Defectos de datos. Este defecto se relaciona con un valor incorrecto para uno de los
Los defectos de diseño de control y lógica se abordan mejor mediante la caja blanca:
pruebas basadas (pruebas de condición/rama, pruebas de bucle). Estos otros diseños
los defectos necesitarán una combinación de técnicas de prueba de caja blanca y negra
para detección
La figura 3.5 muestra el código para el problema de la moneda en un lenguaje de
programación "tipo C". Sin revisiones efectivas, los defectos de especificación y diseño podrían
propagarse al código. Aquí tienen defectos adicionales
introducido en la fase de codificación.
/**************************************************** ***************/
HIGO. 3.5
ficación y diseño. Falta información vital para cualquier persona que necesite reparar,
mantener o reutilizar este código.
usuarios; como probadores, debemos hacer uso de todas nuestras herramientas de prueba
estáticas y dinámicas, como se describe en los capítulos siguientes, para garantizar que
dicho software de baja calidad no se entregue a nuestro grupo de usuarios/clientes.
Debemos trabajar con analistas, diseñadores y desarrolladores de código para garantizar
que los problemas de calidad se aborden en las primeras etapas del ciclo de vida del
software. También debemos catalogar los defectos y tratar de eliminarlos mejorando la
educación, la capacitación, la comunicación y el proceso.
El enfoque de este capítulo es mostrar con ejemplos algunos de los tipos de defectos más
comunes que ocurren durante el desarrollo de software. Si usted es miembro de una
organización de pruebas, es importante ilustrar a la gerencia ya sus colegas los beneficios
de desarrollar un depósito de defectos para almacenar información sobre defectos. Como
ingenieros de software y especialistas en pruebas, debemos seguir los ejemplos de
ingenieros de otras disciplinas que se han dado cuenta de la utilidad de los datos de
defectos. Un requisito para el desarrollo del repositorio debe ser parte de las declaraciones
de políticas de prueba y/o depuración.
Comienza con el desarrollo de un esquema de clasificación de defectos y luego inicia la
recopilación de datos de defectos de los proyectos organizacionales. Será necesario
diseñar formularios y plantillas para recopilar los datos. Algunos ejemplos son los informes
de incidentes de prueba, como se describe en el Capítulo 7, y los informes de reparación
de defectos, como se describe en el Capítulo 4. Deberá ser consciente de registrar cada
defecto después de la prueba, y también de registrar la frecuencia de aparición de cada
uno de los tipos de defectos. El monitoreo de defectos debe continuar para cada proyecto
en curso. La distribución de defectos cambiará a medida que realice cambios en sus
procesos. Los datos de defectos son útiles para la planificación de pruebas, un objetivo de
madurez de nivel 2 de TMM. Le ayuda a seleccionar técnicas de prueba aplicables, diseñar
(y reutilizar) los casos de prueba que necesita y asignar la cantidad de recursos que deberá
dedicar a detectar y eliminar estos defectos. Esto, a su vez, le permitirá estimar los
cronogramas y costos de las pruebas.
Los datos de defectos también pueden admitir actividades de depuración. De hecho, como
muestra la Figura 3.6, un repositorio de defectos puede ayudar a respaldar el logro y la
implementación continua de varios objetivos de madurez de TMM, incluido el control continuo.
Machine Translated by Google
Repositorio de defectos
Planificación de
pruebas y desarrollo
de casos de prueba.
Prevención de defectos
HIGO. 3.6
TÉRMINOS CLAVE
Modelo de falla
Rasgo
Condición previa
poscondición
EJERCICIOS
1. ¿Cuáles son los orígenes típicos de los defectos? Según sus propias experiencias personales,
¿cuáles son las principales fuentes de defectos en los artefactos de software que ha desarrollado?
Machine Translated by Google
5. Suponga que estaba revisando un documento de requisitos y notó que una característica
se describió de manera incompleta. ¿Cómo clasificaría este defecto? ¿Cómo se aseguraría
de que se corrigió?
REFERENCIAS
[1] J. Gale, J. Tirso, C. Burchfiled, "Implementación del [6] B. Beizer, Software Testing Techniques, segunda edición,
proceso de prevención de defectos en la organización de Van Nostrand Reinhold, Nueva York, 1990.
programación interactiva MVS", IBM Systems Journal, vol.
[7] Clasificación estándar de IEEE para anomalías de
29, N° 1, 1990.
software (IEEE Std. 1044-1993), copyright 1994 de IEEE,
[2] W. Humphrey, Una disciplina para la ingeniería de todos los derechos reservados.
software, Addison-Wesley, Reading, MA, 1995.
[8] R. Grady, Métricas prácticas de software para la gestión
[3] G. Myers, El arte de las pruebas de software, John Wiley, de proyectos y la mejora de procesos, Prentice Hall,
Nueva York, 1979. Englewoood Cliffs, NJ, 1992.
[4] M. Abramovici, M. Brever, A. Friedman, Digital System [9] C. Kaner, J. Falk, H. Nguyen, Testing Computer Software,
Testing and Testable Design, Computer Science Press, Nueva segunda edición, Van Nostrand Reinhold, Nueva York, 1993.
York, 1990.
4
ESTRATEGIAS Y
MÉTODOS DE PRUEBA
DISEÑO DE CASO I
Como lector de este texto, tiene el objetivo de aprender más sobre las pruebas y
cómo convertirse en un buen probador. Es posible que sea un estudiante de una
universidad que haya completado algunos cursos de ingeniería de software. Al
completar su educación, le gustaría ingresar a la profesión de especialista en
pruebas. O puede ser empleado de una organización que tiene como objetivo
empresarial la mejora del proceso de prueba. Por otro lado, puede ser un consultor
que quiera aprender más sobre las pruebas para asesorar a sus clientes. Puede ser
que juegues varios de estos roles. Es posible que se pregunte: ¿Por dónde empiezo
a aprender más sobre las pruebas? ¿Qué áreas de prueba son importantes?
¿Qué temas deben abordarse primero? El Modelo de Prueba de Madurez
proporciona algunas respuestas a estas preguntas. Puede servir como una
herramienta de aprendizaje, o marco, para aprender acerca de las pruebas. El
soporte para este uso del TMM se encuentra en su estructura. Introduce los
aspectos tanto técnicos como administrativos de las pruebas de una manera que
permite una evolución natural del proceso de pruebas, tanto a nivel personal como organizacio
Machine Translated by Google
Prueba del modelo de madurez. TMM nivel 2 tiene tres objetivos de madurez, dos de
pruebas. Tenga en cuenta que este objetivo se introduce en un nivel bajo del TMM,
Se pueden construir fortalezas de prueba. Para satisfacer esta prueba de meta de madurez
Los capítulos 4 y 5 le presentan aspectos técnicos fundamentales relacionados con las pruebas.
conceptos relacionados con las pruebas basadas en la ejecución. Los ejercicios al final de
el capítulo le ayudará a prepararse para su aplicación a problemas del mundo real. Se discuten
práctico. La aplicación consistente de estas estrategias, métodos y técnicas por parte de los probadores
calidad.
Los componentes de software tienen defectos, sin importar qué tan bien se implementen nuestras
todos los defectos durante el desarrollo. Por lo tanto, el software debe ser probado antes
que (i) revelan defectos, y (ii) pueden usarse para evaluar el rendimiento, la usabilidad y la confiabilidad
del software. Para lograr estos objetivos, los evaluadores deben seleccionar
Los evaluadores a menudo están sujetos a enormes presiones por parte de la gerencia y el marketing
son poco realistas. El probador inteligente debe planificar las pruebas, seleccionar los casos de prueba,
Un probador inteligente que quiere maximizar el uso del tiempo y los recursos sabe
que necesita desarrollar lo que llamaremos casos de prueba efectivos para pruebas
basadas en la ejecución. Por un caso de prueba efectivo nos referimos a uno que
tiene una buena posibilidad de revelar un defecto (ver el Principio 2 en el Capítulo 2).
La capacidad de desarrollar casos de prueba efectivos es importante para una
organización que evoluciona hacia un proceso de prueba de mayor calidad. Tiene
muchas consecuencias positivas. Por ejemplo, si los casos de prueba son efectivos, hay (i) una
Machine Translated by Google
HIGO. 4.1
4.3 Uso del enfoque de caja negra para el diseño de casos de prueba
• ¿Son los tres valores adecuados para mostrar que el módulo cumple con sus especificaciones?
¿Cuándo se ejecutan las pruebas? Si se requieren valores adicionales o menores
utilizado para hacer el uso más eficaz de los recursos?
Machine Translated by Google
• ¿Se deben usar valores fuera del dominio válido como entradas de prueba?
Por ejemplo, ¿deberían los datos de prueba incluir valores de punto flotante,
valores negativos o valores enteros superiores a 100?
Los enfoques más estructurados para el diseño de pruebas de caja negra abordan estos problemas.
El uso de entradas de prueba aleatorias puede ahorrar parte del tiempo y el
esfuerzo que requieren los métodos de selección de entradas de prueba más
cuidadosos. Sin embargo, el lector debe tener en cuenta que, según muchos expertos
en pruebas, la selección aleatoria de entradas de prueba tiene muy pocas posibilidades
de producir un conjunto efectivo de datos de prueba [1]. Ha habido mucha discusión
en el mundo de las pruebas sobre si tal declaración es precisa. La eficacia relativa del
enfoque aleatorio frente a un enfoque más estructurado para generar entradas de
prueba ha sido objeto de muchos trabajos de investigación. Los lectores deben
consultar las referencias [2–4] para algunas de estas discusiones. El resto de este
capítulo y el siguiente ilustrarán enfoques más estructurados para el diseño de casos
de prueba y la selección de entradas. Como nota final, existen herramientas que
generan datos de prueba aleatorios para las pruebas de estrés. Este tipo de prueba
puede ser muy útil especialmente a nivel de sistema. Por lo general, el probador
especifica un rango para el generador de valores aleatorios, o las entradas de prueba
se generan de acuerdo con una distribución estadística asociada con un patrón de uso.
Si un probador está viendo el software bajo prueba como una caja negra con entradas
y salidas bien definidas, un buen enfoque para seleccionar las entradas de prueba es
usar un método llamado partición de clase de equivalencia. El particionamiento de
clases de equivalencia da como resultado un particionamiento del dominio de entrada
del software bajo prueba. La técnica también se puede usar para particionar el dominio
de salida, pero este no es un uso común. El número finito de particiones o clases de
equivalencia que resultan permiten al probador seleccionar un miembro dado de una
clase de equivalencia como representante de esa clase. Se supone que todos los
miembros de una clase de equivalencia son procesados de manera equivalente por
el software de destino.
Machine Translated by Google
es equivalente a un valor de prueba de cualquier otro miembro de esa clase. Por lo tanto, si un caso
de prueba en una clase de equivalencia particular revela un defecto, se espera que todos los demás
casos de prueba basados en esa clase revelen el mismo defecto. También podemos decir que si un
caso de prueba en una clase de equivalencia dada no detectó un tipo particular de defecto, entonces
ningún otro caso de prueba basado en esa clase detectaría el defecto (a menos que un subconjunto
de la clase de equivalencia caiga en otra clase de equivalencia, ya que las clases pueden
superponerse en algunos casos). En Beizer [5] se da una discusión más formal de la partición de
clases de equivalencia.
Con base en esta discusión de partición de clase de equivalencia, podemos decir que la
partición del dominio de entrada para el software bajo prueba usando esta técnica tiene las siguientes
ventajas:
3. Permite que un probador cubra un dominio más grande de entradas/salidas con un subconjunto
La mayor parte de la partición de clases de equivalencia tiene lugar para el dominio de entrada.
Un enfoque es usar un conjunto de lo que Glen Myers llama condiciones de entrada "interesantes" [1].
software que se va a probar. El probador usa las condiciones para dividir el dominio de entrada en
clases de equivalencia y luego desarrolla un conjunto de casos de prueba para cubrir (incluir) todas
las clases. Dado que solo se necesita la información en una especificación de entrada/salida, el
probador puede comenzar a desarrollar pruebas de caja negra para el software al principio del ciclo
de vida del software en paralelo con las actividades de análisis (consulte el Principio 11, Capítulo 2).
El probador y el analista interactúan durante la fase de análisis para desarrollar (i) un conjunto de
estos, el evaluador desarrolla (i) un plan de prueba de alto nivel y (ii) un conjunto preliminar de casos
de prueba de caja negra para el sistema. Tanto el plan como los casos de prueba experimentan un
mayor desarrollo en las fases posteriores del ciclo de vida. El modelo V, como se describe en el
Myers sugiere las siguientes condiciones como pautas para seleccionar clases de
equivalencia de entrada [1]. Tenga en cuenta que una condición generalmente se asocia
con una variable particular. Tratamos cada condición por separado. Los casos de prueba,
cuando se desarrollan, pueden cubrir múltiples condiciones y múltiples variables.
Lista de condiciones
1. "Si una condición de entrada para el software que se está probando se especifica
como un rango de valores, seleccione una clase de equivalencia válida que cubra
el rango permitido y dos clases de equivalencia no válidas, una fuera de cada
extremo del rango". Por ejemplo, suponga que la especificación de un módulo dice
que una entrada, la longitud de un widget en milímetros, se encuentra en el
rango de 1 a 499; luego seleccione una clase de equivalencia válida que incluya
todos los valores del 1 al 499. Seleccione una segunda clase de equivalencia que
contenga todos los valores
Machine Translated by Google
menos de 1, y una tercera clase de equivalencia que consiste en todos los valores
mayores de 499.
2. ''Si una condición de entrada para el software bajo prueba se especifica como un
número de valores, entonces seleccione una clase de equivalencia válida que incluya
el número permitido de valores y dos clases de equivalencia no válida que estén
fuera de cada extremo del número permitido .''
3. “Si una condición de entrada para el software bajo prueba se especifica como un
conjunto de valores de entrada válidos, seleccione una clase de equivalencia válida
que contenga todos los miembros del conjunto y una clase de equivalencia no válida
para cualquier valor fuera del conjunto. conjunto.'' Por ejemplo, si la especificación
para un módulo de pintura establece que los colores ROJO, AZUL, VERDE y
AMARILLO están permitidos como entradas, entonces seleccione una clase de
equivalencia válida que incluya el conjunto ROJO, AZUL, VERDE y AMARILLO, y
una Clase de equivalencia no válida para todas las demás entradas.
4. ''Si una condición de entrada para el software bajo prueba se especifica como una
condición "debe ser" , seleccione una clase de equivalencia válida para representar
la condición "debe ser" y una clase no válida que no incluya la condición "debe ser".
"condición". Por ejemplo, si la especificación de un módulo establece que el primer
carácter de un identificador de pieza debe ser una letra, seleccione una clase
de equivalencia válida donde el primer carácter sea una letra y una clase no válida
donde el primer carácter sea una letra. no es una carta.
Para mostrar cómo las clases de equivalencia pueden derivarse de una especificación,
considere un ejemplo en la figura 4.2. Esta es una especificación para un módulo que
calcula una raíz cuadrada.
La especificación describe para el probador las condiciones relevantes para el
Machine Translated by Google
0.0 respuesta
(y:real) donde y > 0.0 y aproximadamente
(y*y,x) de lo contrario respuesta excepción función
final raíz_cuadrada_imaginaria
HIGO. 4.2
raíz cuadrada.
variables de entrada/salida x e y. Las condiciones de entrada son que la variable x debe ser un
número real y ser igual o mayor que 0.0. Las condiciones para la variable de salida y son que
debe ser un número real igual o mayor que 0.0, cuyo cuadrado sea aproximadamente igual a x.
Si x no es igual o mayor que 0,0, se genera una excepción. A partir de esta información, el
probador puede generar fácilmente clases de equivalencia y límites válidos y no válidos. Por
ejemplo, las clases de equivalencia de entrada para este módulo son las siguientes:
Debido a que muchas organizaciones ahora usan algún tipo de especificaciones formales o
semiformales, los probadores tienen una fuente confiable para aplicar las condiciones de entrada/
salida descritas por Myers.
Después de identificar las clases de equivalencia de esta manera, el siguiente paso en el
diseño de casos de prueba es el desarrollo de los casos de prueba reales. Un buen enfoque
incluye los siguientes pasos.
3. Desarrollar casos de prueba para todas las clases de equivalencia inválidas hasta que
todas hayan sido cubiertas individualmente. Esto es para asegurar que un caso no válido
no enmascare el efecto de otro ni impida la ejecución de otro.
1. Si una condición de entrada para el software bajo prueba se especifica como un rango de
valores, desarrolle casos de prueba válidos para los extremos del rango, y en casos de
prueba válidos para posibilidades justo por encima y por debajo de los extremos del rango.
distancia.
Partición de equivalencia
Perímetro Perímetro
HIGO. 4.3
Supongamos que estamos probando un módulo que permite a un usuario ingresar nuevos
identificadores de widgets en una base de datos de widgets. Nos centraremos sólo en seleccionar equiv-
Machine Translated by Google
Clases de alencia y valores límite para las entradas. La especificación de entrada para el
módulo establece que un identificador de widget debe constar de 3 a 15 caracteres
alfanuméricos, de los cuales los dos primeros deben ser letras. Tenemos tres condiciones
separadas que se aplican a la entrada: (i) debe constar de caracteres alfanuméricos, (ii) el
rango para el número total de caracteres está entre 3 y 15, y (iii) los primeros dos caracteres
deben ser letras .
Nuestro enfoque para diseñar los casos de prueba es el siguiente. Primero
identificaremos las clases de equivalencia de entrada y les daremos a cada una un
identificador. Luego los aumentaremos con los resultados del análisis de valores límite.
Se utilizarán tablas para organizar y registrar nuestros hallazgos. Etiquetaremos las clases
de equivalencia con un identificador ECxxx, donde xxx es un número entero cuyo valor es
uno o mayor. Cada clase también se clasificará como válida o no válida para el dominio de
entrada.
Primero consideramos la condición 1, el requisito de caracteres alfanuméricos. Esta
es una condición "debe ser". Derivamos dos clases de equivalencia.
Finalmente tratamos el caso “debe ser” para los dos primeros personajes.
Tenga en cuenta que cada condición se consideró por separado. Las condiciones no
se combinan para seleccionar clases de equivalencia. El probador puede descubrir más
adelante que un caso de prueba específico cubre más de una clase de equivalencia.
Las clases de equivalencia seleccionadas pueden registrarse en forma de tabla como
se muestra en la Tabla 4.1. Al inspeccionar una mesa de este tipo, el probador puede
Machine Translated by Google
1 EC1 EC2
2 EC3 EC4, EC5
3 EC6 EC7
TABLA 4.1
confirme que se han considerado todas las condiciones y las clases de equivalencia
válidas e inválidas asociadas.
El análisis de valores límite ahora se usa para refinar los resultados de la
partición de clases de equivalencia. Los límites en los que centrarse son los que
tienen la longitud permitida para el identificador del widget. Un probador experimentado sabe que
el módulo podría tener defectos relacionados con el manejo de identificadores de widgets que
son de longitud igual y directamente adyacentes al límite inferior de 3
y el límite superior de 15. Se puede usar un conjunto simple de abreviaturas
para representar los grupos de límites. Por ejemplo:
Para nuestro módulo de ejemplo, los valores para los grupos de límites son:
BLB—2 BUB—14
libra-3 UB—15
ALB—4 AUB—16
Tenga en cuenta que en esta discusión del análisis de valores límite, los valores simplemente
por encima del límite inferior (ALB) y justo debajo del límite superior (BUB)
Machine Translated by Google
fueron seleccionados. Ambos son casos válidos y pueden omitirse si el evaluador no cree
que sean necesarios.
El siguiente paso en el proceso de diseño de casos de prueba es seleccionar un
conjunto de valores de entrada reales que cubra todas las clases de equivalencia y los límites.
Una vez más, se puede utilizar una tabla para organizar los resultados. La Tabla 4.2 muestra
las entradas para el módulo de muestra. Tenga en cuenta que la tabla tiene el nombre del
módulo, el identificador, la fecha de creación de los datos de entrada de prueba y el autor
de los casos de prueba.
La Tabla 4.2 solo describe las pruebas para el módulo en términos de entradas
derivadas de las clases de equivalencia y los límites. El Capítulo 7 describirá los
componentes necesarios para un caso de prueba completo. Estos incluyen entradas de
prueba como se muestra en la Tabla 4.2, junto con las condiciones de prueba y los resultados espera
Los registros de prueba se utilizan para registrar las salidas y condiciones reales cuando
se completa la ejecución. Las salidas reales se comparan con las salidas esperadas para
determinar si el módulo ha pasado o no la prueba.
Tenga en cuenta que al inspeccionar la tabla completa, el probador puede determinar
si todas las clases de equivalencia y los límites han sido cubiertos por casos de prueba de
entrada reales. Para este ejemplo, el probador ha seleccionado un total de nueve casos
de prueba. El lector también debe tener en cuenta que, al seleccionar entradas basadas
en clases de equivalencia, se debe incluir un valor representativo en el punto medio de los
límites de cada clase relevante como caso típico. En este ejemplo, se seleccionó un caso
de prueba con 9 caracteres, el promedio de los valores de rango de 3 y 15 (identificador
de caso de prueba 9). El conjunto de casos de prueba presentado aquí no es único: son
posibles otros conjuntos que también cubrirán todas las clases y límites de equivalencia.
Válido Inválido
equivalencia equivalencia
clases y clases y
Caso de prueba Aporte límites límites
identificador valores cubierto cubierto
CUADRO 4.2