Mutação no Diagrama de Classes

27
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

Transcript of Mutação no Diagrama de Classes

Page 1: Mutação no Diagrama de Classes

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

Page 2: Mutação no Diagrama de Classes

Roteiro

• Introdução

• Mutações Orientada a Objetos– Estudo de caso: exemplos de mutantes

• Conclusões

Page 3: Mutação no Diagrama de Classes

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.

Page 4: Mutação no Diagrama de Classes

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.

Page 5: Mutação no Diagrama de Classes

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

Page 6: Mutação no Diagrama de Classes

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

Page 7: Mutação no Diagrama de Classes

7

Inherit: adiciona herança

Page 8: Mutação no Diagrama de Classes

8

Inherit: omite relação de herança

Page 9: Mutação no Diagrama de Classes

9

Inherit: muda a direção de um relacionamento de herança

Page 10: Mutação no Diagrama de Classes

10

Associate: muda a direção de uma associação

Page 11: Mutação no Diagrama de Classes

11

Associate: muda agregação para associação

Page 12: Mutação no Diagrama de Classes

12

Associate: muda classes ligadas por associação

Page 13: Mutação no Diagrama de Classes

13

Associate: duas associações por uma associação

Page 14: Mutação no Diagrama de Classes

14

Associate: aponta associação para classe base

Page 15: Mutação no Diagrama de Classes

15

Associate: substitui agregação para a classe base

Page 16: Mutação no Diagrama de Classes

16

Object: chama função de um outro objeto associado com classe

Page 17: Mutação no Diagrama de Classes

17

Object: controle do pedal é chamado por Brake_pedal

Page 18: Mutação no Diagrama de Classes

18

Object: chama função de classe derivada

Page 19: Mutação no Diagrama de Classes

19

Member: chama função complementar

Page 20: Mutação no Diagrama de Classes

20

Member: chama função herdada da classe base

Page 21: Mutação no Diagrama de Classes

21

Member: troca chamada de funções da mesma classe

Page 22: Mutação no Diagrama de Classes

22

Member: troca chamada de funções herdadas

Page 23: Mutação no Diagrama de Classes

23

Member: acessa dado diferente no mesmo objeto

Page 24: Mutação no Diagrama de Classes

24

Access: substitui função public por protected

Page 25: Mutação no Diagrama de Classes

25

Access: substitui herança public por private

Page 26: Mutação no Diagrama de Classes

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.

Page 27: Mutação no Diagrama de Classes

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.