Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Stochastic Project Evaluation & Review Technique

Version 1.1.0+20240615 (Version Release Notes)

The Stochastic Project Evaluation & Review Technique program, SPERT, supports Critical Path Method project planning, including generation of text-based GANTT charts.

This program is free open source software licensed under the MIT License, Copyright © 2024 Rick Rutt.

Information about the source code compilation of the SPERT program appear at the end of this document in the Developer Information section.

About the Software

The software is a self-contained executable program, written in Free Pascal, that runs on Microsoft Windows or Ubuntu Linux (and presumably other Linux distributions). (No separate run-time environment is required to run the program.)

The Lazarus Integrated Development Environment was used to develop the program. (Both Free Pascal and the Lazarus IDE are free open-source software products.)

Downloading and Running the Program

Microsoft Windows

You can run the SPERT program on Microsoft Windows as follows:

  • Download the SPERT.exe binary executable file from the bin sub-folder from this GitHub.com page.

  • To uninstall the program, simply delete the SPERT.exe file.

Ubuntu Linux

You can run the SPERT program on Ubuntu Linux (and presumably other Linux distributions) as follows:

  • Download the SPERT binary executable file (with no file extension) from the bin sub-folder from this GitHub.com page.

  • Ensure the SPERT file has the executable permission. From a Files window, right-click the file, select Properties, and use the Permissions tab to enable the Execute permission. To do this in a Terminal window, use the following command:

    chmod +x SPERT

  • To uninstall the program, simply delete the SPERT binary executable file.

Running the Program

Open a Command Prompt or Terminal window.

Type the SPERT.exe (on Windows) or SPERT (on Linux) file name (with full path if necessary) with no additional arguments to view usage information for the program.

Command Line Arguments

filename input file name
/PN Print input Network
/PD Print Detailed analysis results by task
/PG Print Gantt chart
/PR Print Resource usage histogram and total
/PF Print distributions of milestone Finish times
/NSn Number of Simulations is "n" (default is l)
/RLn Resource Limit is "n" (default is infinity)
/SDmmdd Start Date month and day (for time scale headings)
(Leading zeros are required for "mm" and "dd")

The standard output may be redirected with >FILENAME

Input File Format

The input file is read in the following format (any blank lines are ignored):

