Mutação no Diagrama de Classes

Post on 07-Jan-2017

247 views 10 download

Transcript of 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

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.