SlideShare ist ein Scribd-Unternehmen logo
1 von 3
Downloaden Sie, um offline zu lesen
DevQA: Como testar os testes unitários? - por Kamilla Queiróz
Já testou os seus testes unitários? Como saber se você escreveu corretamente os testes
unitários? Isso pode ser mais uma tarefa para um DevQA!
Ferramentas de qualidade de código, testes unitários, testes de integração, são vários os
tipos de testes, mas como saber a qualidade deles? Como identificar se os testes unitários
estão sendo efetivos? As ferramentas de cobertura são boas alternativas para saber se os
testes estão utilizando uma certa linha de código, mas caso as variáveis sejam diferentes ou
algumas condições mudem, como manter essa garantia?
Quando é codificado um teste unitário, a preocupação é testar o resultado que está sendo
esperado, mas havendo várias possibilidades de fluxos, como vamos garantir que o teste
passou por todos os caminhos e não somente o happy day, ou seja, o caminho feliz ?
Para esse tipo de abordagem utilizando uma técnica chamada Mutation Testing, onde é
alterado o código original para introduzir falhas simples e verificamos se os testes unitários
irão quebrar.
Um dos métodos mais comuns para isso é o Bebuging, é isso mesmo, a escrita está correta. Ao
invés de 'debugarmos' o código, ou seja, depurarmos procurando bugs, erros ou falhas, iremos
introduzir erros na aplicação para testar a qualidade do teste unitário.
Essas falhas ou erros que introduzimos no código, chamamos de Mutação. Cada linguagem tem
uma estrutura e assim em linguagens orientadas a objeto temos os seguintes tipos de mutação
possíveis:
• Intra-method: dentro de métodos;
• Inter-method: entre métodos;
• Intra-class: entre métodos de uma classe;
• Inter-class: entre métodos de classes diferentes;
Temos uma variedade de operadores de mutação resultantes desses tipos de mutações
possíveis. Abaixo, vamos analisar uma ferramenta que implementa alguns desses operadores.
Para Java temos a ferramenta MuJava. Vejamos como essa ferramenta trabalha com um
exemplo:
Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao
erro. Introduzimos uma mutação de operador aritmético.
O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se
executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa
qualidade, os testes unitários quebraram.
Caso isso não ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja,
precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os
testes unitários quebrem, caso o programa original seja alterado.
Em resumo, os testes de mutação tem a capacidade de revelar o quão adequados estão os
testes unitários ou seus dados de teste.
Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita
calcularmos uma média objetiva de confiança dos casos de
o cálculo em mais detalhes no
Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao
tação de operador aritmético.
O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se
executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa
qualidade, os testes unitários quebraram.
ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja,
precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os
testes unitários quebrem, caso o programa original seja alterado.
tação tem a capacidade de revelar o quão adequados estão os
testes unitários ou seus dados de teste.
Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita
calcularmos uma média objetiva de confiança dos casos de testes unitários executados. Veja
o cálculo em mais detalhes no artigo aqui.
Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao
O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se
executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa
ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja,
precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os
tação tem a capacidade de revelar o quão adequados estão os
Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita
testes unitários executados. Veja
Tipos de mutações que podemos fazer no código:
• Exclusões de declarações;
• Duplicação ou inserção de declarações;
• Negação de sub-expressões booleanas;
• Substituições:
- operadores aritméticos [+, -, *, / ];
- relações booleanas [==, !=, <, <=, >, >=];
- variáveis do mesmo escopo [tipos devem ser compatíveis];
Problemas
Um dos problemas encontrados com essa abordagem é questão do tempo de execução dos
testes. Pois iremos incluir alterações diversas no código, assim para cada alteração
precisamos rodar todos os testes novamente, e com isso, o tempo de execução dos testes se
eleva bastante.
Uma solução para mitigar esse tempo, é a escolha correta dos operadores e aplicarmos nas
classes de maior interesse.
Em resumo:
• Testar os testes ajuda na criação de suítes efetivas;
• Apresenta um propósito educacional;
• Mostra o quanto pode ser confiável uma suíte de testes;
• Valida se alguma implementação está realmente bem testada.
Links Externos
MuJava
Artigo: MuJava : An Automated Class Mutation System
Publicado originalmente em O Tapioca: http://www.otapioca.com.br/?p=2239

Weitere ähnliche Inhalte

Was ist angesagt?

Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelManoel Pimentel Medeiros
 
Teste Dirigido por Modelos
Teste Dirigido por ModelosTeste Dirigido por Modelos
Teste Dirigido por ModelosNatã Melo
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...Rodrigo Oliveira, Msc, PMP
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de UnidadeAline Ferreira
 
Introdução a testes unitários com jUnit
Introdução a testes unitários com jUnitIntrodução a testes unitários com jUnit
Introdução a testes unitários com jUnitLeonardo Soares
 
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Robson Bittencourt
 
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTPPalestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTPPriscila Coelho S. Blauth
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
Pensando em java univali turbinando seus testes
Pensando em java univali   turbinando seus testesPensando em java univali   turbinando seus testes
Pensando em java univali turbinando seus testesSandro Giacomozzi
 

Was ist angesagt? (20)

Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
Automação de Testes
Automação de TestesAutomação de Testes
Automação de Testes
 
Teste Dirigido por Modelos
Teste Dirigido por ModelosTeste Dirigido por Modelos
Teste Dirigido por Modelos
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
JUnit Experience
JUnit ExperienceJUnit Experience
JUnit Experience
 
JUnit
JUnitJUnit
JUnit
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
Introdução a testes unitários com jUnit
Introdução a testes unitários com jUnitIntrodução a testes unitários com jUnit
Introdução a testes unitários com jUnit
 
J unit
J unitJ unit
J unit
 
Testes de Sistema
Testes de SistemaTestes de Sistema
Testes de Sistema
 
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
Desenvolvimento de builds automizados com Jenkins - Em Busca do build Perfeito!
 
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTPPalestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Junit
JunitJunit
Junit
 
Pensando em java univali turbinando seus testes
Pensando em java univali   turbinando seus testesPensando em java univali   turbinando seus testes
Pensando em java univali turbinando seus testes
 
Convenia - BPO Under the Hood
Convenia - BPO Under the HoodConvenia - BPO Under the Hood
Convenia - BPO Under the Hood
 

Ähnlich wie DevQA: Como testar os testes unitários?

Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geralpaulo peres
 
Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxRoberto Nunes
 
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
Fundamentos de Teste de Software - Dev in PF. por Aline ZaninFundamentos de Teste de Software - Dev in PF. por Aline Zanin
Fundamentos de Teste de Software - Dev in PF. por Aline ZaninDevInPF
 
Demystifying Automated Tests - [ PT-BR ]
Demystifying Automated Tests - [ PT-BR ]Demystifying Automated Tests - [ PT-BR ]
Demystifying Automated Tests - [ PT-BR ]oreasekadd
 
Verificação, validação e teste de software ágil
Verificação, validação e teste de software ágilVerificação, validação e teste de software ágil
Verificação, validação e teste de software ágilGilberto Gampert
 
Testes de Software
Testes de SoftwareTestes de Software
Testes de SoftwareCapgemini
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
INTRODUÇÃO AOS TESTES NO FRONT-END COM REACT JS E REACT NATIVE.pdf
INTRODUÇÃO AOS TESTES NO FRONT-END COM REACT JS E REACT NATIVE.pdfINTRODUÇÃO AOS TESTES NO FRONT-END COM REACT JS E REACT NATIVE.pdf
INTRODUÇÃO AOS TESTES NO FRONT-END COM REACT JS E REACT NATIVE.pdfRonaldAlves15
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IVJoão Lourenço
 

Ähnlich wie DevQA: Como testar os testes unitários? (20)

Será que testar é simples?
Será que testar é simples?Será que testar é simples?
Será que testar é simples?
 
Eng de testes
Eng de testesEng de testes
Eng de testes
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
 
Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptx
 
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
Fundamentos de Teste de Software - Dev in PF. por Aline ZaninFundamentos de Teste de Software - Dev in PF. por Aline Zanin
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
 
