SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
Teste de mutação 
Luís Armando Bianchin 
Consultant Developer
Agenda 
● Problema 
● O que é teste de mutação? 
● Exemplos 
● Por que? 
● Ferramentas 
● Uso num projeto real
Problema 
● Os testes estão corretos? 
● Cobrem todos requisitos? 
● Qual a qualidade dos testes?
Problema 
● Cobertura de linhas apenas verifica execução de código 
● 100% de cobertura != boa suite de testes 
● Apenas testes "happy path" ou fáceis 
● Código apenas parcialmente testado
Os testes são 
capazes de detectar 
falhas?
Origem 
● Proposto na Academia ~ 1978 
● Yale University e Georgia Institute of technology 
● Hipótese do programador competente 
○ Programas quase perfeitos 
○ Falhas pequenas 
○ Pequenas alterações para correção
O que é teste de mutação? 
● Introduz falhas (mutações) na implementação 
○ Alterações semânticas 
● Roda os testes 
● Os testes realmente quebraram? 
● Mutações mortas ou vivas? 
● Os testes identificaram as falhas?
Exemplo 
Mutação de troca de && para || 
if (a && b) { 
c = 1; 
} else { 
c = 0; 
} 
if (a || b) { 
c = 1; 
} else { 
c = 0; 
}
Efeito colateral não testado 
@Test 
public void 
shouldFailWhenGivenFalse() { 
assertEquals("FAIL", foo(false)); 
} 
@Test 
public void 
shouldBeOkWhenGivenTrue() { 
assertEquals("OK", foo(true)); 
} 
public static String foo(boolean b) { 
if ( someThing(i) ) { 
doImportantBusinessLogic(); 
return "OK"; 
} 
return "FAIL"; 
} 
Não verifica se doImportantBusinessLogic foi chamado
Teste de limite incompleto 
@Test 
public void 
shouldReturnBarWhenGiven1() { 
assertEquals("bar", foo(1)); 
} 
@Test 
public void 
shouldReturnFooWhenGivenMinus1() { 
assertEquals("foo", foo(-1)); 
} 
public static String foo(int i) { 
if ( i >= 0 ) { 
return "foo"; 
} else { 
return "bar"; 
} 
} 
O comportamento quando i==0 não foi testado
Mockista Míope 
@Test 
public void 
shouldPerformActionGivenTrue() { 
foo(mockCollab, true); 
verify(mockCollab).doAction(); 
} 
@Test 
public void 
shouldNotPerformActionGivenFalse() { 
foo(mockCollab, false); 
verify(never(),mockCollab).doAction(); 
} 
public static String foo(Collaborator c, 
boolean b) { 
if ( b ) { 
return c.doAction(); 
} 
return "FOO"; 
} 
Retorno da função nunca foi testado
Operadores de mutação 
● Exclusão de declarações 
● Duplicação ou inserção de declarações 
● Negação de subexpressões booleanas 
● Substituições: 
○ Operadores aritiméticos (+, -, *, /) 
○ Relações booleanas (==, !=, <, <=, >, >=) 
○ Variáveis do mesmo escopo (tipos devem ser compatíveis) 
Escore de mutação = № de mutantes mortos / № total de 
mutantes
Por que? 
● Ajuda a criar suítes de teste efetivas 
● Propósito educacional 
● Mostra quanto pode-se confiar numa suite de teste 
○ Código legado 
● Ajuda na refatoração e na criação de testes de 
caracterização 
● Verificar se alguma implementação está bem testada
O que não resolve? 
● Caro para gerar e executar mutantes 
● Limitado aos operadores de mutação 
● Útil para teste unitários (doing things right) 
● Ainda devem existir testes funcionais (doing the right 
things)
Ferramentas 
● PIT for Java 
● Mutant for Ruby 
● PyMuTester for Python
PIT num projeto 
real
Fontes 
● http://pitest.org/ 
● http://solnic.eu/2013/01/23/mutation-testing-with-mutant. 
html 
● http://en.wikipedia.org/wiki/Mutation_testing 
● https://github.com/mbj/mutant 
● http://www.parasoft.com/products/article.jsp? 
articleId=291 
● http://www.techopedia.com/definition/20905/mutation-testing
Perguntas? 
Luís Armando Bianchin 
labianchin@thoughtworks.com

Mais conteúdo relacionado

Mais procurados

