1 / 72

Fundamentos do Teste de Software

Fundamentos do Teste de Software. SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br. Motivação econômica. Teste e depuração é responsável por + de 50% do custo total de desenvolvimento [Myers-1979, NIST-report-2002] Defeitos escapados podem ter consequências desastrosas

Download Presentation

Fundamentos do Teste de Software

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fundamentos do Teste de Software SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim damorim@cin.ufpe.br

  2. Motivação econômica • Teste e depuração é responsável por + de 50% do custo total de desenvolvimento [Myers-1979, NIST-report-2002] • Defeitos escapados podem ter consequências desastrosas • Exemplo: Mars Orbiter (1999), Ariane 5 (2001)

  3. Verificação e Validação (V&V) • Theorem proving • Static analysis • Testing • Inspection • Walkthroughs

  4. Verificação e Validação (V&V) • Theorem proving • Static analysis • Testing • Inspection • Walkthroughs

  5. Definição: Testes (processo) • Atividade(s) de encontrar erros no software

  6. Limitações • Não prova corretude como theorem proving • Não é automático como análise estática • Porém... • É técnica de V&V dominante na indústria • Documenta intenções e designs • Pode ser combinada com técnicas formais para encontrar erros de forma mais sistemática. Por exemplo, • Kernel do Linux [Cadar et al., 2006], Protocolos de rede [d´Amorim et al., 2005], Escalonador de tempo real [Penix et al., 2000], etc.

  7. 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]

  8. 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]

  9. Exemplo public class Customer { String getName() {…} } public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} }

  10. 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());

  11. Exemplo public class Customer { String getName() {…} } public class Bank{ static Bank createBank() {…} Customer createCustomer(String name) {…} } Entrada e resultadoesperado: Bank bank = Bank.createBank(); String name = “customer1“; Customer cust = bank.createCustomer(name); Assert.assertEquals(name, cust.getName());

  12. Exemplo 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()); }

  13. 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]

  14. Quiz: Localize falta e falha no pgm. abaixo // pre condicao: v != null public static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … } }

  15. Quiz: Localize falta e falha no pgm. abaixo // pre condicao: v != null public static void sort(int[] v) { for (int i = 0; i <= v.length; i++) { …v[i] … } } CAUSA EFEITO

  16. Teste e Depuração • Teste é atividade de localizar falhas! • Depuração é atividade de localizar faltas!

  17. Teste e Depuração • Teste é atividade de localizar falhas! • Depuração é atividade de localizar faltas! • No exemplo anterior • Atividade de teste revela um erro no uso de v[i]. E.g., comsort(new int[]{}); • Depuração localiza o defeito na condição de parada do loop: i <= v.length

  18. 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 já passou Suíte de regressão serve para capturar falhas com origem na modificação contínua do programa

  19. Enquete: Voce já usou? • JUnit3 • JUnit4 • NUnit • Ant • Make

  20. Agenda do curso • Demo Junit (framework de testes) • Testes no desenvolvimento • Qualidade de suíte de testes • Demo EclEmma (cálculo de cobertura) • Demo MuClipse (cálculo de score de mutação) • Automação da geração de testes • Demo TARGET (geração baseada em modelos) • Demo Randoop (geração aleatória)

  21. Demo JUnit

  22. Testes no desenvolvimento

  23. Testes no desenvolvimento • Gerência de bugs (E.g., bugzilla) • Teste contínuo

  24. programador testador alguns papéis cliente gerente

  25. programador testador atribuição atribuição requisitos cliente gerente

  26. programador testador Bug tracker gerente

  27. Sistema de bug tracking • Objetivo: gerenciar ciclo de vida de bugs • Programadores e testadores modificam status de report • Gerentes tem acesso a informação valiosa • Exemplo: frequência de erro por módulo • Exemplo: • Bugzilla (open-source). http://www.bugzilla.org/

  28. Máquina de estados de um bug no Bugzilla

  29. Teste contínuo • Execução ininterrupta de testes • Alternativas • Unidade (localmente) • ver http://groups.csail.mit.edu/pag/continuoustesting/ • Sistema (no servidor) • ver http://www.javaworld.com/javaworld/jw-11-2006/jw-1101-ci.html • Problemas (mais críticos quando usado localmente) • Pode impactar performance • Pode reportar falso alarmes (devido a modificações incompletas)

  30. Resumo • Ferramenta de gerência de erros • E.g., bugzilla, clearquest, etc. • Ferramenta de integração contínua • E.g., cruisecontrol, continuum, etc. • Controle de versão • E.g., cvs, svn, etc. • Ferramenta de build • E.g., ant, make, maven, etc.

  31. Qualidade de suíte de testes

  32. Problema • Usuário não sabe quão adequada é uma suíte de testes para encontrar erro. Em resumo, como medir qualidade? • Duas soluções • Cobertura • Score de Mutação

  33. Definição: cobertura • Valor que indica quanto uma suíte de testes cobre um programa de acordo com um critério particular • Exemplo • Cobertura de métodos indica o percentual de métodos de uma aplicação que um conjunto de testes exercita • Princípio • Maior cobertura aumenta chances de encontrar o erro

  34. Simplificação didática • Testar a estrutura de um programa equivale a testar um grafo

  35. Control-Flow Graph (CFG) stmt0; while (condA){ if (condB){ stmt1; stmt2; } stmt3; }stmt4

  36. Control-Flow Graph (CFG) stmt0 stmt0; while (condA){ if (condB){ stmt1; stmt2; } stmt3; }stmt4 condA condB stmt4 stmt1; stmt2; stmt3

  37. Control-Flow Graph (CFG) a stmt0 t4 t0 condA b t1 t6 condB c f t2 t5 stmt4 stmt1; stmt2; d t3 e stmt3

  38. Quiz • O que é uma sequência de teste para um grafo?

  39. Quiz • O que é uma sequência de teste para um grafo? • Sequência de transições a partir do nó inicial que termina em uma folha

  40. Cobertura de Grafos • Exemplo de sequência de teste • t0; t6 a t4 t0 b t1 t6 c f t2 t5 d t3 e

  41. Critérios de adequação de grafo • Nó • Transição • Caminho

  42. Critérios de adequação de grafo • Nó • Teste suíte TS é adequado a nó (i.e., cobre todos os nós) se para cada nó n em G existe t em TS que cobre n (i.e., origem ou destino de t é n) • Transição • … • Caminho • …

  43. Critérios de adequação de grafo • Nó • Teste suíte TS é adequado a nó (i.e., cobre todos os nós) se para cada nó n em G existe t em TS que cobre n (i.e., origem ou destino de t é n) • Transição • … • Caminho • … Em geral, número de caminhos de um grafo é infinito

  44. Exercício • Reporte suíte de teste adequada a nó • Reporte suíte de teste adequada a transição • Existe suíte de teste adequada a caminho de até N transições?

  45. Demo EclEmma

  46. Problema • Usuário não sabe quão adequada é uma suíte de testes para encontrar erro • Duas soluções • Cobertura • Score de Mutação

  47. Teste de Mutação • Verifica se uma suíte de teste é capaz de encontar uma falha no programa modificado com um bug (Fault seeding/injection) • Princípio • Uma suíte capaz de encontrar vários erros artificiais pode encontrar mais errosreais

  48. Teste de Mutação T0   T1  T2 …  Tn TS = • Como saber se TS é adequada para encontrar erros? P

  49. Teste de Mutação T0 T0     T1 T1   T2 T2 … …   Tn Tn TS = • P’ é uma versão que contém um erro! • O que se pode concluir sobre TS? P’ P

  50. Teste de Mutação T0 T0     T1 T1   T2 T2 … …   Tn Tn TS = • P’ é uma versão que contém um erro! • O que se pode concluir sobre TS? P’ P Inadequado para encontrar erro introduzido em P’

More Related