Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions README-Grupo4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
Readme

Localização dos arquivos:
Seguimos os paths originais, ou seja,
os testes estão em src-tests(rwsets.database, rwsets.cqueue, rwsets.forest e rwsets.pgproj),
os jars estão em example-apps(database.jar, cqueue.jar, forest.jar e pgproj.jar) e
as fontes estão em example-apps/src, em pastas com os mesmos nomes dos jars.

----------------------------------------------------
Testes:
Nossos testes se encontram no AllTestsGrupo4

#### known-bug #####################################################33
-Ao rodar os testes no pgproj encontramos uma possível falha no rwsets.

No primeiro teste(test0), o JUnit retorna um NullPointerException
-Para analisar este erro adicionamos um System.out
na linha 318 do arquivo src/depend/MethodDependencyAnalysis.java
->System.out.println(fr.getDeclaringClass());
-Esse System.out visa retornar o nome da classe que será passado para a chamada onde está ocorrendo a exceção.
-Com vários testes diferentes percebemos que a execução sempre para quando o rwsets tenta encontrar a classe Ponto dentro de projpg.

Fizemos então um segundo teste (test1) que, ao ser rodado, evidencia o erro com um RuntimeException decorrente de não conseguir encontrar a classe.
-O erro não deveria ocorrer pois a classe Lprojpg/Ponto existe.
(apesar de termos usado pgproj no nome das pastas, o nome da package do projeto é projpg)
Binary file added example-apps/cqueue.jar
Binary file not shown.
Binary file added example-apps/database.jar
Binary file not shown.
Binary file added example-apps/forest.jar
Binary file not shown.
Binary file added example-apps/pgproj.jar
Binary file not shown.
17 changes: 17 additions & 0 deletions src-tests/rwsets/AllTestsGrupo4.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package rwsets;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({

rwsets.database.TestDatabase.class,
rwsets.cqueue.TestCqueue.class,
rwsets.forest.TestForest.class,
rwsets.pgproj.TestPgproj.class

})


public class AllTestsGrupo4 {}
76 changes: 76 additions & 0 deletions src-tests/rwsets/cqueue/TestCqueue.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package rwsets.cqueue;


import japa.parser.ParseException;

import java.io.File;
import java.io.IOException;
import java.util.Properties;

import org.junit.Assert;
import org.junit.Test;

import rwsets.Helper;

import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.classLoader.IMethod;
import com.ibm.wala.shrikeCT.InvalidClassFileException;
import com.ibm.wala.util.CancelException;
import com.ibm.wala.util.WalaException;
import com.ibm.wala.util.io.CommandLine;
import com.ibm.wala.util.warnings.Warnings;

import depend.MethodDependencyAnalysis;
import depend.util.Util;
import depend.util.graph.SimpleGraph;

