Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Research Project DSL

  • Research projects are typically conducted in a collaborative manner by a number of partners (universities, companies, charities etc.) and have a fixed duration (in months – e.g. 36 months)
  • A project is split into a number of work-packages
  • Each work-package has a start and an end month and is further broken down into more fine-grained tasks and deliverables
    • Tasks also have a start and an end month and each deliverable is due on a specific month
  • Each partner declares how much effort (in person/months) they will allocate to each task

Exercise

  • Create a DSL for designing such projects
  • Create a model that conforms to the DSL and exercises all its features at least once

Why?

  • Proposal documents contain several tables with overlapping information (see screenshots below) e.g.
    • Effort per partner per task for a work-package
    • Effort per partner for the whole project
    • Table of deliverables for the whole project in chronological order
    • A Gantt chart that summarises the timeline of the project
  • Unless these tables are generated from a common source (i.e. a model) they can become inconsistent with each other
    • e.g. a partner may change their effort for a task but forget to change the overall effort figure for the entire project
  • Other consistency problems can also appear e.g.
    • Tasks that start before / end after the work-package in which they are contained
    • Deliverables that are due after their work-package ends
  • This is how we actually write proposals for research projects

Examples

Below are a few screenshots of actual tables generated from a model of an EC-funded research project.

Deliverables by chronological order Work packages Work package Summary of efforts Gantt chart

Solution

Try to design your own metamodel before you check out the solution below. It is also available in the model solution ZIP file.

@namespace(uri="research_project", prefix="")
package research_project;

class Project {
   attr String name;
   attr int duration; // in months
   attr String title;
   val WP[*] wps;
   val Partner[*] partners;
}

class WP { // work-package
   val Task[*] tasks;
   attr String title;
   ref Partner leader;
   attr String type; // research, development, management etc.
   val Effort[*] effort;
   val Deliverable[*] deliverables;
}

class Task {
   attr String title;
   attr int start; // month from the start of the project
   attr int end; // month from the start of the project
   ref Partner[*] partners;
}

class Deliverable {
   attr String title;
   attr int due; // month from the start of the project
   attr String nature; // software, report etc.
   attr String dissemination; // public, consortium, funder etc.
   ref Partner partner;
}

class Effort {
   ref Partner partner;
   attr float months;
}

class Partner {
   id attr String ~id;
   attr String name;
   attr String country;
}