Ignore:
Timestamp:
09/07/17 16:15:00 (7 years ago)
Author:
pharms
Message:
  • changes for first VR oriented usability evaluation
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-usability/src/main/java/de/ugoe/cs/autoquest/usability/CommonTaskRateRule.java

    r1959 r2162  
    1515package de.ugoe.cs.autoquest.usability; 
    1616 
    17 import java.text.DecimalFormat; 
    1817import java.util.ArrayList; 
    1918import java.util.HashMap; 
     
    2120import java.util.List; 
    2221import java.util.Map; 
     22import java.util.Set; 
    2323 
    2424import org.apache.commons.math3.stat.descriptive.SummaryStatistics; 
     
    2626import de.ugoe.cs.autoquest.tasktrees.treeifc.DefaultTaskInstanceTraversingVisitor; 
    2727import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance; 
     28import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 
     29import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 
    2830import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 
    2931import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel; 
    3032import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession; 
     33import de.ugoe.cs.autoquest.tasktrees.treeifc.TaskTreeUtils; 
    3134 
    3235/** 
     
    4649    public UsabilityEvaluationResult evaluate(ITaskModel taskModel) { 
    4750        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); 
    4955 
    5056        UsabilityEvaluationResult results = new UsabilityEvaluationResult(taskModel); 
    51         analyzeStatistics(statistics, allObserved, results); 
     57        analyzeStatistics(statistics, false, allObserved, results); 
     58        analyzeStatistics(mpStatistics, true, allObserved, results); 
    5259 
    5360        return results; 
     
    5865     */ 
    5966    private void analyzeStatistics(SummaryStatistics         statistics, 
     67                                   boolean                   mostProminentSequencesOnly, 
    6068                                   int                       allObserved, 
    6169                                   UsabilityEvaluationResult results) 
     
    7583            if (intensity != null) { 
    7684                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                } 
    7893 
    7994                results.addSmell(intensity, UsabilitySmellDescription.COMMON_TASK_RATE, parameters); 
     
    87102     */ 
    88103    private int calculateStatistics(List<IUserSession>      sessions, 
    89                                     final SummaryStatistics statistics) 
     104                                    final Set<ISequence>    mostProminentTasks, 
     105                                    final SummaryStatistics statistics, 
     106                                    final SummaryStatistics mpStatistics) 
    90107    { 
    91108        final LinkedList<ITaskInstance> rootNodes = new LinkedList<>(); 
     109        final LinkedList<ITaskInstance> mpRootNodes = new LinkedList<>(); 
    92110        final List<IEventTaskInstance> leafNodes = new ArrayList<>(); 
    93111         
     
    96114        for (IUserSession session : sessions) { 
    97115            rootNodes.clear(); 
     116            mpRootNodes.clear(); 
    98117             
    99118            for (final ITaskInstance currentRoot : session) { 
    100119                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 
    101142                    @Override 
    102143                    public void visit(IEventTaskInstance eventTaskInstance) { 
    103144                        rootNodes.add(currentRoot); 
     145                        mpRootNodes.add(currentMpRoot != null ? currentMpRoot : currentRoot); 
    104146                        leafNodes.add(eventTaskInstance); 
    105147 
     
    109151                            while (rootNodes.size() >= 10) { 
    110152                                rootNodes.removeFirst(); 
     153                            } 
     154                        } 
     155                         
     156                        if (mpRootNodes.size() >= 10) { 
     157                            mpStatistics.addValue(getTaskCoverageMeasure(mpRootNodes)); 
     158                             
     159                            while (mpRootNodes.size() >= 10) { 
     160                                mpRootNodes.removeFirst(); 
    111161                            } 
    112162                        } 
Note: See TracChangeset for help on using the changeset viewer.