Buscar

Teste de Software Estratégias de Teste de Software.

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 83 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 83 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 83 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

Teste de Software
Estratégias de Teste de Software
Prof. Daniel Silos
2011 – 1ª Edição
Introdução
• Integra métodos de projetos de casos de teste
em uma série bem planejada de passos
objetivando a construção bem-sucedida do
software.
• Fornece roteiro que descreve passos a serem
conduzidos como parte do teste:
– quando os passos são planejados e executados ?
– quanto de esforço, tempo e recursos são
necessários?
2
Introdução
• Qualquer estratégia deve incorporar:
– Planejamento de teste
– Projeto de casos de teste
– Execução e teste;
– Coleta e avaliação de dados (resultado).
3
Introdução
• Deve ser flexível – promover um
planejamento razoável e acompanhamento
gerencial ao projeto.
4
Uma Abordagem Estratégica
• Teste
– Conjunto de atividades que podem ser planejadas
antecipadamente e conduzidas sistematicamente;
– Deve ser definido um gabarito para o teste;
5
Estratégias (1/2)
• Algumas estratégias (que incluem gabarito)
apresentam algumas características genéricas:
- Teste efetivo – a equipe deve conduzir revisões
técnicas formais (erros serão eliminados antes do
teste).
- Teste começa no nível de componente e segue
“para fora”, em direção a integração de todo o
sistema.
6
Estratégias (2/2)
• Algumas estratégias (que incluem gabarito)
apresentam algumas características genéricas:
- Diferentes técnicas de teste são adequadas em
diferentes momentos.
- O teste é conduzido pelo desenvolvedor e (em
projetos grandes) por um grupo de teste
independente.
7
Teste Vs. Depuração
• São tarefas diferentes;
• A depuração deve ser acomodada em 
qualquer estratégia de teste de software;
8
Estratégia
• Deve adequar:
– Testes de baixo nível
• Verificar pequeno fragmento de código-fonte;
– Testes de nível alto
• Validam as principais funções do sistema com base nos
requisitos do cliente
9
Verificação e Validação
• O teste faz parte de um aspecto mais amplo
(V&V – Verificação e Validação).
• Verificação
– Conjunto de atividades que garante que o
software implementa corretamente uma função
específica.
• Validação
– Conjunto de atividades que garante que o
software construído corresponde aos requisitos
do cliente.
10
Verificação e Validação
• Segundo Boehm,
– Verificação: Estamos construindo o produto
corretamente?
– Validação – Estamos construindo o produto certo?
11
Verificação e Validação (1/2)
• A definição V & V engloba muitas das
atividades que são abrangidas pela garantia da
qualidade de software (SQA), que inclui:
• Revisões técnicas formais
• Auditoria de qualidade e configuração
• Monitoramento de desempenho
• Simulação
• Estudo de viabilidade
• Revisão da documentação
12
Verificação e Validação (2/2)
• A definição V & V engloba muitas das
atividades que são abrangidas pela garantia da
qualidade de software (SQA), que inclui:
• Revisão da base de dados
• Análise de algoritmos
• Teste de desenvolvimento
• Teste de usabilidade
• Teste de qualificação
• Teste de instalação
13
“Teste é uma parte inevitável de qualquer
esforço necessário para desenvolver um
sistema de software”
William Howden
14
Teste
• Último reduto no qual a qualidade pode ser
avaliada
• Não deve ser encarado como uma rede de
proteção
• Você não pode testar a qualidade. Se ela não
estiver lá antes de você começar a testar, não
estará lá quando o teste terminar.
• Deve ser utilizado para confirmar a qualidade
oriunda de aplicação de um processo de
Engenharia de Software.
15
Organização do Teste de Software
“Otimismo é o risco ocupacional da 
programação; teste é o tratamento.” 
Kent Beck
16
Ponto de vista psicológico
Análise
Projeto
Implementação
Tarefas 
Construtivas
Teste Tarefa Destrutiva
17
Enfoque do teste pelo Engenheiro
• Provar que o programa funciona.
• Acaba não focando na descoberta de erros.
• Infelizmente erros existirão e se ele não
encontrá-los, o cliente o fará.
18
Quem deve participar do teste ?
• Desenvolvedor
– É sempre responsável por testar unidades
individuais (componentes).
– Em muitos casos, também conduz testes de
integração (um passo que leva à construção (e
teste) da arquitetura completa do software.
• Grupo independente de Teste (Independent
Group Test – ITG)
– Se envolve no projeto após a arquitetura completa
do software ser completada.
19
Quem trabalha e como é o trabalho ?
• O Engenheiro de Software e o ITG trabalham
juntos para garantir a execução de testes
rigorosos;
• O Desenvolvedor deve estar disponível para
corrigir eventuais erros descobertos.
“O primeiro erro que o pessoal comete é pensar que
a equipe de teste é responsável pela garantia de
qualidade.”
Bryan Marich
20
Teste em arquitetura de softwares 
convencionais
21
Testes em arquiteturas orientadas a 
objetos (1/2)
• Apresentam um conjunto diferente de
desafios;
• Definição precisa ser ampliada para incluir
técnicas de descobrimentos de erros (por
exemplo, revisões técnicas formais) aplicada
em modelos de análise e projeto.
• Completeza e consistência de representações
OO precisam ser avaliadas à medida que são
construídas.
22
Testes em arquiteturas orientadas a 
objetos (2/2)
• Teste de unidade perde um tanto do seu
significado e estratégias de integração mudam
significativamente.
• Estratégias de Teste e Táticas de Teste
precisam levar em conta as características
singulares de softwares OO.
23
Critérios para completamento do teste
• Quando o teste é terminado, como saber se
ele foi suficiente?
– Não há uma resposta única;
– Algumas respostas pragmáticas:
• O teste nunca acaba, passa do engenheiro do software
para o seu cliente.
• O teste acaba quando o tempo acaba ou o dinheiro
acaba.
24
Critérios Estatísticos
• Musa & Ackerman
• Ex: 95% de confiança que a probabilidade de
mil horas de operação de CPU livre de falhas,
em um ambiente probabilisticamente
definido, é de pelo menos 0,995.
25
Tópicos Estratégicos (1/4)
• Tom Gilb enfatiza os seguintes tópicos na
implementação de uma estratégia de
software:
– Especificação dos requisitos do produto de um
modo quantificável muito antes do teste começar.
– Enunciar explicitamente os objetivos do teste.
– Entender os usuários do software e desenvolver
um perfil para cada categoria de usuário.
– Desenvolver um plano de teste que enfatiza “teste
de ciclo rápido”.
26
Tópicos Estratégicos (2/4)
• Tom Gilb enfatiza os seguintes tópicos na
implementação de uma estratégia de
software:
– Construir software “robusto”, projetado para
testar a si próprio (técnicas antidefeitos –
diagnóstico de certas classes de erros. O projeto
deve inserir automação de teste e teste de
regressão).
– Usar revisões técnicas formais como filtro antes
do teste.
27
Tópicos Estratégicos (3/4)
• Tom Gilb enfatiza os seguintes tópicos na
implementação de uma estratégia de
software:
– Conduzir revisões técnicas formais para avaliar a
estratégia de teste e os casos de teste
propriamente ditos.
– Desenvolver uma abordagem de aperfeiçoamento
contínuo para o processo de teste (Medição –
Utilização de métricas – abordagem estatística).
28
Tópicos Estratégicos (4/4)
“Testar apenas com base nos requisitos
perceptíveis ao usuário final é como
inspecionar um edifício com base no trabalho
feito pelo decorador de interiores, em
detrimento das fundações, da estrutura e dos
encanamentos.”
Boris Beizer
29
Estratégia – Software Convencional
• Teste de Unidade
– Componente ou módulo do software;
– Enfoca lógica interna de processamento e as
estruturas de dados dentro dos limites de um
componente.
– Pode ser conduzido em paralelo paraos diversos
componentes.
30
Considerações – Teste de unidade
• O que se testa?
– Interface;
– Estrutura lógica dos dados;
– Condições-limites;
– Caminhos independentes;
– Caminhos de manipulação de erros.
31
Considerações – Teste de unidade
• Erros mais comuns:
1. Precedência aritmética mal entendida ou
incorreta;
2. Operações em modo misto;
3. Inicialização incorreta;
4. Falta de precisão;
5. Representação incorreta de uma expressão
32
Considerações – Teste de unidade
• Erros mais comuns no cálculo:
1. Comparações de tipos de dados diferentes;
2. Operadores ou precedência lógica incorreta;
3. Expectativa de igualdade quando o erro de precisão
torna a igualdade improvável
4. Comparação incorreta de variáveis;
5. Terminação de ciclo inadequada ou inexistente;
6. Falha na saída quando iteração divergente é
encontrada;
7. Variáveis de ciclo inadequadamente modificadas.
33
Considerações – Teste de unidade
• Teste nos limites – uma das mais importantes tarefas;
• Entre os erros potenciais que devem ser testados
quando a manipulação de erros é avaliada estão:
1. A descrição do erro é intelegível;
2. O erro mencionado não corresponde ao erro
encontrado;
3. A condição de erro provoca a intervenção do sistema
antes da manipulação do erro;
4. O processamento da condição de exceção está incorreto;
ou
5. A descrição de erro não fornece informação suficiente
para ajudar na localização da causa do erro.
34
Procedimentos de teste de unidade
• É normalmente considerado um apêndice ao
passo de codificação.
• O projeto de teste de unidade pode ser
realizado antes da codificação ser iniciada
(abordagem ágil preferida) ou depois do
código ter sido gerado.
• Cada caso de teste deve ser relacionado a um
conjunto de resultados desejados.
35
Procedimentos de teste de unidade
• Um componente não é um programa isolado, portanto
há necessidade do desenvolvimento de softwares
pseudocontrolador (driver) e/ou pseudocontrolado
(stub) para cada teste de unidade.
• Pseudocontrolador vs. Pseudocontrolado
– Representam despesas indiretas – desenvolvidos mas não
entregues ao cliente.
– Se forem simples, as despesas são baixas.
– Se forem complexos, o teste do módulo pode ser adiado
para o teste integrado (onde haverá também a presença
de pseudocontrolados ou pseudocontroladores)
36
Procedimentos de teste de unidade
• O teste é simplificado quando um módulo de
alta coesão é projetado.
• Quando há apenas uma função por
componente, o número de casos de teste é
reduzido e os erros podem ser mais
facilmente previstos e descobertos.
37
Teste de Integração
• Se todos os módulos funcionam individualmente, por
que voltar a testá-los em conjunto?
• O problema é justamente colocá-los em conjunto –
interfaces.
– Dados podem ser perdidos através de uma interface; um
módulo pode ter efeito imprevisto ou adverso sobre outro;
– Subfunções, quando combinadas podem não produzir a
função principal desejada;
– Imprecisão aceitável individualmente pode ser amplificada
para níveis inaceitáveis;
– Estruturas de dados globais podem apresentar problemas.
38
Integração Descendente
• Também conhecido como top-down.
• É uma abordagem incremental para
construção da arquitetura de software.
• Os módulos são integrados movendo-se
descendentemente pela hierarquia de
controle, começando com o módulo de
controle principal (programa principal).
39
Integração Descendente
• Os módulos subordinados (e os subordinados
em última instância) ao módulo de controle
principal são incorporados à estrutura de
maneira primeiro-em-profundidade ou
primeiro-em-largura.
• Exemplos.
40
Processo de Integração
• Cinco passos:
1. O módulo de controle principal é usado como
pseudocontrolador do teste, e
pseudocontrolados são substituídos por todos os
componentes diretamente subordinados ao
módulo de controle principal.
2. Dependendo da abordagem de integração
selecionada, os pseudocontrolados
subordinados são substituídos, um de cada vez,
pelos componentes reais.
41
Processo de Integração
• Cinco passos:
3. Testes são conduzidos à medida que cada
componente é integrado.
4. Ao término de cada conjunto de testes, outro
pseudocontrolado é substituído pelo
componente real.
5. O teste de regressão pode ser realizado para
garantir que novos erros não tenham sido
introduzidos.
42
Principal problema logístico
• Quando o processamento nos níveis baixos da
hierarquia é necessário para testar adequadamente os
níveis superiores. Pseudocontrolados ficam no lugar
dos módulos de baixo nível, no início do teste
descendente, assim, nenhum dado significativo pode
fluir para cima na estrutura do programa. O testador
fica com três escolhas:
1. Adiar muitos testes, até que pseudocontrolados sejam
substituídos pelos módulos reais;
2. Desenvolver pseudocontrolados que realizam funções
limitadas, simulando o módulo real; ou
3. Integrar o software de baixo para cima, na hierarquia.
• Vantagens e Desvantagens.
43
Integração Ascendente
• Também chamado de Bottom-Up.
• Inicia a construção e teste de módulos 
atômicos (por exemplo, componentes nos 
níveis mais baixos da estrutura do programa).
• A necessidade de pseudocontrolados é 
eliminada.
44
Integração Ascendente
• Pode ser implementada com os seguintes passos:
1. Componentes de baixo nível são combinados em
agregados (clusters ou construções), que realizam
uma subfunção específica do software.
2. Um pseudocontrolador (driver, um programa de
controle para teste) é escrito para gerenciar a
entrada e saída do caso de teste.
3. O agregado é testado.
4. Pseudocontroladores são removidos e agregados
são combinados movendo-se para cima na estrutura
do programa.
45
Teste de Regressão
• Cada vez que um novo módulo é adicionado
como parte do teste de integração, o software
se modifica.
• Teste de regressão é a reexecução de algum
subconjunto de testes já conduzidos para
garantir que tais modificações não tragam
efeitos colaterais indesejados.
• Pode ser feito manualmente ou através de
uma ferramenta automatizada.
46
Teste de Regressão
• A suíte de teste de regressão possui três
diferentes classes:
– Uma amostra representativa de testes que vão
exercitar todas as funções do software;
– Testes adicionais que focalizam funções do
software, que serão provavelmente afetadas pela
modificação;
– Testes que focalizam os componentes de software
que foram modificados.
47
Teste fumaça
• Abordagem de teste de integração;
• Comumente utilizada quando os produtos de
software estão sendo desenvolvidos;
• É projetado como mecanismo marca-passo
para projetos de prazo crítico.
48
Teste fumaça
• Em essência, abrange as seguintes atividades:
1. Componentes de software que foram traduzidos
para código são integrados em uma
“construção”. Uma construção inclui todos os
arquivos de dados, bibliotecas, módulos
reusáveis e componentes submetidos a
engenharia, que são necessários para
implementar uma ou mais funções do produto.
49
Teste fumaça
2. Uma série de testes é projetada para expor erros
que impeçam a construção de desempenhar
adequadamente a sua função. O propósito deve
ser descobrir erros “bloqueadores” (show
stopper) que têm a maior probabilidade de
colocar o projeto de software fora do
cronograma.
3. A construção é integrada com outras construções
e o produto inteiro (na sua forma atual) passa
pelo teste fumaça diariamente. A abordagem de
integração pode ser ascendente e descendente.
50
Teste fumaça
“O teste fumaça deve exercitar o sistema 
inteiro de ponta a ponta. Ele não precisa ser 
exaustivo, mas deve ser capaz de expor os 
problemas principais. Deve ser suficientementerigoroso para que, se a construção passar, possa 
ser assumido que ela é suficientemente estável 
para ser testada mais rigorosamente. 
McConnell
51
Teste fumaça
• Vantagens de sua aplicação em projetos
complexos de prazo crítico:
– O risco de integração é minimizado;
– A qualidade do produto final é aperfeiçoada
(erros funcionais e defeitos de projeto
arquitetural e no nível do componente –
corrigidos logo no início);
– Diagnóstigo e correção de erros são
simplificados;
– Progresso é fácil de avaliar.
52
Opções Estratégicas
• Discussões sobre vantagens e desvantagens do teste de
integração ascendentes versus descendentes;
• Estratégia combinada (teste sanduíche);
– Usa testes descendentes para os níveis mais altos da
estrutura, acoplada com testes ascendentes para os níveis
subordinados.
– Identificação de módulos críticos (aborda vários requisitos
do software, tem um alto nível de controle, é complexo ou
propenso a erro ou tem requisitos de desempenho bem
definidos).
– Módulos Críticos devem ser testados tão cedo quanto
possível.
– Testes de regressão devem focalizar função de módulo
crítico.
53
Documentação do teste de integração
• Plano global para integração e descrição dos
testes específicos são documentados em uma
Especificação de Teste.
• O plano de teste descreve a estratégia global
de integração.
• O teste é dividido em fases e construções que
tratam de características funcionais e
comportamentais específicas do software.
54
Estratégias para Software OO
• Teste de unidade no contexto de OO
– O conceito de unidade se modifica.
– O encapsulamento guia a definição de classes e
objeto (cada classe e cada instância empacotam
atributos e métodos que manipulam os atributos).
– Apesar de uma unidade encapsulada ser o foco de
um teste de unidade, um módulo é diferente de
uma classe.
– Superclasses e subclasses.
55
Estratégias para Software OO
• Teste de unidade no contexto de OO
– O teste de classe para o software OO é o
equivalente ao teste de unidade para o software
convencional.
56
Estratégias para Software OO
• Teste de integração no contexto de OO
– Software OO - Sem estrutura óbvia de controle
hierárquico (estratégias ascendentes e
descendentes perdem seus significados);
– Duas Estratégias:
1. Teste baseado no caminho de execução (thread-
based testing)
2. Teste baseado no uso (use-based testing)
57
Estratégias para Software OO
1. Teste baseado no caminho de execução (thread-
based testing)
• integra o conjunto de classes necessárias para
responder a uma entrada ou um evento do sistema.
• Cada caminho de execução é integrado e testado
individualmente.
• Teste de regressão é aplicado (garantia da não
ocorrência de efeito colateral).
58
Estratégias para Software OO
2. Teste baseado no uso (use-based testing)
• Começa a construção testando as classes
independentes (usam muito, poucas ou não usam
classes servidoras).
• Segue testando a camada seguinte (classes
dependentes), que utilizam as classes
independentes.
59
Estratégias para Software OO
2. Pseudocontroladores e Pseudocontrolados
• Pseudocontroladores
– Podem ser usados para testar operações no mais baixo
nível e para testar grupos inteiros de classes.
– Também pode ser utilizado para substituir a interface com
o usuário de modo que testes da funcionalidade do sistema
possam ser conduzidos antes da implementação da
interface.
60
Estratégias para Software OO
– Teste Agregado
• É outra etapa para software Orientado a Objetos;
• Reuni um conjunto de classes colaboradoras e casos
de testes são projetados objetivando-se encontrar
erros nas colaborações.
61
Teste de Validação
• Inicia-se ao final do teste de integração;
• Não há diferenças em softwares orientados a
objetos e convencionais.
• Foco nas ações visíveis ao usuário e saídas do
sistema reconhecidas pelo usuário.
62
Teste de Validação
• Critérios de Teste de Validação
– Validação
• série de testes que demonstram conformidade com os requisitos.
– Plano de teste
• classes de testes a serem conduzidas.
– Procedimento de teste
• casos de testes específicos.
– Condições após os testes
• Teste ok ou descoberto desvio da especificação e uma lista de
deficiências é criada.
– Detalhes das correções
63
Teste de Validação
• Revisão da Configuração
– Garantir que todos elementos da configuração de
software tenham sido adequadamente
desenvolvidos, estejam catalogados e tenham os
detalhes necessários para apoiar a fase de suporte
do ciclo de vida do software.
– Algumas vezes é chamada de auditoria.
64
Teste de Validação
• Testes Alfa e Beta
– Ideal quando o produto é destinado a vários
clientes.
– Realizado pelo usuário final.
65
Teste de Sistema
• Não são conduzidos apenas por engenheiros
de software.
• Série de diferentes testes cuja finalidade
principal é exercitar por completo o software.
• Inclui testes de integração e validação.
• Busca verificar o funcionamento correto do
software quando outros elementos são
inseridos (pessoas, hardware, informações,
etc.).
66
Teste de Sistema
• Teste de Recuperação
– Muitos sistemas devem se recuperar de falhas e
retornar o processamento dentro de um tempo
pré-determinado.
– Em outras ocasiões, o sistema deve ser tolerante a
falhas (falhas de processamento não devem
interromper a função global do sistema).
– Em outras situações, uma falha do sistema precisa
ser corrigida dentro de um período de tempo
especificado (risco de prejuízo econômico).
67
Teste de Sistema
• Teste de Recuperação
– Força o software a falhar de diversos modos e verifica
se recuperação é adequadamente realizada.
– Se for automática, a reinicialização, os mecanismos de
verificação, a recuperação dos dados e o reinício são
avaliados quanto à correção.
– Se requer intervenção humana, o tempo médio para
reparo (mean-time-to-repair, MTTR) é avaliado para
determinar se está dentro de limites aceitáveis.
68
Teste de Sistema
• Teste de Segurança
– Hackers, empregados descontentes e vingativos,
indivíduos desonestos são alguns exemplos de
pessoas que podem tentar invadir o sistema,
descobrir a senha de um funcionário, etc.
– O teste verifica se os mecanismos de proteção
incorporados a um sistema vão de fato protegê-lo de
invasão.
– O papel do projetista do sistema é tornar o custo da
invasão maior do que o valor da informação que será
obtida.
69
Teste de Sistema
• Teste de Estresse
– Projetados para submeter programas a situações
anormais.
– “Quanto podemos judiar do sistema até que ele
falhe?”
– O teste executa um sistema que demanda
recursos em quantidade, frequencia ou volume
anormais.
– Teste de sensibilidade (comuns a algoritmos
matemáticos).
70
Teste de Sistema
• Teste de Desempenho
– Sistemas de tempo real e embutidos
(embarcados).
– Testa o desempenho durante a execução, no
contexto de um sistema integrado.
– Frequentemente acoplado ao teste de estresse e
geralmente requer medição tanto do hardware
quanto do software (ex: ciclos de processador /
interrupções).
71
Depuração
• Ocorre como consequência de teste bem
sucedido (descoberta de erro);
• É a ação que resulta na reparação do erro.
• Pode e deve ser um processo ordenado, mas
ainda é excessivamente uma arte.
72
Depuração
• O processo de depuração
– Não é teste, mas sempre ocorre como
consequência deste.
– Apresenta dois possíveis resultados:
1. A causa é encontrada e corrigida;
2. A causa não é encontrada.
73
Depuração
• O processo de depuração
– Por que é tão difícil?
1. O sintoma e a causa podem ser geograficamente
remotos;
2. O sintoma pode desaparecer (temporariamente)quando outro erro é corrigido;
3. O sintoma pode ser causado por não-erros (ex:
imprecisões de arredondamento).
4. O sintoma pode ser causado por erro humano (difícil
de rastrear).
74
Depuração
• O processo de depuração
– Por que é tão difícil?
5. O sintoma pode ser resultado de problema de tempo (não
de processamento);
6. Pode ser difícil reproduzir precisamente condições de
entrada (aplicação em tempo real na qual a ordem das
entradas é indeterminada);
7. O sintoma pode ser intermitente. Isso é particularmente
comum em sistemas embutidos.
8. O sistema pode ser devido a causas que estão distribuídas
em várias tarefas sendo executadas em diferentes
processadores.
75
Depuração
• Abordagens de Depuração
“A depuração é uma aplicação direta do método
científico que foi desenvolvido durante 2.500
anos. A base da depuração é localizar a fonte
do problema [a causa] por particionamento
binário, por meio de hipóteses de trabalho que
prevêem novos valores a serem examinados.”
Bradley, J.H.
76
Depuração
• Abordagens de Depuração
– Três estratégias:
1. Força bruta
2. Rastreamento;
3. Eliminação de causa.
77
Depuração
• Táticas de Depuração
– Força Bruta
• mais comum e menos eficiente para isolar a causa de
um erro de software. É aplicado quando tudo mais
falha.
– Rastreamento
• Abordagem comum que pode ser utilizada em
programas pequenos. Começando no lugar em que um
sintoma foi descoberto, o código-fonte é rastreado
(manualmente) até que o lugar da causa seja
encontrado.
78
Depuração
• Táticas de Depuração
– Eliminação de causa.
• É manifestada por indução ou dedução e introduz o conceito
de particionamento binário. Os dados relacionados à
ocorrência do erro são organizados para isolar causas em
potencial. Uma “hipótese de causa” é concebida e os dados
mencionados são usados para provar ou rejeitar a hipótese.
Alternativamente, uma lista de todas as causas possíveis é
desenvolvida e são conduzidos teste para eliminar cada uma.
Se os testes iniciais indicam que uma hipótese particular de
causa é promissora, os dados são refinados em uma
tentativa de isolar o defeito.
79
Depuração
• Depuração automatizada
– Qualquer abordagem de depuração pode ser
complementada com ferramentas de depuração;
– Fornecem apoio semi-automático para o
Engenheiro de Software.
80
Depuração
• O fator pessoal
– Auxílio de outras pessoas.
– Novo ponto de vista.
– “Quando tudo mais falha, busque ajuda!”.
81
Correção do Erro
• Ume vez encontrado o defeito, o mesmo precisa
ser corrigido.
• A correção de um defeito pode gerar outros erros
e fazer mais mal do que bem.
• Perguntas importantes que devem ser feitas:
1. A causa do defeito está reproduzida em outra parte
do programa?
2. Qual o “próximo defeito” que pode ser introduzido
pelo conserto que estou prestes a fazer?
3. O que poderíamos ter feito para prevenir a
ocorrência desse defeito?
82
Referência
• Capítulo 13 – Engenharia de Software – Roger 
Pressman – McGraw Hill – 6ª Edição.
83

Outros materiais