teste de software 01: introdução marcelo damorim [email protected]
TRANSCRIPT
2
Resumo desta aula
• Perspectiva– Provar corretude ou encontrar erros?
• Alguma terminologia– Caso de teste, suite de teste, falha, defeitos,
depuração, etc.
• Dados estatísticos sobre a área
3
Perspectiva:Métodos Formais e Informais
• Prova de teorema– Prova propriedades complexas, mas requer
muito esforço humano.
• Análise estática (interpretação abstrata)– Prova propriedades simples; pode apresentar
alarmes falso. Mas é automático.
• Teste– Não prova corretude e não é automático!
4
Perspectiva:Métodos Formais e Informais
• “Testing can never demonstrate the absence of errors in software, only their presence.” -- E.W.Dijkstra
5
Perspectiva:Métodos Formais e Informais
• “Testing can never demonstrate the absence of errors in software, only their presence.” -- E.W.Dijkstra
Principal limitação de testes é incompletude: é possível que teste não encontre um erro latente.
6
Perspectiva:Métodos Formais e Informais
• “Testing can never demonstrate the absence of errors in software, only their presence.” -- E.W.Dijkstra
• Apesar disto, testes também é:– Simples de implantar– Documenta intenções e designs, e– É eficaz em encontrar erros. Inclusive, erros complexos como
memory leakage e deadlock
Principal limitação de testes é incompletude: é possível que teste não encontre um erro latente.
7
• "Beware of bugs in the above code; I have only proved it correct, not tried it." -- Donald Knuth
9
O que é um teste?
• “A set of test inputs, execution conditions, and expected results developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement” [IEEE, do178b]
10
O que é um teste?
• “A set of test inputs, execution conditions, and expected results developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement” [IEEE, do178b]
11
O que é um teste?
• “A set of test inputs, execution conditions, and expected results developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement” [IEEE, do178b]
12
Partes de um (caso de) teste
• “Test inputs” = dados de entrada
• “Execution conditions” = precondições
• “Expected results” (oracle) = resultado esperado (oráculo)
14
Estrutura de um teste
• Exemplo: caixa eletrônico
• Cenário: saque de dinheiro
• Teste: Inserir cartãoConfirmar se leu corretamenteInformar senhaConfirmar se válidaInterromper se opção saque indisponível Informar opção de saque Informar valor de saqueRetirar dinheiroConferir dinheiro
15
Estrutura de um teste
• Exemplo: caixa eletrônico
• Cenário: saque de dinheiro
• Teste:
Inserir cartãoConfirmar se leu corretamenteInformar senhaConfirmar se válidaInterromper se opção saque indisponível Informar opção de saque Informar valor de saqueRetirar dinheiroConferir dinheiro
ENTRADA
CONDIÇÃO
RESULTADO ESPERADO
16
Suíte de teste
• Definição: conjunto de casos de testes
• Em geral, relacionado a módulo do sistema
• Exemplo: suíte de regressão
17
comum: rodar teste de regressão ao final de cada dia de desenvolvimento
continuous testing: rodar teste de regressão a medida que mudanças aparecem
impact analysis: rodar apenas os testes afetados por mudanças no código
18
Terminologia
• IEEE STD. 982.2-1988 (http://standards.ieee.org/)– Fault ou bug (defeito)
• problema
– Failure (erro)• manifestação do problema
• Mais detalhes– Software Metrics and Reliability [Rosenberg
et al., ISSRE’98]
19
Terminologia
• IEEE STD. 982.2-1988 (http://standards.ieee.org/)– Fault or bug (defeito)
• problema
– Failure (erro)• manifestação do problema
• Mais detalhes– Software Metrics and Reliability [Rosenberg
et al., ISSRE’98]
CAUSA
EFEITO
20
Exemplo
// pre condicao: v != nullpublic static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … }}
21
Exemplo
// pre condicao: v != nullpublic static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … }} CAUSA
EFEITO
22
Teste e Depuração
• Teste é atividade de localizar erros!
• Depuração é atividade de localizar bugs!
• Exemplo– sort(new int[]{});
23
Terminologia
• IEEE STD. 982.2-1988 (http://standards.ieee.org/)– Fault or bug (defeito)
• problema
– Failure (erro)• manifestação do problema
• Mais detalhes– Software Metrics and Reliability [Rosenberg
et al., ISSRE’98]Teste procura por manifestações de um problema
25
Inspeção
• Forma-se uma equipe para identificar defeitos e chegar a um consenso
• Qualquer artefato pode ser alvo de inspeção
• Exemplo– Walkthrough (forma de code peer review)
26
Teste x Depuração x Inpeção
• Teste e Depuração são atividades ortogonais
• Inspeção– Manual (necessariamente)– Complementar à teste e depuração
27
Alguns dados estatísticos
• Entre 70 e 80% do custo de desenvolvimento de software envolve atividades de teste e depuração --
National Institute of Standards and Technology (NIST) 2002.
28
Alguns dados estatísticos
• Gartner Group estimou em 2006 que o mercado mundial de teste de software é de $13bi. e o tamanho do mercado global de serviços é em torno de $6.1bi. -- www.expresscomputeronline.com
29
Resumo desta aula
• Perspectiva– Provar corretude ou encontrar erros?
• Alguma terminologia– Caso de teste, suíte de teste, falha, defeitos,
depuração, etc.
• Dados estatísticos sobre a área