A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim Fundamentos do Teste de Software.

Apresentações semelhantes


Apresentação em tema: "SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim Fundamentos do Teste de Software."— Transcrição da apresentação:

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

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) {…} } Bank bank = Bank.createBank(); String name = “customer1“; Customer cust = bank.createCustomer(name); Assert.assertEquals(name, cust.getName()); Entrada e resultado esperado :

12 Exemplo public 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 :

13 Terminologia: Falta e Falha IEEE STD. 982.2-1988 (http://standards.ieee.org/) ‏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., com sort(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 Gerência de bugs (E.g., bugzilla) Teste contínuo

24 programadortestador gerente cliente alguns papéis

25 programadortestador gerente requisitos atribuição cliente

26 programadortestador gerente Bug tracker

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; while (condA){ if (condB){ stmt1; stmt2; } stmt3; } stmt4 stmt0 condA stmt1; stmt2; stmt3 condB stmt4

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

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 b c a f d e t0 t1t6 t2 t3 t4 t5

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 erros reais

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

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

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

51 Teste de Mutação O que o programador deve fazer ao perceber isto? P T0 T1 T2 … Tn P’ T0 T1 T2 … Tn TS =

52 Teste de Mutação O que o programador deve fazer ao perceber isto? P T0 T1 T2 … Tn P’ T0 T1 T2 … Tn TS = Adicionar novo teste para capturar erro em P’

53 Teste de Mutação Novo teste deve passar em P e falhar em P’ Definição: TS distingue programas P e P’ P T0 T1 T2 … Tn P’ T0 T1 T2 … Tn TS = Tn+1 

54 Terminologia Mutante Operador de Mutação Mutante morto Mutante sobrevivente Mutante equivalente

55 Terminologia Mutante: Programa original modificado Operador de Mutação: Definição de uma transformação (de original para mutante) Mutante morto: Quando a suíte de teste consegue distinguir mutante do original Mutante sobrevivente: Não morto (acima) Mutante equivalente: Semântica do mutante é equivalente ao original

56 Mutantes sobreviventes Duas razões para P’ sobreviver ao teste de distinção de P em relação a TS Suíte TS não consegue distinguir P e P’ P e P’ são equivalentes => problema indecidível!

57 Metodologia (Parte 1) Input: P: Pgm, OPS: set of Op Output: set of Pgm Pseudo-code: gerarMutantes /******************************************************* * gera vários novos programas derivados de P. * Para cada um, identifica um operador de * mutação em OPS e uma posicão para aplicá-lo * em P. Em geral, cada mutante inclui apenas * uma modificação. *******************************************************/

58 Metodologia (Parte 2) Input: P: Pgm, TS: set of Pgm, {P1, P2, …, Pn}: set of Pgm Output: (survivors: set of Pgm, killed: set of Pgm) Pseudo-code: encontreSobreviventes for each Pm in {P1,P2, …,Pn} do // distinguir mutante if (exists some T in TS s.t. RUN(T,Pm) == FAIL) killed = killed U {Pm} else survivors = survivors U {Pm} done return (survivors, killed)

59 Metodologia (Parte 3) P TS Set of Mutants OPs gerarMutantesencontreSobreviventes sobreviventes novos testes

60 Score de Mutação Está para o teste de falhas assim como cobertura está para o teste estrutural Score: #mortos / (#mutantes - #equivalentes) Ex. 10 mutantes, 5 mortos, 2 equivalentes. Score = 5/8 = 0.625 (62.5%)

61 Limitações Não se sabe se o erro introduzido por um operador de mutação é relevante para encontrar erros reais Identificação de mutantes equivalentes é manual Consome tempo do testador e é passível a erro

62 Demo MuClipse

63 Automação da geração de testes

64 Duas preocupações Entrada (sequência + dados) Classificador Várias técnicas Model-Based Testing (e.g., TARGET), Random Testing (e.g., RANDOOP), Symbolic Testing (e.g., Symstra), Concolic Testing (e.g., DART), etc.

65 Model-Based Testing (MBT) Modelo orienta o teste de programas Modelo representa comportamento esperado (spec) Testes são gerados a partir do modelo Violação indica que o sistema não está em conformidade com o modelo Principais limitações Incompletude do modelo Dificuldade na construção do modelo

66 TARGET Entrada são requisitos e parâmetros de geração Documentos Word estruturados descrevem os requisitos Cada arquivo descreve uma feature com vários casos de uso. Um caso de uso possui diversos fluxos (principal, alternativos, e excepcionais). Saída é uma suíte de teste Planilhas no Excel descrevem os casos de teste

67 Demo TARGET

68 Random Testing Geração de entradas Seleção de sequência e dados randômica e incremental Principal limitação Degrada com o aumento no tamanho do espaço de estados

69 Randoop Entrada é um conjunto de classes e parâmetros de configuração Saída é uma suíte de testes Geração do classificador Derivado de conjunto de testes [Pacheco & Ernst, 2005] Específicos da linguagem [Pacheco et al., 2007] Informados pelo usuário

70 Feedback-directed random test generation. Carlos Pacheco et al., ICSE 2007

71 Demo RANDOOP

72 Desafios Melhorar automação Geração de classificadores (oracles) Geração de dados Geração de sequências Melhorar escalabilidade Escalar técnicas além do teste de unidade


Carregar ppt "SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim Fundamentos do Teste de Software."

Apresentações semelhantes


Anúncios Google