Buscar

Teste_de_Software_Motivação_e_Conceitos_Basicos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 1 
 
 
 
 
 
Centro de Tecnologia da Informação Renato Archer, CTI 
Ministério da Ciência e Tecnologia, MCT 
 
Teste de Software: Motivação 
e Conceitos Básicos 
 
 
Autores: 
 
Adalberto Nobiato Crespo: Adalberto.crespo@cti.gov.br 
Mario Jino: Jino@dca.fee.unicamp.br 
Miguel Argollo: Miguel.argollo@cti.gov.br 
Paulo Bueno: Paulo.bueno@cti.gov.br 
Celso Penteado de Barros: Celso.barros@cti.gov 
 
 
Outubro/2009 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 2 
 
Teste de Software: Motivação e Conceitos Básicos 
Apresentação 
Este documento apresenta uma introdução ao teste de software, um conjunto de atividades 
de extrema importância para a obtenção de produtos de software de qualidade. Como um 
texto inicial, buscou-se apresentar os conceitos fundamentais de teste de uma forma simples 
e breve. São descritos, dentre outros conceitos de teste: o objetivo; os procedimentos; o 
processo; os tipos; os níveis e as técnicas aplicadas à atividade de teste. 
O objetivo é apontar práticas aceitas como eficazes por profissionais da área e 
também padrões recentes de teste de software, definidos por órgãos como ISO/IEC e IEEE. 
É importante notar que a adoção de qualquer tecnologia de teste por parte das organizações 
ou profissionais envolvidos com o SPB deve ser calcada em uma análise cuidadosa das 
reais necessidades de teste, tendo em vista o objetivo da organização ou do profissional e a 
natureza do software produzido. 
Diferentes usuários podem se interessar prioritariamente por partes distintas deste 
documento. Embora a leitura integral seja recomendada, podem-se identificar duas áreas de 
interesse: aspectos mais técnicos do teste e aspectos mais voltados à política e ao 
gerenciamento do teste. 
As Seções 1, 2, 3 e 11 abordam a motivação, alguns conceitos que são essenciais para 
todos os leitores assim como as conclusões. As Seções 4, 5, 6 e 7 discutem conceitos como 
níveis, ciclos, tipos, técnicas, critérios e ferramentas de teste; conteúdo importante para os 
desenvolvedores de software e os responsáveis pelo teste (gerentes, projetistas e executores 
de teste). As Seções 8, 9, 10 apresentam os conceitos de processo, documentação, análise 
de riscos, e considerações políticas e estratégicas do teste, temas relacionados à gerência 
estratégica de TI, importantes para os responsáveis pela área de qualidade e de processos da 
organização. 
Guias e tutoriais de teste estão sendo desenvolvidos para complementar este 
documento. 
 
 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 3 
 
Conteúdo 
 
1 Introdução: software público, qualidade e teste ............................................................. 4 
2 Teste de software: objetivo, custos e benefícios ............................................................. 5 
3 O sucesso no teste: provocar falhas que mostrem defeitos ............................................ 8 
4 Níveis e ciclos do teste: quando testar .......................................................................... 11 
5 Tipos de teste: o que testar ........................................................................................... 13 
6 Técnicas e critérios de teste: como testar ..................................................................... 15 
 6.1 Critérios da técnica funcional ................................................................................... 17 
 6.2 Critérios da técnica estrutural .................................................................................. 21 
7 Ferramentas de apoio ao teste ...................................................................................... 24 
8 Processo e documentação do teste: como organizar o trabalho .................................. 26 
9 Análise de riscos: priorizar aspectos para o teste .......................................................... 28 
10 Política e processo de teste: o papel do teste na estratégia da organização ................ 29 
11 Conclusão: transformando conceitos de teste em melhores produtos de software .... 31 
 
 
 
 
 
 
 
 
 
 
 
 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 4 
 
1 Introdução: software público, qualidade e teste 
O amadurecimento da indústria de software no Brasil traz consigo um aumento da 
competitividade entre as empresas brasileiras desenvolvedoras e também destas com 
empresas de outros países. Neste contexto, a promoção da qualidade de produtos de 
software é um fator crítico de sucesso. Também de suma importância é o aprimoramento 
dos processos de engenharia e de gestão no desenvolvimento de software, visando permitir 
projetos bem sucedidos, com menores custos e respeitando os limites de prazo. 
O Software Público Brasileiro (SPB) adota um modelo de desenvolvimento de 
software caracterizado pelo compartilhamento de produtos de software, assim como dos 
artefatos e serviços a eles relacionados. A existência de um alto nível de qualidade do 
software, artefatos e serviços compartilhados seguramente tem uma influência positiva para 
o sucesso deste modelo. Deste modo, a adoção de práticas visando avaliar e aprimorar a 
qualidade deve ser estimulada no contexto do SPB. 
O desenvolvimento de software não é uma tarefa fácil e, por ser fortemente baseada 
no trabalho humano, é altamente sujeita a erros. Portanto, por mais que se adotem 
processos de software bem estabelecidos, e que estes sejam executados por pessoas 
capacitadas, usando técnicas e ferramentas adequadas, erros durante o desenvolvimento 
acontecem e resultam em deficiências no software. A atividade de teste visa identificar 
estas deficiências, permitindo assim o aprimoramento dos produtos de software. 
O restante do documento está organizado do seguinte modo. A Seção 2 aborda a 
necessidade do teste e os impactos negativos de um teste inadequado; a Seção 3 define 
alguns conceitos fundamentais; a Seção 4 mostra como o esforço de teste pode ser realizado 
em etapas e ciclos; a Seção 5 apresenta alguns tipos de teste existentes; a Seção 6 descreve 
as principais técnicas e critérios para seleção e avaliação de testes; a Seção 7 cita alguns 
tipos de ferramentas que podem apoiar esta atividade, enquanto a Seção 8 descreve as 
atividades principais e as informações envolvidas em um processo de teste; a Seção 9 
sumariza como a análise de riscos pode ser considerada no teste; a Seção 10 aborda como 
situar estrategicamente o teste em relação aos objetivos da organização. Finalmente, tem-se 
a conclusão na Seção 11. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 5 
 
2 Teste de software: objetivo, custos e benefícios 
Existem diversas definições de teste de software; por exemplo: 
• “Teste é uma atividade direcionada para avaliar um atributo ou capacidade de um 
programa ou sistema e determinar se ele satisfaz os resultados requeridos”1; 
• “Teste é o processo de executar um programa com a intenção de encontrar 
defeitos”2; 
• “Teste é o processo pelo qual se explora e se entende o estado dos benefícios e 
riscos associados com a versão de um sistema de software”3. 
Todas essas definições são válidas e destacam algum aspecto importante da atividade 
de teste. De maneira simplificada podemos entender o teste de software como: “a execução 
do software de uma forma controlada com o objetivo de avaliar se o software se comporta 
ou não conforme especificado”. 
Trata-se, portanto, de uma atividade fundamental para avaliar se o software produzido 
atende aos requisitos levantados com os usuários. No entanto, teste não exclui a realização 
de outras atividades como as inspeções efetuadasnos artefatos produzidos ao longo do 
processo de software. 
Uma questão essencial é: “por que existe a necessidade de se testar software?” Uma 
resposta (provocativa) a esta pergunta tem a forma de outra questão: “você se sentiria 
confortável em ser o passageiro de um vôo em uma aeronave que nunca decolou antes?” 
O processo de projeto e construção de aeronaves envolve uma série de atividades de 
teste da aeronave como um todo e de seus componentes principais (asas, turbinas, sistemas 
eletrônicos, sistemas mecânicos). Essas atividades visam a confirmar as teorias 
consideradas no projeto, obter dados empíricos e avaliar os aspectos não embasados por 
teorias, avaliar a conformidade com padrões de segurança e de desempenho de vôo, além 
de vários outros pontos. Os testes são aplicados em componentes, em subsistemas, e na 
aeronave inteira, incluindo o teste em condições reais de vôo. Esta questão é obviamente 
 
