Rastreamento automático de bugs

O posicionamento automático de bug em software é uma atividade de engenharia de software de detecção de falhas que podem causar mau funcionamento em um programa . Seu objetivo é reduzir o esforço do desenvolvedor durante a fase de correção.

Esta pesquisa pode ser realizada por análise estática ou dinâmica . No que diz respeito à análise dinâmica, refere-se ao estudo dos rastros de execução do programa .

Este estudo consiste na coleta de dados durante a execução do programa para determinar a provável localização do bug.

Localização baseada em rastros de execução

O rastreamento automático de bugs é parte do processo de correção de bugs que inclui as seguintes etapas:

  1. observe o bug
  2. reproduzir o bug por meio de testes automatizados
  3. localizar automaticamente o bug com base em testes automatizados para determinar sua origem. Para fazer isso, ao executar os testes, os seguintes dados são coletados:
    •  : o número de testes executando a entidade estudada que falhou (f para falhou)
    •  : o número de testes executando a entidade estudada que tiveram sucesso (p para aprovado)
    •  : o número de testes que não estão executando a entidade estudada que falhou (f para falhou)
    •  : o número de testes que não executaram a entidade estudada que tiveram sucesso (p para aprovado)
  4. consertar o bug .

Os dados podem ser coletados em diferentes níveis de granularidade, como: linha , bloco, função , classe , consulte o pacote .

Um exemplo de coleta de dados
Teste 1 Teste 2 Teste 3 Teste 4
Linha 1 Executado Executado Executado 2 1 0 1
Linha 2 Executado Executado Executado 1 2 1 0
Linha 3 Executado Executado 1 1 1 1
...
Resultado dos testes Sucesso Sucesso Fracassado Fracassado

No exemplo acima, a linha 1 é executada pelos testes 1, 3 e 4, dois desses testes falharam ( ) e um passou ( ), todos os testes falharam executaram esta linha ( ) e um teste bem sucedido não executa esta linha ( ). A linha 2 é executada pelos testes 1, 2 e 4, um desses testes falhou ( ) e dois foram aprovados ( ), um teste que falhou não executa esta linha ( ) e todos os testes bem-sucedidos executam esta linha ( ).

Métricas

As métricas são usadas para calcular a distância entre uma entidade de código ( linha , bloco, função , classe ) e um bug . Existem diferentes métricas. As entidades podem então ser classificadas de acordo com essas distâncias, aquelas mais próximas do bug provavelmente contêm o bug , aquelas mais distantes provavelmente não são a causa do bug . Com base nessa classificação, o desenvolvedor pode navegar pelas diferentes entidades, começando pela mais próxima, até que a entidade defeituosa seja encontrada. Assim, se a métrica for eficaz, o desenvolvedor encontrará a origem do erro mais rapidamente do que com uma pesquisa manual.

A mais antiga das métricas comumente usadas é Jaccard (1901) que, originalmente destinada ao campo da botânica , agora é usada em vários campos. O Botanic também inspirou muitas métricas como Ochiai (1957) Russel e Rao (1940), Sørensen e Dice (1945), Rogers e Tanimoto (1960), Anderberg (1973) e Single-Matching (2004). A métrica de Hamming (1950) foi criada para a detecção e correção de erros de código e a métrica de Goodman e Kruskal no campo da biometria . O campo dos mapas auto-adaptativos introduziu as métricas Kulczynski1, Kulczynski2, Hamann e Sokal. Além disso, várias métricas foram criadas diretamente para a localização automática de bugs: Tarantula, Ample, Zoltar e Wong1-3.

Lista de métricas

A tabela abaixo lista as principais métricas que usam os dados apresentados acima para localização de bug .

Sobrenome Fórmula Sobrenome Fórmula
Jaccard Amplo
Dados Sørensen Dados
Kulczynski1 Kulczynski2
Russell e Rao Tarântula
Correspondência Simples Hamann
M1 M2
Rogers e Tanimoto Sokal
Hamming Bom homem
Ochiai Euclides
Ochiai2 Anderberg
Wong1 Zoltar
Wong3 Wong2
Alternativa: análise de predicado

