source: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/TextInputRatioMetric.java @ 1152

Last change on this file since 1152 was 1152, checked in by pharms, 11 years ago
  • complete refactoring of task tree model with a separation of task models and task instances
  • Property svn:mime-type set to text/plain
File size: 4.0 KB
Line 
1//   Copyright 2012 Georg-August-Universität Göttingen, Germany
2//
3//   Licensed under the Apache License, Version 2.0 (the "License");
4//   you may not use this file except in compliance with the License.
5//   You may obtain a copy of the License at
6//
7//       http://www.apache.org/licenses/LICENSE-2.0
8//
9//   Unless required by applicable law or agreed to in writing, software
10//   distributed under the License is distributed on an "AS IS" BASIS,
11//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//   See the License for the specific language governing permissions and
13//   limitations under the License.
14
15package de.ugoe.cs.autoquest.usability.rules.metrics;
16
17import static de.ugoe.cs.autoquest.usability.tasktree.filters.EventTypeFilter.TEXT_INPUT;
18
19import java.util.List;
20
21import com.google.common.base.Optional;
22import com.google.common.base.Predicate;
23import com.google.common.collect.Iterables;
24
25import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
26import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
27import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel;
28import de.ugoe.cs.autoquest.usability.EvaluationMethodCaller;
29import de.ugoe.cs.autoquest.usability.result.DefectDescriptionResolver;
30import de.ugoe.cs.autoquest.usability.result.UsabilityDefect;
31import de.ugoe.cs.autoquest.usability.rules.UsabilityMetric;
32import de.ugoe.cs.autoquest.usability.rules.UsabilityRule;
33import de.ugoe.cs.autoquest.usability.tasktree.FilterResult;
34import de.ugoe.cs.autoquest.usability.tasktree.IterativeDFSFilterStrategy;
35import de.ugoe.cs.autoquest.usability.tasktree.filters.TaskModelFilter;
36
37/**
38 * <p>
39 * TODO comment
40 * </p>
41 *
42 * @author Alexander Deicke
43 */
44public class TextInputRatioMetric extends UsabilityRule implements UsabilityMetric {
45
46    /**
47     * <p>
48     * TODO: comment
49     * </p>
50     *
51     * @param taskTree
52     */
53    public TextInputRatioMetric(ITaskModel taskModel) {
54        super(taskModel);
55        this.name = "TextInputRatio";
56        this.defect = new DefectDescriptionResolver().descriptionFor(this.getClass().getSimpleName());
57    }
58
59    /* (non-Javadoc)
60     * @see de.ugoe.cs.autoquest.usability.rules.UsabilityRule#check()
61     */
62    @Override
63    public Optional<UsabilityDefect> calculate() {
64        FilterResult textInputEvents = extractNodesFromTaskTree();
65        float evaluationMetric = calculateEvaluationMetric(textInputEvents.tasksMatchedFilter(), textInputEvents.tasksNotMatchedFilter());
66        return this.defect.isPresent(evaluationMetric);
67    }
68   
69    private FilterResult extractNodesFromTaskTree() {
70        return new TaskModelFilter(new IterativeDFSFilterStrategy()).filterByEventType(TEXT_INPUT)
71            .from(this.taskModel);
72    }
73   
74    private float calculateEvaluationMetric(List<ITask> textInputEvents, List<ITask> nonTextInputEvents) {
75        float numberOfTextInputEvents = textInputEvents.size();
76        float numberOfNonTextInputEvents = nrOfEventTasksNotMatchedFilter(nonTextInputEvents);
77        return numberOfTextInputEvents / (numberOfTextInputEvents + numberOfNonTextInputEvents);
78    }
79
80    private int nrOfEventTasksNotMatchedFilter(List<ITask> nonTextInputEvents) {
81        return Iterables.size(Iterables.filter(nonTextInputEvents,
82                                               new Predicate<ITask>() {
83
84                                                   @Override
85                                                   public boolean apply(ITask task) {
86                                                       return task instanceof IEventTask;
87                                                   }
88                                               }));
89    }
90
91    /* (non-Javadoc)
92     * @see de.ugoe.cs.autoquest.usability.rules.UsabilityRule#callEvaluationMetho(de.ugoe.cs.autoquest.usability.EvaluationMethodCaller)
93     */
94    @Override
95    public Optional<UsabilityDefect> callEvaluationMethod(EvaluationMethodCaller evaluationMethodCaller)
96    {
97        return evaluationMethodCaller.check(this);
98    }
99}
Note: See TracBrowser for help on using the repository browser.