From 5da1e188fc0e2da9f23318041a3fb2ab181f82fb Mon Sep 17 00:00:00 2001 From: Jonas Blatt <jonasblatt@uni-koblenz.de> Date: Fri, 18 Oct 2019 20:25:55 +0200 Subject: [PATCH] #5 Add description for verifiers --- ...rifier.java => IdenticalRuleVerifier.java} | 8 +++--- .../verifier/types/DateVerification.java | 4 ++- .../types/EmptyOutputVerification.java | 2 +- .../types/EquivalentStringVerification.java | 7 ++++- ...on.java => IdenticalRuleVerification.java} | 15 ++++++---- .../types/InputValueSyntaxVerification.java | 4 ++- .../types/LonelyDataInputVerification.java | 3 +- .../types/MissingInputColumnVerification.java | 5 +++- .../types/MissingInputDataVerification.java | 6 ++-- .../types/MissingRuleVerification.java | 3 +- .../types/OverlappingVerification.java | 3 +- .../types/PartialReductionVerification.java | 2 +- .../PredefinedExistingValueVerification.java | 4 +-- .../PredefinedMissingValueVerification.java | 3 +- .../types/SubsumptionVerification.java | 6 +++- dmnverifierapi/verifier.md | 28 ++++++++++--------- 16 files changed, 64 insertions(+), 39 deletions(-) rename dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/{IdenticalVerifier.java => IdenticalRuleVerifier.java} (94%) rename dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/{IdenticalBusinessRuleVerification.java => IdenticalRuleVerification.java} (56%) diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalRuleVerifier.java similarity index 94% rename from dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalVerifier.java rename to dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalRuleVerifier.java index 1f4a0a6e..607f8b2f 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalVerifier.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalRuleVerifier.java @@ -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.verifier.AbstractVerifier; 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.Comparator; import java.util.List; import java.util.stream.Collectors; -@DmnVerifier(verifierType = IdenticalBusinessRuleVerification.class) -public class IdenticalVerifier extends AbstractVerifier { +@DmnVerifier(verifierType = IdenticalRuleVerification.class) +public class IdenticalRuleVerifier extends AbstractVerifier { @Override protected void doVerification() { @@ -51,7 +51,7 @@ public class IdenticalVerifier extends AbstractVerifier { vreFactory.addToEntry( VerificationClassification.WARNING, templateDecision(dmnDecisionTable.getDmnDecision()) - + "Rules %s have identical input.", + + "Rules %s have identical inputs.", getRulesRowsStrings(currentRules)); } else { List<VDmnInputValue> curInVals = new ArrayList<>(); diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/DateVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/DateVerification.java index 64ea2417..e98bda4e 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/DateVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/DateVerification.java @@ -15,7 +15,9 @@ public class DateVerification extends AbstractVerificationType { super( new Name("DateFormatVerification"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EmptyOutputVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EmptyOutputVerification.java index 84212372..d370feb8 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EmptyOutputVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EmptyOutputVerification.java @@ -15,7 +15,7 @@ public class EmptyOutputVerification extends AbstractVerificationType { super( new Name("EmptyOutputVerification"), new Name("Empty Output"), - new Description("test")); // TODO + new Description("Detection rules with an empty output values.")); } public static EmptyOutputVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EquivalentStringVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EquivalentStringVerification.java index 90803b7e..7813aa61 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EquivalentStringVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EquivalentStringVerification.java @@ -15,7 +15,12 @@ public class EquivalentStringVerification extends AbstractVerificationType { super( new Name("EquivalentStringVerification"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalRuleVerification.java similarity index 56% rename from dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java rename to dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalRuleVerification.java index 749bd5b0..81be13f6 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalRuleVerification.java @@ -7,16 +7,19 @@ import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.Decisio import javax.validation.constraints.NotNull; @Type -public class IdenticalBusinessRuleVerification extends AbstractVerificationType { +public class IdenticalRuleVerification extends AbstractVerificationType { - private static final IdenticalBusinessRuleVerification instance = - new IdenticalBusinessRuleVerification(); + private static final IdenticalRuleVerification instance = new IdenticalRuleVerification(); - private IdenticalBusinessRuleVerification() { - super(new Name("Identical Rules"), new Description("test")); // TODO + private IdenticalRuleVerification() { + 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; } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/InputValueSyntaxVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/InputValueSyntaxVerification.java index a4112152..d93e886a 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/InputValueSyntaxVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/InputValueSyntaxVerification.java @@ -15,7 +15,9 @@ public class InputValueSyntaxVerification extends AbstractVerificationType { super( new Name("InputValueSyntaxVerification"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/LonelyDataInputVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/LonelyDataInputVerification.java index f4a03689..e78211ce 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/LonelyDataInputVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/LonelyDataInputVerification.java @@ -16,7 +16,8 @@ public class LonelyDataInputVerification extends AbstractVerificationType { new Name("LonelyDataInputVerification"), new Name("Lonely Data Input"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputColumnVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputColumnVerification.java index 6a5ce32f..b7c22752 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputColumnVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputColumnVerification.java @@ -16,7 +16,10 @@ public class MissingInputColumnVerification extends AbstractVerificationType { super( new Name("MissingInputColumnVerification"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java index 64cdb7a1..b1879e06 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java @@ -9,15 +9,15 @@ import javax.validation.constraints.NotNull; @Type public class MissingInputDataVerification extends AbstractVerificationType { - private static final MissingInputDataVerification instance = - new MissingInputDataVerification(); + private static final MissingInputDataVerification instance = new MissingInputDataVerification(); private MissingInputDataVerification() { super( new Name("MissingInputDataVerification"), new Name("Missing Input Data"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingRuleVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingRuleVerification.java index 7143891d..04e2a134 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingRuleVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingRuleVerification.java @@ -15,7 +15,8 @@ public class MissingRuleVerification extends AbstractVerificationType { super( new Name("MissingRuleVerification"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/OverlappingVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/OverlappingVerification.java index c46f899d..cab89436 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/OverlappingVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/OverlappingVerification.java @@ -15,7 +15,8 @@ public class OverlappingVerification extends AbstractVerificationType { super( new Name("OverlappingVerification"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PartialReductionVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PartialReductionVerification.java index 16f050f8..f210e04a 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PartialReductionVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PartialReductionVerification.java @@ -15,7 +15,7 @@ public class PartialReductionVerification extends AbstractVerificationType { super( new Name("PartialReductionVerification"), new Name("Partial Reductions"), - new Description("test")); // TODO + new Description("Checking whether ranges can be combined to simplify decision tables.")); } public static PartialReductionVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java index f8b941b0..c7132b0e 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java @@ -16,8 +16,8 @@ public class PredefinedExistingValueVerification extends AbstractVerificationTyp new Name("PredefinedExistingValueVerification"), new Name("Predefined Existing Values"), new Description( - "Es gibt in einer Tabellen-Zelle einen String Value, der aber nicht in der Liste der " - + "Predefines Values vorgesehen ist.")); // TODO englisch + "Detecting string values, " + + "which are not defined in list of predefined values of the column.")); } public static PredefinedExistingValueVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedMissingValueVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedMissingValueVerification.java index 803cc04a..622177f3 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedMissingValueVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedMissingValueVerification.java @@ -17,7 +17,8 @@ public class PredefinedMissingValueVerification extends AbstractVerificationType new Name("PredefinedMissingValueVerification"), new Name("Predefined Missing Values"), 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() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/SubsumptionVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/SubsumptionVerification.java index f6216000..d68101d9 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/SubsumptionVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/SubsumptionVerification.java @@ -15,7 +15,11 @@ public class SubsumptionVerification extends AbstractVerificationType { super( new Name("SubsumptionVerification"), 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() { diff --git a/dmnverifierapi/verifier.md b/dmnverifierapi/verifier.md index 662a9615..995bc297 100644 --- a/dmnverifierapi/verifier.md +++ b/dmnverifierapi/verifier.md @@ -13,7 +13,7 @@ - Verifier: [LonelyDataInputVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/LonelyDataInputVerifier.java) #### 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 ``` @@ -33,6 +33,7 @@ doVerification (Definition d) { - Verifier: [MissingInputDataVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputDataVerifier.java) #### Description +Detecting columns which has no reference to either a input node or a decision node with a corresponding output column. #### Algorithm ``` @@ -44,6 +45,7 @@ TODO - Verifier: [MissingInputColumnVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingInputColumnVerifier.java) #### 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 ``` @@ -58,7 +60,7 @@ TODO - Verifier: [PredefinedExistingValueVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedExistingValueVerifier.java) #### Description -TODO +Detecting string values, which are not defined in list of predefined values of the column. #### Algorithm ``` @@ -70,7 +72,7 @@ TODO - Verifier: [PredefinedMissingValueVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedMissingValueVerifier.java) #### Description -TODO +Detecting predefined string values of a column, which itself are not used in the column. #### Algorithm ``` @@ -82,7 +84,7 @@ TODO - Verifier: [EmptyOutputVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/EmptyOutputVerifier.java) #### Description -This verification checks if a output entry is empty. +Detection rules with an empty output values." #### Algorithm ``` @@ -97,7 +99,7 @@ TODO - Verifier: [SubsumptionVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/SubsumptionVerifier.java) #### 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 ``` @@ -109,7 +111,7 @@ TODO - Verifier: [PartialReductionVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java) #### Description -TODO +Checking whether ranges can be combined to simplify decision tables. #### Algorithm ``` @@ -121,7 +123,7 @@ TODO - Verifier: [OverlappingVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/OverlappingVerifier.java) #### Description -TODO +Detecting whether there are any overlaps in rule conditions. This verifier does not show identical, overlaps or subsumptions. #### Algorithm ``` @@ -133,19 +135,19 @@ TODO - Verifier: [MissingRuleVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/MissingRuleVerifier.java) #### Description -TODO +Detecting whether there are any missing business rules, i.e. if there are rules missing for expected inputs. #### Algorithm ``` TODO ``` -### Identical Business Rule Verification -- Type: [IdenticalBusinessRuleVerification](/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java) -- Verifier: [IdenticalVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalVerifier.java) +### Identical Rule Verification +- Type: [IdenticalRuleVerification](/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalRuleVerification.java) +- Verifier: [IdenticalRuleVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/IdenticalRuleVerifier.java) #### Description -TODO +Detecting rules which have an identical input, i.e. are redundant. #### Algorithm ``` @@ -157,7 +159,7 @@ TODO - Verifier: [EquivalentVerifier](src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/EquivalentVerifier.java) #### 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 ``` -- GitLab