Uma abordagem alternativa para a coleção de entidades executadas é proposta por Libit et al., Que consiste em analisar os predicados ao invés das entidades executadas (linhas, blocos, classes ...). Um predicado interessante pode ser uma condição, um retorno de valor ... Durante a execução dos testes, são coletados os predicados executados e também aqueles que têm um valor verdadeiro. Esses dados são então usados ​​em métricas que classificam predicados com base em seu envolvimento em testes com falha.

Aqui está uma das métricas introduzidas por Libit et al. : onde

e

.

Combine métricas

Estudos empíricos mostraram que nenhuma métrica é perfeita. Uma solução possível para melhorar a eficiência do rastreamento automático de bugs é combinar métricas. Wang et al. propor uma abordagem de algoritmos baseados em pesquisa , Jifeng Xuan et al. oferecem uma combinação de métricas geradas pelo aprendizado de máquina .

Comparação de métricas

Naish et al. oferecem uma classificação de métricas em dados padronizados, comparando-os em desempenho e confiabilidade. Conclui-se que os algoritmos propostos por Naish et al. são um melhor compromisso entre desempenho e confiabilidade, como Wong3, Zoltar, M2 e Ochiai.

Os resultados experimentais de Jifeng Xuan et al. realizadas em 10 projetos de código aberto mostram que a combinação de métricas pode melhorar a eficiência da localização de bugs em até 50%. No entanto, eles também mostram que os resultados obtidos com Ochiai e Ample são bons. Esses resultados contrastam com os de Naish et al. porque de acordo com Jifeng Xuan et al. as suposições de Naish et al. sobre os dados não se aplicam a casos reais.

Ferramentas

As ferramentas para a localização de erro estão disponíveis como software de standalone ou plugins para IDE .

Identificar

Pinpoint é uma estrutura Java EE para localizar bugs em sistemas distribuídos .

Seu uso se destina à localização de bugs em aplicativos complexos onde vários componentes, íntegros ou com defeito, interagem para responder a uma solicitação do cliente. Esta estrutura foi desenvolvida originalmente para superar as fraquezas dos sistemas de rastreamento de bugs de análise estática .

Na verdade, as necessidades de dinamismo em aplicativos complexos ( balanceamento de carga , aumento de escala, etc.) são difíceis de prever durante uma análise estática.

Sua operação ocorre em duas fases:

  1. Observação das solicitações feitas pelos clientes e dos componentes do sistema envolvidos nas respostas a essas solicitações,
  2. Análise e verificação cruzada dos erros encontrados nos traces obtidos na etapa anterior por agrupamento para identificar os componentes na origem do bug .

A análise permite destacar o componente ou as combinações de componentes que podem estar na origem dos comportamentos errôneos do sistema.

Várias limitações podem complicar a localização de bugs:

  1. No caso de um forte acoplamento entre um componente com defeito e um componente íntegro, o Pinpoint considerará os dois componentes como fontes potenciais do bug.
  2. O Pinpoint pressupõe que os bugs que aparecem no sistema não corrompem o estado do último. No entanto, raramente é possível ter certeza de que um bug que apareceu durante uma solicitação anterior não pode influenciar as solicitações ao sistema no futuro. Assim, um erro no serviço de criação de conta pode causar um bug para o usuário ao autenticar no sistema.
  3. A qualidade das solicitações enviadas pelo cliente não é avaliada. Portanto, é impossível para o Pinpoint saber se um bug é causado por uma solicitação inconsistente do cliente ou por uma falha do servidor.
  4. Os erros detectados instantaneamente pelo sistema durante sua execução não são registrados pelo Pinpoint, mesmo que o desempenho da resposta a uma solicitação seja afetado.

Tarântula

Tarantula é uma métrica e uma ferramenta proposta pela primeira vez em 2001 por pesquisadores do Georgia Institute of Technology . Ele foi desenvolvido com o objetivo de fornecer um programa autônomo para visualizar as linhas de código de um programa inteiro .

As linhas de código do programa estudado são coloridas de acordo com uma fórmula que indica seu grau de suspeita. Além da cor, variando de verde para linhas não suspeitas a vermelho para as mais suspeitas, uma tonalidade indica o número de vezes que a linha foi realmente executada como resultado dos testes.

