SlideShare uma empresa Scribd logo
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

Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1
alinebiath
 
DevOps with GitHub Actions
DevOps with GitHub ActionsDevOps with GitHub Actions
DevOps with GitHub Actions
Nilesh Gule
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de Software
Camilo Almendra
 
Teste de software
Teste de softwareTeste de software
Teste de software
Rafael Sanches
 
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
Mariana Elisa Moisés , CTFL-AT,MBA
 
Jira-Zephyr_Training.pptx
Jira-Zephyr_Training.pptxJira-Zephyr_Training.pptx
Jira-Zephyr_Training.pptx
DhananjayaDeevi
 
Git-flow workflow and pull-requests
Git-flow workflow and pull-requestsGit-flow workflow and pull-requests
Git-flow workflow and pull-requests
Bartosz Kosarzycki
 
Requirements Engineering @ Agile
Requirements Engineering @ AgileRequirements Engineering @ Agile
Requirements Engineering @ Agile
Girish Khemani
 
Quality Assurance Made Easy in JIRA - Xpand IT & Atlassian JAM Sessions 2017
Quality Assurance Made Easy in JIRA - Xpand IT & Atlassian JAM Sessions 2017Quality Assurance Made Easy in JIRA - Xpand IT & Atlassian JAM Sessions 2017
Quality Assurance Made Easy in JIRA - Xpand IT & Atlassian JAM Sessions 2017
Xpand IT
 
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Simplilearn
 
Container based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsContainer based CI/CD on GitHub Actions
Container based CI/CD on GitHub Actions
Casey Lee
 
CICD Pipeline Using Github Actions
CICD Pipeline Using Github ActionsCICD Pipeline Using Github Actions
CICD Pipeline Using Github Actions
Kumar Shìvam
 
Xray for Jira - Overview
Xray for Jira - OverviewXray for Jira - Overview
Xray for Jira - Overview
Xpand IT
 
Agile Testing Strategy
Agile Testing StrategyAgile Testing Strategy
Agile Testing Strategytharindakasun
 
Info manual testing questions
Info manual testing questionsInfo manual testing questions
Info manual testing questions
Sandeep
 
Guide to Agile testing
Guide to Agile testingGuide to Agile testing
Guide to Agile testing
Subrahmaniam S.R.V
 
Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!
Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!
Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!
Applitools
 
Playwright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern Web
Applitools
 
Gitlab flow solo
Gitlab flow soloGitlab flow solo
Gitlab flow solo
viniciusban
 
An Introduction To Automated API Testing
An Introduction To Automated API TestingAn Introduction To Automated API Testing
An Introduction To Automated API Testing
Sauce Labs
 

Mais procurados (20)

Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1
 
DevOps with GitHub Actions
DevOps with GitHub ActionsDevOps with GitHub Actions
DevOps with GitHub Actions
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de Software
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
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
 
Jira-Zephyr_Training.pptx
Jira-Zephyr_Training.pptxJira-Zephyr_Training.pptx
Jira-Zephyr_Training.pptx
 
Git-flow workflow and pull-requests
Git-flow workflow and pull-requestsGit-flow workflow and pull-requests
Git-flow workflow and pull-requests
 
Requirements Engineering @ Agile
Requirements Engineering @ AgileRequirements Engineering @ Agile
Requirements Engineering @ Agile
 
Quality Assurance Made Easy in JIRA - Xpand IT & Atlassian JAM Sessions 2017
Quality Assurance Made Easy in JIRA - Xpand IT & Atlassian JAM Sessions 2017Quality Assurance Made Easy in JIRA - Xpand IT & Atlassian JAM Sessions 2017
Quality Assurance Made Easy in JIRA - Xpand IT & Atlassian JAM Sessions 2017
 
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
Git Tutorial For Beginners | What is Git and GitHub? | DevOps Tools | DevOps ...
 
Container based CI/CD on GitHub Actions
Container based CI/CD on GitHub ActionsContainer based CI/CD on GitHub Actions
Container based CI/CD on GitHub Actions
 
CICD Pipeline Using Github Actions
CICD Pipeline Using Github ActionsCICD Pipeline Using Github Actions
CICD Pipeline Using Github Actions
 
Xray for Jira - Overview
Xray for Jira - OverviewXray for Jira - Overview
Xray for Jira - Overview
 
Agile Testing Strategy
Agile Testing StrategyAgile Testing Strategy
Agile Testing Strategy
 
Info manual testing questions
Info manual testing questionsInfo manual testing questions
Info manual testing questions
 
Guide to Agile testing
Guide to Agile testingGuide to Agile testing
Guide to Agile testing
 
Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!
Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!
Cypress, Playwright, Selenium, or WebdriverIO? Let the Engineers Speak!
 
Playwright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern Web
 
Gitlab flow solo
Gitlab flow soloGitlab flow solo
Gitlab flow solo
 
An Introduction To Automated API Testing
An Introduction To Automated API TestingAn Introduction To Automated API Testing
An Introduction To Automated API Testing
 

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
 
Intro a Testes Automatizados
Intro a Testes AutomatizadosIntro a Testes Automatizados
Intro a Testes Automatizados
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 Trends
Carlos 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 demand
Carlos 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 agileday
Carlos Felippe Cardoso
 
Testes automatizados - Agile Day
Testes automatizados -  Agile DayTestes automatizados -  Agile Day
Testes automatizados - Agile Day
Carlos Felippe Cardoso
 
Coding dojo
Coding dojoCoding 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
Carlos 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 envolvida
Carlos 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 redonda
Carlos 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

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
 
02 controle de fluxo
02   controle de fluxo02   controle de fluxo
02 controle de fluxo
Artur Todeschini
 
Testing sucks
Testing sucksTesting sucks
Testing sucks
Leonardo Balter
 
Como trabalhar com código legado
Como trabalhar com código legadoComo trabalhar com código legado
Como trabalhar com código legado
Sidney Filho
 
Polimorfismo
PolimorfismoPolimorfismo
PolimorfismoCaveiras
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
José Volmei Dal Prá Junior
 

Semelhante a Teste de Mutação (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

  • 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