Mutation Testing: Testing your tests
Mutation Testing: Testing your testsMutation Testing: Testing your tests
Mutation Testing: Testing your testsStephen Leigh
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development CodeOps Technologies LLP
 
Statement Testing and Statement Coverage. ISTQB whitebox techniques with Test...
Statement Testing and Statement Coverage. ISTQB whitebox techniques with Test...Statement Testing and Statement Coverage. ISTQB whitebox techniques with Test...
Statement Testing and Statement Coverage. ISTQB whitebox techniques with Test...Radoslaw Smilgin
 
Norma ABNT NBR ISO/IEC 25000 - SQuaRE - Jefferson Andrade
Norma ABNT NBR ISO/IEC 25000 - SQuaRE - Jefferson AndradeNorma ABNT NBR ISO/IEC 25000 - SQuaRE - Jefferson Andrade
Norma ABNT NBR ISO/IEC 25000 - SQuaRE - Jefferson AndradeJefferson Andrade
 
Pairwise testing - Strategic test case design
Pairwise testing - Strategic test case designPairwise testing - Strategic test case design
Pairwise testing - Strategic test case designXBOSoft
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testingikhwanhayat
 
Test data management
Test data managementTest data management
Test data managementOnur Erdogan
 
Building a Test Automation Strategy for Success
Building a Test Automation Strategy for SuccessBuilding a Test Automation Strategy for Success
Building a Test Automation Strategy for SuccessLee Barnes
 
Setting up Center of Excellence for QA in Healthcare
Setting up Center of Excellence for QA in HealthcareSetting up Center of Excellence for QA in Healthcare
Setting up Center of Excellence for QA in HealthcareCitiusTech
 
Choosing the right QA strategy for a successful project
Choosing the right QA strategy for a successful projectChoosing the right QA strategy for a successful project
Choosing the right QA strategy for a successful projectThe Software House
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven DevelopmentJohn Blum
 
Test Automation Strategies For Agile
Test Automation Strategies For AgileTest Automation Strategies For Agile
Test Automation Strategies For AgileNaresh Jain
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 

Mais procurados (20)

Mutation Testing: Testing your tests
Mutation Testing: Testing your testsMutation Testing: Testing your tests
Mutation Testing: Testing your tests
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development
 
O papel do qa (testador) em um time ágil
O papel do qa (testador) em um time ágilO papel do qa (testador) em um time ágil
O papel do qa (testador) em um time ágil
 
Statement Testing and Statement Coverage. ISTQB whitebox techniques with Test...
Statement Testing and Statement Coverage. ISTQB whitebox techniques with Test...Statement Testing and Statement Coverage. ISTQB whitebox techniques with Test...
Statement Testing and Statement Coverage. ISTQB whitebox techniques with Test...
 
Norma ABNT NBR ISO/IEC 25000 - SQuaRE - Jefferson Andrade
Norma ABNT NBR ISO/IEC 25000 - SQuaRE - Jefferson AndradeNorma ABNT NBR ISO/IEC 25000 - SQuaRE - Jefferson Andrade
Norma ABNT NBR ISO/IEC 25000 - SQuaRE - Jefferson Andrade
 
İyi Bir Test Uzmanı Olmak İçin...
İyi Bir Test Uzmanı Olmak İçin...İyi Bir Test Uzmanı Olmak İçin...
İyi Bir Test Uzmanı Olmak İçin...
 
Pairwise testing - Strategic test case design
Pairwise testing - Strategic test case designPairwise testing - Strategic test case design
Pairwise testing - Strategic test case design
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
Test data management
Test data managementTest data management
Test data management
 
Building a Test Automation Strategy for Success
Building a Test Automation Strategy for SuccessBuilding a Test Automation Strategy for Success
Building a Test Automation Strategy for Success
 
Setting up Center of Excellence for QA in Healthcare
Setting up Center of Excellence for QA in HealthcareSetting up Center of Excellence for QA in Healthcare
Setting up Center of Excellence for QA in Healthcare
 
Choosing the right QA strategy for a successful project
Choosing the right QA strategy for a successful projectChoosing the right QA strategy for a successful project
Choosing the right QA strategy for a successful project
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
ISO/IEC 15504 SPICE + 33000
ISO/IEC 15504 SPICE + 33000ISO/IEC 15504 SPICE + 33000
ISO/IEC 15504 SPICE + 33000
 
