Index: trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/AbstractUsabilityEvaluationTC.java
===================================================================
--- trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/AbstractUsabilityEvaluationTC.java	(revision 1040)
+++ trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/AbstractUsabilityEvaluationTC.java	(revision 1141)
@@ -13,5 +13,5 @@
 //   limitations under the License.
 
-package de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator;
+package de.ugoe.cs.autoquest.usability.rules.metrics;
 
 import static org.junit.Assert.assertEquals;
Index: trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/NoLetterOrDigitTextInputsEvaluatorTest.java
===================================================================
--- trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/NoLetterOrDigitTextInputsEvaluatorTest.java	(revision 1040)
+++ trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/NoLetterOrDigitTextInputsEvaluatorTest.java	(revision 1141)
@@ -13,7 +13,6 @@
 //   limitations under the License.
 
-package de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator;
+package de.ugoe.cs.autoquest.usability.rules.metrics;
 
-import static de.ugoe.cs.autoquest.usability.evaluation.rule.set.RulesetFactory.textInputUsabiliyRuleset;
 import static de.ugoe.cs.autoquest.usability.testutil.FestConditionUtil.absent;
 import static de.ugoe.cs.autoquest.usability.testutil.FestConditionUtil.highRecommendationSeverityLevel;
@@ -24,18 +23,11 @@
 import static org.fest.assertions.api.Assertions.assertThat;
 
