12
Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Embed Size (px)

Citation preview

Page 1: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Teste e Depuração de Software

Biblioteca Utilitária para projeto de disciplina

Filipe Almeida (faa)

Page 2: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

1ª Parte do Projeto

Reproduzir o algoritmo descrito no paper "Change-Based Random Testing with Static

Program Slices”

Page 3: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Algoritmo do Slicer01: Set<Member> slice(Set<Member> goals) :02: Set<Member> result = Ø03: Set<Member> wset = {m | m Є goals}04: while wset != Ø do05: Member entry = wset.remove(0)06: if entry Є result then continue fi07: if entry is-public then08: // add entry to slice09: result.add(entry)10: // generate input directly. add all factories11: foreach Type t in entry.paramTypes() do12: foreach Member m Є13: {f | f Є factories(v) ˄ (v, t) Є SUB} do14: wset.add(m) done15: done16: // m writes to a field that entry reads17: foreach Member m Є18: {w | w Є assigns(f) ˄ f Є reads(entry)} do19: wset.add(m) done20: fi21: // generate input indirectly from callers.22: foreach Method m Є23: {x | (x, entry) Є CG} do24: wset.add(m) done25: done26: return result

Page 4: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Algoritmo do Slicer01: Set<Member> slice(Set<Member> goals) :02: Set<Member> result = Ø03: Set<Member> wset = {m | m Є goals}04: while wset != Ø do05: Member entry = wset.remove(0)06: if entry Є result then continue fi07: if entry is-public then08: // add entry to slice09: result.add(entry)10: // generate input directly. add all factories11: foreach Type t in entry.paramTypes() do12: foreach Member m Є13: {f | f Є factories(v) ˄ (v, t) Є SUB} do14: wset.add(m) done15: done16: // m writes to a field that entry reads17: foreach Member m Є18: {w | w Є assigns(f) ˄ f Є reads(entry)} do19: wset.add(m) done20: fi21: // generate input indirectly from callers.22: foreach Method m Є23: {x | (x, entry) Є CG} do24: wset.add(m) done25: done26: return result

Page 5: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Biblioteca Util

• Reúne as principais funcionalidades relacionadas à extração de informações de um programa;

• Deverá ser chamada pelo algoritmo do Slicer.

Page 6: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Classe StaticInfo• Nela encontram-se as principais

funcionalidades da biblioteca Util.• Para instanciá-la, devem ser passados como

parâmetros:– O classpath do programa;– Uma lista contendo os nomes das classes do

programa que serão consideradas.

StaticInfo staticInfo = new StaticInfo(new ClassPath(“”), classNames);

Page 7: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Método factories

As factories de um tipo T são:- Todos os construtores de T;- Todos os métodos que retornam uma instância de T.

Page 8: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Método factories

• O método factories retorna:– Todas as factories públicas de um tipo.

As factories de um tipo T são:- Todos os construtores de T;- Todos os métodos que retornam uma instância de T.

List<Member> factories = staticInfo.factories(clazz);

Page 9: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Método subtypes• Retorna:– Todos os subtipos do tipo passado como

parâmetro.

List<Class> subtypes = staticInfo.subtypes(clazz);

Page 10: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Método callers• Retorna:– Todos os métodos que chamam transitivamente o

método ou construtor passado como parâmetro.

List<Method> callers = staticInfo.callers(member);

Page 11: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Método fieldsRead• Retorna:– Todos os campos que são lidos por um

determinado método.

List<Field> fields = staticInfo.fieldsRead(method);

Page 12: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)

Método writerMethods• Retorna:– Todos os métodos que escrevem em um

determinado campo.

List<Method> methods = staticInfo.writerMethods(field);