Test Automation Strategies For Agile
Test Automation Strategies For AgileTest Automation Strategies For Agile
Test Automation Strategies For Agile
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 

Destaque

Transformação ágil ou transformação digital?
Transformação ágil ou transformação digital?Transformação ágil ou transformação digital?
Transformação ágil ou transformação digital?Carlos Felippe Cardoso
 
Você precisa de um scrum master, um agile coach ou nenhum dos dois
Você precisa de um scrum master, um agile coach ou nenhum dos dois Você precisa de um scrum master, um agile coach ou nenhum dos dois
Você precisa de um scrum master, um agile coach ou nenhum dos dois Carlos Felippe Cardoso
 
ScrumMaster 3.0 - Apresentação no Agile Trends
ScrumMaster 3.0 - Apresentação no Agile TrendsScrumMaster 3.0 - Apresentação no Agile Trends
ScrumMaster 3.0 - Apresentação no Agile TrendsCarlos Felippe Cardoso
 
Agile portfolio management - Tools that help to reduce demand
Agile portfolio management - Tools that help to reduce demandAgile portfolio management - Tools that help to reduce demand
Agile portfolio management - Tools that help to reduce demandCarlos Felippe Cardoso
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agiledayCarlos Felippe Cardoso
 
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redondaFerramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redondaCarlos Felippe Cardoso
 
Desenvolvimento Ágil e a mudança de mindset envolvida
Desenvolvimento Ágil e a mudança de mindset envolvidaDesenvolvimento Ágil e a mudança de mindset envolvida
Desenvolvimento Ágil e a mudança de mindset envolvidaCarlos Felippe Cardoso
 
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redondaFerramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redondaCarlos Felippe Cardoso
 
DevSecOps - Integrating Security in the Development Process (with memes) - Ma...
DevSecOps - Integrating Security in the Development Process (with memes) - Ma...DevSecOps - Integrating Security in the Development Process (with memes) - Ma...
DevSecOps - Integrating Security in the Development Process (with memes) - Ma...Magno Logan
 

Destaque (12)

Transformação ágil ou transformação digital?
Transformação ágil ou transformação digital?Transformação ágil ou transformação digital?
Transformação ágil ou transformação digital?
 
Você precisa de um scrum master, um agile coach ou nenhum dos dois
Você precisa de um scrum master, um agile coach ou nenhum dos dois Você precisa de um scrum master, um agile coach ou nenhum dos dois
Você precisa de um scrum master, um agile coach ou nenhum dos dois
 
Intro a Testes Automatizados
Intro a Testes AutomatizadosIntro a Testes Automatizados
Intro a Testes Automatizados
 
ScrumMaster 3.0 - Apresentação no Agile Trends
ScrumMaster 3.0 - Apresentação no Agile TrendsScrumMaster 3.0 - Apresentação no Agile Trends
ScrumMaster 3.0 - Apresentação no Agile Trends
 
Agile portfolio management - Tools that help to reduce demand
Agile portfolio management - Tools that help to reduce demandAgile portfolio management - Tools that help to reduce demand
Agile portfolio management - Tools that help to reduce demand
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
 
Testes automatizados - Agile Day
Testes automatizados -  Agile DayTestes automatizados -  Agile Day
Testes automatizados - Agile Day
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redondaFerramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
 
Desenvolvimento Ágil e a mudança de mindset envolvida
Desenvolvimento Ágil e a mudança de mindset envolvidaDesenvolvimento Ágil e a mudança de mindset envolvida
Desenvolvimento Ágil e a mudança de mindset envolvida
 
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redondaFerramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
Ferramentas para auxiliar na gestão de portfolio e fazer a bola chegar redonda
 
DevSecOps - Integrating Security in the Development Process (with memes) - Ma...
DevSecOps - Integrating Security in the Development Process (with memes) - Ma...DevSecOps - Integrating Security in the Development Process (with memes) - Ma...
DevSecOps - Integrating Security in the Development Process (with memes) - Ma...
 

Semelhante a Teste de Mutação: Cobertura Efetiva de Testes Unitários em

Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...Fabio Souza
 
Como trabalhar com código legado
Como trabalhar com código legadoComo trabalhar com código legado
Como trabalhar com código legadoSidney Filho
 
Polimorfismo
PolimorfismoPolimorfismo
PolimorfismoCaveiras
 

Semelhante a Teste de Mutação: Cobertura Efetiva de Testes Unitários em (6)

Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Resumo de ...
 
