Vous êtes sur la page 1sur 106

Ampliacin de Ingeniera del Software

Grado en Ingeniera Informtica


Material de Apoyo Terico

Pgina N
Una de las caractersticas tpicas del desarrollo de software basado en el ciclo de vida es
la realizacin de controles peridicos, normalmente coincidiendo con los hitos del
proyecto o la terminacin de documentos.
Estos controles pretenden una evaluacin de la calidad de los productos generados
(especificacin de requisitos, documentos de diseo, etc.) para poder detectar posibles
defectos cuanto antes.
Sin embargo, todo sistema o aplicacin, independientemente de estas revisiones, debe
ser probado mediante su ejecucin controlada antes de ser entregado al cliente.
Estas ejecuciones o ensayos de funcionamiento, posteriores a la terminacin del cdigo
del software, se denominan habitualmente pruebas.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La prueba del software es un elemento de un tema ms amplio que, a menudo, es conocido como
verificacin y validacin (V&V). V&V es un conjunto de procedimientos, actividades, tcnicas y
herramientas que se utilizan, paralelamente al desarrollo de software, para asegurar que un
producto software resuelve el problema inicialmente planteado.
Principio: Actuar sobre los productos intermedios que se generan durante el desarrollo para
detectar y corregir cuanto antes sus defectos y las desviaciones respecto al objetivo fijado
La verificacin se refiere al conjunto de actividades que aseguran que el software implementa
correctamente una funcin especfica. Tcnica ms utilizada: Revisiones SW
La validacin se refiere a un conjunto diferente de actividades que aseguran que el software
construido se ajusta a los requisitos del cliente. Tcnica ms utilizada: Pruebas SW
La definicin de V&V comprende muchas de las actividades a las que se refiere la garanta de
calidad del software (SQA o Software Quality Assurance). En particular, la verificacin y la
validacin abarcan una amplia lista de actividades SQA que incluyen: revisiones tcnicas formales,
auditoras de calidad y de configuracin, monitorizacin de rendimientos, simulacin, estudios de
factibilidad, revisin de la documentacin, revisin de la base de datos, anlisis algortmico,
pruebas de desarrollo pruebas de validacin y pruebas de instalacin.
Las pruebas son una familia de tcnicas de V&V, que incluye otras muchas actividades.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Los objetivos concretos de la V&V son:
Detectar y corregir los defectos tan pronto como sea posible en el ciclo de vida del software.
Disminuir los riesgos, las desviaciones sobre los presupuestos y sobre el calendario o programa
de tiempos del proyecto.
Mejorar la calidad y fiabilidad del software.
Mejorar la visibilidad de la gestin del proceso de desarrollo.
Valorar rpidamente los cambios propuestos y sus consecuencias.
La visin del desarrollo de software como un conjunto de fases con posibles realimentaciones
facilita la V&V. De hecho, al inicio del proyecto es necesario hacer un Plan de V&V del SW (IEEE
1012), cuyas actividades se realizan de forma iterativa durante el desarrollo.
La figura muestra un ejemplo del plan de V&V de acuerdo al estndar correspondiente de la IEEE,
el IEEE 1012-2004 (IEEE Standard for Software Verification and Validation).
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En general, las Pruebas (Testing) se realizan para evaluar la calidad de un producto, y/o mejorarlo, mediante la
identificacin de defectos y problemas. Conviene que nos detengamos un momento en algunos de los
conceptos recogidos en la anterior definicin de qu son las pruebas de software:
Comprobacin Dinmica
Las pruebas siempre implican la ejecucin del programa con unas ciertas entradas.
Los valores de entrada no siempre son suficientes para determinar una prueba porque un sistema
complejo podra reaccionar de distinta manera ante una misma entrada dependiendo del estado del
sistema (sistema no determinista).
Las tcnicas de verificacin esttica (sin ejecucin) se consideran tcnicas de aseguramiento de calidad y
no pruebas. Por ejemplo, las revisiones formales o informales del cdigo.
Conjunto Finito de Casos de prueba
Incluso en los programas sencillos, son posibles tericamente tantos casos de prueba que su realizacin
de forma exhaustiva podra llevar meses o aos.
En la prctica se considera que el conjunto completo de posibles casos de prueba es infinito.
Hacer pruebas implica un equilibrio entre recursos y tiempo limitados y unos requisitos de prueba
virtualmente ilimitados.
Seleccionados entre los infinitos
Es necesario seleccionar un subconjunto finito de casos de prueba.
La gran cantidad de tcnicas de prueba propuestas difieren fundamentalmente en la manera de
seleccionar el conjunto de casos de prueba.
Diferentes criterios de seleccin pueden implicar grados muy distintos de efectividad.
Identificar el criterio de seleccin ms adecuado para cada situacin es muy complejo. En la prctica se
aplican:
Anlisis de Riesgos
Experiencia del ingeniero de pruebas
Comportamiento Esperado
Para que el esfuerzo de hacer pruebas sea til debe ser posible, aunque no siempre fcil, decidir si los
resultados observados al ejecutar el programa son aceptables o no.
El comportamiento esperado puede ser comparado con
Las expectativas de los usuarios (pruebas de aceptacin)
Una especificacin (pruebas de verificacin)
Comportamiento anticipado desde requisitos implcitos.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Prueba (test): Una actividad en la cual un sistema o uno de sus componentes se ejecuta en
circunstancias previamente especificadas, los resultados se observan y registran y se realiza una
evaluacin de algn aspecto.
Para Myers, probar (o la prueba) es el proceso de ejecutar un programa con el fin de
encontrar errores.
El nombre prueba, adems de la actividad de probar, se puede usar para designar un
conjunto de casos y procedimientos de prueba.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Caso de prueba (test case): Un conjunto de entradas, condiciones de ejecucin, y resultados
esperados desarrollados para un objetivo particular como, por ejemplo, ejercitar un camino
concreto de un programa o verificar el cumplimiento de un determinado requisito.
Tambin se puede referir a la documentacin donde se describen las entradas, condiciones y
salidas de un caso de prueba.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Es habitual ver como algunas personas utilizan de manera indistinta los trminos Defecto, Fallo y
Error. Sin embargo, cada uno de ellos tiene un significado diferente:
Defecto: un defecto se encuentra en un artefacto y puede definirse como una diferencia entre
la versin correcta del artefacto y una versin incorrecta. Coincide con la definicin de
diccionario, "imperfeccin.
Fallo: en terminologa IEEE, un fallo es la discrepancia visible que se produce al ejecutar un
programa con un defecto, el cual es incapaz de funcionar correctamente (no sigue su curso
normal). Podramos referirnos a un fallo como el sntoma o efecto del defecto.
Error: es una equivocacin cometida por el desarrollador, por tanto es humano. Algunos
ejemplos de errores son un error tipogrfico o la malinterpretacin de un requisito. El
estndar 829 de la IEEE se refiere a un error como "una idea falsa o equivocada". Por lo tanto
un programa no puede tener o estar en un error, ya que los programas no tienen ideas; las
ideas las tienen las personas. Si recurrimos a la literatura encontraremos otras acepciones:
La diferencia entre un valor calculado, observado o medido y el valor verdadero,
especificado o tericamente correcto. Por ejemplo, una diferencia de dos centmetros
entre el valor calculado y el real.
Un defecto. Por ejemplo, una instruccin incorrecta en un programa.
Un resultado incorrecto. Por ejemplo, un programa ofrece como resultado de la raz
cuadrada de 36 el valor 7 en vez de 6.
Una accin humana que conduce a un resultado incorrecto (una metedura de pata:
mistake). Por ejemplo, que el operador o el programador pulse una tecla equivocada.
Nosotros desecharemos las acepciones 2 y 3, ya que coinciden con las definiciones de defecto
y fallo, para evitar equvocos. De forma coloquial podramos decir que un error es algo
abstracto (en tanto en cuanto es una idea), un defecto es la concretizacin de esa idea y un
fallo es el resultado de esa concretizacin. Es decir, una idea equivocada se implementa en un
defecto que provoca un fallo.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Esta figura ilustra mejor la idea: un error del programador introduce un defecto y este defecto
produce un fallo.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Las pruebas del software son un elemento crtico para la garanta de calidad del software y
representa una revisin final de las especificaciones, del diseo y de la codificacin.
La creciente percepcin del software como un elemento del sistema y la importancia de los
costes asociados a un fallo del propio sistema, estn motivando la creacin de pruebas
minuciosas y bien planificadas.
No es raro que una organizacin de desarrollo de software emplee entre el 30 y el 40 por ciento
del esfuerzo total de un proyecto en las pruebas.
En casos extremos, las pruebas del software para actividades crticas (por ejemplo, control de
trfico areo, control de reactores nucleares) pueden costar de tres a cinco veces ms que el
resto de actividades juntas.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Las pruebas presentan una interesante anomala para el ingeniero del software. Durante las fases
anteriores de definicin y de desarrollo, el ingeniero intenta construir el software partiendo de un
concepto abstracto y llegando a una implementacin tangible.
A continuacin, llegan las pruebas donde el ingeniero crea una serie de casos de prueba que
intentan demoler el software construido. De hecho, las pruebas son una de las actividades de la
ingeniera del software que se puede ver (por lo menos, psicolgicamente) como eminentemente
destructiva en lugar de constructiva.
As, dado que los ingenieros del software son, por naturaleza, personas constructivas, las pruebas
requieren que se descarten ideas preconcebidas sobre la correccin del software que se acaba
de desarrollar y se supere cualquier conflicto de intereses que aparezcan a medida que se
descubran errores.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Existe un mito que dice que [BEIZER, 1990]:
Si furamos realmente buenos programando, no habra errores que buscar. Si tan solo furamos realmente
capaces de concentrarnos, si todo el mundo empleara tcnicas de codificacin estructuradas, el diseo
descendente, si los programas se escribieran en un lenguaje apropiado, si tuviramos siempre la solucin
ms adecuada, entonces no habra errores. Segn el mito, existen errores porque somos malos en lo que
hacemos, y si somos malos en lo que hacemos, deberamos sentirnos culpables por ello. Por tanto, las
pruebas son un reconocimiento de nuestros errores, lo que implica una buena dosis de culpabilidad. An
ms, lo tediosas que son las pruebas son un justo castigo a nuestros errores. Castigados por qu? Por ser
humanos? Culpables por qu? Por no conseguir una perfeccin inhumana? Por no poder distinguir entre
lo que otro programador piensa y lo que dice? Por no tener telepata? Por no poder resolver los
problemas de comunicacin humana que han estado presentes, durante cuarenta siglos?
Hay que recordar, ante todo, que el objetivo de las pruebas es la deteccin de defectos en el software y que
descubrir un defecto debera considerarse el xito de una prueba. Se trata de una actividad a posteriori, de
deteccin, y no de prevencin, de problemas en el software. El problema es que, tradicionalmente, existe el
mito de la ausencia de errores en el buen profesional: si furamos realmente capaces y empleramos las
tcnicas ms sofisticadas, no existiran los defectos en el software. Por lo tanto, un defecto implica que
somos malos profesionales y que debemos sentirnos culpables. Si una prueba revela uno de estos
problemas, implica la constatacin de un fracaso del desarrollador.
Sin embargo, la realidad es muy distinta. Todo el mundo comete errores (errare humanum est) y es de
sabios rectificar. Las pruebas permiten la rectificacin en el software. La mayora de los estudios revelan que
los mejores programadores incluyen una cierta media de defectos por cada 1.000 lneas de cdigo. Los
defectos no son siempre el resultado de la negligencia, sino que en su aparicin influyen mltiples factores
(por ejemplo, la mala comunicacin entre los miembros del equipo que da lugar a malentendidos en los
requisitos). Por todo ello, el descubrimiento de un defecto significa un xito para la mejora de la calidad al
igual que, a pesar de lo incmodo que resulte, la deteccin de un problema de salud en un anlisis mdico
se considera un xito para lograr la curacin del paciente.
Resumiendo: Deben infundir culpabilidad la pruebas? Son realmente destructivas? La respuesta a estas
preguntas es: no!
Sin embargo, los objetivos de las pruebas son algo diferentes de lo que podramos esperar

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Existen prejuicios (como, por ejemplo, la creencia de que todo defecto es consecuencia de una
negligencia en el trabajo desarrollado) que pueden perjudicar a las pruebas. Todos estos factores
obligan a estudiar cul es la mejor actitud o filosofa a seguir a la hora de abordar el desarrollo de
pruebas.
(VER DIAPOSITIVA)
Los objetivos anteriores suponen un cambio dramtico de punto de vista. Nos quitan la idea que
normalmente tenemos de que una prueba tiene xito si no descubre errores.
Nuestro objetivo es disear pruebas que sistemticamente saquen a la luz diferentes clases de
errores, hacindolo con la menor cantidad de tiempo y de esfuerzo. Si la prueba se lleva a cabo
con xito (de acuerdo con el objetivo anteriormente establecido), descubrir errores en el
software. Por tanto, debemos disear pruebas que tengan la mayor probabilidad de encontrar el
mayor nmero de errores.
Como ventaja adicional, la prueba demuestra hasta qu punto el software parece funcionar de
acuerdo a los requisitos funcionales y no funcionales. Adems, los datos que se van recogiendo a
medida que se lleva a cabo la prueba proporcionan una buena indicacin de fiabilidad y, de
alguna manera, un indicador de la calidad del software como un todo.
Pero no debemos olvidar que la prueba no puede asegurar la ausencia de defectos; slo puede
demostrar que existen defectos en el software.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Las especiales caractersticas del software (ausencia de existencia fsica, ausencia de leyes que
rijan su comportamiento, gran complejidad, etc.) hacen an ms difcil la tarea de probarlo en
relacin a otros productos industriales. Adems, no debemos olvidar los prejuicios que hemos
comentado respecto a las pruebas. Por todo ello, antes de la aplicacin de mtodos para el diseo
de casos de prueba efectivos, un ingeniero software deber entender los principios bsicos que
guan las pruebas del software.
Davis [DAV95] y Myers [Myers, 1979] sugieren los siguientes:
A todas las pruebas se les debera poder hacer un seguimiento hasta los requisitos del cliente.
Como hemos visto, el objetivo de las pruebas del software es descubrir errores. Se entiende
que los defectos ms graves (desde el punto de vista del cliente) son aquellos que impiden al
programa cumplir sus requisitos.
Las pruebas deberan planificarse mucho antes de que empiecen. La planificacin de las
pruebas pueden empezar tan pronto como est completo el modelo de requisitos. La
definicin detallada de los casos de prueba puede empezar tan pronto como el modelo de
diseo se ha consolidado. Por tanto, se pueden planificar y disear todas las pruebas antes de
abordar las tareas de construccin.
El principio de Pareto es aplicable a la prueba del software. Dicho de manera sencilla, el
principio de Pareto implica que el 80% de todos los errores descubiertos durante las pruebas
se localizan en un 20% de todos los mdulos/componentes del sistema. El problema, por
supuesto, es aislar estos mdulos sospechosos y probarlos concienzudamente.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
No son posibles las pruebas exhaustivas. El nmero de permutaciones de caminos para incluso un programa de tamao
moderado es excepcionalmente grande. Por este motivo, es imposible ejecutar todas las combinaciones de caminos
durante las pruebas. Es posible, sin embargo, cubrir adecuadamente la lgica del programa y asegurarse de que se han
aplicado todas las condiciones en el diseo a nivel de componente.
Las pruebas deberan empezar por lo pequeo y progresar hacia lo grande. Las primeras pruebas planeadas y
ejecutadas se centran generalmente en mdulos individuales del programa. A medida que avanzan las pruebas, desplazan
su punto de mira en un intento de encontrar errores en grupos integrados de mdulos y finalmente en el sistema entero.
Para ser ms eficaces, las pruebas deberan ser realizadas por un equipo independiente. Por mas eficaces queremos
referirnos a pruebas con la ms alta probabilidad de encontrar errores (el objetivo principal de las pruebas). Por las
razones que se expusieron anteriormente, el ingeniero del software que cre el sistema no es el ms adecuado para llevar
a cabo las pruebas para el software. El programador debe evitar probar sus propios programas porque desea (consciente
o inconscientemente) demostrar que funcionan sin problemas. Esta actitud inadecuada lleva a realizar pruebas menos
rigurosas de lo deseable. Adems, es normal que las situaciones que ha olvidado considerar al crear el programa (por
ejemplo, no pensar en cmo tratar un fichero de entrada vaco) queden, de nuevo, olvidadas al escribir casos de prueba.
Lo ideal sera que probara el software el peor enemigo de quien lo ha construido, ya que as se asegurara una bsqueda
implacable de cualquier error cometido.
Para definir buenos casos de prueba:
Se deben evitar los casos desechables, es decir, los no documentados ni diseados con cuidado (por ejemplo, los que
se teclean sobre la marcha), ya que suele ser necesario probar una y otra vez el software hasta que queda libre de
defectos. No documentar o guardar los casos significa repetir constantemente el diseo de casos de prueba.
Cada caso de prueba debe definir el resultado de salida esperado. Este resultado esperado es el que se compara con
el realmente obtenido de la ejecucin en la prueba. Las discrepancias entre ambos (errores) se consideran sntomas
de un posible defecto en el software.
Al generar casos de prueba, se deben incluir tanto datos de entrada vlidos y esperados como no vlidos e
inesperados. Es frecuente observar una tendencia a centrarse en lo esperado y lo vlido.
Debemos evitar ser redundantes. El tiempo y los recursos para las pruebas son limitados. No hay motivo para realizar
una prueba que tiene el mismo propsito que otra. Todas las pruebas deberan tener un propsito diferente (incluso
si es sutilmente diferente). Una buena prueba debera ser la mejor de la cosecha. En un momento dado, varios
miembros de un equipo de pruebas pueden proponer varios casos de prueba que tengan un propsito similar, pero
las limitaciones de tiempo y recursos que pueden abogar por la ejecucin de solo un subconjunto de estas pruebas.
En tales casos, se debera emplear la prueba que tenga la ms alta probabilidad de descubrir una clase entera de
errores.
Una buena prueba o debera ser ni demasiado sencilla ni demasiado compleja. Aunque es posible, a veces, combinar
una serie de pruebas en un caso de pruebas, los posibles efectos secundarios de este enfoque pueden enmascarar
errores, en general, cada prueba debera realizarse separadamente.





Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En circunstancias ideales, un ingeniero disea un programa, un sistema o un producto con la facilidad de la prueba en mente. Esto
permite a los encargados de las pruebas disear casos de pruebas ms fcilmente. Pero, Qu es la facilidad de la prueba?
La facilidad de la prueba del software es simplemente la facilidad con la que se puede probar un programa. Ya que la prueba es
esencialmente difcil, merece la pena saber qu se puede hacer para hacerla ms sencillo. A veces los programadores estn dispuestos a
hacer cosas que faciliten el proceso de prueba y una lista de comprobacin de posibles puntos de diseo, caractersticas y dems, puede
ser til a la hora de negociar con ellos. Existen, de hecho, mtricas que podran usarse para medir ciertos aspectos de la facilidad de
prueba. La siguiente lista de comprobacin proporciona un conjunto de caractersticas que llevan a un software fcil de probar.
Operatividad. Cuanto mejor funcione ms eficientemente se puede probar.
El sistema tiene pocos errores (los errores aaden sobre carga de anlisis y de generacin de informe al proceso de prueba).
Ningn error bloquea la ejecucin de las pruebas.
Observabilidad. Lo que ves es lo que pruebas.
Se genera una salida distinta para cada entrada.
Los estados y variables del sistema estn visibles o se pueden consultar durante la ejecucin.
Los estados y variables anteriores al sistema estn visibles o se pueden consular (por ejemplo, registro de transaccin).
Todos los factores que afectan a los resultados estn visibles.
Un resultado incorrecto se identifica fcilmente.
Los errores internos se detectan automticamente a travs de un mecanismo de autocomprobacin.
Se informa automticamente de los errores internos.
El cdigo fuente es accesible.
Controlabilidad. Cuanto mejor podamos controlar el software ms se puede automatizar y optimizar la prueba.
Todos los resultados posibles se pueden generar a travs de alguna combinacin de entrada.
Todo el cdigo es ejecutable a travs de alguna combinacin de entrada.
El ingeniero de pruebas puede controlar directamente los estados y las variables del hardware y del software
Los formatos de las entradas y los resultados son consistentes y estructurados.
Las pruebas pueden especificarse, automatizarse y reproducirse convenientemente.
Capacidad de descomposicin. Controlando el mbito de las pruebas, podemos aislar ms rpidamente los problemas y llevar a cabo
mejores pruebas de regresin.
El sistema software est construido con mdulos independientes. Los mdulos del software se pueden probar independientemente.
(COHESIN Y ACOPLAMIENTO)
Simplicidad. Cuanto menos haya que probar, ms rpidamente podremos probarlo.
Simplicidad funcional (por ejemplo, el conjunto de caractersticas es el mnimo necesario para cumplir los requisitos).
Simplicidad estructural (por ejemplo, la arquitectura es modularizada para limitar la propagacin de fallos).
Simplicidad del cdigo (por ejemplo, se adopta un estndar de cdigo para facilitar la inspeccin y el mantenimiento).
Estabilidad. Cuanto menos cambios, menos interrupciones a las pruebas.
Los cambios del software son infrecuentes
Los cambios del software estn controlados
Los cambios del software no invalidan las pruebas existentes.
El software se recupera bien de los fallos.
Facilidad de comprensin. Cuanta ms informacin tengamos, ms inteligentes sern las pruebas
El diseo se ha entendido perfectamente
Las dependencias entre los componentes internos, externos y compartidos se han entendido perfectamente.
Se han comunicado los cambios del diseo
La documentacin tcnica es instantneamente accesible, est bien organizada, es especfica, detallada y exacta
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En la figura se puede ver una representacin del proceso de pruebas basada en parte en el
estndar IEEE std. 1008.
El proceso de prueba comienza con la generacin de un plan de pruebas en base a la
documentacin sobre el proyecto y la documentacin sobre el software a probar.
A partir de dicho plan, se entra en detalle diseando pruebas especficas basndose en la
documentacin del software a probar.
Una vez detalladas las pruebas (especificaciones de casos y de procedimientos) se toma la
configuracin del software (revisada, para confirmar que se trata de la versin apropiada del
programa) que se va a probar para ejecutar sobre ella los casos. En algunas situaciones, se puede
tratar de re-ejecuciones de pruebas, por lo que es conveniente tener constancia de los defectos
ya detectados aunque an no corregidos.
A partir de los resultados de salida, se pasa a su evaluacin mediante comparacin con la salida
esperada. A partir de sta, se pueden realizar dos actividades:
La depuracin (localizacin y correccin de defectos).
El anlisis de la estadstica de errores.
La depuracin puede corregir o no los defectos. Si no consigue localizarlos, puede ser necesario
realizar pruebas adicionales para obtener ms informacin. Si se corrige un defecto, se debe
volver a probar el software para comprobar que el problema est resuelto.
Por su parte, el anlisis de errores puede servir para realizar predicciones de la fiabilidad del
software y para detectar las causas ms habituales de error y mejorar los procesos de desarrollo.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Una vez introducidos los principales conceptos relacionados con las pruebas de software, veamos
las diferentes formas de disear pruebas de software.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El diseo de casos de prueba est totalmente mediatizado por la imposibilidad de probar
exhaustivamente el software. Pensemos en un programa muy sencillo que slo suma dos
nmeros enteros de dos cifras (del 0 al 99). Si quisiramos probar, simplemente, todos los valores
vlidos que se pueden sumar deberamos probar 10.000 combinaciones distintas de cien posibles
nmeros del primer sumando y cien del segundo. Pensemos que an quedara por probar todas
las posibilidades de error al introducir los datos (por ejemplo, teclear una letra en vez de un
nmero). Si para un programa tan elemental debemos realizar tantas pruebas, podemos imaginar
lo que supondra un programa medio.
En consecuencia, las tcnicas de diseo de casos de prueba tienen como objetivo conseguir una
confianza aceptable en que se detectarn los defectos existentes (ya que la seguridad total slo
puede obtenerse de la prueba exhaustiva, que no es practicable) sin que se necesite consumir
una cantidad excesiva de recursos (por ejemplo, tiempo para probar o tiempo de ejecucin). Toda
la disciplina de pruebas debe moverse, por lo tanto, en un equilibrio entre la disponibilidad de
recursos y la confianza que aportan los casos para descubrir los defectos existentes. Este
equilibrio no es sencillo, lo que convierte a las pruebas en una disciplina difcil y lejos de parecerse
a la imagen de actividad rutinaria que suele sugerir.
Ya que no se pueden probar todas las posibilidades de funcionamiento del software, la idea
fundamental para el diseo de casos de prueba consiste en elegir algunas de ellas que, por sus
caractersticas, se consideren representativas del resto. As, se asume que, si no se detectan
defectos en el software al ejecutar dichos casos, podemos tener un cierto nivel de confianza (que
depende de la eleccin de los casos) en que el programa no tiene defectos. La dificultad de esta
idea es saber elegir los casos que se deben ejecutar. De hecho, una eleccin puramente aleatoria
no proporciona demasiada confianza en que se puedan detectar todos los defectos existentes.
Por ejemplo, en el caso del programa de suma de dos nmeros, elegir cuatro pares de sumandos
al azar no aporta mucha seguridad a la prueba (una probabilidad de 4/10.000 de cobertura de
posibilidades). Por eso es necesario recurrir a ciertos criterios de eleccin que veremos a
continuacin.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Cualquier producto de ingeniera (y de muchos otros campos) puede probarse de una de estas dos formas:
(1) Conociendo la funcin especfica para la que fue diseado el producto, se pueden llevar a cabo
pruebas que demuestren que cada funcin es completamente operativa y, al mismo, tiempo buscando
errores en cada funcin;
(2) Conociendo el funcionamiento del producto, se pueden desarrollar pruebas que aseguren que todas
las piezas encajan, o sea, que la operacin interna se ajusta a las especificaciones y que todos los
componentes internos se han comprobado de forma adecuada.
El enfoque estructural o de caja blanca consiste en centrarse en la estructura interna (implementacin) del
programa para elegir los casos de prueba. En este caso, la prueba ideal (exhaustiva) del software consistira
en probar todos los posibles caminos de ejecucin, a travs de las instrucciones del cdigo, que puedan
trazarse. se basa en el minucioso examen de los detalles procedimentales. Se comprueban los caminos
lgicos del software proponiendo casos de prueba que ejerciten conjuntos especficos de condiciones y/o
bucles. Se puede examinar el estado del programa en varios puntos para determinar si el estado real
coincide con el esperado o mencionado.
El enfoque funcional o de caja negra consiste en estudiar la especificacin de las funciones, la entrada y la
salida para derivar los casos. Aqu, la prueba ideal del software consistira en probar todas las posibles
entradas y salidas del programa. Son por tanto pruebas que se llevan a cabo sobre la interfaz del software.
Pretenden demostrar que el software hace lo que se esperaba de l: que la entrada se acepta de forma
adecuada y que se produce un resultado correcto, mientras se mantiene la integridad de la informacin
externa (por ejemplo, archivos de datos). Una prueba de caja negra no contempla la estructura lgica
interna del software.
Estos enfoques no son excluyentes entre s, ya que se pueden combinar para conseguir una deteccin de
defectos ms eficaz.
Finalmente, en el enfoque aleatorio se simula la entrada habitual del programa creando datos para
introducir en l que sigan la secuencia y la frecuencia con las que podran aparecer en la prctica diaria, de
forma continua, sin descanso. Esto implica usar herramientas denominadas generadores de pruebas a las
que se alimenta con una descripcin de datos y secuencias de entradas posibles as como una estimacin de
probabilidad de ocurrir cada una de ellas en el uso real. Este enfoque es muy comn en la prueba de
compiladores en la que se generan aleatoriamente programas codificados en un lenguaje concreto que
sirven de pruebas para comprobar si son correctamente compilados.
Si el proceso de generacin de pruebas se ha realizado correctamente, a la larga se crearn todas las
posibles entradas del programa en todas las combinaciones posibles, aunque no sea necesario hacer
esto para una prueba adecuada. Tambin se puede conseguir, indicando la distribucin estadstica que
siguen, que la frecuencia de entradas sea la apropiada para orientar correctamente nuestras pruebas
hacia aquello que es ms probable que suceda en la prctica real. No obstante, esta forma de disear
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
casos de prueba es menos utilizada que las tcnicas de caja negra y de caja blanca.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La prueba del camino bsico es una tcnica de prueba de caja blanca propuesta inicialmente por
Tom McCabe [McCabe, 1976].
La utilizacin de la mtrica de McCabe ha sido muy popular en el diseo de pruebas desde su
presentacin. Esta mtrica es un indicador del nmero de caminos independientes que existen en
un grafo. El propio McCabe defini como un buen criterio de prueba la consecucin de la
ejecucin de un conjunto de caminos independientes, lo que implica probar un nmero de
caminos igual al de la mtrica.
El mtodo del camino bsico permite al diseador de casos de prueba obtener una medida de la
complejidad lgica de un diseo procedimental y usar esa medida como gua para la definicin de
un conjunto bsico de caminos de ejecucin. Los casos de prueba obtenidos del conjunto bsico
garantizan que durante la prueba se ejecuta por lo menos una vez cada sentencia del programa.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Un concepto importante en el contexto de los diagramas de flujo son las regiones. Para ilustrarlos
partimos de la representacin grfica de un determinado programa que nos proporciona el
Diagrama de Flujo mostrado en la parte superior de la diapositiva.
Dicho diagrama de flujo da lugar al grafo de flujo mostrado en la parte inferior. Pues bien, las
reas delimitadas por aristas y nodos se denominan regiones y cuando contabilizamos las
regiones, debemos contabilizar el rea exterior del grafo como otra regin ms.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La complejidad ciclomtica es una mtrica del software que proporciona una medida cuantitativa
de la complejidad lgica de un programa. De hecho, la experimentacin con la mtrica de McCabe
ha dado como resultado las siguientes conclusiones:
V (G) marca un lmite mnimo de nmero de casos de prueba para un programa, contando
siempre cada condicin de decisin como un nodo individual. Por lo tanto, en el contexto del
mtodo de prueba del camino bsico, el valor de la complejidad ciclomtica define el nmero
de caminos independientes de dicho programa, y por lo tanto, el nmero de casos de prueba a
realizar.
Parece que, cuando V(G) es mayor que diez, la probabilidad de defectos en el mdulo o en el
programa crece bastante si dicho valor alto no se debe a sentencias Case-of o similares. En
estos casos, es recomendable replantearse el diseo modular obtenido.
Posteriormente veremos cmo se identifican esos caminos, pero primero veamos cmo se puede
calcular la complejidad ciclomtica a partir de un grafo de flujo, para obtener el nmero de
caminos a identificar.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Existen varias formas de calcular la complejidad ciclomtica de un programa a partir de un grafo
de flujo:
El nmero de regiones del grafo coincide con la complejidad ciclomtica, V(G).
La complejidad ciclomtica, V(G), de un grafo de flujo G se define como
V(G) = Aristas Nodos + 2
La complejidad ciclomtica, V(G), de un grafo de flujo G se define como
V(G) = Nodos Predicado + 1
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La Figura representa, por ejemplo, las cuatro regiones del grafo de flujo, obtenindose as la
complejidad ciclomtica de 4.
Anlogamente se puede calcular el nmero de aristas y nodos predicados para confirmar la
complejidad ciclomtica. As:
V(G) = Nmero de regiones = 4
V(G) = Aristas Nodos + 2 = 11-9 + 2 = 4
V(G) = Nodos Predicado + 1 = 3 +1 = 4
Esta complejidad ciclomtica determina el nmero de casos de prueba que deben ejecutarse para
garantizar que todas las sentencias de un programa se han ejecutado al menos una vez, y que
cada condicin se habr ejecutado en sus vertientes verdadera y falsa. Veamos ahora, cmo se
identifican estos caminos.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Un camino independiente es cualquier camino del programa que introduce, por lo menos, un
nuevo conjunto de sentencias de proceso o una condicin, respecto a los caminos existentes. En
trminos del diagrama de flujo, un camino independiente est constituido por lo menos por una
arista que no haya sido recorrida anteriormente a la definicin del camino.
En la identificacin de los distintos caminos de un programa para probar se debe tener en cuenta
que cada nuevo camino debe tener el mnimo nmero de sentencias nuevas o condiciones nuevas
respecto a los que ya existen. De esta manera se intenta que el proceso de depuracin sea ms
sencillo.
El conjunto de caminos independientes de un grafo no es nico. No obstante, a continuacin, se
definen algunas heursticas para identificar dichos caminos:
(a) Elegir un camino principal que represente una funcin vlida que no sea un tratamiento de
error. Debe intentar elegirse el camino que atraviese el mximo nmero de decisiones en el
grafo.
(b) Identificar el segundo camino mediante la localizacin de la ltima decisin en el camino
de la lnea bsica alternando su resultado mientras se mantiene el mximo nmero de
decisiones originales del camino inicial.
(c) Identificar un tercer camino, colocando la ltima decisin en su valor original a la vez que
se altera la penltima decisin del camino bsico, mientras se intenta mantener el resto de
decisiones originales.
(d) Continuar el proceso hasta haber conseguido tratar todas las decisiones, intentando
mantener como en su origen el resto de ellas.
Conviene aclarar que algunos de los caminos puede que no se puedan ejecutar solos y requieran
una concatenacin con algn otro. A partir de estos caminos, el diseador de las pruebas debe
analizar el cdigo para saber los datos de entrada necesarios para forzar la ejecucin por cada
uno de ellos. Una vez determinada la entrada deber consultar la especificacin para averiguar
cul es la salida tericamente correcta para cada caso.
Puede ocurrir tambin que las condiciones necesarias para que la ejecucin pase por un
determinado camino no se puedan satisfacer de ninguna manera. Nos encontraramos entonces
ante un camino imposible. En ese caso, debemos sustituir dicho camino por otro que permita
satisfacer igualmente el criterio de prueba de McCabe.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La figura muestra un procedimiento en pseudocdigo para calcular la media de 100 o menos
nmeros que se encuentran entre un mnimo y un mximo que se proporcionan como entrada al
procedimiento. Tambin calcula el total de entradas y el total de nmeros vlidos.
Se han numerado las sentencias con objeto de crear el correspondiente grafo de flujo
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El valor de V(G) nos da el nmero de caminos linealmente independientes de la estructura de
control del programa. En el caso del procedimiento media, hay que especificar seis caminos.
Estos caminos pueden ser los que se muestran en la diapositiva.
En este caso hemos optado por construir primero el camino independiente ms corto y luego ir
complicndolo, modificando la decisin en cada nodo predicado.
Ntese que en cada camino hemos sealado en negrita el nodo predicado cuya decisin cambia
con respecto al siguiente camino.
Igualmente, memos subrayado la o las aristas nuevas con respecto a los caminos anteriores.
Si hubiramos construido los caminos siguiendo el algoritmo descrito en la diapositiva anterior, el
conjunto bsico sera (en negrita el nodo predicado cuya decisin cambia en el camino siguiente):
Camino 1: 1, 2, 3, 4, 5, 6, 7, 8, 9, 2 ,10, 11, 13
Camino 2: 1, 2, 3, 4, 5, 6, 7, 8, 9, 2 ,10, 12, 13
Camino 3: 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 10, 12, 13
Camino 4: 1, 2, 3, 4, 5, 6, 8, 9, 2, 10, 12, 13
Camino 5: 1, 2, 3, 4, 5, 8, 9, 2, 10, 12, 13
Camino 6: 1, 2, 10, 12, 13
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Veamos los posibles casos de prueba que se pueden generar para forzar la ejecucin de cada uno
de estos caminos.
Debemos escoger los datos de forma que las condiciones de los nodos predicado estn
adecuadamente establecidas, con el fin de comprobar cada camino.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Por ejemplo, fijemonos en el camino 4: 1-2-3-4-5-8-9-2-...
En esencia, dicho camino implica probar el algoritmo proporcionando como entrada un conjunto
de valores que incluya alguno que no cumpla con la condicin de estar entre los lmites
porporcionados (mnimo y mximo)
Un posible caso sera:
Valor: array de dos posiciones: [19, -999] Ntese que, por el nodo predicado 2, el segundo
nmero no contribuye al clculo de la media.
Mnimo: 20
Mximo: n (cualquier nmero entero)
El resultado esperado sera entonces:
Total.entrada = 1 el valor 19 pasa el primer IF haciendo que se incremente el contador
Total.valido = 0 pero no est en el rango de valores vlidos, con lo que no se incrementa
el contador de valores vlidos.
Por lo tanto, el ltimo IF (nodo 12) hace que el valor de la variable de salida media sea -999
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Tambin conocidas como Pruebas de Comportamiento, estas pruebas se basan en la
especificacin del programa o componente a ser probado para elaborar los casos de prueba. El
componente se ve como una Caja Negra cuyo comportamiento slo puede ser determinado
estudiando sus entradas y las salidas obtenidas a partir de ellas.
Es decir, se centra en los requisitos funcionales. O sea, la prueba de caja negra permite al
ingeniero obtener conjuntos de condiciones de entrada que ejerciten completamente todos los
requisitos funcionales de un programa.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Lamentablemente, la prueba exhaustiva de caja negra tambin es generalmente impracticable:
pensemos en el ejemplo de la suma ya mencionado: un programa que debe sumar dos nmeros
del 1 al 100, admite 10.000 entradas
De nuevo, ya que no podemos ejecutar todas las posibilidades de funcionamiento, es decir, todas
las combinaciones de entradas y salidas, debemos buscar criterios que permitan elegir un
subconjunto de casos cuya ejecucin aporte una cierta confianza en detectar los posibles
defectos del software.
Para fijar estas pautas de diseo de pruebas, nos apoyaremos en las siguientes dos definiciones
de Myers que definen qu es un caso de prueba bien elegido:
El que reduce el nmero de otros casos necesarios para que la prueba sea razonable. Esto
implica que el caso ejecute el mximo nmero de posibilidades de entrada diferentes para as
reducir el total de casos.
El que cubre un conjunto extenso de otros casos posibles, es decir, nos indica algo acerca de la
ausencia o la presencia de defectos en el conjunto especfico de entradas que prueba pero
tambin de otros conjuntos similares.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Existen distintas tcnicas de diseo de casos de caja negra.
Conjetura de errores
Se enumera una lista de posibles equivocaciones tpicas que pueden cometer los desarrolladores y de
situaciones propensas a ciertos errores.
El valor cero es una situacin propensa a error tanto en la salida como en la entrada
En situaciones en las que se introduce un nmero variable de valores, conviene centrarse en el caso de
no introducir ningn valor y en el de un solo valor. Tambin puede ser interesante un lista que tiene
todos los valores iguales
Es recomendable imaginar que el programador pudiera haber interpretado algo mal en la especificacin
Tambin interesa imaginar lo que el usuario puede introducir como entrada a un programa
Mtodos de prueba basados en grafos
El primer paso en esta prueba de caja negra es entender los objetos que se modelan en el software y las
relaciones que conectan a estos objetos. Una vez que se ha llevado a cabo esto, el siguiente paso es definir
una serie de pruebas que verifiquen que todos los objetos tienen entre ellos las relaciones esperadas.
Dicho de otra manera, esta prueba empieza creando un grafo de objetos importantes y sus relaciones, y
despus diseando una serie de pruebas que cubran el grafo de manera que se ejerciten todos los objetos y
sus relaciones.
Prueba de comparacin
Hay situaciones (por ejemplo, controlador areo, gestin de planta nuclear) en las que la fiabilidad del
software es algo absolutamente crtico. En ese tipo de aplicaciones, a menudo se utiliza hardware y software
redundante para minimizar la posibilidad de error. Cuando se desarrolla software redundante, varios
equipos separados desarrollan versiones independientes de una aplicacin, usando las mismas
especificaciones. En esas situaciones, se deben probar todas las versiones con los mismos datos de prueba
para asegurar que todas proporcionan una salida idntica. Luego se ejecutan todas las versiones en paralelo
y se hace una comparacin en tiempo real de los resultados, para garantizar la consistencia.
Prueba de la tabla ortogonal
Hay muchas aplicaciones en que el dominio de entrada es relativamente limitado. Es decir, el nmero de
parmetros de entrada es pequeo y los valores de cada uno de los parmetros est claramente
delimitados. Cuando estos nmeros son muy pequeos (por ejemplo, 3 parmetros de entrada tomando 3
valores diferentes), es posible considerar cada permutacin de entrada y comprobar exhaustivamente el
dominio de entrada. En cualquier caso, cuando el nmero de valores de entrada crece y el nmero de
valores diferentes para cada dato se incrementa, la prueba exhaustiva se hace impracticable o imposible.
A continuacin nos centraremos en las tcnicas de diseo de pruebas de caja negra ms relevantes: la
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
particin equivalente y el anlisis de valores lmite.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La particin en clases de equivalencia es un mtodo de prueba de Caja Negra que divide el campo
de entrada de un programa en clases de datos de los que se pueden derivar casos de prueba. Su
objetivo es la definicin de casos de prueba que descubran clases de errores, reduciendo as el
nmero total de casos de prueba que hay que desarrollar.
En otras palabras, este mtodo intenta dividir el dominio de entrada de un programa en un
nmero finito de clases de equivalencia, de tal modo que se pueda asumir razonablemente que
una prueba realizada con un valor representativo de cada clase es equivalente a una prueba
realizada con cualquier otro valor de dicha clase. Esto quiere decir que si el caso de prueba
correspondiente a una clase de equivalencia detecta un error, el resto de los casos de prueba de
dicha clase de equivalencia deben detectar el mismo error. Y viceversa, si un caso de prueba no
ha detectado ningn error, es de esperar que ninguno de los casos de prueba correspondientes a
la misma clase de equivalencia encuentre ningn error.
Por lo tanto, puede descubrir de forma inmediata una clase de errores (por ejemplo,
procesamiento incorrecto de los datos de tipo cadena de caracteres) que, de otro modo,
requeriran la ejecucin de muchos casos de prueba antes de detectar el error genrico.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Una clase de equivalencia representa un conjunto de estados vlidos y no vlidos para las
condiciones de entrada de un programa.
Las clases de equivalencia se identifican examinando cada condicin de entrada (normalmente
una frase en la especificacin) y dividindola en dos o ms grupos.
Se definen dos tipos de clases de equivalencia: las clases de equivalencia vlidas, que representan
entradas vlidas al programa, y las clases de equivalencia no vlidas, que representan valores de
entrada errneos.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En funcin de cul sea la condicin de entrada se pueden seguir las siguientes pautas para
identificar las clases de equivalencia:
Si una condicin de entrada especifica un rango de valores, identificar una clase de
equivalencia vlida y dos clases no vlidas. Por ejemplo, si un contador puede ir de 1 a 999, la
clase vlida sera 1 <= contador <= 999. Mientras que las clases no vlidas seran contador <
1 y contador > 999
Si una condicin de entrada especifica un valor o nmero de valores, identificar una clase
vlida y dos clases no vlidas. Por ejemplo, si tenemos que puede haber desde uno hasta seis
propietarios en la vida de un coche, habr una clase vlida y dos no vlidas: menos de un
propietario (0) y ms de 6 propietarios.
Si una condicin de entrada especifica un conjunto de valores de entrada, identificar una clase
de equivalencia vlida y una no vlida. Sin embargo, si hay razones para creer que cada uno de
los miembros del conjunto ser tratado de distinto modo por el programa, identificar una
clase vlida por cada miembro y una clase no vlida. Por ejemplo, el tipo de un vehculo puede
ser: autobs, camin, taxi, coche o moto. Habr una clase vlida por cada tipo de vehculo
admitido, y la clase no vlida estar formada por otro tipo de vehculo.
Si una condicin de entrada especifica una situacin que debe ocurrir, esto es, es lgica,
identificar una clase vlida y una no vlida. Por ejemplo, el primer carcter del identificador
debe ser una letra. La clase vlida sera identificador que comienza con letra, y la clase
invlida sera identificador que no comienza con letra.
En general, si hay alguna razn para creer que los elementos de una clase de equivalencia no se
tratan de igual modo por el programa, dividir la clase de equivalencia entre clases de equivalencia
ms pequeas para cada tipo de elementos. Por ejemplo:
Si se sospecha que ciertos elementos de una clase no se tratan igual deben dividirse en clases
menores
Si se especifica un conjunto de valores y el programa los trata de diferente manera, se
identifica una clase vlida y otra no vlida para cada valor

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En esta diapositiva se muestran algunos ejemplos sencillos de aplicacin de las reglas que
acabamos de presentar
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El ltimo paso del mtodo es el uso de las clases de equivalencia para identificar los casos de
prueba correspondientes.
El objetivo es minimizar el nmero de casos de prueba, por tanto cada caso de prueba debe
considerar tantas condiciones de entrada como sea posible.
No obstante, es necesario disear con cuidado los casos de prueba de manera que no se
enmascaren fallos. As, para crear los casos de prueba a partir de las clases de equivalencia se han
de seguir los siguientes pasos:
1. Asignar a cada clase de equivalencia un nmero nico.
2. Hasta que todas las clases de equivalencia hayan sido cubiertas por los casos de prueba, se
tratar de escribir un caso que cubra tantas clases vlidas no incorporadas como sea posible.
3. Hasta que todas las clases de equivalencia no vlidas hayan sido cubiertas por casos de
prueba, escribir un caso para cubrir una nica clase no vlida no cubierta.
La razn de cubrir con casos individuales las clases no vlidas es que ciertos controles de entrada
pueden enmascarar o invalidar otros controles similares.
Por ejemplo, si tenemos dos clases vlidas: introducir cantidad entre 1 y 99 y seguir con
letra entre A y Z, el caso 105 & (dos errores) puede dar como resultado 105 fuera de rango
de cantidad, y no examinar el resto de la entrada no comprobando as la respuesta del
sistema ante una posible entrada no vlida.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La diapositiva muestra un ejemplo de aplicacin.
Supongamos una aplicacin bancaria en la que el operador debe proporcionar un cdigo, un
nombre para que el usuario identifique la operacin (por ejemplo, nmina) y una orden que
disparar una serie de funciones bancarias:
Especificacin:
Cdigo de rea: Nmero de tres cifras que no comienza ni por 0 ni por 1
Nombre: Seis caracteres
Orden: cheque, depsito, pago factura, retirada de fondos
Aplicacin de las reglas
Cdigo:
La entrada proporcionada podra ser o no un nmero. Por tanto, la condicin de entrada
es lgica, con lo que definiramos una clase valida (es nmero) y otra no valida (no es
nmero):
Clase vlida (es nmero). El nmero tiene que estar en un rango de valores, por
tanto:
Subclase vlida: (200 cdigo 999)
Dos subclases no vlidas: (cdigo < 200) y (999 < cdigo)
Clase invlida (no es nmero)
Nombre de identificador: nmero especfico de valores
Clase vlida: 6 caracteres
Dos clases invlidas: ms o menos de 6 caracteres
Orden: conjunto de valores (4 valores vlidos):
Una clase vlida para cada orden: cheque, depsito
Una clase no vlida: p.e. divisas
As, las tablas de la parte inferior de la diapositiva muestran los casos generados presuponiendo el
orden de entrada Cdigo Operacin Orden


Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La experiencia muestra que los casos de prueba que exploran las condiciones lmite producen
mejor resultado que aquellos que no lo hacen. Es decir, es ms probable que los defectos del
software se acumulen en estas condiciones lmite, que se hayan en los mrgenes de la clase de
equivalencia (directamente arriba y abajo), tanto de entrada como de salida.
Por ello, se ha desarrollado el anlisis de valores lmite como tcnica de prueba. Esta tcnica nos
lleva a elegir los casos de prueba que ejerciten los valores lmite.
As pues, el anlisis de valores lmite complementa la tcnica de particin de equivalencia de
manera que:
En lugar de seleccionar cualquier caso de prueba de las clases vlidas e invlidas, se eligen los
casos de prueba en los extremos.
En lugar de centrarse slo en el dominio de entrada, los casos de prueba se disean tambin
considerando el dominio de salida.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Las pautas para desarrollar casos de prueba con esta tcnica son:
Si una condicin de entrada especifica un rango de valores, se disearn casos de prueba para
los dos lmites del rango, y otros dos casos para situaciones justo por debajo y por encima de
los extremos.
Ejemplo de entrada: rango permitido de entrada (-1.0 valor 1.0)
Casos: -1.0; 1.0; -1.001 y 1.001 (suponiendo que se admitan 3 decimales)
Ejemplo salida: el descuento por compra al contado variar entre el 6 y el 50% del
importe total
Casos: escribir casos para intentar obtener descuentos del 5.99, el 6, el 50 y el 50.01%
Si una condicin de entrada especifica un nmero de valores, se disean dos casos de prueba
para los valores mnimo y mximo, adems de otros dos casos de prueba para valores justo
por encima del mximo y justo por debajo del mnimo.
Ejemplo entrada: el fichero de entrada tendr de 1 a 255 registros
Casos: 0, 1, 255, 256 registros
Ejemplo salida: el programa mostrar de 1 a 4 listados
Casos: escribir casos para intentar generar 0, 1, 4 y 5 listados.
Si la entrada o salida de un programa es un conjunto ordenado (p.e. una tabla, una lista, etc.)
habr que prestar atencin a los elementos primero y ltimo del conjunto.
Finalmente, respecto a los valores de salida conviene recordar que no siempre valores lmites de
entada generan valores lmites de salida.
Por ejemplo, vase la funcin seno
sen(90) = 1 pero sen(180) = 0
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Una vez conocidas las tcnicas de diseo y ejecucin, debemos analizar cmo se plantea la
utilizacin de las pruebas en el ciclo de vida. La estrategia de aplicacin y la planificacin de las
pruebas pretenden integrar el diseo de los casos de prueba en una serie de pasos bien
coordinados a travs de la creacin de distintos niveles de prueba, con diferentes objetivos.
Adems, permite la coordinacin del personal de desarrollo, del departamento de aseguramiento
de calidad (o algn grupo independiente dedicado a la V&V) y del cliente, gracias a la definicin
de los papeles que deben desempear cada uno y la forma de llevarlos a cabo.
La estrategia proporciona un mapa que describe los pasos que hay que llevar a cabo como parte
de la prueba, cundo se deben planificar y realizar esos pasos, y cunto esfuerzo, tiempo y
recursos se van a requerir. Por tanto, cualquier estrategia de prueba debe incorporar la
planificacin de la prueba, el diseo de casos de prueba, la ejecucin de las pruebas y la
agrupacin y evaluacin de los datos resultantes.
Una estrategia de prueba del software debe ser suficientemente flexible para promover la
creatividad y la adaptabilidad necesarias para adecuar la prueba a todos los grandes sistemas
basados en software. Al mismo tiempo, la estrategia debe ser suficientemente rgida para
promover un seguimiento razonable de la planificacin y la gestin a medida que progresa el
proyecto.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Las pruebas son un conjunto de actividades que se pueden planificar por adelantado y llevar a
cabo sistemticamente. Por esta razn, se debe definir en el proceso una plantilla para las
pruebas del software: un conjunto de pasos en los que podamos situar los mtodos especficos de
diseo de casos de prueba. Una estrategia debe proporcionar una gua al profesional y
proporcionar un conjunto de hitos para el jefe de proyecto.
En la literatura se han propuesto diversas estrategias de prueba del software. Todas proporcionan
al ingeniero software una plantilla para la prueba y todas tienen las siguientes caractersticas
generales:
Las pruebas comienzan a nivel de mdulo y trabajan hacia fuera, hacia la integracin de
todo el sistema. Una estrategia de prueba de software debe incluir pruebas de bajo nivel que
verifiquen que todos los pequeos segmentos de cdigo fuente se han implementado
correctamente, as como pruebas de alto nivel que validen las principales funciones del
sistema frente a los requisitos del cliente. Segn el momento, son apropiadas diferentes
tcnicas de prueba.
La prueba la lleva a cabo el responsable del desarrollo del software y (para grandes proyectos)
un grupo independiente de pruebas.
La prueba y la depuracin son actividades diferentes, pero la depuracin se debe incluir en
cualquier estrategia de prueba.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En general, la estrategia de pruebas suele seguir las siguientes etapas:
Las pruebas comienzan a nivel de mdulo.
Una vez terminadas, progresan hacia la integracin del sistema completo y su instalacin.
Culminan cuando el cliente acepta el producto y se pasa a su explotacin inmediata.
Esta serie tpica de etapas se describe con mayor detalle a continuacin:
Se comienza con la prueba de cada mdulo, que normalmente la realiza el propio personal de
desarrollo en su entorno.
Con el esquema del diseo del software, los mdulos probados se integran para comprobar
sus interfaces en el trabajo conjunto (prueba de integracin).
El software totalmente ensamblado se prueba como un conjunto para comprobar si cumple o
no tanto los requisitos funcionales como los de rendimiento, seguridad, etc. (prueba funcional
o de validacin). Este nivel de prueba coincide con el de la prueba del sistema cuando no se
trate de software empotrado u otros tipos de especiales de aplicaciones.
El software ya validado se integra con el resto del sistema (por ejemplo, elementos mecnicos,
interfaces electrnicas, etc.) para probar su funcionamiento conjunto (prueba del sistema).
Por ltimo, el producto final se despliega de forma que el usuario compruebe en su propio
entorno de explotacin si lo acepta como est o no (prueba de aceptacin).
En realidad podemos establecer una correspondencia entre las distintas etapas del desarrollo y
los niveles de prueba.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
As (vase la figura), dicha relacin se concreta en un modelo de ciclo de vida que resulta
clarificador para entender el proceso de pruebas, denominado ciclo en V (uve)
La prueba de mdulo (prueba de unidad) centra sus actividades en ejercitar la lgica del
mdulo (caja blanca) y los distintos aspectos de la especificacin de las funciones que debe
realizar el mdulo (caja negra).
La prueba de integracin debe tener en cuenta los mecanismos de agrupacin de mdulos
fijados en la estructura del programa, as como, en general, las interfaces entre los
componentes de la arquitectura del software.
La prueba del sistema debe centrar sus comprobaciones en el cumplimiento de los objetivos
indicados para el sistema.
La prueba de aceptacin sirve para que el usuario pueda verificar si el producto final se ajusta
a los requisitos por l fijados (normalmente en forma de criterios de aceptacin en el
contrato) o, en ltimo caso, en funcin de lo que indique el contrato.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La prueba de unidad es la primera fase de las pruebas dinmicas (recurdese la distincin
respecto a las revisiones formales, de naturaleza esttica) y se realizan sobre cada mdulo de
manera independiente.
El objetivo es comprobar que el mdulo, entendido como una unidad funcional, est
correctamente codificado.
Para ello, cada mdulo ser probado por separado, y lo har generalmente la persona que lo cre
(a diferencia de otros niveles de prueba, donde el grupo de aseguramiento de calidad interviene
en el proceso), utilizando herramientas de depuracin. Debemos recordar que nos referimos a las
pruebas formales que permiten declarar que un mdulo est listo y terminado (paso a control de
configuracin), no a las pruebas informales que los programadores efectan mientras desarrollan
el cdigo.
En este contexto, un mdulo se entiende como un componente software que cumple las
siguientes caractersticas:
Debe ser un bloque bsico de construccin de programas.
Debe implementar una funcin independiente y simple.
Podr ser probado al cien por cien por separado.
No deber tener ms de 500 lneas de cdigo.
El objetivo de la prueba de unidad es aproximarse todo lo posible al ideal de exhaustividad,
utilizando eminentemente el enfoque de caja blanca, aunque se complementa con caja negra
(criterios de cobertura lgica y funcional respectivamente). Ntese que las pruebas de caja negra
(los casos de prueba) se pueden especificar antes de que el mdulo sea programado, no as las
pruebas de caja blanca.
El hecho de incorporar casos de caja blanca (a diferencia de lo que ocurre en el resto de niveles)
se debe a las siguientes razones:
El tamao del mdulo o grupo de mdulos es apropiado para poder usar tcnicas de caja
blanca que permitan examinar toda la lgica del programa.
El tipo de defectos que se buscan coincide con los propios de la lgica detallada de cada
mdulo.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Debido a que un componente no es un programa independiente, cualquier prueba unitaria suele
implicar la necesidad de disponer de otro software que reemplaza a las unidades con las que la
unidad que queremos probar debe interactuar, simulando su comportamiento. En general, estos
mdulos adicionales pueden ser de dos tipos: controladores o drivers y resguardos o stubs.
Un controlador o driver no es ms que un programa principal que acepta los datos del caso de
prueba, pasa estos datos al mdulo e imprime los resultados importantes. Por tanto:
Se encarga de declarar o definir cualquier variable o constante que necesite el mdulo que
queremos probar y debe encargarse de comprobar el estado de esas variables o constantes
Proporciona los mecanismos necesarios para recoger las entradas y mostrar las salidas
necesarias
Invoca al mdulo que estamos probando y le proporciona la informacin que necesita cuando
se le invoca
Soporta la gestin de errores o interrupciones elevados desde el mdulo probado (los captura
o los eleva cuando sea necesario)
Un resguardo o stub proporciona la interfaz del mdulo subordinado, lleva a cabo una mnima
manipulacin de datos, imprime una verificacin de entrada y devuelve control al mdulo de
prueba que lo invoc. Por tanto, un stub:
Proporciona una interfaz idntica a la del mdulo que reemplaza
Soporta el mismo comportamiento que dicho mdulo. Por ejemplo, con una simple sentencia
de retorno.
Los controladores y los resguardos son una sobrecarga de trabajo, ya que ambos son software
que debe desarrollarse pero que no se entrega con el producto final. Si los controladores y
resguardos son sencillos, el trabajo adicional es relativamente pequeo. En cualquier caso, el
esfuerzo se ve compensado por el hecho de que podrn ser reutilizados innumerables veces a lo
largo del proceso de desarrollo (cada vez que se necesite probar el mdulo porque haya habido
un cambio en el sistema). Adems, existen algunas herramientas que facilitan o soportan la
generacin (semi-)automtica de drivers y stubs.
Finalmente, no debemos olvidar que la complejidad de drivers y stubs debe mantenerse
controlada: si resultan demasiado complejos llegamos a la situacin de tener que probarlos para
comprobar que no introducen ningn error por s mismos.


Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
An cuando los mdulos de un programa funcionen bien por separado es necesario probarlos
conjuntamente: un mdulo puede tener un efecto adverso o inadvertido sobre otro mdulo; las
subfunciones, cuando se combinan, pueden no producir la funcin principal deseada; la
imprecisin aceptada individuamente puede crecer hasta niveles inaceptables al combinar los
mdulos; los datos pueden perderse o malinterpretarse entre interfaces, etc. Por ejemplo,
supongamos que la funcin B consume un valor producido por la funcin A. An siendo ambos
reales, podra ser que al funcionar conjuntamente, B no pudiese procesar la entrada
proporcionada por A porque fueran reales de distinta precisin.
Por lo tanto, es necesario probar el software ensamblando todos los mdulos probados
previamente. sta es el objetivo de las pruebas de integracin.
A menudo hay una tendencia a intentar una integracin no incremental, tambin denominada
enfoque big-bang: se prueba cada mdulo por separado y luego se integran todos de una vez y se
prueba el programa completo. Obviamente, el resultado puede ser un poco catico: se pueden
producir un gran nmero de errores y ser prcticamente imposible identificar el mdulo (o
mdulos) que los provoc.
Por contra, se puede aplicar la integracin incremental, donde se combina el siguiente mdulo
que se debe probar con el conjunto de mdulos que ya han sido probados. De esta forma el
programa se prueba en pequeas porciones y los errores y los defectos que los provocan son ms
fciles de detectar. Existen dos tipos de integracin incremental, la denominada ascendente y
descendente. Veamos a continuacin los pasos a seguir en cada caso.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La integracin incremental ascendente comienza con la construccin y prueba de los mdulos
atmicos.
1. Se combinan los mdulos de bajo nivel en grupos que realicen una funcin o sub-funcin
especfica (o quizs si no es necesario, individualmente).
2. Se escribe un controlador (un programa de control de la prueba) para coordinar la entrada y
salida de los casos de prueba. De este modo permitimos simular la llamada a los mdulos,
introducir datos de prueba y recoger resultados.
3. Se prueba el grupo utilizando su controlador
4. Se eliminan los controladores y se sustituyen por los mdulos de nivel superior en la
jerarqua, movindose hacia arriba por la estructura del programa.
Ntese que con este tipo de integracin incremental, la funcionalidad que deberan proporcionar
los mdulos subordinados siempre est disponible y se elimina la necesidad de resguardos
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ejemplo: supongamos la siguiente estructura de programa
(NOTA: en las siguientes figuras, a los controladores o drivers se
les denomina Impulsores)




