Mutação Orientada a Objeto para Assegurar a Qualidade de Testes Baseado no Artigo: Object-Oriented Mutation to Asses the Quality of Tests Anna Derezinska Junho de 2004
Roteiro Introdução Mutações Orientada a Objetos Conclusões Estudo de caso: exemplos de mutantes Conclusões
Introdução No teste de mutação pequenas modificações sintáticas são introduzidas em um programa P. Objetivo: investigar resultados de operadores de mutação OO aplicados às especificações de classe UML e ao código fonte.
Mutações Orientada a Objetos Grupos de operadores de mutação OO: Inherit (Inh) – Muda a classe base ou omite a relação de herança; Associate (Ass) – Muda a associação entre classes; Object (Obj) – Acessa um membro em outro objeto da mesma classe ou membro em outra classe da mesma hierarquia de herança; Member (Mem) – Acessa dado ou função diferente do objeto; Access (Acc) – Muda o especificador de acesso relacionados ao dado, às funções, ou às classes em um relacionamento de herança.
Estudo de Caso: diagrama principal para o exemplo do carro
Estudo de Caso: classes para o sistema de iluminação do carro
Inherit: adiciona herança
Inherit: omite relação de herança
Inherit: muda a direção de um relacionamento de herança
Associate: muda a direção de uma associação
Associate: muda agregação para associação
Associate: muda classes ligadas por associação
Associate: duas associações por uma associação
Associate: aponta associação para classe base
Associate: substitui agregação para a classe base
Object: chama função de um outro objeto associado com classe
Object: controle do pedal é chamado por Brake_pedal
Object: chama função de classe derivada
Member: chama função complementar
Member: chama função herdada da classe base
Member: troca chamada de funções da mesma classe
Member: troca chamada de funções herdadas
Member: acessa dado diferente no mesmo objeto
Access: substitui função public por protected
Access: substitui herança public por private
Mutações OO Grupos Inherit, Associate e Access foram aplicados para especificações UML. Grupos Object e Member foram aplicados diretamente no código. Alguns mutantes UML invalidados (compilador) Mutante equivalente. Casos de teste: conjunto básico de testes funcionais + teste adicional. Cobertura: 83% : funções; 85%: linhas de código.
Conclusões Operadores melhores: grupos Object e Member. Mutantes que mudam relação de herança (Inherit) ou tipo de relacionamento de associações são mais adequados na especificação.