Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução ao Teste de Software Parte 1 Prof. André Takeshi Endo Verificação e Validação ● Como atingir qualidade**? – Conquista passo-a-passo – Aplicação de atividades de V&V **Não entrar na discussão do que é qualidade! Ver disciplina “Qualidade de Software” Verificação e Validação ● Garantia de qualidade ● Atividades de V&V objetivam minimizar a ocorrência de defeitos e riscos associados ● Detectar a presença de defeitos nos artefatos de software – Exemplos de artefatos? Verificação e Validação ● O que é verificação? – Assegurar que o produto, ou determinada função, esteja sendo implementado corretamente. – Estamos construindo corretamente o produto? – O software atende a especificação? ● O que é validação? – Assegurar que o produto sendo desenvolvido corresponde ao produto correto, conforme os requisitos do usuário. – Estamos construindo o produto certo? – A especificação representa as necessidades do usuário? Verificação e Validação ● Exemplos de atividades de V&V – Revisões técnicas formais – Auditoria de qualidade – Monitoramento de desempenho – Simulação – Teste Verificação e Validação ● V&V envolve atividades de análise estática e dinâmica ● Análise estática: não requer a execução do software – Inspeção de requisitos ● Análise dinâmica: requer a execução do software (qualquer artefato executável) – simulação Verificação e Validação ● Mas teste é verificação ou validação? ● Análise estática ou dinâmica? Figura de http://www.easterbrook.ca/steve/2010/11/the-difference-between-verification-and-validation/ Definição de Teste ● “Teste é o processo de demonstrar que defeitos não estão presentes.” ● “O propósito do teste é mostrar que um programa realizar suas funcões corretamente.” ● “Teste é processo de estabelecer confiança de um programa faz o que supõe-se que ele deva fazer.” [Myers14] Definição de Teste ● “Teste é o processo de demonstrar que defeitos não estão presentes.” ● “O propósito do teste é mostrar que um programa realizar suas funcões corretamente.” ● “Teste é processo de estabelecer confiança de um programa faz o que supõe-se que ele deva fazer.” [Myers14] Qual o problemas com essas definições? O teste precisa agregar valor! Definição de Teste ● “Teste é o processo de executar um programa com a intenção de encontrar defeitos.” ● Esta definição traz uma melhor orientação aos profissionais da área ● Exercício: encare esta e as definições incorretas como metas/objetivos. Qual o efeito? [Myers14] Definição de Teste ● “Teste é o processo de executar um programa com a intenção de encontrar defeitos.” ● Semanticamente OK, mas … ● Os projetos reais precisam de mais: – Tempo limitado – Precisa ser repetível – Equipes [Myers14] Teste vs Depuração ● E depuração (debugging)? – Localizar e corrigir o defeito [Myers12] ● Analogia com um crime ● Identificar que houve um crime ● Identificar quem foi o autor do crime ● Qual é teste e qual é depuração? Terminologia de Defeitos ● Software bug ● It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise — this thing gives out and [it is] then that "Bugs" — as such little faults and difficulties are called — show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached. [Edison1878] http://en.wikipedia.org/wiki/Software_bug Terminologia de Defeitos ● Padrão IEEE 610.12-1990 ● “Errar é humano, (...)” – Por que as pessoas erram (em ES)? *imagens da Internet Terminologia de Defeitos ● Engano (mistake) → ação humana (ação incorreta) do programador ● Defeito (fault) → passo, processo ou definição de dados incorreta, incompleta, ausente, ou extra. Instrução ou comando incorreto. – Incorreta: delta = b*b + 4*a*c – Incompleta: delta = b*b – 4*a – ausente: //TODO calcular delta – extra: delta = b*b – 4*a*c; delta = - delta; Terminologia de Defeitos ● Erro (error) → Qualquer estado na execução do programa que seja inconsistente. Manifestação interna do defeito. ● Falha (failure) → Produção de uma saída incorreta com relação à sua especificação. Manifestação notável, externa do defeito. Terminologia de Defeitos ● Exemplo: considere o comando z = x + y substituído erroneamente z = x – y. O que acontece quando esse comando é ativado com: – o valor y = 0? – e com o valor y != 0? Terminologia de Defeitos ● Figura Terminologia de Defeitos ● Exemplo: Leia dois inteiros e imprima o maior. Terminologia de Defeitos ● Exemplo: Leia dois inteiros e imprima o maior. O programa falhou! Encontramos uma falha. Terminologia de Defeitos ● Exemplo: Leia dois inteiros e imprima o maior. #include<stdio.h> #include<conio.h> int main(void) { int num1, num2; printf("Entre com o primeiro numero: "); scanf("%d", &num1); printf("\nEntre com o segundo numero: "); scanf("%d", &num2); if(num1 < num2) printf("\n\nO maior numero eh %d.", num1); else printf("\n\nO maior numero eh %d.", num2); getch(); } Terminologia de Defeitos ● Exemplo: Leia dois inteiros e imprima o maior. #include<stdio.h> #include<conio.h> int main(void) { int num1, num2; printf("Entre com o primeiro numero: "); scanf("%d", &num1); printf("\nEntre com o segundo numero: "); scanf("%d", &num2); if(num1 < num2) printf("\n\nO maior numero eh %d.", num1); else printf("\n\nO maior numero eh %d.", num2); getch(); } O defeito deste programa é A troca do sinal. O correto seria: if(num1 > num2) Terminologia de Defeitos ● Exemplo: Leia dois inteiros e imprima o maior. #include<stdio.h> #include<conio.h> int main(void) { int num1, num2; printf("Entre com o primeiro numero: "); scanf("%d", &num1); printf("\nEntre com o segundo numero: "); scanf("%d", &num2); if(num1 < num2) printf("\n\nO maior numero eh %d.", num1); else printf("\n\nO maior numero eh %d.", num2); getch(); } Existe alguma entrada que não geraria uma falha? Casos de Teste ● Como você testa um software? ● OK, como testamos uma Ferrari? ● O que diz a especificação (requisito)? http://fastestlaps.com/models/ferrari-enzo Casos de Teste ● No meu teste, ela demorou 5 s. – Encontrei um defeito? – Qual foi o local do teste? http://fastestlaps.com/models/ferrari-enzo Casos de Teste ● No meu teste, ela demorou 5 s. – Encontrei um defeito? – Qual foi o local do teste? http://fastestlaps.com/models/ferrari-enzo Casos de Teste ● Definição da IEEE – “(1) 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. – (2) Documentation specifying inputs, predicted results, and a set of execution conditions for a test item.” Casos de Teste ● Definição da IEEE ● “Um conjunto de entradas, condições de execução, e resultados esperados, desenvolvidos com um objetivo particular tal como exercitar um caminho do programa ou verificar a adequação com um requisito específico.” Casos de Teste ● É composto por: ● Entradas (dado fornecido) ● Condições de execução (pré-condições) – inexistente ● Resultados esperados(oráculo) Casos de Teste http://fastestlaps.com/models/ferrari-enzo Sistema sob teste System Under Test (SUT) Pré-condições Entradas Saídas esperadas Casos de Teste ● Figura Casos de Teste ● Formalmente: – Programa P – Domínio de entrada de P é D – Especificação de P é S – Execução de P é P* – PRE conjunto de pré-condições de P – Caso de teste → (d; p; S(d)) Casos de Teste ● Conjunto de teste (suite de teste) → vários casos de teste ● Quando um caso de teste passou ou falhou? – De maneira formal ● Um bom caso de teste tem alta probabilidade de revelar um defeito ainda não descoberto. Casos de teste: exemplos ● Exemplo: Faça um programa que receba como entrada um inteiro positivo e responda se o número é primo ou não. ● (5; “primo”) ● (49; “nao eh primo”) ● (37; “primo”) ● (10; “nao eh primo”) ● (-15; “entrada invalida”) ● (“sete”; “entrada invalida”) Casos de teste: exemplos ● O programa string solicita do usuário um inteiro positivo no intervalo entre 1 e 20 e então solicita uma cadeia de caracteres desse comprimento. Após isso, o programa solicita um caracter e retorna a posição na cadeia em que o caracter é encontrado pela primeira vez ou uma mensagem indicando que o caracter não está presente na cadeia. Casos de teste: exemplos ● Quais as entradas? ● CT no qual o caracter é encontrado ● CT no qual o caracter não é encontrado ● CTs problemáticos? Exercício: Casos de Teste ● Especifique um conjunto de casos de teste para testar o programa a seguir: ● O programa lê três valores inteiros que representam os lados de um triângulo. O programa informa se os lados formam um triângulo isósceles, escaleno ou equilatero. ● Condição: a soma de dois lados tem que ser maior que o terceiro lado. Exercício: Casos de Teste 1) CT para triângulo escaleno válido? 2) CT para triângulo isósceles válido? 3) CT para triângulo equilatero válido? 4) Existem pelo menos 3 CTs para isósceles válido contendo a permutação dos mesmos valores? 5) CT com um valor zero? 6) CT com um valor negativo? 7) CT em que a soma de 2 lados é igual ao terceiro lado? Exercício: Casos de Teste 8) Para o item 7, existe um CT para cada permutação de valores? 9) Existe CT em que a soma de 2 lados é menor que o terceiro lado? 10) Para o item 9, existe um CT para cada permutação de valores? 11) Existe um CT para os três valores iguais a zero? 12) Existe CT com valores não inteiros? 13) Existe CT com número de valores errados, por ex., 2 valores ao invés de 3? 14) Para cada CT, você especificou a saída esperada? Exercício: Casos de Teste ● Baseado em defeitos encontrados para esse programa. ● Qual foi seu desempenho? ● Testar de forma ad-hoc foi / é suficiente? ● Existem formas mais sistemáticas? Bibliografia ● [Pfleeger07] S. L. Pfleeger, “Engenharia de Software: Teoria e Prática”, 2007. ● [Pressman11] R. S. Pressman, “Engenharia de Software: uma abordagem profissional”, 2011. ● [Sommerville03] I. Sommerville, “Engenharia de Software”, 2003. ● [IEEE90] “IEEE Standard Glossary of Software Engineering Terminology”, 1990. http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=159342 ● [DMJ07] DELAMARO, Márcio Eduardo; MALDONADO, José Carlos; JINO, Mario. Introdução ao teste de software. Rio de Janeiro, RJ: Elsevier, 2007. 394 p. ISBN 9788535226348. ● [Pezze08] PEZZÈ, Mauro; YOUNG, Michal. Teste e análise de software: processo, princípios e técnicas. Porto Alegre, RS: Bookman, 2008. 512 p. ISBN 9780471455936. ● [Myers12] MYERS, Glenford J.; BADGETT, Tom; SANDLER, Corey. The art of software testing. 3rd ed. Hoboken, NJ.: John Wiley & Sons, c2012. xi, 240 p. ISBN 978118031964. Bibliografia ● [Rios11] RIOS, Emerson. Gerenciando projetos de teste de software. Niterói, RJ: Imagem art studio, 2011. 312 p. ISBN 9788599479223. ● [Kaner02] KANER, Cem; BACH, James; PETTICHORD, Bret. Lessons learned in software testing: a context-driven approach. New York, N.Y.: Wiley, c2002. xxvii, 286 p. ISBN 0471081124. ● [UUU] Materiais didáticos elaborados pelos grupos de engenharia de software do ICMC-USP, DC-UFSCAR e UTFPR-CP. ● Partes dessa apresentação foram adaptadas do material da profa. Ellen Francine e profa. Simone Souza. Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42
Compartilhar