Jumat, 01 Juni 2012

Concordion specs for xProcess

We've recently started writing the specs for xProcess changes with Concordion which is an open source tool for writing acceptance tests- here's some initial feedback.

This is probably a topic I'll come back to, but for now if you're interested in seeing the first examples produced, they are available with the source code download at Source Forge. The initial area where Concordion is being used is the specification of constraints and dependencies. This is a complex area and we felt just adding unit tests for the xProcess scheduler would be insufficient to capture the nuances of the effect of adding a constraint; for example a task ending after the start of another one. This constraint alters not only the end date of the task, but also the order in which certain aspects of scheduling take place, which could affect the forecast dates of other tasks. Comments in the test code are simply not good enough to capture this behaviour, but Concordion provides ideal flexibility and clarity to document and test such behaviour. So far the experience has been very positive.

Below is an example of the generated output from Concordion following the test run.

Example output

Note - the links in the generated output below are to local files and therefore not accessible!

xProcessScheduler >

Constraints and Dependencies

Constraints may be defined on a task to limit when the task may either start or end. For example a task may be constrained to start after a specific calendar date, or a date which is manually defined on another task such as its target start date. Constraints may also reference the forecast date of another task, in which case it may be referred to as a dependency.

Dependencies defined on a task from another project use the forecast dates from the last time that project was scheduled - see Dependencies on another project - (note: such dates will be "NEVER" if the depended-on project has not yet been scheduled). Dependencies on tasks in the same project however require that the depended-on task is scheduled before the depending task. The depended-on task may be promoted in schedule order (start-after-end-of constraints) or the depending-on task may be demoted in schedule order (other forms of dependency such as start-after-start-of constraints). More details can be found on this and following pages.

Example 1. - With no Constraints

Assume that today is Wednesday 2012/4/12. (2012/4/12 )


  • a small project starting today
  • with one fully available participant available 8 hours per day for the duration of the project
  • having 2 date-based tasks (overheads of 20% each on all participants, one for the duration of the project and the other for the first week)
  • 10 effort-based tasks with 16 hour estimates, named a-j,
The following table sets up the tasks:

Task NameTask TypeHours / %Earliest StartEarliest EndNo. of Participants
a For Horseseffort-based161
b For Muttoneffort-based161
c Forth Highlanderseffort-based161
d For Rentialeffort-based161
e For Brauneffort-based161
f For Vessenceeffort-based161
g For Policeeffort-based161
h For One And One For Alleffort-based161
i For Novelloeffort-based161
j For Orangeseffort-based161
General Overheaddate-based20%2012/4/122012/10/18All
Starting Overheaddate-based20%2012/4/122012/4/19All

When the project is scheduled the project forecast start will be: 2012/4/12

Then the start and end dates of the workpackages will be as follows:

WorkpackageForecast StartForecast End (50%)
a For Horses2012/4/122012/4/17
b For Mutton2012/4/172012/4/20
c Forth Highlanders2012/4/202012/4/24
d For Rential2012/4/252012/4/27
e For Braun2012/4/272012/5/1
f For Vessence2012/5/22012/5/4
g For Police2012/5/42012/5/8
h For One And One For All2012/5/92012/5/11
i For Novello2012/5/112012/5/15
j For Oranges2012/5/162012/5/18
General Overhead2012/4/122012/10/18
Starting Overhead2012/4/122012/4/19

A dependency of one of these tasks on a task that is lower in priority will change the order of scheduling and result in different forecast dates for the project.

How Constraints change this result

Disqus Comments