DSM3-goals

This is a family of modelling tools built with the DSM3 (Domain-Specific Meta-Meta-Model) process for the development of modelling tools.

This particular implementation supports a family of Goal-Oriented Requirements Engineering (GORE) modelling languages: NFR Framework, iStar 2.0, and KAOS goal models.

NFR Framework

Modelling of Non-Functional Requirements (soft goals) and their operationalization. It is also possible to visually provide rationales by means of claims.

Open tool »

Open language files »

iStar 2.0

Modelling of social dependencies networks between actors, agents, and roles. It also refines actors with goals, qualities, tasks and resources.

Open tool »

Open language files »

KAOS Goal models

Modelling of goals, domain properties, assignments and potential conflicts.

Open tool »

Open language files »

How does it work? The NFR example

The DSM3-goals framework has 2 inputs: a language specification and user interface (UI) details. The language specification is composed of meta-model, constraints and concrete syntax. The UI details includes text and images associated to UI buttons.

The meta-model


dsm3.metamodel = {
  "prefix": "nfr",
  "version": "1.0",
  "shapesObject": joint.shapes.dsm3,

  "nodes": {
    "NFR": { },
    "Operationalization": { },
    "Claim": { }
  },

  "nodeLinks": {
    "AndRefinementLink": { },
    "OrRefinementLink": { },
    "ContributionLink": {
       "changeableLabel": true,
       "possibleLabels": ["++", "+", "some+", "some-", "–", "– –", "unknown"]
    },
    "CorrelationLink": {
      "changeableLabel": true,
       "possibleLabels": ["++", "+", "some+", "some-", "–", "– –", "unknown"]
    },
    "ArgumentLink": {
       "targetsLink": true
    }
  }
};

Open NFR metamodel file»

The meta-model is the first step in defining the abstract syntax of the language. It is specified textually with the JavaScript Object Notation (JSON). The meta-model must conform to the meta-meta-model of the specific domaing of the framework (in this case, GORE languages).

The NFR Framework meta-model on the left declares that the language has three kinds of nodes: NFR, Operationalization, and Claim. Moreover, it has five kinds of links: And-refinement link, Or-refinement link, Contribution link, Correlation link, and Argument link.

At this point the tool is already functional, using default stereotyped shapes (image below).

Open tool with only metamodel»

The concrete syntax


The concrete syntax of the language is specified based on SVG (Scalable Vector Graphics) elements and attributes. SVG has elements such as line, circle, rect(angle), and path, which can be combined at will to compose the shape of elements and links.

The NFR element (on the right side) is made of a single path. The points of the path are defined on the 'd' attribute. Since its cloud is rather complex shape, its path is also complex. Instead of manually writing the path, which is feasible, it is recommended to use a drawing tool such as Inkscape, Adobe Illustrator or an online SVG tool.

The other elements of the NFR Framework are variations of this shape. Consider, for instance, the 'stroke-width' attribute of the 'path' element. It defines the thickness of the line of the shape. By increasing its thickness, we obtain the shape of an Operationalization. Alternatively, by setting an additional stroke-dasharray attribute we obtain the dashed cloud that represents a Claim.

Open tool with only metamodel + concrete syntax »

