Inspired by my colleagues Simon and Jörg *) – who are already blogging for while – I’m also planning to inform the world what bothers me at work…
Apart from teaching students the basics of computer science I’m currently interested in BPMN 2.0, the Business Process Model and Notation in its recent version, a widespread OMG Standard for modelling and (potentially) executing business processes.
In particular I’m interested in measuring and improving the quality of BPMN 2.0 Process Models. An essential aspect when dealing with process models and their serialization is that they have to adhere the rules stated in the according Standard specification – which is not as trivial as it seems to be in the case of BPMN 2.0:
The rules and constraints defining how a “correct” – standard compliant – BPMN process has to look like are widespread all over the 538 pages of the Spec. There are class diagrams, figures, tables, excerpts from normative XSD files and hundreds of pages running text – and all these artefacts may contain information about the correct structure, mandatory attributes, allowed types of events in specific conditions, etc. pp.
This complexity itself is rather problematic but the problem is exaggerated by the fact that the spec does not provide a list of all relevant constraints and all the worse is full of errors and ambiguities.
A first step to overcome those issues was to extract and document all defined constraints from the spec and list them – the result was published in the Technical Report “BPMN 2.0 Process Model Serialization Constraints“. As the list comprises more than 600 different rules obviously a manual check of all rules is not expedient. So some students and I are currently working on automating the checks of all revealed rules – some first rule implementations will hopefully be publicly available soon.
However, motivated by a discussion with some industry contacts – I am currently evaluating the integration of those automated BPMN constraint checks into the static code analysis suite SonarQube. As I ran and run into various difficulties when doing so I shall provide a small tutorial series of working and extending SonarQube. Both, generally and specifically for my use case.