○ Utiliza conhecimento sobre defeitos típicos cometidos durante o processo de desenvolvimento de software para derivar os requisitos de teste ○ Hipótese: ■ Programador Competente ● Programadores criam programas corretos ou que diferem de um programa correto por uma combinação de defeitos simples ■ Efeito de Acoplamento ● Casos de testes capazes de detectar erros simples também são capazes de revelar erros mais complexos ○ Critérios ■ Semeadura de Defeitos ■ Teste de mutação ● É o teste dos testes, ou seja, verifica quais casos de testes são mais eficazes ● Inserir defeitos artificiais (mutantes) no código para avaliar a qualidade do código de teste ● Conjunto de casos de teste eficazes ○ Ao menos um dos casos de teste falha ao executar o conjunto de teste contra os mutantes ● O objetivo é matar todos os mutantes possíveis e deixar o escore de mutação igual a 1. 𝑚𝑢𝑡𝑎𝑛𝑡𝑒𝑠 𝑚𝑜𝑟𝑡𝑜𝑠 ● escore de mutação = 𝑚𝑢𝑡𝑎𝑛𝑡𝑒𝑠 𝑣𝑖𝑣𝑜𝑠 − 𝑚𝑢𝑡𝑎𝑛𝑡𝑒𝑠 𝑒𝑞𝑢𝑖𝑣𝑎𝑙𝑒𝑛𝑡𝑒𝑠 ● Para realizar o teste de mutação é preciso seguir os seguintes passos: ○ Execução do programa com os casos de teste ○ Geração dos mutantes ■ Operadores de mutação ● São regras que definem o tipo de alteração sintática que deve ser feita para a criação dos mutantes ● Mudanças são bastante similares a defeitos típicos cometidos ● Operadores dependem da linguagem alvo ○ Execução dos mutantes com os casos de teste ■ A partir da execução dos mutantes se tenta distinguir eles do programa original. ■ Quando um mutante é detectado ele vira um mutante morto ○ Análise dos mutantes ■ Em alguns casos não é possível distinguir mutantes, estes casos são registrados como mutantes equivalentes. ● Limitações: ○ Determinar se um programa é equivalente ao outro é um problema indecidível ○ O número de mutantes a serem executados pode ser muito alto