Project Name on one line
TaskCode Optimistic MostLikely Pessimistic [@ResCount] [Task Desc]
...
*
PredTaskCode SuccTaskCode
...
*
  • TaskCode is a short taskname (up to 10 chars.) without blanks. If TaskCode begins with a #, then it is a Milestone task. Preceding TaskCode or #TaskCode with ^ implies that this task is a successor to the task above it. If TaskCode ends with a !, the task is a High Priority Task.

  • Optimistic, MostLikely, and Pessimistic are task time span estimates.

  • ResCount is an optional real Resource count. (1.0 is assumed if omitted).

  • Task Desc is an optional longer description and allows blanks.

  • PredTaskCode and SuccTaskCode form a precedence pair of two tasks. (The # for Milestones and ! for Priority Tasks are optional for these task codes.) A ditto (") for either PredTaskCode or SuccTaskCode indicates reuse of the value from the preceding line.

  • (The last * line is optional.)

  • (Any line starting with a slash (/) is considered a comment and is ignored.)

The file test\SPERT-Example.txt contains a small sample project for use in testing the SPERT program:

/ This is an example input file for the SPERT program.
/ This is a simple test project.
Example Project Schedule
/ These are the tasks for the project.
kickoff 1 1 1 @3 All-day Kickoff Meeting (entire team)
^interview 3 5 10 @3 Requirements Interviews (entire team)
r-fin 1 2.5 5 Financial Subsystem Requirements Doc.
r-mfg 2 4 10 Manufacturing Subsystem Requirements Doc.
r-sls 0.5 1.5 5 Sales Subsystem Requirements Doc.
#wt-r 0.5 0.5 1 @3 Requirements Doc. Walk-thru (entire team)
d-fin 3 6 12 Design Financial Subsystem
^p-fin 8 12 25 Program & Test Financial Subsystem
d-mfg 4 10 20 Design Manufacturing Subsystem
^p-mfg 10 15 30 Program & Test Manufacturing Subsystem
d-sls 3 6 10 Design Sales Subsystem
^p-sls 8 10 20 Program & Test Sales Subsystem
test! 5 10 20 @2 Integration Test/Debug Entire System
userdoc 10 12 15 Write User Documentation
#install 1 2 5 Install System
*
/ These are additional task dependencies.
interview r-fin
" r-mfg
" r-sls
r-fin wt-r
r-mfg "
r-sls "
wt-r d-fin
" d-mfg
" d-sls
d-fin userdoc
d-mfg "
d-sls "
p-fin test
p-mfg "
p-sls "
test install
userdoc "
*

Gantt Chart

In the output Gantt chart, the following symbols are used:

X = One day in task on the Critical Path
9 = One day in task that was critical in 90% of simulations
...
1 = One day in task that was critical in 10% of simulations
+ = One day in non-critical task
- = trailing float (resource limits ignored)
. = leading delay (only occurs if resources are limited)

Here is an example Gantt chart:

Example Project Schedule
Results from Mean Durations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXX
r-fin +++--
r-mfg XXXXXX
r-sls +++---
#wt-r X
d-fin +++++++-------
p-fin +++++++++++++++-------
d-mfg XXXXXXXXXXXX
p-mfg XXXXXXXXXXXXXXXXXXX
d-sls +++++++----------
p-sls +++++++++++++----------
test! XXXXXXXXXXXX
userdoc +++++++++++++-----------------
#install XXX

Here is an example Gantt chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXXX
r-fin 222--
r-mfg 999999
r-sls 111--
#wt-r X
d-fin 2222222--------
p-fin 2222222222222222--------
d-mfg 999999999999
p-mfg 9999999999999999999
d-sls +++++++-----------
p-sls ++++++++++++++-----------
test! XXXXXXXXXXXXX
userdoc ++++++++++++------------------
#install XXX

Here is an example Gantt chart using 100 simulations but with the Resource Limit set to 3 (/RL3):

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Resource Limit is 3
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff +
interview ++++++
r-fin +++
r-mfg ++++++
r-sls +++
#wt-r ++
d-fin ++++++++
p-fin +++++++++++++++
d-mfg ++++++++++++
p-mfg ++++++++++++++++++
d-sls +++++++
p-sls +++++++++++++
test! 2222222222222
userdoc ......++++++++++++
#install XXX

Resource Usage Chart

In the resource usage chart, the following symbols are used:

X = One unit of resource fully used that day
9 = 0.9 units of resource
...
1 = 0.1 units of resource

Here is an example Resource Usage chart:

Example Project Schedule
Results from Mean Durations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
7XXXXXXX XXXXXXXXX2 4XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX7 4XXXXXXXXXXX4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Expected Total Resource Use = 142.5

Here is an example Resource Usage chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
12234566676531 XXXXXXX852 13589XXXXXXXXXXXXXXXXX852 XXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXX9987666666666655432 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX87654433221111111 Expected Total Resource Use = 143.2
Maximum Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
XXXXXXXXXXXXXXXXXXXXX5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9X1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
Lowest Total Resource Use = 117.8
Highest Total Resource Use = 175.4

Milestone Finish Distributions

In the finish distributions, an asterisk marks the "mean" value.

Here is an example Finish Distributions chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Distributions of Milestone Task Finish Times
#wt-r Requirements Doc. Walk-thru (entire team)
9 XXXX
10 XXXXXXX
11 XXXXXXXXXXXXXX
12 XXXXXXXXXXXXXXX
13*XXXXXXXXXXXXXXX
14 XXXXXXXXXX
15 XXXXXXXXXXXXXX
16 XXXXXXXX
17 XXXXXXXXXX
18 X
19 X
20 X
#install Install System
47 X
48 XX
49 X
50 XXX
51 XXXXXX
52 XXX
53 XXXX
54 XXXXX
55 XXXX
56 XXXXXXXXXX
57 XXXXXXXXX
58 XXXX
59*XXXXX
60 XXXXXXXX
61 XX
62 XX
63 XXXXXXXX
64 XX
65 XXXXXX
66 XXX
67 XXX
68 XX
69 XXX
70 XX
71 X
72 X

The Triangular Probability Distribution

The Triangular probability distribution provides an alternative to a Gaussian normal distribution when specific lower and upper limits are desired on the resulting value. The triangular distribution can also be skewed to yield an asymmetrical distribution.

The triangular distribution is also mathematically tractable; its mode, median, expected value (mean), and inverse can be derived and computed.

For further information, see the Wikipedia article.

Developer Information

Source code compilation notes

The integrated development environment for Free Pascal is the Lazarus IDE for Free Pascal.

Download the Lazarus IDE, including Free Pascal, from here:

After installing the Lazarus IDE, clone this GitHub repository to your local disk. Then double-click on the src\SPERT.lpr project file to open it in Lazarus.

Note: Using the debugger in the Lazarus IDE on Windows 10 might require the following configuration adjustment:

When Lazarus includes debugging information the executable file is relatively large. When ready to create a release executable, the file size can be significantly reduced by selecting the menu item Project | Project Options ... and navigating to the Compile Options | Debugging tab in the resulting dialog window. Clear the check-mark from the Generate info for the debugger option and then click the OK button. Then rebuild the executable using the Run | Build menu item (or using the shortcut key-stroke Shift-F9).

Release Notes

Version 1.1.0+20240615

Minor output spacing adjustment. Display Version in StdErr output. Treat input lines starting with slash (/) as comments.

Version 1.0.1+20240421

Use builtin redirectable StdErr handle instead of opening CON system file.

Version 1.0.0+20240420

Initial Free Pascal release.

About

Stochastic Project Evaluation & Review Technique project planning program

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Stochastic Project Evaluation & Review Technique

Version 1.1.0+20240615 (Version Release Notes)

The Stochastic Project Evaluation & Review Technique program, SPERT, supports Critical Path Method project planning, including generation of text-based GANTT charts.

This program is free open source software licensed under the MIT License, Copyright © 2024 Rick Rutt.

Information about the source code compilation of the SPERT program appear at the end of this document in the Developer Information section.

About the Software

The software is a self-contained executable program, written in Free Pascal, that runs on Microsoft Windows or Ubuntu Linux (and presumably other Linux distributions). (No separate run-time environment is required to run the program.)

The Lazarus Integrated Development Environment was used to develop the program. (Both Free Pascal and the Lazarus IDE are free open-source software products.)

Downloading and Running the Program

Microsoft Windows

You can run the SPERT program on Microsoft Windows as follows:

  • Download the SPERT.exe binary executable file from the bin sub-folder from this GitHub.com page.

  • To uninstall the program, simply delete the SPERT.exe file.

Ubuntu Linux

You can run the SPERT program on Ubuntu Linux (and presumably other Linux distributions) as follows:

  • Download the SPERT binary executable file (with no file extension) from the bin sub-folder from this GitHub.com page.

  • Ensure the SPERT file has the executable permission. From a Files window, right-click the file, select Properties, and use the Permissions tab to enable the Execute permission. To do this in a Terminal window, use the following command:

    chmod +x SPERT

  • To uninstall the program, simply delete the SPERT binary executable file.

Running the Program

Open a Command Prompt or Terminal window.

Type the SPERT.exe (on Windows) or SPERT (on Linux) file name (with full path if necessary) with no additional arguments to view usage information for the program.

Command Line Arguments

filename input file name
/PN Print input Network
/PD Print Detailed analysis results by task
/PG Print Gantt chart
/PR Print Resource usage histogram and total
/PF Print distributions of milestone Finish times
/NSn Number of Simulations is "n" (default is l)
/RLn Resource Limit is "n" (default is infinity)
/SDmmdd Start Date month and day (for time scale headings)
(Leading zeros are required for "mm" and "dd")

The standard output may be redirected with >FILENAME

Input File Format

The input file is read in the following format (any blank lines are ignored):

Project Name on one line
TaskCode Optimistic MostLikely Pessimistic [@ResCount] [Task Desc]
...
*
PredTaskCode SuccTaskCode
...
*
  • TaskCode is a short taskname (up to 10 chars.) without blanks. If TaskCode begins with a #, then it is a Milestone task. Preceding TaskCode or #TaskCode with ^ implies that this task is a successor to the task above it. If TaskCode ends with a !, the task is a High Priority Task.

  • Optimistic, MostLikely, and Pessimistic are task time span estimates.

  • ResCount is an optional real Resource count. (1.0 is assumed if omitted).

  • Task Desc is an optional longer description and allows blanks.

  • PredTaskCode and SuccTaskCode form a precedence pair of two tasks. (The # for Milestones and ! for Priority Tasks are optional for these task codes.) A ditto (") for either PredTaskCode or SuccTaskCode indicates reuse of the value from the preceding line.

  • (The last * line is optional.)

  • (Any line starting with a slash (/) is considered a comment and is ignored.)

The file test\SPERT-Example.txt contains a small sample project for use in testing the SPERT program:

/ This is an example input file for the SPERT program.
/ This is a simple test project.
Example Project Schedule
/ These are the tasks for the project.
kickoff 1 1 1 @3 All-day Kickoff Meeting (entire team)
^interview 3 5 10 @3 Requirements Interviews (entire team)
r-fin 1 2.5 5 Financial Subsystem Requirements Doc.
r-mfg 2 4 10 Manufacturing Subsystem Requirements Doc.
r-sls 0.5 1.5 5 Sales Subsystem Requirements Doc.
#wt-r 0.5 0.5 1 @3 Requirements Doc. Walk-thru (entire team)
d-fin 3 6 12 Design Financial Subsystem
^p-fin 8 12 25 Program & Test Financial Subsystem
d-mfg 4 10 20 Design Manufacturing Subsystem
^p-mfg 10 15 30 Program & Test Manufacturing Subsystem
d-sls 3 6 10 Design Sales Subsystem
^p-sls 8 10 20 Program & Test Sales Subsystem
test! 5 10 20 @2 Integration Test/Debug Entire System
userdoc 10 12 15 Write User Documentation
#install 1 2 5 Install System
*
/ These are additional task dependencies.
interview r-fin
" r-mfg
" r-sls
r-fin wt-r
r-mfg "
r-sls "
wt-r d-fin
" d-mfg
" d-sls
d-fin userdoc
d-mfg "
d-sls "
p-fin test
p-mfg "
p-sls "
test install
userdoc "
*

Gantt Chart

In the output Gantt chart, the following symbols are used:

X = One day in task on the Critical Path
9 = One day in task that was critical in 90% of simulations
...
1 = One day in task that was critical in 10% of simulations
+ = One day in non-critical task
- = trailing float (resource limits ignored)
. = leading delay (only occurs if resources are limited)

Here is an example Gantt chart:

Example Project Schedule
Results from Mean Durations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXX
r-fin +++--
r-mfg XXXXXX
r-sls +++---
#wt-r X
d-fin +++++++-------
p-fin +++++++++++++++-------
d-mfg XXXXXXXXXXXX
p-mfg XXXXXXXXXXXXXXXXXXX
d-sls +++++++----------
p-sls +++++++++++++----------
test! XXXXXXXXXXXX
userdoc +++++++++++++-----------------
#install XXX

Here is an example Gantt chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXXX
r-fin 222--
r-mfg 999999
r-sls 111--
#wt-r X
d-fin 2222222--------
p-fin 2222222222222222--------
d-mfg 999999999999
p-mfg 9999999999999999999
d-sls +++++++-----------
p-sls ++++++++++++++-----------
test! XXXXXXXXXXXXX
userdoc ++++++++++++------------------
#install XXX

Here is an example Gantt chart using 100 simulations but with the Resource Limit set to 3 (/RL3):

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Resource Limit is 3
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff +
interview ++++++
r-fin +++
r-mfg ++++++
r-sls +++
#wt-r ++
d-fin ++++++++
p-fin +++++++++++++++
d-mfg ++++++++++++
p-mfg ++++++++++++++++++
d-sls +++++++
p-sls +++++++++++++
test! 2222222222222
userdoc ......++++++++++++
#install XXX

Resource Usage Chart

In the resource usage chart, the following symbols are used:

X = One unit of resource fully used that day
9 = 0.9 units of resource
...
1 = 0.1 units of resource

Here is an example Resource Usage chart:

Example Project Schedule
Results from Mean Durations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
7XXXXXXX XXXXXXXXX2 4XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX7 4XXXXXXXXXXX4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Expected Total Resource Use = 142.5

Here is an example Resource Usage chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
12234566676531 XXXXXXX852 13589XXXXXXXXXXXXXXXXX852 XXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXX9987666666666655432 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX87654433221111111 Expected Total Resource Use = 143.2
Maximum Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
XXXXXXXXXXXXXXXXXXXXX5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9X1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
Lowest Total Resource Use = 117.8
Highest Total Resource Use = 175.4

Milestone Finish Distributions

In the finish distributions, an asterisk marks the "mean" value.

Here is an example Finish Distributions chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Distributions of Milestone Task Finish Times
#wt-r Requirements Doc. Walk-thru (entire team)
9 XXXX
10 XXXXXXX
11 XXXXXXXXXXXXXX
12 XXXXXXXXXXXXXXX
13*XXXXXXXXXXXXXXX
14 XXXXXXXXXX
15 XXXXXXXXXXXXXX
16 XXXXXXXX
17 XXXXXXXXXX
18 X
19 X
20 X
#install Install System
47 X
48 XX
49 X
50 XXX
51 XXXXXX
52 XXX
53 XXXX
54 XXXXX
55 XXXX
56 XXXXXXXXXX
57 XXXXXXXXX
58 XXXX
59*XXXXX
60 XXXXXXXX
61 XX
62 XX
63 XXXXXXXX
64 XX
65 XXXXXX
66 XXX
67 XXX
68 XX
69 XXX
70 XX
71 X
72 X

The Triangular Probability Distribution

The Triangular probability distribution provides an alternative to a Gaussian normal distribution when specific lower and upper limits are desired on the resulting value. The triangular distribution can also be skewed to yield an asymmetrical distribution.

The triangular distribution is also mathematically tractable; its mode, median, expected value (mean), and inverse can be derived and computed.

For further information, see the Wikipedia article.

Developer Information

Source code compilation notes

The integrated development environment for Free Pascal is the Lazarus IDE for Free Pascal.

Download the Lazarus IDE, including Free Pascal, from here:

After installing the Lazarus IDE, clone this GitHub repository to your local disk. Then double-click on the src\SPERT.lpr project file to open it in Lazarus.

Note: Using the debugger in the Lazarus IDE on Windows 10 might require the following configuration adjustment:

When Lazarus includes debugging information the executable file is relatively large. When ready to create a release executable, the file size can be significantly reduced by selecting the menu item Project | Project Options ... and navigating to the Compile Options | Debugging tab in the resulting dialog window. Clear the check-mark from the Generate info for the debugger option and then click the OK button. Then rebuild the executable using the Run | Build menu item (or using the shortcut key-stroke Shift-F9).

Release Notes

Version 1.1.0+20240615

Minor output spacing adjustment. Display Version in StdErr output. Treat input lines starting with slash (/) as comments.

Version 1.0.1+20240421

Use builtin redirectable StdErr handle instead of opening CON system file.

Version 1.0.0+20240420

Initial Free Pascal release.

About

Stochastic Project Evaluation & Review Technique project planning program

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Stochastic Project Evaluation & Review Technique

Version 1.1.0+20240615 (Version Release Notes)

The Stochastic Project Evaluation & Review Technique program, SPERT, supports Critical Path Method project planning, including generation of text-based GANTT charts.

This program is free open source software licensed under the MIT License, Copyright © 2024 Rick Rutt.

Information about the source code compilation of the SPERT program appear at the end of this document in the Developer Information section.

About the Software

The software is a self-contained executable program, written in Free Pascal, that runs on Microsoft Windows or Ubuntu Linux (and presumably other Linux distributions). (No separate run-time environment is required to run the program.)

The Lazarus Integrated Development Environment was used to develop the program. (Both Free Pascal and the Lazarus IDE are free open-source software products.)

Downloading and Running the Program

Microsoft Windows

You can run the SPERT program on Microsoft Windows as follows:

  • Download the SPERT.exe binary executable file from the bin sub-folder from this GitHub.com page.

  • To uninstall the program, simply delete the SPERT.exe file.

Ubuntu Linux

You can run the SPERT program on Ubuntu Linux (and presumably other Linux distributions) as follows:

  • Download the SPERT binary executable file (with no file extension) from the bin sub-folder from this GitHub.com page.

  • Ensure the SPERT file has the executable permission. From a Files window, right-click the file, select Properties, and use the Permissions tab to enable the Execute permission. To do this in a Terminal window, use the following command:

    chmod +x SPERT

  • To uninstall the program, simply delete the SPERT binary executable file.

Running the Program

Open a Command Prompt or Terminal window.

Type the SPERT.exe (on Windows) or SPERT (on Linux) file name (with full path if necessary) with no additional arguments to view usage information for the program.

Command Line Arguments

filename input file name
/PN Print input Network
/PD Print Detailed analysis results by task
/PG Print Gantt chart
/PR Print Resource usage histogram and total
/PF Print distributions of milestone Finish times
/NSn Number of Simulations is "n" (default is l)
/RLn Resource Limit is "n" (default is infinity)
/SDmmdd Start Date month and day (for time scale headings)
(Leading zeros are required for "mm" and "dd")

The standard output may be redirected with >FILENAME

Input File Format

The input file is read in the following format (any blank lines are ignored):

Project Name on one line
TaskCode Optimistic MostLikely Pessimistic [@ResCount] [Task Desc]
...
*
PredTaskCode SuccTaskCode
...
*
  • TaskCode is a short taskname (up to 10 chars.) without blanks. If TaskCode begins with a #, then it is a Milestone task. Preceding TaskCode or #TaskCode with ^ implies that this task is a successor to the task above it. If TaskCode ends with a !, the task is a High Priority Task.

  • Optimistic, MostLikely, and Pessimistic are task time span estimates.

  • ResCount is an optional real Resource count. (1.0 is assumed if omitted).

  • Task Desc is an optional longer description and allows blanks.

  • PredTaskCode and SuccTaskCode form a precedence pair of two tasks. (The # for Milestones and ! for Priority Tasks are optional for these task codes.) A ditto (") for either PredTaskCode or SuccTaskCode indicates reuse of the value from the preceding line.

  • (The last * line is optional.)

  • (Any line starting with a slash (/) is considered a comment and is ignored.)

The file test\SPERT-Example.txt contains a small sample project for use in testing the SPERT program:

/ This is an example input file for the SPERT program.
/ This is a simple test project.
Example Project Schedule
/ These are the tasks for the project.
kickoff 1 1 1 @3 All-day Kickoff Meeting (entire team)
^interview 3 5 10 @3 Requirements Interviews (entire team)
r-fin 1 2.5 5 Financial Subsystem Requirements Doc.
r-mfg 2 4 10 Manufacturing Subsystem Requirements Doc.
r-sls 0.5 1.5 5 Sales Subsystem Requirements Doc.
#wt-r 0.5 0.5 1 @3 Requirements Doc. Walk-thru (entire team)
d-fin 3 6 12 Design Financial Subsystem
^p-fin 8 12 25 Program & Test Financial Subsystem
d-mfg 4 10 20 Design Manufacturing Subsystem
^p-mfg 10 15 30 Program & Test Manufacturing Subsystem
d-sls 3 6 10 Design Sales Subsystem
^p-sls 8 10 20 Program & Test Sales Subsystem
test! 5 10 20 @2 Integration Test/Debug Entire System
userdoc 10 12 15 Write User Documentation
#install 1 2 5 Install System
*
/ These are additional task dependencies.
interview r-fin
" r-mfg
" r-sls
r-fin wt-r
r-mfg "
r-sls "
wt-r d-fin
" d-mfg
" d-sls
d-fin userdoc
d-mfg "
d-sls "
p-fin test
p-mfg "
p-sls "
test install
userdoc "
*

Gantt Chart

In the output Gantt chart, the following symbols are used:

X = One day in task on the Critical Path
9 = One day in task that was critical in 90% of simulations
...
1 = One day in task that was critical in 10% of simulations
+ = One day in non-critical task
- = trailing float (resource limits ignored)
. = leading delay (only occurs if resources are limited)

Here is an example Gantt chart:

Example Project Schedule
Results from Mean Durations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXX
r-fin +++--
r-mfg XXXXXX
r-sls +++---
#wt-r X
d-fin +++++++-------
p-fin +++++++++++++++-------
d-mfg XXXXXXXXXXXX
p-mfg XXXXXXXXXXXXXXXXXXX
d-sls +++++++----------
p-sls +++++++++++++----------
test! XXXXXXXXXXXX
userdoc +++++++++++++-----------------
#install XXX

Here is an example Gantt chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXXX
r-fin 222--
r-mfg 999999
r-sls 111--
#wt-r X
d-fin 2222222--------
p-fin 2222222222222222--------
d-mfg 999999999999
p-mfg 9999999999999999999
d-sls +++++++-----------
p-sls ++++++++++++++-----------
test! XXXXXXXXXXXXX
userdoc ++++++++++++------------------
#install XXX

Here is an example Gantt chart using 100 simulations but with the Resource Limit set to 3 (/RL3):

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Resource Limit is 3
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff +
interview ++++++
r-fin +++
r-mfg ++++++
r-sls +++
#wt-r ++
d-fin ++++++++
p-fin +++++++++++++++
d-mfg ++++++++++++
p-mfg ++++++++++++++++++
d-sls +++++++
p-sls +++++++++++++
test! 2222222222222
userdoc ......++++++++++++
#install XXX

Resource Usage Chart

In the resource usage chart, the following symbols are used:

X = One unit of resource fully used that day
9 = 0.9 units of resource
...
1 = 0.1 units of resource

Here is an example Resource Usage chart:

Example Project Schedule
Results from Mean Durations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
7XXXXXXX XXXXXXXXX2 4XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX7 4XXXXXXXXXXX4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Expected Total Resource Use = 142.5

Here is an example Resource Usage chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
12234566676531 XXXXXXX852 13589XXXXXXXXXXXXXXXXX852 XXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXX9987666666666655432 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX87654433221111111 Expected Total Resource Use = 143.2
Maximum Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
XXXXXXXXXXXXXXXXXXXXX5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9X1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
Lowest Total Resource Use = 117.8
Highest Total Resource Use = 175.4

Milestone Finish Distributions

In the finish distributions, an asterisk marks the "mean" value.

Here is an example Finish Distributions chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Distributions of Milestone Task Finish Times
#wt-r Requirements Doc. Walk-thru (entire team)
9 XXXX
10 XXXXXXX
11 XXXXXXXXXXXXXX
12 XXXXXXXXXXXXXXX
13*XXXXXXXXXXXXXXX
14 XXXXXXXXXX
15 XXXXXXXXXXXXXX
16 XXXXXXXX
17 XXXXXXXXXX
18 X
19 X
20 X
#install Install System
47 X
48 XX
49 X
50 XXX
51 XXXXXX
52 XXX
53 XXXX
54 XXXXX
55 XXXX
56 XXXXXXXXXX
57 XXXXXXXXX
58 XXXX
59*XXXXX
60 XXXXXXXX
61 XX
62 XX
63 XXXXXXXX
64 XX
65 XXXXXX
66 XXX
67 XXX
68 XX
69 XXX
70 XX
71 X
72 X

The Triangular Probability Distribution

The Triangular probability distribution provides an alternative to a Gaussian normal distribution when specific lower and upper limits are desired on the resulting value. The triangular distribution can also be skewed to yield an asymmetrical distribution.

The triangular distribution is also mathematically tractable; its mode, median, expected value (mean), and inverse can be derived and computed.

For further information, see the Wikipedia article.

Developer Information

Source code compilation notes

The integrated development environment for Free Pascal is the Lazarus IDE for Free Pascal.

Download the Lazarus IDE, including Free Pascal, from here:

After installing the Lazarus IDE, clone this GitHub repository to your local disk. Then double-click on the src\SPERT.lpr project file to open it in Lazarus.

Note: Using the debugger in the Lazarus IDE on Windows 10 might require the following configuration adjustment:

When Lazarus includes debugging information the executable file is relatively large. When ready to create a release executable, the file size can be significantly reduced by selecting the menu item Project | Project Options ... and navigating to the Compile Options | Debugging tab in the resulting dialog window. Clear the check-mark from the Generate info for the debugger option and then click the OK button. Then rebuild the executable using the Run | Build menu item (or using the shortcut key-stroke Shift-F9).

Release Notes

Version 1.1.0+20240615

Minor output spacing adjustment. Display Version in StdErr output. Treat input lines starting with slash (/) as comments.

Version 1.0.1+20240421

Use builtin redirectable StdErr handle instead of opening CON system file.

Version 1.0.0+20240420

Initial Free Pascal release.

About

Stochastic Project Evaluation & Review Technique project planning program

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Stochastic Project Evaluation & Review Technique

Version 1.1.0+20240615 (Version Release Notes)

The Stochastic Project Evaluation & Review Technique program, SPERT, supports Critical Path Method project planning, including generation of text-based GANTT charts.

This program is free open source software licensed under the MIT License, Copyright © 2024 Rick Rutt.

Information about the source code compilation of the SPERT program appear at the end of this document in the Developer Information section.

About the Software

The software is a self-contained executable program, written in Free Pascal, that runs on Microsoft Windows or Ubuntu Linux (and presumably other Linux distributions). (No separate run-time environment is required to run the program.)

The Lazarus Integrated Development Environment was used to develop the program. (Both Free Pascal and the Lazarus IDE are free open-source software products.)

Downloading and Running the Program

Microsoft Windows

You can run the SPERT program on Microsoft Windows as follows:

  • Download the SPERT.exe binary executable file from the bin sub-folder from this GitHub.com page.

  • To uninstall the program, simply delete the SPERT.exe file.

Ubuntu Linux

You can run the SPERT program on Ubuntu Linux (and presumably other Linux distributions) as follows:

  • Download the SPERT binary executable file (with no file extension) from the bin sub-folder from this GitHub.com page.

  • Ensure the SPERT file has the executable permission. From a Files window, right-click the file, select Properties, and use the Permissions tab to enable the Execute permission. To do this in a Terminal window, use the following command:

    chmod +x SPERT

  • To uninstall the program, simply delete the SPERT binary executable file.

Running the Program

Open a Command Prompt or Terminal window.

Type the SPERT.exe (on Windows) or SPERT (on Linux) file name (with full path if necessary) with no additional arguments to view usage information for the program.

Command Line Arguments

filename input file name
/PN Print input Network
/PD Print Detailed analysis results by task
/PG Print Gantt chart
/PR Print Resource usage histogram and total
/PF Print distributions of milestone Finish times
/NSn Number of Simulations is "n" (default is l)
/RLn Resource Limit is "n" (default is infinity)
/SDmmdd Start Date month and day (for time scale headings)
(Leading zeros are required for "mm" and "dd")

The standard output may be redirected with >FILENAME

Input File Format

The input file is read in the following format (any blank lines are ignored):

Project Name on one line
TaskCode Optimistic MostLikely Pessimistic [@ResCount] [Task Desc]
...
*
PredTaskCode SuccTaskCode
...
*
  • TaskCode is a short taskname (up to 10 chars.) without blanks. If TaskCode begins with a #, then it is a Milestone task. Preceding TaskCode or #TaskCode with ^ implies that this task is a successor to the task above it. If TaskCode ends with a !, the task is a High Priority Task.

  • Optimistic, MostLikely, and Pessimistic are task time span estimates.

  • ResCount is an optional real Resource count. (1.0 is assumed if omitted).

  • Task Desc is an optional longer description and allows blanks.

  • PredTaskCode and SuccTaskCode form a precedence pair of two tasks. (The # for Milestones and ! for Priority Tasks are optional for these task codes.) A ditto (") for either PredTaskCode or SuccTaskCode indicates reuse of the value from the preceding line.

  • (The last * line is optional.)

  • (Any line starting with a slash (/) is considered a comment and is ignored.)

The file test\SPERT-Example.txt contains a small sample project for use in testing the SPERT program:

/ This is an example input file for the SPERT program.
/ This is a simple test project.
Example Project Schedule
/ These are the tasks for the project.
kickoff 1 1 1 @3 All-day Kickoff Meeting (entire team)
^interview 3 5 10 @3 Requirements Interviews (entire team)
r-fin 1 2.5 5 Financial Subsystem Requirements Doc.
r-mfg 2 4 10 Manufacturing Subsystem Requirements Doc.
r-sls 0.5 1.5 5 Sales Subsystem Requirements Doc.
#wt-r 0.5 0.5 1 @3 Requirements Doc. Walk-thru (entire team)
d-fin 3 6 12 Design Financial Subsystem
^p-fin 8 12 25 Program & Test Financial Subsystem
d-mfg 4 10 20 Design Manufacturing Subsystem
^p-mfg 10 15 30 Program & Test Manufacturing Subsystem
d-sls 3 6 10 Design Sales Subsystem
^p-sls 8 10 20 Program & Test Sales Subsystem
test! 5 10 20 @2 Integration Test/Debug Entire System
userdoc 10 12 15 Write User Documentation
#install 1 2 5 Install System
*
/ These are additional task dependencies.
interview r-fin
" r-mfg
" r-sls
r-fin wt-r
r-mfg "
r-sls "
wt-r d-fin
" d-mfg
" d-sls
d-fin userdoc
d-mfg "
d-sls "
p-fin test
p-mfg "
p-sls "
test install
userdoc "
*

Gantt Chart

In the output Gantt chart, the following symbols are used:

X = One day in task on the Critical Path
9 = One day in task that was critical in 90% of simulations
...
1 = One day in task that was critical in 10% of simulations
+ = One day in non-critical task
- = trailing float (resource limits ignored)
. = leading delay (only occurs if resources are limited)

Here is an example Gantt chart:

Example Project Schedule
Results from Mean Durations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXX
r-fin +++--
r-mfg XXXXXX
r-sls +++---
#wt-r X
d-fin +++++++-------
p-fin +++++++++++++++-------
d-mfg XXXXXXXXXXXX
p-mfg XXXXXXXXXXXXXXXXXXX
d-sls +++++++----------
p-sls +++++++++++++----------
test! XXXXXXXXXXXX
userdoc +++++++++++++-----------------
#install XXX

Here is an example Gantt chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXXX
r-fin 222--
r-mfg 999999
r-sls 111--
#wt-r X
d-fin 2222222--------
p-fin 2222222222222222--------
d-mfg 999999999999
p-mfg 9999999999999999999
d-sls +++++++-----------
p-sls ++++++++++++++-----------
test! XXXXXXXXXXXXX
userdoc ++++++++++++------------------
#install XXX

Here is an example Gantt chart using 100 simulations but with the Resource Limit set to 3 (/RL3):

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Resource Limit is 3
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff +
interview ++++++
r-fin +++
r-mfg ++++++
r-sls +++
#wt-r ++
d-fin ++++++++
p-fin +++++++++++++++
d-mfg ++++++++++++
p-mfg ++++++++++++++++++
d-sls +++++++
p-sls +++++++++++++
test! 2222222222222
userdoc ......++++++++++++
#install XXX

Resource Usage Chart

In the resource usage chart, the following symbols are used:

X = One unit of resource fully used that day
9 = 0.9 units of resource
...
1 = 0.1 units of resource

Here is an example Resource Usage chart:

Example Project Schedule
Results from Mean Durations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
7XXXXXXX XXXXXXXXX2 4XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX7 4XXXXXXXXXXX4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Expected Total Resource Use = 142.5

Here is an example Resource Usage chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
12234566676531 XXXXXXX852 13589XXXXXXXXXXXXXXXXX852 XXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXX9987666666666655432 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX87654433221111111 Expected Total Resource Use = 143.2
Maximum Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
XXXXXXXXXXXXXXXXXXXXX5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9X1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
Lowest Total Resource Use = 117.8
Highest Total Resource Use = 175.4

Milestone Finish Distributions

In the finish distributions, an asterisk marks the "mean" value.

Here is an example Finish Distributions chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Distributions of Milestone Task Finish Times
#wt-r Requirements Doc. Walk-thru (entire team)
9 XXXX
10 XXXXXXX
11 XXXXXXXXXXXXXX
12 XXXXXXXXXXXXXXX
13*XXXXXXXXXXXXXXX
14 XXXXXXXXXX
15 XXXXXXXXXXXXXX
16 XXXXXXXX
17 XXXXXXXXXX
18 X
19 X
20 X
#install Install System
47 X
48 XX
49 X
50 XXX
51 XXXXXX
52 XXX
53 XXXX
54 XXXXX
55 XXXX
56 XXXXXXXXXX
57 XXXXXXXXX
58 XXXX
59*XXXXX
60 XXXXXXXX
61 XX
62 XX
63 XXXXXXXX
64 XX
65 XXXXXX
66 XXX
67 XXX
68 XX
69 XXX
70 XX
71 X
72 X

The Triangular Probability Distribution

The Triangular probability distribution provides an alternative to a Gaussian normal distribution when specific lower and upper limits are desired on the resulting value. The triangular distribution can also be skewed to yield an asymmetrical distribution.

The triangular distribution is also mathematically tractable; its mode, median, expected value (mean), and inverse can be derived and computed.

For further information, see the Wikipedia article.

Developer Information

Source code compilation notes

The integrated development environment for Free Pascal is the Lazarus IDE for Free Pascal.

Download the Lazarus IDE, including Free Pascal, from here:

After installing the Lazarus IDE, clone this GitHub repository to your local disk. Then double-click on the src\SPERT.lpr project file to open it in Lazarus.

Note: Using the debugger in the Lazarus IDE on Windows 10 might require the following configuration adjustment:

When Lazarus includes debugging information the executable file is relatively large. When ready to create a release executable, the file size can be significantly reduced by selecting the menu item Project | Project Options ... and navigating to the Compile Options | Debugging tab in the resulting dialog window. Clear the check-mark from the Generate info for the debugger option and then click the OK button. Then rebuild the executable using the Run | Build menu item (or using the shortcut key-stroke Shift-F9).

Release Notes

Version 1.1.0+20240615

Minor output spacing adjustment. Display Version in StdErr output. Treat input lines starting with slash (/) as comments.

Version 1.0.1+20240421

Use builtin redirectable StdErr handle instead of opening CON system file.

Version 1.0.0+20240420

Initial Free Pascal release.

About

Stochastic Project Evaluation & Review Technique project planning program

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Stochastic Project Evaluation & Review Technique

Version 1.1.0+20240615 (Version Release Notes)

The Stochastic Project Evaluation & Review Technique program, SPERT, supports Critical Path Method project planning, including generation of text-based GANTT charts.

This program is free open source software licensed under the MIT License, Copyright © 2024 Rick Rutt.

Information about the source code compilation of the SPERT program appear at the end of this document in the Developer Information section.

About the Software

The software is a self-contained executable program, written in Free Pascal, that runs on Microsoft Windows or Ubuntu Linux (and presumably other Linux distributions). (No separate run-time environment is required to run the program.)

The Lazarus Integrated Development Environment was used to develop the program. (Both Free Pascal and the Lazarus IDE are free open-source software products.)

Downloading and Running the Program

Microsoft Windows

You can run the SPERT program on Microsoft Windows as follows:

  • Download the SPERT.exe binary executable file from the bin sub-folder from this GitHub.com page.

  • To uninstall the program, simply delete the SPERT.exe file.

Ubuntu Linux

You can run the SPERT program on Ubuntu Linux (and presumably other Linux distributions) as follows:

  • Download the SPERT binary executable file (with no file extension) from the bin sub-folder from this GitHub.com page.

  • Ensure the SPERT file has the executable permission. From a Files window, right-click the file, select Properties, and use the Permissions tab to enable the Execute permission. To do this in a Terminal window, use the following command:

    chmod +x SPERT

  • To uninstall the program, simply delete the SPERT binary executable file.

Running the Program

Open a Command Prompt or Terminal window.

Type the SPERT.exe (on Windows) or SPERT (on Linux) file name (with full path if necessary) with no additional arguments to view usage information for the program.

Command Line Arguments

filename input file name
/PN Print input Network
/PD Print Detailed analysis results by task
/PG Print Gantt chart
/PR Print Resource usage histogram and total
/PF Print distributions of milestone Finish times
/NSn Number of Simulations is "n" (default is l)
/RLn Resource Limit is "n" (default is infinity)
/SDmmdd Start Date month and day (for time scale headings)
(Leading zeros are required for "mm" and "dd")

The standard output may be redirected with >FILENAME

Input File Format

The input file is read in the following format (any blank lines are ignored):

Project Name on one line
TaskCode Optimistic MostLikely Pessimistic [@ResCount] [Task Desc]
...
*
PredTaskCode SuccTaskCode
...
*
  • TaskCode is a short taskname (up to 10 chars.) without blanks. If TaskCode begins with a #, then it is a Milestone task. Preceding TaskCode or #TaskCode with ^ implies that this task is a successor to the task above it. If TaskCode ends with a !, the task is a High Priority Task.

  • Optimistic, MostLikely, and Pessimistic are task time span estimates.

  • ResCount is an optional real Resource count. (1.0 is assumed if omitted).

  • Task Desc is an optional longer description and allows blanks.

  • PredTaskCode and SuccTaskCode form a precedence pair of two tasks. (The # for Milestones and ! for Priority Tasks are optional for these task codes.) A ditto (") for either PredTaskCode or SuccTaskCode indicates reuse of the value from the preceding line.

  • (The last * line is optional.)

  • (Any line starting with a slash (/) is considered a comment and is ignored.)

The file test\SPERT-Example.txt contains a small sample project for use in testing the SPERT program:

/ This is an example input file for the SPERT program.
/ This is a simple test project.
Example Project Schedule
/ These are the tasks for the project.
kickoff 1 1 1 @3 All-day Kickoff Meeting (entire team)
^interview 3 5 10 @3 Requirements Interviews (entire team)
r-fin 1 2.5 5 Financial Subsystem Requirements Doc.
r-mfg 2 4 10 Manufacturing Subsystem Requirements Doc.
r-sls 0.5 1.5 5 Sales Subsystem Requirements Doc.
#wt-r 0.5 0.5 1 @3 Requirements Doc. Walk-thru (entire team)
d-fin 3 6 12 Design Financial Subsystem
^p-fin 8 12 25 Program & Test Financial Subsystem
d-mfg 4 10 20 Design Manufacturing Subsystem
^p-mfg 10 15 30 Program & Test Manufacturing Subsystem
d-sls 3 6 10 Design Sales Subsystem
^p-sls 8 10 20 Program & Test Sales Subsystem
test! 5 10 20 @2 Integration Test/Debug Entire System
userdoc 10 12 15 Write User Documentation
#install 1 2 5 Install System
*
/ These are additional task dependencies.
interview r-fin
" r-mfg
" r-sls
r-fin wt-r
r-mfg "
r-sls "
wt-r d-fin
" d-mfg
" d-sls
d-fin userdoc
d-mfg "
d-sls "
p-fin test
p-mfg "
p-sls "
test install
userdoc "
*

Gantt Chart

In the output Gantt chart, the following symbols are used:

X = One day in task on the Critical Path
9 = One day in task that was critical in 90% of simulations
...
1 = One day in task that was critical in 10% of simulations
+ = One day in non-critical task
- = trailing float (resource limits ignored)
. = leading delay (only occurs if resources are limited)

Here is an example Gantt chart:

Example Project Schedule
Results from Mean Durations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXX
r-fin +++--
r-mfg XXXXXX
r-sls +++---
#wt-r X
d-fin +++++++-------
p-fin +++++++++++++++-------
d-mfg XXXXXXXXXXXX
p-mfg XXXXXXXXXXXXXXXXXXX
d-sls +++++++----------
p-sls +++++++++++++----------
test! XXXXXXXXXXXX
userdoc +++++++++++++-----------------
#install XXX

Here is an example Gantt chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXXX
r-fin 222--
r-mfg 999999
r-sls 111--
#wt-r X
d-fin 2222222--------
p-fin 2222222222222222--------
d-mfg 999999999999
p-mfg 9999999999999999999
d-sls +++++++-----------
p-sls ++++++++++++++-----------
test! XXXXXXXXXXXXX
userdoc ++++++++++++------------------
#install XXX

Here is an example Gantt chart using 100 simulations but with the Resource Limit set to 3 (/RL3):

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Resource Limit is 3
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff +
interview ++++++
r-fin +++
r-mfg ++++++
r-sls +++
#wt-r ++
d-fin ++++++++
p-fin +++++++++++++++
d-mfg ++++++++++++
p-mfg ++++++++++++++++++
d-sls +++++++
p-sls +++++++++++++
test! 2222222222222
userdoc ......++++++++++++
#install XXX

Resource Usage Chart

In the resource usage chart, the following symbols are used:

X = One unit of resource fully used that day
9 = 0.9 units of resource
...
1 = 0.1 units of resource

Here is an example Resource Usage chart:

Example Project Schedule
Results from Mean Durations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
7XXXXXXX XXXXXXXXX2 4XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX7 4XXXXXXXXXXX4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Expected Total Resource Use = 142.5

Here is an example Resource Usage chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
12234566676531 XXXXXXX852 13589XXXXXXXXXXXXXXXXX852 XXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXX9987666666666655432 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX87654433221111111 Expected Total Resource Use = 143.2
Maximum Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
XXXXXXXXXXXXXXXXXXXXX5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9X1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
Lowest Total Resource Use = 117.8
Highest Total Resource Use = 175.4

Milestone Finish Distributions

In the finish distributions, an asterisk marks the "mean" value.

Here is an example Finish Distributions chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Distributions of Milestone Task Finish Times
#wt-r Requirements Doc. Walk-thru (entire team)
9 XXXX
10 XXXXXXX
11 XXXXXXXXXXXXXX
12 XXXXXXXXXXXXXXX
13*XXXXXXXXXXXXXXX
14 XXXXXXXXXX
15 XXXXXXXXXXXXXX
16 XXXXXXXX
17 XXXXXXXXXX
18 X
19 X
20 X
#install Install System
47 X
48 XX
49 X
50 XXX
51 XXXXXX
52 XXX
53 XXXX
54 XXXXX
55 XXXX
56 XXXXXXXXXX
57 XXXXXXXXX
58 XXXX
59*XXXXX
60 XXXXXXXX
61 XX
62 XX
63 XXXXXXXX
64 XX
65 XXXXXX
66 XXX
67 XXX
68 XX
69 XXX
70 XX
71 X
72 X

The Triangular Probability Distribution

The Triangular probability distribution provides an alternative to a Gaussian normal distribution when specific lower and upper limits are desired on the resulting value. The triangular distribution can also be skewed to yield an asymmetrical distribution.

The triangular distribution is also mathematically tractable; its mode, median, expected value (mean), and inverse can be derived and computed.

For further information, see the Wikipedia article.

Developer Information

Source code compilation notes

The integrated development environment for Free Pascal is the Lazarus IDE for Free Pascal.

Download the Lazarus IDE, including Free Pascal, from here:

After installing the Lazarus IDE, clone this GitHub repository to your local disk. Then double-click on the src\SPERT.lpr project file to open it in Lazarus.

Note: Using the debugger in the Lazarus IDE on Windows 10 might require the following configuration adjustment:

When Lazarus includes debugging information the executable file is relatively large. When ready to create a release executable, the file size can be significantly reduced by selecting the menu item Project | Project Options ... and navigating to the Compile Options | Debugging tab in the resulting dialog window. Clear the check-mark from the Generate info for the debugger option and then click the OK button. Then rebuild the executable using the Run | Build menu item (or using the shortcut key-stroke Shift-F9).

Release Notes

Version 1.1.0+20240615

Minor output spacing adjustment. Display Version in StdErr output. Treat input lines starting with slash (/) as comments.

Version 1.0.1+20240421

Use builtin redirectable StdErr handle instead of opening CON system file.

Version 1.0.0+20240420

Initial Free Pascal release.

About

Stochastic Project Evaluation & Review Technique project planning program

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Stochastic Project Evaluation & Review Technique

Version 1.1.0+20240615 (Version Release Notes)

The Stochastic Project Evaluation & Review Technique program, SPERT, supports Critical Path Method project planning, including generation of text-based GANTT charts.

This program is free open source software licensed under the MIT License, Copyright © 2024 Rick Rutt.

Information about the source code compilation of the SPERT program appear at the end of this document in the Developer Information section.

About the Software

The software is a self-contained executable program, written in Free Pascal, that runs on Microsoft Windows or Ubuntu Linux (and presumably other Linux distributions). (No separate run-time environment is required to run the program.)

The Lazarus Integrated Development Environment was used to develop the program. (Both Free Pascal and the Lazarus IDE are free open-source software products.)

Downloading and Running the Program

Microsoft Windows

You can run the SPERT program on Microsoft Windows as follows:

  • Download the SPERT.exe binary executable file from the bin sub-folder from this GitHub.com page.

  • To uninstall the program, simply delete the SPERT.exe file.

Ubuntu Linux

You can run the SPERT program on Ubuntu Linux (and presumably other Linux distributions) as follows:

  • Download the SPERT binary executable file (with no file extension) from the bin sub-folder from this GitHub.com page.

  • Ensure the SPERT file has the executable permission. From a Files window, right-click the file, select Properties, and use the Permissions tab to enable the Execute permission. To do this in a Terminal window, use the following command:

    chmod +x SPERT

  • To uninstall the program, simply delete the SPERT binary executable file.

Running the Program

Open a Command Prompt or Terminal window.

Type the SPERT.exe (on Windows) or SPERT (on Linux) file name (with full path if necessary) with no additional arguments to view usage information for the program.

Command Line Arguments

filename input file name
/PN Print input Network
/PD Print Detailed analysis results by task
/PG Print Gantt chart
/PR Print Resource usage histogram and total
/PF Print distributions of milestone Finish times
/NSn Number of Simulations is "n" (default is l)
/RLn Resource Limit is "n" (default is infinity)
/SDmmdd Start Date month and day (for time scale headings)
(Leading zeros are required for "mm" and "dd")

The standard output may be redirected with >FILENAME

Input File Format

The input file is read in the following format (any blank lines are ignored):

Project Name on one line
TaskCode Optimistic MostLikely Pessimistic [@ResCount] [Task Desc]
...
*
PredTaskCode SuccTaskCode
...
*
  • TaskCode is a short taskname (up to 10 chars.) without blanks. If TaskCode begins with a #, then it is a Milestone task. Preceding TaskCode or #TaskCode with ^ implies that this task is a successor to the task above it. If TaskCode ends with a !, the task is a High Priority Task.

  • Optimistic, MostLikely, and Pessimistic are task time span estimates.

  • ResCount is an optional real Resource count. (1.0 is assumed if omitted).

  • Task Desc is an optional longer description and allows blanks.

  • PredTaskCode and SuccTaskCode form a precedence pair of two tasks. (The # for Milestones and ! for Priority Tasks are optional for these task codes.) A ditto (") for either PredTaskCode or SuccTaskCode indicates reuse of the value from the preceding line.

  • (The last * line is optional.)

  • (Any line starting with a slash (/) is considered a comment and is ignored.)

The file test\SPERT-Example.txt contains a small sample project for use in testing the SPERT program:

/ This is an example input file for the SPERT program.
/ This is a simple test project.
Example Project Schedule
/ These are the tasks for the project.
kickoff 1 1 1 @3 All-day Kickoff Meeting (entire team)
^interview 3 5 10 @3 Requirements Interviews (entire team)
r-fin 1 2.5 5 Financial Subsystem Requirements Doc.
r-mfg 2 4 10 Manufacturing Subsystem Requirements Doc.
r-sls 0.5 1.5 5 Sales Subsystem Requirements Doc.
#wt-r 0.5 0.5 1 @3 Requirements Doc. Walk-thru (entire team)
d-fin 3 6 12 Design Financial Subsystem
^p-fin 8 12 25 Program & Test Financial Subsystem
d-mfg 4 10 20 Design Manufacturing Subsystem
^p-mfg 10 15 30 Program & Test Manufacturing Subsystem
d-sls 3 6 10 Design Sales Subsystem
^p-sls 8 10 20 Program & Test Sales Subsystem
test! 5 10 20 @2 Integration Test/Debug Entire System
userdoc 10 12 15 Write User Documentation
#install 1 2 5 Install System
*
/ These are additional task dependencies.
interview r-fin
" r-mfg
" r-sls
r-fin wt-r
r-mfg "
r-sls "
wt-r d-fin
" d-mfg
" d-sls
d-fin userdoc
d-mfg "
d-sls "
p-fin test
p-mfg "
p-sls "
test install
userdoc "
*

Gantt Chart

In the output Gantt chart, the following symbols are used:

X = One day in task on the Critical Path
9 = One day in task that was critical in 90% of simulations
...
1 = One day in task that was critical in 10% of simulations
+ = One day in non-critical task
- = trailing float (resource limits ignored)
. = leading delay (only occurs if resources are limited)

Here is an example Gantt chart:

Example Project Schedule
Results from Mean Durations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXX
r-fin +++--
r-mfg XXXXXX
r-sls +++---
#wt-r X
d-fin +++++++-------
p-fin +++++++++++++++-------
d-mfg XXXXXXXXXXXX
p-mfg XXXXXXXXXXXXXXXXXXX
d-sls +++++++----------
p-sls +++++++++++++----------
test! XXXXXXXXXXXX
userdoc +++++++++++++-----------------
#install XXX

Here is an example Gantt chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXXX
r-fin 222--
r-mfg 999999
r-sls 111--
#wt-r X
d-fin 2222222--------
p-fin 2222222222222222--------
d-mfg 999999999999
p-mfg 9999999999999999999
d-sls +++++++-----------
p-sls ++++++++++++++-----------
test! XXXXXXXXXXXXX
userdoc ++++++++++++------------------
#install XXX

Here is an example Gantt chart using 100 simulations but with the Resource Limit set to 3 (/RL3):

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Resource Limit is 3
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff +
interview ++++++
r-fin +++
r-mfg ++++++
r-sls +++
#wt-r ++
d-fin ++++++++
p-fin +++++++++++++++
d-mfg ++++++++++++
p-mfg ++++++++++++++++++
d-sls +++++++
p-sls +++++++++++++
test! 2222222222222
userdoc ......++++++++++++
#install XXX

Resource Usage Chart

In the resource usage chart, the following symbols are used:

X = One unit of resource fully used that day
9 = 0.9 units of resource
...
1 = 0.1 units of resource

Here is an example Resource Usage chart:

Example Project Schedule
Results from Mean Durations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
7XXXXXXX XXXXXXXXX2 4XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX7 4XXXXXXXXXXX4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Expected Total Resource Use = 142.5

Here is an example Resource Usage chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
12234566676531 XXXXXXX852 13589XXXXXXXXXXXXXXXXX852 XXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXX9987666666666655432 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX87654433221111111 Expected Total Resource Use = 143.2
Maximum Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
XXXXXXXXXXXXXXXXXXXXX5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9X1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
Lowest Total Resource Use = 117.8
Highest Total Resource Use = 175.4

Milestone Finish Distributions

In the finish distributions, an asterisk marks the "mean" value.

Here is an example Finish Distributions chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Distributions of Milestone Task Finish Times
#wt-r Requirements Doc. Walk-thru (entire team)
9 XXXX
10 XXXXXXX
11 XXXXXXXXXXXXXX
12 XXXXXXXXXXXXXXX
13*XXXXXXXXXXXXXXX
14 XXXXXXXXXX
15 XXXXXXXXXXXXXX
16 XXXXXXXX
17 XXXXXXXXXX
18 X
19 X
20 X
#install Install System
47 X
48 XX
49 X
50 XXX
51 XXXXXX
52 XXX
53 XXXX
54 XXXXX
55 XXXX
56 XXXXXXXXXX
57 XXXXXXXXX
58 XXXX
59*XXXXX
60 XXXXXXXX
61 XX
62 XX
63 XXXXXXXX
64 XX
65 XXXXXX
66 XXX
67 XXX
68 XX
69 XXX
70 XX
71 X
72 X

The Triangular Probability Distribution

The Triangular probability distribution provides an alternative to a Gaussian normal distribution when specific lower and upper limits are desired on the resulting value. The triangular distribution can also be skewed to yield an asymmetrical distribution.

The triangular distribution is also mathematically tractable; its mode, median, expected value (mean), and inverse can be derived and computed.

For further information, see the Wikipedia article.

Developer Information

Source code compilation notes

The integrated development environment for Free Pascal is the Lazarus IDE for Free Pascal.

Download the Lazarus IDE, including Free Pascal, from here:

After installing the Lazarus IDE, clone this GitHub repository to your local disk. Then double-click on the src\SPERT.lpr project file to open it in Lazarus.

Note: Using the debugger in the Lazarus IDE on Windows 10 might require the following configuration adjustment:

When Lazarus includes debugging information the executable file is relatively large. When ready to create a release executable, the file size can be significantly reduced by selecting the menu item Project | Project Options ... and navigating to the Compile Options | Debugging tab in the resulting dialog window. Clear the check-mark from the Generate info for the debugger option and then click the OK button. Then rebuild the executable using the Run | Build menu item (or using the shortcut key-stroke Shift-F9).

Release Notes

Version 1.1.0+20240615

Minor output spacing adjustment. Display Version in StdErr output. Treat input lines starting with slash (/) as comments.

Version 1.0.1+20240421

Use builtin redirectable StdErr handle instead of opening CON system file.

Version 1.0.0+20240420

Initial Free Pascal release.

About

Stochastic Project Evaluation & Review Technique project planning program

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Stochastic Project Evaluation & Review Technique

Version 1.1.0+20240615 (Version Release Notes)

The Stochastic Project Evaluation & Review Technique program, SPERT, supports Critical Path Method project planning, including generation of text-based GANTT charts.

This program is free open source software licensed under the MIT License, Copyright © 2024 Rick Rutt.

Information about the source code compilation of the SPERT program appear at the end of this document in the Developer Information section.

About the Software

The software is a self-contained executable program, written in Free Pascal, that runs on Microsoft Windows or Ubuntu Linux (and presumably other Linux distributions). (No separate run-time environment is required to run the program.)

The Lazarus Integrated Development Environment was used to develop the program. (Both Free Pascal and the Lazarus IDE are free open-source software products.)

Downloading and Running the Program

Microsoft Windows

You can run the SPERT program on Microsoft Windows as follows:

  • Download the SPERT.exe binary executable file from the bin sub-folder from this GitHub.com page.

  • To uninstall the program, simply delete the SPERT.exe file.

Ubuntu Linux

You can run the SPERT program on Ubuntu Linux (and presumably other Linux distributions) as follows:

  • Download the SPERT binary executable file (with no file extension) from the bin sub-folder from this GitHub.com page.

  • Ensure the SPERT file has the executable permission. From a Files window, right-click the file, select Properties, and use the Permissions tab to enable the Execute permission. To do this in a Terminal window, use the following command:

    chmod +x SPERT

  • To uninstall the program, simply delete the SPERT binary executable file.

Running the Program

Open a Command Prompt or Terminal window.

Type the SPERT.exe (on Windows) or SPERT (on Linux) file name (with full path if necessary) with no additional arguments to view usage information for the program.

Command Line Arguments

filename input file name
/PN Print input Network
/PD Print Detailed analysis results by task
/PG Print Gantt chart
/PR Print Resource usage histogram and total
/PF Print distributions of milestone Finish times
/NSn Number of Simulations is "n" (default is l)
/RLn Resource Limit is "n" (default is infinity)
/SDmmdd Start Date month and day (for time scale headings)
(Leading zeros are required for "mm" and "dd")

The standard output may be redirected with >FILENAME

Input File Format

The input file is read in the following format (any blank lines are ignored):

Project Name on one line
TaskCode Optimistic MostLikely Pessimistic [@ResCount] [Task Desc]
...
*
PredTaskCode SuccTaskCode
...
*
  • TaskCode is a short taskname (up to 10 chars.) without blanks. If TaskCode begins with a #, then it is a Milestone task. Preceding TaskCode or #TaskCode with ^ implies that this task is a successor to the task above it. If TaskCode ends with a !, the task is a High Priority Task.

  • Optimistic, MostLikely, and Pessimistic are task time span estimates.

  • ResCount is an optional real Resource count. (1.0 is assumed if omitted).

  • Task Desc is an optional longer description and allows blanks.

  • PredTaskCode and SuccTaskCode form a precedence pair of two tasks. (The # for Milestones and ! for Priority Tasks are optional for these task codes.) A ditto (") for either PredTaskCode or SuccTaskCode indicates reuse of the value from the preceding line.

  • (The last * line is optional.)

  • (Any line starting with a slash (/) is considered a comment and is ignored.)

The file test\SPERT-Example.txt contains a small sample project for use in testing the SPERT program:

/ This is an example input file for the SPERT program.
/ This is a simple test project.
Example Project Schedule
/ These are the tasks for the project.
kickoff 1 1 1 @3 All-day Kickoff Meeting (entire team)
^interview 3 5 10 @3 Requirements Interviews (entire team)
r-fin 1 2.5 5 Financial Subsystem Requirements Doc.
r-mfg 2 4 10 Manufacturing Subsystem Requirements Doc.
r-sls 0.5 1.5 5 Sales Subsystem Requirements Doc.
#wt-r 0.5 0.5 1 @3 Requirements Doc. Walk-thru (entire team)
d-fin 3 6 12 Design Financial Subsystem
^p-fin 8 12 25 Program & Test Financial Subsystem
d-mfg 4 10 20 Design Manufacturing Subsystem
^p-mfg 10 15 30 Program & Test Manufacturing Subsystem
d-sls 3 6 10 Design Sales Subsystem
^p-sls 8 10 20 Program & Test Sales Subsystem
test! 5 10 20 @2 Integration Test/Debug Entire System
userdoc 10 12 15 Write User Documentation
#install 1 2 5 Install System
*
/ These are additional task dependencies.
interview r-fin
" r-mfg
" r-sls
r-fin wt-r
r-mfg "
r-sls "
wt-r d-fin
" d-mfg
" d-sls
d-fin userdoc
d-mfg "
d-sls "
p-fin test
p-mfg "
p-sls "
test install
userdoc "
*

Gantt Chart

In the output Gantt chart, the following symbols are used:

X = One day in task on the Critical Path
9 = One day in task that was critical in 90% of simulations
...
1 = One day in task that was critical in 10% of simulations
+ = One day in non-critical task
- = trailing float (resource limits ignored)
. = leading delay (only occurs if resources are limited)

Here is an example Gantt chart:

Example Project Schedule
Results from Mean Durations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXX
r-fin +++--
r-mfg XXXXXX
r-sls +++---
#wt-r X
d-fin +++++++-------
p-fin +++++++++++++++-------
d-mfg XXXXXXXXXXXX
p-mfg XXXXXXXXXXXXXXXXXXX
d-sls +++++++----------
p-sls +++++++++++++----------
test! XXXXXXXXXXXX
userdoc +++++++++++++-----------------
#install XXX

Here is an example Gantt chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXXX
r-fin 222--
r-mfg 999999
r-sls 111--
#wt-r X
d-fin 2222222--------
p-fin 2222222222222222--------
d-mfg 999999999999
p-mfg 9999999999999999999
d-sls +++++++-----------
p-sls ++++++++++++++-----------
test! XXXXXXXXXXXXX
userdoc ++++++++++++------------------
#install XXX

Here is an example Gantt chart using 100 simulations but with the Resource Limit set to 3 (/RL3):

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Resource Limit is 3
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff +
interview ++++++
r-fin +++
r-mfg ++++++
r-sls +++
#wt-r ++
d-fin ++++++++
p-fin +++++++++++++++
d-mfg ++++++++++++
p-mfg ++++++++++++++++++
d-sls +++++++
p-sls +++++++++++++
test! 2222222222222
userdoc ......++++++++++++
#install XXX

Resource Usage Chart

In the resource usage chart, the following symbols are used:

X = One unit of resource fully used that day
9 = 0.9 units of resource
...
1 = 0.1 units of resource

Here is an example Resource Usage chart:

Example Project Schedule
Results from Mean Durations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
7XXXXXXX XXXXXXXXX2 4XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX7 4XXXXXXXXXXX4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Expected Total Resource Use = 142.5

Here is an example Resource Usage chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
12234566676531 XXXXXXX852 13589XXXXXXXXXXXXXXXXX852 XXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXX9987666666666655432 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX87654433221111111 Expected Total Resource Use = 143.2
Maximum Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
XXXXXXXXXXXXXXXXXXXXX5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9X1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
Lowest Total Resource Use = 117.8
Highest Total Resource Use = 175.4

Milestone Finish Distributions

In the finish distributions, an asterisk marks the "mean" value.

Here is an example Finish Distributions chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Distributions of Milestone Task Finish Times
#wt-r Requirements Doc. Walk-thru (entire team)
9 XXXX
10 XXXXXXX
11 XXXXXXXXXXXXXX
12 XXXXXXXXXXXXXXX
13*XXXXXXXXXXXXXXX
14 XXXXXXXXXX
15 XXXXXXXXXXXXXX
16 XXXXXXXX
17 XXXXXXXXXX
18 X
19 X
20 X
#install Install System
47 X
48 XX
49 X
50 XXX
51 XXXXXX
52 XXX
53 XXXX
54 XXXXX
55 XXXX
56 XXXXXXXXXX
57 XXXXXXXXX
58 XXXX
59*XXXXX
60 XXXXXXXX
61 XX
62 XX
63 XXXXXXXX
64 XX
65 XXXXXX
66 XXX
67 XXX
68 XX
69 XXX
70 XX
71 X
72 X

The Triangular Probability Distribution

The Triangular probability distribution provides an alternative to a Gaussian normal distribution when specific lower and upper limits are desired on the resulting value. The triangular distribution can also be skewed to yield an asymmetrical distribution.

The triangular distribution is also mathematically tractable; its mode, median, expected value (mean), and inverse can be derived and computed.

For further information, see the Wikipedia article.

Developer Information

Source code compilation notes

The integrated development environment for Free Pascal is the Lazarus IDE for Free Pascal.

Download the Lazarus IDE, including Free Pascal, from here:

After installing the Lazarus IDE, clone this GitHub repository to your local disk. Then double-click on the src\SPERT.lpr project file to open it in Lazarus.

Note: Using the debugger in the Lazarus IDE on Windows 10 might require the following configuration adjustment:

When Lazarus includes debugging information the executable file is relatively large. When ready to create a release executable, the file size can be significantly reduced by selecting the menu item Project | Project Options ... and navigating to the Compile Options | Debugging tab in the resulting dialog window. Clear the check-mark from the Generate info for the debugger option and then click the OK button. Then rebuild the executable using the Run | Build menu item (or using the shortcut key-stroke Shift-F9).

Release Notes

Version 1.1.0+20240615

Minor output spacing adjustment. Display Version in StdErr output. Treat input lines starting with slash (/) as comments.

Version 1.0.1+20240421

Use builtin redirectable StdErr handle instead of opening CON system file.

Version 1.0.0+20240420

Initial Free Pascal release.

About

Stochastic Project Evaluation & Review Technique project planning program

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Stochastic Project Evaluation & Review Technique

Version 1.1.0+20240615 (Version Release Notes)

The Stochastic Project Evaluation & Review Technique program, SPERT, supports Critical Path Method project planning, including generation of text-based GANTT charts.

This program is free open source software licensed under the MIT License, Copyright © 2024 Rick Rutt.

Information about the source code compilation of the SPERT program appear at the end of this document in the Developer Information section.

About the Software

The software is a self-contained executable program, written in Free Pascal, that runs on Microsoft Windows or Ubuntu Linux (and presumably other Linux distributions). (No separate run-time environment is required to run the program.)

The Lazarus Integrated Development Environment was used to develop the program. (Both Free Pascal and the Lazarus IDE are free open-source software products.)

Downloading and Running the Program

Microsoft Windows

You can run the SPERT program on Microsoft Windows as follows:

  • Download the SPERT.exe binary executable file from the bin sub-folder from this GitHub.com page.

  • To uninstall the program, simply delete the SPERT.exe file.

Ubuntu Linux

You can run the SPERT program on Ubuntu Linux (and presumably other Linux distributions) as follows:

  • Download the SPERT binary executable file (with no file extension) from the bin sub-folder from this GitHub.com page.

  • Ensure the SPERT file has the executable permission. From a Files window, right-click the file, select Properties, and use the Permissions tab to enable the Execute permission. To do this in a Terminal window, use the following command:

    chmod +x SPERT

  • To uninstall the program, simply delete the SPERT binary executable file.

Running the Program

Open a Command Prompt or Terminal window.

Type the SPERT.exe (on Windows) or SPERT (on Linux) file name (with full path if necessary) with no additional arguments to view usage information for the program.

Command Line Arguments

filename input file name
/PN Print input Network
/PD Print Detailed analysis results by task
/PG Print Gantt chart
/PR Print Resource usage histogram and total
/PF Print distributions of milestone Finish times
/NSn Number of Simulations is "n" (default is l)
/RLn Resource Limit is "n" (default is infinity)
/SDmmdd Start Date month and day (for time scale headings)
(Leading zeros are required for "mm" and "dd")

The standard output may be redirected with >FILENAME

Input File Format

The input file is read in the following format (any blank lines are ignored):

Project Name on one line
TaskCode Optimistic MostLikely Pessimistic [@ResCount] [Task Desc]
...
*
PredTaskCode SuccTaskCode
...
*
  • TaskCode is a short taskname (up to 10 chars.) without blanks. If TaskCode begins with a #, then it is a Milestone task. Preceding TaskCode or #TaskCode with ^ implies that this task is a successor to the task above it. If TaskCode ends with a !, the task is a High Priority Task.

  • Optimistic, MostLikely, and Pessimistic are task time span estimates.

  • ResCount is an optional real Resource count. (1.0 is assumed if omitted).

  • Task Desc is an optional longer description and allows blanks.

  • PredTaskCode and SuccTaskCode form a precedence pair of two tasks. (The # for Milestones and ! for Priority Tasks are optional for these task codes.) A ditto (") for either PredTaskCode or SuccTaskCode indicates reuse of the value from the preceding line.

  • (The last * line is optional.)

  • (Any line starting with a slash (/) is considered a comment and is ignored.)

The file test\SPERT-Example.txt contains a small sample project for use in testing the SPERT program:

/ This is an example input file for the SPERT program.
/ This is a simple test project.
Example Project Schedule
/ These are the tasks for the project.
kickoff 1 1 1 @3 All-day Kickoff Meeting (entire team)
^interview 3 5 10 @3 Requirements Interviews (entire team)
r-fin 1 2.5 5 Financial Subsystem Requirements Doc.
r-mfg 2 4 10 Manufacturing Subsystem Requirements Doc.
r-sls 0.5 1.5 5 Sales Subsystem Requirements Doc.
#wt-r 0.5 0.5 1 @3 Requirements Doc. Walk-thru (entire team)
d-fin 3 6 12 Design Financial Subsystem
^p-fin 8 12 25 Program & Test Financial Subsystem
d-mfg 4 10 20 Design Manufacturing Subsystem
^p-mfg 10 15 30 Program & Test Manufacturing Subsystem
d-sls 3 6 10 Design Sales Subsystem
^p-sls 8 10 20 Program & Test Sales Subsystem
test! 5 10 20 @2 Integration Test/Debug Entire System
userdoc 10 12 15 Write User Documentation
#install 1 2 5 Install System
*
/ These are additional task dependencies.
interview r-fin
" r-mfg
" r-sls
r-fin wt-r
r-mfg "
r-sls "
wt-r d-fin
" d-mfg
" d-sls
d-fin userdoc
d-mfg "
d-sls "
p-fin test
p-mfg "
p-sls "
test install
userdoc "
*

Gantt Chart

In the output Gantt chart, the following symbols are used:

X = One day in task on the Critical Path
9 = One day in task that was critical in 90% of simulations
...
1 = One day in task that was critical in 10% of simulations
+ = One day in non-critical task
- = trailing float (resource limits ignored)
. = leading delay (only occurs if resources are limited)

Here is an example Gantt chart:

Example Project Schedule
Results from Mean Durations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXX
r-fin +++--
r-mfg XXXXXX
r-sls +++---
#wt-r X
d-fin +++++++-------
p-fin +++++++++++++++-------
d-mfg XXXXXXXXXXXX
p-mfg XXXXXXXXXXXXXXXXXXX
d-sls +++++++----------
p-sls +++++++++++++----------
test! XXXXXXXXXXXX
userdoc +++++++++++++-----------------
#install XXX

Here is an example Gantt chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff X
interview XXXXXXX
r-fin 222--
r-mfg 999999
r-sls 111--
#wt-r X
d-fin 2222222--------
p-fin 2222222222222222--------
d-mfg 999999999999
p-mfg 9999999999999999999
d-sls +++++++-----------
p-sls ++++++++++++++-----------
test! XXXXXXXXXXXXX
userdoc ++++++++++++------------------
#install XXX

Here is an example Gantt chart using 100 simulations but with the Resource Limit set to 3 (/RL3):

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Resource Limit is 3
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
kickoff +
interview ++++++
r-fin +++
r-mfg ++++++
r-sls +++
#wt-r ++
d-fin ++++++++
p-fin +++++++++++++++
d-mfg ++++++++++++
p-mfg ++++++++++++++++++
d-sls +++++++
p-sls +++++++++++++
test! 2222222222222
userdoc ......++++++++++++
#install XXX

Resource Usage Chart

In the resource usage chart, the following symbols are used:

X = One unit of resource fully used that day
9 = 0.9 units of resource
...
1 = 0.1 units of resource

Here is an example Resource Usage chart:

Example Project Schedule
Results from Mean Durations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
7XXXXXXX XXXXXXXXX2 4XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX7 4XXXXXXXXXXX4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Expected Total Resource Use = 142.5

Here is an example Resource Usage chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Expected Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
12234566676531 XXXXXXX852 13589XXXXXXXXXXXXXXXXX852 XXXXXXXXXX9XXXXXXXXXXXXXXXXXXXXXXXXXX9987666666666655432 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX87654433221111111 Expected Total Resource Use = 143.2
Maximum Resource Use
422! 429! 5 6! 513! 520! 527! 6 3! 610! 617! 624! 7 1! 7 8!
....+....1....+....2....+....3....+....4....+....5....+....6....+....7
XXXXXXXXXXXXXXXXXXXXX5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9X1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3
Lowest Total Resource Use = 117.8
Highest Total Resource Use = 175.4

Milestone Finish Distributions

In the finish distributions, an asterisk marks the "mean" value.

Here is an example Finish Distributions chart after 100 Monte-Carlo simulations:

Example Project Schedule
Expected Results from 100 Monte-Carlo Simulations
Distributions of Milestone Task Finish Times
#wt-r Requirements Doc. Walk-thru (entire team)
9 XXXX
10 XXXXXXX
11 XXXXXXXXXXXXXX
12 XXXXXXXXXXXXXXX
13*XXXXXXXXXXXXXXX
14 XXXXXXXXXX
15 XXXXXXXXXXXXXX
16 XXXXXXXX
17 XXXXXXXXXX
18 X
19 X
20 X
#install Install System
47 X
48 XX
49 X
50 XXX
51 XXXXXX
52 XXX
53 XXXX
54 XXXXX
55 XXXX
56 XXXXXXXXXX
57 XXXXXXXXX
58 XXXX
59*XXXXX
60 XXXXXXXX
61 XX
62 XX
63 XXXXXXXX
64 XX
65 XXXXXX
66 XXX
67 XXX
68 XX
69 XXX
70 XX
71 X
72 X

The Triangular Probability Distribution

The Triangular probability distribution provides an alternative to a Gaussian normal distribution when specific lower and upper limits are desired on the resulting value. The triangular distribution can also be skewed to yield an asymmetrical distribution.

The triangular distribution is also mathematically tractable; its mode, median, expected value (mean), and inverse can be derived and computed.

For further information, see the Wikipedia article.

Developer Information

Source code compilation notes

The integrated development environment for Free Pascal is the Lazarus IDE for Free Pascal.

Download the Lazarus IDE, including Free Pascal, from here:

After installing the Lazarus IDE, clone this GitHub repository to your local disk. Then double-click on the src\SPERT.lpr project file to open it in Lazarus.

Note: Using the debugger in the Lazarus IDE on Windows 10 might require the following configuration adjustment:

When Lazarus includes debugging information the executable file is relatively large. When ready to create a release executable, the file size can be significantly reduced by selecting the menu item Project | Project Options ... and navigating to the Compile Options | Debugging tab in the resulting dialog window. Clear the check-mark from the Generate info for the debugger option and then click the OK button. Then rebuild the executable using the Run | Build menu item (or using the shortcut key-stroke Shift-F9).

Release Notes

Version 1.1.0+20240615

Minor output spacing adjustment. Display Version in StdErr output. Treat input lines starting with slash (/) as comments.

Version 1.0.1+20240421

Use builtin redirectable StdErr handle instead of opening CON system file.

Version 1.0.0+20240420

Initial Free Pascal release.

About

Stochastic Project Evaluation & Review Technique project planning program

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages