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

Quem testa os nossos testes? Medindo a qualidad...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Quem testa os nossos testes? Medindo a qualidade de testes unitários

Como podemos medir a qualidade dos nossos testes unitários? Testes de mutação, ou mutation tests, servem para medirmos checam a qualidade do testes existentes em nosso projeto. Nesta apresentação iremos mostrar como os testes de mutação podem ajudar a medir a qualidade dos seus testes unitários e garantir, assim, uma maior cobertura da complexidade do seu código.

Avatar for Centeno

Centeno

July 20, 2018
Tweet

More Decks by Centeno

Other Decks in Programming

Transcript

  1. • menor parte testável • Não provar aplicação funciona ◦

    Garante mantenha comportamento • melhorar o design
  2. • Métrica quantidade código testado • ◦ uma taxa baixa

    indica não são suficientes • cuidado
  3. • modificação • mutante if ( amount >= limit )

    { return amount * 2; } if ( amount > limit ) { return amount * 2; }
  4. • Introduz falhas • Executa para cada mutação • testes

    unitários passaram • ◦ mortas ◦ sobreviventes ◦ others (timeout, error bitecode, etc)
  5. • limite de condicionais if ( amount > limit )

    { return amount * 2; } if ( amount >= limit ){ return amount * 2; }
  6. • negação de condicionais if ( amount == limit )

    { return amount * 2; } if ( amount != limit ){ return amount * 2; }
  7. • remoção de condicionais • sempre executadas • if (

    amount == 20 ) { return amount * 2; } if ( true ){ return amount * 2; } if( amount == 20 ){ return amount * 2; } else { return amount; } if( false ){ return amount * 2; } else { return amount; }
  8. • incrementos • • public int increaseCounter(int i) { i++;

    return i; } public int increaseCounter(int i) { i--; return i; }
  9. • valor de retorno boolean Substitui um retorno true por

    false. E vice-versa int byte short Substitui um retorno 0 por 1. Nos outros casos retorna sempre 0 long Incrementa +1 no retorno float double Substitui o valor original por -(x+1.0) Object Retorna sempre null
  10. • valor de retorno boolean Substitui um retorno true por

    false. E vice-versa int byte short Substitui um retorno 0 por 1. Nos outros casos retorna sempre 0 long Increment +1 no retorno float double Substitui o valor original por -(x+1.0) Object Retorna sempre null public Passenger createPassenger() { return new Passenger(); } public Passenger createPassenger() { new Passenger(); return null; }
  11. • chamada de métodos void • • public void addTaxes(Price

    price) { // does something } public Price getPrice() { Price price = new Price(); addTaxes(price); return price; } public void addTaxes(Price price) { // does something } public Price getPrice() { Price price = new Price(); return price; }
  12. • demoram muito • computacionalmente pesados • • não substitui

    testes funcionais • equivale ao código original falso positivo ◦
  13. • testes unitários rápidos • Não toda vez • Rodar

    só nas partes que sofreram alterações