Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um...
-
Upload
joao-gabriel-costa-tavares -
Category
Documents
-
view
212 -
download
0
Transcript of Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um...
![Page 1: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/1.jpg)
Introdução
![Page 2: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/2.jpg)
2
Teste
• Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa
![Page 3: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/3.jpg)
3
Teste
• Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa
Testes procura erros em conjunto de possíveis execuções do programa.
![Page 4: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/4.jpg)
4
Teste em Perspectiva
• Prova de teorema– Prova propriedades complexas, mas requer
muito esforço humano.• Análise estática
– Prova propriedades simples; pode apresentar alarmes falso. Mas é automático.
• Teste– Não prova corretude e não é inteiramente
automático!
![Page 5: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/5.jpg)
5
Limitações de Prova de Teorema
• Requer conhecimento de um expert• Processo manual
– tedioso e passível de erro
Nota: prova por refinamento não é técnica de verificação! É uma disciplina de prova para melhorar produtividade.
![Page 6: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/6.jpg)
6
Limitações de Análise Estática
• Provar propriedades de forma automática é, em geral, indecidível!
• Eficaz apenas quando– Propriedades de verificação são simples
• Variáveis não inicializadas, erros de tipo, etc.– Programas (/ modelos) são simples
• Ausência de loop e recursão, ausência de heap, etc.
![Page 7: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/7.jpg)
7
Citação de Dijkstra
• “Testing can never demonstrate the absence of errors in software, only their presence.” -- E.W.Dijkstra
![Page 8: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/8.jpg)
8
Citação de Dijkstra
• “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.
![Page 9: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/9.jpg)
9
Testes é incompleto, porém...
• Rápida implantação• Documenta intenções e designs• Capaz de encontrar erros complexos em
programas complexos–Erros complexos: memory leak, deadlock–Programas complexos:
![Page 10: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/10.jpg)
Definição: Teste (artefato)
• “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]
![Page 11: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/11.jpg)
Definição: Teste (artefato)
• “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]
![Page 12: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/12.jpg)
Exemplopublic class Customer { String getName() {…} }public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} }
![Page 13: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/13.jpg)
Exemplopublic class Customer { String getName() {…} }public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} }
Bank bank = Bank.createBank();String name = “customer1“;Customer cust = bank.createCustomer(name);Assert.assertEquals(name, cust.getName());
![Page 14: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/14.jpg)
Exemplopublic class Customer { String getName() {…} }public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} }
Bank bank = Bank.createBank();String name = “customer1“;Customer cust = bank.createCustomer(name);Assert.assertEquals(name, cust.getName());
Entrada e resultado esperado:
![Page 15: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/15.jpg)
Exemplopublic class Customer { String getName() {…} }public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} Customer search(String name) {…}}
Bank bank = Bank.createBank();String name = “customer1“;Customer cust = bank.search(name);if (cust == null) { Customer cust = bank.createCustomer(name); Assert.assertEquals(name, cust.getName());}
Condições de execução:
![Page 16: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/16.jpg)
Terminologia: Falta e Falha
• IEEE STD. 982.2-1988 (http://standards.ieee.org/)– Fault (falta, bug ou defeito): problema– Failure (falha, ou erro): manifestação do
problema• Mais detalhes…
– Software Metrics and Reliability [Rosenberg et al., ISSRE’98]
![Page 17: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/17.jpg)
Quiz: Localize falta e falha
// pre condicao: v != nullpublic static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … }}
![Page 18: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/18.jpg)
Quiz: Localize falta e falha
// pre condicao: v != nullpublic static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … }} defeito
manifestação do defeito
![Page 19: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/19.jpg)
Teste e Depuração Teste é atividade de localizar falhas! Depuração é atividade de localizar faltas!
Teste e Depuração são atividades complementares
![Page 20: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/20.jpg)
Teste e Depuração Teste é atividade de localizar falhas! Depuração é atividade de localizar faltas! No exemplo anterior:
Atividade de teste localiza erro no uso de v[i] no corpo do loop de sort.
Depuração localiza o defeito na condição de parada do loop i <= v.length
![Page 21: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/21.jpg)
Teste de sort
public class SortTest{ public static void main(String[] args) { sort(new int[]{}); }}
![Page 22: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/22.jpg)
Terminologia: suíte e regressão
• Suíte de testes é o mesmo que conjunto de testes
• Regressão é o evento de uma falha em um teste que costumava passar
Rodar continuamente a suíte de regressão ajuda a antecipar correção de bugs!
![Page 23: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/23.jpg)
23
Alguns dados estatísticos (1)
• Beizer [1990] estimou que testes toma 30% a 90% do custo de desenvolvimento
• Santhanan and Hailpern [2002] relata que de 50 a 75% do custo de desenvolvimento envolve teste e depuração
![Page 24: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/24.jpg)
24
Alguns dados estatísticos (2)
• O instituto americano de padrões e tecnologia (NIST) [2002] estima que $59.2bi é o custo da infra-estrutura inadequada de teste.
![Page 25: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/25.jpg)
25
Resumo desta aula
• Perspectiva– Provar corretude ou encontrar erros?
• Alguma terminologia– Caso de teste, suíte de teste, regressão, falha,
defeitos, depuração, etc.• Dados estatísticos sobre a área
![Page 26: Introdução. 2 Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa.](https://reader036.fdocumentos.com/reader036/viewer/2022070508/5706386b1a28abb823904973/html5/thumbnails/26.jpg)
26
Enquete
• ant• make• JUnit3 • JUnit4