Upload
mario-amarante-bentes
View
215
Download
2
Embed Size (px)
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);