Pascal Wittmann
red6
Published in
2 min readJun 27, 2018

--

Fehler in DMNs ausmerzen

Wir bei der red6 bauen Software-Lösungen für Versicherungen. Dabei müssen häufig Geschäftsprozesse mit komplizierten Entscheidungsregeln implementiert werden. Da wir die Geschäftsprozesse mit BPMN (Business Process Model and Notation) beschreiben, war die Entscheidung DMN (Decision Model and Notation) für die Entscheidungsregeln zu verwenden naheliegend. Beide Standards ergänzen sich gut, auch in der von uns eingesetzen Implementierung von Camunda.

Die Modellierung von Entscheidungsregeln mit DMN, im Gegensatz zu Datenbanken oder Quelltext, hat den großen Vorteil, dass auch der jeweilige Fachbereich die Entscheidungsregeln mit wenig Einarbeitung bearbeiten kann. Dies war auch eines der Hauptargumente für den Einsatz von DMN, da man so das fehleranfällige Übertragen von Excel-Tabellen in Datenbanken bzw. Code vermeiden kann.

Leider bietet jedoch der DMN-Editor von Camunda noch sehr wenig Nutzerführung, sodass immer wieder Fehler passieren die leicht zu vermeiden gewesen wären. Daher haben wir angefangen, das Tool dmn-check zu entwicklen, welches DMN-Dateien analysiert und auf Fehler hinweist. Dieses Tool haben wir als Maven-Plugin implementiert, da es sich so gut in unsere Infrastruktur einfügt und verhindert das Build-Artefakte bei schwerwiegenden Fehlern erzeugt werden. Wir planen jedoch die Analysen auch in den DMN-Editor von Camunda zu integrieren.

Das Tool unterstützt aktuell die folgenden Analysen:

  • Doppelte / Widersprüchliche Regeln: Sind sowohl die Eingaben als auch die Ausgaben der Regeln identisch können die Duplikate bedenkenlos entfernt werden. Unterscheiden sich jedoch nur die Ausgaben widersprechen sich die Regeln. Dies ist in aller Regel ein Fehler.
  • Verdeckte Regeln: Dadurch das man mit der Ausdruckssprache FEEL (Friendly Enough Expression Language) Wertebereiche für die Eingaben angeben kann, können Regeln (je nach Auswertungsstrategie) andere Regeln überdecken. Diese überdeckten Regeln können nie greifen.
  • Typfehler: Durch die realtive Mächtigkeit von FEEL können schnell Ausdrücke entstehen die Typfehler enthalten. Wenn man etwa versucht eine Variable vom Typ String auf eine Zahl zu addieren.
  • Enums: Wir nutzen in den Entscheidungsregeln häufig Werte aus Java enums. Diese Werte haben zwar sprechende Namen, jedoch können dort auch schnell Tippfehler entstehen, wodurch eine Regel nicht mehr greifen würde. Daher läd dmn-check das entsprechende enum vom Classpath (sofern der Klassenname im Typ der Eingabe angegeben ist) und prüft ob der Wert in der Eingabe zu dem enum gehört. Dies funktioniert jedoch nur, wenn die DMN-Implementierung beliebige Werte für den Typ der Eingaben erlaubt.
  • Konsistenz: Das Tool führt außerdem noch weitere Prüfungen zur Konsistenz der DMN-Datei durch. So wird z.B. geprüft, dass Aggregationsfunktionen bei Ausgaben nur bei den entsprechenden Typen angewandt werden.

Genauere Informationen zu den Analysen gibt es auf der Github-Projektseite. Wir haben das Tool dmn-check unter einer Apache-2.0 Lizenz veröffentlicht und es ist im Maven-Central-Repository zu finden.

Uns hat das Tool schon gute Dienste geleistet, in dem es immer wieder Fehler aufgedeckt hat, bevor diese in den Test oder gar in die Produktion kommen konnten. Wir hoffen das Tool leistet auch anderen gute Dienste und freuen uns auf Feedback.

--

--