Download - apuntesDoctorado
-
8/2/2019 apuntesDoctorado
1/102
P r u e b a s d e Sis te m a s d e
I n f o r m a c i n
U n ive r s id a d d e Cas t i lla -La Man ch a
D e p a r t a m e n t o d e T e cn o lo ga s y Sis t e m a s d e
I n f o r m a c i n
P r o g r a m a O fi ci a l d e P o s t g r a d o e n T e c n o l o g a s I n fo r m t i ca s
A v a n z a d a s
M a c a r i o P o l o U s a o laDepartamento de Tecnologas y Sistemas de InformacinPaseo de la Universidad, 413071-Ciudad [email protected]
-
8/2/2019 apuntesDoctorado
2/102
3
n d i ce
Captulo 1. La importancia de las pruebas en el ciclo de vida .........................7
1. El proceso de pruebas en el ciclo de vida .................................................7
2. Las pruebas en algunas modelos..............................................................93. El MTPF (Minimal Test Practice Framework) .......................................9
4. El plan de pruebas .................................................................................. 12
5. Automatizacin de las pruebas .............................................................. 13
Captulo 2. Niveles de prueba ........................................................................ 19
1. Pruebas de caja negra ............................................................................. 19
2. Pruebas estructurales o de caja blanca ................................................. 20
3. Pruebas unitarias.................................................................................... 21
3.1. Un modelo de proceso para pruebas unitarias ..........................22
4. Pruebas de integracin...........................................................................23
5. Pruebas de sistema .................................................................................24
6. Ejercicios ................................................................................................24
Captulo 3. Pruebas de caja blanca ................................................................27
1. Medidas de la cobertura..........................................................................27
1.1. Cobertura de sentencias .............................................................27
1.2. Cobertura de decisiones, de ramas o de todos los arcos............27
1.3. Cobertura de condiciones...........................................................28
1.4. Cobertura de condiciones/decisiones (Decision/Condition
coverage, oDCC) ..........................................................................................29
1.5. Cobertura modificada de condiciones/decisiones (MC/DC). ...29
1.6. Cobertura mltiple de condiciones (MCC) ................................29
1.7. Cobertura de todos los usos (all-uses) .......................................29
1.8. Cobertura de caminos ................................................................29
1.9. Cobertura de funciones ..............................................................30
1.10. Cobertura de llamadas ...............................................................30
1.11. Cubrimiento de bucles ...............................................................30
1.12. Cubrimiento de carrera ..............................................................30
1.13. Cobertura de operadores relacionales .......................................30
1.14. Cobertura de tablas ....................................................................30
1.15. Cobertura basada en mutacin ..................................................302. La mutacin............................................................................................32
-
8/2/2019 apuntesDoctorado
3/102
4
2.1. Algo de terminologa ..................................................................33
2.2. La mutacin como criterio de cobertura....................................33
2.3. Proceso de pruebas basado en mutacin ...................................34
2.4. Operadores de mutacin ............................................................36
3. Ejercicios.................................................................................................37
Captulo 4. Los valores interesantes ...........................................................39
1. Un estudio inicial del problema del tringulo........................................39
2. Concepto de valor interesante................................................................42
2.1. Clases de equivalencia................................................................42
2.2. Valores lmite..............................................................................43
2.3. Fundamento matemtico ...........................................................43
3. Criterios de cobertura para valores ........................................................44
3.1. Cada uso (each-use, o 1-wise) ....................................................44
3.2. pair-wise (o 2-wise)...................................................................45
3.3. t-wise ..........................................................................................47
3.4. N-wise.........................................................................................47
4. Casos de prueba redundantes ................................................................47
4.1. Reduccin del conjunto de casos basado en mutacin..............48
4.2. AlgoritmoHGS........................................................................... 51
4.3. Mejoras de Gupta ....................................................................... 51
4.4. Algoritmo de Heimdahl y George ..............................................52
4.5. Algoritmo de McMaster y Memon .............................................52
5. Ejercicios.................................................................................................52
Captulo 5. Estrategias de combinacin para la generacin de casos de
prueba...................................................................................................................53
1. Estrategias de generacin de casos de prueba .......................................532. Estrategias no deterministas ..................................................................54
2.1. AETG: Automatic efficient test generator..................................54
2.2. Algoritmos Genticos .................................................................54
3. Estrategias deterministas .......................................................................58
3.1. Each choice.................................................................................59
3.2. Base choice .................................................................................59
3.3. Partly pair-wise ..........................................................................59
3.4. All combinations.........................................................................59
-
8/2/2019 apuntesDoctorado
4/102
5
3.5. Anti-random...............................................................................59
4. Estrategias de generacin fuera de la clasificacin anterior ................ 60
4.1. Bsqueda Tab........................................................................... 61
4.2. Generacin mediante algoritmos bacteriolgicos. ....................62
5. Ejercicios.................................................................................................63
Captulo 6. Pruebas de caja negra..................................................................65
1. Pruebas de componentes ........................................................................65
1.1. Uso de BIT wrappers ..................................................................65
1.2. Mutacin de interfaces...............................................................67
2. Pruebas de servicios web........................................................................68
2.1. WSDL..........................................................................................69
2.2. Escritura de un cliente que acceda a un servicio web................70
2.3. Pruebas de servicios web mediante perturbacin de datos....... 71
3. Pruebas de integracin con mquinas de estado en orientacin a
objetos...............................................................................................................72
4. Ejercicios.................................................................................................74
Captulo 7. Pruebas de artefactos diversos ....................................................75
1. Testing basado en requisitos ..................................................................75
2. Secuencias de mtodos...........................................................................78
3. Especificaciones formales o semiformales.............................................79
3.1. Propuesta de Tse y Xu ................................................................79
3.2. Mtodo ASTOOT ........................................................................82
3.3. Obtencin automtica de especificaciones algebraicas.............84
4. Pruebas a partir de mquinas de estado ................................................86
4.1. Cobertura de transiciones ..........................................................86
4.2. Cobertura de predicados ............................................................864.3. Cobertura de pares de transiciones............................................87
4.4. Cobertura de secuencia completa ............................................. 88
5. Obtencin de casos de prueba a partir de casos de uso.........................89
6. Diseo de clases orientados a la facilidad de pruebas .......................... 90
7. Criterios de cobertura de pruebas para diseos UML ...........................93
8. Revisiones e inspecciones de cdigo fuente...........................................94
9. Ejercicios ................................................................................................95
Captulo 8. Mtricas para el proceso de pruebas...........................................97
-
8/2/2019 apuntesDoctorado
5/102
6
1. Introduccin............................................................................................97
2. Porcentaje de deteccin de defectos.......................................................98
3. Porcentaje de defectos corregidos..........................................................98
4. Medida del retorno de la inversin (ROI)..............................................98
Captulo 9. Referencias ................................................................................ 101
-
8/2/2019 apuntesDoctorado
6/102
Pruebas de sistemas de informacin
7
Ca p tu lo 1.LA IMP ORTANCIA DE LAS PRU EBAS EN
EL CICLO DE VIDA
La fase de pruebas es una de las ms costosas del ciclo de vida software. En
sentido estricto, deben realizarse pruebas de todos los artefactos generados du-
rante la construccin de un producto software, lo que incluye las especificacio-
nes de requisitos, casos de uso, diagramas de diversos tipos y, por supuesto, el
cdigo fuente y el resto de elementos que forman parte de la aplicacin (como
por ejemplo, la base de datos). Obviamente, se aplican diferentes tcnicas de
prueba a cada tipo de producto software.
En este primer captulo se enmarca el proceso de pruebas dentro del ciclo de
vida software, se describe brevemente una serie de buenas prcticas para el pro-
ceso de pruebas, y se presentan algunos retos en cuanto a la automatizacin del
proceso.
1.El p r oceso de p r u eba s en e l c ic lo de v idaEl estndar ISO/IEC 12207 [1] identifica tres grupos de procesos en el ciclo
de vida software:
- Procesos principales, grupo en el que incluye los procesos de Adquisi-
cin, Suministro, Desarrollo, Operacin y Mantenimiento.
- Procesos de la organizacin, en donde se encuentran los procesos de
Gestin, Mejora, Infraestructura y Formacin.
- Procesos de soporte o auxiliares, en donde estn los procesos de Do-
cumentacin, Gestin de la Configuracin, Auditora, Resolucin de
Problemas, Revisin Conjunta, Aseguramiento de la Calidad, Verifica-
cin, Validacin,
No define, como vemos, un proceso de Pruebas como tal, sino que aconseja,
durante la ejecucin de los procesos principales o de la organizacin, utilizar los
procesos de soporte. Entre stos se encuentran los procesos de Validacin y de
Verificacin:
-
8/2/2019 apuntesDoctorado
7/102
Pruebas de sistemas de informacin
8
- El proceso de Validacin tiene como objetivo determinar si los requisi-
tos y el sistema final cumplen los objetivos para los que se construy el
producto, respondiendo as a la pregunta el producto es correcto?
- El proceso de Verificacin intenta determinar si los productos software
de una actividad se ajustan a los requisitos o a las condiciones impues-
tas en actividades anteriores. De este modo, la pregunta a la que res-
ponde este proceso es se est construyendo el producto correctamen-
te?
Del proceso de Verificacin se observa la importancia de verificar cada uno
de los productos que se van construyendo, pues se asume que si lo que se va
construyendo es todo ello correcto, tambin lo ser el producto final. Igualmen-te, se observa que el proceso de Validacin resalta la importancia de comprobar
el cumplimiento de los objetivos de los requisitos y del sistema final, de suerte
que podra construirse un Plan de pruebas de aceptacin desde el momento
mismo de tener los requisitos, que sera comprobado al finalizar el proyecto. Si
tras la fase de requisitos viniese una segunda de diseo a alto nivel del sistema,
tambin podra prepararse un Plan de pruebas de integracin, que sera com-
probado tras tener (o segn se van teniendo) codificados los diferentes mdulos
del sistema. Esta correspondencia entre fases del desarrollo y niveles de prueba
produce el llamado modelo en V, del que se muestra un ejemplo en la Figura 1.
En la figura se muestra cmo, efectivamente, mientras que en el desarrollo se va
de lo ms general a lo ms particular, en las pruebas se va de lo ms particular a
lo ms general: si lo primero que se hace es recolectar los requisitos con el usua-
rio, las ltimas pruebas que se hacen son las de aceptacin, con el mismo usua-
rio; si lo ltimo que se construye es el cdigo, lo primero que se hace son las
pruebas unitarias de dicho cdigo.
-
8/2/2019 apuntesDoctorado
8/102
Pruebas de sistemas de informacin
9
Requisitos
Diseo dealto nivel
Diseo debajo nivel
CdigoPruebasunitarias
Pruebas deintegracin
Pruebas desistema
Pruebas deaceptacin
Figur a 1. Mode lo en V
2 .La s p r u e b a s e n a lgu n a s m o d e lo s
El Capability Maturity Model (CMM) hace una consideracin especial de
las pruebas. Las reas de este modelo que ms relacionadas se encuentran con
la fase de pruebas son Software Product Engineering, Training Program,
Technology Change ManagementyProcess Change Management. CMM esta-
blece cuatro niveles para la realizacin de pruebas: de unidad, de integracin, de
sistema y de aceptacin, adems de las de regresin, que se ejecutan para verifi-
car la correccin de los cambios en el sistema. Deben redactarse un plan de
pruebas y definirse estndares de pruebas junto al resto del proceso. El grupo de
pruebas debe estar bien distinguido respecto del de desarrollo y debe realizar las
pruebas independientemente de ste.
3 .El MTPF (M i n i m a l T e s t Pr a c t i ce Fr a m e w o r k )Karlstrm et al. describen un proceso para pequeas organizaciones que de-
seen adoptar buenas prcticas en pruebas [2]. El MTPF (Minimal Test Practice
Framework) se estructura en cinco categoras y consta de tres fases (que,
aproximadamente, representan tres niveles de madurez). Su objetivo es pasar
de una estrategias de pruebas ad hoc a un proceso de pruebas claro y estructu-
rado.
-
8/2/2019 apuntesDoctorado
9/102
Pruebas de sistemas de informacin
10
A cada categora le corresponden un conjunto de prcticas de trabajo rela-
cionadas con las pruebas, que deben realizarse segn la fase en la que se en-
cuentre la organizacin. Las fases se describen en funcin de la cantidad de per-
sonal de desarrollo que trabaja en la organizacin. Para equipos de desarrollo
superiores a 30 personas, los propios autores recomiendan el uso de otros fra-
meworks.
La Tabla 1 describe brevemente las actividades de cada fase y categora.
-
8/2/2019 apuntesDoctorado
10/102
-
8/2/2019 apuntesDoctorado
11/102
Pruebas de sistemas de informacin
12
Cada fase se introduce en la organizacin cuidadosamente, siguiendo cinco
pasos: preparar la fase, introducirla, revisarla, realizarla y evaluarla, como se
ilustra en la
n++
Preparar
prcticas de la
fase n
n=1Introducir
prcticas de la
fase n
Revisar
prcticas de la
fase n
Ejecutar
prcticas de la
fase n
Evaluar
prcticas de la
fase nCambiar?
[no]
[s]
F ig u r a 2 . M t o d o s e gu i d o p a r a i n t r o d u c ir c a d a fa s e
4 .E l p la n d e p r u e b a s
El plan de pruebas es un documento que se utiliza para indicar los recursos,
los elementos que se van a probar, las actividades, el personal y los riesgos aso-
ciados. El estndar IEEE 829 es el estndar para documentacin de las pruebas,
e indica la siguiente estructura para el plan de pruebas:
1) Identificador del documento.
2) Introduccin, resumen de los elementos y las caractersticas que se van a
probar.
3) Elementos que se van a probar (programas, mdulos)
4) Caractersticas que se van a probar.
5) Caractersticas que no se van a probar.
6) Enfoque general de la prueba.
7) Criterios de paso o fallo.
8) Criterios de suspensin y de reanudacin.
9) Documentacin asociada.
10)Actividades de preparacin y ejecucin de pruebas.
11)Entorno necesario.
12)Responsables.
-
8/2/2019 apuntesDoctorado
12/102
Pruebas de sistemas de informacin
13
13)Necesidades de personal y de formacin.
14)Esquema de tiempos.
15)Riesgos asumidos y planes de contingencia.
16)Aprobaciones, con las firmas de los responsables.
5.Au t o m a t iza c i n d e la s p r u e b a s
Diversos estudios recientes han destacado la falta de automatizacin de las
tareas relacionadas con las pruebas de software en la mayora de las compaas
[3, 4]. De acuerdo con Meudec [5], hay tres lneas de automatizacin en este
contexto:
1) Ta r e a s a d m in i s t r a t iva s , como el registro de especificaciones o lageneracin de informes.
2) Ta r e a s m e c n ic a s , como la ejecucin y la monitorizacin, o las po-
sibilidades de captura y reejecucin de casos.
3) Ta r e a s d e g e n e r a c i n d e c a s o s d e p r u e b a . Respecto estas ta-
reas, [6] indican tres enfoques:
a. Generar casos de prueba a partir de cdigo fuente para alcanzar
un nivel determinado de cobertura.
b. Dado el conocimiento del ingeniero de pruebas sobre el programa
y sobre su comportamiento esperado, generar automticamente
entradas y comprobar las salidas.
c. Dada una especificacin formal, generar automticamente casos
de prueba para una implementacin de esa especificacin.
En los ltimos aos se han desarrollado una serie de herramientas ligadas al
Test Driven Development(Desarrollo Dirigido por las Pruebas) que han tenido
un xito importante en el desarrollo de software. Estas herramientas, que se
agrupan habitualmente bajo la denominacin X-Unit, automatizan parcialmen-
te las pruebas unitarias de cdigo orientado a objetos, en los que habitualmente
se considera que la unidad de pruebas es la clase. En X-Unit, siendo K la clase
que se va a probar (abreviadamente CUT, de las siglas Class Under Test), se
construye una clase TestK que contiene mtodos (que realmente constituyen
-
8/2/2019 apuntesDoctorado
13/102
Pruebas de sistemas de informacin
14
casos de prueba) que ejercitan las diversas funcionalidades ofrecidas por K. As,
cada caso de prueba suele consistir en la construccin de una instancia de la
CUT, en la ejecucin de una serie de servicios sobre sta y en la comprobacin
del resultado (a lo que se le llama orculo). La Tabla 2 muestra la clase Java Tes-
tAccount, que prueba la clase de dominio Account(que representa una cuenta
bancaria) mediante tres casos de prueba, correspondientes los tres mtodos
test1, test2ytest3.
test1 construye una instancia de la CUT, ingresa 1000 euros en ella y, a
continuacin, comprueba en su orculo que el saldo de la cuenta es, en
efecto, de 1000 euros.
test2 crea una instancia de la CUT, ingresa 300 euros y retira 1000.
Puesto que la cuenta no tiene saldo suficiente, se espera que la CUT
lance una excepcin de saldo insuficiente (que se captura en el bloque
catch), superndose en este supuesto el caso de prueba. Si la excepcin
no se lanza, el control del programa no salta al catch y se ejecutara la
instruccinfail, que indica al entorno de pruebas que el caso no ha sido
superado.
test3 crea una instancia de la CUT, ingresa 1000 euros y luego com-
prueba que el saldo es de 1000 euros; despus retira 300 y comprueba
que el saldo es de 700 euros. Si se produce alguna excepcin, se salta al
bloque catch, que ejecuta elfail, indicando al entorno de pruebas que el
caso de prueba ha fallado.
Una importante ventaja de los entornos X-Unit es que los casos de prueba se
guardan en ficheros separados, lo que permite reejecutarlos segn la CUT va
siendo modificada (lo que los convierte en casos vlidos para pruebas de regre-
sin). Una desventaja es que se requiere un esfuerzo importante para escribir
buenos casos de prueba que consigan probar todo el funcionamiento de la CUT.
Por otro lado, estos entornos no generan normalmente demasiados resultados
cuantitativos sobre los resultados de las pruebas, informando la mayora de
ellos de si los casos han encontrado o no defectos en la CUT.
-
8/2/2019 apuntesDoctorado
14/102
Pruebas de sistemas de informacin
15
package samples.results;
import junit.framework.*;
import samples.Account;
import samples.InsufficientBalanceException;
public class TestAccount extends TestCase {
public void test1() {
Account o=new Account();
o.deposit(1000);
assertTrue(o.getBalance()==1000);
}
public void test2() {
try {
Account o=new Account();
o.deposit(300);
o.withdraw(1000);
fail("InsufficientBalanceException expected");
}
catch (InsufficientBalanceException e) {
}
}
public void test3() {
try {
Account o=new Account();
o.deposit(1000);
assertTrue(o.getBalance()==1000);
o.withdraw(300);
assertTrue(o.getBalance()==700);
}
catch (Exception e) {
fail("Unexpected exception");
}
}
public static void main (String [] args) {
junit.swingui.TestRunner.run(TestAccount.class);
}
}
T a b la 2 . T r e s ca s o s d e p r u e b a d e J U n i t p a r a u n a c la s e Accoun t ( C u e n t a
b a n c a r i a )La Tabla 3 ofrece una valoracin aproximada del grado de automatizacin
que los entornos X-Unit consiguen hacer respecto de la automatizacin de las
pruebas, de acuerdo con las tres lneas mencionadas ms arriba.
Generacin de casos 5%Ejecucin y monitorizacin 100%Tareas mecni-
cas Reejecucin 100%Registro de especificaciones 80%Tareas adminis-
trativas Generacin de informes 10%
T a b la 3 . Au t o m a t i za c i n d e l a s p r u e b a s c o n s e g u id a p o r l o s e n t o r n o s X -U n i t
-
8/2/2019 apuntesDoctorado
15/102
Pruebas de sistemas de informacin
16
As pues, queda bastante por hacer en cuanto a automatizacin de las prue-
bas. En muchas ocasiones, lo que falta es una cultura de pruebas en las propias
empresas. Rice enumera y explica los diez principales obstculos que existen en
las empresas respecto de la automatizacin del proceso de pruebas:
F a lt a d e h e r r a m ie n t a s , debida fundamentalmente a su elevado pre-
cio o a que las existentes no se ajusten al propsito o entorno para el
que se necesitan. La primera razn parece deberse a la no mucha im-
portancia que habitualmente se le da a la fase de pruebas, y eso que el
costo de corregir un error puede, en muchos casos, superar al de la li-
cencia de uso. Sera conveniente evaluar el coste de correccin de defec-
tos del software entregado y compararlo con el de la licencia de la
herramienta de pruebas.
F a l ta d e c o m p a t i b i li d a d e i n t e r o p e r a b i li d a d entre herramientas.
F a l ta d e p r o c e s o d e g e s t i n d e l a c o n f ig u r a c i n . Igual que las di-
ferentes versiones del cdigo fuente, las pruebas, especialmente las de
regresin, deben someterse a un control de versiones. Recurdese que
el proceso de Gestin de la Configuracin es uno de los procesos de so-
porte del estndar ISO/IEC 12207 , que debera utilizarse en la ejecu-cin de los procesos principales, y muy especialmente en los de Desa-
rrollo y Mantenimiento.
F a lt a d e u n p r o c es o b s ic o d e p r u e b a s y de conocimiento de qu
es lo que se debe probar.
F a l t a d e u s o d e l a s h e r r a m i e n t a s d e p r u e b a que ya se poseen,
bien por su dificultad de uso, por falta de tiempo para aprender a ma-
nejarla, por falta de soporte tcnico, obsolescencia, etc. F o r m a c i n in a d e c u a d a en el uso de la herramienta.
La h e r r a m ie n t a n o cu b r e t o d o s lo s t ip o s d e p r u e b a q u e s e d e -
s e a n (correccin, fiabilidad, seguridad, rendimiento, etc.). Obviamen-
te, a la hora de elegir la herramienta, deberan tenerse priorizados los
tipos de pruebas, y entonces hacer la eleccin de la herramienta basa-
dos en esto. A veces tambin es necesario utilizar no una, sino varias
-
8/2/2019 apuntesDoctorado
16/102
Pruebas de sistemas de informacin
17
herramientas de prueba, as como tener en cuenta que es imposible au-
tomatizar el 100% de las pruebas.
F a lt a d e s o p o r t e o c o m p r e n s i n p o r p a r t e d e lo s ge s t o r e s , de-
bido otra vez a la escasa importancia que habitualmente se le da a la fa-
se de pruebas.
O r g a n i za c i n in a d e c u a d a del equipo de pruebas.
Adquisicin de una h e r r a m ie n t a in a d e c u a d a .
-
8/2/2019 apuntesDoctorado
17/102
-
8/2/2019 apuntesDoctorado
18/102
Pruebas de sistemas de informacin
19
Cap tu lo 2 . N IVELES DE PR UEBA
Tradicionalmente, se distinguen dos tipos bsicos de pruebas: pruebas de
caja blanca y pruebas de caja negra que, adems, suelen subdividirse en niveles
aun ms especficos. As, las pruebas de caja blanca se aplican, normalmente, a
pruebas unitarias y a ciertas pruebas de integracin, mientras que las de caja
negra hacen referencia, en general, tanto a pruebas unitarias, como funcionales,
de integracin, de sistema e, incluso, de aceptacin.
En este captulo se presenta una breve introduccin a las pruebas de caja
blanca y negra, y se describen algunas caractersticas de los niveles de prueba.
1.P r u e b a s d e c a ja n e gr a
En este tipo de pruebas, el elemento que se va a probar se entiende como
una caja negra de la que slo se conocen sus entradas y sus salidas. As, al ele-
mento bajo prueba se lo somete a una serie de datos de entrada, se observan las
salidas que produce y se determina si stas son conformes a la entradas introdu-
cidas.
Un conocido problema que se utiliza con frecuencia en el contexto de las
pruebas de software es el de la determinacin del tipo de un tringulo, que fue
originalmente propuesto por Bertrand Myers [7]: adaptado a la orientacin a
objetos, se trata de probar una clase que dispone de una operacin que calcula el
tipo de un tringulo segn las longitudes de los lados. Esta operacin devuelve
un entero que representa si el tringulo es equiltero, issceles, escaleno si no es
un tringulo (porque tenga lados de longitud cero o negativa, o porque la suma
de dos lados sea menor o igual a la suma del tercero). En la Figura 3 se muestra
la estructura de la clase Tringulo, que consta de un constructor, tres operacio-
nes setque asignan una longitud a los lados del tringulo y un mtodo getTipo,
que devuelve un entero que representa el tipo del tringulo.
Bajo un enfoque de caja negra, el punto de vista que interesa al ingeniero de
software se ilustra en las cuatro imgenes de la Figura 3, en las que se pasan
diferentes ternas de valores a los mtodos que asignan la longitud a los lados del
-
8/2/2019 apuntesDoctorado
19/102
Pruebas de sistemas de informacin
20
tringulo (setI, setJ, setK) y luego se comprueba nicamente si el resultado de-
vuelto por getTipo es el correcto.
F ig u r a 3 . E l p r o b l e m a d e l t r i n g u l o , b a jo u n e n f o q u e d e c a ja n e g r a
Como puede comprobarse, si los casos de prueba de caja negra se superan,
el ingeniero de pruebas estar seguro de que la CUT se comporta correctamente
para los datos de prueba utilizados en esos casos de prueba: en el caso del trin-
gulo issceles, por ejemplo, en la figura se comprueba que un tringulo con lon-
gitudes 2, 2 y 3 es issceles; ahora bien, la implementacin de la clase determi-nar tambin que el tringulo es issceles para lados de longitudes 2, 3 y 2?
Con el fin de alcanzar una mayor seguridad respecto del comportamiento
correcto de la CUT se introduce la idea de las pruebas estructurales o de caja
blanca.
2 .P r u e b a s e s t r u c tu r a l e s o d e ca ja b la n c a
Las pruebas de caja blanca realizan, de alguna manera, un seguimiento del
cdigo fuente segn se van ejecutando los casos de prueba, de manera que se
determinan de manera concreta las instrucciones, bloques, etc. que han sido
ejecutados por los casos de prueba. As pues, mediante este tipo de pruebas se
puede saber cunto cdigo se ha recorrido.
As, en el mismo problema del tringulo que comentbamos antes, el inge-
niero de pruebas se fijar ahora en el cdigo que implementa su funcionalidad y
observar, para cada terna de entradas x1, x2, etc., el recorrido seguido por los
casos de prueba en la implementacin de la clase (Figura 4).
-
8/2/2019 apuntesDoctorado
20/102
Pruebas de sistemas de informacin
21
F ig u r a 4 . E l p r o b l e m a d e l t r i n g u l o , d e s d e u n p u n t o d e v is t a d e c a j ab l a n c a
As, dependiendo de las ramas o caminos o nodos visitados por los casos de
prueba, el ingeniero estar ms o menos seguro de la buena, muy buena o me-
diana calidad del software objeto de estudio. Existen formas muy variadas demedir esa cantidad de cdigo recorrido mediante lo que se llaman criterios de
cobertura.
Para Cornett [8], el anlisis de cobertura del cdigo es el proceso de:
- Encontrar fragmentos del programa que no son ejecutados por los ca-
sos de prueba.
- Crear casos de prueba adicionales que incrementen la cobertura.
- Determinar un valor cuantitativo de la cobertura (que es, de manera
indirecta, una medida de la calidad del programa).
Adicionalmente, el anlisis de cobertura tambin permite la identificacin
de casos de prueba redundantes, que no incrementan la cobertura.
3 .P r u e b a s u n it a r i a s
Las pruebas unitarias centran su aplicacin en lo que se denomina la uni-
dad de prueba que, dependiendo del contexto, puede ser una clase, un mtodo
o un subsistema. El estndar ANSI/IEEE 1008/1987, define la unidad de prue-
ba de la siguiente forma [9]:
Un conjunto de uno o ms mdulos de un programa, junto a con los datos de
control asociados (por ejemplo, tablas), procedimientos de uso y procedimien-
tos de operacin que satisfagan las siguientes condiciones:
(1) Todos los mdulos pertenecen a un nico programa
(2)Al menos uno de los mdulos nuevos o cambiados del conjunto no ha pa-
sado las pruebas unitarias (puesto que una unidad de prueba puede conte-
ner uno o ms mdulos previamente probados)
-
8/2/2019 apuntesDoctorado
21/102
Pruebas de sistemas de informacin
22
(3) El conjunto de mdulos junto con sus datos y procedimientos asociados
son el nico objetivo del proceso de pruebas
En general, en orientacin a objetos se asume que la unidad de prueba es la
clase, por lo que se comprueba que el estado en el que queda la instancia de laclase que se est probando1 es correcto para los datos que se le pasan como en-
trada. As, las pruebas unitarias de caja negra entienden la clase como, en efec-
to, una caja cuyo interior no interesa: lo nico que importa desde este punto de
vista es el conjunto de entradas suministradas y las salidas obtenidas.
3.1. U n m o d e lo d e p r o ce s o p a r a p r u e b a s u n it a r ia s
Las pruebas de caja negra y de caja blanca no son excluyentes, sino que son
complementarias: con las de pruebas de caja negra se buscan errores en la CUT,
y con las de caja blanca nos aseguramos de que todo el cdigo (segn el criterio
de cobertura que se haya seleccionado) ha sido recorrido.
As, un proceso de pruebas unitarias que combine tcnicas de caja negra con
tcnicas de caja blanca seguir los siguientes pasos:
1) Sea Cla CUT
2) Escribir un conjunto de casos de prueba TCpara probar C
3) Ejecutar TCsobre Ccon una herramienta de caja negra4) Si TCdescubre errores en C, entonces corregir Cy volver al paso 3
5) Ejecutar TCsobre Ccon una herramienta de caja blanca
6) Si TCno alcanza un umbral de cobertura mnimo sobre C, entonces es
necesario escribir nuevos casos de prueba que se aaden a TC,y se vuel-
ve al paso 3
7) Se est en este paso cuando TCno ha encontrado errores en Cy cuando
TCha recorrido todo el cdigo de C. En esta situacin, todo el cdigo ha
sido probado sin descubrir errores, con lo que la clase Ctiene una cali-
dad muy alta.
Este proceso se muestra grficamente en la Figura 5: obsrvese que, despus
de ejecutar las pruebas de caja blanca, el ingeniero de pruebas se pregunta si la
cobertura obtenida alcanza un determinado umbral, que deber haber sido
1 A la clase que se est probando se la llama en ingls class under test,y en muchos artculos
y papers se abrevia diciendo CUT.
-
8/2/2019 apuntesDoctorado
22/102
Pruebas de sistemas de informacin
23
determinado con anterioridad al comienzo del proceso. Dependiendo del crite-
rio de cobertura elegido, el umbral puede ser ms o menos exigente: as, matar
ms del 90% de los mutantes puede ser muy difcil para algunos problemas, por
lo que este valor sera un buen umbral al utilizar tcnicas de mutacin; para co-
bertura de sentencias, sin embargo, es necesario recorrer el 100% de ellas.
Aadir casos a TC
Seleccionar C(CUT)
Generar un conjunto decasos TCpara probar C
Caja negra:
buscar errores en C
usando TC
Corregir C
[se encuentran errores]
Caja blanca:
medir cobertura de TCsobre C
[se alcanza umbral]
[no se encuentran errores]
[no se alcanza umbral]
F ig u r a 5 . E s t r u c t u r a d e l p r o c e so d e p r u e b a s u n i ta r i a s , c o m b i n a n d op r u e b a s f u n c io n a l es ( c a ja n e g r a ) c o n e s t r u c t u r a l e s ( ca j a b l a n c a )
4 .P r u e b a s d e in t e gr a c i nLas pruebas de integracin se emplean para comprobar que las unidades de
prueba, que han superado sus pruebas de unidad, funcionan correctamente
cuando se integran, de manera que lo que se tiende a ir probando es la arquitec-
tura software. Durante la integracin, las tcnicas que ms se utilizan son las de
caja negra, aunque se pueden llevar a cabo algunas pruebas de caja blanca para
asegurar que se cubren los principales flujos de comunicacin entre las unida-
des [10].
-
8/2/2019 apuntesDoctorado
23/102
Pruebas de sistemas de informacin
24
En el contexto de la orientacin a objetos, las pruebas de integracin pre-
tenden asegurar que los mensajes que fluyen desde los objetos de una clase o
componente se envan y reciben en el orden adecuado en el objeto receptor, as
como que producen en ste los cambios de estado que se esperaban [11].
5.P r u e b a s d e s is t em a
Las pruebas de sistema tienen por objetivo comprobar que el sistema, que
ha superado las pruebas de integracin, se comporta correctamente con su en-
torno (otras mquinas, otro hardware, redes, fuentes reales de informacin,
etc.).
Bajo este nivel de pruebas encontramos varios subniveles [10]:
1) Pruebas de recuperacin. Consisten en forzar el fallo del software y com-
probar que la recuperacin se lleva a cabo de manera correcta, devolviendo al
sistema a un estado coherente.
2) Pruebas de seguridad. Intentan verificar que los mecanismos de protec-
cin incorporados al sistema lo protegern, de hecho, de penetraciones inade-
cuadas.
3) Pruebas de resistencia. Estas pruebas estn diseadas para que el sistema
requiera recursos en cantidad, frecuencia o volumen anormales. La idea es in-
tentar que el sistema se venga abajo por la excesiva tensin a la que se lo some-
te.
4) Pruebas de rendimiento. En sistemas de tiempo real o sistemas empotra-
dos, es inaceptable que el software proporcione las funciones requeridas fuera
de las condiciones de rendimiento exigidas.
6 .Ejercicios1) Escriba una clase para calcular el valor medio de 3 nmeros que se pasan
como parmetros. A continuacin, someta el programa al proceso de pruebas
descrito en la Figura 5 hasta que:
(a) Se hayan recorrido todas las sentencias.
(b) Se hayan recorrido todas las condiciones a true y afalse.
La interfaz de la clase debe ser la siguiente:
-
8/2/2019 apuntesDoctorado
24/102
Pruebas de sistemas de informacin
25
Medio
+Medio(int a, int b, int c)+getMedio():int
-
8/2/2019 apuntesDoctorado
25/102
-
8/2/2019 apuntesDoctorado
26/102
Pruebas de sistemas de informacin
27
Cap tu lo 3 . P RU EBAS DE CAJ A BLANCA
Como se ha comentado en el captulo anterior, en las pruebas de caja blanca
el ingeniero de pruebas se interesa por conocer las regiones del cdigo que han
sido recorridas. As, si se encuentra con que una zona del cdigo no ha sido re-
corrida por los casos de prueba, se aadirn nuevos casos de prueba que fuercen
a que se pase por ah.
1.M e d id a s d e la c o b e r t u r aLa cobertura es la cantidad de cdigo recorrido por un conjunto de casos de
prueba. Existen multitud de formas de medir cunto cdigo se ha recorrido. A
continuacin se presentan algunos de ellos.
1.1. Co b e r t u r a d e s e n t e n c ia s
Este criterio se satisface cuando se recorren todas las sentencias del pro-
grama al menos una vez.
1.2. Co b e r t u r a d e d e c is io n e s , d e r a m a s o d e t o d o s l o s a r c o s
Una condicin es un par de expresiones algebraicas relacionadas por un
operador relacional (, =, >=,
-
8/2/2019 apuntesDoctorado
27/102
Pruebas de sistemas de informacin
28
As, la decisin de la lnea 11 se considerar recorrida de acuerdo con este
criterio cuando se entre al bloque de las lneas 12 y 13 y se entre tambin al blo-
que de las lneas 15 y 16. Para que estas dos circunstancias acontezcan, debe
ocurrir que la decisin (i+j
-
8/2/2019 apuntesDoctorado
28/102
Pruebas de sistemas de informacin
29
1.4. C o b e r t u r a d e c o n d i c i o n e s / d e c i s i o n e s ( Dec i s ion /Condi t ion co-
v e r a g e , o DCC)
Requiere que cada condicin de cada decisin se evale a true y a false al
menos una vez, y que cada decisin se evale a true y afalse al menos una vez.
1.5. Co b e r t u r a m o d i fi ca d a d e c o n d i ci o n e s / d e c i si o n e s ( M C/ D C) .
Adems de requerir el criterio anterior, se requiere que cada condicin afec-
te independientemente a la decisin.
1.6. Co b e r t u r a m l t ip l e d e c o n d i c io n e s ( M CC)
Este criterio requiere que todas las condiciones tomen valor trueyfalse, de
manera que se recorra la tabla de verdad completa de la decisin.
1.7. Co b e r t u r a d e t o d o s l o s u s o s (al l -uses )
Dada una variable x, un conjunto de casos de prueba verifica el criterio de
todos los usos paraxsi todos los posibles caminos que hay entre la definicin de
xy todos los usos de esta variable son recorridos.
1.8. Co b e r t u r a d e c a m i n o s
Este criterio requiere que se recorran todos los caminos linealmente inde-
pendientes que se encuentren en el grafo de flujo de la unidad que se est pro-
bando. El nmero de caminos linealmente independientes coincide con la com-
plejidad ciclomtica de McCabe, la cual puede calcularse contando el nmero de
instrucciones que crean ramas. En el cdigo del Figura 6, hay 11 instrucciones if,
con lo que la complejidad ciclomtica de ese fragmento de cdigo es 11. Este va-
lor coincide con el nmero de regiones que pueden encontrarse en el diagrama
de flujo correspondiente al cdigo que se est probando: la Figura 7 muestra el
diagrama de flujo correspondiente a dicho fragmento de cdigo, en el que pue-
den apreciarse once reas (incluyendo la exterior).
Para alcanzar este criterio de cobertura en este ejemplo, deberan utilizarse
once casos de prueba adecuados que recorrieran todos los posibles caminos.
-
8/2/2019 apuntesDoctorado
29/102
Pruebas de sistemas de informacin
30
1.9. Co b e r t u r a d e f u n c io n e s
Este criterio se verifica cuando se ha llamado a todas las funciones y proce-
dimientos.
1.10. Co b e r t u r a d e lla m a d a s
Se verifica cuando se han ejecutado todas las llamadas a a funciones y pro-
cedimientos. No debe confundirse con la cobertura de funciones: en la cobertura
de funciones contamos cuntas funciones de las que hay en nuestro programa
han sido llamadas, mientras que la cobertura de llamadas cuenta cuntas de las
llamadas a funciones que hay en el programa se han ejecutado.
1.11. Cu b r im i en t o d e b u c le s
Se verifica cuando todos los bucles se han ejecutados cero veces (excepto pa-
ra bucles do..while), una vez y ms de una vez.
1.12. Cu b r im i en t o d e ca r r e r a
Comprueba el nmero de tareas o hilos que han ejecutado simultneamente
el mismo bloque de cdigo.
1.13. Co b e r t u r a d e o p e r a d o r e s r e la c io n a le s
Comprueba si se han ejecutado los valores lmite en los operadores relacio-
nales (>, =,
-
8/2/2019 apuntesDoctorado
30/102
Pruebas de sistemas de informacin
31
F ig u r a 7. D ia g r a m a d e f lu j o p a r a e l c d ig o d e l m t o d o g e t T y p e de l aF ig u r a 6
-
8/2/2019 apuntesDoctorado
31/102
Pruebas de sistemas de informacin
32
2 .La m u t a c i n
En el contexto de las pruebas del software, un mutante es una copia del pro-
grama que se est probando (programa original) al que se le ha introducido un
nico y pequeo cambio sintctico que no impide que el programa compile (por
ejemplo, cambiar un signo + por un * en una expresin aritmtica). As, puede
entenderse que el mutante es una versin defectuosa del programa original: es
decir, el mutante es el programa original, pero en el que se ha introducido o en
el que se ha sembrado un fallo.
El lado izquierdo de la Figura 8 muestra el cdigo del programa que vamos a
probar (Original) y el de algunos mutantes. En el lado derecho aparecen cua-
tro casos de prueba y los resultados de cada uno sobre las diferentes versionesdel programa. Obsrvese que:
El par (1,1) produce salidas diferentes en el programa original y en
los mutantes 1, 2 y 3: esto significa que este caso de prueba es bueno
porque ha encontrado los errores introducidos en esas tres versiones.
El par (0,0) encuentra solamente el error del mutante 3. Respecto de
la coleccin de mutantes mostrada en la figura, es un caso de prueba
algo peor que el (1,1), pues encuentra menos errores. El mutante 4 ofrece exactamente la misma salida que el programa
original para todos los datos de prueba. Adems, nos resultar impo-
sible encontrar un caso de prueba que consiga que la salida de este
mutante sea distinta.
-
8/2/2019 apuntesDoctorado
32/102
Pruebas de sistemas de informacin
33
( a ) Un p r o gr a m a y u n o s m u -t a n t e s
Vers in Cdigo
Original
int suma(int a, int b){
return a + b;
}
Mutant 1
int suma(int a, int b){
return a - b;}
Mutant 2
int suma(int a, int b){
return a * b;}
Mutant 3
int suma(int a, int b){
return a/ b;}
Mutant 4int suma(int a, int b){
return a + b+ + ;}
D a t o s d e p ru e b a ( a , b )
(1, 1) (0 , 0 ) (-1, 0 ) (-1, -1)
Original 2 0 -1 -2
Mutante 1 0 0 -1 0
Mutante 2 1 0 0 1
Mutante 3 1 Error Error 1Versiones
Mutante 4 2 0 -1 -2
(b ) R e s u lt a d o s c o n a l gu n o s d a t o s d e p r u e b a
F ig u r a 8 . U n p r o g r a m a , va r i o s m u t a n t e s y l o s r e s u l ta d o s c o n a l gu n o sc a so s d e p r u e b a
2.1. Algo de t e r m ino log a
Dado un programa original y un conjunto de mutantes, se dice que un caso
de prueba mata un mutante cuando la salida del mutante es distinta de la delprograma original para ese caso de prueba. As pues, en la Figura 8, el caso de
prueba formado por el par (1,1) mata a los mutantes 1, 2 y 3, mientras que (0,0)
mata tan solo al mutante 3.
No hay ningn caso de prueba en nuestro test suite que sea capaz de matar
al mutante 4, por lo que se dice que este mutante est vivo. Adems, dado el
cambio introducido en el cdigo de este mutante, resultar imposible escribir un
caso de prueba que lo mate, por lo que se dice que el mutante es funcionalmen-
te equivalente.
2.2 . La m u t a c i n c o m o c r it e r i o d e co b e r t u r a
Dado un programaPformado por n lneas de cdigo y dos test suites t1yt2
que sirven para probarP, podemos afirmar (con alguna salvedad que no merece
la pena entrar a discutir) que t1 es mejor que t2si t1 recorre ms sentencias deP
que t2. As pues, la cobertura que un determinado conjunto de casos de prueba
-
8/2/2019 apuntesDoctorado
33/102
Pruebas de sistemas de informacin
34
alcanza en un programa es un indicador de la calidad de ese conjunto de casos
de prueba.
Del mismo modo, cuantos ms mutantes mate un test suite, mejor es dicho
test suite. De hecho, se dice que un test suite es adecuado para la mutacin (mu-
tation-adequate) cuando mata el 100% de los mutantes no equivalentes. As
pues, el grado de adecuacin a la mutacin se mide calculando el mutation sco-
re, utilizando la frmula de la Figura 9.
)(),(
EM
KTPMS
= , where:
P: programa bajo pruebaT: test suite
K: nmero de mutantes muertosM : nmero de mutantes generadosE: nmero de mutantes equivalentes
Figur a 9 . C lcu lo de l m u t a t i o n s co r e
El objetivo de las pruebas utilizando mutacin consiste en construir casos de
prueba que descubran el error existente en cada mutante. As pues, los casos de
prueba sern buenos cuando, al ser ejecutados sobre el programa original y so-
bre los mutantes, la salida de stos difiera de la salida de aqul, ya que esto sig-
nificar que las instrucciones mutadas (que contienen el error) han sido alcan-
zadas por los casos de prueba (o, dicho con otras palabras, que los casos de
prueba han descubierto los errores introducidos).
2.3 . P r o c es o d e p r u e b a s b a s a d o e n m u t a c i n
La Figura 10 muestra el proceso de mutacin propuesto por Offutt [12]. Las
lneas punteadas indican tareas manuales, mientras que las de trazo continuo
son tareas automatizables. Inicialmente se genera el conjunto de mutantes, el
conjunto de casos de prueba y se define un umbral que representa el porcentaje
mnimo de mutantes muertos que debe alcanzarse (el valor mnimo del muta-
tion score). Entonces se ejecutan los casos de prueba sobre el programa originaly sobre los mutantes, y se calcula el porcentaje de mutantes muertos. Si no se ha
alcanzado el umbral previamente definido, se eliminan los casos de prueba que
no han matado mutantes y se generan casos de prueba nuevos, especialmente
dirigidos a matar los mutantes que han permanecido vivos.
-
8/2/2019 apuntesDoctorado
34/102
Pruebas de sistemas de informacin
35
Progamaoriginal P
Crearmutantes M
Crear casosde prueba T
Se alcanzel umbral?
Corregir P
Ejecutar T sobreP
P(T) es
correcta?
Fin
Eliminar loscasos de prueba
ineficientes
No
S
S
No
Ejecutar T sobrecada mutante
vivoDefinir umbral
F ig u r a 10 . P r o c e s o d e p r u e b a s u s a n d o m u t a c i n p r o p u e s t o p o r O f fu t t[13]
El proceso anterior tiene una desventaja importante: si se encuentra que
P(T) no es correcta, Pdebe ser corregido y, los mutantes, generados de nuevo,
con el coste que supone esta tarea. As pues, como se ha discutido en [14], es
preferible utilizar el proceso descrito en la Figura 5.
Para matar a un mutante deben producirse tres condiciones:
- Alcance : la sentencia mutada debe ser ejecutada por el caso de prue-
ba.
- Neces idad : entre la entrada y la salida del programa debe crearse un
estado intermedio errneo.
- Suf ic iencia : el estado incorrecto debe propagarse hasta la salida del
programa.
La condicin de suficiencia puede ser difcil de conseguir en muchas ocasio-
nes, lo que puede dificultar la obtencin de casos de prueba a un coste razona-
-
8/2/2019 apuntesDoctorado
35/102
Pruebas de sistemas de informacin
36
ble. La mutacin dbilse queda en la condicin de necesidadpara determinar
que un caso de prueba ha matado a un mutante: compara el estado intermedio
del mutante y el del programa original inmediatamente despus de haber ejecu-
tado la instruccin mutada, marcando el mutante como muerto si los estados
son diferentes. Se ha comprobado experimentalmente que esta tcnica puede
ahorrar hasta el 50% del coste de las pruebas sin degradar excesivamente su
calidad.
2 .4 . O p e r a d o r e s d e m u t a c i n
La generacin de mutantes se consigue aplicando operadores de mutacin
al cdigo fuente del programa que queremos probar. La Tabla 4 muestra algu-
nos de los operadores de mutacin citados en Offutt et al. [13].
O p e ra d o r D e s c r i p c i n
ABS Sustituir una variable por el valor absoluto de dicha variable ACR Sustituir una referencia variable a un array por una constante AOR Sustitucin de un operador aritmticoCRP Sustitucin del valor de una constanteROR Sustitucin de un operador relacionalRSR Sustitucin de la instruccin ReturnSDL Eliminacin de una sentenciaUOI Insercin de operador unario (p.ej.: en lugar de x, poner x)
T a b la 4 . Al gu n o s o p e r a d o r e s d e m u t a c i n c l s ic o s
El nmero de mutantes que puede generarse a partir de un programa senci-
llo, de pocas lneas de cdigo, es muy grande (pinsese que el operador AOR,
por ejemplo, puede aplicarse a cada aparicin de un operador aritmtico en el
programa original), resultando tambin muy costosas tanto la ejecucin de los
casos de prueba con cada mutante como la comprobacin de la salida del pro-
grama. Por ello, se han realizado algunos estudios encaminados a disminuir los
costes de este tipo de pruebas, evidencindose que, aplicando pocos operadores,
se pueden conseguirse los mismos resultados que si se aplicaran muchos. Los
operadores ms efectivos son elABS, 0 (sustitucin de una variable por el valor
0), 0 (sustitucin
de una variable por un valor mayor que 0), AOR, ROR y UOI.
Adems, tambin se han propuesto operadores especficos para programas
escritos en lenguajes orientados a objeto, algunos de los cuales se muestran en
la Tabla 5 .
-
8/2/2019 apuntesDoctorado
36/102
Pruebas de sistemas de informacin
37
O p e ra d o r D e s c r i p c i n
AMC (Access ModifierChange)
Reemplazo del modificador de acceso (por ejemplo: ponemosprivateen lugar depublic)
AOC (Argument OrderChange)
Cambio del orden de los argumentos pasados en la llamada a un mto-do (p.ej.: en lugar dePersona p=new Persona(Paco, Pil) poner
Persona p=new Persona(Pil, Paco)CRT (Compatible Ref-erence Type Replace-ment)
Sustituir una referencia a una instancia de una clase por una referenciaa una instancia de una clase compatible (p.ej.: en vez de ponerPersona
p=new Empleado() , ponerPersona p=new Estudiante()).EHC (Exception Han-dling Change)
Cambiar una instruccin de manejo de excepciones (try...catch) por unsentencia que propague la excepcin (throw), y viceversa
EHR (ExceptionHandgling Removal)
Eliminacin de una instruccin de manejo de excepciones
HFA (Hiding Fieldvariable Addition)
Aadir en la subclase una variable con el mismo nombre que una va-riable de su superclase
MIR (Method Invoca-tion Replacement)
Reemplazar una llamada a un mtodo por una llamada a otra versindel mismo mtodo
OMR (OverridingMethod Removal)
Eliminar en la subclase la redefinicin de un mtodo definido en unasuperclase
POC (Parameter OrderChange)
Cambiar el orden de los parmetros en la declaracin de un mtodo(p.ej.: ponerPersona(String apellidos, String nombre) en vez dePer-sona(String nombre, String apellidos)
SMC (Static ModifierChange)
Aadir o eliminar el modificador static
T a b la 5 . Al gu n o s o p e r a d o r e s d e m u t a c i n p a r a o r i e n t a c i n a o b j e t o s
3 .Ejercicios
1) Escriba casos de prueba para lograr cobertura de sentencias, de condicio-
nes y de caminos para el problema del tringulo.2) Escriba casos de prueba para matar a todos los mutantes del ejercicio 1
del captulo anterior.
3) Se dice que un criterio de cobertura C1 subsume a otro C2 si, para todo
programa P, cualquier caso de prueba T que satisface C1 satisface tambin C2.
Proponga algunos operadores de mutacin para conseguir que la mutacin
subsuma al criterio de decisiones. Se puede conseguir lo mismo para el criterio
de condiciones?
4) Para diagramas de flujo pueden definirse criterios de cobertura como To-
dos los caminos, Todos los arcos o Todos los nodos. Existen relaciones de sub-
suncin entre estos criterios?
-
8/2/2019 apuntesDoctorado
37/102
-
8/2/2019 apuntesDoctorado
38/102
Pruebas de sistemas de informacin
39
Cap tu lo 4 .LOS VALORE S INTERESANTES
En este captulo se introduce y profundiza en el concepto de valor intere-
sante, se revisan dos tcnicas para utilizarlos y se describen algunos criterios de
cobertura para valores.
1.U n e s t u d i o i n i cia l d e l p r o b le m a d e l t r i n g u l o
Si queremos aplicar correctamente el proceso de pruebas descrito en la
Figura 5 (pgina 23) al problema del tringulo (la implementacin de su mtodogetTipo se daba en la Figura 6, pgina 28), el ingeniero de pruebas deber escri-
bir casos de prueba que utilicen, como parmetros de los mtodos setI, setJy
setK, buenos valores, en el sentido de que con ellos se recorra la mayor canti-
dad posible de cdigo fuente, en funcin del criterio de cobertura elegido.
public void testEQ1() {
Triangulo t=new Triangulo();
t.setI(5);
t.setJ(5);
t.setK(5);
assertTrue(t.getTipo()==t.EQUILATERO);
}
public void testEQ2() {
Triangulo t=new Triangulo();
t.setI(3);
t.setJ(3);
t.setK(3);
assertTrue(t.getTipo()==t.EQUILATERO);
}
public void testIS1() {
Triangulo t=new Triangulo();
t.setI(3);
t.setJ(5);
t.setK(5);
assertTrue(t.getTipo()==t.ISOSCELES);
}
public void testIS2() {
Triangulo t=new Triangulo();
t.setI(5);
t.setJ(3);
t.setK(5);
assertTrue(t.getTipo()==t.ISOSCELES);
}
public void testES1() {
Triangulo t=new Triangulo();
t.setI(4);
t.setJ(3);
t.setK(5);
assertTrue(t.getTipo()==t.ESCALENO);
}
public void testES2() {
Triangulo t=new Triangulo();
t.setI(3);
t.setJ(4);
t.setK(5);
assertTrue(t.getTipo()==t.ESCALENO);
}
public void testNT1() {
Triangulo t=new Triangulo();
t.setI(1);
t.setJ(2);
t.setK(3);
assertTrue(t.getTipo()==t.NO_TRIANGULO);
}
public void testNT2() {
Triangulo t=new Triangulo();
t.setI(0);
t.setJ(2);
t.setK(3);
assertTrue(t.getTipo()==t.NO_TRIANGULO);
}
F ig u r a 11. Oc h o c a s o s d e p r u e b a e n J U n i t p a r a e l p r o b l e m a d e lTr ingu lo
La Figura 11 muestra ocho casos de prueba en formato JUnit para este pro-
blema. Como se observa, se han escrito dos casos para cada una de las posibles
-
8/2/2019 apuntesDoctorado
39/102
Pruebas de sistemas de informacin
40
salidas del mtodo getTipo. Al medir la cobertura de sentencias alcanzada por
estos casos de prueba, se observa que se recorre el 88% de ellas (Figura 12).
Figu r a 12 . Se n te n cia s eje cu t a d as ( ) y n o e je cu t a da s ( ) en g e t T i p o
p o r l o s ca s o s d e p r u e b a d e l a F ig u r a 11Puesto que no alcanzamos el umbral del 100% con este criterio de cobertura,
de acuerdo con la discusin de Cornett que mencionbamos en la pgina 21,
debemos escribir nuevos casos de prueba que ejecuten las lneas no recorridas,
que son las que se sealan con la marca en la Figura 12. As, debemos escribir
un caso que corresponda a un tringulo issceles tal que la longitud del tercer
lado sea menor que la suma de los otros dos (i+j>k), y otro que corresponda al
no tringulo que se determina en las ltimas lneas.
-
8/2/2019 apuntesDoctorado
40/102
Pruebas de sistemas de informacin
41
La adicin de un nuevo caso con los valores (3, 3, 1) recorre las primeras l-
neas indicadas, y el caso (5, 5, 10) recorre las ltimas. Por tanto, con esta pe-
quea batera de casos conseguiramos una cobertura de sentencias del 100%.
Con este mismo conjunto de casos de prueba, tambin conseguimos cobertura
del 100% en el criterio todos los usos (descrito en la pgina 29).
Sin embargo, si utilizamos la mutacin como criterio de cobertura, estos ca-
sos de prueba matan tan slo el 2% de los mutantes que MuJava genera. MuJa-
va es una herramienta para realizar pruebas de caja blanca de programas Java
utilizando mutacin [15]. Para el problema del tringulo, MuJava genera 479
mutantes tradicionales (correspondientes a aplicar los operadores mostrados
en la Tabla 4, pgina 36) y 82 mutantes de clase (correspondientes a los ope-radores que explotan especficamente las caractersticas de los lenguajes de pro-
gramacin orientados a objeto, mostrados en la Tabla 5, pgina 37).
La Figura 13 muestra, en un pantallazo de MuJava, el cdigo de la clase
Tringulo y de unos de sus mutantes tradicionales: obsrvese que la instruccin
modificada (se ha sustituido el operador
-
8/2/2019 apuntesDoctorado
41/102
Pruebas de sistemas de informacin
42
Figur a 13 . Cd igo de l a c la s e Tr in gu lo o r ig in a l ( a r r iba ) y de l m u ta n teR O R _ 112 g e n e r a d o p o r M u J a v a ( a b a j o )
2 .Co n c e p t o d e va l o r i n t e r e s a n t e
Desde el punto de vista del testing, un valor interesante es cualquier valor
que el ingeniero de pruebas considera que debe ser utilizado para sus casos de
prueba [16]. Como ya se ha mencionado, es preciso tener cierta picarda para
elegir estos valores, ya que deben ir utilizndose aquellos que vayan ejercitando
todas las regiones del cdigo.
As pues, y volviendo a los dos casos de prueba de la Figura 16, la terna de
valores (5, 5, 5) no es interesante porque tenemos con anterioridad la (3, 3, 3).
Para proponer valores realmente interesantes existen varias tcnicas bienconocidas que, no obstante, vamos a recordar en las siguientes secciones.
2.1. Clases de equ iva len c ia
Con esta tcnica, se divide el dominio de valores de entrada en un nmero
finito de clases de equivalencia. Se asume que el comportamiento de la CUT an-
te un elemento cualquiera de una clase de equivalencia dada ser el mismo.
-
8/2/2019 apuntesDoctorado
42/102
Pruebas de sistemas de informacin
43
2.2 . Valor es l m i te
Esta tcnica complementa a la anterior: en lugar de elegir cualquier valor de
la clase de equivalencia, se seleccionan los valores situados en los lmites de las
clases de equivalencia.
Tanto la tcnica de valores lmite como la de clases de equivalencia pueden
ser aplicadas al conjunto de salida, de forma que lo que se particiona no es el
dominio de entrada, sino el de salida, con lo que los casos de prueba que se
construyan (que sern las entradas del programa bajo prueba) debern ser ca-
paces de generar las salidas en cada una de las clases de equivalencia de salida.
2.3 . F u n d a m e n t o m a t e m t ico
Hoffman et al. [17] exploran los fundamentos matemticos de las tcnicas de
valores lmite y clases de equivalencia. SiendoD=(d0, , dn-1) un dominio de
datos de entrada no vaco y ordenado para un cierto parmetro, se definen las
siguientes funciones:
+
+0| then
9. requiredTC = requiredTC testCasesThatKillN10. for i=1 to |testCasesThatKillN|11. testCase = testCasesThatKillN[i]12. testCase.removeAllTheMutantsItKills()13. next14. n = |mutants|-|mutantsNowKilled|15. else16. n = n 117. end if18. end_while19. return requiredTC20.end
F ig u r a 17. Al go r i t m o p a r a m i n i m i z a r e l c o n ju n t o d e c a s o s d e p r u e b a
A la funcin encargada de recoger el conjunto de casos de prueba que matan
a n mutantes se la llama en la lnea 7 de la figura anterior, y se detalla en la
Figura 18. Recorre los elementos contenidos en testCaseResults y toma aquellos
casos cuya lista de killedMutants (Figura 17) tenga n elementos.
-
8/2/2019 apuntesDoctorado
49/102
Pruebas de sistemas de informacin
50
1. getTestCasesThatKillN(completeTC : SetOfTestCases, n : int, mutants : SetOfMutants,mutantsNowKilled : SetOfMutants,testCaseResults: SetOfTestCaseResults)
2. testCasesThatKillN = 3. for i=1 to |testCaseResults|
4. testCaseResult = testCaseResults[i]5. if |testCaseResult.killedMutants| == n then
6. testCasesThatKillN = testCasesThatKillN testCaseResult.testCaseName7. mutantsNowKilled = mutantsNowKilled testCaseResult.killed.Mutants8. mutants = mutants mutantsNowKilled9. for j=1 to | testCaseResults |10. aux = testCaseResults[j]11. if aux.testCaseName testCaseResult.testCaseName then12. aux.remove(mutantsNowKilled[i]13. end_if14. next15. end_if16. next
17. return testCasesThatKillN18. end
F ig u r a 18 . R e c u p e r a c i n d e l o s ca s o s q u e m a t a n n m u t a n t e s
4.1.1 E j e m p l o
La Figura 19 muestra los resultados de ejecutar un conjunto de casos de
prueba sobre una clase original y sus mutantes. La celda (i,j) se marca con un
aspa si el caso de prueba (que aparece en la columna j) mata al mutante (que
aparece en la fila i-sima). Los algoritmos vistos trabajan con estructuras de
datos de este estilo para realizar la minimizacin del conjunto de casos. En laparte inferior de la figura aparece el conjunto reducido de casos de prueba.
F ig u r a 19 . Ta b l a d e m u t a n t e s m u e r t o s p o r u n c o n j u n t o d e ca s o s d ep r u e b a
-
8/2/2019 apuntesDoctorado
50/102
Pruebas de sistemas de informacin
51
4 .2 . Algor i tmo HGS
Harrold, Gupta y Soffa [18] proponen un algoritmo voraz (conocido como
HGS) para obtener, a partir de un conjunto de casos de prueba dado, otro nuevo
conjunto con menor tamao que conserve los requisitos deseados del conjunto
original.
Los pasos principales de este algoritmo son:
1) Inicialmente, todos los requisitos estn no marcados.
2) Aadir al resultado los casos de la prueba que verifican un requisito, y
marcar los requisitos cubiertos por los casos seleccionados.
3) Ordenar los requisitos no marcados de acuerdo con el nmero de casos
que satisfacen ese requisito. Si varios requisitos son satisfechos por va-rios casos de prueba, seleccionar el caso de la prueba que marque ms
requisitos. Marcar los requisitos satisfechos por los casos seleccionados.
Eliminar casos redundantes, que son los que no cubren ms requisitos
no marcados.
4) Repetir el paso 3) hasta que todos los requisitos de prueba estn marca-
dos.
4 .3 . M e jo r a s d e G u p t a
Con diversos colaboradores, Gupta ha propuesto varias mejoras al algoritmo
anterior:
Con Jeffrey [19], Gupta le agrega redundancia selectiva. La redun-
dancia selectiva permite seleccionar los casos de prueba que, para
cualquier requisito dado, proporciona la misma cobertura que otro
caso previamente seleccionado. As, quiz T' alcance el criterio de
condiciones, pero quiz no el de todos los mutantes; por tanto, un
nuevo caso tpuede ser aadido a T'si aumenta la cobertura en cuan-
to a mutantes: ahora, T'no aumentar el criterio de condiciones, pero
s el de mutantes.
Con Tallam [20], la seleccin de los casos de la prueba se basa en tc-
nicas de Anlisis de Conceptos. Segn los autores, este algoritmo ob-
tiene un conjunto reducido con el mismo tamao y en un tiempo si-
milares al algoritmoHGSoriginal.
-
8/2/2019 apuntesDoctorado
51/102
Pruebas de sistemas de informacin
52
4 . 4 . Alg o r i t m o d e H e i m d a h l y Ge o r g e
Heimdahl y George [21] tambin proponen un algoritmo voraz para reducir
el conjunto de casos de prueba. Bsicamente, toman un caso al azar, lo ejecutan
y comprueban la cobertura alcanzada. Si ste es mayor que la cobertura ms alta
alcanzada, lo agregan al conjunto resultado. El algoritmo se repite cinco veces
para obtener cinco conjuntos reducidos distintos, quedndose con el ms pe-
queo. Puesto que el azar es un componente esencial de este algoritmo, la buena
calidad de los resultados no est garantizada.
4.5 . Alg o r i t m o d e M c M a s t e r y M e m o n
McMaster y Memon [22] presentan tambin un algoritmo voraz. El parme-
tro considerado para incluir los casos de prueba en el conjunto reducido se basa
en las pilas de llamadas nicas que los casos de prueba producen en el pro-
grama bajo prueba.
5.Ejercicios
1) Suponga que disponemos de un sistema como el mostrado en la figura.
Proponga valores interesantes de tipoPersona para las operaciones addysetJe-
fe deltipoProyecto.
PersonaProyecto*
jefe
miembros
+add(p:Persona)
+setJefe(p:Persona)nombre:String
apellidos:String
fechaNac:Date
Categora
categora
{incluido}
2) Proponga una serie de valores interesantes para el tringulo y para el
problema de calcular el mximo que se propuso en un captulo anterior. (a)
Combine dichos valores para obtener casos de prueba cumpliendo los criterios
1-wise choiceypair-wise. (b) Ejecute los casos de prueba y compare la cobertu-
ra de cdigo fuente que alcanza cada conjunto de casos utilizando sentencias y
mutantes. (c) En alguno de los dos conjuntos hay casos de prueba redundan-
tes? En caso afirmativo, respecto de qu criterio de cobertura? Los casos re-
dundantes respecto de un criterio, lo son tambin respecto del otro?
-
8/2/2019 apuntesDoctorado
52/102
Pruebas de sistemas de informacin
53
Cap tu lo 5 .ESTRATEGIAS DE COMBI NACIN P ARA
LA GENER ACIN DE CASOS DE P RU EBA
Las estrategias de combinacin son mtodos que construyen los casos de
prueba combinando los valores interesantes de los diferentes objetos que se pa-
san como parmetros mediante algn algoritmo especfico.
1.E s t r a t e g ia s d e g en e r a c i n d e ca s o s d e p r u e b a
Grindal et al. presentan un estudio sobre 16 estrategias de combinacin, que
representan grficamente de la siguiente forma [16]:
Figur a 20 . Clas if icac in d e es t r a teg ias de com bina c in
Como se ve, las tcnicas se clasifican segn su algoritmo en deterministas
(generan siempre los mismos casos de prueba) y no deterministas (el azar cum-
ple un papel importante, por lo que no se garantiza que en dos ejecuciones del
algoritmo se genere el mismo conjunto de casos).
De forma general, el objetivo de todas estas estrategias es conseguir bateras
buenas de casos de prueba (donde, como siempre, el concepto de bondad de-
pender finalmente del criterio de cobertura elegido).
-
8/2/2019 apuntesDoctorado
53/102
Pruebas de sistemas de informacin
54
2 .E s t r a t e g ia s n o d e t e r m in is t a s
En este tipo de estrategias, el azar cumple siempre un papel importante en
la determinacin de qu casos de prueba se generarn. As, no se asegura que
dos ejecuciones del mismo algoritmo produzcan siempre los mismos resultados.
2.1. AE TG: Auto m at ic e f fi ci en t t e s t gen er a to r
El siguiente algoritmo genera casos de prueba para lograr cobertura pair-
wise, donde el valor de k se fija arbitrariamente. Cuanto mayor es k, menor es el
tamao del conjunto de casos, si bien a partir de k=50, el tamao del conjunto
permanece estable.
Se parte de un conjunto Tde casos de prueba
Sea UCel conjunto de pares de valores de dos parmetros cualesquiera todava no cubiertos
por los casos preseleccionados
whi le UC
UC={pares de valores no cubiertos por T}
selectedTestCase=
fo r i=1 to k
Seleccionar la variable y el valor incluido en ms pares de UC
Ordenar aleatoriamente el resto de variables
Para cada variable determinada en el paso 5, seleccionar el valor incluido en ms pa-
res de UC
y crear as un caso de prueba, tc
iftc visita ms pares que selectedTestCase t h e n
selectedTestCase=tc
e n d I f
e n d F o r
marcar en UClos pares cubiertos por selectedTestCase
T=T{selectedTestCase}
e n d W h i l e
Figur a 2 1. Algor i tm o AETG
2.2 . Algor i tm os Gen t i cos
De forma general, los algoritmos genticos constituyen un mtodo de reso-
lucin de problemas de minimizacin. Parten de una solucin inicial, que se va
aproximando a la ptima segn una serie de iteraciones. De la solucin inicial
van construyndose soluciones mejores de acuerdo con una funcin objetivo
(fitness).
-
8/2/2019 apuntesDoctorado
54/102
Pruebas de sistemas de informacin
55
2.2.1 Algor i tm os Gen t i cos ( I )
Pargas et al. utilizan el algoritmo mostrado en la Figura 22 para lograr crite-
rios de cobertura altos.
En la primera lnea se calcula CDGPaths, que representa el grafo de depen-
dencias de control del programa que se va a probar. Un grafo de dependencia de
control es un grafo dirigido acclico cuyos nodos representan sentencias y cuyos
arcos representan dependencias de control entre sentencias. Un nodo Ydepen-
de por controlde otroXsi y slo si: (1) cualquier nodo intermedio en el camino
deXa Yest postdominado por Y; y (2)Xno est postdominado por Y. Se dice
adems que un nodoXestpostdominado por otro Ysi para llegar desdeXa la
salida es preciso pasar siempre por Y.
A continuacin se inicializaScoreboard, que guarda el registro de los requi-
sitos de prueba (TestReq) satisfechos.Scoreboardpuede ser un vector de bits si
se desea lograr cobertura de sentencias, un vector de enteros si deseamos cono-
cer la frecuencia de ejecucin de cada sentencia o, en general, una estructura de
datos adecuada al criterio de obertura considerado.
El siguiente paso es la generacin de la poblacin inicial (conjunto inicial de
los valores de entrada). A continuacin (bucle de las lneas 4 a 14), comienza el
proceso de generacin de los casos de prueba, bastante legible sin mayor expli-
cacin. Como excepcin, hay que resaltar que el clculo del fitness se hace en
funcin del nmero de nodos de CDGPaths alcanzados por el caso de prueba
teniendo en cuenta el requisito de prueba actual (variable r en el algoritmo).
-
8/2/2019 apuntesDoctorado
55/102
Pruebas de sistemas de informacin
56
1. Crear CDGPaths
2. Crear e inicializarScoreboard
3. Generar CurPopulation
4. whi le haya requisitos de prueba no marcados a n d se est en tiempo
5. seleccionar un requisito de prueba r del conjunto TestReq
6. whi le r no est marcado a n d no se supere el mximo de intentos
7. calcular el fitness de de CurPopulation usando CDGPaths
8. ordenar CurPopulation segn su fitness
9. seleccionar los padres para crear laNewPopulation
10. generarNewPopulation
11. ejecutar el programa con cada elemento deNewPopulation
12. actualizarScoreboardy marcar aquellos requisitos que se hayan satisfecho
13. e n d w h i l e
14. e n d w h i l e
15. final = conjunto de casos de prueba que satisfacen TestReq
16. devolver (TestReq, final)
F ig u r a 2 2 . Alg o r i tm o d e g e n e r a c i n d e c a s o s d e p r u e b a d e
2.2.2 Algor i tm os Gen t i cos ( I I)
Shiba et al. [23] proponen el algoritmo gentico mostrado en la Figura 23.
Elite es el conjunto de los mejores individuos de la poblacin, y se va recalcu-
lando en cada iteracin; Pmating representa la poblacin siguiente, que procede
de cruces deP.
1. Crear poblacin inicialPcon m candidatos
2. Calcularfitness deP
3. whi le no se cumpla la condicin de parada
4. Elite= n mejores individuos deP
5. AplicarSelection a los individuos dePpara crearPmating, con m-n individuos
6. CruzarPmating
7. MutarPmating
8. P=Elite + Pmating
9. EvaluarP
10. iffitness(P) se ha estancado mutar masivamenteP
11. e n d w h i l e
12. devolver el mejor caso
F ig u r a 2 3 . Al go r i t m o d e g e n e r a c i n d e c a s o s d e p r u e b a d e
-
8/2/2019 apuntesDoctorado
56/102
Pruebas de sistemas de informacin
57
2.2.3 Al go r i t m o d e l a s h o r m i ga s
El algoritmo de las hormigas representa los casos de prueba en un grafo co-
mo el siguiente:
F ig u r a 2 4 . R e p r e s e n t a c i n d e lo s ca s o s d e p r u e b a e n fo r m a d e g r a f o
Cada nodopirepresenta un parmetro, y cada arco Vj,i representa el j-simo
valor interesante del parmetro i-simo. Cada camino desde el nodo inicial has-
ta el nodo objetivo se asocia con un caso de prueba. As, un posible caso de
prueba para el problema mostrado en la figura anterior vendra determinado
por {V1,1, V2,1, , V1,n-1, V2,n}.
El grafo es recorrido por un conjunto de hormigas. Cuando una hormiga al-
canza el nodo objetivo, se deposita en cada arco de los que ha visitado una can-
tidad de feromonas proporcional a la calidad del solucin. Si una hormiga tiene
que elegir entre diferentes arcos, se va por aquel que tenga ms feromonas.
Como al principio todos los arcos no tienen feromonas, se calcula una heu-
rstica para cada arco, que no cambia durante el algoritmo, segn la siguiente
ecuacin:
1
1
min,max,
,max,
,+
+=
ii
jii
jiCC
CCh
En la ecuacin, Ci,jrepresenta el nmero de casos de prueba que contienen el
valor Vi,j. La idea de la heurstica es que los parmetros que aparecen menos
veces sean aadidos a los nuevos casos de prueba.
El algoritmo para la generacin de casos es el siguiente:
-
8/2/2019 apuntesDoctorado
57/102
-
8/2/2019 apuntesDoctorado
58/102
Pruebas de sistemas de informacin
59
3.1. E ach cho ice
En esta estrategia, se incluye cada valor de cada parmetro en al menos un
caso de prueba: en cada iteracin, se escoge un valor que no haya sido utilizado
en casos de prueba anteriores. Se logra cobertura 1-wise.
3.2 . Base cho ice
Se construye manualmente un caso de prueba base, que contiene los valores
ms importantes de cada parmetro. A partir de ste, se construyen nuevos ca-
sos de prueba variando los valores de un parmetro en cada iteracin. Esen-
cialmente, este algoritmo es exactamente igual al anterior, pero el caso de prue-
ba base es elegido por el ingeniero de pruebas componindolo con los valores
ms interesantes. Se logra cobertura 1-wise.
3.3 . P ar t ly pa i r -w ise
Se seleccionan los dos parmetros ms significativos y se construyen casos
de prueba con todas los posibles combinaciones de estos dos parmetros. Luego,
la batera de casos de prueba se va ampliando aadiendo un valor para cada uno
de los parmetros restantes.
3 .4 . Al l com bin a t ion s
Se generan todas las combinaciones posibles de valores de prueba mediante
el clculo del producto cartesiano de todos los conjuntos de valores interesantes
de cada parmetro.
3.5 . A n t i - r a n d o m
Esta estrategia, debida a Malaiya [24], se basa en que cada caso de prueba
debera seleccionarse de forma que tenga la mayor distancia con respecto a los
dems. Los parmetros y los valores interesantes se codifican en un vector bina-
rio.
Los casos de prueba se van seleccionando en funcin de su distancia de
Hamming o de su distancia cartesiana con respecto a los que se han generado
con anterioridad.
Supongamos que, para el problema del tringulo, tenemos los valores
{1,2,3}, {4,5} y {6,7} para los tres lados, que se codifican segn la Tabla 9. Anti-
-
8/2/2019 apuntesDoctorado
59/102
Pruebas de sistemas de informacin
60
random empieza con la seleccin de un caso arbitrario. Sea el (1,4,6) este primer
caso, que corresponde a la palabra 0000; si se utiliza la distancia Hamming, el
siguiente caso ser aqul que tenga el mayor nmero diferente de bits, con lo
que se selecciona la palabra 1111, correspondiente al caso (3,5,7). El siguiente
caso ser aquel cuya suma de distancias Hamming a los dos casos seleccionados
sea mayor.
Valor Cdigo
1 00
2 01
3 10A (*)
3 11
4 0B
5 1
6 0C
7 1
Tab la 9 . Cod i f icac in en b ina r io de lo s va lo res d e p r ueb a . (*) E l va lo r 3d e A r e c ib e d o s c d ig o s p a r a u t i li za r t o d a s l a s c o m b i n a c i o n e s d e l o s d o s
b i t s
El trabajo de Malaiya no especifica la condicin de parada de Antirandom, y
tampoco este algoritmo garantiza la satisfaccin de ninguno de los criterios de
cobertura tradicionales (pair-wise, etc.).
4 .Es t ra t eg ia s d e gene r ac in fue r a d e la c la s i fi cac in
a n t e r i o r
De entre los criterios de cobertura de cdigo enumerados en el Captulo 3, es
de destacar la dificultad de conseguir valores aceptables para, por ejemplo, mu-
tacin. Pinsese, por ejemplo, en la dificultad de encontrar valores que maten
los mutantes de una condicin tan simple como if (a
-
8/2/2019 apuntesDoctorado
60/102
Pruebas de sistemas de informacin
61
A continuacin se hace una revisin rpida de tres mtodos basados en algo-
ritmos de minimizacin: uno basado en Bsqueda Tab y dos en algoritmos ge-
nticos, si bien existen otras posibilidades, como el uso de Simmulated Annea-
ling o enfoques hbridos como el propuesto por [25].
4.1. B s q u e d a T a b
Daz et al. [26] proponen la utilizacin de un algoritmo basado enBsqueda
Tab para lograr amplia cobertura de decisiones (Figura 26). La Bsqueda Tab
se basa en el algoritmo de los k-vecinos, junto al mantenimiento en memoria de
una lista tab que evita repetir la bsqueda dentro de un rea del espacio de
soluciones. Al algoritmo se le deben suministrar algunos parmetros, como la
funcin objetivo (que mide el coste de la solucin), la estrategia para seleccionar
vecinos y la memoria del algoritmo.
Generar una solucin aleatoria como solucin actual
Calcular coste de la solucin actualy almacenarlo como mejor coste
Aadir la solucin actualcomo nueva solucin
Aadir la nueva solucin a la lista tab
d o
Calcular los vecinos candidatos
Calcular el coste de los candidatos
Almacenar el mejor candidato como nueva solucin
Aadir la nueva solucin a la lista tab
ifcoste de nueva solucin < mejor coste
Almacenar nueva solucin como mejor solucin
Almacenar coste de la nueva solucin como mejor coste
e n d _ i f
Almacenar nueva solucin como solucin actual
whi le no se alcance el criterio de paradaF ig u r a 2 6 . Al go r i t m o d e b s q u e d a t a b
Puesto que el objetivo de estos autores es alcanzar la mayor cobertura posi-
ble, utilizan un grafo que representa el flujo de control del programa, en cuyos
nodos se anota si el propio nodo ha sido alcanzado, cuntas veces lo ha sido y
cul es el mejor caso de prueba que lo ha alcanzado. Cuando no hay ramas inal-
canzables, el mximo valor posible para la cobertura es el 100%, mientras que
ser desconocido en caso de que las haya. Por este motivo establecen como cri-
-
8/2/2019 apuntesDoctorado
61/102
Pruebas de sistemas de informacin
62
terio de parada o haber alcanzado todas las ramas, o que el algoritmo haya su-
perado un nmero de iteraciones prefijado. Adems, cada solucin se caracteri-
za por su conjunto de valores de entrada. El coste de una solucin, fundamental
para que el algoritmo funcione eficazmente, se calcula considerando que el me-
jor caso de prueba es aquel que tiene ms posibilidades de que sus vecinos per-
muten entre ramas o, lo que es lo mismo, aquel que alcanza el nodo con valores
lmite. Por ejemplo, si la condicin es x!=y, la funcin de coste ser |x-y| (vase
la referencia para conocer el resto de detalles de clculo de la funcin de coste).
Para calcular los vecinos candidatos, los autores se basan en que, si un caso
de prueba cubre al padre de un nodo pero no a su hijo, entonces puede encon-
trarse un vecino que alcance al hijo utilizando el caso que cubre al padre a partir
de la mejor solucin. A partir de sta generan 2n vecinos cercanos y2n veci-
nos lejanos (donde n es el nmero de variables de entrada del programa). Los
candidatos se comprueban frente a la lista tab, rechazndose aquellos que ya
existen. En la siguiente iteracin se repite el proceso, con la diferencia de que el
nodo objetivo puede haber cambiado si alguno de los candidatos alcanz el en-
tonces nodo objetivo.
4 .2 . G e n e r a c i n m e d i a n t e a lg o r i t m o s b a c t e r i o l g ic o s .
Baudry et al. [27] parten de un conjunto inicial de casos de prueba. Su algo-
ritmo se ejecuta en varias iteraciones, en cada una de las cuales se aplican muta-
ciones a los casos de prueba. El algoritmo memoriza los casos de prueba que
pueden mejorar la calidad del test suite, la cual se mide mediante una funcin
defitness.
El algoritmo dispone de cinco funciones principales:
1) Fitness del test suite, que se mide utilizando algn criterio de cobertura.
2)Fitness relativo de un caso de prueba tc: se calcula en funcin del fitness
del test suite, TS:
relFitness(TS, tc) = fitness(TS {tc}) - fitness(TS)
3) Memorizacin, que memoriza o no un caso de prueba en funcin de fit-
nessrelativo de dicho caso.
-
8/2/2019 apuntesDoctorado
62/102
Pruebas de sistemas de informacin
63
4) Mutacin, que genera nuevos casos de prueba a partir de otros. Los casos
de prueba origen se toman aleatoriamente del test suite, si bien la proba-
bilidad de tomar un caso u otro depende del fitness relativo de cada caso.
5) Filtrado, que va eliminando los casos que no se utilizan con el fin de pre-
servar la memoria.
5.Ejercicios
1) Partiendo del conjunto de casos de prueba (1, 1, 1), (2, 2, 2), (3, 3, 3) y
(4,4,4) para el problema del tringulo, construya un conjunto de ms calidad
aplicando, manualmente, un algoritmo gentico. Cmo evoluciona la calidad
del conjunto al generar cada nueva poblacin?
-
8/2/2019 apuntesDoctorado
63/102