En la primera fase se realizan las pruebas unitarias de E, F, G y D






En la segunda, sin embargo, se puede observar que se realizan
simultneamente la prueba unitaria de B y C, y la integracin de
B-E y C-[F-G]. Esta mezcla de pruebas unitarias y de integracin
ocurre en todas las integraciones incrementales.




El ltimo paso consiste en la incorporacin de A y la prueba del
programa completo, que no requiere controlador, ya que todo
el cdigo de gestin de la entrada y la salida del programa est
incorporado. Por tanto, la introduccin de datos de prueba y la
visualizacin de resultados se hace por la entrada/salida
convencional.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Las etapas fundamentales de la integracin incremental descendente son:
Comienza por el mdulo de control principal (el de mayor nivel, tambin conocido como
programa principal o mdulo raz). Se escriben mdulos ficticios o stubs para simular la presencia
de los subordinados ausentes que sern llamados por el mdulo raz.
Una vez probado el mdulo raz se sustituye uno de los subordinados ficticios por el mdulo
correspondiente segn el orden elegido. Se incorporan nuevos stubs para recoger las llamadas del
nuevo mdulo incorporado.
Se ejecutan las pruebas correspondientes cada vez que se incorpora un mdulo nuevo y al
concluir se sustituye otro mdulo ficticio por el mdulo real correspondiente
Conviene repetir algunos casos de prueba de los ya ejecutados anteriormente para comprobar
que no se ha introducido ningn defecto nuevo.


Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
No existe un procedimiento general para determinar cul de los mdulos subordinados posibles
es mejor incorporar primero, es decir, no se puede dar una regla general que permita determinar
la secuencia ptima de incorporacin de mdulos. Hay que estudiar cada caso para decidir la
estrategia optima. No obstante se pueden seguir las siguientes reglas generales:
Si hay secciones crticas (por ejemplo un mdulo especialmente complejo que implementa un
algoritmo nuevo y es por tanto ms propenso a errores) se debe definir la secuencia de
integracin de manera que se prueben lo antes posible.
El orden de integracin debe incorporar cuanto antes los mdulos de entrada/salida para
facilitar la ejecucin de pruebas
Existen dos formas ordenes fundamntales de integracin descendente:
Primero en profundidad: se van completando ramas del rbol (A B E C F G D)
Primero en anchura: se van completando niveles (horizontales) de jerarqua (A B C D E F
G)


Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La Figura muestra un ejemplo de integracin descendiente por profundidad.
Si se prueba M1, M2 y M4 sera entonces necesario preparar resguardos para M5 y M6, y para
M7 y M3.
Estos resguardos se han representado en la figura como R5, R6, R7 y R4 respectivamente.
Una vez realizada esta primera prueba se sustituira R5 por M5, seguidamente R6 por M6 y as
sucesivamente hasta probar todos los mdulos.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La Figura muestra un ejemplo de integracin descendiente por profundidad.
Si se prueba M1, M2 y M4 sera entonces necesario preparar resguardos para M5 y M6, y para
M7 y M3.
Estos resguardos se han representado en la figura como R5, R6, R7 y R4 respectivamente.
Una vez realizada esta primera prueba se sustituira R5 por M5, seguidamente R6 por M6 y as
sucesivamente hasta probar todos los mdulos.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Cada vez que se aade un nuevo mdulo como parte de una prueba de integracin, el software cambia:
Se establecen nuevos caminos de flujo de datos
Pueden ocurrir nuevas E/S
Se invoca una nueva lgica de control
Estos cambios pueden causar problemas con funciones que antes trabajaban perfectamente. La prueba de regresin es
una estrategia importante para reducir este tipo de efectos colaterales. En general, se deben ejecutar pruebas de
regresin cada vez que se realice un cambio importante en el software (incluyendo la integracin de nuevos mdulos)
En el contexto de las pruebas de integracin, la prueba de regresin es volver a ejecutar un subconjunto de pruebas que
se han llevado a cabo anteriormente para asegurarse de que los cambios no han propagado efectos colaterales no
deseados.
En un contexto ms amplio, las pruebas con xito (de cualquier tipo) dan como resultado el descubrimiento de errores, y
los errores hay que corregirlos. Cuando se corrige el software, se cambia algn aspecto de la configuracin del software
(el programa, su documentacin o los datos que lo soportan). La prueba de regresin es la actividad que ayuda a asegurar
que los cambios (debidos a las pruebas o por otros motivos) no introducen un comportamiento no deseado o errores
adicionales. As, la prueba de regresin consiste en la repeticin selectiva de pruebas para detectar fallos introducidos
durante la modificacin de un sistema o componente de un sistema. Es decir, su objetivo es comprobar que los cambios
no han producido efectos adversos no intencionados o que se siguen cumpliendo los requisitos especificados. Este tipo de
pruebas ha de realizarse, tanto durante el desarrollo cuando se produzcan cambios en el software, como durante el
mantenimiento.
La prueba de regresin se puede hacer manualmente, volviendo a realizar un subconjunto de todos los casos de prueba o
automatizarse utilizando herramientas de reproduccin de captura. Estas herramientas permiten capturar casos de
prueba y sus resultados para su subsiguiente reproduccin y comparacin.
A medida que progresa la prueba de integracin, el nmero de pruebas de regresin puede crecer demasiado. Por tanto,
el conjunto de pruebas de regresin debera disearse para incluir slo aquellas pruebas que traten una o ms clases de
errores en cada una de las funciones principales del programa. No es prctico ni eficiente volver a ejecutar cada prueba
de cada funcin del programa despus de un cambio.
Por lo tanto, las pruebas de regresin deben disearse de manera que:
Se prueben ntegramente los mdulos que se han cambiado.
Se contemple cuales son los mdulos que no han cambiado y que han sido afectados por los cambios producidos.
De esta formar, el conjunto de pruebas de regresin contiene tres clases diferentes de casos de prueba:
Una muestra representativa de pruebas que ejercite todas las funciones del software
Pruebas adicionales que se centran en las funciones del software que se van a ver probablemente afectadas por el
cambio
Pruebas que se centran en los componentes del software que han cambiado
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Finalmente, ya hemos introducido con anterioridad los principios de la integracin NO
incremental. En este tipo de integracin cada mdulo requiere para ser probado:
Un controlador que transmite los datos de prueba al mdulo y muestra los resultados de
dichos casos de prueba
Uno o ms stubs o resguardos que simulan la funcin de cada mdulo subordinado llamado
por el mdulo que se va a probar
As, la prueba de cada mdulo sigue el esquema mostrado en la diapositiva.
Despus de probar cada mdulo por separado se ensamblan todos de una sola vez para formar el
programa completo y probarlo en conjunto.
Ntese que la integracin NO incremental es el nico caso en el que las pruebas de unidad y las
de integracin estn totalmente separadas.


Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En la Integracin No Incremental se requiere menos tiempo dedicado a la ejecucin de las pruebas, ya que
se prueba de una sola vez la combinacin de los mdulos, en lugar de ejecutar pruebas cada vez que se
incorpora un mdulo. A cambio, se dedica ms tiempo para la codificacin de mdulos auxiliares
(controladores y resguardos) ya que la prueba de cada mdulo implica el desarrollo de controladores y
resguardos ad-hoc.
Por otro lado, cuando se adopta un enfoque de Integracin Incremental se reduce obviamente el tiempo
dedicado la codificacin de mdulos auxiliares para las pruebas unitarias. Adems, los defectos y errores en
las interfaces se detectan antes, ya que se empiezan a probar antes las interacciones entre mdulos.
Finalmente, se simplifica el proceso de depuracin, ya que la fuente de un error o defecto en cualquier paso
del proceso de integracin, ser muy probablemente el ltimo mdulo incorporado
Respecto a la seleccin de una aproximacin incremental ascendente o descendente, podemos decir que las
ventajas de una estrategia tienden a convertirse en desventajas de la otra.
La principal desventaja del enfoque descendente es la necesidad de codificar muchos resguardos, que
suelen ser ms complejos que los controladores. Por ejemplo, la entrada/salida suele descansar en los
mdulos de bajo nivel y codificar mdulos que la simulen suele resultar tarea complicada, sino
imposible. No obstante, los problemas asociados con la complejidad de los resguardos podra verse
compensada por la ventaja de poder probar de antemano las principales funciones de control. Una vez
codificados dichos resguardos, el enfoque descendente permite ver antes una estructura previa del
programa, lo que facilita el hacer demostraciones y ayuda a mantener la moral del equipo de desarrollo.
Por otro lado, la principal desventaja de la integracin ascendente es que el programa como entidad no
existe hasta que se ha aadido el ltimo mdulo. No obstante, este inconveniente se compensa con la
mayor facilidad de diseo de casos de prueba y con el hecho de que la necesidad de desarrollar
resguardos se reemplace por la de desarrollar controladores, menos complejos. Adems, dado su
carcter ms especfico, suele resultar ms fcil crear entradas para probar estos mdulos que los
mdulos de alto nivel.
Obviamente, ya que en el enfoque ascendente se prueban antes los mdulos de bajo nivel, resultar ms
adecuado para desarrollar pruebas en aquellos sistemas en los que esperamos que sean la principal fuente
de defectos.
La seleccin de una estrategia de integracin depende de las caractersticas del software y, a veces, de la
planificacin del proyecto. En general, el mejor compromiso puede ser un enfoque combinado (a veces
denominado prueba sndwich) que use la descendente para los niveles superiores de la estructura del
programa, junto con la ascendente para los niveles subordinados.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Este tipo de pruebas tiene como propsito ejercitar profundamente el sistema para verificar que
se han integrado adecuadamente todos los elementos hardware y software del propio sistema
entre s, y con los elementos software o hardware de otros sistemas con los que deba interactuar.
Concretamente se debe comprobar:
El cumplimiento de los requisitos funcionales establecidos. Para ello, se disean casos de
prueba aplicando tcnicas de caja negra a las especificaciones.
El funcionamiento y rendimiento de las interfaces hardware, software y de usuario. Para ello
se deben disear casos de prueba que prueben toda la informacin procedente de otros
elementos del sistema.
La adecuacin de la documentacin de usuario.
El rendimiento y respuesta en condiciones lmite y de sobrecarga. Para ello se disearn casos
de prueba que comprueben el rendimiento del sistema (pruebas de volumen de datos, de
lmites de procesamiento, etc.) Este tipo de pruebas suelen llamarse pruebas de sobrecarga
(stress-testing)
Hay cuatro tipos de pruebas de sistema. Aunque cada una tiene un propsito distinto, todas
trabajan para verificar que se han integrado adecuadamente todos los elementos del sistema y que
realizan las funciones apropiadas.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Muchos sistemas deben ser capaces recuperarse de los fallos y continuar trabajando. En estos
casos, el sistema debe ser capaz de corregir un fallo en un determinado periodo de tiempo para
evitar que se produzca un serio dao econmico. Incluso existen sistemas an ms exigentes, que
deberan ser capaces de tolerar los fallos; es decir, un fallo no debera hacer que cesara el
funcionamiento de todo el sistema.
El objetivo de la prueba de recuperacin es comprobar que el sistema es capaz de recuperarse de
un fallo grave y seguir funcionando. Para ello, fuerza el fallo del sistema de diferentes formas y
verifica que la recuperacin se lleva a cabo de manera apropiada. De esta forma, podremos
identificar cuanto tiempo necesita el sistema para volver a su estado normal y si efectivamente
recupera dicho estado normal.
Si la recuperacin es automtica (llevada a cabo por el propio sistema) hay que comprobar
que el sistema se inicializa correctamente y que los mecanismos de recuperacin del estado
del sistema, de recuperacin de datos y el proceso de re-arranque funcionan correctamente.
Si la recuperacin requiere la intervencin humana, hay que evaluar los tiempos medios de
reparacin (MTTR - Mean/Minimum/Maximum Time to Recovery/ Repair/Respond/Restore)
para determinar si estn dentro de unos lmites aceptables
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Cualquier sistema que maneje informacin sensible o lleve a cabo acciones que puedan perjudicar
(o beneficiar) impropiamente a sus usuarios es un posible objetivo para entradas impropias o
ilegales al sistema.
Este acceso al sistema incluye desde piratas informticos que intentan entrar en los sistemas por
deporte o aficin a empleados disgustados que lo hacen por venganza o delincuentes
cibernticos.
La prueba de seguridad intenta verificar que los mecanismos de proteccin incorporados en el
sistema lo protegern de este tipo de accesos no deseados.
Durante la prueba, el responsable desempea el papel de un individuo que desea realizar un
acceso no autorizado al sistema. En este sentido todo vale: debe intentar conseguir las claves de
acceso por cualquier medio, desarrollar programas a medida para atacar al sistema,
bloquendolo, denegando el servicio a otras personas, provocando cadas, etc.
Con tiempo y recursos suficientes, una buena prueba de seguridad terminar por acceder al
sistema. El papel del diseador del sistema es hacer que el coste de la entrada ilegal sea mayor
que el valor de la informacin obtenida.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Frente a las pruebas que hemos estado viendo, cuyo objetivo era la evaluacin del
funcionamiento y rendimiento del programa en condiciones normales, las pruebas de resistencia
estn diseadas para enfrentar a los programas con situaciones anormales. En esencia, el objetivo
de la prueba de resistencia es responder a la pregunta: A qu potencia puedo ponerlo a
funcionar antes de que falle?
Para ello, la prueba de resistencia ejecuta un sistema de forma que se produzca una demanda de
recursos en cantidad, frecuencia o volmenes anormales.
Ejemplos: casos de prueba que generen diez interrupciones por segundo, cuando lo normal son
una o dos; que requieran el mximo de memoria o de otros recursos; que que produzcan
excesivas bsquedas en disco; que incrementen la frecuencia de datos de entrada con el fin de
comprobar cmo responden las funciones de entrada.
En esencia, lo que el responsable de la prueba intenta es romper el programa.
Una variante de la prueba de resistencia es una tcnica denominada prueba de sensibilidad. En
algunas situaciones (la ms comn se da con algoritmos matemticos), un rango de datos muy
pequeo dentro de los lmites vlidos puede producir un resultado errneo o una profunda
degradacin del rendimiento. Esta situacin es anloga a la singularidad matemtica, que se da
con algunas funciones que presentan comportamientos extraos e inesperados cuando se le
asignan determinados valores a la variable independiente (p.e.: 1/x; x=0).
La prueba de sensibilidad intenta descubrir combinaciones de datos dentro de una clase de
entrada vlida que pueda producir inestabilidad o resultados anmalamente incorrectos.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El aspecto clave en los sistemas de tiempo real y los sistemas empotrados lo juegan los requisitos
no funcionales, es decir, los requisitos de rendimiento. Un sistema de este tipo que satisface los
requisitos funcionales pero no es capaz de hacerlo ajustndose a los requisitos de rendimiento
especificados no es un sistema correcto.
La prueba de rendimiento est diseada precisamente para probar el rendimiento del software
en tiempo de ejecucin dentro del contexto de un sistema integrado. En realidad abarca todos los
pasos del proceso de prueba, ya que deberamos ser capaces de asegurar que se satisfacen los
requisitos de rendimiento incluso a nivel de mdulo. Y la mejor forma de hacerlo es realizar
pruebas de rendimiento unitarias en paralelo con las pruebas de caja blanca. Sin embargo, hasta
que no estn completamente integrados todos los elementos del sistema no se puede asegurar
realmente que el rendimiento del sistema es el adecuado.
Las pruebas de rendimiento suelen realizarse en paralelo con las de resistencia y se acostumbra a
utilizar software y hardware que soporte la medicin exacta de la utilizacin de recursos.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Si la prueba del sistema determin la capacidad real del sistema y permiti a la organizacin de
desarrollo tener confianza en que estaba listo para el funcionamiento, la prueba de aceptacin
pretende transmitir esta confianza al usuario.
As, el objetivo de la prueba de validacin aceptacin es comprobar si el producto est listo
para ser desplegado y utilizado en el entorno del usuario. En el fondo, lo ms importante para
evaluar el uso operativo del software suele ser la fiabilidad y la facilidad de uso del mismo. As, la
prueba de aceptacin pretende comprobar que el software funciona de acuerdo con las
expectativas razonables del cliente, que debieron quedar recogidas en la Especificacin de
Requisitos del Software (lo deseable es que quedaran recogidos en un seccin ad-hoc
denominada Criterios de validacin).
Podemos decir entonces que la prueba de aceptacin est centrada en comprobar que se
satisfacen los requisitos de usuario. En realidad, la prueba intenta demostrar que no se cumplen
los requisitos, los criterios de aceptacin o el contrato. Si no se consigue demostrar esto el cliente
deber aceptar el producto y la prueba puede considerarse entonces como la fase final del
proceso de desarrollo software (que da paso a la de mantenimiento).
Las recomendaciones generales que pueden darse para la prueba de aceptacin son las
siguientes:
Se debe contar con la participacin activa del usuario, que debe ejecutar los casos de prueba
ayudado por miembros del equipo de pruebas.
Debemos disponer de criterios de aceptacin previamente aprobados por el usuario.
No hay que olvidar validar tambin la documentacin y los procedimientos de uso (por
ejemplo, mediante una auditora)
En el resultado de la prueba puede darse una de las dos condiciones siguientes:
Las caractersticas de funcionamiento o de rendimiento estn de acuerdo con las
especificaciones y son aceptables
Se descubre una desviacin de las especificaciones y se crea una lista de deficiencias. En
general, las desviaciones o errores descubiertos en esta fase del proyecto raramente se
pueden corregir antes de la terminacin planificada, por lo que a menudo es necesario
negociar con el cliente un mtodo para resolver las deficiencias

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Es virtualmente imposible que un desarrollador de software pueda prever cmo utilizar el
usuario realmente el programa.
Se pueden malinterpretar las instrucciones de uso
Se pueden utilizar combinaciones de datos extraas
Una salida que puede parecer clara para el responsable de las pruebas puede ser ininteligible
para el usuario
En proyectos de desarrollo de software a medida, se llevan a cabo una serie de pruebas de
aceptacin que, idealmente, se deben realizar en el entorno en el que se utilizar el sistema (lo
que incluye al personal que lo maneja). Si se trata de un sistema contratado, la prueba se realiza
bajo control de la organizacin de desarrollo en el entorno real de trabajo, ayudando al usuario
(prueba alfa). Podemos decir por tanto que las pruebas alfa se llevan a cabo en un entorno
controlado.
En el caso de productos de inters general (por ejemplo, paquetes informticos), se entregan
versiones (versiones beta) a usuarios. Por tanto, la prueba beta es una aplicacin en vivo del
software en un entorno que no puede ser controlado por el desarrollador. El cliente registra
todos los problemas (reales o imaginarios) que encuentra durante la prueba beta e informa a
intervalos regulares al desarrollador. Para responder a los problemas encontrados durante la
prueba beta, el equipo de desarrollo introduce modificaciones que resultan en una nueva versin
del producto para todos los clientes.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La documentacin de las pruebas es necesaria, no slo para una buena organizacin de las mismas,
sino tambin para asegurar su reutilizacin y la eficacia y eficiencia del proceso de pruebas. En este
sentido, la figura muestra los distintos documentos de trabajo que deberan producirse o
manejarse segn el estndar IEEE 829-1998, que describe los tipos de documentos que pueden o
deben producirse durante el proceso de prueba.
El objetivo del Plan de Pruebas es sealar el enfoque, los recursos y el esquema de actividades de
prueba, as como los elementos a probar, las caractersticas, las actividades de prueba, el personal
responsable y los riesgos asociados.
En el fondo, si pensamos en las pruebas como un proceso independiente, podemos ver el Plan de
Pruebas como el Plan de Proyecto del proyecto de pruebas que especifica actividades, tiempos,
personal, recursos, riesgos, etc. para el desarrollo de las pruebas.
La estructura fijada por el estndar para dicho plan es la siguiente:
1. Identificador nico del documento (para gestin de la configuracin)
2. Introduccin y resumen de elementos y caractersticas a probar
3. Elementos software a probar (programas o mdulos)
4. Caractersticas a probar
5. Caractersticas que no se probarn
6. Enfoque general de la prueba (actividades, tcnicas, herramientas, etc.)
7. Criterios de paso/fallo para cada elemento
8. Criterios de suspensin y requisitos de reanudacin
9. Documentos a entregar (al menos los descritos en el estndar)
10. Actividades de preparacin y ejecucin de pruebas
11. Necesidades de entorno
12. Responsabilidades en la organizacin y realizacin de las pruebas
13. Necesidades de personal y formacin
14. Esquema de tiempos (tiempos estimados, hitos, etc.)
15. Riesgos asumidos por el plan y planes de contingencias para cada riesgo
16. Aprobaciones y firmas con nombre y puesto desempeado
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El objetivo de la Especificacin del Diseo de Pruebas es especificar los refinamientos necesarios
sobre el enfoque general reflejado en el plan e identificar las caractersticas que se deben probar
con este diseo de pruebas.
Podemos ver este documento como una forma de describir la estrategia concreta que seguiremos
para un conjunto de caractersticas particular y la forma en que pondremos en puesta cada
tcnica.
La estructura fijada por el estndar para dicho documento es la siguiente:
Identificador nico para la especificacin. Proporcionar tambin una referencia del plan
asociado (si existe)
Caractersticas a probar de los elementos software (y combinaciones de caractersticas)
Detalles sobre el plan de pruebas del que surge este diseo, incluyendo las tcnicas de prueba
especfica y los mtodos de anlisis de resultados
Identificacin de cada prueba:
Identificador
Casos que se van a utilizar
Procedimientos que se van a seguir
Criterios de paso/fallo de la prueba (criterios para determinar si una caracterstica o
combinacin de caractersticas ha pasado con xito la prueba o no)
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El objetivo de la Especificacin del Caso de Prueba es definir uno de los casos de prueba
identificado por una especificacin del diseo de las pruebas.
La estructura fijada por el estndar para dicho documento es la siguiente:
Identificador nico de la especificacin
Elementos software (por ejemplo, mdulos) que se van a probar: definir dichos elementos y
las caractersticas que ejercitar este caso
Especificaciones de cada entrada requerida para ejecutar el caso (incluyendo las relaciones
entre las diversas entradas; por ejemplo, la sincronizacin de las mismas)
Especificaciones de todas las salidas y las caractersticas requeridas (por ejemplo, el tiempo
respuesta) para los elementos que se van a probar
Necesidades de entorno (hardware, software y otras como, por ejemplo, el personal)
Requisitos especiales de procedimiento (o restricciones especiales en los procedimientos para
ejecutar este caso).
Dependencias entre casos (por ejemplo, listar los identificadores de los casos que se van a
ejecutar antes de este caso de prueba)
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El objetivo de la Especificacin del Procedimiento de Prueba es especificar los pasos para la
ejecucin de un conjunto de casos de prueba o, ms generalmente, los pasos a seguir para
analizar un elemento software con el propsito de evaluar un conjunto de caractersticas del
mismo.
La estructura fijada por el estndar para dicho documento es la siguiente:
Identificador nico de la especificacin y referencia a la correspondiente especificacin de
diseo de prueba
Objetivo del procedimiento y lista de casos que se ejecutan con l
Requisitos especiales para la ejecucin (por ejemplo, entorno especial o personal especial)
Pasos en el procedimiento. Adems de la manera de registrar los resultados y los incidentes
de la ejecucin, se debe especificar:
La secuencia necesaria de acciones para preparar la ejecucin
Acciones necesarias para empezar la ejecucin
Acciones necesarias durante la ejecucin
Cmo se realizarn las medidas (por ejemplo, el tiempo de respuesta)
Acciones necesarias para suspender la prueba (cuando los acontecimientos no previstos
lo obliguen)
Puntos para reinicio de la ejecucin y acciones necesarias para el reinicio en estos puntos
Acciones necesarias para detener ordenadamente la ejecucin
Acciones necesarias para restaurar el entorno y dejarlo en la situacin existente antes de
las pruebas
Acciones necesarias para tratar los acontecimientos anmalos
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Al igual que en el diseo de las pruebas la documentacin de la ejecucin es clave para asegurar
la eficacia en la deteccin y correccin de defectos y dejar constancia de los resultados de las
pruebas.
La figura muestra el conjunto de documentos que se relaciona directamente con la ejecucin de
las pruebas segn el estndar IEEE Std. 829.
El objetivo de Histrico de Pruebas (test log) es documentar todos los hechos relevantes
ocurridos durante la ejecucin de las pruebas.
La estructura fijada por el estndar para dicho documento es la siguiente:
Identificador
Descripcin de la prueba: elementos probados y entorno de la prueba
Anotacin de datos sobre cada hecho ocurrido (incluido el comienzo y el final de la prueba)
Fecha y hora
Identificador de informe de incidente
Otras informaciones
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El objetivo del Informe de Incidente (test incident report) es documentar cada incidente (por
ejemplo, una interrupcin en las pruebas debido a un corte de electricidad, bloqueo del teclado,
etc.) ocurrido en la prueba y que requiera una posterior investigacin.
La estructura fijada por el estndar para dicho documento es la siguiente:
Identificador
Resumen del incidente
Descripcin de datos objetivos (fecha/hora, entradas, resultados esperados, etc)
Impacto que tendr sobre las pruebas
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
El objetivo del Informe Resumen (test summary report) es resumir los resultados de las
actividades de prueba (las sealadas en el propio informe) y aportar una evaluacin del software
basada en dichos resultados
La estructura fijada por el estndar para dicho documento es la siguiente:
Identificador
Resumen de la evaluacin de los elementos probados
Variaciones del software respecto a su especificacin de diseo, as como las variaciones en las
pruebas
Valoracin de la extensin de la prueba (cobertura lgica, funcional, de requisitos, etc.)
Resumen de los resultados obtenidos en las pruebas
Evaluacin de cada elemento software sometido a prueba (evaluacin general del software
incluyendo las limitaciones del mismo)
Firmas y aprobaciones de quienes deban supervisar el informe
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Volvamos al proceso propuesto para las pruebas y veamos dnde encaja la DEPURACIN
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La depuracin es el proceso de localizar, analizar y corregir los defectos que se sospecha que contiene el
software. Suele ser la consecuencia de una prueba con xito, es decir, cuando un caso de prueba descubre
un error, la depuracin es el proceso que provoca la eliminacin del error.
Aunque puede y debe ser un proceso ordenado, sigue teniendo mucho de arte: al evaluar los resultados de
una prueba, lo que el ingeniero se encuentra frecuentemente es slo una indicacin sintomtica de un
problema en el software, pero an hay que identificar ese problema, ya que la manifestacin externa del
error y la causa interna del mismo pueden no estar relacionados de una forma obvia. De hecho, el proceso
mental que conecta el sntoma con la causa es parte de la depuracin.
La Figura muestra una vista simplificada del proceso de prueba centrado en la depuracin: comienza con la
ejecucin de un caso de prueba. Se evalan los resultados y aparece una falta de correspondencia entre los
resultados esperados y los devueltos por la prueba. En muchos casos, los datos que no concuerdan son un
sntoma de una causa subyacente que todava permanece oculta. Estos datos se pasan entonces al proceso
de depuracin que intenta identificar las causas del error y corregir el defecto.
Si no lo consigue, se debern llevar a cabo nuevas pruebas que ayuden a localizarlo, reduciendo en cada
pasado el dominio de existencia del defecto. En caso de conseguirlo y haber corregido el defecto, se
efectuarn nuevas pruebas que comprueben si efectivamente se ha eliminado el problema.
Conviene tener en cuenta las implicaciones psicolgicas de la depuracin: es una de las actividades ms
frustrantes del desarrollo de software. Combina la necesidad de resolver un problema (un rompecabezas),
con la desagradable tarea de reconocer que se ha cometido un error. Dicho de otro modo, la depuracin es
una tarea extremadamente difcil ya que se enfrenta a la ansiedad provocada por no encontrar la solucin y
la natural tendencia a no aceptar la posibilidad de cometer errores. Afortunadamente, tambin se da un
gran alivio y disminuye la tensin cuando el error es finalmente corregido.
El resultado del proceso de depuracin puede ser:
(1) se encuentra la causa, se corrige y se elimina;
(2) no se encuentra la causa. En este caso, el responsable debe conjeturar una posible la causa, disear
un caso de prueba que ayude a confirmar dicha conjetura y repetir el ciclo.
Las dos etapas principales en el proceso de depuracin son la localizacin del error y la correccin del
mismo, siendo la primera la mas compleja. A continuacin damos algunas guas o consejos para facilitar la
actividad de localizacin.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Analizar la informacin y pensar. La depuracin es un proceso mental de resolucin de un
problema y lo mejor para el mismo es el anlisis. No se debe utilizar un enfoque aleatorio de
bsqueda del defecto.
Al llegar a un punto muerto, pasar a otra cosa. Refrescar la mente para empezar de nuevo o para
que el subconsciente nos termine por dar la solucin por si mismo. Alternativamente podemos
describir el problema a otra persona, el simple hecho de describir el problema a alguien puede
ayudarnos a descubrir muchas cosas.
Usar herramientas de depuracin slo como recurso secundario. Deben ayudar al anlisis mental
pero no sustituirlo.
No experimentar cambiando el programa. Debemos evitar depurar con esa actitud que
podramos resumir como no s qu est mal, as que cambiar esto y ver lo que sucede
Se deben atacar los errores individualmente, de uno en uno, si no queremos complicar an ms el
proceso de depuracin.
Adems, debemos fijar la atencin tambin en los datos que maneja el programa y no slo en la
lgica que implementa.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Respecto a la correccin del error
Donde hay un defecto, suele haber ms. Esta es una conclusin obtenida de la experiencia:
cuando corrijamos un error debemos examinar el cdigo y los mdulos prximos buscando
otros elementos sospechosos.
Debe fijarse el defecto, no sus sntomas. Es decir, el objetivo es corregir y hacer desaparecer el
defecto que provoca los sntomas, no enmascarar dichos sntomas. Por ejemplo, una mala
prctica relativamente habitual es controlar ciertas entradas que sabemos que provocan
resultados equivocados y enmascararlas produciendo artificialmente el resultado esperado.
La probabilidad de corregir completamente un defecto no es del 100% (de hecho ronda el 50%
segn los expertos). Por tanto se deben revisar las correcciones antes de implantarlas (mediante
tcnicas de revisin: walkthroughs, inspecciones, revisiones, etc. antes de la correccin). Despus
de la correccin debemos realizar pruebas especficas que comprueben, no slo que la correccin
ha cumplido con su objetivo, sino tambin que no se han introducido nuevos defectos. En
resumen: cuidado con crear nuevos defectos (al corregir defectos se producen otros nuevos)
En este sentido, Van Vleck (1989) sugiere tres preguntas sencillas antes de hacer la correccin:
Se repite la causa del error en otra parte del programa?
Cul es el siguiente error que se podr presentar a raz de la correccin que hoy voy a
realizar?
Qu podramos haber hecho para prevenir este error la primera vez?
La correccin debe situarnos temporalmente en la fase de diseo. Tenemos que mentalizarnos de
que la correccin implica re-disear y no slo modificar el cdigo.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La OO introduce nuevos aspectos y la naturaleza de los programas OO cambian las estrategias y tcticas de prueba.
Conceptos como la reutilizacin, la abstraccin o la encapsulacin influyen directamente en todos los aspectos del
desarrollo software y en particular en el proceso de pruebas. Por ejemplo, uno de los problemas que plantea la OO en el
contexto de las pruebas es el tratamiento de la herencia. Las dificultades proceden del hecho de que la prueba de un
mtodo, que es heredado en clases inferiores, suponga probar no slo el mtodo genrico sino tambin todas las
implementaciones en las clases hijas y en todo el rbol de herencia que genera. Otro ejemplo es el polimorfismo, que
interviene para complicar las pruebas, ya que nos obliga a generar casos de prueba adicionales para cada implementacin
adems de los que se heredan o solapan con los de la prueba en las clases madre.
Por otro lado, la construccin del software orientado a objetos comienza con la creacin de los modelos de anlisis y
diseo. Debido a la naturaleza evolutiva del paradigma de ingeniera de software OO, estos modelos comienzan como
representaciones, relativamente informales, de los requisitos del sistema, y evolucionan hacia modelos detallados de
clases, conexiones y relaciones de clases, el diseo del sistema y el diseo de objetos. En cada etapa, los modelos pueden
probarse, en un intento de descubrir errores, antes de su propagacin a la siguiente iteracin. As, la definicin de
pruebas para sistemas OO debe ser ampliada para incluir tcnicas que descubran errores (revisiones tcnicas formales) en
los modelos de Anlisis y Diseo y evalen la integridad, completitud y consistencia de dichos modelos.
Igualmente, la arquitectura de software OO se basa en una serie de subsistemas organizados por capas, que encapsulan
clases que colaboran entre s. Por lo tanto es necesario definir pruebas para los diferentes niveles del sistema, en un
esfuerzo por descubrir los errores que aparecen cuando las clases colaboran y los subsistemas se comunican a travs de
las distintas capas arquitectnicas.
Finalmente, recordemos que la estrategia clsica para la prueba de software comienza con probar lo pequeo y
funciona hacia fuera haciendo probar lo grande. Se comienza con las pruebas de unidad, despus se progresa hacia las
pruebas de integracin y se culmina con las pruebas de validacin del sistema. En aplicaciones convencionales, las
pruebas de unidad se centran en las unidades de programa compilables ms pequeas - el subprograma (por ejemplo,
mdulo, subrutina, procedimiento, componente). Una vez que cada una de estas unidades han sido probadas
individualmente, se integran en una estructura de programa, mientras que se ejecutan una serie de pruebas de regresin
para descubrir errores, debidos a las interfaces entre los mdulos y los efectos colaterales producidos por aadir nuevas
unidades. Por ltimo, el sistema se comprueba como un todo para asegurarse de que se descubren los errores en
requisitos.
Cuando se considera el software orientado a objetos, el concepto de unidad cambia. La encapsulacin conduce a la
definicin de clases y objetos. Esto significa que cada clase y cada instancia de una clase (objeto), envuelven atributos
(datos) y operaciones (tambin conocidos como mtodos o servicios), que manipulan estos datos. En vez de probar un
mdulo individual, la unidad ms pequea comprobable es la clase u objeto encapsulado. Ya que una clase puede
contener un nmero de operaciones diferentes, y una operacin particular debe existir como parte de un nmero de
clases diferentes, el significado de la unidad de prueba cambia drsticamente.
En resumen, las estrategias y tcticas de prueba deben tener en cuenta las caractersticas propias del software OO.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Durante el anlisis y diseo, la exactitud semntica debe juzgarse basada en la conformidad del modelo con
el dominio del problema en el mundo real. Si el modelo refleja con exactitud el mundo real (al nivel de
detalle apropiado a la etapa de desarrollo en la que se revisa el modelo), entonces es semnticamente
correcto. Para determinar si el modelo en realidad refleja el mundo real, debe presentarse a expertos en el
dominio del problema, quienes examinarn las definiciones de las clases y sus jerarquas, para detectar
omisiones o ambigedades. Las relaciones entre clases (conexiones de instancia) se evalan para determinar
si reflejan con exactitud conexiones del mundo real'.
La notacin y sintaxis que se utiliza para representar los modelos de anlisis y diseo se corresponder con
el mtodo especfico de anlisis y diseo, elegido para el proyecto. Por consiguiente, la exactitud sintctica
se juzga en el uso apropiado de la simbologa; cada modelo se revisa para asegurarse de que se han
mantenido las convenciones propias del modelado. Por ejemplo, deberemos comprobar si el modelo incluye
todas las partes necesarias para su correcta definicin (nombre de los mtodos, tipos de datos,
parmetros..).
La consistencia de los modelos de anlisis y diseo debe juzgarse considerando las relaciones entre
entidades dentro del modelo. Un modelo inconsistente tiene representaciones en una parte, que no se
reflejan correctamente en otras partes del modelo. Por ejemplo, debemos comprobar los diferentes
modelos de anlisis son consistentes entre si, pero tambin que lo son con los modelos de diseo. El diseo
de sistema se revisa examinando el modelo objeto-comportamiento desarrollado durante el anlisis y la
correspondencia necesaria del comportamiento del sistema, frente a los subsistemas diseados para lograr
este comportamiento.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Al tratar con software OO cambia el concepto de unidad. El encapsulamiento dirige la definicin de clases y
objetos. Esto significa que cada clase e instancia de clase (objeto) empaqueta los atributos (datos) y las
operaciones (tambin conocidas como mtodos o servicios) que manipulan estos datos. Por lo tanto, en vez
de mdulos individuales, la menor unidad a probar es la clase u objeto encapsulado. Una clase puede
contener un cierto nmero de operaciones, y una operacin particular puede existir como parte de un
nmero de clases diferentes. Por tanto, el significado de la prueba de unidad cambia ampliamente respecto
al concepto general visto antes.
No se puede probar ms de una operacin a la vez (la visin convencional de la unidad de prueba), pero s
como parte de una clase. Para ilustrar esto, considrese una jerarqua.de clases, en la cual la operacin X se
define para la superclase y se hereda por algunas subclases. Cada subclase utiliza la operacin X, pero se
aplica en el contexto de los atributos y operaciones privadas que han sido definidas para la subclase. Ya que
el contexto en el que la operacin X se utiliza vara de manera sutil, es necesario para probar la operacin X
en el contexto de estas subclases. Esto significa que probar la operacin X en vaco (la aproximacin de la
prueba de unidades tradicionales) no tiene sentido en el contexto orientado a objetos
De esta manera, la prueba de clases para el software OO es el equivalente a la prueba de unidad para
software convencional. A diferencia de la prueba de unidad del software convencional, la cual tiende a
centrarse en el detalle algortmico de un mdulo y los datos que fluyen a lo largo de la interfaz de ste, la
prueba de clases para software OO est dirigida por las operaciones encapsuladas en la clase y el estado del
comportamiento de la clase. As, la prueba de una clase debe haber probado mediante las correspondientes
tcnicas de caja blanca y caja negra el funcionamiento de cada uno de los mtodos de dicha clase. Adems,
se deben haber generado casos de prueba para probar valores representativos de los atributos de dicha
clase (esto puede realizarse aplicando la tcnica de clases de equivalencia y anlisis de valores lmite)

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Debido a que el software OO no tiene una estructura de control jerrquica, las estrategias convencionales de
integracin ascendente y descendente poseen un significado poco relevante en este contexto.
Generalmente se pueden encontrar dos estrategias diferentes de pruebas de integracin en sistemas OO.
La primera, prueba basada en hilos (o threads), integra el conjunto de clases necesario para responder a una
entrada o evento del sistema. Cada hilo se integra y prueba individualmente.
El segundo enfoque para la integracin, prueba basada en el uso, comienza la construccin del sistema
integrando y probando aquellas clases (llamadas clases independientes) que usan muy pocas de las dems
clases. Despus de probar las clases independientes, se comprueba la prxima capa de clases, llamadas
clases dependientes, que usan las clases independientes. Esta secuencia de capas de pruebas de clases
dependientes contina hasta construir el sistema por completo.
A diferencia de la integracin convencional, el uso de drivers y stubs debe evitarse siempre que sea posible
Ntese cmo la prueba basada en hilos proporciona una estrategia ms ordenada para realizar la prueba
que la prueba basada en el uso.
Esta prueba basada en hilos, suele aplicarse utilizando los diagramas de secuencia de objetos que disean
cada evento de entrada al sistema. Concretamente, se pueden realizar los siguientes pasos para generar
casos de prueba a partir de un diagrama de secuencias:
1.Definir el conjunto de secuencias de mensajes a partir del diagrama de secuencia. Cada secuencia ha
de comenzar con un mensaje m sin predecesor (habitualmente, un mensaje enviado al sistema por un
actor), y estar formada por el conjunto de mensajes cuya ejecucin dispara m
2. Analizar sub-secuencias de mensajes a partir de posibles caminos condicionales en los diagramas de
secuencia.
3.Identificar los casos de prueba que se han de introducir al sistema para que se ejecuten las secuencias
de mensajes anteriores, en funcin de los mtodos y las clases afectadas por la secuencia. Tanto valores
vlidos como invlidos deberan considerarse.
De esta forma, resulta evidente que el conjunto de casos de prueba puede aumentar exponencialmente si se
trabaja con un sistema OO con un nmero elevado de interacciones. Por lo tanto, es necesario tener en
cuenta este factor a la hora de realizar el diseo


Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La figura muestra un diagrama de secuencia que podramos utilizar para definir una secuencia de integracin
concreta: partiramos de la clase IU_Solicitud_de_Pago, para pasar a las clases de control
Procesamiento_de_Solicitudes_de_Pago y Procesamiento_de_Facturas, etc.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En este nivel de prueba, los detalles de las conexiones entre clases no afectan. El software debe
integrarse con los componentes hardware correspondientes y se ha de comprobar que el sistema
completo funciona de acuerdo a los requisitos.
Por tanto, como en el caso del software convencional, la validacin del software OO se centra
en las acciones visibles del usuario y las salidas del sistema reconocibles por ste.
Para asistir en la identificacin de casos de prueba debemos basarnos en los casos de uso que
forman parte del modelo de anlisis. La utilizacin de los casos de uso eleva la probabilidad de
detectar errores encubiertos en los requisitos de interaccin del cliente.
En general, los mtodos convencionales de prueba de caja negra son los que se utilizan para
desarrollar estas pruebas.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Una vez que tenemos una idea general de las diferencias entre las pruebas en sistemas
convencionales (o estructurados) y sistemas orientados a objetos, vamos a concretar un poco ms
estas ideas, mostrando cmo podemos disear casos de prueba para sistemas Orientados a
Objetos.
A diferencia del diseo de pruebas convencional, que se conduce mediante una visin entrada-
proceso-salida, o el detalle algortmico de los mdulos individuales, la prueba orientada a objetos
se enfoca en las secuencias de operaciones de diseo apropiadas para probar los estados de una
clase.
Por lo tanto, aunque los mtodos de diseo de casos de prueba para software orientado a objetos
continan evolucionando, una aproximacin global al diseo de casos de prueba OO sera la
siguiente:
Cada caso de prueba debe ser identificado separadamente, y explcitamente asociado con la clase o
clases a probar.
Debe declararse el propsito de la prueba.
Debe desarrollarse una lista de pasos a seguir, como consecuencia de la prueba, pero adems debe
contener:
definicin de una lista de estados, especficos para la clase o clases a probar.
una lista de mensajes y operaciones, que se ejercitarn como consecuencia de las pruebas.
una lista de excepciones, que pueden ocurrir conforme se ejecuta la prueba.
una lista de condiciones externas (por ejemplo, otros sistemas software o hardware con quien
interacta el sistema) que debe existir para conducir apropiadamente las pruebas.
informacin adicional, que ayudar a la comprensin e implementacin de la prueba.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
A continuacin daremos una vista general de los principales mtodos para el diseo de casos de
prueba, que se dividen en mtodos para clases y mtodos para probar la interaccin entre clases
(o interclases)
En primer lugar, ya hemos mencionado varias veces que la prueba de software comienza en lo
pequeo y lentamente progresa hacia lo grande. En el contexto de la OO la prueba en
pequeo, se enfoca en una sola clase y los mtodos que encapsula. Algunos de los mtodos
para el diseo de pruebas de clase son la verificacin al azar y la particin. Esta ltima da lugar a
varios sub-tipos en funcin del criterio utilizado para definir la particin.
Por otro lado, el diseo de casos de prueba se vuelve ms complicado cuando comienza la
integracin. Es en esta etapa donde hay que verificar las colaboraciones entre clases. Al igual que
para la verificacin de clases individuales, existen mtodos de verificacin de colaboraciones de
clases (o interclases). Adems de la verificacin al azar (basada en escenarios) y la particin,
podemos seguir una aproximacin basada en el comportamiento para disear las pruebas
interclases.

Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
A manera de ejemplo, considrese una aplicacin bancaria en la cual una clase Cuenta contiene las
siguientes operaciones: abrir, configurar, ingresar, retirar, saldo, movimientos, limite y cerrar. Ntese que la
naturaleza del problema implica algunas limitaciones. Por ejemplo, la cuenta debe ser abierta antes de que
se puedan realizar otras operaciones y cerrada despus de que todas las operaciones hayan sido
completadas. An con estas limitaciones, existen muchas combinaciones vlidas de operaciones.
Como poco, durante la vida de un objeto Cuenta, suelen darse las siguientes operaciones: abrir()
configurar() ingresar() retirar() cerrar().
La secuencia anterior representa la mnima secuencia de operaciones que deberamos probar para probar la
clase cuenta. An respetando esta secuencia, existen infinitas posibilidades. Cualquiera combinacin
producida aleatoriamente a partir de la siguiente (meta)secuencia es vlida:
abrir() configurar() ingresar() - [ingresar() / retirar() / consultarSaldo() / consultarMovimientos() /
consultarLimite() ]
n
retirar() cerrar()
Por ejemplo, las siguientes secuencias son igualmente vlidas:
Prueba r1: abrir() - configurar() - ingresar() - consultarSaldo() - consultarMovimientos() - retirar() -
cerrar().
Prueba r2: abrir() - configurar() - ingresar() - retirar() - ingresar() - consultarSaldo() - consultarLimite() -
retirar() - cerrar()
As, la idea sera disear casos de prueba para ejecutar estas y/o otras secuencias de prueba generadas
aleatoriamente.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La prueba de particin reduce el nmero de casos de prueba requeridos para validar la clase, de forma
anloga a la particin equivalente que vimos para software convencional o estructurado. Las entradas y
salidas se clasifican en categoras (particin) y los casos de prueba se disean para validar cada categora.
Pero cmo identificamos las diferentes categoras?
La particin basada en estados clasifica las operaciones de la clase en funcin de su habilidad de
cambiar el estado de la clase. Por ejemplo, para la clase Cuenta, las operaciones de estado seran
ingresar() y retirar(), mientras que las operaciones de no-estado seran consultarSaldo(),
consultarMovimientos() y consutlarLimite(). La idea es disear las pruebas de manera que las
operaciones que cambian el estado, y aquellas que no lo cambian, se ejerciten separadamente. As:
Prueba p1: abrir() configurar() ingresar() ingresar() - retirar() - retirar() - cerrar().
Prueba p2: abrir() - configurar() - ingresar() consultarMovimientos() consultarSaldo() -
consultarLimite() - retirar() - cerrar().
La prueba p1 cambia el estado, mientras que la prueba p2 ejercita las operaciones que no cambian
el estado (aunque incluye las operaciones necesarias de la secuencia mnima de prueba, que
obviamente si cambian el estado del objeto).
La particin basada en atributos clasifica las operaciones de la clase en funcin de los atributos que
utilizan.
Para la clase cuenta, los atributos saldo y lmite pueden usarse para definir particiones.
De esta manera las operaciones se dividen en tres particiones:
(1) Operaciones que utilizan limite
(2) operaciones que lo modifican
(3) operaciones que no utilizan o modifican lmite
Las secuencias de prueba se disean entonces para cada particin.
Finalmente, la particin basada en categoras clasifica las operaciones de la clase de acuerdo a la
funcin genrica que cada una lleva a cabo. Por ejemplo, las operaciones de la clase cuenta pueden
clasificarse en operaciones de inicializacin (abrir() y configurar()), operaciones computacionales
(ingresar() y retirar()), consultas (consultarSaldo(), consultarMovimientos() y consultarLimite()) y
operaciones de terminacin (cerrar())
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Tengamos en mente que nuestro objetivo ahora es verificar las colaboraciones entre las clases.
En primer lugar, as como la verificacin de clases individuales, la verificacin de colaboraciones de clases
puede completarse aplicando mtodos de verificacin al azar y metodos de particin. En realidad a la
primera se le suele denominar basada en escenarios, pero es una combinacin de aleatoriedad y uso de
escenarios.
La idea se recoge en la diapositiva.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Veamos un ejemplo para la clase Banco en el sistema del cajero.
Una secuencia vlida para dicha clase sera



