นี่เป็นเครื่องมือสำหรับการตรวจสอบความถูกต้องของไฟล์ Notation Notation (DMN) มันดำเนินการวิเคราะห์แบบคงที่ต่าง ๆ เพื่อตรวจจับความไม่สอดคล้องและข้อบกพร่องในรูปแบบการตัดสินใจของคุณ
คุณสามารถใช้ dmn-check ได้หกวิธี
ปัจจุบัน DMN-check ตรวจสอบระหว่างคนอื่น ๆ สำหรับสิ่งต่อไปนี้:
ในการตรวจสอบส่วนคุณจะพบรายการที่สมบูรณ์พร้อมคำอธิบายโดยละเอียดเกี่ยวกับสิ่งที่พวกเขาทำ
คุณสมบัติและค่าคงที่ส่วนใหญ่ที่ได้รับการตรวจสอบโดย dmn-check มีการอธิบายอย่างไม่เป็นทางการในข้อกำหนด DMN ในกรณีที่คุณมีคำถามเกี่ยวกับการตรวจสอบความถูกต้องอาจคุ้มค่าที่จะอ่านข้อกำหนด
ปลั๊กอินนี้ต้องใช้ Java 17 หรือใหม่กว่าและ Apache Maven 3 หรือใหม่กว่า การวิเคราะห์บางอย่างได้รับการปรับให้เหมาะกับการใช้งาน Camunda DMN และอาจไม่ทำงานสำหรับการใช้งาน DMN ที่แตกต่างกัน
dmn-check สามารถใช้เป็นปลั๊กอิน Maven ปกติภายในโครงการของคุณ pom.xml หรือเป็นโปรแกรมแบบสแตนด์อโลน
ตัวอย่างต่อไปนี้แสดงการกำหนดค่าพื้นฐานของปลั๊กอิน:
<plugin>
<groupId>de.redsix</groupId>
<artifactId>dmn-check-maven-plugin</artifactId>
<version>...</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check-dmn</goal>
</goals>
</execution>
</executions>
</plugin>
การใช้การกำหนดค่านี้ปลั๊กอินจะค้นหาโฟลเดอร์ทั้งหมดของโครงการปัจจุบันสำหรับไฟล์ที่มีส่วนขยาย .dmn และใช้ตัวตรวจสอบที่มีอยู่ทั้งหมด เป็นไปได้ที่จะจัดเตรียมชุดพา ธ การค้นหาแทนรวมทั้งเพิกเฉยต่อไฟล์บางไฟล์และระบุตัวตรวจสอบที่ควรดำเนินการ ตัวอย่างต่อไปนี้แสดงวิธีที่คุณสามารถใช้ประโยชน์จากตัวเลือกเหล่านี้ได้โดยการ จำกัด เส้นทางการค้นหาไปยังโฟลเดอร์ src/ และ model/ รวมถึงการละเว้น test.dmn ไฟล์ DMN การกำหนดค่าเพิ่มเติมระบุว่าควรดำเนินการเฉพาะ ShadowedRuleValidator ในการระบุผู้ตรวจสอบคุณต้องใช้ชื่อที่ผ่านการรับรองอย่างสมบูรณ์
<configuration>
<searchPaths>
<searchPath>src/</searchPath>
<searchPath>model/</searchPath>
</searchPaths>
<excludes>
<exclude>test.dmn</exclude>
</excludes>
<validatorClasses>
<validatorClass>de.redsix.dmncheck.validators.ShadowedRuleValidator</validatorClass>
</validatorClasses>
</configuration>
นอกจากนี้พารามิเตอร์ failOnWarning (ค่าเริ่มต้นเป็นเท็จ) สามารถตั้งค่าให้ล้มเหลวในการดำเนินการ Maven หากมีข้อผิดพลาดการตรวจสอบความถูกต้องด้วยความรุนแรงคำเตือน
<configuration>
<failOnWarning>true</failOnWarning>
</configuration>
ในการใช้ dmn-check โดยไม่ต้องหรือนอกโครงการ Maven คุณสามารถเรียกใช้งานได้ด้วยวิธีต่อไปนี้
mvn de.redsix:dmn-check-maven-plugin:check-dmn
ปลั๊กอินนี้ต้องใช้ Java 11 หรือใหม่กว่าและ Gradle 6.5 หรือใหม่กว่า การวิเคราะห์บางอย่างได้รับการปรับให้เหมาะกับการใช้งาน Camunda DMN และอาจไม่ทำงานสำหรับการใช้งาน DMN ที่แตกต่างกัน
DMNMGR เป็น ชุดเครื่องมือที่เพิ่มการใช้งาน Camunda DMN และจัดหาเครื่องมือในการพัฒนาแอพพลิเคชั่นที่ใช้ DMN ในทีมข้ามสายงาน มันจัดส่งด้วยการรวม dmn-check และแสดงภาพคำเตือนและข้อผิดพลาดในการแสดงกราฟิกของโมเดล DMN คุณต้องติดตั้ง DMNMGR-Client และ DMNMGR-Server เพื่อใช้งาน
อิมเมจนักเทียบท่าที่มี dmn-check พร้อมใช้งานจาก GitHub Container Registry และคุณสามารถดึงเวอร์ชันล่าสุดได้โดยดำเนินการ
docker pull ghcr.io/red6/dmn-check:latest
หากคุณต้องการใช้ docker run เพื่อดำเนินการ dmn-check คุณต้องติดตั้งไดเรกทอรีที่มีไฟล์ DMN ลงในคอนเทนเนอร์และตั้งเส้นทางการค้นหาอย่างเหมาะสมเช่น
docker run -v ~/dmn-files:/dmn-files ghcr.io/red6/dmn-check:latest --searchPath=/dmn-files
หากคุณต้องการใช้อิมเมจนักเทียบท่าในไปป์ไลน์ gitlab คุณต้องเขียนทับ ententpoint และโทรหา dmn-check โดยตรง ในตัวอย่างต่อไปนี้ของไปป์ไลน์ gitlab เราระบุโครงการ classpath ด้วยเพื่อให้การตรวจสอบความถูกต้องของ enum เป็นไปได้
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
default:
artifacts:
paths:
- ./cp.txt
- .m2/repository
stages:
- analysis
image:
name: ghcr.io/red6/dmn-check:latest
entrypoint: [ "" ]
create-classpath-for-dmn-check:
image: adoptopenjdk/maven-openjdk11
stage: analysis
script: mvn dependency:build-classpath --settings .m2/settings.xml --batch-mode -Dmdep.outputFile=cp.txt
dmn-check:
stage: analysis
needs:
- create-classpath-for-dmn-check
script: |
/opt/java/openjdk/bin/java -cp /app/resources:/app/classes:/app/libs/* de.redsix.dmncheck.cli.Main --projectClasspath=$(< cp.txt)
ส่วนย่อยต่อไปนี้อธิบายถึงการตรวจสอบรายละเอียดที่มีอยู่ ตารางการตัดสินใจ DMN ที่ใช้ในส่วนนี้ได้มาจากตัวอย่างใน camunda.org
พิจารณาตารางการตัดสินใจของ DMN ต่อไปนี้โดยมีนโยบาย UNIQUE :
| ฤดูกาลᴵᴺᴾᵁᵀ | แขกกี่คนᴵᴺᴾᵁᵀ | จานᴼᵁᵀᴾᵁᵀ | |
|---|---|---|---|
| 1 | "ตก" | <= 8 | "Spareribs" |
| 2 | "ฤดูหนาว" | <= 8 | "Roastbeef" |
| 3 | "ฤดูใบไม้ผลิ" | [5..8] | "สเต็ก" |
| 4 | "ฤดูหนาว" | <= 8 | "Roastbeef" |
เป็นที่ชัดเจนว่ากฎข้อที่สองเป็นซ้ำของกฎข้อที่สี่ สิ่งนี้ไม่ได้รับอนุญาตจากนโยบายการเข้าชม UNIQUE และทำให้เกิดข้อผิดพลาด
คำจำกัดความ : กฎเป็นซ้ำของกฎอื่นถ้าและเฉพาะในกรณีที่อินพุตและเอาต์พุตทั้งหมดของกฎเหล่านั้นเหมือนกัน
dmn-check จะรายงานกฎที่ซ้ำกันสำหรับตารางการตัดสินใจทั้งหมดยกเว้นผู้ที่มีนโยบาย COLLECT
กฎที่ขัดแย้งกันค่อนข้างคล้ายกับกฎที่ซ้ำกัน พิจารณาตัวอย่างต่อไปนี้ด้วยนโยบายฮิต UNIQUE :
| ฤดูกาลᴵᴺᴾᵁᵀ | แขกกี่คนᴵᴺᴾᵁᵀ | จานᴼᵁᵀᴾᵁᵀ | |
|---|---|---|---|
| 1 | "ตก" | <= 8 | "Spareribs" |
| 2 | "ฤดูหนาว" | <= 8 | "Roastbeef" |
| 3 | "ฤดูใบไม้ผลิ" | [5..8] | "สเต็ก" |
| 4 | "ฤดูหนาว" | <= 8 | "สตูว์" |
เราดูกฎสองและสี่อีกครั้ง เวลานี้อินพุตทั้งหมดของพวกเขาเหมือนกัน แต่พวกเขาแตกต่างกันในผลลัพธ์ สิ่งนี้แย่กว่ากฎที่ซ้ำกันเนื่องจากอาจให้ผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับลำดับการประเมินของตารางการตัดสินใจ สมมติว่ารันไทม์ไม่ได้ตรวจพบความไม่สอดคล้องกันเหล่านั้น
คำจำกัดความ : กฎ r อยู่ในความขัดแย้งกับกฎ s ถ้าและเฉพาะในกรณีที่อินพุตทั้งหมดของกฎ r และ s นั้นเหมือนกันและหากพวกเขาแตกต่างกันในการเช่าหนึ่งเอาต์พุต
dmn-check จะรายงานกฎที่ซ้ำกันสำหรับตารางการตัดสินใจทั้งหมดยกเว้นผู้ที่มีนโยบาย HIT COLLECT และ RULE_ORDER
กฎบางอย่างป้องกันไม่ให้ผู้อื่นได้รับการพิจารณา ดูตัวอย่างต่อไปนี้ด้วยนโยบาย HIT FIRST :
| ฤดูกาลᴵᴺᴾᵁᵀ | แขกกี่คนᴵᴺᴾᵁᵀ | จานᴼᵁᵀᴾᵁᵀ | |
|---|---|---|---|
| 1 | "ตก" | <= 8 | "Spareribs" |
| 2 | "ฤดูหนาว" | <= 8 | "Roastbeef" |
| 3 | - | - | "สตูว์" |
| 4 | "ฤดูใบไม้ผลิ" | [5..8] | "สเต็ก" |
ตัวอย่างนี้ไม่มีกฎที่ซ้ำกันและไม่มีกฎที่ขัดแย้งกัน อย่างไรก็ตามอินพุตทั้งหมดของกฎสามนั้นว่างเปล่า (แสดงด้วยเส้นประในตัวอย่างนี้) เมื่ออินพุตที่ว่างเปล่าตรงกับทุกสิ่งและเนื่องจากเราถือว่านโยบาย HIT กฎข้อ FIRST สี่จะไม่ตรงกับกฎสามข้อสำหรับอินพุตที่เป็นไปได้ทั้งหมด ดังนั้นสตูว์จึงมอบให้กับแขก 5 ถึง 8 ในฤดูใบไม้ผลิ สมมติว่าแต่ละกฎมีจุดประสงค์กฎเงามักจะเป็นข้อผิดพลาดเสมอเพราะพวกเขาจะไม่ถูกจับคู่
คำจำกัดความ : กฎ r Shadows Rule s ถ้าและเฉพาะในกรณีที่อินพุตของกฎ r ตรงกับค่าทั้งหมดที่ค่าอินพุตของกฎ s Match
dmn-check จะรายงานกฎที่ซ้ำกันสำหรับตารางการตัดสินใจทั้งหมดยกเว้นผู้ที่มีนโยบาย COLLECT และ RULE_ORDER
DMN นำเสนอภาษานิพจน์ที่หลากหลายที่เรียกว่าภาษาการแสดงออกที่เป็นมิตร (รู้สึก) ที่สามารถใช้เพื่ออธิบายเงื่อนไขสำหรับรายการอินพุต อย่างไรก็ตามเช่นเดียวกับภาษานิพจน์ส่วนใหญ่การแสดงออกที่เป็นไปได้ที่เป็นไปได้ทั้งหมดจะไม่ถูกต้อง (มีความหมาย) dmn-check รวมตัวตรวจสอบประเภทสำหรับภาษานิพจน์ความรู้สึกที่ทำให้มั่นใจได้ว่าตารางการตัดสินใจมีเพียงนิพจน์ที่พิมพ์ดีดได้
ตัวอย่างของนิพจน์ที่ไม่ดีคือ [1..true] ซึ่งจะอธิบายช่วงระหว่าง 1 และ true ซึ่งเป็น (ที่ให้เช่าในความรู้สึก) ไม่ใช่การแสดงออกที่ถูกต้อง ในทางตรงกันข้าม [1..9] มีการพิมพ์อย่างดีและอธิบายตัวเลขตั้งแต่ 1 ถึง 9
| การแสดงออก | พิมพ์ |
|---|---|
| จริง | บูลีน |
| [1..3] | จำนวนเต็ม |
| [1 .. "สตริง"] | |
| 1, 2, จริง | |
| > 5 | จำนวนเต็ม |
| > จริง |
แน่นอนว่าการประกาศประเภทได้รับการตรวจสอบเช่นกัน
การตัดสินใจมักจะเกี่ยวข้องกับชุดค่าคงที่ (เช่นรายการสกุลเงินที่รองรับ) และดังนั้นค่าเหล่านั้นจึงใช้ในตารางการตัดสินใจ DMN ค่าเหล่านั้นมักจะถูกนำไปใช้ในรูปแบบของ Java enums dmn-check เพื่อระบุชื่อคลาสที่ผ่านการรับรองอย่างสมบูรณ์ของ enum ในการประกาศประเภทของอินพุต- / เอาต์พุตคอลัมน์และตรวจสอบค่าในตารางการตัดสินใจ DMN กับการใช้งาน enum
โดยค่าเริ่มต้น dmn-check ใช้การพึ่งพาโครงการเพื่อแก้ไข enums เนื่องจากเป็นไปไม่ได้ในโหมด maven standalone คุณสามารถระบุ classpath ที่ใช้ในการแก้ไข enums
mvn de.redsix:dmn-check-maven-plugin:check-dmn -Dclasspath=foo.jar,bar.jar
มาตรฐาน DMN ยังให้วิธีการเชื่อมต่อตารางการตัดสินใจซึ่งกันและกันและแบบจำลองอินพุตและแหล่งความรู้ กราฟที่เกิดขึ้นเรียกว่ากราฟข้อกำหนดการตัดสินใจ (DRG)
dmn-check สอบว่ากราฟข้อกำหนดการตัดสินใจ
ในตัวอย่างต่อไปนี้ Dish การตัดสินใจมี Season และ How many guests เป็นอินพุต แต่แทนที่จะเป็น Season อินพุตจะมี Lunar phase อินพุตที่เชื่อมต่อกับตารางการตัดสินใจ
กราฟ TD;
x (เฟสจันทรคติ)-> จาน;
y (มีแขกกี่คน)-> จาน;
จาน-> เครื่องดื่ม;
Z (แขกที่มีเด็ก)-> เครื่องดื่ม;
มาตรฐาน DMN อนุญาตให้มีการรวมค่าสำหรับการรวบรวมนโยบาย HIT ตัวอย่างเช่นคุณสามารถคำนวณผลรวมของแถวที่ตรงกันทั้งหมดในตารางการตัดสินใจ คุณสามารถใช้คุณสมบัตินี้เพื่อคำนวณคะแนนเครดิต
เรามั่นใจว่าการรวมเหล่านั้นใช้กับคอลัมน์ที่มีประเภทตัวเลขเท่านั้น นอกจากนี้เราตรวจสอบว่าการรวมจะใช้เฉพาะเมื่อมีการใช้การรวบรวมนโยบาย HIT
โดยปกติแล้วคุณไม่จำเป็นต้องใส่ใจเกี่ยวกับ ID และชื่อขององค์ประกอบ DMN มากนัก อย่างไรก็ตามในระหว่างการอัพเกรดและ refactoring อาจเกิดขึ้นได้ว่า ID หรือชื่อจะหายไป ข้อผิดพลาดเหล่านั้นมักจะไม่มีใครสังเกตเห็นเป็นเวลานาน ขึ้นอยู่กับสถานการณ์ที่ขาดหายไปหรือชื่ออาจทำลายรูปแบบการตัดสินใจของคุณหรือทำให้การวิเคราะห์ข้อผิดพลาดยุ่งยาก
dmn-check ตรวจสอบว่าองค์ประกอบ DMN ต่อไปนี้มี ID และชื่อเสมอ:
ItemDefinition S ItemDefinition S เป็นวิธี DMNS ในการแสดงการแจงนับ ในคำจำกัดความของ ItemDefinition คุณประกาศว่าค่าใดที่ได้รับอนุญาต ขณะนี้เราตรวจสอบเฉพาะเมื่อการแสดงออกจาก ItemDefintion นั้นดีมาก
เมื่อเราเริ่มทำงานเกี่ยวกับ dmn-check เราไม่ได้เป็นเครื่องมือวิเคราะห์สำหรับไฟล์ DMN ที่เหมาะสมกับความต้องการของเราและทำงานในสภาพแวดล้อมที่มีรสชาติ Camunda ของเรา ตั้งแต่นั้นมา DMN ก็กลายเป็นที่นิยมมากขึ้นและเครื่องมืออื่น ๆ ก็เริ่มให้ความสามารถในการวิเคราะห์เช่นกัน หากคุณต้องการทราบว่า dmn-check เปรียบเทียบกับเครื่องมืออื่น ๆ คุณสามารถอ่านการเปรียบเทียบใน GCD ได้อย่างไร
ülari Laurson และ Fabrizio Maria Maggi ขยายชุดเครื่องมือแก้ไข dmn-js ของ Camunda พร้อมความสามารถในการวิเคราะห์และเผยแพร่ที่ github.com/ulaurson/dmn-js เครื่องมือสามารถตรวจจับไวยากรณ์และพิมพ์ข้อผิดพลาดและเพื่อระบุกฎที่ทับซ้อนและขาดหายไป นอกจากนี้ยังสามารถทำให้ตารางการตัดสินใจง่ายขึ้นโดยการรวมกฎ ในกระดาษสาธิต LM16 พวกเขาอธิบายเครื่องมือ รายละเอียดเพิ่มเติมเกี่ยวกับการวิเคราะห์ที่ดำเนินการโดยเครื่องมือจะถูกเผยแพร่ใน CDL+16
CDL+16 Calvanese, D. , Dumas, M. , Laurson, ü., Maggi, FM, Montali, M. , Teinemaa, I.: ความหมายและการวิเคราะห์ตารางการตัดสินใจ DMN ในการประชุมนานาชาติครั้งที่ 14 เรื่องการจัดการกระบวนการทางธุรกิจ (BPM) 2016
LM16 Laurson, ü และ Maggi, FM, 2016, กันยายน เครื่องมือสำหรับการวิเคราะห์ตารางการตัดสินใจ DMN ใน BPM (การสาธิต) (pp. 56-60)
BW-A Batoulis, K. และ Weske, M. , เครื่องมือสำหรับการตรวจสอบความสมบูรณ์ของกระบวนการทางธุรกิจที่ตระหนักถึงการตัดสินใจ
BW-B Batoulis, K. และ Weske, M. , disambiguation ของตารางการตัดสินใจ DMN
FMTV18 Figl, K. , Mendling, J. , Tokdemir, G. และ Vanthienen, J. , 2018 สิ่งที่เรารู้และสิ่งที่เราไม่รู้เกี่ยวกับ DMN การสร้างแบบจำลองระดับองค์กรและสถาปัตยกรรมระบบข้อมูล, 13, pp.2-1
Silver16 Silver, B. , 2016. การวิเคราะห์ตารางการตัดสินใจใน DMN
HDSV17 Hasic, F. , de Smedt, J. และ Vanthienen, J. , 2017. ไปสู่การประเมินความซับซ้อนทางทฤษฎีของรูปแบบการตัดสินใจและสัญกรณ์ (DMN) การสร้างแบบจำลององค์กรธุรกิจและระบบข้อมูล สำนักพิมพ์สปริงเตอร์นานาชาติ
GCD Grohé, C. , Corea, C. และ Delfmann P, 2021. ความสามารถในการตรวจสอบ DMN 1.0: การวิเคราะห์การสนับสนุนเครื่องมือในปัจจุบัน ฟอรัมการจัดการกระบวนการทางธุรกิจ, ฟอรัม BPM 2021, โรม, อิตาลี
Valencia-Parra, A. , Parody, L. , Varela-Vaca, A. , Caballero, I. , และGómez-López M. , 2020. DMN4DQ: เมื่อคุณภาพข้อมูลตรงกับ DMN วารสาร 'ระบบสนับสนุนการตัดสินใจ'