Top Banner
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
27

Mutação no Diagrama de Classes

Jan 07, 2017

Download

Documents

ngoxuyen
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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.