Changeset 2162 for trunk/autoquest-core-usability/src/main/java/de/ugoe/cs/autoquest/usability/CommonTaskRateRule.java
- Timestamp:
- 09/07/17 16:15:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-core-usability/src/main/java/de/ugoe/cs/autoquest/usability/CommonTaskRateRule.java
r1959 r2162 15 15 package de.ugoe.cs.autoquest.usability; 16 16 17 import java.text.DecimalFormat;18 17 import java.util.ArrayList; 19 18 import java.util.HashMap; … … 21 20 import java.util.List; 22 21 import java.util.Map; 22 import java.util.Set; 23 23 24 24 import org.apache.commons.math3.stat.descriptive.SummaryStatistics; … … 26 26 import de.ugoe.cs.autoquest.tasktrees.treeifc.DefaultTaskInstanceTraversingVisitor; 27 27 import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance; 28 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 29 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 28 30 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 29 31 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel; 30 32 import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession; 33 import de.ugoe.cs.autoquest.tasktrees.treeifc.TaskTreeUtils; 31 34 32 35 /** … … 46 49 public UsabilityEvaluationResult evaluate(ITaskModel taskModel) { 47 50 SummaryStatistics statistics = new SummaryStatistics(); 48 int allObserved = calculateStatistics(taskModel.getUserSessions(), statistics); 51 SummaryStatistics mpStatistics = new SummaryStatistics(); 52 int allObserved = calculateStatistics 53 (taskModel.getUserSessions(), TaskTreeUtils.getMostProminentTasks(taskModel), 54 statistics, mpStatistics); 49 55 50 56 UsabilityEvaluationResult results = new UsabilityEvaluationResult(taskModel); 51 analyzeStatistics(statistics, allObserved, results); 57 analyzeStatistics(statistics, false, allObserved, results); 58 analyzeStatistics(mpStatistics, true, allObserved, results); 52 59 53 60 return results; … … 58 65 */ 59 66 private void analyzeStatistics(SummaryStatistics statistics, 67 boolean mostProminentSequencesOnly, 60 68 int allObserved, 61 69 UsabilityEvaluationResult results) … … 75 83 if (intensity != null) { 76 84 Map<String, Object> parameters = new HashMap<String, Object>(); 77 parameters.put("ratio", new DecimalFormat("#.##").format(mean * 10)); 85 parameters.put("ratio", ((float) Math.round(mean * 100)) / 10); 86 87 if (mostProminentSequencesOnly) { 88 parameters.put("tasksType", "representative tasks"); 89 } 90 else { 91 parameters.put("tasksType", "tasks"); 92 } 78 93 79 94 results.addSmell(intensity, UsabilitySmellDescription.COMMON_TASK_RATE, parameters); … … 87 102 */ 88 103 private int calculateStatistics(List<IUserSession> sessions, 89 final SummaryStatistics statistics) 104 final Set<ISequence> mostProminentTasks, 105 final SummaryStatistics statistics, 106 final SummaryStatistics mpStatistics) 90 107 { 91 108 final LinkedList<ITaskInstance> rootNodes = new LinkedList<>(); 109 final LinkedList<ITaskInstance> mpRootNodes = new LinkedList<>(); 92 110 final List<IEventTaskInstance> leafNodes = new ArrayList<>(); 93 111 … … 96 114 for (IUserSession session : sessions) { 97 115 rootNodes.clear(); 116 mpRootNodes.clear(); 98 117 99 118 for (final ITaskInstance currentRoot : session) { 100 119 currentRoot.accept(new DefaultTaskInstanceTraversingVisitor() { 120 private ITaskInstance currentMpRoot = null; 121 122 @Override 123 public void visit(ISequenceInstance sequenceInstance) { 124 boolean currentInstancesIsMpRoot = false; 125 if (mostProminentTasks.contains(sequenceInstance.getSequence())) { 126 if (currentMpRoot == null) { 127 currentMpRoot = sequenceInstance; 128 currentInstancesIsMpRoot = true; 129 } 130 // else already detected most prominent root task 131 } 132 super.visit(sequenceInstance); 133 134 if (currentInstancesIsMpRoot) { 135 // if the current instance is also the root instance considering only 136 // most prominent sequences, then reset the stored instance to null 137 // after traversing this task 138 currentMpRoot = null; 139 } 140 } 141 101 142 @Override 102 143 public void visit(IEventTaskInstance eventTaskInstance) { 103 144 rootNodes.add(currentRoot); 145 mpRootNodes.add(currentMpRoot != null ? currentMpRoot : currentRoot); 104 146 leafNodes.add(eventTaskInstance); 105 147 … … 109 151 while (rootNodes.size() >= 10) { 110 152 rootNodes.removeFirst(); 153 } 154 } 155 156 if (mpRootNodes.size() >= 10) { 157 mpStatistics.addValue(getTaskCoverageMeasure(mpRootNodes)); 158 159 while (mpRootNodes.size() >= 10) { 160 mpRootNodes.removeFirst(); 111 161 } 112 162 }
Note: See TracChangeset
for help on using the changeset viewer.