public class TestCqueue {

String USER_DIR = System.getProperty("user.dir");
String SEP = System.getProperty("file.separator");
String EXAMPLES = USER_DIR + SEP + "example-apps";
String TEST_DIR = USER_DIR + SEP + "src-tests";
String EXAMPLES_SRC = EXAMPLES + SEP + "src";
String EXAMPLES_JAR = EXAMPLES;
String RESOURCES_DIR = USER_DIR + SEP + "dat";
String cqueuejar = EXAMPLES_JAR + SEP + "cqueue.jar";

@Test
public void testPopDependency() throws IOException, WalaException, CancelException, ParseException, InvalidClassFileException {

String strCompUnit = EXAMPLES_SRC + SEP + "cqueue/Pile.java";
//filter vê se tem este nome na package
String filter = "comp2";

Assert.assertTrue((new File(strCompUnit)).exists());
Assert.assertTrue((new File(cqueuejar)).exists());

//line e de onde a análise e iniciada
String line = "if(this.next == null) return new Pile();";
SimpleGraph sg = depend.Main.analyze(cqueuejar, filter, strCompUnit, line);

String expectedResultFile = TEST_DIR + SEP + "rwsets/cqueue/TestCqueue.testpop.data";
Assert.assertEquals(Helper.readFile(expectedResultFile), sg.toDotString());
}

@Test
public void testPushbackDependency() throws IOException, WalaException, CancelException, ParseException, InvalidClassFileException {


String strCompUnit = EXAMPLES_SRC + SEP + "cqueue/Queue.java";
//filter vê se tem este nome na package
String filter = "comp2";

Assert.assertTrue((new File(strCompUnit)).exists());
Assert.assertTrue((new File(cqueuejar)).exists());

//line e de onde a análise e iniciada
String line = "if (this.n == -1) {";
SimpleGraph sg = depend.Main.analyze(cqueuejar, filter, strCompUnit, line);

String expectedResultFile = TEST_DIR + SEP + "rwsets/cqueue/TestCqueue.testqueue.data";
Assert.assertEquals(Helper.readFile(expectedResultFile), sg.toDotString());

}

}
10 changes: 10 additions & 0 deletions src-tests/rwsets/cqueue/TestCqueue.testpop.data
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
digraph "DirectedGraph" {
graph [concentrate = true];
center=true;
fontsize=6;
node [ color=blue,shape="box"fontsize=6,fontcolor=black,fontname=Arial];
edge [ color=black,fontsize=6,fontcolor=black,fontname=Arial];
"comp2/Pile comp2/Pile.pop()"[color="red", fontsize="6", fontname="Arial"];
"comp2/Pile comp2/Pile.push(int)" -> "comp2/Pile comp2/Pile.pop()" [label="comp2/Pile comp2/Pile.next : 20" ]
"void comp2/Pile.<init>()" -> "comp2/Pile comp2/Pile.pop()" [label="comp2/Pile comp2/Pile.next : 10" ]
}
15 changes: 15 additions & 0 deletions src-tests/rwsets/cqueue/TestCqueue.testqueue.data
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
digraph "DirectedGraph" {
graph [concentrate = true];
center=true;
fontsize=6;
node [ color=blue,shape="box"fontsize=6,fontcolor=black,fontname=Arial];
edge [ color=black,fontsize=6,fontcolor=black,fontname=Arial];
"comp2/Queue comp2/Queue.pushback(int)"[color="red", fontsize="6", fontname="Arial"];
"comp2/Queue comp2/Queue.pop()" -> "comp2/Queue comp2/Queue.pushback(int)" [label="comp2/Queue comp2/Queue.last : 35" ]
"comp2/Queue comp2/Queue.pushback(int)" -> "comp2/Queue comp2/Queue.pushback(int)" [label="comp2/Queue comp2/Queue.last : 18" ]
"comp2/Queue comp2/Queue.pushback(int)" -> "comp2/Queue comp2/Queue.pushback(int)" [label="comp2/Queue comp2/Queue.last : 24" ]
"comp2/Queue comp2/Queue.pushback(int)" -> "comp2/Queue comp2/Queue.pushback(int)" [label="int comp2/Queue.n : 17" ]
"comp2/Queue comp2/Queue.pushback(int)" -> "comp2/Queue comp2/Queue.pushback(int)" [label="int comp2/Queue.n : 22" ]
"void comp2/Queue.<init>()" -> "comp2/Queue comp2/Queue.pushback(int)" [label="comp2/Queue comp2/Queue.last : 12" ]
"void comp2/Queue.<init>()" -> "comp2/Queue comp2/Queue.pushback(int)" [label="int comp2/Queue.n : 10" ]
}
130 changes: 130 additions & 0 deletions src-tests/rwsets/database/TestDatabase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
package rwsets.database;



import japa.parser.ParseException;

import java.io.File;
import java.io.IOException;
import java.util.Properties;

import org.junit.Assert;
import org.junit.Test;

import rwsets.Helper;

import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.classLoader.IMethod;
import com.ibm.wala.shrikeCT.InvalidClassFileException;
import com.ibm.wala.util.CancelException;
import com.ibm.wala.util.WalaException;
import com.ibm.wala.util.io.CommandLine;
import com.ibm.wala.util.warnings.Warnings;

import depend.MethodDependencyAnalysis;
import depend.util.Util;
import depend.util.graph.SimpleGraph;

