Processo de teste
Fundamentos de teste
Estratégias de teste
Níveis de teste
Depuração
Princípios de teste
Sumário
108
teste de unidade teste de integração
teste de validação/ aceitação
teste de sistema
O modelo V
especificar requisitos projetar codificar revisar especificação revisar projeto revisar código testes de especificar testes de integração especificar e projetar codificar testes de sistema especificar e projetar codificar revisar plano de teste de unidade executar teste de unidade executar teste de integração revisar plano de teste de integração revisar plano de teste de sistema executar teste de sistemaTestes de unidade
Uma unidade é o menor componente
testável de software
função, método, classe, objeto
Objetivo principal do teste de unidade é
garantir que cada unidade funciona de
acordo com sua especificação
Testes de unidade
devem ser planejados e seus resultados
devem ser relatados e se tornarem públicos
devem prever casos de testes que sejam
projetados seguindo ambas estratégias
(caixa preta e caixa branca)
devem ser realizados por uma pessoa
diferente do desenvolvedor
os resultados e defeitos encontrados devem
ser armazenados
Tarefas de preparação para testes de
unidade
Planejar a abordagem geral dos testes de
unidade
Projetar os casos de testes e os
procedimentos de teste
Definir relações entre os testes
Preparar o código auxiliar necessário para o
teste
unidade
stub stub
driver
casos de teste
Execução de testes de unidade
após a execução, armazenar e analisar resultados
detectar se o teste produziu a saída esperada ou não
em caso negativo armazenar o acontecido em um relatório de incidentes de teste
causas do teste não produzir a saída esperada
defeitos na implementação da unidade,
falhas na especificação do caso de teste (a entrada ou saída não foi especificada corretamente),
falhas na execução do procedimento de teste,
falha no ambiente de teste,
falha no desenho da unidade (o código reflete a especificação do desenho mas a especificação está incorreta)
Testes de Integração
Objetivos principais
detectar defeitos que ocorrem nas interfaces das unidades
montar subsistemas compostos das unidades individuais até chegar a um sistema completo que pode ser exercitado através dos testes de sistema
Estratégias de integração
O processo de testes de integração deve
ocorrer iterativamente e incrementalmente
módulo raiz é testado com stubs
stubs são trocados pelos módulos reais, um de cada vez, seguindo o critério da profundidade ou amplitude
a medida que novos módulos são integrados testes de regressão são executados.
A B C D E F G
Integração top-down
drivers são removidos uma vez que o teste do subsistema é feito
módulos são integrados usando um driver A B C D E F G subsistema
Integração bottom-up
Integrando classes
Classe 1 Método a Método b Classe 2 Método d Método h Classe 3 Método c Método g Classe 4 Método e Método f Mensagem 1 Cluster A Mensagem de entrada Mensagem de saída Mensagem 2 Mensagem 3 Mensagem 4Testes de sistema
Objetivo:
garantir que o sistema funciona de acordo com seus requisitos funcionais e de qualidade
(confiabilidade, usabilidade, desempenho, etc)
Tipos de defeitos que são detectados com
teste de sistema:
condições de corrida, deadlock, uso ineficiente de memória
Tipos de teste de sistema
Documentos de requisitos Sistema de software integrado Sistema pronto Testesfuncionais Testes destress e carga Testes desegurança Testes deconfiguração Testes dedesempenho
Testes aprovados Testes de recuperação Testes de sistema Perfil de uso Manuais do usuário
Teste de Ambiente e Arquitetura
Teste de GUIs (Graphical User Interface)Padronização
Automatização
Complexidade
Teste de arquitetura cliente/servidor
Performance
Complexidade de rede
Teste de Documentação
Tipos Revisão e inspeção Teste “vivo” Precisão Exemplificação Coerência Facilidade de uso Resolução de problemas Formatação Mensagens de erro NavegaçãoTestes de aceitação
Objetivo:
permitir aos usuários e clientes avaliarem o software com relação as suas expectativas e objetivos
Os testes de aceitação
são baseados
nos requisitos do sistema
no manual do usuário do sistema
devem ser executados
sob condições reais de operação por várias horas ou dias submetendo entradas típicas e ilegais.
Testes de regressão
Objetivo:
retestar o software quando alguma mudança for feita para garantir que a nova versão do
software não possui nenhum defeito acrescentado durante a mudança.
Teste de regressão
pode acontecer em qualquer um dos níveis
importante se várias versões de um mesmo sistema são desenvolvidas
Documentação de testes
Plano de teste
especificação dos casos de teste
especificação dos procedimentos de teste
Relatórios de teste
log dos testes
contém tudo que foi feito
incidentes de testes
eventos que merecem investigação
podem ou não revelar defeitos
resumo de testes
avaliação da eficácia dos testes
Componentes de um plano de teste
identificador itens a testar aspectos a testar abordagem critérios de completeza e sucesso critérios de suspensão e retomada resultados (relatórios) tarefas de teste ambiente de teste responsabilidades agenda riscos e contingências custos aprovação anexos casos de testeProcesso de teste
Fundamentos de teste
Estratégias de teste
Níveis de teste
Depuração
Princípios de teste
Sumário
Depuração: um processo de
diagnóstico
casos de teste resultados Depuração causas suspeitas causas identificadas correções testes de regressão novos casos de teste
O processo de depuração
tempo requerido para diagnosticar o sintoma e determinar a causa tempo requerido para corrigir um erro e conduzir testes de regressão
O esforço de depuração
sintoma
causa
o sintoma e a causa podem estar geograficamente separados
o sintoma pode desaparecer quando um outro problema é consertado
a causa pode ser uma combinação de fatores que não são erros
a causa pode ser devido a um erro de sistema ou de compilador
a causa pode ser devido a uma
premissa errada que todos acreditam
o sintoma pode ser intermitente
Depuração: sugestões
Não saia fazendo tudo que der na cabeça,
pense sobre o sintoma
Use ferramentas (por exemplo, um
debugger) para obter um entendimento
maior
Se ficar agarrado, peça ajuda a outra
pessoa
Faça testes de regressão quando você
“consertar” o erro
Processo de teste
Fundamentos de teste
Estratégias de teste
Níveis de teste
Depuração
Princípios de teste
Sumário
Princípios de teste
Uma parte necessária na definição de um caso de teste é a saída ou resultado esperado.
Um programador não é a pessoa mais indicada para testar seus próprios programas
ele deve testar o suficiente para garantir que seu programa faz o que se espera
porém em geral não é capaz de ter uma atitude destrutiva após ter uma atitude construtiva
Casos de testes devem ser escritos para condições de entrada inválidas, inesperadas e também para
Princípios de teste
Um bom caso de testes é aquele que tem alta probabilidade de revelar defeitos.
Não planeje a atividade de teste assumindo que erros não serão encontrados.
Evitar casos de testes descartáveis.
testes devem ser reutilizáveis e repetíveis
Testes devem ser planejados
Atividades de testes devem ser integradas ao ciclo de vida de desenvolvimento e manutenção de
Princípios de teste
Examinar um programa para ver se ele faz
o que é esperado é apenas metade da
atividade. A outra metade é verificar se ele
não faz o que não deveria fazer.
A probabilidade da existência de mais erros
em uma seção do programa é proporcional
ao números de erros que já foram
Princípios de teste
O PARADOXO DO PESTICIDA
A Lei de Darwin ao universo dos testes. Um novo
inseticida afasta os insetos até o momento em que aparece uma variante que não é afetada pelo
princípio ativo e eles voltam a incomodar. Da
mesma maneira, um sistema será cada vez mais resistente ao mesmo conjunto de testes executado diversas vezes.
Princípios de teste
A FALÁCIA DA AUSÊNCIA DE ERROS
De nada adianta eliminar um grande número de defeitos se os testes não foram projetados com
foco nas necessidades do negócio. Em casos como este, os testes só terão contribuído para fazer com que o sistema funcione perfeitamente da maneira que o cliente NÃO precisa.
Bibliografia
BURNSTEIN, Ilene. Practical software
testing, a process-oriented approach.
Springer, 2003
MYERS, Glenford. The art of software
testing, John Willwey & Sons, 1979
capítulos 1 e 2