Introdução 1
Teste Conjunto de atividades e técnicas relacionadas com a procura de erros em um programa 2 2
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. 3 3
Teste em Perspectiva Prova de teorema Análise estática Teste 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! 4 4
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. 5 5
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. 6 6
Citação de Dijkstra “Testing can never demonstrate the absence of errors in software, only their presence.” -- E.W.Dijkstra 7 7
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. 8 8
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: 9 9
Definição: Teste (artefato) 10101010 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] 10
Definição: Teste (artefato) 11111111 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] 11
Exemplo public class Customer { String getName() {…} } public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} 12
Exemplo public 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()); 13
Exemplo Entrada e resultado esperado: public class Customer { String getName() {…} } public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} Entrada e resultado esperado: Bank bank = Bank.createBank(); String name = “customer1“; Customer cust = bank.createCustomer(name); Assert.assertEquals(name, cust.getName()); 14
Exemplo Condições de execução: public class Customer { String getName() {…} } public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} Customer search(String name) {…} Condições de execução: 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()); } 15
Terminologia: Falta e Falha 16161616 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] 16
Quiz: Localize falta e falha 17171717 Quiz: Localize falta e falha // pre condicao: v != null public static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … } 17
Quiz: Localize falta e falha 18181818 Quiz: Localize falta e falha // pre condicao: v != null public static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … } defeito manifestação do defeito 18
Teste e Depuração Teste é atividade de localizar falhas! 19191919 Teste e Depuração Teste é atividade de localizar falhas! Depuração é atividade de localizar faltas! Teste e Depuração são atividades complementares 19
Teste e Depuração Teste é atividade de localizar falhas! 20202020 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 20
Teste de sort public class SortTest{ public static void main(String[] args) { sort(new int[]{}); }
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! 22
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 23 23
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. 24 24
Resumo desta aula Perspectiva Alguma terminologia 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 25 25
Enquete ant make JUnit3 JUnit4 26 26