Concrete syntax of the NFR element:
joint.shapes.dsm3.NFR = joint.shapes.basic.Path.extend({
    markup: '',
    defaults: joint.util.deepSupplement({
        type: 'NFR',
        size: {width: 90, height: 55},
        attrs: {
            'path': {
                'd': 'M 0 0 a 26.1831 26.1831 0 0 1 25 -3 a 18.8816 18.8816 0 0 1 27 -5 a 15.2684 15.2684 0 0 1 17.4999 3.25 a 19.182 19.182 0 0 1 24 -5 a 11.2361 11.2361 0 0 1 14.5 6.5 a 7.5085 7.5085 0 0 1 7 9 a 6.51159 6.51159 0 0 1 2.5 9.99998 a 7.67717 7.67717 0 0 1 -9 9.5 a 18.0487 18.0487 0 0 1 -17.25 3.625 a 41.1115 41.1115 0 0 1 -50.25 4.25 a 20.8059 20.8059 0 0 1 -22.25 0.25 a 28.5345 28.5345 0 0 1 -19.75 -6 a 12.0307 12.0307 0 0 1 -2.75 -21.75 a 6.06009 6.06009 0 0 1 3.74945 -5.62563 Z', //cloud shape
                'stroke-width': 2,
                'resetOffset': true,
                'vector-effect': 'non-scaling-stroke' /* prevents stroke distortion when the element is resized */
            },
            text: {
                'font-size': 12,
                'font-weight': 'bold',
                'ref-y': '-65%',
                'y-alignment': 'middle'
            },
        }
    }, joint.shapes.basic.Path.prototype.defaults)
});

Open NFR concrete syntax file»

The constraints


dsm3.metamodel.nodeLinks.AndRefinementLink.isValid = function (source, target) {
  'use strict';

  var result = {};
  var isValid = true;

  if ( source === target) {
    isValid = false;
    result.message = 'you cannot make an And-Refinement link from an element onto itself';
  }
  if ( isValid && (source.isNFR() && target.isOperationalization())) {
    isValid = false;
    result.message = 'you cannot refine an Operationalization with a NFR';
  }
  if ( isValid && istar.isThereLinkBetween(source, target, 'AndRefinementLink')) {
    isValid = false;
    result.message = 'there can only be one And-Refinement link between the same two elements';
  }
  if ( isValid && (source.isClaim() || target.isClaim())) {
    isValid = false;
    result.message = 'Claims cannot be a part of And-Refinement links';
  }
  if (isValid && (!source.isElement())) {
    isValid = false;
    result.message = 'the source of an And-Refinement link must be an element';
  }
  if (isValid && (!target.isElement())) {
    isValid = false;
    result.message = 'the target of an And-Refinement link must be an element';
  }

  result.isValid = isValid;
  return result;
};

Open NFR constraints file»

At this point the tool does not enforce any constraints, since they haven't been defined yet. For instance, in the example above, it allows refining an Operationalization with a NFR.

Constraints are specified by creating JavaScript functions for the constrained elements or links. The code on the left shows the constraints for the NFR and-refinement link. These functions must return an object with a boolean flag indicating whether the link is valid or not. Additionally, a message can also be provided. The message is displayed to the user so that she may know why that link is invalid.

Helper methods such as isNFR(), isOperationalization() and isClaim() are automatically generated by the DSM3-goals framework, based on the meta-model.

With the constraints specified, the user will not be able to create such invalid elements or links, as shown in the image below.

Open tool with metamodel, concrete syntax and constraints »

The User Interface


Based on the meta-model, the User Interface (UI) of the tool is created with default images and shapes (see above). Nonetheless, developers can customize it in order to improve the user-friendliness of the tool.

In order to setup the images of the buttons, all that is needed is to add a SVG image in the images folder of the language, with the same name as the element or link that it represents. For instance, the image for the NFR button is "NFR.svg".

Additionally, three pieces of the text associated with every button can be defined in a UI details file: the name of the button, the tooltip that appears when the user stops the mouse pointer over the button, and the instructions that are displayed in the status bar of the tool.

Below you can find the UI specification for the Add And-refinement link and the resulting UI.

AndRefinementLink: {
  buttonLabel: 'And',
  buttonTooltip: 'Add And-Refinement link',
  buttonStatusText: 'Adding And-Refinement link: click first on the child, and then on the parent',
}

Open full NFR tool »

Conclusion


By writing a language specification (meta-model, concrete syntax, and shapes), plus additional UI information, the DSM3-goals framework is able to generate at runtime a fully functional modelling tool with high visual fidelity.

Open NFR metamodel file »

Open NFR concrete syntax file »

Open NFR constraints file »

Open NFR UI details file »

For the purpose of illustration the tools here presented were enriched with example models that load automatically when the tool opens.