Post on 07-Jan-2017
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– Estudo de caso: exemplos de mutantes
• Conclusões
3
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.
4
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.
5
Accelerator_pedal
<<virtual>> Press_in()<<virtual>> Release()
Engine
Current_revolution : intLoad_status : int
Link
Steering_wheel
Turn_left()Turn_right()
Head_axle
Turn_round()<<virtual>> Control()
1
1
1
1
Steering_system
Pedal
Gear-box
Gear_down()Gear_up()Set_load()Set_revolution()
1
1
1
1Gear_transmission
Brake_pedal
<<virtual>> Press_in()<<virtual>> Release)()
1 11 1
Head_braking_system
Rear_axle
<<virtual>> Control()
1..*
1
1..*
1
Drive_shaft
1..*
1
1..*
1Rear_braking_system
Chassis
11
11
1
1
1
1
1
1
1
1
11 11
1
1
1
1
1
1
1
1
1
1..*
1
1..*AxleCurrent_revolution : intDrive_shaft : int
Set_revolution()
Estudo de Caso: diagrama principal para o exemplo do carro
6
Light
<<virtual>> Switch_off()<<virtual>> Switch_on()
Car_unit
Head_lightIndicator_light
<<virtual>> Switch_on()<<virtual>> Switch_off()
Brake_pedal
Stop_light
1..*
1
1..*
1
Chassis1
1..*
1
1..*
1
2
1
2
Left_indicator 1
2
1
2
Right_indicator
1
1..*
1
1..*
Estudo de Caso: classes para o sistema de iluminação do carro
7
Inherit: adiciona herança
8
Inherit: omite relação de herança
9
Inherit: muda a direção de um relacionamento de herança
10
Associate: muda a direção de uma associação
11
Associate: muda agregação para associação
12
Associate: muda classes ligadas por associação
13
Associate: duas associações por uma associação
14
Associate: aponta associação para classe base
15
Associate: substitui agregação para a classe base
16
Object: chama função de um outro objeto associado com classe
17
Object: controle do pedal é chamado por Brake_pedal
18
Object: chama função de classe derivada
19
Member: chama função complementar
20
Member: chama função herdada da classe base
21
Member: troca chamada de funções da mesma classe
22
Member: troca chamada de funções herdadas
23
Member: acessa dado diferente no mesmo objeto
24
Access: substitui função public por protected
25
Access: substitui herança public por private
26
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.
27
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.