Demystifying Automated Tests - [ PT-BR ]
Demystifying Automated Tests - [ PT-BR ]Demystifying Automated Tests - [ PT-BR ]
Demystifying Automated Tests - [ PT-BR ]
 
Verificação, validação e teste de software ágil
Verificação, validação e teste de software ágilVerificação, validação e teste de software ágil
Verificação, validação e teste de software ágil
 
Testes de software
Testes de softwareTestes de software
Testes de software
 
Mini aula de teste de software
Mini aula de teste de softwareMini aula de teste de software
Mini aula de teste de software
 
Testes de Software
Testes de SoftwareTestes de Software
Testes de Software
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Teste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e AplicandoTeste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e Aplicando
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
INTRODUÇÃO AOS TESTES NO FRONT-END COM REACT JS E REACT NATIVE.pdf
INTRODUÇÃO AOS TESTES NO FRONT-END COM REACT JS E REACT NATIVE.pdfINTRODUÇÃO AOS TESTES NO FRONT-END COM REACT JS E REACT NATIVE.pdf
INTRODUÇÃO AOS TESTES NO FRONT-END COM REACT JS E REACT NATIVE.pdf
 
Fases testes
Fases testesFases testes
Fases testes
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IV
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 

Mehr von Kamilla Queiroz Xavier

PDA & Moving Motivators - Combine e Potencialize seus liderados.pptx
PDA & Moving Motivators - Combine e Potencialize seus liderados.pptxPDA & Moving Motivators - Combine e Potencialize seus liderados.pptx
PDA & Moving Motivators - Combine e Potencialize seus liderados.pptxKamilla Queiroz Xavier
 
LIDERAR - Relatos e Paradigma de uma nova Líder
LIDERAR - Relatos e Paradigma de uma nova LíderLIDERAR - Relatos e Paradigma de uma nova Líder
LIDERAR - Relatos e Paradigma de uma nova LíderKamilla Queiroz Xavier
 
PDA & Moving Motivators - Um reforço para o seu trabalho com PDI
PDA & Moving Motivators - Um reforço para o seu trabalho com PDIPDA & Moving Motivators - Um reforço para o seu trabalho com PDI
PDA & Moving Motivators - Um reforço para o seu trabalho com PDIKamilla Queiroz Xavier
 
[ O mercado] desenvolvimento de software [ detalhes & curiosidades]
[ O mercado] desenvolvimento de software [ detalhes & curiosidades][ O mercado] desenvolvimento de software [ detalhes & curiosidades]
[ O mercado] desenvolvimento de software [ detalhes & curiosidades]Kamilla Queiroz Xavier
 
Vamos conversar sobre transição de carreira?
Vamos conversar sobre transição de carreira?Vamos conversar sobre transição de carreira?
Vamos conversar sobre transição de carreira?Kamilla Queiroz Xavier
 
RETROSPEC - Agregando valor de uma forma lúdica e eficaz
RETROSPEC - Agregando valor de uma forma lúdica e eficazRETROSPEC - Agregando valor de uma forma lúdica e eficaz
RETROSPEC - Agregando valor de uma forma lúdica e eficazKamilla Queiroz Xavier
 
Gerenciamento de Projetos - [NÃO] existe receita a seguir
Gerenciamento de Projetos - [NÃO] existe receita a seguirGerenciamento de Projetos - [NÃO] existe receita a seguir
Gerenciamento de Projetos - [NÃO] existe receita a seguirKamilla Queiroz Xavier
 
Quality Assurance - Novos Caminhos para o teste de software
Quality Assurance - Novos Caminhos para o teste de softwareQuality Assurance - Novos Caminhos para o teste de software
Quality Assurance - Novos Caminhos para o teste de softwareKamilla Queiroz Xavier
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeKamilla Queiroz Xavier
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeKamilla Queiroz Xavier
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeKamilla Queiroz Xavier
 
DevQA - Da zona de conforto ao comprometimento com a qualidade
DevQA  - Da zona de conforto ao comprometimento com a qualidadeDevQA  - Da zona de conforto ao comprometimento com a qualidade
DevQA - Da zona de conforto ao comprometimento com a qualidadeKamilla Queiroz Xavier
 

