Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testes de Mutação - Testes para Testar seus Testes

Testes de Mutação - Testes para Testar seus Testes

Como podemos garantir que nossos testes realmente estão pegando possíveis falhas em nosso código?
100% de cobertura é suficiente?
Nesta palestra apresento o conceito de Testes de Mutação (tradução livre do termo Mutation Tests), que é uma técnica que permite detectar possíveis falhas em nosso código que não seriam cobertas por nossos testes.

Vinicius Dias

August 24, 2019
Tweet

More Decks by Vinicius Dias

Other Decks in Technology

Transcript

  1. Testes de Mutação
    Testes para Testar seus Testes

    View Slide

  2. Quem é Vinicius Dias?
    ● Zend Certified (PHP) Engineer;
    ● iMasters Certified PHP Professional;
    ● Um dos administradores do PHP Rio;
    ● Desenvolvedor Full Stack na TemboSocial;
    ● Instrutor na Alura Cursos Online;
    ● LinkedIn: https://linkedin.com/in/vinícius-dias/
    ● GitHub: https://github.com/CViniciusSDias
    ● Twitter: @cviniciussdias
    ● Dev.to: https://dev.to/cviniciussdias/
    ● YouTube: Programando com Vinicius Dias

    View Slide

  3. Programando com Vinicius Dias
    https://www.youtube.com/ProgramandoComViniciusDias

    View Slide


  4. feedback
    Os palestrantes gostam de
    saber como melhorar suas
    apresentações
    Nenhuma apresentação é perfeita e
    nós que criamos conteúdo
    sabemos disso.
    Nossa intenção é passar conteúdo
    da melhor forma possível e sua
    opinião é muito importante para
    isso.

    View Slide

  5. Quis custodiet ipsos custodes?
    Quem irá vigiar os próprios vigilantes?

    View Slide

  6. Como garantir que
    seus testes
    realmente
    detectam falhas
    no código?

    View Slide

  7. View Slide

  8. View Slide

  9. Testes passando
    são o suficiente?

    View Slide

  10. View Slide

  11. Como garantir que
    há teste para todo
    meu código?

    View Slide

  12. Cobertura de Código

    View Slide

  13. View Slide

  14. Estes testes
    realmente
    detectam
    possíveis falhas?

    View Slide

  15. Mudando de > para >=

    View Slide

  16. View Slide

  17. Calculando imposto errado?
    Problemas com clientes?

    View Slide

  18. Criar teste que cubra a possível falha

    View Slide

  19. Testando mutações

    View Slide

  20. View Slide

  21. Mutações comuns
    ● Mudar limite de condicional (< para <= ou > para >=);
    ● Inverter condicional (< para > ou > para <);
    ● Negar condicional (== para !=);
    ● Remover condicional (mudar para if (true));
    ● Retirar chamada a algum método;
    ● Mutação no retorno (trocar retorno por null);
    ● Inteiros 0-1 1-0 (mudar 0 para 1 e 1 para 0);
    ● Etc.

    View Slide

  22. Possíveis resultados
    1. Se um código mutado (ou o mutante)
    passou em todos os testes;
    2. Se um mutante fez algum teste
    quebrar;
    3. Se a mutação deste mutante não foi
    executada por nenhum teste;
    1. Significa que este código mutado (ou
    o mutante) escapou;
    2. Significa que o mutante foi morto;
    3. Significa que este mutante não está
    coberto por nenhum teste;

    View Slide

  23. Adicionar várias
    mutações
    manualmente?

    View Slide

  24. View Slide

  25. Infection PHP

    View Slide

  26. View Slide

  27. Primeira execução da ferramenta

    View Slide

  28. Saída do comando

    View Slide

  29. Métricas

    View Slide

  30. Mutation Score
    Indicator (MSI)

    View Slide

  31. Fórmula de cálculo do MSI

    View Slide

  32. Mutation Code
    Coverage

    View Slide

  33. Fórmula de cálculo do MCC

    View Slide

  34. Covered Code MSI

    View Slide

  35. Fórmula de cálculo

    View Slide

  36. Analisando os mutantes

    View Slide

  37. Arquivo gerado pelo Infection PHP

    View Slide

  38. Personalizando a execução

    View Slide

  39. infection.dist.json

    View Slide

  40. Arquivos gerados pelo Infection PHP
    ● Text log: Informações detalhadas sobre os mutantes e seus resultados
    ● Summary: Breve resumo do resultado da execução
    ● Per mutator: Resumo do resultado da execução separado por cada Mutator

    View Slide

  41. Desvantagens

    View Slide

  42. Falsos positivos

    View Slide

  43. Mutantes equivalentes

    View Slide

  44. Cada mutante faz
    rodar toda a suíte
    de testes completa

    View Slide

  45. Suíte grande: Bota pra rodar e vai tomar um café, ou deixa pro servidor de CI. ;-)

    View Slide

  46. Referências
    ● https://blog.caelum.com.br/testes-de-mutantes/
    ● https://infection.github.io/
    ● https://infection.github.io/guide/mutators.html
    ● https://www.guru99.com/mutation-testing.html
    ● https://twitter.com/infection_php
    ● https://github.com/infection/infection/
    ● https://medium.com/@maks_rafalko/infection-mutation-testing-framework-
    c9ccf02eefd1

    View Slide

  47. Avalie e dê feedbacks sinceros
    https://bit.ly/testes-mutacao

    View Slide

  48. Valeu!

    View Slide