public class TestDatabase {

String USER_DIR = System.getProperty("user.dir");
String SEP = System.getProperty("file.separator");
String EXAMPLES = USER_DIR + SEP + "example-apps";
String TEST_DIR = USER_DIR + SEP + "src-tests";
String EXAMPLES_SRC = EXAMPLES + SEP + "src";
String EXAMPLES_JAR = EXAMPLES;
String RESOURCES_DIR = USER_DIR + SEP + "dat";
String databasejar = EXAMPLES_JAR + SEP + "database.jar";

@Test
public void testAddDependency() throws IOException, WalaException, CancelException, ParseException, InvalidClassFileException {

String strCompUnit = EXAMPLES_SRC + SEP + "database/RepFunc.java";

//filter vê se tem este nome na package
String filter = "comp";

Assert.assertTrue((new File(strCompUnit)).exists());
Assert.assertTrue((new File(databasejar)).exists());

//line e de onde a análise e iniciada
String line = " if (repList.insertCheck(repList, f)) {";
SimpleGraph sg = depend.Main.analyze(databasejar, filter, strCompUnit, line);

String expectedResultFile = TEST_DIR + SEP + "rwsets/database/TestDatabase.testAdd.data";
Assert.assertEquals(Helper.readFile(expectedResultFile), sg.toDotString());
}

@Test
public void testAnalysisWithLineContents() throws Exception {
String strCompUnit = EXAMPLES_SRC + SEP + "database/RepFunc.java";
String exclusionFile = RESOURCES_DIR + SEP + "ExclusionAllJava.txt";
String exclusionFileForCallGraph = RESOURCES_DIR + SEP + "ExclusionForCallGraph.txt";
String databasejar = EXAMPLES_JAR + SEP + "database.jar";
String targetClass = "Lcomp/RepFunc";
String targetMethod = "addFuncRepLista(Lcomp/Funcionario;)Z";

// checks
Assert.assertTrue((new File(strCompUnit)).exists());
Assert.assertTrue((new File(exclusionFile)).exists());
Assert.assertTrue((new File(exclusionFileForCallGraph)).exists());
Assert.assertTrue((new File(databasejar)).exists());


String[] args = new String[] {
"-appJar=" + databasejar,
"-printWalaWarnings=" + false,
"-exclusionFile=" + exclusionFile,
"-exclusionFileForCallGraph=" + exclusionFileForCallGraph,
"-dotPath=" + "/usr/bin/dot",
"-appPrefix=" + "comp",
"-listAppClasses=" + false,
"-listAllClasses=" + false,
"-listAppMethods=" + false,
"-genCallGraph=" + false,
"-measureTime=" + false,
"-reportType=" + "list",
"-targetClass=" + targetClass,
"-targetMethod=" + targetMethod,
"-targetLine=33"};

// reading and saving command-line properties
Properties p = CommandLine.parse(args);
Util.setProperties(p);

// clearing warnings from WALA
Warnings.clear();

MethodDependencyAnalysis mda = new MethodDependencyAnalysis(p);

// find informed class
IClass clazz = depend.Main.findClass(mda);
// find informed method
IMethod method = depend.Main.findMethod(clazz);
SimpleGraph sg = depend.Main.run(mda, method);

String expectedResultFile = TEST_DIR + SEP + "rwsets/database/TestDatabase.testAnalysisWithLineContents.data";
Assert.assertEquals(Helper.readFile(expectedResultFile), sg.toString());
}

@Test
public void testFSearchDepedency() throws IOException, WalaException, CancelException, ParseException, InvalidClassFileException {

String strCompUnit = EXAMPLES_SRC + SEP + "database/List.java";

//filter vê se tem este nome na package
String filter = "comp";

Assert.assertTrue((new File(strCompUnit)).exists());
Assert.assertTrue((new File(databasejar)).exists());

//line e de onde a análise e iniciada
String line = " if (lista == null || lista.func == null) {";
SimpleGraph sg = depend.Main.analyze(databasejar, filter, strCompUnit, line);

String expectedResultFile = TEST_DIR + SEP + "rwsets/database/TestDatabase.testFSearch.data";
Assert.assertEquals(Helper.readFile(expectedResultFile), sg.toDotString());
}


}
27 changes: 27 additions & 0 deletions src-tests/rwsets/database/TestDatabase.testAdd.data
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
digraph "DirectedGraph" {
graph [concentrate = true];
center=true;
fontsize=6;
node [ color=blue,shape="box"fontsize=6,fontcolor=black,fontname=Arial];
edge [ color=black,fontsize=6,fontcolor=black,fontname=Arial];
"boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)"[color="red", fontsize="6", fontname="Arial"];
"boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)" -> "boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)" [label="comp/List comp/RepFunc.repList : 34" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 23" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 26" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 29" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/List comp/List.insert(comp/List,comp/Funcionario)" [label="comp/Funcionario comp/List.func : 23" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/List comp/List.insert(comp/List,comp/Funcionario)" [label="comp/Funcionario comp/List.func : 26" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/List comp/List.insert(comp/List,comp/Funcionario)" [label="comp/List comp/List.next : 29" ]
"comp/List comp/List.remove(comp/List,java/lang/String)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 42" ]
"comp/List comp/List.remove(comp/List,java/lang/String)" -> "comp/List comp/List.insert(comp/List,comp/Funcionario)" [label="comp/List comp/List.next : 42" ]
"void comp/Funcionario.<init>(java/lang/String,java/lang/String,java/lang/String,int)" -> "boolean comp/List.insertCheck(comp/List,comp/Funcionario)" [label="java/lang/String comp/Funcionario.cpf : 11" ]
"void comp/Funcionario.<init>(java/lang/String,java/lang/String,java/lang/String,int)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="java/lang/String comp/Funcionario.cpf : 11" ]
"void comp/Funcionario.setCpf(java/lang/String)" -> "boolean comp/List.insertCheck(comp/List,comp/Funcionario)" [label="java/lang/String comp/Funcionario.cpf : 41" ]
"void comp/Funcionario.setCpf(java/lang/String)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="java/lang/String comp/Funcionario.cpf : 41" ]
"void comp/List.<init>()" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 9" ]
"void comp/List.<init>()" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 10" ]
"void comp/List.<init>()" -> "comp/List comp/List.insert(comp/List,comp/Funcionario)" [label="comp/Funcionario comp/List.func : 9" ]
"void comp/List.<init>()" -> "comp/List comp/List.insert(comp/List,comp/Funcionario)" [label="comp/List comp/List.next : 10" ]
"void comp/RepFunc.<init>()" -> "boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)" [label="comp/List comp/RepFunc.repList : 10" ]
"void comp/RepFunc.removeFuncRepLista(java/lang/String)" -> "boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)" [label="comp/List comp/RepFunc.repList : 51" ]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
"boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)" -> "boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)" [label="comp/List comp/RepFunc.repList : 34" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 23" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 26" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 29" ]
"comp/List comp/List.remove(comp/List,java/lang/String)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 42" ]
"void comp/Funcionario.<init>(java/lang/String,java/lang/String,java/lang/String,int)" -> "boolean comp/List.insertCheck(comp/List,comp/Funcionario)" [label="java/lang/String comp/Funcionario.cpf : 11" ]
"void comp/Funcionario.<init>(java/lang/String,java/lang/String,java/lang/String,int)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="java/lang/String comp/Funcionario.cpf : 11" ]
"void comp/Funcionario.setCpf(java/lang/String)" -> "boolean comp/List.insertCheck(comp/List,comp/Funcionario)" [label="java/lang/String comp/Funcionario.cpf : 41" ]
"void comp/Funcionario.setCpf(java/lang/String)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="java/lang/String comp/Funcionario.cpf : 41" ]
"void comp/List.<init>()" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 9" ]
"void comp/List.<init>()" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 10" ]
"void comp/RepFunc.<init>()" -> "boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)" [label="comp/List comp/RepFunc.repList : 10" ]
"void comp/RepFunc.removeFuncRepLista(java/lang/String)" -> "boolean comp/RepFunc.addFuncRepLista(comp/Funcionario)" [label="comp/List comp/RepFunc.repList : 51" ]
16 changes: 16 additions & 0 deletions src-tests/rwsets/database/TestDatabase.testFSearch.data
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
digraph "DirectedGraph" {
graph [concentrate = true];
center=true;
fontsize=6;
node [ color=blue,shape="box"fontsize=6,fontcolor=black,fontname=Arial];
edge [ color=black,fontsize=6,fontcolor=black,fontname=Arial];
"comp/Funcionario comp/List.search(comp/List,java/lang/String)"[color="red", fontsize="6", fontname="Arial"];
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 23" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 26" ]
"comp/List comp/List.insert(comp/List,comp/Funcionario)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 29" ]
"comp/List comp/List.remove(comp/List,java/lang/String)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 42" ]
"void comp/Funcionario.<init>(java/lang/String,java/lang/String,java/lang/String,int)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="java/lang/String comp/Funcionario.cpf : 11" ]
"void comp/Funcionario.setCpf(java/lang/String)" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="java/lang/String comp/Funcionario.cpf : 41" ]
"void comp/List.<init>()" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/Funcionario comp/List.func : 9" ]
"void comp/List.<init>()" -> "comp/Funcionario comp/List.search(comp/List,java/lang/String)" [label="comp/List comp/List.next : 10" ]
}
Loading