### Want to contribute?

Initiating a project: Act 1. Setup, Act 2. Estimation, Act 3. Completion, Investment Risk, Summary

Contents

• Create the Estimate
• The EstimateList Resource
• The Estimate Resource
• Summary Sequence Diagram

• ## Software Estimation Tools

The most reliable way for a develop organization to estimate new projects is to base the estimate on similar past projects. Software estimation tools use predictor models that are calibrated on a set of past projects, either from a standard industry pool or from the projects performed by the development organization itself. We will discuss the process of calibrating software estimation tools in another scenario, EMS 1.0 Primer: Calibrating an Organization.

BrainTwistors Corp. uses a very simple software estimation tool, Guestimator 101, which also implements EMS 1.0. Guestimator 101, like PfGenius, is a consumer of EMS 1.0 services. Guestimator 101 is a desktop application intended for software development organizations that use a single implementation technology, that use teams composed of a uniform combination of experienced and novice developers, and that execute projects within a relatively small range of sizes and durations. This makes project execution fairly predictable. Guestimator 101 maintains a database of past projects with their effort, size, duration, and other measurements. It can be used to predict the effort given assumptions about size, duration, etc. as:

effort = f(size, duration, …)

where f is a function internal to Guestimator 101. Guestimator 101 does a statistical analysis of the historial project database and computes the value of effort that fits the data the best.

Note that a realistic software estimation tool would take into account many more factors in addition to size and duration. Factors such as the complexity of the software, the experience of the development team, the stability of the requirements, and the quality of the development tools have a significant impact on the effort. Furthermore, these project assumptions are not known with absolute precision, nor is the prediction given with certainty. The assumptions, and therefore the predications, all have uncertainties. We express these uncertainties by using probability distributions for the assumptions and predictions. We’ll discuss this topic in Investment Risk.

## Estimating Effort

At BrainTwistors Corp., Syd Ethan is a veteran software estimator and a power user of Guestimator 101. He receives the workflow notification from PfGenius saying that the Tsunami 1.0 project proposal is ready to be estimated. The notification contains a URI that identifies the project proposal resource:

`http://braintwistors.example.com/Project/4201`

Syd copies the Tsunami 1.0 project proposal URI from the notification, launches Guestimator 101 on his desktop, invokes the “Open Proposal” command and pastes in the URI when prompted by the dialog box.

## Using EMS 1.0

In EMS 1.0, the tool that contains the project assumptions, e.g. MetricServer, is the service provider and the tool that computes the estimate, e.g. Guestimator 101, is the service consumer. The consumer sends a GET request to the provider to retrieve the project scenarios. The consumer then computes the estimate, typically under the interactive control of a person skilled in software estimation and the use of the software estimation tools. When the estimate is complete, the consumer sends the estimate in a POST request to the provider.

Guestimator 101 must retreive the information about the project and its scenarios from MetricServer and display them to Syd so he can create the estimates. This is accomplished by several GET requests. Guestimator 101 first GETs the project URI and receives the Project 4201 resource.

The Project 4201 resource has an `ems:projectList` property whose value is the ProjectList URI. Guestimator 101 next GETs that URI and receives the ProjectList resource.

The ProjectList resource has an `ems:service` property whose value it the Service URI. Guestimator 101 next GETs that URI and receives the Service resource.

## The ScenarioList Resource

The Service resource contains properties that link to all the other List URIs. In particular, it contains an `ems:scenarioList` property whose value is the ScenarioList URI. However, Guestimator 101 does not simply GET that resource since it contains all the Scenario resources in MetricServer. Instead, Guestimator 101 filters the ScenarioList using a query parameter that gives only those Scenario resources that are for Project 4201. The full details of query parameters are specified in EMS 1.0 Query Syntax and Semantics. The following URI selects the scenarios defined for the project whose identifier is 4201:

`http://braintwistors.example.com/ems10/Scenario?oslc.where=ems:project{dc:identifier=4201}`

Here is the result of the GET for the above query:

###### Listing of ScenarioList Resource for Project 4201
``````<?xml version="1.0"?>
<ems:ScenarioList 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">BrainTwistors Corp. Scenario List
Queried by
ems:project{dc:identifier="4201"}</dcterms:title>
<dcterms:description rdf:parseType="Literal">
This is the list of all
Scenario resources contained in
the BrainTwistors Corp. MetricServer
web application that satisfy the
query ems:project{dc:identifier=4201}.
</dcterms:description>
<ems:service rdf:resource="http://braintwistors.example.com/ems10" />
<ems:memberScenario
rdf:resource="http://braintwistors.example.com/ems10/Scenario/5721" />
</ems:ScenarioList>
``````