1
 Hetzel, B. 1988, “The Complete Guide to Software Testing (2nd Ed.)”. QED Information Sciences, Inc. 
2
 Myers, G.J., 1979, “The Art of Software Testing”, Addison-Wesley, New York. 
3
 Cem Kaner, James Bach e Bret Pettichord, “Lessons Learned in Software Testing: A Context-Driven 
Approach”, Willey Computer Publishing, 2002. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 6 
 
um exagero proposital; uma aeronave não testada nunca seria liberada para um vôo 
comercial. 
Analogamente, um software não deve ser liberado para uso sem que atividades 
adequadas de teste tenham sido realizadas. Por meio do teste diversas deficiências 
existentes no software, relacionadas a problemas de funcionalidade, desempenho, 
segurança, instalação e utilização podem ser encontradas e removidas, antes que o software 
“entre em vôo”, isto é, seja implantado para o uso dos clientes. 
Enfim, testa-se software porque o desenvolvimento de sistemas envolve uma série de 
atividades em que as possibilidades de ocorrência de erros humanos são inúmeras. Erros 
podem ocorrer logo no início do processo de criação do software, quando objetivos 
definidos podem estar incorretos ou incompletos. Além disso, erros podem ocorrer nas 
demais fases do desenvolvimento, como projeto, codificação e integração do software. 
Essencialmente erros ocorrem pela dificuldade dos seres humanos de executar tarefas e se 
comunicar com perfeição. Esses são os mesmos motivos que justificam o teste rigoroso em 
aeronaves. 
O teste de software não é uma atividade tecnicamente fácil nem barata. A atividade 
de teste representa um percentual significativo do custo total de desenvolvimento do 
software. Estudos mostram que, dependendo do tipo do software e do processo de 
desenvolvimento, o custo do teste tipicamente fica entre 50% e 80% do custo total 4. 
No entanto, é fato reconhecido que a ausência de uma atividade de teste bem 
realizada acarreta um custo total significativamente maior. 
O retrabalho devido à manutenção corretiva de problemas de especificação, projeto e 
programação é uma realidade amplamente conhecida. Estatísticas apresentadas mostram 
ainda que cada R$ 1,00 investido em prevenção de defeitos diminui de R$ 3,00 a R$ 10,00 
os custos de manutenção corretiva. E cada R$ 1,00 investido em remoção de defeitos 
diminui de R$ 2,00 a R$ 5,00 os custos de manutenção corretiva. 
Um estudo do NIST (Instituto Nacional de Padrões e Tecnologia, órgão do 
Departamento de Comércio dos Estados Unidos) aponta impactos negativos de 
 
4
 Boehm, B. W. 1981, “Software Engineering Economics.” 1st. Prentice Hall PTR 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 7 
 
inadequações nas atividades de teste5. Dentre os problemas acarretados pelo teste 
inadequado podem-se destacar: 
• Crescimento do número de falhas em uso devido à má qualidade do software, 
acarretando perdas na reputação da organização e no potencial de negócios futuros; 
• Aumento no custo de desenvolvimento de software, visto que o custo da correção de 
problemas no software cresce ao longo dos estágios do desenvolvimento, tendo seu 
maior valor quando é necessário corrigir problemas em um software já implantado 
no cliente; 
• Atraso para disponibilizar o produto ao mercado devido à ausência de processos e 
técnicas de teste padronizadas e a conseqüente necessidade de criar às pressas uma 
infra-estrutura de teste. 
Esta lista de problemas é mais extensa, e apresenta problemas potencialmente 
dramáticos, no caso de software com altos requisitos de confiabilidade, tais como: software 
de controle de reatores nucleares; software aeroespacial e software de monitoramento de 
leitos em UTIs. O teste inadequado de softwares que manipulam informações de alto valor, 
como dados estratégicos de empresas e informações bancárias, também pode acarretar 
grandes danos financeiros e de imagem às organizações. 
No contexto do SPB as deficiências no teste de um produto de software podem 
acarretar uma perda de reputação deste software entre os seus possíveis usuários, limitando 
consequentemente os potenciais benefícios trazidos pelo software. 
Raymond define o “modelo bazar” de desenvolvimento no qual o código fonte do 
software é disponibilizado publicamente na internet e desenvolvido de forma colaborativa e 
compartilhada por milhares de desenvolvedores espalhados pelo mundo; é o modelo 
utilizado para o desenvolvimento do Kernel do sistema operacional Linux 6. Segundo 
Raymond, ao se usar este modelo de desenvolvimento “quanto mais largamente o código 
fonte estiver disponível para o teste, exame e experimentação, mais rapidamente os “bugs” 
 
5
 The National Institute of Standards and Technology (NIST) Strategic Planning and Economic Analysis 
Group, “The Economic Impacts of Inadequate Infrastructure for Software Testing,” Maio, 2002 
6
 Eric S. Raymond, “The Cathedral & the Bazaar, Musings on Linux and Open Source by an Accidental 
Revolutionary,” Fevereiro, 2001, O´Reilly & Associates, Inc. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 8 
 
serão descobertos”, chamada por ele de “Lei Linus” – referindo-se a Linus Torvalds, 
idealizador do Linux – “given enough eyeballs, all bugs are shallow” 7. Na medida em que 
o SPB caracteriza-se pelo compartilhamento de código fonte e de outros artefatos de 
software, é razoável esperar que as práticas de teste possam ser conduzidas de forma 
eficiente, aproveitando a característica colaborativa do ambiente e o espírito engajado e 
investigativo de muitos membros de comunidades. A utilização de boas práticas de teste 
neste contexto tem o potencial de aumentar a qualidade dos produtos de software e os 
benefícios do SPB à sociedade. 
3 O sucesso no teste: provocar falhas que mostrem defeitos 
O teste de software pode também ser definido como “a execução de 
um software com o objetivo de encontrar defeitos”. Neste caso, fica 
explícita a idéia de que o teste deve exercitar o software de uma 
maneira tal que este falhe, permitindo assim a posterior identificação 
e remoção da causa desta falha. 
Deve-se ter em mente que um defeito (fault ou defect em inglês) é uma anomalia no 
software que pode causar uma falha (exemplos: um comando imperfeito, incompleto, 
ausente ou extra no software). Uma falha (failure) é a ocorrência de uma discrepância entre 
o resultado observado da execução do software e o resultado prescrito pelos requisitos. Um 
erro (error) é um estado incorreto, intermediário ou final, de execução do software que 
pode produzir um resultado incorreto, ou seja, pode levar a uma falha do software. Um 
defeito no software é introduzido devido a algum engano (mistake) cometido em algum 
momento no desenvolvimento do software e não descobertoem atividades de inspeção. 
Por exemplo: o foguete Ariane V explodiu em 1996, cerca de 40 segundos após ter 
decolado 8. O foguete saiu de sua rota programada e se desintegrou devido a forças 
aerodinâmicas. Em uma análise posterior do incidente, verificou-se que o software de 
controle do vôo indicou uma direção errada ao foguete (esta foi a falha) devido a uma 
 
7
 “se os olhos forem suficientes, todos os bugs serão vistos” em uma tradução livre. Ou: “... dados grupos 
grandes o suficiente de testadores-beta e de desenvolvedores, quase todos os problemas serão identificados 
rapidamente e o conserto será óbvio para alguém...”. 
8
 ARIANE 5 Flight 501 Failure Report by the Inquiry Board, Julho, 1996. 
 Centro de Tecnologia da Informação Renato Archer 
 
Teste de Software: Motivação e Conceitos Básicos
conversão incorreta de uma variável
defeito). 
Esta conversão produziu um 
erro de overflow, isto é, um valor 
errôneo de uma variável (este foi o 
erro), que ocasionou a resposta 
incorreta do software. O engano foi, 
provavelmente, cometido por um 
programador, que inseriu no 
software um comando de atribuição 
indevido. 
Portanto, para um defei
de uma forma tal que o defeito seja “sensibilizado”
quando o comando defeituoso é executado e cria um
as variáveis internas, por exemplo)
erro seja propagado, ao longo da execução, do ponto onde foi criado
defeituoso) para alguma saída do software, ocasionando uma resposta final incorreta 
(valores incorretos para alguma saída produzida, por exemplo).
 A Figura 1 ilustra a cadeia de eventos que se inicia com um engano e que pode 
resultar em uma falha do software.
Figura 1: C
Em uma visão simplificada, a realização do teste 
a. Selecionar valores para as 
teste (chamados de Dad
partir do conjunto de todos os possíveis valores que podem ser usados para executar 
o software, chamado de 
Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
ftware: Motivação e Conceitos Básicos 
variável tipo real de 64 bits em um inteiro de 16 bits
produziu um 
um valor 
(este foi o 
resposta 
O engano foi, 
provavelmente, cometido por um 
programador, que inseriu no 
software um comando de atribuição 
efeito ser descoberto é necessário que o software seja executado 
de uma forma tal que o defeito seja “sensibilizado” e provoque uma falha
quando o comando defeituoso é executado e cria um estado de erro (valores incorretos para 
ternas, por exemplo). Para que a falha aconteça, é necessário 
ao longo da execução, do ponto onde foi criado (logo após o comando 
para alguma saída do software, ocasionando uma resposta final incorreta 
(valores incorretos para alguma saída produzida, por exemplo). 
A Figura 1 ilustra a cadeia de eventos que se inicia com um engano e que pode 
resultar em uma falha do software. 
Figura 1: Cadeia de Eventos Para a Falha do Software 
Em uma visão simplificada, a realização do teste envolve: 
valores para as Variáveis de Entrada a serem submetidos ao software em 
ados de Entrada ou de Dados de Teste); esta seleção é feita a 
partir do conjunto de todos os possíveis valores que podem ser usados para executar 
o software, chamado de Domínio de Entrada do software. 
Página 9 
 
tipo real de 64 bits em um inteiro de 16 bits (este foi o 
seja executado 
e provoque uma falha. Isto ocorre 
estado de erro (valores incorretos para 
é necessário ainda que este 
(logo após o comando 
para alguma saída do software, ocasionando uma resposta final incorreta 
A Figura 1 ilustra a cadeia de eventos que se inicia com um engano e que pode 
 
a serem submetidos ao software em 
esta seleção é feita a 
partir do conjunto de todos os possíveis valores que podem ser usados para executar 
 Centro de Tecnologia da Informação Renato Archer 
 
Teste de Software: Motivação e Conceitos Básicos
b. Executar o software com os dados de teste
variáveis de entrada e acionar alguma função no software
c. Avaliar se a saída produzida corresponde à 
do software, isto é, se o comportamento e os valores produzidos como resultado da 
execução foram os corretos
Um par dados de entrada
de Teste. Uma coleção de vários
Teste. 
Para a realização do teste, presume
permita avaliar se certo resultado 
acordo com a especificação (ou 
Esta avaliação é feita por meio de um 
papel de oráculo e realiza a comparação “esperado versus obtido”
software falhou ou não. 
A Figura 2 apresenta uma visão simplificada do teste: 
de entrada e a avaliação da saída produzida pelo programa 
esperados. 
Uma limitação inerente à atividade de teste é 
software está correto. O teste pode revelar a 
ausência desses defeitos. Portanto, por mais rigoroso que seja o teste, não é possível 
assegurar que não permaneceram no software defeitos “escondidos”
Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
ftware: Motivação e Conceitos Básicos 
com os dados de teste, ou seja, informar os valores para 
entrada e acionar alguma função no software; e 
se a saída produzida corresponde à saída esperada segundo a especificação 
, isto é, se o comportamento e os valores produzidos como resultado da 
corretos. 
entrada e resultados esperados associados é chamado de um 
de vários casos de teste é referida como um Conjunto
Para a realização do teste, presume-se a existência de algum meio ou dispositivo que 
resultado - ou comportamento - produzido pelo software está de 
acordo com a especificação (ou seja, se é o resultado esperado de um software correto). 
é feita por meio de um oráculo. Normalmente o executor do teste assume o 
realiza a comparação “esperado versus obtido”, identifica
apresenta uma visão simplificada do teste: a execução do programa com dados 
de entrada e a avaliação da saída produzida pelo programa em relação aos resultados 
Figura 2: Visão Simplificada do Teste 
inerente à atividade de teste é sua impossibilidade de provar que um
. O teste pode revelar a presença de defeitos no software, mas não a 
Portanto, por mais rigoroso que seja o teste, não é possível 
que não permaneceram no software defeitos “escondidos”, não encontrados 
Página 10 
 
, ou seja, informar os valores para as 
esperada segundo a especificação 
, isto é, se o comportamento e os valores produzidos como resultado da 
hamado de um Caso 
onjunto de Casos de 
se a existência de algum meio ou dispositivo que 
produzido pelo software está de 
o resultado esperado de um software correto). 
Normalmente o executor do teste assume o 
identificando se o 
a execução do programa com dados 
em relação aos resultados 
 
provar que um 
no software, mas não a 
Portanto, por mais rigoroso que seja o teste, não é possível 
não encontrados 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 11 
 
durante o teste. No entanto, o teste pode dar subsídios para que se avalie o quão confiável 
(ou não) é o software. 
4 Níveis e ciclos do teste: quando testar 
O teste de software é normalmente realizado em uma série de fases, ou níveis: 
• Teste de Unidade; 
• Teste de Integração; 
• Teste de Sistema; e 
• Teste de Aceitação. 
Após o desenvolvimento de cada unidade do software (procedimento, função, método 
ou classe) é realizado o teste de unidade (ou teste unitário), que visa a identificar defeitos 
introduzidos nos algoritmos e estruturas de dados dessas unidades. Em geral, o teste de 
unidade é feito pelo próprio desenvolvedor da unidade. As unidades são então 
incrementalmente integradas e testadas (teste de integração). Esta etapa é realizada pelos 
desenvolvedores ou por elementos de uma equipe de teste e visa a identificar defeitos de 
interface entre as unidades. Depois de integrado, o software é testado “como um todo”: o 
teste de sistema é o nível de teste cujos requisitos são derivados da especificação de 
requisitos funcionais e não funcionais, e é aplicado para verificar se o software e o 
hardware executam corretamente ou não quandointegrados ao ambiente de operação. O 
teste de aceitação é então conduzido para estabelecer se o sistema satisfaz ou não os 
critérios de aceitação definidos com o cliente. 
 Deve-se notar que em cada um desses níveis (unidade, integração, sistema e 
aceitação) diversos ciclos de teste podem ocorrer. Em cada ciclo de teste um procedimento 
de teste é realizado, por meio do qual um ou mais casos de teste são executados. Falhas 
provocadas por casos de teste devem ser registradas para posterior depuração do software 
(localização e remoção dos defeitos) pela equipe de desenvolvimento. No próximo ciclo, 
casos de teste devem ser re-executados para avaliar se os defeitos que ocasionaram as 
falhas foram realmente removidos e se as alterações no software não introduziram 
inadvertidamente outros defeitos. Pode ocorrer também a necessidade de se retornar a um 
nível de teste anterior. Por exemplo: durante o teste de integração podem ser identificados 
 Centro de Tecnologia da Informação Renato Archer 
 
Teste de Software: Motivação e Conceitos Básicos
problemas que requeiram muitas alterações em 
pode ser adequado, além de re
novamente o teste de unidade 
O teste de um software já testado previamente
Teste de Regressão. Este teste busca verificar se as modificações efetuadas não 
introduziram novos defeitos ou ativaram defeitos em partes inalteradas do código; visa 
também avaliar se o software ainda satisfaz os seus r
tipicamente realizado na fase de manutenção, após a realização de mudanças no software 
ou no seu ambiente. Conforme descrito no parágrafo anterior, este teste também pode 
ocorrer ao longo do desenvolvimento do software. 
A Figura 3 ilustra um processo 
sequencialmente: teste de unidade
níveis são mostrados os ciclos
execução de casos de teste. A figura mostra
de teste. 
Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
ftware: Motivação e Conceitos Básicos 
as que requeiram muitas alterações em algum módulo do software. Neste caso, 
pode ser adequado, além de re-executar casos de teste de integração, também realizar 
novamente o teste de unidade do módulo alterado. 
O teste de um software já testado previamente e que sofreu mudanças é chamado de 
. Este teste busca verificar se as modificações efetuadas não 
introduziram novos defeitos ou ativaram defeitos em partes inalteradas do código; visa 
também avaliar se o software ainda satisfaz os seus requisitos. O teste de regressão é 
tipicamente realizado na fase de manutenção, após a realização de mudanças no software 
ou no seu ambiente. Conforme descrito no parágrafo anterior, este teste também pode 
ocorrer ao longo do desenvolvimento do software. 
A Figura 3 ilustra um processo em que os níveis de teste são executados 
quencialmente: teste de unidade, de integração, de sistema e de aceitação.
níveis são mostrados os ciclos que envolvem alterações do software (ou depuração
ão de casos de teste. A figura mostra também o fluxo de retorno a níveis anteriores 
Figura 3: Níveis e Ciclos de Teste 
Página 12 
 
do software. Neste caso, 
executar casos de teste de integração, também realizar 
e que sofreu mudanças é chamado de 
. Este teste busca verificar se as modificações efetuadas não 
introduziram novos defeitos ou ativaram defeitos em partes inalteradas do código; visa 
equisitos. O teste de regressão é 
tipicamente realizado na fase de manutenção, após a realização de mudanças no software 
ou no seu ambiente. Conforme descrito no parágrafo anterior, este teste também pode 
os níveis de teste são executados 
de sistema e de aceitação. Em todos os 
depuração) e a re-
também o fluxo de retorno a níveis anteriores 
 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 13 
 
É importante destacar que não é obrigatório que todos os níveis de teste ocorram para 
que se tenha um teste adequado. A necessidade ou não de realizar cada um desses níveis 
deve ser decidida a partir da análise da situação específica, conforme descrito nas seções 
sobre processos de teste (Seções 8 e 10). 
5 Tipos de teste: o que testar 
Diversos atributos de qualidade do software podem ser avaliados por meio de testes. 
Características de qualidade de software definidas em padrões como a ISO/IEC 9126 9 
podem servir como base para a definição de aspectos do software a serem avaliados por 
meio da realização de testes. Portanto, existem diversos tipos de teste; cada tipo visa à 
avaliação de um aspecto distinto do software e pode ser aplicado em um ou mais níveis de 
teste (unidade, integração, etc.). 
O teste de funcionalidade busca avaliar se o software apresenta um conjunto de funções 
que satisfaça ou não às necessidades levantadas (associadas aos requisitos definidos). 
O teste de desempenho visa a avaliar se o 
software executa as funções previstas satisfazendo ou 
não os requisitos de desempenho definidos (e.g., 
velocidade de processamento, tempo de resposta, uso 
de memória). 
O teste de interoperabilidade avalia a capacidade do 
software em interagir com um ou mais componentes ou 
sistemas. 
O teste de segurança (security) visa a avaliar a habilidade 
do software de impedir o acesso não autorizado – acidental ou 
deliberado – ao software ou a dados. 
O teste de sanidade (smoke test) envolve a execução de um subconjunto dos testes 
projetados que cobrem algumas funcionalidades principais; pode ser realizado 
 
9
 ISO/IEC 9126-1:2001 Software engineering -- Product Quality -- Part 1: Quality model 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 14 
 
periodicamente, ou como uma atividade inicial para avaliar se o software está pronto para 
um esforço maior de teste. 
O teste de estresse simula condições atípicas de utilização do software, provocando 
aumentos e reduções sucessivas de transações que superem os volumes máximos previstos 
para a capacidade de processamento dos componentes ou do sistema. 
O teste de usabilidade visa a determinar quão 
facilmente o produto de software é compreendido, 
apreendido e usado, e quão agradável ele é ao usuário. 
O teste de portabilidade busca avaliar o nível de 
facilidade de transferência de um ambiente de hardware e 
software para outro ambiente. 
O teste de carga consiste em medir o comportamento 
de um componente ou sistema submetido a cargas de 
processamento crescentes para determinar qual nível de 
carga o sistema pode tratar; por exemplo, número de 
usuários ou número de transações. 
O teste de instalação busca avaliar se o software é instalado e desinstalado com sucesso 
ou não em determinado ambiente operacional. 
O teste de recuperação determina a capacidade ou incapacidade de um produto de 
software de restabelecer condições normais de operação e de recuperar dados afetados, em 
caso de falha. 
A determinação de quais tipos de teste devem ser utilizados e em qual (quais) nível 
(níveis) eles devem ser aplicados, ocorre durante a fase de planejamento do teste. Esta 
definição é feita considerando-se as informações disponíveis sobre a natureza do software 
em teste e dos requisitos específicos dos módulos que compõem o software. 
Na maior parte das situações é adequado focar atenção no teste de funcionalidade para 
avaliar os se os requisitos funcionais do software são satisfeitos ou não. Este teste deve ser 
complementado por outros tipos de teste (carga, desempenho, etc) para avaliar se os 
requisitos não funcionais do software são satisfeitos ou não. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 15 
 
6 Técnicas e critérios de teste: como testar 
Esta seção apresenta algumas Técnicas e Critérios de Teste úteis para a seleção de bons 
casos de teste. É importante ressalvar que existem outras técnicas não relatadas aqui; 
procurou-se destacar as técnicas mais usadas na práticaou mais consolidadas na literatura. 
Como este documento apresenta apenas uma visão inicial sobre técnicas e critérios, é 
recomendada a consulta a tutoriais específicos e de literatura especializada para maiores 
informações. 
Uma tarefa fundamental na atividade de teste é a seleção dos casos de teste a serem 
utilizados. Esta seleção é necessária porque o Teste Exaustivo, feito com todas as possíveis 
combinações de valores de entrada, é quase sempre inviável. Por exemplo, considere um 
software que tenha como entrada 15 variáveis, sendo que cada uma delas pode assumir 7 
valores diferentes. Considere ainda que a execução de cada caso de teste demore 1/100 de 
segundo (0,01 segundo). Para realizar o teste exaustivo deste software seriam necessários 
715/100 segundos, o que equivale a 1.505 anos e alguns meses de processamento. 
Tendo em vista o objetivo principal do teste de revelar defeitos e a restrição de que os 
cronogramas e orçamentos sejam cumpridos, é aconselhável a utilização de Técnicas de 
Teste. Estas técnicas estabelecem procedimentos para selecionar - ou criar - os casos de 
teste que resultem em um conjunto de teste eficaz e de tamanho moderado. As técnicas de 
teste determinam a natureza da informação a ser utilizada para se fazer a seleção ou a 
avaliação de conjuntos de teste. Na técnica de Teste Funcional os casos de teste são 
selecionados por meio da análise da especificação do software, ou utilizando modelos 
criados na fase de análise e projeto do software. Na técnica de Teste Estrutural os casos de 
teste são selecionados por meio da análise da estrutura interna do software. Na técnica de 
teste Baseada em Defeitos, casos de teste são selecionados a partir de classes de defeitos 
que podem ser introduzidos ao longo do desenvolvimento do software. A Figura 4 ilustra 
as técnicas funcional e estrutural de teste. 
 
 Centro de Tecnologia da Informação Renato Archer 
 
Teste de Software: Motivação e Conceitos Básicos
As diversas técnicas de teste não são excludentes;
técnicas é recomendada, pois os defeitos revelados pela aplicação de
ser diferentes. 
 A utilização de uma técnica de teste ocorre por meio da aplicação 
de Teste. Um critério de teste determina um conjunto de 
que devem ser exercitados pela realização do teste.
comandos - ou todos os nós 
requeridos os comandos do código do software
deve ser executado (ou exercitado), pelo menos uma vez, por algum dado de teste. 
A Cobertura do Teste,
percentual de elementos requeridos exercitados por um conjunto de casos 
executados. Por exemplo, o percentual de comandos executados durante o teste seria uma 
medida de cobertura considerando
medida de cobertura quantifica, sob certa perspectiva, a qualidade do teste realizado. 
razoável supor, neste exemplo, que um conjunto de teste que executa 90% dos comandos de 
um software é melhor do que outro conjunto de teste
 
10
 O teste caixa preta inclui outras técnicas além da técnica funcional, única que está sendo considerada neste 
documento. 
Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
ftware: Motivação e Conceitos Básicos 
Figura 4: Técnicas de Teste 10 
as de teste não são excludentes; na verdade, a utilização de várias 
ada, pois os defeitos revelados pela aplicação de cada uma delas podem 
A utilização de uma técnica de teste ocorre por meio da aplicação de algum
Um critério de teste determina um conjunto de Elementos Requeridos
que devem ser exercitados pela realização do teste. Por exemplo, o critério 
ou todos os nós - da técnica estrutural de teste define como elementos 
o código do software. Neste caso, cada comando do so
deve ser executado (ou exercitado), pelo menos uma vez, por algum dado de teste. 
este, com respeito a um critério de teste específico, mede
percentual de elementos requeridos exercitados por um conjunto de casos 
. Por exemplo, o percentual de comandos executados durante o teste seria uma 
medida de cobertura considerando-se o critério de teste do exemplo anterior. Deste modo, a 
medida de cobertura quantifica, sob certa perspectiva, a qualidade do teste realizado. 
razoável supor, neste exemplo, que um conjunto de teste que executa 90% dos comandos de 
do que outro conjunto de teste que executa apenas 50% dos 
 
O teste caixa preta inclui outras técnicas além da técnica funcional, única que está sendo considerada neste 
Página 16 
 
 
a utilização de várias 
cada uma delas podem 
algum Critério 
equeridos do software 
critério todos os 
de teste define como elementos 
. Neste caso, cada comando do software 
deve ser executado (ou exercitado), pelo menos uma vez, por algum dado de teste. 
com respeito a um critério de teste específico, mede o 
percentual de elementos requeridos exercitados por um conjunto de casos de teste 
. Por exemplo, o percentual de comandos executados durante o teste seria uma 
se o critério de teste do exemplo anterior. Deste modo, a 
medida de cobertura quantifica, sob certa perspectiva, a qualidade do teste realizado. É 
razoável supor, neste exemplo, que um conjunto de teste que executa 90% dos comandos de 
que executa apenas 50% dos 
O teste caixa preta inclui outras técnicas além da técnica funcional, única que está sendo considerada neste 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 17 
 
comandos. Se um conjunto de casos de teste exercita todos os elementos requeridos pelo 
critério, diz-se que tal conjunto satisfaz o critério. 
Em geral, os critérios de teste podem ser utilizados para: criar um conjunto de casos 
de teste; avaliar um conjunto de casos de teste já criado; ou ainda, servir como uma 
condição para a finalização do teste. 
A seguir é feita uma breve descrição de alguns critérios de teste da técnica funcional e 
da técnica estrutural, as mais usadas na prática. 
6.1 Critérios da técnica funcional 
Os critérios da técnica de teste funcional caracterizam-se por utilizar informações 
originadas da especificação do software como base para a seleção de casos de teste. 
Artefatos criados na fase de análise de requisitos e de projeto do software, tais como o 
documento de requisitos do software ou modelos como diagramas UML, são utilizados 
para criar os casos de teste. 
A idéia essencial da técnica funcional é selecionar dados de teste representativos o 
suficiente para avaliar se as funcionalidades definidas na especificação do software foram 
implementadas corretamente ou não. Para tanto, operações associadas às funcionalidades 
são identificadas e dados de teste que as exercitem são definidos e executados. 
O critério Particionamento de Equivalência divide o domínio de entrada do software 
em classes de equivalência e requer que pelo menos um dado de teste de cada classe seja 
selecionado e executado. Essas classes são definidas pressupondo que todo dado de entrada 
pertencente a uma classe é tratado do mesmo modo, de acordo com a especificação do 
software. Portanto, cada dado de teste selecionado representa os demais dados de testes da 
sua classe de equivalência. 
Por exemplo, se a especificação define que um software recebe como entrada uma 
variável idade, tipo inteiro, que pode variar de 0 a 120 anos (incluindo os extremos), 
poderiam ser identificadas as seguintes classes de equivalência: 
• Classe 1: idade menor que zero – referida como classe de valores inválidos; 
• Classe 2: idade entre 0 e 120 – classe de valores válidos; e, 
• Classe 3: idade maior que 120 – outra classe de valores inválidos. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 18 
 
Ao se executar o software com dados de teste que pertençam às Classes 1 e 3 espera-se que 
os valores fornecidos sejam identificados como não aceitáveis e sejam emitidas mensagens 
apropriadas. Ao se executar o software com um dado de teste que pertença à Classe 2 o 
valorfornecido deve ser aceito e uma saída apropriada deve ser produzida. 
A Figura 5 ilustra as classes de equivalência do exemplo e os dados de teste selecionados 
para exercitar cada classe. 
 
 
 
 
Figura 5: Classes de Equivalência e Dados de Teste 
Dependendo da especificação, se existirem diferentes tipos de tratamento dentro de 
alguma dessas classes, ela deve ser subdividida. Por exemplo, a Classe 2 pode ser 
subdividida em sub-classes: 2.1 – idade entre 0 e 17; 2.2 – idade entre 18 e 20; e 2.3 – idade 
entre 21 e 120. Esta divisão faz sentido e deve ser feita se a especificação do software 
definir tratamentos distintos para estas diferentes faixas de valores. Neste caso a Classe 2 
não é homogênea e, portanto, a execução de apenas um caso de tese da classe seria 
insuficiente. 
Deve-se notar que o modo como as classes de equivalência são definidas influencia 
fortemente a eficácia do critério. Esta definição deve ser feita de forma cuidadosa, 
analisando-se a natureza de cada variável de entrada do programa e a especificação do 
software em teste. 
O critério Análise de Valores Limite complementa o critério Particionamento de 
Equivalência. Freqüentemente as situações de transição de comportamento do software de 
uma classe para outra classe, as situações limite, são implementadas de forma incorreta. 
Estas situações costumam ser inerentemente complexas e acabam induzindo a erros de 
análise, projeto ou codificação. 
Para descobrir defeitos associados a estas situações é recomendada a seleção de dados 
de teste situados nos limites das classes. No exemplo anterior (variável idade, tipo inteiro, 
Classe 2 
(valores válidos) 
Classe 3 
(valores inválidos) 
Classe 1 
(valores inválidos) 
 -39 0 45 120 135 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 19 
 
que pode variar de 0 a 120 anos, incluindo os extremos) os valores limite seriam: 1, 0 e -1, 
referentes ao limite entre as Classes 1 e 2; e 119, 120, 121, referentes ao limite entre as 
Classes 2 e 3, conforme ilustrado na Figura 6. Notar que são selecionados valores 
exatamente no limite, valores imediatamente inferiores e imediatamente superiores ao 
limite. A definição dos valores limite também deve ser feita cuidadosamente, analisando-se 
a natureza de cada variável de entrada do programa e a especificação do software em teste. 
 
 
 
 
Figura 6: Valores Limite e Dados de Teste 
Teste baseado em modelos 
Alguns critérios caracterizam-se por utilizar modelos do software (representações 
intermediárias do software) como base para a seleção de dados de teste. Esses critérios são 
freqüentemente chamados de Teste Baseado em Modelos (Model Based Testing). Modelos 
como Máquinas de Estados Finitas (FSM), ou modelos definidos em linguagens como 
UML (Unified Modelling Language) ou SDL (Specification and Description Language) 
podem ser utilizados para este propósito. 
O Teste Baseado em Casos de Uso utiliza os modelos de Casos de Uso (representação 
definida na UML), criados na fase de análise de requisitos e de projeto do software, para a 
seleção de casos de teste. Casos de Uso são muito usados para especificar o comportamento 
esperado do sistema do ponto de vista dos atores que interagem com o sistema. Como são 
elaborados normalmente em etapas iniciais do processo de desenvolvimento, esses modelos 
são úteis para o projeto antecipado de casos de teste, principalmente os que serão aplicados 
nos testes de sistema e de aceitação do software. 
 
A aplicação do critério de teste é feita nos seguintes passos: 
Classe 3 
(valores inválidos) 
Classe 2 
(valores válidos) 
Classe 1 
(valores inválidos) 
 -1 0 1 119 120 121 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 20 
 
a. Descrever os fluxos de eventos para o caso de uso. Devem ser descritos tanto o 
fluxo de eventos básico como os fluxos alternativos e de exceção. 
b. Definir o conjunto de cenários que serão usados nos testes. Cada cenário pode ser 
formado a partir dos fluxos de eventos identificados bem como das combinações 
desses fluxos. 
c. Definir casos de teste para cada um dos cenários, ou seja, para cada cenário definir 
valores de entrada, ações no software que provoquem a execução do cenário e as 
saídas esperadas. 
d. Executar o software com os dados de teste, avaliar se os resultados produzidos 
correspondem aos esperados, registrar os resultados e os incidentes observados. 
Notar que os passos a, b e c podem ser realizados logo que a especificação dos casos 
de uso esteja pronta e revisada; não é necessário esperar a conclusão da implementação dos 
casos de uso para realizá-los. O passo d pode ser realizado em momentos distintos, 
dependendo do nível do teste realizado: quando os módulos que implementam as funções 
especificadas nos casos de uso estiverem disponíveis (no caso do teste de “partes” do 
sistema); quando o sistema como um todo estiver integrado e disponível (no caso do teste 
de sistema); ou ainda, quando o sistema for utilizado no processo de aceitação pelo cliente 
(no caso do teste de aceitação). 
Naturalmente, outros modelos (da UML ou de outras linguagens) podem ser 
utilizados de forma semelhante para a seleção de casos de teste. Por exemplo, Diagramas 
de Estados (com os Statecharts) podem servir como base para a seleção de casos de teste 
que exercitem transições de estado que podem ocorrer em um objeto. Critérios de teste 
baseados em modelos de estados são úteis para aplicações nas quais muitas transições 
complexas de estado dos objetos são possíveis, tais como sistemas de controle de processos 
e sistemas de telefonia. 
Diagramas de Colaboração, que descrevem a interação entre objetos para especificar 
um comportamento, também podem ser utilizados para seleção de casos de teste. Critérios 
de teste baseados em Diagramas de Colaboração permitem avaliar interações específicas 
entre objetos, formadas por seqüências de comunicações. Os casos de teste visam a 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 21 
 
exercitar e avaliar se as trocas de mensagens, que caracterizam a colaboração de um 
conjunto de objetos, permitem atingir os propósitos definidos na especificação do sistema. 
6.2 Critérios da técnica estrutural 
Na técnica de Teste Estrutural os dados de teste são selecionados por meio da análise da 
estrutura interna do software. Portanto, o código fonte do software deve estar disponível, 
pois ele é utilizado para a seleção dos dados de teste. A motivação para o uso desses 
critérios muitas vezes é feita com questionamentos do tipo: “você confiaria em um software 
se fosse informado que algumas instruções deste software nunca foram executadas antes?” 
Esta pergunta enfatiza que defeitos em trechos não exercitados do código fonte do software 
certamente não serão descobertos. 
Na Técnica Estrutural uma unidade de software (função, procedimento ou método) é 
considerada como o conjunto de seus componentes estruturais. Estes componentes 
estruturais podem ser comandos de desvio (como os comandos: if-then; switch; while e 
repeat) ou outros comandos (instruções como: x = y + 2; read(a,b); x = func(a,b) ). O 
software pode ser representado por um Grafo de Fluxo de Controle (GFC) composto de nós 
– correspondem a blocos de comandos que são sempre executados conjuntamente -, e 
ramos, que correspondem a possíveis desvios no fluxo de execução. O GFC possui um 
único nó de entrada, um único nó de saída, e define um conjunto de caminhos que podem 
ser executados do nó de entrada ao nó de saída, passando por certos comandos e desvios ao 
longo da execução. Quando se executa o software com um dado de teste, algum caminho 
específico será executado no programa (istosó não ocorre caso o software entre em um 
laço infinito). 
A Figura 7 mostra um código fonte em C (identifier.c) e o respectivo GFC 11. Notar 
que o código fonte apresenta no lado esquerdo como comentários o número do nó do GFC 
ao qual o comando pertence. É possível identificar conjuntos de comandos executados 
sempre conjuntamente, por exemplo, os comandos precedidos por /* 01 */ que pertencem 
ao nó 1 do GFC. Pode-se também observar o efeito de comandos de desvio no fluxo de 
 
11
 Código fonte e GFC presentes em: Barbosa E., Maldonado, J., Vincenzi, A., Delamaro, M., Souza, S., Jino, 
M. “Introdução ao Teste de Software”, XIV Simpósio Brasileiro de Engenharia de Software”, 2000. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 22 
 
controle, por exemplo, o comando while presente no nó 4 do grafo, ou o comando if-then-
else iniciado no nó 8. 
 
 
 
 
 
 
 
 
 
 
 
Figura 7: Código Fonte e Respectivo Grafo de Fluxo de Controle 
 
Critérios de teste estrutural estabelecem componentes internos do software como 
elementos requeridos. O critério de teste Todos os Comandos (ou Todos os Nós) requer que 
cada comando do software seja exercitado pelo menos uma vez durante o teste. A 
determinação de dados de teste que exercitem um comando específico requer a análise do 
código fonte do software e a escolha de valores para as variáveis de entrada que provoquem 
a execução do comando. 
Por exemplo, a Figura 8 mostra um trecho de programa no qual há um comando de 
decisão if-then-else e o respectivo GFC. Para que os comandos representados por B sejam 
executados é necessária a seleção de valores de entrada tais que a condição lógica do 
comando if seja satisfeita; por exemplo, valores de entrada que façam com que x tenha 
valor 100 e y tenha valor 30 imediatamente antes do comando if (notar que x e y podem ser 
variáveis de entrada, mas também podem ser computadas internamente, a partir de outras 
variáveis). Outros dados de teste serão necessários para exercitar os comandos 
/* 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>: “); 
/* 01 */ achar = fgetc (stdin); 
/* 01 */ valid_id = valid_starter (achar); 
/* 01 */ if (valid_id) 
/* 02 */ length = 1; 
/* 03 */ achar = fgetc (stdin); 
/* 04 */ while (achar != ‘\n’) 
/* 05 */ { 
/* 05 */ if (!(valid_follower (achar))) 
/* 06 */ valid_id = 0; 
/* 07 */ length++; 
/* 07 */ achar = fgetc (stdin); 
/* 07 */ } 
/* 08 */ if (valid_id && (length >= 1) && (length < 6) ) 
/* 09 */ printf (“Valido\n”); 
/* 10 */ else 
/* 10 */ printf (“Invalido\n”); 
/* 11 */ } 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 23 
 
representados por C; por exemplo, dados que resultem nos valores x = 20 e y = 15 antes do 
comando if. 
 
 
 
 
 
Figura 8: Comando if-then-else e Respectivo Grafo de Fluxo de Controle 
 
 
 
 
Figura 9: Comando if-then e Respectivo Grafo de Fluxo de Controle 
O critério Todos os Ramos requer que cada possível transferência de controle seja 
exercitada pelo menos uma vez. A Figura 9 mostra um trecho de programa com um 
comando condicional if-then. Os dados de teste que satisfazem a condição do if, exercitam 
os comandos representados em B e também os em C. Este critério, no entanto (ao contrário 
do anterior), requer a execução de dados de teste adicionais, que provoquem a transferência 
de controle (ou ramo) do comando if diretamente para os comandos em C (sem passar por 
B). 
O critério Todos os Caminhos requer que cada diferente caminho no GFC seja 
executado pelo menos uma vez. Este critério é geralmente considerado excessivamente 
exigente visto que, em programas reais, a sua aplicação tende a gerar conjuntos muito 
grandes de elementos requeridos. Considere a Figura 10 que mostra um trecho de código 
com dois comandos if-then-else em sequência e o respectivo GFC; note que o segundo 
comando if pertence ao nó D no grafo. A execução de apenas dois casos de teste é 
suficiente para exercitar todos os nós e também todos os arcos do GFC; por exemplo, 
utilizando um caso de teste que exercite a seqüência ABDEG e outro que exercite a 
A …; 
A if (x > y * 2) 
B { … } 
C else 
C { … } 
D …; 
 
A 
B C 
D 
 
A …; 
A If (x > y * 2) 
B { … } 
C …; 
 
A 
B 
C 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 24 
 
seqüência ACDFG. No entanto, para satisfazer o critério todos os caminhos são necessários 
quatro casos de teste, cada um exercitando um caminho do GFC: ABDEG, ABDFG, 
ACDEG e ACDFG. 
 
 
 
 
 
 
Figura 10: Comandos if-then em Sequência e Respectivo Grafo de Fluxo de Controle 
Existem outros critérios estruturais que não serão abordados neste documento. Mais 
informações sobre os critérios apresentados e sobre como utilizá-los encontram-se em 
tutoriais específicos e em literatura especializada. 
7 Ferramentas de apoio ao teste 
As empresas de software são cada vez mais pressionadas a produzir produtos de qualidade 
em curto espaço de tempo. Esta situação coloca uma forte pressão em suas equipes de teste, 
que são levadas a tentar aumentar a cobertura dos testes realizados sem comprometer os 
prazos de entrega do projeto. 
O emprego de ferramentas de apoio pode reduzir o esforço e aprimorar a qualidade 
do teste. Estas ferramentas não são suficientes para automatizar completamente o teste, mas 
podem auxiliar o testador na realização de diversas atividades. 
São exemplos de atividades de teste para as quais se encontram ferramentas de apoio: 
• Definição dos elementos requeridos para o teste: para as diversas técnicas são 
determinados elementos requeridos que podem servir de base para a criação de 
casos de teste; 
A …; 
A if (x > y * 2) 
B { … } 
C else 
C { … } 
D if (z > w) 
E { … } 
F else 
F { … } 
G …; 
 
A 
B C 
D 
E F 
G 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 25 
 
• Avaliação de cobertura atingida no teste e a identificação de elementos requeridos 
não exercitados: para as diversas técnicas são avaliados o nível de cobertura 
atingido (percentual de elementos requeridos exercitados) e os elementos requeridos 
ainda não exercitados. As ferramentas permitem quantificar a qualidade do teste; 
• Captura de eventos e de respostas do 
software: gravação e reprodução de 
informações do teste, tais como: dados de 
entrada, eventos de entrada, interfaces e 
informações mostradas; 
• Execução do teste: execução do software 
com um conjunto de casos de teste e a 
avaliação do resultado produzido. 
Ferramentas podem ser aplicadas tanto para 
o teste de unidade como para o teste de 
sistema; 
• Armazenamento e gerenciamento de informações de teste: manutenção de 
informações de teste – planos, projetos, scritps e casos de teste. Ferramentas 
permitem também o rastreamento de informações associando casos de teste aos 
requisitos do software a serem validados; 
• Armazenamento e gerenciamento de incidentes: registro de informações sobre 
incidentes ocorridos e acompanhamento da resolução; 
• Definição e gerenciamento do processo de teste: definição de aspectos do processo 
de teste como recursos, medidas, atividades e tarefas, e também o gerenciamento da 
execução do processo de teste. 
A adoção de um processo de teste para a organização (veja próximas seções) pode 
incluir a avaliação de quais tipos de ferramentas são adequadas aos objetivos estabelecidos 
para o teste. 
 
 
 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e ConceitosBásicos Página 26 
 
8 Processo e documentação do teste: como organizar o trabalho 
A adoção de um processo bem estabelecido para realizar as diversas atividades da 
engenharia de software contribui positivamente para que se alcance o objetivo pretendido. 
Um processo é um conjunto de passos parcialmente ordenados, constituídos por atividades, 
métodos, práticas e transformações, usado para atingir uma meta. A atividade de teste de 
software também deve ser conduzida por meio de um processo bem estabelecido. Um 
processo de teste de software é um conjunto de passos parcialmente ordenados constituídos 
por atividades, métodos e práticas, usadas para testar um produto de software. 
Um exemplo de modelo de processo de teste é o ArtProTest (“Artifact Oriented 
Process Model for Testing”) 12,13. Este modelo é baseado em artefatos de teste determinados 
na Norma IEEE Std 829-1998 14 e é formado por subprocessos, definidos e ordenados de 
forma a permitir que o teste seja eficiente e eficaz. 
No subprocesso Planejar é criado o Plano de Teste de Software, que contém, dentre 
outras informações: extensão e abordagem do teste; recursos necessários, equipe e 
treinamento, cronograma de atividades; ambiente operacional; itens a serem testados, o 
nível e abordagem de teste para cada item, atividades, tarefas e respectivos responsáveis, 
além de riscos e planos de contingência no teste. 
O subprocesso Projetar envolve: refinar a abordagem de teste, definir e especificar os 
casos de teste; estabelecer o ambiente e procedimentos de teste. 
O subprocesso Executar envolve: executar, registrar, suspender, retomar, parar, 
encerrar e tratar as contingências no teste. 
O subprocesso Registrar visa relatar a execução dos testes e os incidentes observados 
(defeito no software ou anomalia de funcionamento do ambiente). Também são 
sumarizados os resultados do teste e as avaliações baseadas nesses resultados. 
 
12
 Crespo, A. N.; Silva, O. J. ; Borges, C. A.; Salviano, C. F.; Argollo Junior, M. T. E.; Jino, M. “Uma 
Metodologia para Teste de Software no Contexto da Melhoria de Processo”. III Simpósio Brasileiro de 
Qualidade de Software, 2004. v. 3. p. 271-285. 
13
 Bueno, P.M.S., Crespo A.N., Jino, M., “Analysis of an Artifact Oriented Test Process Model and of Testing 
Aspects of CMMI”. In: 7th International Conference on Product Focused Software Process Improvement, 
Amsterdam., Lecturer Notes in Computer Science. Berlin: Springer-Verlag, 2006. v. 4034. p. 263-277. 
14
 IEEE Std 829 (1998), “IEEE Standard for Software Test Documentation”, IEEE, New York. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 27 
 
É importante destacar que existem diversas atividades associadas a cada subprocesso 
descrito anteriormente, que criam ou utilizam os artefatos que documentam o teste (plano 
de teste, projetos de teste, etc). A definição de como esta informação de teste deve ser 
estruturada em artefatos (isto é, a definição de “templates” de teste) é uma etapa importante 
da implantação de um processo de teste em uma organização. 
O processo de teste deve ser alinhado com o processo de desenvolvimento como um 
todo. Uma alternativa é organizar os subprocessos de teste considerando as principais fases 
do processo de desenvolvimento e associando a cada fase o nível de teste de software 
correspondente – unidades, integração, sistema e aceitação (Modelo V). As atividades de 
teste podem ser iniciadas junto com as atividades de desenvolvimento, logo que as 
informações necessárias estejam disponíveis. Neste caso, o planejamento do teste deve ser 
realizado junto com o planejamento do desenvolvimento, enquanto que o projeto do teste 
de aceitação pode ser iniciado logo que os requisitos do software tenham sido definidos. A 
execução de atividades de teste o mais cedo possível diminui as chances de que esta 
atividade seja feita de forma apressada no final do projeto, devido à necessidade de entregar 
o produto ao cliente. 
 Alguns modelos de processo de desenvolvimento de software, como o Espiral ou o 
RUP, definem iterações (ou ciclos) para o desenvolvimento do software. Ao invés da 
realização seqüencial das atividades de desenvolvimento do software, como no tradicional 
modelo “cascata” 15, são definidas iterações para o desenvolvimento e incrementos (ou 
releases) são associados a cada iteração. Cada incremento envolve a realização das 
atividades para: definição de requisitos, projeto, implementação, integração e testes. Nestes 
casos, as atividades de teste devem ser associadas às atividades de desenvolvimento em 
cada iteração, de modo que haja o adequado replanejamento, projeto, execução e registro 
dos testes. Recomenda-se realizar um planejamento global do teste junto com o 
planejamento do desenvolvimento. O teste final do sistema e o teste de aceitação são 
executados após o término da última iteração do processo de desenvolvimento. 
 
15
 Tipicamente, as atividades realizadas no modelo cascata são: análise de requisitos; projeto do software; 
implementação e teste de unidades; integração e teste de integração; teste de sistema; implantação e teste de 
aceitação. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 28 
 
Alguns modelos mais recentes enfatizam o projeto de testes e sua execução como um 
elemento central do desenvolvimento do software. A abordagem Desenvolvimento Baseado 
em Testes (ou TDD, sigla em inglês) é frequentemente adotada em métodos ágeis, como a 
Programação Extrema (XP). No TDD os casos de teste são criados pelos desenvolvedores 
antes mesmo que o código fonte seja criado. 
9 Análise de riscos: priorizar aspectos para o teste 
Em muitos casos o software em teste possui algumas partes (ou funcionalidades) nas quais 
a ocorrência de uma falha pode acarretar graves conseqüências a seus usuários, podendo 
impactar negativamente seus negócios e eventualmente até mesmo colocar a integridade de 
vidas humanas em risco. Por outro lado, o mesmo software pode possuir partes nas quais a 
ocorrência de falhas, embora não desejável, não seja crítica em termos dos negócios de seus 
usuários, impactando-os somente de forma marginal. 
Neste contexto, uma preocupação fundamental do 
teste é avaliar as funcionalidades do software que sejam 
mais importantes para o negócio de seus futuros 
usuários e propor e desenvolver atividades de teste que 
abordem com o devido cuidado essas áreas. Pensar nos 
testes com a perspectiva dos riscos que as falhas 
possam provocar é um aspecto importante para o 
sucesso do teste. 
A análise de riscos deve ocorrer no planejamento do teste e deve dar subsídios para a 
definição de tipos e técnicas de teste a serem utilizadas em cada parte do software, assim 
como o quão rigoroso deve ser o teste daquela parte do software. Em última análise, a 
consideração dos riscos envolvidos permite alocar os recursos de teste de uma maneira 
prudente, dosando o rigor e o esforço do teste de cada parte do software ao nível requerido 
de confiabilidade. 
 
 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 29 
 
10 Política e processo de teste: o papel do teste na estratégia da 
organização 
A definição de uma Política de Teste é fundamental para qualquer organização que 
pretende definir ou aprimorar as suas atividades de teste. Trata-se, portanto, de um primeiro 
passo importante que servirá de base para definição do processo de teste da organização. 
 A política de teste define, de maneira geral, os objetivos e a visão estratégica em 
relação ao teste. Portanto, deve estar alinhada com a política de qualidade e com os 
objetivos de negócios da organização. Ao se estabelecer uma visão comum sobre o teste 
para todos os envolvidos comesta atividade, obtém-se um alinhamento das iniciativas para 
a utilização ou melhoria do processo de teste, tanto no desenvolvimento como na 
manutenção de software. Recomenda-se, portanto, que a política de teste seja documentada, 
divulgada e tenha um responsável definido. 
A definição de indicadores associados aos objetivos do teste permite a avaliação e a 
melhoria contínua do processo de teste na organização. Tipicamente uma política de teste 
aborda: objetivos e importância do teste; níveis de qualidade a serem atingidos; nível de 
independência da equipe de teste; principais responsabilidades; definição em alto nível do 
processo de teste; e separação entre teste e depuração. 
A partir do momento em que se estabelece “o quê” as atividades de teste devem 
atingir na organização – a Política de Teste – pode-se trabalhar para definir “como” os 
objetivos serão atingidos. A definição do “como” dá-se pelo estabelecimento de um 
processo de teste. Modelos de processos genéricos de teste e modelos de maturidade de 
teste podem servir como inspiração nesta tarefa. 
Um modelo de processo genérico de teste, como é o descrito na Seção 8, pode ser 
adaptado às necessidades específicas de cada organização. Tal tipo de modelo define um 
conteúdo amplo em teste (formado por atividades, métodos, artefatos, etc.) que serve como 
base para o estabelecimento de processos customizados, fundamentados nas necessidades 
de teste específicas de cada organização. O termo Estratégia de Teste também é utilizado 
na literatura com significado semelhante, ou seja, atividades, métodos, artefatos de teste 
adotados por uma organização. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 30 
 
Modelos de maturidade de testes, tais como o Test Process Improvement (TPI) 16 ou 
o Test Maturity Model Integration (TMMi) 17, também podem ser utilizados para definir 
um processo de teste bem como para guiar a sua avaliação e melhoria. O TMMi é 
complementar ao modelo CMMI e aborda aspectos importantes para os gerentes e analistas 
de testes e demais profissionais de qualidade de software. Assim como o modelo em 
estágios do CMMI, o TMMi usa o conceito de níveis de maturidade para a avaliação e 
melhoria do processo de teste. 
A adoção de um processo de teste, feita por meio da customização de um modelo de 
processo genérico de teste, é referida como uma implantação ou configuração de um 
processo de teste na organização. Os modelos de processos genéricos de teste ou os 
modelos de maturidade do teste podem ser utilizados também para aprimorar, de forma 
controlada e gradual, um processo de teste já existente na organização. 
A implantação de um processo de teste deve ser feita de forma cuidadosa, por meio 
da análise das reais necessidades de teste e das possibilidades da organização. Fatores como 
tipo de software desenvolvido, requisitos de confiabilidade e segurança, bem como a 
disponibilidade de recursos humanos e financeiros da organização, devem ser levados em 
conta nesta implantação. Em geral, requisitos rigorosos de confiabilidade e segurança do 
software determinam a definição de processos de teste mais completos, contemplando 
vários níveis, tipos e técnicas de teste. Por outro lado, em muitos casos um processo “leve” 
– com poucos níveis e utilizando técnicas simples e documentando apenas o essencial – 
pode ser o suficiente. 
Processos de teste mais completos demandam um maior esforço por parte da 
organização, mas tendem a propiciar melhores produtos de software, além de evidências 
mais claras da qualidade do teste. 
 
 
 
16
 Koomen, T. and Pol M., (1999), “Test Process Improvement: A practical step-by step guide to structured 
testing”. ACM Press, London, England. 
17
 TMMi Foundation, “Test Maturity Model Integration (TMMi®) Version 2.0”, 2009. 
 Centro de Tecnologia da Informação Renato Archer – CTI/MCT 
 
Teste de Software: Motivação e Conceitos Básicos Página 31 
 
11 Conclusão: transformando conceitos de teste em melhores produtos 
de software 
Este documento apresentou um corpo de conhecimentos fundamentais em Teste de 
Software. O conteúdo foi abordado mais em extensão do que em profundidade, isto é, 
espera-se que o leitor tenha adquirido um conhecimento amplo dos vários aspectos das 
atividades de teste; entretanto, é necessário o aprofundamento nos assuntos específicos 
conforme o interesse e os objetivos específicos. 
Os guias e os tutoriais de teste (em elaboração) irão prover o aprofundamento em 
alguns aspectos tratados de forma rápida neste documento. A literatura específica de teste 
também pode ser útil para este intento. 
Espera-se que com a aplicação do conteúdo apresentado, os diversos atores 
envolvidos com as questões de qualidade e teste das mais diversas organizações possam 
definir ou aprimorar as suas práticas de teste. Em especial, espera-se que todos os 
participantes que compõem o ecossistema do SPB possam se beneficiar da aplicação deste 
conteúdo e também possam contribuir para o aprimoramento do conhecimento público de 
teste de software do SPB.

Outros materiais