Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida...
-
Upload
mario-amarante-bentes -
Category
Documents
-
view
215 -
download
2
Transcript of Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida...
![Page 1: Teste e Depuração de Software Biblioteca Utilitária para projeto de disciplina Filipe Almeida (faa)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/1.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/2.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/3.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/4.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/5.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/6.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/7.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/8.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/9.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/10.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/11.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022082901/5706384b1a28abb8238f5c9c/html5/thumbnails/12.jpg)
Método writerMethods• Retorna:– Todos os métodos que escrevem em um
determinado campo.
List<Method> methods = staticInfo.writerMethods(field);