Note that only Scenario 5721 is included in the result since it is the only scenario that is defined for Project 4201. In general, it may be useful to consider several alternate scenarios, produce estimates for each of them, and select the one that produces the best business value.

Finally, Guestimator 101 GETs the Scenario 5721 resource and presents the results. Syd in now able to proceed with the estimation task.

## Create the Estimate

Next, Syd works with Guestimator 101 to estimate the effort for the project. The Guestimator 101 historical project database yields an effort estimate of 25 person-months:

effort = f(50,000 ESLOC, 6 months, …)
= 25 person-month

Syd is satisified with this result and invokes the “Send Estimate” command in Guestimator 101 to send the estimate back to MetricServer.

## The EstimateList Resource

In EMS 1.0, a new instance resource of a given type is created by POSTing a representation of the instance to a List resource for that type. The Service resource contains an `ems:estimateList` property whose value is the EstimateList URI. The EstimateList URI in MetricServer is:

`http://braintwistors.example.com/ems10/Estimate`

## The Estimate Resource

Guestimator 101 POSTs the estimate to the EstimateList URI. The following listing shows the representation of the Estimate resource:

###### Listing of ASAP Estimate Resource Representation
``````<?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">Deliver Tsunami 1.0 ASAP Estimate by
Guestimator 101
</dcterms:title>
<dcterms:description rdf:parseType="Literal">
Guestimator 101 predicts
25 person-months.
</dcterms:description>
<ems:scenario rdf:resource="http://braintwistors.example.com/ems10/Scenario/5721" />
<ems:predicts>
<ems:MeasureDistribution>
<dcterms:title rdf:parseType="Literal">Total Effort</dcterms:title>
<ems:metric rdf:resource="http://open-services.net/ns/ems/metric#Effort" />
<ems:unitOfMeasure
rdf:resource="http://open-services.net/ns/ems/unit#PersonMonth" />
<ems:distribution>
<ems:PointEstimate>
<ems:numericValue rdf:datatype="http://www.w3.org/2001/XMLSchema#double">25</ems:numericValue>
</ems:PointEstimate>
</ems:distribution>
</ems:MeasureDistribution>
</ems:predicts>
<!--
Other properties of this resource have been omitted for brevity.
-->
</ems:Estimate>
``````

MetricServer creates the new Estimate resource and returns its URL:

`http://braintwistors.example.com/ems10/Estimate/6648`

GETing this URL gives the following:

###### Listing the Estimate 6648 Resource
``````<?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">Deliver Tsunami 1.0 ASAP Estimate by
Guestimator 101
</dcterms:title>
<dcterms:description rdf:parseType="Literal">
Guestimator 101 predicts
25 person-months.
</dcterms:description>
<dcterms:identifier>6648</dcterms:identifier>
<ems:estimateList rdf:resource="http://braintwistors.example.com/ems10/Estimate" />
<ems:scenario rdf:resource="http://braintwistors.example.com/ems10/Scenario/5721" />
<ems:predicts>
<ems:MeasureDistribution>
<dcterms:title rdf:parseType="Literal">Total Effort</dcterms:title>
<ems:metric rdf:resource="http://open-services.net/ns/ems/metric#Effort" />
<ems:unitOfMeasure
rdf:resource="http://open-services.net/ns/ems/unit#PersonMonth" />
<ems:distribution>
<ems:PointEstimate>
<ems:numericValue rdf:datatype="http://www.w3.org/2001/XMLSchema#double">25</ems:numericValue>
</ems:PointEstimate>
</ems:distribution>
</ems:MeasureDistribution>
</ems:predicts>
<!--
Other properties of this resource have been omitted for brevity.
-->
</ems:Estimate>
``````

Syd launches PfGenius in his web browser and verifies that the estimate was received and looks correct. He then changes the Tsunami 1.0 project proposal into the “Software Estimate Done” state. This state transition causes a notification to be sent back to Pedro so he can complete the business case.

## Summary Sequence Diagram

The following sequence diagram summarizes Act 2:

The next step is for Pedro to review the estimate and include it in the business case.

Next: Act 3. Completion

Previous: Act 1. Setup

Category:EMS Primer