02 controle de fluxo
02   controle de fluxo02   controle de fluxo
02 controle de fluxo
 
Testing sucks
Testing sucksTesting sucks
Testing sucks
 
Como trabalhar com código legado
Como trabalhar com código legadoComo trabalhar com código legado
Como trabalhar com código legado
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 

Teste de Mutação: Cobertura Efetiva de Testes Unitários em

  • 1. Teste de mutação Luís Armando Bianchin Consultant Developer
  • 2. Agenda ● Problema ● O que é teste de mutação? ● Exemplos ● Por que? ● Ferramentas ● Uso num projeto real
  • 3. Problema ● Os testes estão corretos? ● Cobrem todos requisitos? ● Qual a qualidade dos testes?
  • 4. Problema ● Cobertura de linhas apenas verifica execução de código ● 100% de cobertura != boa suite de testes ● Apenas testes "happy path" ou fáceis ● Código apenas parcialmente testado
  • 5. Os testes são capazes de detectar falhas?
  • 6. Origem ● Proposto na Academia ~ 1978 ● Yale University e Georgia Institute of technology ● Hipótese do programador competente ○ Programas quase perfeitos ○ Falhas pequenas ○ Pequenas alterações para correção
  • 7. O que é teste de mutação? ● Introduz falhas (mutações) na implementação ○ Alterações semânticas ● Roda os testes ● Os testes realmente quebraram? ● Mutações mortas ou vivas? ● Os testes identificaram as falhas?
  • 8. Exemplo Mutação de troca de && para || if (a && b) { c = 1; } else { c = 0; } if (a || b) { c = 1; } else { c = 0; }
  • 9. Efeito colateral não testado @Test public void shouldFailWhenGivenFalse() { assertEquals("FAIL", foo(false)); } @Test public void shouldBeOkWhenGivenTrue() { assertEquals("OK", foo(true)); } public static String foo(boolean b) { if ( someThing(i) ) { doImportantBusinessLogic(); return "OK"; } return "FAIL"; } Não verifica se doImportantBusinessLogic foi chamado
  • 10. Teste de limite incompleto @Test public void shouldReturnBarWhenGiven1() { assertEquals("bar", foo(1)); } @Test public void shouldReturnFooWhenGivenMinus1() { assertEquals("foo", foo(-1)); } public static String foo(int i) { if ( i >= 0 ) { return "foo"; } else { return "bar"; } } O comportamento quando i==0 não foi testado
  • 11. Mockista Míope @Test public void shouldPerformActionGivenTrue() { foo(mockCollab, true); verify(mockCollab).doAction(); } @Test public void shouldNotPerformActionGivenFalse() { foo(mockCollab, false); verify(never(),mockCollab).doAction(); } public static String foo(Collaborator c, boolean b) { if ( b ) { return c.doAction(); } return "FOO"; } Retorno da função nunca foi testado
  • 12. Operadores de mutação ● Exclusão de declarações ● Duplicação ou inserção de declarações ● Negação de subexpressões booleanas ● Substituições: ○ Operadores aritiméticos (+, -, *, /) ○ Relações booleanas (==, !=, <, <=, >, >=) ○ Variáveis do mesmo escopo (tipos devem ser compatíveis) Escore de mutação = № de mutantes mortos / № total de mutantes
  • 13. Por que? ● Ajuda a criar suítes de teste efetivas ● Propósito educacional ● Mostra quanto pode-se confiar numa suite de teste ○ Código legado ● Ajuda na refatoração e na criação de testes de caracterização ● Verificar se alguma implementação está bem testada
  • 14. O que não resolve? ● Caro para gerar e executar mutantes ● Limitado aos operadores de mutação ● Útil para teste unitários (doing things right) ● Ainda devem existir testes funcionais (doing the right things)
  • 15. Ferramentas ● PIT for Java ● Mutant for Ruby ● PyMuTester for Python
  • 17. Fontes ● http://pitest.org/ ● http://solnic.eu/2013/01/23/mutation-testing-with-mutant. html ● http://en.wikipedia.org/wiki/Mutation_testing ● https://github.com/mbj/mutant ● http://www.parasoft.com/products/article.jsp? articleId=291 ● http://www.techopedia.com/definition/20905/mutation-testing
  • 18. Perguntas? Luís Armando Bianchin labianchin@thoughtworks.com