Neste capitulo e apresentada a proposta principal desta tese, ou seja, 0criterio de adequac;ao de casos de teste interprocedimental baseado em mutac;oes chamado Mutac;ao de Interface.
Inicialmente, discute-se urn modelo de falhas que caracterizam os erros de integrac;ao. Como esses erros manifestam-se nas conexoes entre duas unidades, atraves de suas interfaces, construiu-se urn criterio que, atraves da introduc;ao de defeitos simples, cria mutantes procurando reproduzir esses erros. Dessa maneira, o criterio exige casos de teste que revelem esses erros e - assumindo que 0efeito de acoplamento vale tambem para erros de integrac;ao - exercitem efetivamente as conexoes entre as unidades do programa.
Apresenta-se tambem urn conjunto de operadores de mutac;ao de interfaces. Operadores de mutac;ao sao dependentes da linguagem de programac;ao para a qual sao projetados. Os operadores apresentados aqui foram projetados para a linguagem C mas podem ser facilmente adaptados para qualquer linguagem que possua caracteristicas semelhantes em termos de interac;ao entre unidades (chamadas de func;ao e passagem de panlmetros).
Considerando esse conjunto de operadores, sao feitas algumas analises teoricas sobre 0 criterio. A complexidade de sua aplicac;ao
e
avaliada e faz-se tambem uma comparac;ao entre 0 criterio e os criterios de fluxo de dados interprocedimentais de Harrold e Soffa [32].Muta<;:ao de Interface com 0 objetivo de permitir sua aplica<;ao de forma flexfvel,
reduzindo 0 mimero de mutantes e ajustando-a a restri<;oes de custo.
3.1
Modelo de Falhas Causadas por Erros de In-
tegra<;ao
E importante que se estabele<;:a os tipos de erros que se deseja revelar para que se possa determinar uma estrategia para selecionar casos de teste. Nesta sessao saD determinados tipos de falhas que caraeterizam erros de integra<;ao. Com isso, define-se posteriormente 0 criterio Muta<;ao de Interface cujo objetivo e revelar
esse tipo de erro.
Halev e Zweben
[40]
definem erro de integra<;:a.o computacional e erro de inte- grac:ao de domfnio. Dadas as unidades Fe G. scndo que F cbama G. urn erro de integra<;ao computacional ocorre quando um defeito em G faz com que urn valor incorreto seja calculado, levando Fa produzir uma safda incorreta. Urn erro de integrac:ao de dominio acontece quando urn caminbo incorreto e executado em G, levando Fa produzir uma safda incorreta. Em ambos os casos existe algum valor incorreto sendo passado entre duas unidades. 0 que leva a um comportamentoincorreto do programa, ou seja, uma falha.
Da mesma maneira, os erros apontados pOl' Leung e White [70], 1) erros de interpreta<;:ao: :2) cbamadas incorretas; e
:n
erros de interface, tern em comum 0fa10 de que dadas duas unidades, pode-se identificar erros na interac:ao entre elas, em geral manifestados atravt~s de suas interfaces.
Considerando-se esses aspectos, foram estabelecidos. como parte deste traba- lbo de teste. tres tipos de falhas que caraeterizam urn erro de integra<;ao. Suponba- se 0 programa P. 0 caso de teste I e as unidades F e G tal que F faz chamadas
a G. Define-se S'J(G) como 0 conjunto de valores passados de F para G e So(G)
como 0 conjunto de valores retornados de G para F. Ao executar-se P com 0 caso
de teste f. identifica-se uma falha causada par um erro de integra<;a.o das unidades
F (' (/ em uma das seguintes situac;oes:
• Ti po 1: se na cbamada de G. S'J(G) contem algum valor incorreto que leva
it uma safda incorreta (uma falba) antes do retorno de G.
• Tipo 2: se na cbamada de G. S'J( G) contem algum valor incorreto que faz com que So (C;) assuma algum valor incorreto levando a uma safda incorreta (Ulna falha) ap6s 0 retorno de G.
• Tipo 3: se na chamada de G, todos os valores de 5I(G) sao os esperados,
porem valores incorretos de 50
(G)
sao produzidos em G, levando a uma saida incorreta (uma falha) apos 0 retorno de G.A Figura 15 esquematiza esses tres tipos de falhas que caracterizam os erros de integra<;ao. Saida - - - - --> inconeta ~ (G)\ \ \ So(G) incorreto \ \ \ mcorreto Saida ---> ~ ~I incorreta Saida - - - - --> inconeta
Figura 15: Modelo de falhas causadas por erros de integra<;ao: (a) Tipo 1; (b) Tipo 2; e (c) Tipo 3
Note-se que esta e uma defini<;aobastante ampla. Ela simplesmente considera a existimcia de valores incorretos entrando em ou saindo de uma chamada de subprograma. Ela nao determina tipo ou localiza<;ao dos defeitos que causam esses erros. A defini<;aoexclui, por exemplo, 0caso em que
5I(
G) tem os valores esperados mas um defeito dentro da unidade G produz uma saida incorreta antes do retorno de G. Nesse caso, nenhum erro e propagado atraves da conexaoF-G
e supoe-se que esse tipo de erro seja revelado no teste de unidade.Alem disso, segundo essa defini<;ao,mais de um erro de integra<;ao pode estar associado a ~ ou ser causado por - um defeito. Por exemplo, um programa com as unidades R,