Skip to content
Snippets Groups Projects
Commit 7242d996 authored by Jonas Blatt's avatar Jonas Blatt :ant:
Browse files

Merge branch 'feature/descriptionverifier' into 'develop'

Resolve "Create Description for Verifier + Classifications"

See merge request jonasblatt/ma-jonasblatt-dmn-verifier!28
parents f709ba83 5da1e188
No related branches found
No related tags found
No related merge requests found
Showing
with 64 additions and 39 deletions
...@@ -16,14 +16,14 @@ import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry. ...@@ -16,14 +16,14 @@ import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry.
import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntryElement; import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntryElement;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.AbstractVerifier; import de.unikoblenz.fgbks.core.dmn.verification.verifier.AbstractVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.DmnVerifier; import de.unikoblenz.fgbks.core.dmn.verification.verifier.DmnVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.IdenticalBusinessRuleVerification; import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.IdenticalRuleVerification;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@DmnVerifier(verifierType = IdenticalBusinessRuleVerification.class) @DmnVerifier(verifierType = IdenticalRuleVerification.class)
public class IdenticalVerifier extends AbstractVerifier { public class IdenticalRuleVerifier extends AbstractVerifier {
@Override @Override
protected void doVerification() { protected void doVerification() {
...@@ -51,7 +51,7 @@ public class IdenticalVerifier extends AbstractVerifier { ...@@ -51,7 +51,7 @@ public class IdenticalVerifier extends AbstractVerifier {
vreFactory.addToEntry( vreFactory.addToEntry(
VerificationClassification.WARNING, VerificationClassification.WARNING,
templateDecision(dmnDecisionTable.getDmnDecision()) templateDecision(dmnDecisionTable.getDmnDecision())
+ "Rules %s have identical input.", + "Rules %s have identical inputs.",
getRulesRowsStrings(currentRules)); getRulesRowsStrings(currentRules));
} else { } else {
List<VDmnInputValue> curInVals = new ArrayList<>(); List<VDmnInputValue> curInVals = new ArrayList<>();
......
...@@ -15,7 +15,9 @@ public class DateVerification extends AbstractVerificationType { ...@@ -15,7 +15,9 @@ public class DateVerification extends AbstractVerificationType {
super( super(
new Name("DateFormatVerification"), new Name("DateFormatVerification"),
new Name("Date Format Check"), new Name("Date Format Check"),
new Description("test")); // TODO new Description(
"This verification checks the correctness of the date format for all date entries. "
+ "Each date should be in the format \"data and time(yyyy-MM-ddThH:mm:ss)\"."));
} }
public static DateVerification getInstance() { public static DateVerification getInstance() {
......
...@@ -15,7 +15,7 @@ public class EmptyOutputVerification extends AbstractVerificationType { ...@@ -15,7 +15,7 @@ public class EmptyOutputVerification extends AbstractVerificationType {
super( super(
new Name("EmptyOutputVerification"), new Name("EmptyOutputVerification"),
new Name("Empty Output"), new Name("Empty Output"),
new Description("test")); // TODO new Description("Detection rules with an empty output values."));
} }
public static EmptyOutputVerification getInstance() { public static EmptyOutputVerification getInstance() {
......
...@@ -15,7 +15,12 @@ public class EquivalentStringVerification extends AbstractVerificationType { ...@@ -15,7 +15,12 @@ public class EquivalentStringVerification extends AbstractVerificationType {
super( super(
new Name("EquivalentStringVerification"), new Name("EquivalentStringVerification"),
new Name("Equivalent Strings"), new Name("Equivalent Strings"),
new Description("test")); // TODO new Description(
"Detecting rules which are not identical, "
+ "but still semantically equivalent. "
+ "Here, the verifier checks if there exist multiple rules "
+ "which use synonyms as inputs and are therefore equivalent, "
+ "based on synonym relations via Wordnet."));
} }
public static EquivalentStringVerification getInstance() { public static EquivalentStringVerification getInstance() {
......
...@@ -7,16 +7,19 @@ import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.Decisio ...@@ -7,16 +7,19 @@ import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.Decisio
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@Type @Type
public class IdenticalBusinessRuleVerification extends AbstractVerificationType { public class IdenticalRuleVerification extends AbstractVerificationType {
private static final IdenticalBusinessRuleVerification instance = private static final IdenticalRuleVerification instance = new IdenticalRuleVerification();
new IdenticalBusinessRuleVerification();
private IdenticalBusinessRuleVerification() { private IdenticalRuleVerification() {
super(new Name("Identical Rules"), new Description("test")); // TODO super(
new Name("Identical Rules"),
new Description(
"Detecting rules which have an identical input, "
+ "i.e. are redundant."));
} }
public static IdenticalBusinessRuleVerification getInstance() { public static IdenticalRuleVerification getInstance() {
return instance; return instance;
} }
......
...@@ -15,7 +15,9 @@ public class InputValueSyntaxVerification extends AbstractVerificationType { ...@@ -15,7 +15,9 @@ public class InputValueSyntaxVerification extends AbstractVerificationType {
super( super(
new Name("InputValueSyntaxVerification"), new Name("InputValueSyntaxVerification"),
new Name("Input Value Syntax Check"), new Name("Input Value Syntax Check"),
new Description("Check values for syntactical correctness.")); new Description(
"This verification checks the correctness of the input formats for all input entries. "
+ "They should have no syntax errors. "));
} }
public static InputValueSyntaxVerification getInstance() { public static InputValueSyntaxVerification getInstance() {
......
...@@ -16,7 +16,8 @@ public class LonelyDataInputVerification extends AbstractVerificationType { ...@@ -16,7 +16,8 @@ public class LonelyDataInputVerification extends AbstractVerificationType {
new Name("LonelyDataInputVerification"), new Name("LonelyDataInputVerification"),
new Name("Lonely Data Input"), new Name("Lonely Data Input"),
new Description( new Description(
"Checks for any input data node, if it has no connection to at least one decision table.")); "Detection input data nodes,"
+ " which has no connection to at least one decision table."));
} }
public static LonelyDataInputVerification getInstance() { public static LonelyDataInputVerification getInstance() {
......
...@@ -16,7 +16,10 @@ public class MissingInputColumnVerification extends AbstractVerificationType { ...@@ -16,7 +16,10 @@ public class MissingInputColumnVerification extends AbstractVerificationType {
super( super(
new Name("MissingInputColumnVerification"), new Name("MissingInputColumnVerification"),
new Name("Missing Input Column"), new Name("Missing Input Column"),
new Description("todo")); // TODO new Description(
"Detecting for all decisions and input data nodes "
+ "if their output names are found in the corresponding input columns "
+ "of the connected decision."));
} }
public static MissingInputColumnVerification getInstance() { public static MissingInputColumnVerification getInstance() {
......
...@@ -9,15 +9,15 @@ import javax.validation.constraints.NotNull; ...@@ -9,15 +9,15 @@ import javax.validation.constraints.NotNull;
@Type @Type
public class MissingInputDataVerification extends AbstractVerificationType { public class MissingInputDataVerification extends AbstractVerificationType {
private static final MissingInputDataVerification instance = private static final MissingInputDataVerification instance = new MissingInputDataVerification();
new MissingInputDataVerification();
private MissingInputDataVerification() { private MissingInputDataVerification() {
super( super(
new Name("MissingInputDataVerification"), new Name("MissingInputDataVerification"),
new Name("Missing Input Data"), new Name("Missing Input Data"),
new Description( new Description(
"todo")); // TODO "Detecting columns which has no reference to either a input node "
+ "or a decision node with a corresponding output column."));
} }
public static MissingInputDataVerification getInstance() { public static MissingInputDataVerification getInstance() {
......
...@@ -15,7 +15,8 @@ public class MissingRuleVerification extends AbstractVerificationType { ...@@ -15,7 +15,8 @@ public class MissingRuleVerification extends AbstractVerificationType {
super( super(
new Name("MissingRuleVerification"), new Name("MissingRuleVerification"),
new Name("Missing Rule"), new Name("Missing Rule"),
new Description("test")); // TODO new Description("Detecting whether there are any missing business rules, "
+ "i.e. if there are rules missing for expected inputs."));
} }
public static MissingRuleVerification getInstance() { public static MissingRuleVerification getInstance() {
......
...@@ -15,7 +15,8 @@ public class OverlappingVerification extends AbstractVerificationType { ...@@ -15,7 +15,8 @@ public class OverlappingVerification extends AbstractVerificationType {
super( super(
new Name("OverlappingVerification"), new Name("OverlappingVerification"),
new Name("Overlapping Rules"), new Name("Overlapping Rules"),
new Description("test")); // TODO new Description("Detecting whether there are any overlaps in rule conditions. "
+ "This verifier does not show identical, overlaps or subsumptions."));
} }
public static OverlappingVerification getInstance() { public static OverlappingVerification getInstance() {
......
...@@ -15,7 +15,7 @@ public class PartialReductionVerification extends AbstractVerificationType { ...@@ -15,7 +15,7 @@ public class PartialReductionVerification extends AbstractVerificationType {
super( super(
new Name("PartialReductionVerification"), new Name("PartialReductionVerification"),
new Name("Partial Reductions"), new Name("Partial Reductions"),
new Description("test")); // TODO new Description("Checking whether ranges can be combined to simplify decision tables."));
} }
public static PartialReductionVerification getInstance() { public static PartialReductionVerification getInstance() {
......
...@@ -16,8 +16,8 @@ public class PredefinedExistingValueVerification extends AbstractVerificationTyp ...@@ -16,8 +16,8 @@ public class PredefinedExistingValueVerification extends AbstractVerificationTyp
new Name("PredefinedExistingValueVerification"), new Name("PredefinedExistingValueVerification"),
new Name("Predefined Existing Values"), new Name("Predefined Existing Values"),
new Description( new Description(
"Es gibt in einer Tabellen-Zelle einen String Value, der aber nicht in der Liste der " "Detecting string values, "
+ "Predefines Values vorgesehen ist.")); // TODO englisch + "which are not defined in list of predefined values of the column."));
} }
public static PredefinedExistingValueVerification getInstance() { public static PredefinedExistingValueVerification getInstance() {
......
...@@ -17,7 +17,8 @@ public class PredefinedMissingValueVerification extends AbstractVerificationType ...@@ -17,7 +17,8 @@ public class PredefinedMissingValueVerification extends AbstractVerificationType
new Name("PredefinedMissingValueVerification"), new Name("PredefinedMissingValueVerification"),
new Name("Predefined Missing Values"), new Name("Predefined Missing Values"),
new Description( new Description(
"Es gibt in einer Tabellen-Zelle predefines values, die jedoch nicht in der spalte vorhanden sind.")); // TODO englisch "Detecting predefined string values of a column, "
+ "which itself are not used in the column."));
} }
public static PredefinedMissingValueVerification getInstance() { public static PredefinedMissingValueVerification getInstance() {
......
...@@ -15,7 +15,11 @@ public class SubsumptionVerification extends AbstractVerificationType { ...@@ -15,7 +15,11 @@ public class SubsumptionVerification extends AbstractVerificationType {
super( super(
new Name("SubsumptionVerification"), new Name("SubsumptionVerification"),
new Name("Rule Subsumptions"), new Name("Rule Subsumptions"),
new Description("test")); // TODO new Description(
"Detecting individual rules which are subsumed by other rules,"
+ " i.e. they are not necessary."
+ " For example, rules containing wildcards often render more specific"
+ " rules unnecessary due to subsumption."));
} }
public static SubsumptionVerification getInstance() { public static SubsumptionVerification getInstance() {
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
- Verifier: [LonelyDataInputVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/LonelyDataInputVerifier.java) - Verifier: [LonelyDataInputVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/LonelyDataInputVerifier.java)
#### Description #### Description
Checks for any input data node, if it has **no** connection to at least one decision table. Detection input data nodes, which has no connection to at least one decision table.
#### Algorithm #### Algorithm
``` ```
...@@ -33,6 +33,7 @@ doVerification (Definition d) { ...@@ -33,6 +33,7 @@ doVerification (Definition d) {
- Verifier: [MissingInputDataVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputDataVerifier.java) - Verifier: [MissingInputDataVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputDataVerifier.java)
#### Description #### Description
Detecting columns which has no reference to either a input node or a decision node with a corresponding output column.
#### Algorithm #### Algorithm
``` ```
...@@ -44,6 +45,7 @@ TODO ...@@ -44,6 +45,7 @@ TODO
- Verifier: [MissingInputColumnVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputColumnVerifier.java) - Verifier: [MissingInputColumnVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputColumnVerifier.java)
#### Description #### Description
Detecting for all decisions and input data nodes if their output names are found in the corresponding input columns of the connected decision.
#### Algorithm #### Algorithm
``` ```
...@@ -58,7 +60,7 @@ TODO ...@@ -58,7 +60,7 @@ TODO
- Verifier: [PredefinedExistingValueVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedExistingValueVerifier.java) - Verifier: [PredefinedExistingValueVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedExistingValueVerifier.java)
#### Description #### Description
TODO Detecting string values, which are not defined in list of predefined values of the column.
#### Algorithm #### Algorithm
``` ```
...@@ -70,7 +72,7 @@ TODO ...@@ -70,7 +72,7 @@ TODO
- Verifier: [PredefinedMissingValueVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedMissingValueVerifier.java) - Verifier: [PredefinedMissingValueVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedMissingValueVerifier.java)
#### Description #### Description
TODO Detecting predefined string values of a column, which itself are not used in the column.
#### Algorithm #### Algorithm
``` ```
...@@ -82,7 +84,7 @@ TODO ...@@ -82,7 +84,7 @@ TODO
- Verifier: [EmptyOutputVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/EmptyOutputVerifier.java) - Verifier: [EmptyOutputVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/EmptyOutputVerifier.java)
#### Description #### Description
This verification checks if a output entry is empty. Detection rules with an empty output values."
#### Algorithm #### Algorithm
``` ```
...@@ -97,7 +99,7 @@ TODO ...@@ -97,7 +99,7 @@ TODO
- Verifier: [SubsumptionVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/SubsumptionVerifier.java) - Verifier: [SubsumptionVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/SubsumptionVerifier.java)
#### Description #### Description
TODO Detecting individual rules which are subsumed by other rules, i.e. they are not necessary. For example, rules containing wildcards often render more specific rules unnecessary due to subsumption.
#### Algorithm #### Algorithm
``` ```
...@@ -109,7 +111,7 @@ TODO ...@@ -109,7 +111,7 @@ TODO
- Verifier: [PartialReductionVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java) - Verifier: [PartialReductionVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java)
#### Description #### Description
TODO Checking whether ranges can be combined to simplify decision tables.
#### Algorithm #### Algorithm
``` ```
...@@ -121,7 +123,7 @@ TODO ...@@ -121,7 +123,7 @@ TODO
- Verifier: [OverlappingVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/OverlappingVerifier.java) - Verifier: [OverlappingVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/OverlappingVerifier.java)
#### Description #### Description
TODO Detecting whether there are any overlaps in rule conditions. This verifier does not show identical, overlaps or subsumptions.
#### Algorithm #### Algorithm
``` ```
...@@ -133,19 +135,19 @@ TODO ...@@ -133,19 +135,19 @@ TODO
- Verifier: [MissingRuleVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingRuleVerifier.java) - Verifier: [MissingRuleVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingRuleVerifier.java)
#### Description #### Description
TODO Detecting whether there are any missing business rules, i.e. if there are rules missing for expected inputs.
#### Algorithm #### Algorithm
``` ```
TODO TODO
``` ```
### Identical Business Rule Verification ### Identical Rule Verification
- Type: [IdenticalBusinessRuleVerification](/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java) - Type: [IdenticalRuleVerification](/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalRuleVerification.java)
- Verifier: [IdenticalVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalVerifier.java) - Verifier: [IdenticalRuleVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalRuleVerifier.java)
#### Description #### Description
TODO Detecting rules which have an identical input, i.e. are redundant.
#### Algorithm #### Algorithm
``` ```
...@@ -157,7 +159,7 @@ TODO ...@@ -157,7 +159,7 @@ TODO
- Verifier: [EquivalentVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/EquivalentVerifier.java) - Verifier: [EquivalentVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/EquivalentVerifier.java)
#### Description #### Description
TODO Detecting rules which are not identical, but still semantically equivalent. Here, the verifier checks if there exist multiple rules which use synonyms as inputs and are therefore equivalent, based on synonym relations via Wordnet.
#### Algorithm #### Algorithm
``` ```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment