- package org.ntlab.featureLocator;
-
- import java.util.ArrayList;
- import java.util.HashMap;
-
- import org.ntlab.trace.MethodExecution;
- import org.ntlab.trace.Trace;
-
- public class ScenarioBasedProbabilisticRanking {
-
- public static void main(String[] args) {
- Trace positiveTraces[] = new Trace[4];
- Trace negativeTraces[] = new Trace[4];
- long starts[] = new long[4];
- long ends[] = new long[4];
- positiveTraces[0] = new Trace("documents\\jEdit1578785TC1-2.trace");
- positiveTraces[1] = new Trace("documents\\jEdit1578785TC2-2.trace");
- positiveTraces[2] = new Trace("documents\\jEdit1578785TC3-2.trace");
- positiveTraces[3] = new Trace("documents\\jEdit1578785TC4-2.trace");
- negativeTraces[0] = new Trace("documents\\jEdit1578785TC1-1.trace");
- negativeTraces[1] = new Trace("documents\\jEdit1578785TC2-1.trace");
- negativeTraces[2] = new Trace("documents\\jEdit1578785TC3-1.trace");
- negativeTraces[3] = new Trace("documents\\jEdit1578785TC4-1.trace");
- starts[0] = 53110313578062L;
- ends[0] = 53114687756752L;
- starts[1] = 53656181043072L;
- ends[1] = 53662323812706L;
- starts[2] = 56259479424073L;
- ends[2] = 56263910205683L;
- starts[3] = 56003167357539L;
- ends[3] = 56009513891913L;
- HashMap<String, Integer> totalExecutionsInPositiveTraces = new HashMap<>();
- HashMap<String, Integer> totalExecutionsInNegativeTraces = new HashMap<>();
- HashMap<String, Integer> totalExecutionsInsideMark = new HashMap<>();
- HashMap<String, Integer> totalExecutionsOutsideMark = new HashMap<>();
- long insideMarkExecutions = 0L;
- long outsideMarkExecutions = 0L;
- for (int n = 0; n < positiveTraces.length; n++) {
- HashMap<String, ArrayList<MethodExecution>> positiveExecutions = positiveTraces[n].getAllMethodExecutions();
- for (String method: positiveExecutions.keySet()) {
- int positive = positiveExecutions.get(method).size();
- if (totalExecutionsInPositiveTraces.get(method) == null) {
- totalExecutionsInPositiveTraces.put(method, positive);
- } else {
- totalExecutionsInPositiveTraces.put(method, positive + totalExecutionsInPositiveTraces.get(method));
- }
- }
- HashMap<String, ArrayList<MethodExecution>> negativeExecutions = negativeTraces[n].getAllMethodExecutions();
- for (String method: negativeExecutions.keySet()) {
- int negatives = negativeExecutions.get(method).size();
- if (totalExecutionsInNegativeTraces.get(method) == null) {
- totalExecutionsInNegativeTraces.put(method, negatives);
- totalExecutionsOutsideMark.put(method, negatives);
- } else {
- totalExecutionsInNegativeTraces.put(method, negatives + totalExecutionsInNegativeTraces.get(method));
- totalExecutionsOutsideMark.put(method, negatives + totalExecutionsOutsideMark.get(method));
- }
- outsideMarkExecutions += negatives;
- }
- HashMap<String, ArrayList<MethodExecution>> positiveMarkedExecutions = positiveTraces[n].getMarkedMethodExecutions(starts[n], ends[n]);
- for (String method: positiveMarkedExecutions.keySet()) {
- int marked = positiveMarkedExecutions.get(method).size();
- if (totalExecutionsInsideMark.get(method) == null) {
- totalExecutionsInsideMark.put(method, marked);
- } else {
- totalExecutionsInsideMark.put(method, marked + totalExecutionsInsideMark.get(method));
- }
- insideMarkExecutions += marked;
- }
- HashMap<String, ArrayList<MethodExecution>> positiveUnmarkedExecutions = positiveTraces[n].getUnmarkedMethodExecutions(starts[n], ends[n]);
- for (String method: positiveUnmarkedExecutions.keySet()) {
- int unmarked = positiveUnmarkedExecutions.get(method).size();
- if (totalExecutionsOutsideMark.get(method) == null) {
- totalExecutionsOutsideMark.put(method, unmarked);
- } else {
- totalExecutionsOutsideMark.put(method, unmarked + totalExecutionsOutsideMark.get(method));
- }
- outsideMarkExecutions += unmarked;
- }
- }
-
- // An approach to feature location in distributed systems (Edwards‚ç, Journal of Systems and Software 2006)
- System.out.println("=== An approach to feature location in distributed systems ===");
- HashMap<String, Double> relevanceIndexes = new HashMap<>();
- for (String method: totalExecutionsInPositiveTraces.keySet()) {
- if (totalExecutionsInNegativeTraces.get(method) == null) continue;
- double positive = (double)totalExecutionsInPositiveTraces.get(method);
- double negative = (double)totalExecutionsInNegativeTraces.get(method);
- double relevanceIndex = positive / (positive + negative);
- relevanceIndexes.put(method, relevanceIndex);
- System.out.println(method + ":" + relevanceIndex);
- }
-
- // Scenario-Based Probabilistic Ranking (SPR, Antoniol‚ç, ICSM 2006)
- System.out.println("=== Scenario-Based Probabilistic Ranking ===");
- HashMap<String, Double> relevanceIndexesSPR = new HashMap<>();
- for (String method: totalExecutionsInsideMark.keySet()) {
- if (totalExecutionsOutsideMark.get(method) == null) continue;
- double mark = (double)totalExecutionsInsideMark.get(method) / (double)insideMarkExecutions;
- double unmark = (double)totalExecutionsOutsideMark.get(method) / (double)outsideMarkExecutions;
- double relevanceIndexSPR = mark / (mark + unmark);
- relevanceIndexesSPR.put(method, relevanceIndexSPR);
- System.out.println(method + ":" + relevanceIndexSPR);
- }
- }
-
- }