Skip to content

Commit ddbc8a8

Browse files
improvement
1 parent a4d7a3c commit ddbc8a8

File tree

4 files changed

+303
-44
lines changed

4 files changed

+303
-44
lines changed

pom.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,9 @@
130130
<configuration>
131131

132132
<includePluginDependencies>true</includePluginDependencies>
133-
<mainClass>framevpm.Main</mainClass>
133+
<mainClass>framevpm.learning.Application</mainClass>
134134
<arguments>
135+
<argument>/Users/matthieu/Desktop/data7/</argument>
135136
</arguments>
136137
</configuration>
137138
</plugin>

src/main/java/framevpm/learning/Application.java

+40-33
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import framevpm.learning.approaches.codeMetrics.CodeMetricsApproach;
99
import framevpm.learning.approaches.ifc.FunctionCallsApproach;
1010
import framevpm.learning.approaches.ifc.IncludesApproach;
11+
import framevpm.learning.approaches.naturalness.NaturalnessAndCM;
1112
import framevpm.learning.approaches.naturalness.PureNaturalness;
1213
import framevpm.learning.approaches.textmining.BagOfWordsApproach;
1314
import framevpm.learning.model.ApproachResult;
@@ -28,49 +29,55 @@
2829
public class Application {
2930

3031
public static void main(String[] args) throws IOException, ClassNotFoundException {
31-
ResourcesPathExtended pathExtended = new ResourcesPathExtended("/Users/matthieu/Desktop/data7/");
32-
ExporterExtended exporterExtended = new ExporterExtended(pathExtended);
33-
CSVExporter csvExporter = new CSVExporter(pathExtended);
34-
Project[] projects = new Project[]{
35-
CProjects.OPEN_SSL,
36-
CProjects.WIRESHARK
37-
//, CProjects.LINUX_KERNEL
38-
};
32+
//"/Users/matthieu/Desktop/data7/"
33+
if (args.length == 1) {
34+
ResourcesPathExtended pathExtended = new ResourcesPathExtended(args[0]);
35+
ExporterExtended exporterExtended = new ExporterExtended(pathExtended);
36+
CSVExporter csvExporter = new CSVExporter(pathExtended);
37+
Project[] projects = new Project[]{
38+
CProjects.OPEN_SSL,
39+
CProjects.WIRESHARK,
40+
CProjects.LINUX_KERNEL
41+
};
3942

40-
ClassModel[] classModels = new ClassModel[]{
41-
new VulNotVul(),
42-
new BugVul(),
43-
new VulBugClear()
44-
};
43+
ClassModel[] classModels = new ClassModel[]{
44+
new VulNotVul(),
45+
new BugVul(),
46+
new VulBugClear()
47+
};
4548

46-
for (Project project : projects) {
49+
for (Project project : projects) {
4750

48-
for (ClassModel model : classModels) {
49-
ExperimentSplitter[] experimentSplitters = {new GeneralSplit(pathExtended, project.getName()), new ThreeLastSplit(pathExtended, project.getName())};
51+
for (ClassModel model : classModels) {
52+
ExperimentSplitter[] experimentSplitters = {new GeneralSplit(pathExtended, project.getName()), new ThreeLastSplit(pathExtended, project.getName())};
5053

5154

52-
for (ExperimentSplitter experimentSplitter : experimentSplitters) {
53-
List<Experiment> experimentList = new ExporterExtended(pathExtended).loadExperiments(project.getName(), experimentSplitter.getName());
54-
if (experimentList == null) {
55-
experimentList = experimentSplitter.generateExperiment();
56-
}
57-
Approach[] approaches = {
58-
new PureNaturalness(experimentList, model),
59-
new CodeMetricsApproach(experimentList, model),
60-
new IncludesApproach(experimentList, model),
61-
new FunctionCallsApproach(experimentList, model),
62-
new BagOfWordsApproach(experimentList, model)
63-
};
55+
for (ExperimentSplitter experimentSplitter : experimentSplitters) {
56+
List<Experiment> experimentList = new ExporterExtended(pathExtended).loadExperiments(project.getName(), experimentSplitter.getName());
57+
if (experimentList == null) {
58+
experimentList = experimentSplitter.generateExperiment();
59+
}
60+
Approach[] approaches = {
61+
new NaturalnessAndCM(experimentList, model),
62+
new PureNaturalness(experimentList, model),
63+
new CodeMetricsApproach(experimentList, model),
64+
new IncludesApproach(experimentList, model),
65+
new FunctionCallsApproach(experimentList, model),
66+
new BagOfWordsApproach(experimentList, model)
67+
};
6468

65-
for (Approach approach : approaches) {
66-
for (String classifier : getClassifiers()) {
67-
approach.prepareInstances();
68-
runwithSmote(exporterExtended, csvExporter, project, model, experimentSplitter, approach, classifier, true);
69-
runwithSmote(exporterExtended, csvExporter, project, model, experimentSplitter, approach, classifier, false);
69+
for (Approach approach : approaches) {
70+
for (String classifier : getClassifiers()) {
71+
approach.prepareInstances();
72+
runwithSmote(exporterExtended, csvExporter, project, model, experimentSplitter, approach, classifier, true);
73+
runwithSmote(exporterExtended, csvExporter, project, model, experimentSplitter, approach, classifier, false);
74+
}
7075
}
7176
}
7277
}
7378
}
79+
} else {
80+
throw new RuntimeException("Not enough arguments");
7481
}
7582

7683
}

src/main/java/framevpm/learning/approaches/Approach.java

+11-9
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,17 @@ public ApproachResult runWith(String classifierName, boolean smote) {
5353
Experiment experimentdata = experiments.get(i[0]);
5454
final int[] j = {0};
5555
experimentdata.getTesting().keySet().forEach(fileMetaInf -> {
56-
try {
57-
Instance testingInstance = instances[1].instance(j[0]);
58-
double[] dist = classifier.distributionForInstance(testingInstance);
59-
double classif = classifier.classifyInstance(testingInstance);
60-
experimentResultMap.put(fileMetaInf.getFile(), new ExperimentResult(dist, classif, fileMetaInf, testingInstance.classValue()));
61-
} catch (Exception e) {
62-
e.printStackTrace();
63-
} finally {
64-
j[0]++;
56+
if (model.correspondingToTypeFile(fileMetaInf.getType()) != null) {
57+
try {
58+
Instance testingInstance = instances[1].instance(j[0]);
59+
double[] dist = classifier.distributionForInstance(testingInstance);
60+
double classif = classifier.classifyInstance(testingInstance);
61+
experimentResultMap.put(fileMetaInf.getFile(), new ExperimentResult(dist, classif, fileMetaInf, testingInstance.classValue()));
62+
} catch (Exception e) {
63+
e.printStackTrace();
64+
} finally {
65+
j[0]++;
66+
}
6567
}
6668
});
6769
resultMap.put(experiment, experimentResultMap);

0 commit comments

Comments
 (0)