Mehr von Kamilla Queiroz Xavier (20)

PDA & Moving Motivators - Combine e Potencialize seus liderados.pptx
PDA & Moving Motivators - Combine e Potencialize seus liderados.pptxPDA & Moving Motivators - Combine e Potencialize seus liderados.pptx
PDA & Moving Motivators - Combine e Potencialize seus liderados.pptx
 
LIDERAR - Relatos e Paradigma de uma nova Líder
LIDERAR - Relatos e Paradigma de uma nova LíderLIDERAR - Relatos e Paradigma de uma nova Líder
LIDERAR - Relatos e Paradigma de uma nova Líder
 
PDA & Moving Motivators - Um reforço para o seu trabalho com PDI
PDA & Moving Motivators - Um reforço para o seu trabalho com PDIPDA & Moving Motivators - Um reforço para o seu trabalho com PDI
PDA & Moving Motivators - Um reforço para o seu trabalho com PDI
 
Poder & Força do 1:1
Poder & Força do 1:1Poder & Força do 1:1
Poder & Força do 1:1
 
Do caos às métricas de fluxo
Do caos às métricas de fluxoDo caos às métricas de fluxo
Do caos às métricas de fluxo
 
[ O mercado] desenvolvimento de software [ detalhes & curiosidades]
[ O mercado] desenvolvimento de software [ detalhes & curiosidades][ O mercado] desenvolvimento de software [ detalhes & curiosidades]
[ O mercado] desenvolvimento de software [ detalhes & curiosidades]
 
Pizza Kanban Game
Pizza Kanban GamePizza Kanban Game
Pizza Kanban Game
 
Vamos conversar sobre transição de carreira?
Vamos conversar sobre transição de carreira?Vamos conversar sobre transição de carreira?
Vamos conversar sobre transição de carreira?
 
Agilidade, e agora?
Agilidade,  e agora?Agilidade,  e agora?
Agilidade, e agora?
 
RETROSPEC - Agregando valor de uma forma lúdica e eficaz
RETROSPEC - Agregando valor de uma forma lúdica e eficazRETROSPEC - Agregando valor de uma forma lúdica e eficaz
RETROSPEC - Agregando valor de uma forma lúdica e eficaz
 
Gerenciamento de Projetos - [NÃO] existe receita a seguir
Gerenciamento de Projetos - [NÃO] existe receita a seguirGerenciamento de Projetos - [NÃO] existe receita a seguir
Gerenciamento de Projetos - [NÃO] existe receita a seguir
 
DevOps é SIM uma questão de QA
DevOps é SIM uma questão de QADevOps é SIM uma questão de QA
DevOps é SIM uma questão de QA
 
Quality Assurance - Novos Caminhos para o teste de software
Quality Assurance - Novos Caminhos para o teste de softwareQuality Assurance - Novos Caminhos para o teste de software
Quality Assurance - Novos Caminhos para o teste de software
 
DevOps pela visão de QA
DevOps pela visão de QADevOps pela visão de QA
DevOps pela visão de QA
 
DevOps pela visão de QA
DevOps pela visão de QADevOps pela visão de QA
DevOps pela visão de QA
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a Qualidade
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a Qualidade
 
DevOps pela visão de QA
DevOps pela visão de QADevOps pela visão de QA
DevOps pela visão de QA
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a Qualidade
 
DevQA - Da zona de conforto ao comprometimento com a qualidade
DevQA  - Da zona de conforto ao comprometimento com a qualidadeDevQA  - Da zona de conforto ao comprometimento com a qualidade
DevQA - Da zona de conforto ao comprometimento com a qualidade
 