-import java.util.EnumSet;
-
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
 
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
-import de.ugoe.cs.autoquest.usability.evaluation.result.UsabilityDefect;
-import de.ugoe.cs.autoquest.usability.evaluation.rule.set.UsabilityRule;
-import de.ugoe.cs.autoquest.usability.tasktree.filter.FilterStatisticCache;
+import de.ugoe.cs.autoquest.usability.result.UsabilityDefect;
+import de.ugoe.cs.autoquest.usability.rules.metrics.NoLetterOrDigitRatioMetric;
 
 /**
@@ -48,31 +40,13 @@
 public class NoLetterOrDigitTextInputsEvaluatorTest extends AbstractUsabilityEvaluationTC {
 
-    private UsabilityRule ruleUnderTest;
-
-    @Before
-    public void initRuleUnderTest() {
-        EnumSet<? extends UsabilityRule> ruleset = textInputUsabiliyRuleset().evaluationRules();
-        this.ruleUnderTest = Iterables.find(ruleset, new Predicate<UsabilityRule>() {
-
-            public boolean apply(UsabilityRule usabilityRule) {
-                return usabilityRule.ruleIdentifier().equals("TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO");
-            }
-
-        });
-    }
-
-    @After
-    public void clearFilterStatisticCache() {
-        FilterStatisticCache.instance().clear();
-    }
-
     @Test
     public void should_return_no_recommendation() {
         // Given
-        String spec = "Sequence {" + "  TextInput () {}" + "}";
+        String spec = "Sequence {" + 
+                      "  TextInput () {}" + 
+                      "}";
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new NoLetterOrDigitTextInputsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new NoLetterOrDigitRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(absent());
@@ -83,11 +57,11 @@
         // Given
         String spec =
-            "Sequence {"
-                + "  TextInput (1234567890123456789012345678901234567890123456789_01234567890"
-                + "12345678901234567890123456789012345) {}" + "}";
+            "Sequence {" + 
+            "  TextInput (1234567890123456789012345678901234567890123456789_01234567890" + 
+                         "12345678901234567890123456789012345) {}" + 
+            "}";
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new NoLetterOrDigitTextInputsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new NoLetterOrDigitRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(infoRecommendationSeverityLevel());
@@ -98,9 +72,10 @@
         // Given
         String spec =
-            "Sequence {" + "  TextInput (123456789012345678901234567890_123456789012345) {}" + "}";
+            "Sequence {" + 
+            "  TextInput (123456789012345678901234567890_123456789012345) {}" + 
+            "}";
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new NoLetterOrDigitTextInputsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new NoLetterOrDigitRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(lowRecommendationSeverityLevel());
@@ -110,9 +85,10 @@
     public void should_return_recommendation_with_medium_severity_level() {
         // Given
-        String spec = "Sequence {" + "  TextInput (12345_6789012345) {}" + "}";
+        String spec = "Sequence {" + 
+                      "  TextInput (12345_6789012345) {}" + 
+                      "}";
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new NoLetterOrDigitTextInputsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new NoLetterOrDigitRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(mediumRecommendationSeverityLevel());
@@ -122,9 +98,10 @@
     public void should_return_recommendation_with_high_severity_level() {
         // Given
-        String spec = "Sequence {" + "  TextInput (_a_b_c_) {}" + "}";
+        String spec = "Sequence {" +
+                      "  TextInput (_a_b_c_) {}" +
+                      "}";
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new NoLetterOrDigitTextInputsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new NoLetterOrDigitRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(highRecommendationSeverityLevel());
Index: trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/TextInputEntryRepetitionsEvaluatorTest.java
===================================================================
--- trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/TextInputEntryRepetitionsEvaluatorTest.java	(revision 1040)
+++ trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/TextInputEntryRepetitionsEvaluatorTest.java	(revision 1141)
@@ -13,7 +13,6 @@
 //   limitations under the License.
 
-package de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator;
+package de.ugoe.cs.autoquest.usability.rules.metrics;
 
-import static de.ugoe.cs.autoquest.usability.evaluation.rule.set.RulesetFactory.textInputUsabiliyRuleset;
 import static de.ugoe.cs.autoquest.usability.testutil.FestConditionUtil.absent;
 import static de.ugoe.cs.autoquest.usability.testutil.FestConditionUtil.highRecommendationSeverityLevel;
@@ -24,18 +23,11 @@
 import static org.fest.assertions.api.Assertions.assertThat;
 
-import java.util.EnumSet;
-
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
 
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
-import de.ugoe.cs.autoquest.usability.evaluation.result.UsabilityDefect;
-import de.ugoe.cs.autoquest.usability.evaluation.rule.set.UsabilityRule;
-import de.ugoe.cs.autoquest.usability.tasktree.filter.FilterStatisticCache;
+import de.ugoe.cs.autoquest.usability.result.UsabilityDefect;
+import de.ugoe.cs.autoquest.usability.rules.metrics.TextInputEntryRepetitionsMetric;
 
 /**
@@ -48,23 +40,4 @@
 public class TextInputEntryRepetitionsEvaluatorTest extends AbstractUsabilityEvaluationTC {
 
-    private UsabilityRule ruleUnderTest;
-
-    @Before
-    public void initRuleUnderTest() {
-        EnumSet<? extends UsabilityRule> ruleset = textInputUsabiliyRuleset().evaluationRules();
-        this.ruleUnderTest = Iterables.find(ruleset, new Predicate<UsabilityRule>() {
-
-            public boolean apply(UsabilityRule usabilityRule) {
-                return usabilityRule.ruleIdentifier().equals("TEXT_FIELD_INPUT_REPETITIONS");
-            }
-
-        });
-    }
-
-    @After
-    public void clearFilterStatisticCache() {
-        FilterStatisticCache.instance().clear();
-    }
-
     @Test
     public void should_return_no_recommendation() {
@@ -73,6 +46,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputEntryRepetitionsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputEntryRepetitionsMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(absent());
@@ -87,6 +59,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputEntryRepetitionsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputEntryRepetitionsMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(infoRecommendationSeverityLevel());
@@ -101,6 +72,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputEntryRepetitionsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputEntryRepetitionsMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(lowRecommendationSeverityLevel());
@@ -121,6 +91,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputEntryRepetitionsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputEntryRepetitionsMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(mediumRecommendationSeverityLevel());
@@ -141,6 +110,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputEntryRepetitionsEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputEntryRepetitionsMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(highRecommendationSeverityLevel());
Index: trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/TextInputRatioEvaluatorTest.java
===================================================================
--- trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/TextInputRatioEvaluatorTest.java	(revision 1040)
+++ trunk/autoquest-core-usability-evaluation-test/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/TextInputRatioEvaluatorTest.java	(revision 1141)
@@ -13,7 +13,6 @@
 //   limitations under the License.
 
-package de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator;
+package de.ugoe.cs.autoquest.usability.rules.metrics;
 
-import static de.ugoe.cs.autoquest.usability.evaluation.rule.set.RulesetFactory.textInputUsabiliyRuleset;
 import static de.ugoe.cs.autoquest.usability.testutil.FestConditionUtil.absent;
 import static de.ugoe.cs.autoquest.usability.testutil.FestConditionUtil.highRecommendationSeverityLevel;
@@ -24,18 +23,11 @@
 import static org.fest.assertions.api.Assertions.assertThat;
 
-import java.util.EnumSet;
-
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
 
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
-import de.ugoe.cs.autoquest.usability.evaluation.result.UsabilityDefect;
-import de.ugoe.cs.autoquest.usability.evaluation.rule.set.UsabilityRule;
-import de.ugoe.cs.autoquest.usability.tasktree.filter.FilterStatisticCache;
+import de.ugoe.cs.autoquest.usability.result.UsabilityDefect;
+import de.ugoe.cs.autoquest.usability.rules.metrics.TextInputRatioMetric;
 
 /**
@@ -48,23 +40,4 @@
 public class TextInputRatioEvaluatorTest extends AbstractUsabilityEvaluationTC {
 
-    private UsabilityRule ruleUnderTest;
-
-    @Before
-    public void initRuleUnderTest() {
-        EnumSet<? extends UsabilityRule> ruleset = textInputUsabiliyRuleset().evaluationRules();
-        this.ruleUnderTest = Iterables.find(ruleset, new Predicate<UsabilityRule>() {
-
-            public boolean apply(UsabilityRule usabilityRule) {
-                return usabilityRule.ruleIdentifier().equals("TEXT_FIELD_INPUT_RATIO");
-            }
-
-        });
-    }
-
-    @After
-    public void clearFilterStatisticCache() {
-        FilterStatisticCache.instance().clear();
-    }
-
     @Test
     public void should_return_no_recommendation() {
@@ -76,6 +49,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputRatioEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(absent());
@@ -90,6 +62,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputRatioEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(infoRecommendationSeverityLevel());
@@ -104,6 +75,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputRatioEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(lowRecommendationSeverityLevel());
@@ -118,6 +88,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputRatioEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(mediumRecommendationSeverityLevel());
@@ -130,6 +99,5 @@
         ITaskTree taskTree = createTaskTree(spec);
         // When
-        Optional<UsabilityDefect> recommendation =
-            new TextInputRatioEvaluator(this.ruleUnderTest, taskTree).evaluationResult();
+        Optional<UsabilityDefect> recommendation = new TextInputRatioMetric(taskTree).check();
         // Then
         assertThat(recommendation).is(present()).has(highRecommendationSeverityLevel());
