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

Preview:

Citation preview

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”

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

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

Biblioteca Util

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

• Deverá ser chamada pelo algoritmo do Slicer.

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);

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.

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);

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

parâmetro.

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

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);

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

determinado método.

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

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

determinado campo.

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

Recommended