Escolar Documentos
Profissional Documentos
Cultura Documentos
net/publication/306255146
CITATIONS READS
35 2,481
10 authors, including:
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Simone Do Rocio Senger de Souza on 17 August 2016.
Resumo
As exigências por softwares com maior qualidade têm motivado a definição de
métodos e técnicas para o desenvolvimento de softwares que atinjam os padrões de
qualidade impostos. Com isso, o interesse pela atividade de teste de software vem
aumentando nos últimos anos. Vários pesquisadores têm investigado os diferentes
critérios de teste, buscando obter uma estratégia de teste com baixo custo de
aplicação, mas ao mesmo tempo, com grande capacidade em revelar erros. O objetivo
deste minicurso é apresentar os aspectos teóricos e práticos relacionados à atividade
de teste de software. Uma síntese das técnicas de teste funcional, estrutural e
baseada em erros, bem como de critérios de teste pertencentes a cada uma delas,
será apresentada. Fatores utilizados na comparação e avaliação de critérios de teste
de software (custo, eficácia e strength) também serão abordados, tanto do ponto de
vista teórico como empírico. A importância da automatização da atividade de teste
será destacada, caracterizando-se os esforços da comunidade científica nessa
direção. Dar-se-á ênfase ao critério de teste Análise de Mutantes apresentando uma
revisão histórica do seu surgimento e desenvolvimento. Aspectos teóricos e práticos
de sua utilização serão abordados e as estratégias que procuram minimizar o custo de
aplicação desse critério serão discutidas. A ferramenta Proteum – Program Testing
Using Mutants, que automatiza a aplicação do critério Análise de Mutantes, será
apresentada e ilustrada. Será apresentado o critério Mutação de Interface que estende
o critério Análise de Mutantes visando à atividade de teste no nível de integração.
Serão apresentadas também as extensões do critério Análise de Mutantes para
aplicação no contexto de especificações, discutindo sua definição para validação de
especificações baseadas em Statecharts, Máquinas de Estados Finitos, Redes de
Petri e Estelle. Perspectivas e trabalhos de pesquisa sendo realizados nessa área
serão discutidos.
1. Introdução
O processo de desenvolvimento de software envolve uma série de
atividades em que, apesar dos métodos, técnicas e ferramentas empregados,
erros no produto ainda podem ocorrer. Erros podem ocorrer desde o início do
desenvolvimento, por exemplo, especificando erroneamente os requisitos do
sistema, como também nos estágios finais através da inserção de defeitos no
projeto ou na implementação do sistema. Com isso, a etapa de teste é de
grande importância para a identificação e eliminação de erros que persistem,
representando a última revisão da especificação, projeto e codificação
(Pressman, 1997).
Segundo o padrão IEEE (1990), defeito (fault) é um passo, processo ou
definição de dados incorreto, por exemplo, uma instrução ou comando
incorreto no programa; engano (mistake) é uma ação humana que produz um
resultado incorreto, por exemplo, uma ação incorreta feita pelo programador;
erro (error) ocorre quando o valor esperado e o valor obtido não são os
mesmos, ou seja, qualquer resultado inesperado na execução do programa
constitui um erro e falha (failure) é a produção de uma saída incorreta em
relação à especificação. Neste texto, são utilizados os termos erro (causa) e
falha (conseqüência), sendo que o termo erro engloba os termos defeito,
engano e erro.
A atividade de teste, cujo objetivo principal é executar um programa com a
intenção de encontrar erros, é considerada como uma atividade de validação e
verificação. Atividades de verificação procuram garantir que a implementação
e/ou especificação do sistema estejam corretos, ou seja, referem-se ao
conjunto de atividades que procuram garantir que o sistema implementa
corretamente uma determinada função. Validação refere-se ao conjunto de
atividades que procuram garantir que o sistema esteja de acordo com os
requisitos do usuário (Pressman, 1997).
Em algumas aplicações, uma falha no software pode trazer conseqüências
desastrosas. Exemplos disso seriam softwares para controle de tráfego, de
aeronaves, controle bancário, monitoramento de pacientes, dentre outros, que
envolvem seres humanos. Esses softwares, chamados de sistemas críticos,
necessitam de metodologias mais rigorosas para o seu desenvolvimento, de
forma a garantir que o software seja desenvolvido corretamente e que funcione
de acordo com o esperado. As técnicas de especificação formal contribuem
nesse sentido fornecendo uma linguagem gráfica e descritiva para
especificação do sistema, com sintaxe e semântica formalmente definidas. A
utilização de técnicas formais permite o desenvolvimento de especificações
consistentes, completas e não ambíguas e são empregadas na descrição,
análise e projeto de sistemas, principalmente, de sistemas críticos.
A utilização de técnicas formais não garante que a especificação definida
esteja livre de erros. Sendo assim, testar a especificação é tão importante
quanto testar o programa. Duas atividades de teste são realizadas no escopo
de especificações: teste de especificações e teste de conformidade (ou teste
baseado na especificação). O teste de especificações é análogo ao teste de
programas e visa a encontrar erros na especificação e a garantir que a
especificação esteja de acordo com os requisitos do usuário utilizando, sempre
que possível, técnicas e critérios definidos com base nas técnicas e critérios de
teste existentes no nível de programas. O teste de conformidade é utilizado
principalmente no teste de protocolos de comunicação e visa a garantir que a
implementação do protocolo está em conformidade com a sua especificação.
Para o teste de conformidade é essencial que a especificação esteja correta e
retrate os requisitos do usuário.
Este texto está organizado da seguinte forma: na Seção 2 são
apresentados os principais critérios de teste das técnicas funcional, estrutural e
baseada em erros, dando-se ênfase ao critério Análise de Mutantes. Os
aspectos de automatização são ilustrados através da ferramenta Proteum –
Program Testing Using Mutants, que apóia a aplicação do critério Análise de
Mutantes. Na Seção 3 são sintetizados os principais resultados de estudos
empíricos relacionados aos critérios de teste apresentados neste texto. Na
Seção 4 são apresentados alguns trabalhos que aplicam critérios de teste para
validação de especificações formais em Redes de Petri, Máquinas de Estados
Finitos, Statecharts e Estelle. Na Seção 5 são apresentadas as conclusões.
/**********************************************************************************************
IDENTIFIER.C
**********************************************************************************************/
#include <stdio.h>
main ()
/* 01 */ {
/* 01 */ char achar;
/* 01 */ int length, valid_id;
/* 01 */ length = 0;
/* 01 */ printf ("Digite um possível identificador\n");
/* 01 */ printf ("seguido por <ENTER>: "); int valid_starter (ch)
/* 01 */ achar = fgetc (stdin); char ch;
/* 01 */ valid_id = valid_starter (achar); {
/* 01 */ if (valid_id) if (((ch >= 'A') &&
/* 02 */ { (ch <= 'Z')) ||
/* 02 */ length = 1; ((ch >= 'a') &&
/* 02 */ } (ch <= 'z')))
/* 03 */ achar = fgetc (stdin); return (1);
/* 04 */ while (achar != '\n') else
/* 05 */ { return (0);
/* 05 */ if (!(valid_follower (achar))) }
/* 06 */ {
/* 06 */ valid_id = 0; int valid_follower (ch)
/* 06 */ } char ch;
/* 07 */ length++; {
/* 07 */ achar = fgetc (stdin); if (((ch >= 'A') &&
/* 07 */ } (ch <= 'Z')) ||
/* 08 */ if (valid_id && (length >= 1) && ((ch >= 'a') &&
(length < 6) ) (ch <= 'z')) ||
/* 09 */ { ((ch >= '0') &&
/* 09 */ printf ("Valido\n"); (ch <= '9')))
/* 09 */ } return (1);
/* 10 */ else else
/* 10 */ { return (0);
/* 10 */ printf ("Invalido\n"); }
/* 10 */ }
/* 11 */ }
Figura 1. Programa exemplo: identifier (contém ao menos um erro) (Maldonado et al., 1998).
4
up = {achar}
5 up = {achar}
up = {achar} 6 up = {achar}
d = {valid_id}
7
d = {achar, length}
uc = {length}
(a) (b)
Figura 5. Relatórios Gerados pela Ferramenta Poke-Tool em Relação ao Programa identifier:
(a) Arcos Executados, (b) Associações não Executadas.
sendo que:
DM(P,T): número de mutantes mortos pelo conjunto de casos de teste T.
M(P): número de mutantes gerados para o programa P.
EM(P): número de mutantes equivalentes ao programa P.
O escore de mutação varia no intervalo de [0,1], sendo que quanto maior o
escore mais adequado é o conjunto de casos de teste para o programa em
teste. Percebe-se com essa fórmula que somente DM(P,T) é dependente do
conjunto de casos de teste utilizado e que EM(P) é obtido à medida que o
testador decide, manualmente ou com o apoio de heurísticas, que determinado
mutante vivo é equivalente.
Um dos maiores problemas para a aplicação do critério Análise de
Mutantes está relacionado ao seu alto custo, uma vez que o número de
mutantes gerados, mesmo para pequenos programas, pode ser muito grande,
exigindo um tempo de execução muito alto.
Algumas soluções têm sido propostas objetivando viabilizar a aplicação do
critério Análise de Mutantes. A utilização de arquiteturas de hardware
avançadas e o uso de análise estática de anomalias de fluxo de dados para
reduzir o número de mutantes gerados são algumas dessas soluções
(Krauser, et al., 1988; Mathur e Krauser, 1988; Marshall, et al., 1990; Choi e
Mathur, 1993).
Critérios de teste alternativos a partir da Análise de Mutantes também têm
sido definidos com o objetivo de reduzir os custos de aplicação desse critério.
Esses critérios alternativos procuram selecionar apenas um subconjunto do
total de mutantes gerados, reduzindo o custo, mas procurando não reduzir a
eficácia em revelar erros. Offut e Rothermel (1993) definem a mutação
seletiva, que seleciona alguns operadores de mutação para geração dos
mutantes, por exemplo, descartando aqueles que geram um número elevado
de mutantes em relação aos demais. Mathur e Wong (1993) apresentam dois
critérios alternativos: mutação aleatória – que examina uma pequena
porcentagem de mutantes selecionados aleatoriamente de cada operador de
mutação e ignora os demais, e mutação restrita – que seleciona alguns tipos
de operadores de mutação para geração dos mutantes. Outros trabalhos
nessa linha, são os trabalhos de Offut et al. (1996b) e Barbosa et al. (1998), os
quais definem um conjunto essencial de operadores de mutação para o teste
de programas Fortran e programas C, respectivamente.
Um aspecto importante para a aplicação da Análise de Mutantes é a
disponibilidade de ferramentas que automatizem esse critério. Nesse sentido,
algumas ferramentas podem ser citadas. Mothra é um ambiente de teste
baseado no critério Análise de Mutantes para programas na linguagem
Fortran-77, com 22 operadores de mutação implementados (DeMillo et al.,
1988). A interface utilizada é baseada em janelas o que facilita a realização
dos testes; permite incorporar outras ferramentas como gerador de casos de
teste, verificador de equivalência e oráculo.
A ferramenta Proteum/C – Program Test Using Mutants, desenvolvida pelo
Grupo de Engenharia de Software do Instituto de Ciências Matemáticas e de
Computação de São Carlos – USP, é outra ferramenta que apóia a aplicação
do critério Análise de Mutantes (Delamaro, 1993). Essa ferramenta foi
desenvolvida a partir dos operadores de mutação definidos por Agrawal et al.
(1989) para a linguagem C e dá suporte ao teste de unidade para programas
nessa linguagem. Devido ao seu aspecto de multilinguagem ela pode ser
configurada para o teste de programas escritos em diferentes linguagens. A
Proteum/C oferece os seguintes recursos para a condução da atividade de
teste: definição de casos de teste, execução do programa em teste, seleção
dos operadores de mutação que serão utilizados para gerar os mutantes,
geração dos mutantes, execução dos mutantes com os casos de teste
definidos, análise dos mutantes vivos e cálculo do escore de mutação. As
funções implementadas na Proteum possibilitam que alguns desses recursos
sejam executados automaticamente (como a execução dos mutantes),
enquanto que para outros são fornecidas facilidades para que o testador possa
realizá-los (como a análise de mutantes equivalentes) (Delamaro, 1993; 1997).
A utilização da ferramenta pode ser feita através de um ambiente gráfico ou na
forma de comandos (scripts de teste). Esta última forma é muito útil para a
realização de experimentos empíricos, pois reduz as interações do testador
com a ferramenta diminuindo, com isso, o tempo consumido na atividade de
teste. Na Figura 6 é apresentada a tela principal da ferramenta Proteum/C, em
que é possível visualizar os recursos fornecidos por ela.
A Proteum/C possui 71 operadores de mutação implementados, os
quais são divididos em 4 classes (Delamaro, 1993): mutação de comandos,
mutação de operadores, mutação de variáveis e mutação de constantes. É
possível escolher os operadores de acordo com a classe de erros que se
deseja enfatizar, permitindo que a geração de mutantes seja feita em etapas ou
até mesmo dividida entre vários testadores trabalhando independentemente.
Na Tabela 5 são ilustrados alguns operadores de mutação disponíveis.
Figura 6. Operações Disponíveis na Interface da Proteum/C.
(c) (d)
Figura 7. Tela de Status da Ferramenta Proteum: (a) após a execução dos mutantes com T0,
(b) após a execução dos mutantes com T1 e T2, (c) após a determinação dos mutantes
equivalentes e (d) após a execução com T3.
/* 08 */ if (valid_id * (length >= 1) && /* 08 */ if (valid_id && (length >= 1) &&
(length < 6) ) (PRED(length) < 6) )
/* 09 */ { /* 09 */ {
/* 09 */ printf ("Valido\n"); /* 09 */ printf ("Valido\n");
/* 09 */ } /* 09 */ }
/* 10 */ else /* 10 */ else
/* 10 */ { /* 10 */ {
/* 10 */ printf ("Invalido\n"); /* 10 */ printf ("Invalido\n");
/* 10 */ } /* 10 */ }
(a) (b)
/* 08 */ if (valid_id && (length >= 1) &&
(length <= 6) )
/* 09 */ {
/* 09 */ printf ("Valido\n");
/* 09 */ }
/* 10 */ else
/* 10 */ {
/* 10 */ printf ("Invalido\n");
/* 10 */ }
(c)
Referências
AGRAWAL, H.; DEMILLO, R.; HATHAWAY, R.; HSU, Wm., HSU, W.; KRAUSER, E.;
MARTIN, R.J.; MATHUR, A.; SPAFFORD, E. Design of Mutant Operators for the C
Programming Language. Technical Report SERC-TR-41-P, Software Engineering
Research Center, Purdue University, Março, 1989.
BARBOSA, E. F.; VINCENZI, A. M. R; MALDONADO, J.C. Uma Contribuição para a
Determinação de um Conjunto de Operadores de Mutação no Teste de
Programas C. in Proc. XII SBES - Simpósio Brasileiro de Engenharia de Software,
Maringá, PR, Brasil, Outubro, 1998.
BUDD, T.A. Mutation Analysis: Ideas, Examples, Problems and Prospects. Computer
Program Testing, North-Holand Publishing Company, 1981.
BUDKOWSKI, S.; DEMBINSKI, P. An Introduction to Estelle: a specification language
for distributed systems. Computer Network and ISDN Systems, Vol.14(01), pp.3-
23, 1987.
CHAIM, M.J. POKE-TOOL - Uma Ferramenta para Suporte ao Teste Estrutural de
Programas Baseados em Análise de Fluxo de Dados. Dissertação de Mestrado,
DCA/FEE/UNICAMP - Campinas, SP, Brasil, Abril, 1991.
CHOI, B.; MATHUR, A.P. High Performance Mutation Testing. Journal Systems
Software, Vol. 20(02), pp. 135-152, Fevereiro, 1993.
CHOW, T.S. Testing Software Design Modeled by Finite-State Machines. IEEE
Transaction on Software Engineering, SE(4(3)), pp. 178-187, 1978.
DAVIS, A.M. A Comparison of Techniques for the Specification of External System
Behavior. Communications of the ACM, Vol. 31(09), Setembro, 1988.
DELAMARO, M.E. Proteum - Um Ambiente de Teste Baseado na Análise de Mutantes.
Dissertação de Mestrado, ICMSC/USP, São Carlos, SP, Brasil, Outubro, 1993.
DELAMARO, M.E. Mutação de Interface: Um Critério de Adequação Inter-Procedural
para o Teste de Integração. Tese de Doutorado, IFSC/USP, São Carlos, SP,
1997.
DEMILLO, R.A.; LIPTON, R.J.; SAYWARD, F.G. Hints on Test Data Selection: Help for
the Practicing Programmer. IEEE Computer, Abril, 1978.
DEMILLO, R.A. Mutation Analysis as a Tool for Software Quality Assurance. in Proc. of
COMPSAC80, Chicago - IL, Outubro, 1980.
DEMILLO, R.A. Software Testing and Evaluation. The Benjamin/Cummings Publishing
Company, Inc, 1987.
DEMILLO,R.A., et al. An Extended Overview of the Mothra Testing Environment. in
Proc, of the Second Workshop on Software Testing, Verification and Analysis,
Banff - Canadá, 1988.
FABBRI, S.C.P.F. A Análise de Mutantes no Contexto de Sistemas Reativos: Uma
Contribuição para o Estabelecimento de Estratégias de Teste e Validação. Tese
de Doutorado, IFSC/USP, São Carlos, SP, Outubro, 1996.
FONSECA, R.P. Suporte ao Teste Estrutural de Programas Fortran no Ambiente
POKE-TOOL. Dissertação de Mestrado, DCA/FEE/UNICAMP - Campinas, SP,
Brasil, Janeiro, 1993.
FRANKL, P.G.; WEYUKER, E.J. A Formal Analysis of the Fault-detecting Ability of
Testing Methods. IEEE Transactions on Software Engineering, Vol. 19(03), pp.
202-213, Março, 1993.
GILL, A. Introduction to the Theory of Finite-State Machine. New Jork, McGraw-Hill,
1962.
HAREL, D.; PINNEL, A.; SCHMIDT, J.P.; SHERMAN, R. On the Formal Semantics of
Statecharts. in Proc. 2nd IEEE Symposium on Logic in Computer Science, Ithaca,
New York, 1987.
HARROLD, M.J.; SOFFA, M.L. Selecting and Using Data for Integration Testing. IEEE
Software, vol. 8(02), pp. 58-65, Março, 1991.
HOWDEN, W.E. Functional Program Testing and Analysis. McGraw-Hill, USA, 1987.
IEEE. IEEE Standard Glossary of Software Engineering Terminology. Padrão 610.12,
1990.
ISO/TC97/SC21/WG1/DIS9074, Estelle – A formal description technique based on an
extended state transition model. 1987.
KRAUSER, E.W.; MATHUR, A.P.; REGO, V. High Performance Testing on SIMD
Machines. in Proc. of the Second Workshop on Software Testing, Verification and
Analysis, Banff - Canadá, 1988.
LEITÃO, P.S.J. Suporte ao Teste Estrutural de Programas Cobol no Ambiente POKE-
TOOL. Dissertação de Mestrado, DCA/FEE/UNICAMP - Campinas, SP, Brasil,
Agosto, 1992.
LINNENKUGEL, U.; MÜLLERBURG, M. Test Data Selection Criteria for Software
Integration Testing. First International Conference on Systems Integration,
Morristown, Nova Jersey, pp.709-717, Abril, 1990.
MALDONADO, J.C.; CHAIM, M.L.; JINO, M. Arquitetura de uma Ferramenta de Teste
de Apoio aos Critérios Potenciais Usos. in Proc. XXII Congresso Nacional de
Informática, São Paulo, SP, Brasil, Setembro, 1989.
MALDONADO, J.C. Critérios Potenciais Usos: Uma Contribuição ao Teste Estrutural
de Software. Tese de Doutorado, DCA/FEE/UNICAMP, Campinas, SP, Brasil,
Julho,1991.
MALDONADO, J.C.; VINCENZI, A. M.; BARBOSA. E.F.; SOUZA, S.R.S.; DELAMARO,
M.E. Aspectos Teóricos e Empíricos de Teste de Cobertura de Software. VI
Escola de Informática da SBC- Regional Sul, Maio, 1998.
MARSHALL, A.C. et al. Static Dataflow-aided Weak Mutation Analysis (SDAWM).
Information and Software Technology, Vol. 32(01), Janeiro/Fevereiro, 1990.
MATHUR, A.P.; KRAUSER, E.W. Modeling Mutation on Vector Processor. in Proc. of
the Second Workshop on Software Testing, Verification and Analysis, Banff,
Canadá, 1988.
MATHUR, A.P.; WONG, W.E. Evaluation of The Cost Alternate Mutation Strategies. in
Proc. VII SBES - Simpósio Brasileiro de Engenharia de Software, Rio de Janeiro,
RJ, Outubro, 1993.
MATHUR, A.P.; WONG, W.E. An Empirical Comparison of Data Flow and Mutation-
Based Test Adequacy Criteria. Software Testing, Verification and Reliability, Vol.
4, 1994.
MYERS, G.J. The Art of Software Testing. John Wiley & Sons, New York, 1979.
NTAFOS, S.C. A Comparison of Some Structural Testing Strategies. IEEE
Transactions on Software Engineering, Vol.14(06), pp. 868-873, Junho, 1988.
OFFUTT, A.J. Investigations of the Software Testing Coupling Effect. ACM
Transactions on Software Engineering Methodology, Vol. 1(01), pp. 3-18, Janeiro,
1992.
OFFUTT, A.J. ; ROTHERMEL, A.J. An Experimental Evaluation of Selective Mutation.
15th International Conference on Software Engineering, Baltimore, Maryland, Maio,
1993.
OFFUTT(a), A.J. et al. An Experimental Evaluation of Data Flow and Mutation Testing.
Software Practice and Experience, Vol. 26(02), pp. 165-176, Fevereiro, 1996.
OFFUTT(b), A.J. et al. An Experimental Determination of Sufficient Mutant Operators.
ACM Transactions on Software Engineering Methodology, Vol. 5(02), pp. 99-118,
Abril, 1996.
OFFUTT, A.J.; PAN, J. Detecting Equivalent Mutants and the Feasible Path Problem.
in Proc. COMPASS’96 – Conference on Computer Assurance, IEEE Computer
Society Press, Gaithersburg, MD, pp.224-236, Junho, 1996.
PETERSON, J.L. Petri Nets. Computing Surveys, Vol. 9(03), Setembro, 1977.
PRESSMAN, R. S. Software Engineering - A practitioner's approach. 4ª Edição,
McGraw-Hill, 1997.
PROBERT, R.L.; GUO, F. Mutation Testing of Protocols: principles and preliminary
experimental results. in Proc. III IFIP TC6, Third International Workshop, pp. 57-
76, 1991.
RAPPS, S.; WEYUKER, E.J. Selecting Software Test Data Using Data Flow
Information. IEEE Transaction on Software Engineering, Vol.11(04), pp. 367-375,
Abril, 1985.
SIMÃO, A. S. Proteum-RS/PN: Uma Ferramenta para a Validação de Redes de Petri
Baseada na Análise de Mutantes, Dissertação de Mestrado, ICMSC/USP,
Fevereiro, 2000.
SOUZA, S.R.S. Avaliação do Custo e Eficácia do Critério Análise de Mutantes na
Atividade de Teste de Software. Dissertação de Mestrado, ICMSC/USP, São
Carlos, SP, Junho, 1996.
SOUZA(a), S.R.S.; MALDONADO, J.C.; FABBRI, S.C.P.F.; LOPES De SOUZA, W.
Mutation Testing Applied to Estelle Specifications. Software Quality Journal, Vol.
8(04), to appear, artigo selecionado do 33rd Hawaii International Conference on
System Sciences, Mini-track: Distributed Systems Testing, Maui, Hawaii, Janeiro
4-7, 2000.
SOUZA(b), S.R.S.; MALDONADO, J.C.; FABBRI, S.C.P.F.; MASIERO, PC.
Statecharts Specifications: A Family of Coverage Testing Criteria, in Proc.
CLEI200 – Conferência Latino Americana de Informática, Cidade de México,
México, Setembro 18-22, 2000.
SUGETA, T. Proteum-RS/ST: Uma Ferramenta para Apoiar a Validação de
Especificações Statecharts Baseada na Análise de Mutantes, Dissertação de
Mestrado, ICMSC/USP, Dezembro, 1999.
URAL, H. Test Sequence Selection Based on Static Data Flow Analysis. Computer
Communications, Vol.10(05), pp. 234-242, Outubro, 1987
URAL, H.; YANG, B. A. Structural Test Selection Criterion. Information Processing
Letters, vol.28, pp.157-163, 1988.
VERGÍLIO, S.R.; MALDONADO, J.C.; JINO, M. Uma Estratégia para Geração de
Dados de Teste. in Proc. VII SBES – Simpósio Brasileiro de Engenharia de
Software, Rio de Janeiro, RJ, pp. 307-319, 1993.
VINCENZI, A.M.R. Subsídios para o Estabelecimento de Estratégias de Teste
Baseadas na Técnica de Mutação. Dissertação de Mestrado, ICMC/USP, São
Carlos, SP, Novembro, 1998.
VILELA, P.R.S.; MALDONADO, J.C; JINO, M. Program Graph Visualization, Software
Pratice and Experience¸ Vol. 27(11), pp.1245-1262, Novembro, 1997.
VILELA, P.R.S. Critérios Potenciais Usos de Integração: Definição e Análise, Tese de
Doutorado, DCA/FEE/UNICAMP, Campinas, SP, Brasil, Abril,1998.
WEYUKER, E.J. The Complexity of Data Flow Criteria for Test Data Selection.
Information Processing Letters, Vol.19(02), pp. 103-109, Agosto, 1984.
WONG, W.E. On Mutation and Data Flow. Tese de Doutorado, Software Engineering
Research Center - Purdue University, West Lafayette, Indiana, Dezembro,1993.
WONG(a), W.E. et al. Mutation versus All-Uses: An Empirical Evaluation of Cost,
Strength, and Effectiveness. Software Quality and Productivity - Theory, Practice,
Education and Training, Hong Kong, Dezembro, 1994.
WONG(b), W.E. et al. Constrained Mutation in C programs. VIII SBES - Simpósio
Brasileiro de Engenharia de Software, Curitiba, PR, pp. 439-452, Outubro, 1994.
ZHU, H., A Formal Analysis of the Subsume Relation Between Software Test
Adequacy Criteria. IEEE Transaction Software Engineering, Vol.22(04), pp. 248-
255, Abril, 1996.
ZHU, H.; HALL, P.A.V.; MAY, J.H.R. Software Unit Test Coverage and Adequacy.
ACM Computing Surveys, vol.29(04), Dezembro, 1997.