Essas duas informações são combinadas para produzir uma exibição que indica o grau de suspeita associado a cada linha.

AMPLO

AMPLE (for Analyzing Method Patterns to Locate Errors) é uma ferramenta para localização de bugs em software escrito em Java desenvolvida por pesquisadores da Universidade de Saarland em 2005. Sua abordagem é orientada a objetos tendo a classe como unidade de estudo.

Implementado como um plug - in para Eclipse , ele se integra a estruturas como JUnit para coletar os resultados da execução de um conjunto de testes.

Seu funcionamento é baseado no estudo das sequências de chamadas entre os métodos executados durante os testes. Ao comparar as sequências entre a execução de um teste bem-sucedido e um teste reprovado, o AMPLE direciona o desenvolvedor à provável origem do problema. Na verdade, as sequências ou pedaços de sequências presentes nas 2 execuções têm menos probabilidade de conter erros do que os métodos chamados apenas na execução defeituosa.

As sequências são comparadas ao longo de um comprimento k , escolhido em função do nível de granularidade desejado. Para cada sequência encontrada na execução com falha e ausente na execução bem-sucedida, a classe da matriz do objeto no qual as chamadas ausentes são feitas é extraída. No final da comparação, as classes são ordenadas pelo número médio de ocorrências exclusivas em execuções com falha.

GZoltar

GZoltar é um framework de bug de localização originalmente estabelecido em 2010 e disponível como um plugin do Eclipse .

Essa ferramenta traz uma opção de visualização e melhor integração com o ambiente do desenvolvedor para o Zoltar, um framework desenvolvido inicialmente por pesquisadores da Delft University of Technology .

O desenvolvimento resultou na produção de software de saída textual, bem como em uma interface não integrada na forma de XZoltar. O código de GZoltar deve ser reutilizado por outros desenvolvedores na forma de uma biblioteca. Como outros plug-ins como AMPLE, ele se integra ao Eclipse para explorar os resultados produzidos por estruturas de teste como JUnit .

Ele usa principalmente a métrica Ochiai para avaliar a suspeita de linhas de código e, em seguida, renderiza graficamente o resultado. Os cálculos de suspeita são feitos por Zoltar usando a métrica Ochiai e o resultado é renderizado em 3D usando OpenGL .

EzUnit

EzUnit é uma estrutura para localização de bug inicialmente desenvolvida em 2007 na forma de um plugin do Eclipse .

Ele se integra ao ambiente do desenvolvedor, oferecendo o lançamento de testes escritos usando uma estrutura de teste como JUnit . EzUnit4, a versão mais recente, oferece a opção de visualização de gráficos de chamadas.

Os nós do grafo produzido são então coloridos de acordo com o grau de suspeita nas chamadas de método. A coloração varia de verde a vermelho para indicar a provável localização do bug.

Artigos relacionados

Referências

  1. Paul Jaccard 1901 , p.  547--579
  2. Akira Ochiai 1957 , p.  526-530
  3. Paul F RUSSELL, T Ramachandra Rao e outros 1940 , p.  153-178
  4. T. Sorensen 1948 , p.  1-34
  5. David J. Rogers e Taffee T. Tanimoto 1960 , p.  1115-1118
  6. Michael R Anderberg 1973
  7. R. R. Sokal e CD Michener 1958 , p.  1409-1438
  8. Richard W Hamming 1950 , p.  147-160
  9. Leo A Goodman e William H Kruskal 1954 , p.  732-764
  10. Fernando Lourenco, Victor Lobo e Fernando Bacao 2004
  11. James A. Jones, Mary Jean Harrold e John T. Stasko 2001 , p.  71-75
  12. Valentin Dallmeier, Christian Lindig e Andreas Zeller 2005 , Monterey, Califórnia, EUA, p.  99--104
  13. A Gonzalez 2007
  14. W. Eric Wong et al. 2007 , Washington, DC, EUA, p.  449-456
  15. Valentin Dallmeier, Christian Lindig e Andreas Zeller 2005 , Monterey, Califórnia, EUA, p.  99--104
  16. Lee R Dice 1945 , p.  297-302
  17. Brian Sidney Everitt 1978 , Nova York
  18. Lee Naish, Hua Jie Lee e Kotagiri Ramamohanarao 2011 , Nova York, NY, EUA, p.  11: 1-11: 32
  19. ben liblit et al. 2005 , p.  15-26
  20. Rui Abreu et al. 2009 , Nova York, NY, EUA, p.  1780-1792
  21. Lucia Lucia et al. 2014 , p.  172-219
  22. Shaowei Wang et al. 2011 , Washington, DC, EUA, p.  556-559
  23. Jifeng Xuan e Martin Monperrus 2014
  24. MY Chen et al. 2002 , p.  595-604
  25. James A. Jones, Mary Jean Harrold e John T. Stasko 2001 , p.  71-75
  26. André Riboira e Rui Abreu 2010 , p.  215-218
  27. T. Janssen, R. Abreu e AJC van Gemund 2009 , p.  662-664
  28. (em) "  GZoltar  " (acessado em 14 de dezembro de 2014 )
  29. (em) "  EzUnit  " (acessado em 14 de dezembro de 2014 )
  30. (em) "  EzUnit4  " (acessado em 14 de dezembro de 2014 )

Bibliografia

  • (pt) Rui Abreu , Peter Zoeteweij , Rob Golsteijn e Arjan JC van Gemund , “  A Practical Evaluation of Spectrum-based Fault Localization  ” , J. Syst. Softw. , New York, NY, USA, Elsevier Science Inc., vol.  82, n o  11,novembro de 2009, p.  1780–1792 ( ISSN  0164-1212 , DOI  10.1016 / j.jss.2009.06.035 , leia online )
  • (pt) Michael R Anderberg , análise de cluster para aplicativos ,1973
  • (pt) Mike Y. Chen , Emre Kiciman , Eugene Fratkin , Armando Fox e Eric Brewer , "  Pinpoint: Problem Determination in Large, Dynamic Internet Services  " , Proceedings of the 2002 International Conference on Dependable Systems and Networks , Washington, DC, EUA , IEEE Computer Society, dSN '02,2002, p.  595–604 ( ISBN  0-7695-1597-5 , leitura online )
  • (pt) Valentin Dallmeier , Christian Lindig e Andreas Zeller , "  Lightweight Bug Localization with AMPLE  " , Proceedings of the Sixth International Symposium on Automated Analysis-driven Debugging , New York, NY, USA, ACM, aADEBUG'05,2005, p.  99–104 ( ISBN  1-59593-050-7 , DOI  10.1145 / 1085130.1085143 , leia online )
  • (pt) Lee R Dice , “  Medidas da quantidade de associação ecológica entre espécies  ” , Ecologia , JSTOR, vol.  26, n o  3,1945, p.  297-302
  • (pt) Brian Sidney Everitt , Técnicas gráficas para dados multivariados , Nova York, Holanda do Norte,1978( ISBN  0-444-19461-4 )
  • (pt) A Gonzalez , Técnicas de detecção automática de erros baseadas em invariantes dinâmicos ,2007
  • (pt) Leo A Goodman e William H Kruskal , “  Medidas de associação para classificações cruzadas *  ” , Journal of the American Statistical Association , Taylor \ & Francis, vol.  49, n o  268,1954, p.  732-764
  • (pt) Richard W Hamming , “  Códigos de detecção e correção de erros  ” , Bell System Technical Journal , Wiley Online Library, vol.  29, n o  21950, p.  147-160
  • Paul Jaccard , "  Estudo comparativo da distribuição floral em uma porção dos Alpes e Jura  ", Bulletin del la Société Vaudoise des Sciences Naturelles , vol.  37,1901, p.  547–579
  • (en) A. James , Jean Mary e T. John , "  Visualization for Fault Localization  " , Proceedings of the Workshop on Software Visualization (SoftVis), 23ª Conferência Internacional sobre Engenharia de Software ,Maio de 2001, p.  71-75
  • (en) T. Janssen , R. Abreu e AJC van Gemund , “  Zoltar: A Toolset for Automatic Fault Localization  ” , Automated Software Engineering, 2009. ASE '09. 24ª Conferência Internacional IEEE / ACM sobre ,novembro de 2009, p.  662-664 ( ISSN  1938-4300 , DOI  10.1109 / ASE.2009.27 )
  • (pt) Ben Liblit , Mayur Naik , Alice X Zheng , Alex Aiken e Michael I Jordan , “  Scalable Statistical bug Isolation  ” , ACM SIGPLAN Notices , ACM, vol.  40, n o  6,2005, p.  15-26
  • (en) Fernando Lourenco , Victor Lobo e Fernando Bacao , “  Medidas de similaridade de base binária para dados categóricos e sua aplicação em Mapas Auto-Organizáveis  ” , JOCLAD ,2004
  • (en) Lucia Lucia , David Lo , Lingxiao Jiang , Ferdian Thung e Aditya Budi , “  Extensão estudo abrangente de medidas de associação para localização de falhas  ” , Journal of Software: Evolução e Processo , vol.  26, n o  22014, p.  172–219 ( ISSN  2047-7481 , DOI  10.1002 / smr.1616 , leia online )
  • (pt) Lee Naish , Hua Jie Lee e Kotagiri Ramamohanarao , “  A Model for Spectra-based Software Diagnosis  ” , ACM Trans. Softw. Eng. Methodol. , New York, NY, USA, ACM, vol.  20, n o  3,agosto de 2011, p.  11: 1-11: 32, artigo n o  11 ( ISSN  1049-331X , DOI  10,1145 / 2.000.791,2000795 , lido online )
  • (ja) Akira Ochiai , “  Estudos zoogeográficos sobre os peixes sóleo encontrados no Japão e suas regiões vizinhas  ” , Bull. Jpn. Soc. Sci. Fish , vol.  22, n o  9,1957, p.  526-530
  • (pt) Paul F RUSSELL , T Ramachandra Rao e outros , “  On Habitat and Association of Species of Anopheline Larvae in South-Eastern Madras.  ” , Journal of the Malaria Institute of India , vol.  3, n o  1,1940, p.  153-178
  • (en) André Riboira e Rui Abreu , “  The GZoltar Project: A Graphical Debugger Interface  ” , Testing - Practice and Research Techniques , Springer Berlin Heidelberg, lecture Notes in Computer Science, vol.  6303,2010, p.  215-218 ( ISBN  978-3-642-15584-0 , DOI  10.1007 / 978-3-642-15585-7_25 , ler online )
  • (pt) David J. Rogers e Taffee T. Tanimoto , "  A Computer Program for Classifying Plants  " , Ciência , Associação Americana para o Avanço da Ciência, vol.  132, n o  3434,21 de outubro de 1960, p.  1115–1118 ( ISSN  1095-9203 , PMID  17790723 , DOI  10.1126 / science.132.3434.1115 , ler online )
  • (pt) Wang Shaowei , D. Lo , Jiang Lingxiao , Lucia e Chuin Hoong , “  Search-based fault localization  ” , Automated Software Engineering (ASE), 2011 26ª Conferência Internacional IEEE / ACM em ,novembro de 2011, p.  556-559 ( ISSN  1938-4300 , DOI  10.1109 / ASE.2011.6100124 )
  • (pt) RR Sokal e CD Michener , "  Um método estatístico para avaliar as relações sistemáticas  " , University of Kansas Science Bulletin , vol.  38,1958, p.  1409-1438
  • (pt) T. Sørensen , “  Um método de estabelecer grupos de igual amplitude na sociologia das plantas com base na similaridade das espécies e sua aplicação a análises da vegetação em áreas comuns dinamarquesas  ” , Biol. Skr. , vol.  5,1948, p.  1-34
  • (en) W. Eric Wong , Yu Qi , Lei Zhao e Kai-Yuan Cai , "  Effective Fault Localization Using Code Coverage  " , Proceedings of the 31st Annual Computer Software and Applications Conference - Volume 01 , Washington, DC, EUA, IEEE Computer Society, cOMPSAC '07,2007, p.  449-456 ( ISBN  0-7695-2870-8 , DOI  10.1109 / COMPSAC.2007.109 , leia online )
  • (pt) Jifeng Xuan e Martin Monperrus , "  Learning to Combine Multiple Ranking Metrics for Fault Localization  " , Proceedings of the 30th International Conference on Software Maintenance and Evolution ,2014( leia online )


<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">