Contents
Creating the Estimate
Reviewing and Accepting the Estimate
Creating the Measurement
Summary Sequence Diagram
Introduction
In this act, Priyanka meets with her development team and they decide to monitor defect arrival rate as a KPI for the project. The team wants to ensure that their defect prevention and quality assurance processes are working well and want to know as early as possible when the defect arrival rate gets too high or too low. If the rate is too high then their defect prevention processes may not working well. Similarly, if the rate is too low, then their quality assurance processess may not be working well.
Requesting the Estimate
Priyanka now needs to contact Syd Ethan, the software estimator, and ask him to estimate the defect arrival rate over the lifecycle of the project. The mechanism by which Priyanka contacts Syd is not specified by EMS 1.0. The following describes one possible mechanism. Other simple mechanisms, such as email or Atom feeds may also be used.
Let’s assume that Priyanka’s development organization uses TaskPhocus to manage all work related to project execution. TaskPhocus is based on a change management system that allows managers and developers to create work items of various types. TaskPhocus includes a work item type, Estimate Request, for requesting estimates. Priyanka assigns Syd to the software estimator role for the Tsunami 1.0 project and then creates a new Estimate Request for defect arrival rate. TaskPhocus notifies Syd that he has an Estimate Request that requires his action. The Estimate Request work item includes a link to the ems:Project resource for the Tsunami 1.0 project in MetricServer.
Opening the Project
Syd reviews the Estimate Request work item in TaskPhocus and copies the ems:Project URI (recall that we have been assuming no direct integration between TaskPhocus and Guestimator 101 so Syd has to manually copy and paste URIs between these tools):
http://braintwistors.example.com/ems10/Project/4201
Syd then launches Guestimator 101, his software estimation tool, invokes its Open Project command, and pastes in the ems:Project URI.
Guestimator 101 retrieves the relevant information associated with the Tsunami 1.0 project from MetricServer as part of its process of opening an ems:Project. This information includes the description of the project and its current baseline scenario and estimates. Syd needs to know which scenario the project has adopted in order to create an estimate for the defect arrival rate. The adopted scenario is part of the current baseline for the project. Guestimator 101 therefore needs to get the ems:Project resource in order to determine its current baseline, then get the current ems:Baseline to determine the adopted scenario, and then finally get the ems:Scenario resource to determine the assumptions under which the project is being executed. Syd will then be able to estimate additional metrics such as defect arrival rate.
First Guestimator 101 GETs the ems:Project resource. The following listing shows an additional property, ems:currentBaseline, of this resource:
Listing of Project 4201 Resource with ems:currentBaseline Property
<?xml version="1.0"?>
<ems:Project xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:ems="http://open-services.net/ns/ems#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
rdf:about="http://braintwistors.example.com/ems10/Project/4201">
<dcterms:title rdf:parseType="Literal">Tsunami 1.0</dcterms:title>
<dcterms:description rdf:parseType="Literal">
The goal of this project is to create a web version of
Tsunami, a Japanese logic puzzle, in order to drive traffic to the
BrainTwistors Corp. website and increase advertising revenue. Future
plans include developing free iPhone, BlackBerry, and Nintendo DS
versions, and charging for puzzle downloads.
</dcterms:description>
<dcterms:identifier>4201</dcterms:identifier>
<ems:projectList rdf:resource="http://braintwistors.example.com/ems10/Project" />
<ems:currentBaseline
rdf:resource="http://braintwistors.example.com/ems10/Baseline/7347" />
<!--
Other properties of this resource have been omitted for brevity.
-->
</ems:Project>
The ems:Project resource now contains the property ems:currentBaseline which links the project to its current baseline, an ems:Baseline resource. Whenever a new ems:Baseline resource is created, an EMS 1.0 service provider automatically updates the ems:currentBaseline of the corresponding ems:Project resource so that its ems:currentBaseline property always refers to the most recently created ems:Baseline resource for the project. In this example, the URI of the current ems:Baseline resource for the Tsunami 1.0 project is:
http://braintwistors.example.com/ems10/Baseline/7347
Guestimator 101 GETs the current ems:Baseline resource:
Listing of Baseline 7347 Resource
<?xml version="1.0"?>
<ems:Baseline xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/" xmlns:ems="http://open-services.net/ns/ems#"
rdf:about="http://braintwistors.example.com/ems10/Baseline/7347">
<dcterms:title rdf:parseType="Literal">Initial Baseline for Tsunami 1.0
</dcterms:title>
<dcterms:description rdf:parseType="Literal">
Deliver ASAP. Duration 6
months. Guestimator 101
predicts 25 person-months.
</dcterms:description>
<dcterms:identifier>7347</dcterms:identifier>
<ems:project rdf:resource="http://braintwistors.example.com/ems10/Project/4201" />
<ems:scenario rdf:resource="http://braintwistors.example.com/ems10/Scenario/5721" />
<ems:estimate rdf:resource="http://braintwistors.example.com/ems10/Estimate/6648" />
<!--
Other properties of this resource have been omitted for brevity.
-->
</ems:Baseline>
Guestimator 101 gets the URI of the baselined scenario from the ems:scenario property of the current ems:Baseline resource:
http://braintwistors.example.com/ems10/Scenario/5721
Guestimator 101 GETs the baselined ems:Scenario resource (see Listing of Scenario 5721 Resource). Similarly, Guestimator 101 gets the URIs of the baselined estimates from the ems:estimate properties of the current ems:Baseline resource and GETs them.
Finally, Guestimator 101 presents all the retrieved information about the Tsunami 1.0 project to Syd. Syd can now proceed to develop the requested estimate.
Creating the Estimate
Syd invokes Guestimator 101’s Create Estimate command and develops the estimate for defect arrival rate (see How Guestimator 101 Estimates Defect Arrival Rates for more detail).
The following table summarizes this estimate:
Table of Estimated Total Defects Per Month
Month |
Low |
Most Likely |
High |
1 |
27 |
31 |
38 |
2 |
69 |
79 |
98 |
3 |
84 |
96 |
120 |
4 |
73 |
83 |
104 |
5 |
50 |
57 |
71 |
6 |
28 |
32 |
40 |
7 |
13 |
15 |
18 |
8 |
5 |
6 |
7 |
9 |
2 |
2 |
2 |
When Syd is satisfied with the result, he invokes the Save Estimate command. Recall that all of the details of the Guestimator 101 user interface are outside the scope of EMS 1.0. However, when Syd invokes the Save Estimate command, Guestimator 101 uses EMS 1.0 as a service consumer to create a new ems:Estimate resource in MetricServer. Guestimator 101 creates the following ems:Estimate resource representation and POSTs it to the ems:EstimateList URI:
Listing of Estimate Resource for Defect Arrivals by Month
<?xml version="1.0"?>
<ems:Estimate xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/" xmlns:ems="http://open-services.net/ns/ems#">
<dcterms:title rdf:parseType="Literal">Tsunami 1.0 Monthly Defect Arrival
Rate Estimate by
Guestimator 101
</dcterms:title>
<dcterms:description rdf:parseType="Literal">
Guestimator 101 uses
Rayleigh distribution with arrival
rate peak at 2.5 months and
triangular distribution for defect density
with a low of 7
defects/KLOC, a most likely of 8 defects/KLOC, and a
high of 10
defects/KLOC.
</dcterms:description>
<ems:scenario rdf:resource="http://braintwistors.example.com/ems10/Scenario/5721" />
<ems:predictsTable>
<ems:FactDistributionTable>
<dcterms:title rdf:parseType="Literal">Defect Arrival Count by Elapsed
Month</dcterms:title>
<ems:head>
<ems:Head>
<ems:dimensionColumn>
<ems:DimensionColumn rdf:ID="d1">
<dcterms:title rdf:parseType="Literal">Month</dcterms:title>
<ems:dimension
rdf:resource="http://open-services.net/ns/ems/dimension#Time" />
<ems:grain
rdf:resource="http://open-services.net/ns/ems/grain#ElapsedMonth" />
</ems:DimensionColumn>
</ems:dimensionColumn>
<ems:measureColumn>
<ems:MeasureColumn rdf:ID="m1">
<dcterms:title rdf:parseType="Literal">Reported Problems</dcterms:title>
<ems:metric
rdf:resource="http://open-services.net/ns/ems/metric#Failures" />
<ems:unitOfMeasure
rdf:resource="http://open-services.net/ns/ems/unit#Failure" />
</ems:MeasureColumn>
</ems:measureColumn>
</ems:Head>
</ems:head>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/1" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">27</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">31</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">38</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/2" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">69</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">79</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">98</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/3" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">84</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">96</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">120</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/4" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">73</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">83</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">104</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/5" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">50</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">57</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">71</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/6" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">28</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">32</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">40</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/7" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">13</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">15</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">18</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/8" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">5</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">6</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">7</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
<ems:factDistribution>
<ems:FactDistribution>
<ems:dimensionCell>
<ems:DimensionCell>
<ems:inColumn rdf:resource="#d1" />
<ems:dimensionMember
rdf:resource="http://open-services.net/ns/ems/dimension-member/ElapsedMonth/9" />
</ems:DimensionCell>
</ems:dimensionCell>
<ems:measureDistributionCell>
<ems:MeasureDistributionCell>
<ems:inColumn rdf:resource="#m1" />
<ems:distribution>
<ems:TriangularDistribution>
<ems:low rdf:datatype="http://www.w3.org/2001/XMLSchema#double">2</ems:low>
<ems:mostLikely rdf:datatype="http://www.w3.org/2001/XMLSchema#double">2</ems:mostLikely>
<ems:high rdf:datatype="http://www.w3.org/2001/XMLSchema#double">2</ems:high>
</ems:TriangularDistribution>
</ems:distribution>
</ems:MeasureDistributionCell>
</ems:measureDistributionCell>
</ems:FactDistribution>
</ems:factDistribution>
</ems:FactDistributionTable>
</ems:predictsTable>
<!--
Other properties of this resource have been omitted for brevity.
-->
</ems:Estimate>
MetricServer returns the following URI for this new ems:Estimate resource:
http://braintwistors.example.com/ems10/Estimate/7349
Syd then launches TaskPhocus, opens his Estimate Request work item, pastes in the URI for the newly created ems:Estimate 7349 resource, and marks the work item as Resolved. TaskPhocus then notifies Priyanka that the estimate is ready for review and approval.
Reviewing and Accepting the Estimate
Priyanka receives the notification from TaskPhocus that the estimate is ready for review. Priyanka opens the work item and invokes the TaskPhocus command to Review Estimate. TaskPhocus gets the ems:Estimate 7349 URI from the work item and GETs the resource. MetricServer returns a representation of the resource to TaskPhocus which displays it to Priyanka.
Since this is a very important estimate, Priyanka decides that the development team needs to review it so she calls a team meeting and invites Syd. Syd then reviews the estimate with Priyanka and the development team. They agree it is reasonable as an initial estimate.
Priyanka opens the work item in TaskPhocus and invokes the Accept Estimate command. When an estimate is accepted, it becomes part of the project baseline. TaskPhocus creates a new ems:Baseline resource representation that adds ems:Estimate 7349 to the set of estimates. The following listing shows the new ems:Baseline resource representation:
Listing of Baseline Resource with Estimate 7349 Added
<?xml version="1.0"?>
<ems:Baseline xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/" xmlns:ems="http://open-services.net/ns/ems#">
<dcterms:title rdf:parseType="Literal">Initial Baseline for Tsunami 1.0
</dcterms:title>
<dcterms:description rdf:parseType="Literal">
Deliver ASAP. Duration 6
months. Guestimator 101
predicts 25 person-months.
An estimate for the
defect arrival rate over time has been included
in the baseline.
</dcterms:description>
<ems:project rdf:resource="http://braintwistors.example.com/ems10/Project/4201" />
<ems:scenario rdf:resource="http://braintwistors.example.com/ems10/Scenario/5721" />
<ems:estimate rdf:resource="http://braintwistors.example.com/ems10/Estimate/6648" />
<ems:estimate rdf:resource="http://braintwistors.example.com/ems10/Estimate/7349" />
<!--
Other properties of this resource have been omitted for brevity.
-->
</ems:Baseline>
Creating the Measurement
The development team uses TaskPhocus for defect tracking. TaskPhocus has built-in reporting capability and display defect data in reports, charts, and dashboards. Priyanka customizes her dashboard by adding a report that shows the current measured defect arrival rate and compares it to the estimate. TaskPhocus gets the defect measurements from its own defect tracking system and the estimate from MetricServer.
However, it is also useful to make the defect information available to other applications. The TaskPhocus report definitions tools are also EMS 1.0 service consumers and have the ability to create ems:Measurement resources. When Priyanka customized her dashboard to show the defect measurements and estimates, she also invoked the Publish Measurement command which did the following.
TaskPhocus navigated links from the ems:Estimate 7349 URI up to the ems:Service resource URI, and from that obtained the URI to its ems:MeasurementList URI. TaskPhocus then created the following ems:Measurement resource representation and POSTed it to the ems:MeasurementList URI:
Listing of Measurement Resource for Defect Arrivals by Month
<?xml version="1.0"?>
<ems:Measurement xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcterms="http://purl.org/dc/terms/" xmlns:ems="http://open-services.net/ns/ems#">
<dcterms:title rdf:parseType="Literal">Tsunami 1.0 Monthly Defect Arrival
Rate Measurement from
TaskPhocus
</dcterms:title>
<dcterms:description rdf:parseType="Literal">
A. live TaskPhocus query is
the source of this
measurement.
</dcterms:description>
<ems:project rdf:resource="http://braintwistors.example.com/ems10/Project/4201" />
<ems:observesTable>
<ems:FactTable>
<dcterms:title rdf:parseType="Literal">Defect Arrival Rate by Elapsed Month
</dcterms:title>
<ems:head>
<ems:Head>
<ems:dimensionColumn>
<ems:DimensionColumn rdf:ID="m1">
<dcterms:title rdf:parseType="Literal">Month</dcterms:title>
<ems:dimension
rdf:resource="http://open-services.net/ns/ems/schedule#elapsedTime" />
<ems:grain
rdf:resource="http://open-services.net/ns/ems/grains#month" />
</ems:DimensionColumn>
</ems:dimensionColumn>
<ems:measureColumn>
<ems:MeasureColumn rdf:ID="d1">
<dcterms:title rdf:parseType="Literal">Found Defects</dcterms:title>
<ems:metric
rdf:resource="http://open-services.net/ns/ems/quality#defectArrivalCount" />
<ems:unitOfMeasure
rdf:resource="http://open-services.net/ns/ems/units#defect" />
</ems:MeasureColumn>
</ems:measureColumn>
</ems:Head>
</ems:head>
<ems:tableSource
rdf:resource="http://braintwistors.example.com/taskphocus/Query/3365" />
</ems:FactTable>
</ems:observesTable>
<!--
Other properties of this resource have been omitted for brevity.
-->
</ems:Measurement>
MetricServer returns the following URI for this resource:
http://braintwistors.example.com/ems10/Measurement/6109
An ems:Measurement resource is like an ems:Estimation resource except that it provides actual observations of the project instead of probability distributions that predict the observations. An ems:Measurement resource may contain the observations directly, provide a URI to the observations, or both. In this case, the ems:Measurement resource provides only a URI to the observerations in the ems:observationSource property. Its value is a URI that TaskPhocus provided to GET the live defect arrival rate data:
http://braintwistors.example.com/taskphocus/Query/3365
In general, providing a URI to the observation data is useful for frequently changing data. If the observation data is directly included in the ems:Measurement resource, the ems:observationSource URI may also be provided as a link to the authoritative source of the data.
This completes Act 2. Estimation. In the next act, Act 3. Execution, the team starts development and defects begin to arrive. Priyanka will use the estimate to monitor progress.
Summary Sequence Diagram
The following sequence diagram summarizes the interactions in this act:
Next: Act 3. Execution
Previous: Act 1. Setup
Category:EMS Primer