Un caso aleatorio, conforme a dicha secuencia podra ser:



Para ejecutar las operaciones de dicha secuencia, la clase Banco tiene que colaborar con las clases
ValidationInfo (para las operaciones verifyAcct y verifyPin) y Cuenta (para la operacin depositReq
Por tanto, un nuevo caso de prueba que ejercite estas colaboraciones sera:



A continuacin, podramos estudiar cuales son las clases y operaciones invocadas por
ValidationInfo y Account para ejecutar estas operaciones y generar un nuevo caso de prueba, y
as sucesivamente .


verifyAcctverifyPIN[[verifyPolicywithdrawReq]|depositReq|acctInfoREQ]
n
Caso p1 = verifyAcctverifyPINdepositReq
verifyAcctBank[validAcct
ValidationInfo
]verifyPINBank[validPin
ValidationInfo
]depositReq [deposit
Account
]
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Respecto al diseo de pruebas interclases basado en la particin, la idea es identificar las diferentes
categoras en funcin de la interfaz de la clase.
De vuelta al ejemplo del cajero, los mtodos de la clase Banco podran dividirse entre aquellos que reciben
mensajes de la clase ATM y aquellos que reciben mensajes de la clase Cashier
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
En realidad, el diseo de pruebas basado en comportamiento se puede ver como una estrategia de prueba
de clases que puede extenderse para utilzarse interclases.
Los Diagramas de Transicin de Estados (DTE) sirven para representar el comportamiento dinmico de una
clase. En el contexto de las pruebas interclases, podemos utilizarlos para disear el conjunto de casos de
prueba que ejerciten dicho comportamiento dinmico (y el de las clases que colaboren con la clase).
Volviendo a la clase Cuenta que ya hemos visto, la figura muestra el DTE de dicha clase. Ntese que los
objetos de la clase Cuenta entregarn la mayor parte de su funcionalidad mientras el objeto est en el
estado Working acct.
El objetivo de la prueba basada en comportamiento es alcanzar una cobertura total de estados, es decir, las
secuencias de operaciones que ejercitaran los casos de prueba deben causar que los objetos transiten por
todos los estados posibles. La siguiente secuencia cumplira este objetivo:



Obsrvese que la secuencia coincide con la secuencia bsica que definimos como secuencia mnima cuando
veamos la verificacin al azar.
Se pueden derivar an ms casos de prueba para asegurarse de que todos los comportamientos para la clase
han sido adecuadamente ejercitados. Por ejemplo:




Finalmente, en situaciones en las que el comportamiento de la clases resulte en una colaboracin con una o
ms clases del sistema, se utilizan mltiples DTEs para registrar el flujo de comportamiento de todo el
sistema.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
La prueba del software contabiliza el mayor porcentaje del esfuerzo tcnico del proceso de desarrollo de software.
Su objetivo es descubrir errores. Para conseguir este objetivo, se planifica y se ejecutan una serie de pasos: pruebas de
unidad, de integracin, de validacin y del sistema.
Las pruebas de unidad y de integracin se centran en la verificacin funcional de cada mdulo y en la incorporacin de los
mdulos en una estructura de programa. La prueba de validacin demuestra el seguimiento de los requisitos del software
y la prueba del sistema valida el software una vez que se ha incorporado en un sistema superior.
Cada nivel de prueba se lleva a cabo mediante una serie de tcnicas sistemticas de prueba que ayudan en el diseo de
casos de prueba. Con cada paso de prueba se ampla el nivel de abstraccin con el que se considera el software.
El principal objetivo del diseo de casos de prueba es obtener un conjunto de pruebas que tengan la mayor probabilidad
de descubrir los defectos del software. Para llevar a cabo este objetivo, se usan dos categoras diferentes de tcnicas de
diseo de casos de prueba: prueba de caja blanca y prueba de caja negra.
Las pruebas de caja blanca se centran en la estructura de control del programa. Se obtienen casos de prueba que
aseguren que durante la prueba se han ejecutado, por lo menos una vez, todas las sentencias del programa y que se
ejercitan todas las condiciones lgicas.
La prueba del camino bsico, una tcnica de caja blanca, hace uso de grafos de programa (o matrices de grafos) para
obtener el conjunto de pruebas linealmente independientes que aseguren la total cobertura. La prueba de condiciones y
del flujo de datos ejercita ms an la lgica del programa y la prueba de los bucles complementa a otras tcnicas de caja
blanca, proporcionando un procedimiento para ejercitar bucles de distintos grados de complejidad.
Por otro lado, la prueba de caja negra ampla el enfoque y se puede denominar prueba a gran escala. Las pruebas de
caja negra son diseadas para validar los requisitos funcionales sin fijarse en el funcionamiento interno de un programa.
Las tcnicas de prueba de caja negra se centran en el mbito de informacin de un programa, de forma que se
proporcione una cobertura completa de prueba.
La particin equivalente divide el campo de entrada en clases de datos que tienden a ejercitar determinadas
funciones del software. El anlisis de valores lmite prueba la habilidad del programa para manejar datos que se
encuentran en los lmites aceptables.
A diferencia de la prueba (una actividad sistemtica y planificada), la depuracin, que de por s implica una contradiccin
entre la bsqueda de una solucin y la admisin de un error, se puede considerar un arte. A partir de una indicacin
sintomtica de un problema, la actividad de depuracin debe rastrear y corregir la causa del error.
El objetivo global de la verificacin orientada a objetos -encontrar el mximo nmero de errores con un mnimo de
esfuerzo, es idntico al objetivo de prueba del software convencional. Pero la estrategia y tcticas difieren de modo
significativo. La visin de verificacin se ampla, para incluir la revisin de ambos modelos de diseo y de anlisis.
En resumen, el enfoque de prueba se aleja del componente procedimental (el mdulo) hacia la clase. Adems, ya que los
modelos de anlisis y diseo OO y el cdigo fuente resultante se acoplan semnticamente, la prueba (a manera de
revisiones tcnicas formales) comienza en estas actividades de ingeniera.
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N
Ampliacin de Ingeniera del Software
Grado en Ingeniera Informtica
Material de Apoyo Terico

Pgina N

Vous aimerez peut-être aussi