DevQA: Como testar os testes unitários?

  • 1. DevQA: Como testar os testes unitários? - por Kamilla Queiróz Já testou os seus testes unitários? Como saber se você escreveu corretamente os testes unitários? Isso pode ser mais uma tarefa para um DevQA! Ferramentas de qualidade de código, testes unitários, testes de integração, são vários os tipos de testes, mas como saber a qualidade deles? Como identificar se os testes unitários estão sendo efetivos? As ferramentas de cobertura são boas alternativas para saber se os testes estão utilizando uma certa linha de código, mas caso as variáveis sejam diferentes ou algumas condições mudem, como manter essa garantia? Quando é codificado um teste unitário, a preocupação é testar o resultado que está sendo esperado, mas havendo várias possibilidades de fluxos, como vamos garantir que o teste passou por todos os caminhos e não somente o happy day, ou seja, o caminho feliz ? Para esse tipo de abordagem utilizando uma técnica chamada Mutation Testing, onde é alterado o código original para introduzir falhas simples e verificamos se os testes unitários irão quebrar. Um dos métodos mais comuns para isso é o Bebuging, é isso mesmo, a escrita está correta. Ao invés de 'debugarmos' o código, ou seja, depurarmos procurando bugs, erros ou falhas, iremos introduzir erros na aplicação para testar a qualidade do teste unitário. Essas falhas ou erros que introduzimos no código, chamamos de Mutação. Cada linguagem tem uma estrutura e assim em linguagens orientadas a objeto temos os seguintes tipos de mutação possíveis: • Intra-method: dentro de métodos; • Inter-method: entre métodos; • Intra-class: entre métodos de uma classe; • Inter-class: entre métodos de classes diferentes; Temos uma variedade de operadores de mutação resultantes desses tipos de mutações possíveis. Abaixo, vamos analisar uma ferramenta que implementa alguns desses operadores. Para Java temos a ferramenta MuJava. Vejamos como essa ferramenta trabalha com um exemplo:
  • 2. Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao erro. Introduzimos uma mutação de operador aritmético. O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa qualidade, os testes unitários quebraram. Caso isso não ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja, precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os testes unitários quebrem, caso o programa original seja alterado. Em resumo, os testes de mutação tem a capacidade de revelar o quão adequados estão os testes unitários ou seus dados de teste. Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita calcularmos uma média objetiva de confiança dos casos de o cálculo em mais detalhes no Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao tação de operador aritmético. O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa qualidade, os testes unitários quebraram. ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja, precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os testes unitários quebrem, caso o programa original seja alterado. tação tem a capacidade de revelar o quão adequados estão os testes unitários ou seus dados de teste. Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita calcularmos uma média objetiva de confiança dos casos de testes unitários executados. Veja o cálculo em mais detalhes no artigo aqui. Nesse exemplo da imagem, temos uma mutação na linha 28 do código, afim de induzir ao O programa original sofreu alterações, ou seja, aplicamos um operador de mutação. Se executarmos os mesmos casos de testes originais e os testes unitários tiverem uma boa ocorra, temos o que o autor da ferramenta chama de mutações vivas, ou seja, precisamos adicionar mais testes unitários pra que possamos "matar" essa mutação, e os tação tem a capacidade de revelar o quão adequados estão os Com esses resultados em mãos, podemos realizar uma análise de mutantes, que possibilita testes unitários executados. Veja
  • 3. Tipos de mutações que podemos fazer no código: • Exclusões de declarações; • Duplicação ou inserção de declarações; • Negação de sub-expressões booleanas; • Substituições: - operadores aritméticos [+, -, *, / ]; - relações booleanas [==, !=, <, <=, >, >=]; - variáveis do mesmo escopo [tipos devem ser compatíveis]; Problemas Um dos problemas encontrados com essa abordagem é questão do tempo de execução dos testes. Pois iremos incluir alterações diversas no código, assim para cada alteração precisamos rodar todos os testes novamente, e com isso, o tempo de execução dos testes se eleva bastante. Uma solução para mitigar esse tempo, é a escolha correta dos operadores e aplicarmos nas classes de maior interesse. Em resumo: • Testar os testes ajuda na criação de suítes efetivas; • Apresenta um propósito educacional; • Mostra o quanto pode ser confiável uma suíte de testes; • Valida se alguma implementação está realmente bem testada. Links Externos MuJava Artigo: MuJava : An Automated Class Mutation System Publicado originalmente em O Tapioca: http://www.otapioca.com.br/?p=2239