Process Dashboard Users Manual

Table of Contents

1. Quick Overview
1.1. A quick look at the tool
1.2. Goals of the PSP and the Process Dashboard
1.2.1. What is the PSP(SM)?
1.2.2. What is the TSP(SM)?
1.2.3. Why build a tool?
1.3. How To Install
1.3.1. System Requirements
1.3.2. Installation Instructions
1.3.3. Upgrade Instructions
1.3.4. Optional Modules
1.4. Using Help
1.4.1. The Table of Contents view
1.4.2. The Index view
1.4.3. The Search Engine view
1.4.4. The navigation buttons
1.4.5. The print buttons
1.4.6. Context sensitive help
1.5. Quick Start Example: a PSP2.1 Project
1.5.1. Step 1: Create a project in the dashboard
1.5.2. Step 2: Planning the project
1.5.3. Step 3: Designing the program
1.5.4. Step 4: Writing the code
1.5.5. Step 5: Compiling the program
1.5.6. Step 6: Testing the program
1.5.7. Step 7: Postmortem
1.6. Change History
1.6.1. Features new in version 2.7
1.6.2. Features new in version 2.6
1.6.3. Features new in version 2.5
1.6.4. Features new in version 2.4
1.6.5. Features new in version 2.3
1.6.6. Features new in version 2.2
1.6.7. Features new in version 2.1
1.6.8. Features new in version 2.0
1.6.9. Features new in version 1.15
1.6.10. Features new in version 1.14
1.6.11. Features new in version 1.13
1.6.12. Features new in version 1.12
1.6.13. Features new in version 1.11
1.6.14. Features new in version 1.10
1.6.15. Features new in version 1.9
1.6.16. Features new in version 1.8
1.6.17. Features new in version 1.7
1.6.18. Features new in version 1.6 (released September 1, 2003)
1.6.19. Features new in version 1.5 (released October 3, 2002)
1.6.20. Features new in version 1.4 (released February 22, 2002)
1.6.21. Features new in version 1.3.1 (released August 14, 2001)
1.6.22. Features new in version 1.3 (released July 16, 2001)
1.6.23. Features new in version 1.2 (released April 20, 2001)
1.6.24. Features new in version 1.1 (released February 9, 2001)
1.7. License Information
1.7.1. SEI/CMU Materials
1.7.2. GNU General Public License
1.7.3. GNU Lesser General Public License
1.7.4. Apache License, Version 2.0
1.7.5. MIT License
1.7.6. Berkeley Software Distribution (BSD) License
1.7.7. Java Tutorial Code License
1.7.8. DOM4J License
1.7.9. Colt License
1.7.10. overLIB License
1.7.11. License Agreement for Extensions from Tuma Solutions
1.7.12. License Agreement for PSP(SM) and TSP(SM) Materials
2. Planning Your Project
2.1. Creating Projects
2.1.1. Team Projects
2.1.2. Personal Projects
2.1.3. Comparing Project Types
2.2. Working with Personal Projects
2.2.1. Editing the Work Breakdown Structure
2.2.2. Working with your Personal Plan
2.2.3. Tracking Progress
2.2.4. Managing Iterations
2.3. Using the Task & Schedule Tool
2.3.1. Columns in the Task List
2.3.2. Columns in the Schedule List
2.3.3. Potential mistakes
2.3.4. Creating a Schedule Step by Step
2.3.4.1. Step 1: Add tasks to the task list
2.3.4.2. Step 2: Estimate task time
2.3.4.3. Step 3: Estimate calendar time
2.3.4.4. Step 4: Track your progress
2.3.5. Earned Value Date Calculations
2.3.5.1. Plan Date
2.3.5.2. Replan Date
2.3.5.3. Forecast Date
2.3.5.4. Optimized Forecast Date
2.3.6. Earned Value Charts
2.3.6.1. Cumulative Direct Time
2.3.6.2. Cumulative Earned Value
2.3.6.3. Earned Value vs. Cost
2.3.7. Tracking Task Dependencies
2.3.7.1. Misordered Dependencies
2.3.7.2. Dependency Dates
2.3.8. Prediction Ranges in the Task & Schedule Tool
2.3.8.1. When are Prediction Ranges Calculated?
2.4. Using the Size Estimating Template
2.4.1. Base Parts
2.4.2. Parts Additions
2.4.3. Reused Parts
2.4.4. Performing the size/time estimation
2.4.5. Entering Actual data during Postmortem
2.5. Using the PROBE Wizard
2.5.1. PROBE Wizard Step 1
2.5.2. PROBE Wizard Step 2
2.5.3. PROBE Wizard Step 3
2.5.4. PROBE Wizard Step 4
2.5.5. PROBE Wizard Step 5
2.5.6. A sanity check
2.6. Using the PROBE Tool
2.6.1. Filtering your data set
2.6.2. Measures of correlation
2.6.2.1. The correlation measurement
2.6.2.2. The significance measurement
2.6.3. Making a projection
2.6.4. Visualizing the data
3. Running the Dashboard
3.1. Selecting the Active Task
3.1.1. Selecting Tasks Hierarchically
3.1.2. Selecting Tasks Chronologically from a Task List
3.1.3. Selecting a Task Directly
3.2. Using the Play/Pause Button
3.2.1. The play/pause button pull-down control
3.3. The Percent Spent Indicator
3.3.1. Editing the Time Estimate
3.4. Accessing Project Reports, Forms, Scripts and Tools
3.4.1. Custom Hyperlinks
3.4.2. The timing icons
3.4.3. External documents
3.4.4. Entering data into the forms
3.5. The Process Scripts
3.5.1. The PSP Process Scripts
3.6. Entering Process Data
3.6.1. The nature of the dashboard forms
3.6.2. Read-only data fields
3.6.3. Frozen Calculations
3.6.4. Exporting form data
3.7. Entering Defects
3.7.1. Project/Task
3.7.2. Defect Type
3.7.3. Defect Date
3.7.4. Phase Injected and Phase Removed
3.7.5. Timing the Defect Fix
3.7.6. Fix Count
3.7.7. Fix Defect
3.7.8. Entering a description
3.7.9. Fixing multiple defects at a time
3.8. The Task Note Indicator
3.8.1. Linking to External Websites
3.9. Using the Task Completion Checkbox
3.10. Using the Add Task Button
3.11. The "" (Configuration) Menu
3.12. Using the Time Log Editor
3.12.1. Project hierarchy
3.12.2. Date filter
3.12.3. Time entries
3.12.4. Control buttons
3.13. Using the Defect Log Editor
3.13.1. Configuring Defect Type Standards
3.14. The System Tray Icon
4. Postmortem Analysis
4.1. Counting LOC
4.1.1. The LOC Counter Tool
4.1.1.1. Counting LOC in regular files
4.1.1.2. Counting LOC changes from Git
4.1.1.3. Counting LOC changes from Subversion
4.1.2. The Quick LOC Counter
4.1.3. The LOC Counter Report
4.1.4. Entering PSP Size Data
4.1.5. Advanced Usage
4.2. Data Charts and Reports
4.2.1. The Project Plan Summary
4.2.2. Marking your project complete
4.2.3. The Time Log and Defect Log
4.2.4. Graphical charts
4.2.5. Custom charts and reports
4.3. Exporting Data
4.3.1. Exporting Team Project Data
4.3.2. Advanced: Exporting Non-Project Data
4.4. Importing Data
4.5. Exporting data to Excel (PC only)
4.6. Importing Historical PSP Data
5. Frequently Asked Questions
5.1. Installation issues
5.2. Online forms
5.3. Files
5.4. Other questions
6. Advanced Topics
6.1. Team Use
6.2. Personal Data Storage Options
6.2.1. Local Hard Drive
6.2.2. Network Directory
6.2.3. Cloud Storage
6.2.3.1. Using Cloud Storage to Access Personal Data from Multiple Computers
6.2.4. Process Dashboard Enterprise Server
6.2.5. Changing the Location of Personal Data
6.3. Backing up Dashboard Data
6.3.1. Manual Data Backups
6.3.1.1. Viewing the data in a manual data backup
6.3.1.2. Restoring data from manual data backups
6.3.2. Automatic, External Backups
6.3.2.1. Additional Uses
6.3.3. Automatic, Internal Backups
6.3.3.1. Restoring data from automatic, periodic backups
6.4. Editing Preferences
6.4.1. User Interface
6.4.2. Add-ons
6.4.3. Backups
6.4.4. Miscellaneous
6.4.5. Advanced
6.4.6. Advanced Configuration Settings
6.5. Using the Hierarchy Editor
6.5.1. The File menu
6.5.2. The Edit menu and toolbar
6.5.2.1. Deleting, moving, and renaming hierarchy nodes
6.5.2.2. Organizing your hierarchy
6.5.2.3. Creating components that follow a defined legacy process
6.5.3. Process templates
6.5.4. Processes PSP0 - PSP1.1
6.5.5. The PSP3 process
6.5.6. The "generic" process template
6.5.7. The "timer" process script
6.6. Localization Tool
6.7. Database Support in the Process Dashboard
6.8. Custom JSP Reporting
6.9. Using Multiple "To Date" Data Sets
6.9.1. Creating Multiple "To Date" Data Sets
6.9.2. Customizing "To Date" Data Sets
6.9.3. Viewing Rolled Up Data
6.9.4. Using Alternate "To Date" Data Sets
6.10. Making a change to a script
6.11. How the Dashboard finds process files
6.11.1. Sharing changes with team members
6.11.2. Some files are only read at start up
6.12. Defining a Custom LOC Counter
6.12.1. Step 1: Decide what lines of code should be counted
6.12.2. Step 2: Create an XML definition for your language filter
6.12.3. Step 3: Save your XML language filter definition
6.12.4. Step 4: Restart the dashboard
6.13. Defining legacy process templates for use in the Process Dashboard
6.13.1. Important Note
6.13.2. Step 1: Identify your process structure
6.13.3. Step 2: Create an XML definition for your process
6.13.4. Step 3: Save your XML process descriptor
6.13.5. Step 4: Restart the dashboard
6.13.6. Advanced/Optional: Defining HTML scripts
6.13.7. Additional Advanced Topics
6.14. Task Status API
6.14.1. HTTP GET
6.14.1.1. Request Parameters
6.14.1.2. Errors
6.14.1.3. Results
6.14.2. HTTP POST
6.14.2.1. Request Parameters
6.14.2.2. Errors
6.14.2.3. Results
6.15. Size Metrics API
6.15.1. HTTP POST
6.15.1.1. Request Parameters
6.15.1.2. Errors
6.15.1.3. Results
                                                                                                                                                                          

1. Quick Overview

We feel that the PSP(SM) and the TSP(SM) are remarkable technologies that can change the face of the software industry, and we share the SEI's zeal to promote their widespread use. We feel that a freely available, powerful support tool could help to remove one of the most significant barriers to PSP / TSP adoption. We therefore aim to develop a world-class tool under the open-source model, and distribute it freely to anyone using the PSP and/or TSP. We feel that this is the least we can do to thank the SEI for developing and distributing these remarkable processes.

You have installed an optional module that contains PSP(SM) scripts, forms, and other materials. These materials are copyright © 2018 Carnegie Mellon University.

Personal Software Process(SM), PSP(SM), Team Software Process(SM), and TSP(SM) are service marks of Carnegie Mellon University. The open source team that writes the Process Dashboard is not affiliated with Carnegie Mellon University.

1.1. A quick look at the tool

The personal Process Dashboard displays a streamlined user interface that helps individuals to edit plans, collect metrics, and analyze their data.

The main Process Dashboard toolbar is designed to be as small as possible, to save valuable screen real estate for actual project work. The center of the toolbar allows you to select the currently active task. Other items on the toolbar provide task-sensitive support for commonly performed activities: logging time and defects; viewing project reports, forms, scripts and other tools; viewing and editing notes; monitoring task dependencies; marking tasks complete; and adding new tasks. Less-frequently-used features are provided on the configuration menu (which is shown with the icon "" to save space).

Pick an item for further help:

Configuration menu

Play/Pause button

Percent Spent indicator

Defect entry

Project reports, forms, scripts and tools

Active task selector

Note indicator

Dependency indicator

Completion checkbox

Add task button

1.2. Goals of the PSP and the Process Dashboard

We feel that the PSP and the TSP are remarkable technologies that can change the face of the software industry, and we share the SEI's zeal to promote their widespread use. We feel that a freely available, powerful support tool could help to remove one of the most significant barriers to PSP / TSP adoption. We therefore aim to develop a world-class tool under the open-source model, and distribute it freely to anyone using the PSP and/or TSP. We feel that this is the least we can do to thank the SEI for developing and distributing these remarkable processes.

1.2.1. What is the PSP(SM)?

The Personal Software Process(SM), created by Watts Humphrey of the Software Engineering Institute, introduces software engineers to a disciplined process for software engineering. Engineers using the PSP to develop software follow defined processes and collect detailed metrics on the time required to produce a product, the defects that were injected and removed at various stages in development, and the size of the finished product.

These metrics are then analyzed using statistical methods, enabling engineers to produce highly accurate estimates based on historical data, track progress and quality of a project in progress, predict schedule impacts, and predict the quality of a finished software product. The PSP encourages engineers to quantitatively determine ways to improve their process.

For more information on the PSP, see the official PSP website at http://www.sei.cmu.edu/tsp, maintained by Carnegie Mellon University.

1.2.2. What is the TSP(SM)?

The Team Software Process(SM), also created by Watts Humphrey, is a process framework for teams of PSP-trained engineers. The TSP scales well and can be used by teams of 3 to 20 people to develop software products of significant size and complexity.

Teams of engineers using both the PSP and the TSP to develop software have consistently observed remarkable improvements in their work:

1.2.3. Why build a tool?

Both the PSP and the TSP require the collection and analysis of metrics at a very fine-grained level. Further, TSP requires teams to roll-up individual metrics to produce team metrics. Once data are collected at this level, statistical analyses of the data permit remarkable planning, tracking, prediction, and control of software products and projects.

These metrics collection and analysis processes, however, are not trivial. In any real-world project, tool support for the PSP and TSP become important considerations. Although studies have demonstrated that people can maintain their productivity when using the PSP without tool support, the "frustration factor" inherent with such an approach tries the patience of all but the most disciplined engineers, making PSP behaviors difficult to sustain.

Ideally, PSP/TSP practitioners would like to have a support tool that:

This initiative aims to develop an open-source tool to meet all of these needs.

Development on the dashboard is ongoing. To obtain the latest version of the dashboard, visit our web site at: http://www.processdash.com.

For more information on the TSP, see the official TSP website at http://www.sei.cmu.edu/tsp, maintained by Carnegie Mellon University.


Personal Software Process(SM), PSP(SM), Team Software Process(SM), and TSP(SM) are service marks of Carnegie Mellon University. The open source team that writes the Process Dashboard is not affiliated with Carnegie Mellon University.

1.3. How To Install

1.3.1. System Requirements

The Process Dashboard is 100% Java, and will run on any system with a Java 2 compliant virtual machine. This includes Windows, Linux, Unix, and Macintosh systems. For access to forms and scripts, a supported web browser is also required.

To use the process dashboard, you must first install the following software:

1.3.2. Installation Instructions

  1. Before attempting to install the dashboard, make certain you have installed the required software listed above. In particular, the Process Dashboard installer program will not run if you do not have the Java Runtime Environment installed on your computer.
  2. Download the Process Dashboard installer program from http://www.processdash.com/download and follow the directions found there.
  3. The installer will separately ask where the application should be installed, and where your personal data should be located. You may accept the suggested defaults for both. If you'd like to explore the possible options for your personal data location, click here.
  4. Please consider subscribing to our announcements mailing list. We will send email to this mailing list when new versions of the tool are available. You can subscribe to the list at http://www.processdash.com/mailingList

1.3.3. Upgrade Instructions

The Process Dashboard installer can also be used to upgrade an existing installation. If the dashboard is already installed on your computer, you can run the installer for a newer version to upgrade. You do not need to uninstall the older version of the dashboard first.

1.3.4. Optional Modules

The Process Dashboard is extensible, and some features are packaged as optional modules. During installation, you can choose which modules you wish to install.

For example, a module is available that provides scripts and forms from the Personal Software Process. If you write software, this module can help you to improve your development process.

If you perform a minimal installation of the dashboard, then decide later that you would like to use one of the optional modules, just run the dashboard installer again. When it asks you which modules you wish to install, just check the boxes for the optional modules you desire. Accept the default configuration settings that the installer offers on the remaining pages, and your existing installation will be updated with the optional modules you selected. (It is never necessary to uninstall the dashboard before running the installer again.)

 

1.4. Using Help

Starting the help system is as easy as clicking "Help" on the (configuration) menu. This online help is available via two methods:

The full-text search capability is a very useful feature; for this reason, we strongly recommend installing JavaHelp. The paragraphs below describe the behavior of the help when JavaHelp has been installed. (JavaHelp is a trademark of Oracle.)

Currently the help system provides three ways of accessing help topics:

These three views are accessed via the three tabs at the top of the left screen pane.

1.4.1. The Table of Contents view

The table of contents provides a hierarchical organization of the help topics. Items that are shown as books represent logical groupings of help topics and can be clicked to reveal more detailed help.

1.4.2. The Index view

The index view provides an alphabetical listing of various keywords on which to find help.

1.4.3. The Search Engine view

The search engine view provides an entry blank where you can enter words you would like the help system to search for within the help topics. After entering search criteria you will be presented with a list of help topics that contained the word or words entered. To the left of each item will be a number indicating how many times the word(s) entered were found in that particular help topic.

1.4.4. The navigation buttons

The help viewer also provides two navigation buttons at the top left. They allow for the familiar "back" and "forward" functionalities that are so common in modern web browsers.

1.4.5. The print buttons

The two buttons to the right of the navigation buttons are a "Print Topic" button and a "Page Setup" button. These buttons allow you to print a help topic for later reading.

1.4.6. Context sensitive help

There is also some context sensitive help available. If you press the F1 key while viewing the dashboard itself or one of its tools (PROBE, time log editor, etc.), the dashboard will startup a help screen pertinent to that tool.

1.5. Quick Start Example: a PSP2.1 Project

This "Quick Start" example is provided to illustrate the most commonly used features in the Process Dashboard, and walk you through their use on a typical project. PSP2.1 is used for this example, because most PSP-trained engineers will choose to use PSP2.1 for their daily work.

Note: The PSP2.1 process helps developers improve the quality of their plans by analyzing data from previously completed projects. To illustrate how this functionality works in the Process Dashboard, the following quick start example illustrates dashboard behavior for a user who has already completed several historical projects.

When you first begin using the dashboard, you won't have any historical project data in the dashboard. As a result, brand new users of the dashboard should not expect to be able to follow these steps verbatim and see the same results. (For example, the PROBE wizard will behave very differently for an individual with no historical data.)

If you have been using PSP for some time, you may be able to use the "PSP Data Import" template to enter your historical data into the dashboard. This is not strictly required, but it can help you to benefit immediately from the wealth of historical data you have collected in the past.

If you have never used PSP before, you are strongly encouraged to use the PSP0 process for your first project, and the PSP0.1 process for your second and third projects. You should also take a PSP course to learn how to use the PSP processes.

Here are the steps that we will take in this example:

  1. Creating the project
  2. Planning the project
  3. Designing the program
  4. Writing the code
  5. Compiling the program
  6. Testing the program
  7. Postmortem

Next step: Creating the project

1.5.1. Step 1: Create a project in the dashboard

The first thing we need to do to get started is to create a new PSP2.1 project in the dashboard. To do that, we will start the hierarchy editor by choosing Hierarchy from the Configure menu.

We need to decide where to place this project in our work breakdown structure. For this example, we will imagine that we are responsible for supporting a legacy application called "Product 1". Our users have identified a problem, and issued "Software Change Request (SCR) #42".

As you can see in the image above, this user has created "nodes" or "folders" in their hierarchy to keep things nicely organized. We will place this change request under the "Project / Legacy / Product 1" node in our work hierarchy. To do that we will select the "Product 1" node by clicking it once. Next we will pick the "Edit" menu and choose "Add Template" followed by "PSP2.1". This will add a PSP2.1-based project to the project hierarchy as a child of "Product 1". When the new project is added, it is given a default name. We can change the name to better describe what we are working on. In this case, we will choose a helpful name, like "SCR 42". For more information on using the hierarchy editor, and creating both "nodes" and projects, see the Using the hierarchy editor help topic.

Once the project has been created and renamed, click on the little expansion control to the left of the "SCR 42" project to expand its child nodes in the hierarchy tree. There you can see that the dashboard has placed all the process phases for a PSP2.1 project.

Now we can save our changes and close the hierarchy editor via the File menu.

Next step: Planning the project

Jump to step:
     START
     1. Creating the project
     2. Planning the project
     3. Designing the program
     4. Writing the code
     5. Compiling the program
     6. Testing the program
     7. Postmortem

1.5.2. Step 2: Planning the project

Now that the project exists, we can start the planning of our work. We will begin by selecting our our newly created project via the active task selector. The dashboard will automatically select the first step in the PSP2.1 process, which is Planning. Next we will click the play button on the dashboard to start timing our planning activities. When the play button is pressed, a quiet "clicking" sound will be heard. This sound will be heard anytime the dashboard switches phases of activity while the clock is running.

The PSP provides scripts for planning, development, postmortem work, etc., so let's go look at the planning script for our new PSP2.1 project. We do this by clicking the script button and choosing "PSP2.1 Planning Script" from the script menu. The planning script will appear in a web browser.

Reading through the script, we see that once we understand the requirements for this program, we need to do a size estimate. To guide our estimation, we can use the PROBE method. Following the PROBE method link on the planning script brings up the PROBE Estimating Script.

Reading through this script we see that once we have produced a conceptual design, we need to fill out the Size Estimating Template. The dashboard provides both the template itself and the instruction script for its use. Following the link for the Size Estimating Template brings up a dynamic HTML version of the template. For ready reference, the template has a link near the top to display the Size Estimating Template instructions form. If you click on this link, a second browser will be started so that you can have the instructions and the template side by side on your screen. For more information on the Size Estimating Template, see the Size Estimating Template help topic.

The Size Estimating Template Instructions direct us to count the base LOC and enter it in the Base Parts section if this is an enhancement of a previous program. We're modifying an existing program, so we use the LOC counter to measure the size of the components we plan to modify, and enter that number in this section.

The Parts Additions section will be the places for most of our estimating. Based on our conceptual design, we enter several lines describing the work we plan to do. For each item, we estimate the type, number of methods, and LOC estimates. The "add more rows for new objects" link will expand the form with more entries if chosen.

We don't anticipate reusing any code, so we will skip that section.

Moving on to the size calculation, we need to calculate the estimated added & modified LOC using PROBE. There are at least two ways to do this: with the PROBE Wizard or with the PROBE tool. (The PROBE Wizard automates the standard PSP PROBE process, and is simpler to use; the PROBE tool is more complex to use but provides more power for custom statistical analyses.) Most people will want to use the PROBE Wizard for all their planning needs, so we will use the wizard for this example. After you complete the top portion of the Size Estimating Template, you can launch the PROBE wizard by clicking on the hyperlink halfway down the page.

The PROBE Wizard consists of a series of dialogs that guide you through the PROBE process.

The PROBE script gives several ways to calculate an estimate. The PROBE Wizard displays these methods side by side and ranks them, advising us which method may be the most reliable. By simply following the prompts, we decide in this example to select method C2 for size and then choose C2 for time. As we make these choices, the resulting values are automatically written into the appropriate fields of the Size Estimating Template.

After our planning efforts on this form it looks like the following:

When we bring up the Project Plan Summary, we see that the planning data is all entered automatically. Time to click the little done button on the dashboard and move on into design!

Note also that when the dashboard moves into a new phase while the timer is running, a little "clicking" noise is made. This little bit of feedback assures us that the timer is still running.

Next step: Designing the program

Jump to step:
     START
     1. Creating the project
     2. Planning the project
     3. Designing the program
     4. Writing the code
     5. Compiling the program
     6. Testing the program
     7. Postmortem

1.5.3. Step 3: Designing the program

The PSP provides Development scripts for all the levels. To access the development script for this program, we can click the web browser's back button to go back to the Planning script, then click the appropriate hyperlink near the bottom of the page. Or we can click the script button on the Process Dashboard toolbar to view the full list of scripts and forms provided by the current project, and choose "PSP2.1 Development Script" from the menu.

While designing this program, we will be sure to keep the dashboard's timer running. This can be confirmed by noticing the state of the play/pause button. For more information on the play/pause button, see the play/pause button help topic.

Once finished with the program design, we click the completion checkbox to mark the design phase complete.

The dashboard will move us to the next phase, which is design review. We perform a thorough review of our design, and find several defects. To enter each defect, we click the defect button.

The defect dialog appears, allowing us to enter all the pertinent data about the defect.

After you enter the data for a defect, click the OK button to save it. Then, if you need to enter another defect, click the defect button on the main dashboard window again. For more information about entering defects into the dashboard, see the Entering Defects help topic.

Of course, several more defects were found during the review, but we won't show them all.

Once the design review is finished, we click the completion checkbox and move along to coding.

Next step: Writing the code

Jump to step:
     START
     1. Creating the project
     2. Planning the project
     3. Designing the program
     4. Writing the code
     5. Compiling the program
     6. Testing the program
     7. Postmortem

1.5.4. Step 4: Writing the code

During software development, you will inevitably spend a sizeable amount of time in the coding phase. Even though you have your head down and your mind focused on code, don't forget to follow the disciplined PSP behaviors!

In particular, get into the habit of faithfully starting and stopping the timer. If you are interrupted during your work, just click the play/pause button. When the interruption ends, press the button again. The dashboard will automatically record rows in your time log to capture the time you are spending on the work.

If you forget to start or stop the timer, you can fix these mistakes with the time log editor.

Also, it is common when coding to discover defects that were injected in earlier phases. For example, you might find an error in your design. Use the defect button to record these defects as you find and fix them.

When we are done coding, we mark the phase complete and move on to code review. Of course, while reviewing the code, we faithfully log our time and defects. Finally, we mark the code review phase complete, and move on to the compile phase.

Next step: Compiling the Program

Jump to step:
     START
     1. Creating the project
     2. Planning the project
     3. Designing the program
     4. Writing the code
     5. Compiling the program
     6. Testing the program
     7. Postmortem

1.5.5. Step 5: Compiling the program

If your code review was perfect, your code will compile cleanly the first time! Otherwise, you'll need to click the defect button to record each compile defect.

Once all the defects that were found in compile have been entered and the program compiles cleanly, clicking the completion checkbox moves us onward into the testing phase.

Next step: Testing the program

Jump to step:
     START
     1. Creating the project
     2. Planning the project
     3. Designing the program
     4. Writing the code
     5. Compiling the program
     6. Testing the program
     7. Postmortem

1.5.6. Step 6: Testing the program

When using the PSP, you should strive to remove defects before the testing phase whenever possible. Nevertheless, you will still encounter defects during testing, and you should log these defects using the defect button. Since we have already seen an entry of a defect, we will take this opportunity to look at a more complicated situation.

Consider the following circumstance: while testing, you find a defect and put in a fix. Upon compiling your fix you discover that you have inadvertently injected another defect (perhaps a syntax error in your coding). This is what the PSP calls a "fix defect" - a defect injected while entering a fix for another defect.

The dashboard has a very handy feature to help in this regard. While the defect dialog for one defect is open, you can click on the little defect button in the corner to enter a new defect for the fix of the current defect.

After clicking the Fix Defect button, a new defect dialog will open for entry of data for this new defect.

While this new defect dialog is open, the timer for the previous defect dialog is paused. Also, notice that the number of the previous defect is already entered in the Fix Defect blank. Once the information for this new defect is entered and the user clicks OK, the previous defect dialog will pop to the front of the screen and the timer will resume. For more information about this behavior, see the Entering Defects help topic.

Back to our example. Once the program has been sufficiently tested and all the defects have been entered, hit the completion checkbox again to move into Postmortem.

Next step: Postmortem

Jump to step:
     START
     1. Creating the project
     2. Planning the project
     3. Designing the program
     4. Writing the code
     5. Compiling the program
     6. Testing the program
     7. Postmortem

1.5.7. Step 7: Postmortem

The PSP provides Postmortem scripts for all of the PSP levels. To get to the postmortem for the current program, we can click the link at the bottom of the development script. Alternatively, click the script button on the dashboard and choose the option for the postmortem script.

After making sure that the postmortem entry criteria are met, the next step is to enter the actual size data for the program. You may find the dashboard's LOC counter useful for measuring added, deleted, and modified lines of code. Enter the actual values for base, deleted, modified, total, base additions, new, reused, and total LOC on the Size Estimating Template form, which can be reached by clicking the appropriate link from the postmortem script.

Some people do not care to enter detailed actual size data on the Size Estimating Template. Those numbers shown above can safely be skipped as long as you faithfully enter summarized actual size data on the Project Plan Summary:

During postmortem, you should also review the numbers on the other pages of the Project Plan Summary form. If any numbers seem suspect, make appropriate corrections in the time and defect log editors.

Once the actual size information has been entered and other metrics have been reviewed for correctness, we can mark the postmortem phase complete. If you have faithfully marked all of the PSP phases complete, the dashboard will mark the project itself complete as well. We can double check that it has been marked by looking at the Project Completion checkbox on the Project Plan Summary.

If you marked all of the phases complete, but the Project Complete checkbox still is not checked, this would indicate that you had already overridden this automatic behavior. You can learn more about the relationship between marking the phases complete and marking the entire project complete by reading the Using the completion checkbox help topic.

The Process Dashboard also offers several other aids for analyzing postmortem data. Choosing PSP Data Analysis from the menu will open the web browser to a set of pages that contain many useful graphs of process data.

This Data Analysis page provides several different categories of charts to allow easy analysis of various metrics measured in the PSP. Clicking on one of the chart thumbnails in the right pane will bring up a full-sized view of that chart. For more information on the types of data that can be analyzed via these reports and graphs, see the Creating Reports and Charts help topic.

That's it for this example. We hope it has been helpful.

Jump to step:
     START
     1. Creating the project
     2. Planning the project
     3. Designing the program
     4. Writing the code
     5. Compiling the program
     6. Testing the program
     7. Postmortem

1.6. Change History

1.6.1. Features new in version 2.7

1.6.2. Features new in version 2.6

1.6.3. Features new in version 2.5

1.6.4. Features new in version 2.4

1.6.5. Features new in version 2.3

1.6.6. Features new in version 2.2

1.6.7. Features new in version 2.1

1.6.8. Features new in version 2.0

1.6.9. Features new in version 1.15

1.6.10. Features new in version 1.14

1.6.11. Features new in version 1.13

1.6.12. Features new in version 1.12

1.6.13. Features new in version 1.11

1.6.14. Features new in version 1.10

1.6.15. Features new in version 1.9

1.6.16. Features new in version 1.8

1.6.17. Features new in version 1.7

1.6.18. Features new in version 1.6 (released September 1, 2003)

1.6.19. Features new in version 1.5 (released October 3, 2002)

1.6.20. Features new in version 1.4 (released February 22, 2002)

1.6.21. Features new in version 1.3.1 (released August 14, 2001)

1.6.22. Features new in version 1.3 (released July 16, 2001)

1.6.23. Features new in version 1.2 (released April 20, 2001)

1.6.24. Features new in version 1.1 (released February 9, 2001)

1.7. License Information

Process Dashboard, copyright © 1998-2023 Tuma Solutions, LLC. The Process Dashboard comes with ABSOLUTELY NO WARRANTY; this is free software, and you are welcome to redistribute it under certain conditions; click here for details.

The Process Dashboard includes software contributions from the following individuals:

This program also contains:

You may have installed optional modules that provide enhanced charting and reporting capabilities and relational database support. These modules are © 2008-2023 Tuma Solutions, LLC.

This software contains unmodified binary redistributions for H2 database engine (http://www.h2database.com/), which is dual licensed and available under a modified version of the MPL 1.1 (Mozilla Public License) or under the (unmodified) EPL 1.0 (Eclipse Public License). An original copy of the license agreement can be found at: http://www.h2database.com/html/license.html

1.7.1. SEI/CMU Materials

Personal Software Process(SM), PSP(SM), Team Software Process(SM), and TSP(SM) are service marks of Carnegie Mellon University. The open source team that writes the Process Dashboard is not affiliated with Carnegie Mellon University.

You have installed an optional module that contains PSP(SM) scripts, forms, and other materials. These materials are copyright © 2018 Carnegie Mellon University.

Neither Carnegie Mellon University nor the Software Engineering Institute have reviewed or endorsed the Process Dashboard.

1.7.2. GNU General Public License

Version 3, 29 June 2007

Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

0. Definitions.

"This License" refers to version 3 of the GNU General Public License.

"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.

To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.

A "covered work" means either the unmodified Program or a work based on the Program.

To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

1. Source Code.

The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work.

A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

The Corresponding Source for a work in source code form is that same work.

2. Basic Permissions.

All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.

4. Conveying Verbatim Copies.

You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

5. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

6. Conveying Non-Source Forms.

You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

7. Additional Terms.

"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

8. Termination.

You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

9. Acceptance Not Required for Having Copies.

You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

10. Automatic Licensing of Downstream Recipients.

Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

11. Patents.

A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".

A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

12. No Surrender of Others' Freedom.

If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

13. Use with the GNU Affero General Public License.

Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

14. Revised Versions of this License.

The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

15. Disclaimer of Warranty.

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

17. Interpretation of Sections 15 and 16.

If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>

    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box".

You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.


Additional Permissions

The following additional permission is granted, under the terms of section 7 above:

If you modify this Program, or any covered work, by linking or combining it with modules that have been produced, distributed or approved by Tuma Solutions, LLC (regardless of the license terms of those modules), the licensors of this Program grant you additional permission to convey the resulting work.

Go to GNU's home page at http://www.gnu.org/home.html.
Please send FSF & GNU inquiries to gnu@gnu.org.
Copyright notice above. 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
Verbatim copying and distribution of this entire article is permitted in any medium without royalty provided this notice is preserved.
Updated: $Date$

1.7.3. GNU Lesser General Public License

Version 2.1, February 1999

Copyright (C) 1991, 1999 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.

This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.

When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.

To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.

For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.

We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.

To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.

Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.

Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.

When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.

We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.

For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.

In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.

Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.

The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".

A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.

The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)

"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.

1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.

Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.

This option is useful when you wish to copy part of the code of the Library into a program that is not a library.

4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.

If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.

5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.

However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.

When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.

If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)

Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.

6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.

You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:

For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.

7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:

8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.

10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.

11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.

14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Libraries

If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).

To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

one line to give the library's name and an idea of what it does.
Copyright (C) year  name of author

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in
the library `Frob' (a library for tweaking knobs) written
by James Random Hacker.

signature of Ty Coon, 1 April 1990
Ty Coon, President of Vice

That's all there is to it!


Go to GNU's home page at http://www.gnu.org/home.html. FSF & GNU inquiries & questions to gnu@gnu.org.

Copyright notice above.
Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA


1.7.4. Apache License, Version 2.0

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:

  1. You must give any other recipients of the Work or Derivative Works a copy of this License; and

  2. You must cause any modified files to carry prominent notices stating that You changed the files; and

  3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and

  4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

1.7.5. MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

1.7.6. Berkeley Software Distribution (BSD) License

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

1.7.7. Java Tutorial Code License

Copyright © 2002 Sun Microsystems, Inc. All Rights Reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Neither the name of Sun Microsystems, Inc. or the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.

This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

You acknowledge that this software is not designed, licensed or intended for use in the design, construction, operation or maintenance of any nuclear facility.

1.7.8. DOM4J License

Redistribution and use of this software and associated documentation ("Software"), with or without modification, are permitted provided that the following conditions are met:

THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

1.7.9. Colt License

Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. CERN makes no representations about the suitability of this software for any purpose. It is provided "as is" without expressed or implied warranty.

1.7.10. overLIB License

Preamble

The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.

Definitions:

Terms:

  1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
  2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
  3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
    1. place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
    2. use the modified Package only within your corporation or organization.
    3. rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
    4. make other distribution arrangements with the Copyright Holder.
  4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
    1. distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
    2. accompany the distribution with the machine-readable source of the Package with your modifications.
    3. accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
    4. make other distribution arrangements with the Copyright Holder.
  5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
  6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
  7. C or perl subroutines supplied by you and linked into this Package shall not be considered part of this Package.
  8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
  9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

1.7.11. License Agreement for Extensions from Tuma Solutions

THIS IS A LEGAL AGREEMENT ("Agreement") BETWEEN YOU AND TUMA SOLUTIONS, LLC ("TS, LLC"). PLEASE READ THIS SOFTWARE LICENSE AGREEMENT CAREFULLY BEFORE INSTALLING OR USING THE SOFTWARE. BY INSTALLING AND/OR USING THIS SOFTWARE, YOU ARE CONSENTING TO BE BOUND BY THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, YOU MUST UNINSTALL AND REFRAIN FROM USING THIS SOFTWARE.

1. TS, LLC and/or its affiliates own all files included in this software (this "Software"). This Software is protected by United States copyright laws and international treaty provisions. You may use this Software only as stated in this Agreement.

2. Permitted Uses: Under this Agreement you may install multiple copies of the software for use as a component extension of the Process Dashboard software application. YOU MAY NOT: (1) use, copy, modify, merge, and/or transfer copies of this Software or any component thereof except as provided in this Agreement; (2) reverse engineer, reverse assemble or reverse compile this Software or any component thereof; (3) sublicense, rent, lease, sell, or assign this Software; (4) distribute this software for profit or fee in excess of duplication or transmission costs; or (5) incorporate this Software or any component thereof as part or all of another product without prior written permission from TS, LLC.

3. Under this Agreement, you may be given a product key to register this Software by TS, LLS or an authorized affiliate. Product keys are uniquely assigned to an individual, a team, or an organization. YOU MAY NOT disclose or transmit your product key to any other party without prior permission from TS, LLC. Unauthorized sharing of your product key constitutes a federal copyright violation. Under this Agreement, you agree to allow this software and associated software to store small amounts of information necessary to protect the software and/or product keys against unauthorized use.

4. LIMITED WARRANTY: THIS SOFTWARE IS LICENSED ON AN "AS-IS" BASIS. TS, LLC MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. TS, LLC DOES NOT MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT. TS, LLC DOES NOT WARRANT THAT THE SOFTWARE IS ERROR-FREE OR THAT ANY ERRORS WILL BE CORRECTED. Some jurisdictions do not allow the exclusion or limitation of implied warranties, so the above exclusions and limitations may not apply to you.

5. TS, LLC and its affiliates entire liability and your exclusive remedy under this Agreement is limited to no more than you paid for this Software. For any claim (including fundamental breach), in any form, related in any way to this Agreement, TS, LLC's liability will be for actual damages only and will be limited to the purchase price, if any, you paid for this Software.

6. TS, LLC and/or its affiliates will not be liable for any lost profits, lost savings, or any incidental or punitive damages or other economic consequential damages (including loss of information), even if TS, LLC or its affiliates have been advised of the possibility of such damages. TS, LLC will not be liable for any damages claimed by you based on any third party claim. This limitation of remedies also applies to any developer of Software supplied to TS, LLC. TS, LLC and the developer's limitation of remedies are not cumulative. Such developer is an intended beneficiary of this Section. This limitation of remedies also applies to any licensor of content supplied to TS, LLC. TS, LLC and the licensor's limitation of remedies are not cumulative. Such licensor is an intended beneficiary of this Section.

7. This Agreement is governed by the laws of the State of Utah. If any portion hereof is found to be void or unenforceable, the remaining provisions of this Agreement shall remain in full force and effect.

If you have further questions regarding this Software, please contact:

Tuma Solutions, LLC
legal@tuma-solutions.com

1.7.12. License Agreement for PSP(SM) and TSP(SM) Materials

PSP and TSP materials are distributed in optional modules for the Process Dashboard. These materials are copyright 2018 Carnegie Mellon University. All rights reserved.

This material is based upon work funded and supported by the Department of Defense under Contract No. FA8721-05-C-0003 with Carnegie Mellon University for the operation of the Software Engineering Institute, a federally funded research and development center.

Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the United States Department of Defense.

NO WARRANTY. THIS MATERIAL IS FURNISHED ON AN "AS-IS" BASIS WITH NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR MERCHANTABILITY, ANY WARRANTY WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT, OR THIRD PARTY INTELLECTUAL PROPERTY RIGHTS.

[Distribution Statement A] This material has been approved for public release and unlimited distribution. The United States Government has Unlimited Rights in this material as defined by DFARS 252.227-7013.

The text and illustrations in this material are licensed by Carnegie Mellon University under a Creative Commons Attribution 4.0 International License.

Personal Software Process, PSP, Team Software Process, and TSP are service marks of Carnegie Mellon University. The Creative Commons license does not extend to logos, trade marks, or service marks of Carnegie Mellon University.


2. Planning Your Project

If you do not know where you are going, any road will do.
    - Chinese proverb
If you do not know where you are, a map will not help.
    - Watts Humphrey

Planning a software project is just as important as planning any other complicated endeavor. In his book A Discipline for Software Engineering Watts Humphrey devotes three chapters to planning activities. This help topic will not rehash the ideas put forth there, but will simply serve as a reminder that planning is essential!

The Process Dashboard provides extensive help for your planning activities. You can create projects and enter tasks in a work breakdown structure, so that time, size, and defect data can be tracked. The PROBE tool and PROBE Wizard help automate the PROxy Based Estimation method. Finally, the Task and Schedule Tool allows you to create a schedule and track your progress against it using earned value.

2.1. Creating Projects

The Process Dashboard provides powerful support for planning, tracking, and managing a set of work. To take advantage of these features, the first step is to create a project.

Dashboard projects can support team work or individual work. These two project types are described below.

2.1.1. Team Projects

If you will be collaborating with other people on the work, you should work with your team leader to create a team project. A team project allows your team to share a common work breakdown structure, to support each other on shared tasks, and to see project-level reports that roll up data from everyone on the team.

Team Projects are created within a Team Dashboard, which coordinates the flow of shared data. Then, you and your team members join the project from your personal dashboard.

See the Team Use section of the Users Manual for extensive help on the use of team projects to plan, track, and manage team work.

2.1.2. Personal Projects

For independent work (or for times when your team members are not using the Process Dashboard), you can create a personal project. A personal project:

You can also use a personal project to capture data about a collection of miscellaneous tasks, even if you don't need to track your progress against a schedule. The Work Breakdown Structure Editor makes it easy to enter the list of tasks. Then you can use the dashboard toolbar to log time, mark tasks complete, etc.

To create a personal project, just choose "New Project" from the configuration menu. Then take a look at the instructions for working with personal projects.

2.1.3. Comparing Project Types

Team projects and personal projects are more alike than they are different. Essentially, a personal project provides all of the same powerful planning and tracking tools that teams find useful, streamlined for a project that has only one team member. The table below offers a comparison:

  Personal Project Team Project
Project is created in Personal Dashboard Team Dashboard
Number of people on the project 1Any number
Work breakdown structure
Customizable process workflows
Workflow process analysis reports
Estimation tables
Milestones
Quality planning and tracking
Schedule tracking charts and reports
Personal schedule for tracking individual progress
Rollup schedule for tracking team progress
Reports for analyzing personal project data
Rollup reports for analyzing team project data
Master projects for multi-project rollups
Role-based permissions
Data privacy controls

2.2. Working with Personal Projects

After you've created a personal project, the dashboard will offer a rich set of tools for building a plan and tracking your work.

To access these tools, select the project on the main dashboard toolbar, then click on the Project Reports and Tools button:

The sections below outline the use of these tools on a personal project. These are the same tools that are available to project teams, so you'll see links below that take you to more information in the "team use" section of the User's Manual. The key difference is that a personal project has only one team member (you); so some of the user interfaces described in the team help will be streamlined to hide team-related elements you don't need.

2.2.1. Editing the Work Breakdown Structure

To build your task plan, you will use the Work Breakdown Structure Editor.

2.2.2. Working with your Personal Plan

The tasks you created in the WBS will appear in your personal plan in the main dashboard toolbar.

2.2.3. Tracking Progress

As you work, the project reports and tools button will offer a number of charts and reports to help you track your progress.

2.2.4. Managing Iterations

Project development is an iterative process. When a project iteration comes to an end, you can choose " → Alter Project" to perform the following actions:

2.3. Using the Task & Schedule Tool

The task and schedule tool allows you to generate a schedule for completing tasks, and track progress against that schedule using earned value. You can open the task and schedule tool by selecting the "Task & Schedule" option on the configuration menu.

For more guidance in creating an earned value schedule, see the Creating a schedule step by step help topic.

If you haven't created any schedules, the dashboard will immediately jump to the Create New Schedule dialog which will allow you to create one. If you have already created at least one schedule, a Task & Schedule chooser window will appear.

This window displays all the schedules you have created. After you click on a schedule to highlight it, you can use the buttons along the bottom to rename it, delete it, or open it for editing. The Report button will show you the detailed status for the schedule in your web browser.

Clicking the New button will create a new schedule. The dashboard will ask you to enter a name for the new schedule. This allows you to track different schedules from within the dashboard; each schedule must have a unique name.

In addition to choosing a schedule name, you can indicate whether you want to create a regular schedule or an EV roll-up.

When a new schedule is first created, an empty Task & Schedule window will appear prompting you for the first task you want to add to the schedule.

All the tasks that are to be tracked within the schedule must come from the project hierarchy defined using the Hierarchy Editor or the Work Breakdown Structure Editor. You can track progress against PSP projects, projects you have made using custom process scripts or add-on process sets, or even against just a hierarchy of task names that are not associated with a particular process in the dashboard. The Task & Schedule tool is completely process independent.

The Task & Schedule window combines a project task list and a simple project schedule into one window. The top portion of the window gives a view of the task schedule on a task by task basis and tracks metrics about each task. The bottom portion of the window is concerned with actual calendar time. The time for the schedule is broken out into time periods (e.g. weeks) and the columns track metrics about each time period.

Editable values appear with a yellow background. If you are unfamiliar with the various columns in the task and schedule planning templates, you can hover the pointer over the column headings and a tool tip will tell you what the abbreviated heading stands for.

If you edit the schedule or the list of tasks, you will need to click the Save button to save your changes. If you edit yellow-background values in the task list, however, those changes will be saved transparently; pressing the save button is not necessary.

2.3.1. Columns in the Task List

While this help topic won't get into all the details of earned value tracking, briefly here are the items that are shown in the upper window. (Note: you can customize the columns that are displayed by choosing "Select Task Columns" from the "View" menu.)

Planned Time (PT): This is the amount of time you have planned for the given task. Generally this will be displayed in hours and minutes. However, if this field is editable, you can enter a percentage instead of a duration to mark this task as a "level of effort" task.

Time This is the actual amount of time spent on a given task.

Planned Value (PV): This is the amount of earned value that will be earned by the given task based on the planned numbers. It is calculated as a percentage of the total planned work.

Plan Date: This is the date the task is planned to complete. The Task & Schedule tool computes this by assuming that the planned time for each task, the planned task order, and the planned hours per time period will be 100% accurate. Then, it determines when your schedule will have enough planned hours to complete the first task, the second task, and so on. (For more details on this calculation, click here.)

Replan: No plan is perfect. When things don't go according to plan, it is helpful to chart a new course ahead based on the most up-to-date information. The dashboard looks at the tasks you've completed so far, the time you've spent on tasks in progress, and the time you have available in your schedule. Then, it recalculates planned dates for each task by assuming assumes that your plan was essentially correct, but has encountered a few "bumps" in the road.

As an oversimplification, you can think of this as calculating how far ahead or behind schedule you are, and adding that delta to the planned date for each task. In reality, the calculation is more intelligent, because it accounts for in-progress work, overspent tasks, and variations in the amount of time your schedule contains per period. (For more details on this calculation, click here.)

Forecast: This is the date that the Task & Schedule tool thinks you might actually finish the given task. After you have completed at least one task in your plan and at least one time period in your schedule, the Task & Schedule tool will compare your actual performance to your planned performance. (For example, are tasks taking twice as long as expected? Are you spending as much time per period as you thought you would?) Then, it assumes that these plan-to-actual relationships will hold true for the rest of the tasks in your plan, and recomputes completion dates accordingly. (For more details on this calculation, click here.)

Date: This is the actual completion date. It will be filled in automatically when you mark the task complete via the Completion Button. Alternately, you can edit completion dates here (for example, if you need to back-date the completion of an item). If you need to mark several tasks complete with the same date, use Ctrl-C to copy the date in a given cell; then select a range of date cells and press Ctrl-V to paste that date into all of them.

Milestone: If milestones have been defined by a team project, this column will appear to display the milestone each task is associated with. If a particular task is not projected to finish in time to meet the milestone commitment date, the value in this column will turn red and a tooltip will provide additional information.

Labels: If labels have been defined in a team project, this column will appear to show the labels associated with each task.

Notes: This column displays a note icon for any task that has an associated note. You can place your mouse over the icon to read the note. To create a new note or edit an existing note, just click on a cell in this column.

Dep: This column displays information about task dependencies. If a task has no dependencies, nothing will be displayed. If the task depends on at least one other task which has not yet been completed, a "stop sign" icon will be displayed, indicating that work cannot proceed until the predecessor has been completed. Once all predecessors have been marked complete, the icon will change to a green checkmark.

To edit the list of dependencies for a task, double-click on a cell in this column, and follow the instructions. Generally, this approach is unnecessary, because most projects will choose to define dependencies at the team level. In that scenario, the dependency information will be copied from the team plan automatically, and you won't need to edit the information here.

This column will also display an icon for "reverse dependencies." If other individuals are waiting for you to complete a task, this column will display an indicator to that effect.

Percent Complete (%C): This is the percent complete for the current task. Many people are accustomed to informally estimating percent complete; PSP formalizes this concept:

At times you might wish for the ability to edit the "percent complete" for a task because it is "90% done." Unfortunately, this often leads to tasks that reach 90% complete and stay there for weeks, slipping the schedule. PSP states that instead, you should break the task down into subtasks and mark some of those subtasks complete. That way, you will get an accurate measure of percent complete.

Percent Spent (%S): This number describes the relationship between planned time and actual time for the given task. If you have spent twice as much time on this task as you planned to spend, it would be 200% spent. If you have only used up half of the planned time, the task would be 50% spent.

Earned Value (EV): This is the actual amount of earned value that this task has earned. Remember that earned value measures are not counted until the task is marked as complete.

Note: The columns listed above are sufficient for most simple planning. As a result, the task list will usually only display the columns listed above. For advanced planning, however, some additional information must also be displayed. Therefore, the following columns will automatically appear if:
  • You manually prune subtasks out of your hierarchical task list
  • You logged time to any of the tasks in your task list before the starting date of your schedule, and you have enabled the iterative planning schedule option.
  • You completed any of the tasks in your task list before the starting date of your schedule, and you have enabled the iterative planning schedule option.

Planned Direct Time (PDT): The "Planned Time" column (described above) displays the total amount of time you plan to spend on a task, no matter when that time gets spent. In contrast, the "Planned Direct Time" column displays the amount of effort you plan to spend as part of this schedule.

An example can help illustrate the difference. Imagine that one of the tasks on your task list is to write a large software module. It might have subtasks for requirements, design, implementation, and formal testing. The total amount of time needed to complete all of these subtasks would be displayed in the "Planned Time" column. Now suppose you already completed requirements and design, and started on the implementation, as part of an earlier project iteration. Furthermore, you don't plan to begin formal testing until the next project iteration. The "Planned Direct Time" for requirements, design, and formal testing would be zero, since you don't intend to spend any time on them during the current project phase. Also, since you already performed some of the work for the implementation task, only the remaining portion of its planned time would appear in the "Planned Direct Time" column.

The "Planned Direct Time" column will only be displayed if it differs from the "Planned Time" column for at least one task in your task list. When it appears, you will note that the "plan value" for a task is based on its planned direct time, not its planned time.

Actual Direct Time (DTime): The "Actual Time" column displays the total amount of time you have spend on a task to date, no matter when that time was spent. In contrast, the "Actual Direct Time" column displays the amount of effort you have spent as part of this schedule.

2.3.2. Columns in the Schedule List

Briefly, here are the items that are shown in the bottom window:

From: This is the starting date for a portion of your work schedule. The schedule can start anytime and can be of just about any length (one week in duration, one day, one month, etc.).

To: This is the ending date for a portion of your work schedule. Using the From and To fields, you can break your schedule up into managable time chunks. The Task & Schedule tool defaults to using time periods of one week in length, but you can edit the To field to create time periods of any length (e.g. months, days, or even hours).

Planned Time (PT): This is the amount of time that will be applied to the tasks in the task list during the calendar time period selected by the From and To fields. It defaults to 20 hours, but can be set to whatever number you think is accurate for the amount of time you will actually spend on task during the given time period. Note that this is the total amount of time you plan on spending on ALL of the tasks listed in the top window. The default numbers on the Task & Schedule tool work out to 20 hours per week of work on task.

Cumulative Planned Direct Time (CPT): This is the Planned Direct Time of the given time period, plus the times of all previous periods.

Cumulative Planned Value (CPV): This shows cumulatively the amount of earned value that is planned for the given time period.

Actual Time (Time): This shows the actual amount of time spent on the tasks in the schedule during the given time period.

Cumulative Actual Direct Time (CT): This shows the actual amount of direct time spent on task during the given time period cumulatively.

Notes: This column allows you to attach an annotation to a time period in your schedule. These notes could be used, for example, to record the reason why a week has a different number of planned hours, or the reason why actual hours differed from expectations. A note icon is displayed for any time period that has an annotation. You can place your mouse over the icon to read the note. To create a new note or edit an existing note, just click on a cell in this column.

Actual Cumulative Earned Value (EV): This shows the amount of earned value actually earned during the given time period cumulatively.

Note: The columns listed above are sufficient for most simple planning. As a result, the schedule list will usually only display the columns listed above. However, if your task list contains any "level of effort" tasks, then "time" and "direct time" will no longer be the same. As a result, the following columns will automatically appear:

Planned Direct Time (PDT): The first column, labeled "PT," will display the total amount of time you plan to spend during this period on ALL tasks in the task list; this column, however, will show how much time is available after subtracting time for "level of effort" tasks.

Percent Indirect Time (%I): This shows the percentage of your total actual time that you spent on "level of effort" tasks.

Actual Direct Time (DTime): The "Time" column will display the total amount of time you actually spent on ALL tasks in the task list. This column, however, will subtract out time spent on "level of effort" tasks to show how much time you spent on tasks that earn value.

2.3.3. Potential mistakes

Be careful to avoid making the following mistakes when creating a schedule:

Duplicate tasks: Nothing currently prevents you from adding the same task to your task list more than once. This could easily happen, for example, if you add a task to your task list, then add its parent as well. If you do this, the dashboard will dutifully create a schedule as if you were performing the task twice.

Conflicts between different schedules: The dashboard lets you create multiple, independent schedules. It does not, however, prevent you from overextending yourself when multiple schedules are running concurrently. Nothing prevents you from creating twelve different concurrent schedules, and promising to spend 40 hours per week on each. If you are splitting your time across a number of different projects, take the time to create an EV rollup of your active projects. In that EV rollup, you can click on a cell in the PT column to manage your weekly time commitments across the various projects.

Time estimates that don't add up: The Planned Time (PT) column should always add up in a hierarchical manner; that is, the planned time for a parent node should always be equal to the sum of the planned times for all its children. This is almost always the case for the PSP processes that come with the dashboard. However, if you have unlocked your data and overwritten calculations, times may no longer sum up correctly. This problem can also occur if you are using plain hierarchy "nodes" to describe tasks, and you subdivide a node after estimating its time. When this occurs, the task list will use the children's plan time for calculations rather than the parent's. To correct this error, do one of the following:

Missing time estimates: Earned value forecasts and calculations make heavy use of the the planned times for the tasks in your task list. If you forget to estimate the planned time for a task in your task list, these forecasts will be underestimated.

The dashboard automatically checks for some of these errors, and displays an warning if they are found. If errors are present, they will be highlighted with red text. If you hover the mouse over the red text, a tool tip will provide a short description of the problem. For a more complete explanation of the problem, click the red "Errors" button that appears at the bottom of the task & schedule window.

2.3.4. Creating a Schedule Step by Step

The Task & Schedule tool tries to make entering all the data necessary for project planning and tracking as painless as possible. It fills in many of the columns automatically. The following discussion will show how to create a schedule step by step.

2.3.4.1. Step 1: Add tasks to the task list

To create a schedule, you decide what tasks you want included in the schedule, and add them with the Add Task button. You can add any node in your hierarchy to the task list; it will be added, along with all its children, recursively. As an improvement over the traditional task planning template, the dashboard displays your task list in a hierarchical fashion. You can expand and contract this hierarchical view to get coarser- or finer-grained data.

The relationship between the Project Hierarchy and the Task & Schedule tool

All the tasks that are to be tracked within the schedule must come from your project/task hierarchy, as defined in the Work Breakdown Structure Editor and/or the hierarchy editor. If you edit your project/task hierarchy in the future, your changes will automatically propagate into affected task lists. For example, if you add a node named "Release 3.0" to a task list, then in the future if you were to create/delete subtasks underneath "Release 3.0", they would automatically appear in the task list / disappear from the task list.

Changes made in the hierarchy automatically get reflected into the schedule, because the schedule is basically a listing of the tasks/projects in the dashboard. However, if you remove a task in the Task & Schedule tool, it does NOT get deleted from the task hierarchy of the process dashboard. All you will have done is removed the task from the schedule, not deleted it entirely from the dashboard. Deletion of tasks or projects from the dashboard itself must be done from the WBS editor or the hierarchy editor.

Editing the task list

Once you have added tasks to the task list, you can use the Remove Task button to remove them. If you remove a top-level task, it will be removed from the task list entirely. (Top-level tasks are the tasks that you explicitly added using the Add Task button; in the task list, they appear as immediate children of the root of the tree.) If you remove a child of a top-level task, it will be not be deleted from your work hierarchy; instead, it will just be excluded from the calculations for this EV schedule. This option is appropriate if you plan to work on an item in the future, but not during the current project iteration. If you have excluded a task in this way, you can restore it by highlighting the pruned task and clicking the Restore Task button.

The planned completion dates displayed in the task list are based upon the order you plan to complete the tasks. To define the correct chronological order, check the Flat View checkbox. This will replace the hierarchical view of the task list with a flat, chronological view of the "leaf" tasks that have not yet been completed.

After you switch into flat view, you can reorder the list of tasks. Place tasks in approximate chronological order (the first task in the list should be the one you plan to work on first, and so on). There are several ways to reorder the tasks:

If you right-click on a task in the task list, a popup menu will appear, providing access to a number of convenient shortcuts. For example, you can jump to this task in the time or defect log, or you can copy information about the task to the clipboard for pasting into another program.

2.3.4.2. Step 2: Estimate task time

Once tasks are added to the task list, the dashboard will look up information like the planned time, actual time, etc. from the appropriate Project Plan Summary forms (if applicable), and display it in the appropriate boxes. You can click on any value with a yellow background and edit it, and the change will appear immediately on the associated Project Plan Summary form. Similarly, if you edit one of these values on a Project Plan Summary form, the new value will automatically appear here in the task list.

Level of Effort Tasks

Often, you may find that you are required to perform "overhead" tasks, like reading email or attending meetings. Or, you may be assigned to some ongoing responsibility like keeping the server running, or monitoring the quality of your team's software modules. These tasks are ongoing, and usually have no beginning and no end. It doesn't make sense to say that you could ever "complete" such a task. In general, you'll spend some percentage of your available time working on these tasks. Because of this, it is generally not possible to estimate how many hours and minutes of your time the task will require. If the project lasts one month, you might spend 10 hours during that time period reading email - but if the project lasts two months, you'll spend 20 hours. Because of this, traditional PSP earned value techniques tell you not to include these tasks on your task list at all.

The Process Dashboard includes an innovative feature that makes it easy to include these "level of effort" tasks on your task list. Add the task to your task list as usual, and in the "Planned Time" column, enter a percentage. For example, if you think you'll spend 5% of your time reading email, you can add a task to your task list called "reading email," and enter "5%" in the planned time column. If you indicate that a particular task is a level of effort task, all of its subtasks will be considered level of effort tasks as well.

"Level of effort" tasks in your task list will display differently from regular tasks. For example, the actual time for these tasks will be displayed as a percentage (so you can quickly learn how much time you really spend in meetings!). Level of effort tasks do not earn any value, since it doesn't make sense to mark them "complete." For the same reason, these tasks will not contain plan/actual completion dates or percent complete/spent values.

2.3.4.3. Step 3: Estimate calendar time

To generate a schedule, the dashboard needs to know how much time you plan to spend working on these tasks, and when you plan to spend it. This information is displayed in the bottom portion of the window. Each row in the table represents a time period. These time periods are consecutive; each time period begins when the previous time period ends. The row for the current time period is displayed with a bold font.

Think about how much time you have available to work on the tasks listed in your task list. Describe a time period by entering the dates it will start and stop, and in the "PT" (Planned Time) column enter the number of hours you think you can spend during that time period.

Most of the time people have fairly predictable schedules - for example, you might say "I'm going to spend 20 hours a week on this until it gets done." Since this is the most common situation, the schedule will, by default, grow automatically to meet the demand. You don't have to manually add rows to your schedule until there are enough hours to cover the tasks - instead, the schedule template will automatically duplicate the final row in the table until there are enough hours. You can easily see where the automatic portion of the schedule starts because the automatic rows are displayed with a medium gray font. Thus, the black rows in the schedule template are rows that you have manually created/edited, and the gray rows are the ones which have been automatically added to meet the time requirements.

You can disable this automatic schedule expansion by entering the word END in the planned time column for a particular row. This tells the dashboard that you plan to stop work on a particular date, whether the tasks are completed or not. The dashboard will take this end date into account for its calculations; if the schedule no longer has enough planned hours to finish all of the work, some tasks may be assigned the planned completion date of "never".

As in the task list, editable cells have a yellow background. Since time periods are contiguous, editing the "To" value on one row will cause the "From" value on the following row to change accordingly. Similarly, editing the "From" value on one row will cause the "To" value on the previous row to change. If you make changes to the last black row (which is used as a template and copied to make all the subsequent gray rows), all of the gray rows will be regenerated accordingly. If you edit a value in one of the gray rows, it (and all of the rows before it) will become "real", and the row in question will become the new "template row" upon which subsequent gray rows will be based.

If you need to extend the schedule past its optimal completion date, click the Add Row button to create a new row at the bottom of your schedule. The Insert Row button will split the currently selected time period into two separate rows, while the Delete Row will merge the currently selected time period with the one that follows it. Note that it isn't possible to delete an automatically generated row. If you want to to force your schedule to end early, you should do so by entering END in the planned time column for the final time period, as described above.

If you have any "level of effort" tasks in your task list, you'll notice that there are two planned time columns - one for total planned time, and one for planned "direct" time. Once you enter how much total time you plan to spend in a period, it will automatically subtract out time for the level of effort tasks, and display the remaining time in the "PDT" column. As your schedule progresses, you'll also be able to see how much time you're spending on these "indirect" tasks by looking in the "%I" column.

Iterative Planning

Many teams use an iterative approach to develop software. To create a schedule for the second or subsequent iteration of your project, you can take these steps:

  1. Identify the start date of the current iteration, and enter it in the "From" column on the first schedule line.
  2. In the Task & Schedule window, choose "Tools  Schedule Options..."
  3. Select the appropriate option to "rezero" the charts and calculations concurrent with the start date of your schedule.
These changes will have the following effect on your EV schedule:

2.3.4.4. Step 4: Track your progress

With the list of tasks and the calendar of available time in place, the dashboard will calculate planned completion dates for each task. As you work, you should:

While your project is in progress, you can click on the "Chart" button for access to earned value charts and numerical analyses:

If you prefer, you can view this information in HTML, and even export it Excel, by clicking the Report button.

Sometimes, you may be interested in seeing these charts and statistics for a portion of your task list. The "Filtered Chart" button makes this possible. Here are some examples of its use:

2.3.5. Earned Value Date Calculations

Earned value is a powerful technique for planning and tracking your work. To get the most value out of the earned value tools in the dashboard, it is helpful to understand how the calculations are performed. The paragraphs below shed light on how various dates are calculated.

2.3.5.1. Plan Date

When you create a Task & Schedule plan to describe your personal work, the dashboard will automatically calculate the date when each task is planned to complete. This is a very simple calculation, and is specified in the PSP book by Watts Humphrey.

Specifically, the Process Dashboard begins by making a list of the "leaf" nodes in your task list. (A "leaf" node is a task that does not have any children underneath.) The dashboard looks up the amount of time that you have planned for each task. Then, it uses the flat view of your task list to determine the approximate order that you plan to perform the work. The resulting list might look something like this:

Task NamePlanned Time
Task A1
Task B5
Task C3
Task D8
Task E4
Task F7
Task G2
Task H5

Next, the dashboard will calculate a running total of the numbers in the Planned Time column:

Task NamePlanned TimeCumulative Planned Time
Task A11
Task B56
Task C39
Task D817
Task E421
Task F728
Task G230
Task H535

In addition, your task and schedule plan will include a calendar of time that you plan to spend on the tasks in this task list. That calendar might look something like this:

Calendar DatePlanned Time
Week 16
Week 21
Week 36
Week 46
Week 50
Week 66
Week 76

Just as before, the dashboard will calculate a running total of the numbers in the Planned Time column of your schedule. If the schedule does not contain enough total hours to cover the tasks in your plan, the final row of the schedule will be repeated until enough hours are available:

Calendar DatePlanned TimeCumulative Planned Time
Week 166
Week 217
Week 3613
Week 4619
Week 5019
Week 6625
Week 7631
Week 8637

Finally, the dashboard will cross-reference the numbers in these two "Cumulative Planned Time" columns. For example, if you were to work on the tasks in the exact order that they appear in the task list, you would finish Task A and Task B after completing 6 hours of work. If you spend exactly as much time per week as you plan to, you will finish 6 hours of work during Week 1. So Task A and Task B would be completed on Week 1. Task C would be completed when you reach the 9 hour point, and that would occur sometime in the middle of Week 3; so Task C would have a planned completion date of Week 3. If we were to finish these cross-references, we would obtain the following planned dates for each task:

Task NamePlanned TimeCumulative Planned TimePlanned Date
Task A11Week 1
Task B56Week 1
Task C39Week 3
Task D817Week 4
Task E421Week 6
Task F728Week 7
Task G230Week 7
Task H535Week 8

Once these values have been calculated for the "leaf" tasks in your plan, the dashboard then takes a look at the other nodes in your hierarchically organized task list. Each parent node is planned to complete when its last child finishes. (The same technique is used to calculate the team rollup: each node in the team rollup will be planned to finish on the date when the last team member plans to finish that item.)

So that explains how the values in the "Plan Date" column are calculated. From this explanation, you can make the following important observations:

2.3.5.2. Replan Date

As discussed above, the Plan Date column provides an idealized projection for when each task could be completed. But of course, work rarely goes exactly according to plan. So the Replan Date column produces an improved projection that takes into account the amount of time your schedule has slipped.

Specifically, the dashboard will look at your original list of tasks, and will estimate how much planned work is still remaining. To do this, it will make a temporary "working" copy of the original task list. If any tasks have already been marked complete, those completed tasks will be removed from the "working" copy. And if you have started logging time to other tasks in your plan, the actual time you've spent so far will be subtracted from the originally planned time, to calculate the amount of time that is remaining for each task:

Task NamePlanned TimeActual Time Completed?Planned Time Remaining
Task A12Y
Task B57Y
Task C33
Task D835
Task E413
Task F77
Task G22
Task H55

Similarly, the dashboard will take a look at your original calendar of available time, and will determine how much planned time is still remaining. Just as before, this is accomplished by making a temporary "working" copy of the original schedule. Any calendar periods that have already passed are removed from the working copy. For the calendar period that is currently in progress, the planned time will be prorated based on the percentage of real time that has already elapsed. The table below shows an example of what the "working" calendar might look like if we are halfway through Week 4 of the original schedule:

Calendar DatePlanned TimeIn the Past?Planned Time Remaining
Week 16Y
Week 21Y
Week 36Y
Week 4650%3
Week 500
Week 666
Week 766
Week 866

After making a "working" list of the remaining tasks, and a "working" list of the time planned for future calendar periods, the dashboard now takes these two "working" lists and repeats the calculation that was originally performed to compute planned dates.

Based on this explanation, the following observations about "Replan Date" are worth noting:

2.3.5.3. Forecast Date

As discussed above, the Replan Date column observes that your schedule has slipped somewhat, then calculates the dates each task might complete based on an assumption that the remaining work will proceed exactly according to plan. However, if your original plan contained an estimating bias, that assumption will be incorrect. So the Forecast column takes additional steps to adjust for estimating bias.

First, it looks at all of the tasks you have completed so far, and compares the total planned time for those tasks to the total actual time that was spent. It uses this ratio to compute your estimating bias for the tasks in this task list. Then, it assumes that the remaining tasks in your plan will also have this same bias.

For example, in the table shown below, Task A and Task B have been marked complete. Those two tasks had a combined planned time of 6 hours (1 + 5), and a combined actual time of 9 hours (2 + 7). 9 divided by 6 is 1.5, indicating that tasks are taking 50% longer than expected on average. So the dashboard would multiply all of the original planned times in this "working" task list by 1.5:

Task NamePlanned TimeAdjusted Plan Time Actual TimeCompleted?Planned Time Remaining
Task A12Y
Task B57Y
Task C34.54.5
Task D81239
Task E4615
Task F710.510.5
Task G233
Task H57.57.5

Similarly, the dashboard would examine the portion of the schedule that is in the past. It would add up the total planned time and the total actual time for those past periods, and compute the ratio between these totals. That ratio would indicate whether you over- or underestimated the amount of time you would be able to spend each week. Then, it would make a "working" copy of the schedule, and adjust the planned times for all of the future periods by that ratio.

After having made these corrections to adjust for estimating bias in the task list and the schedule, the calculation would proceed in the same manner as the Replan calculation described above.

Based on this explanation, the following observations about "Forecast Date" are worth noting:

2.3.5.4. Optimized Forecast Date

The discussions above describe how dates are calculated in the earned value plan for a single individual. Then, the dashboard rolls these dates up to the team level by identifying the date when all team members will finish. As a result, when you see the green "Forecast" line on a team earned value chart, it is depicting the date when the last team member is projected to finish.

Of course, a high-maturity team will monitor the forecast dates for each team member to see whether there is a large discrepancy between the dates when the first and last team members will finish. When a large discrepancy is present, the workload is said to be unbalanced. In that scenario, it is helpful to identify the date when the team could finish if the workload were optimally rebalanced.

The dashboard calculates this Optimized Forecast Date in the following way:

This is a very sophisticated calculation. In particular, it is performing independent bias adjustments for each individual team member, based on the actual task and schedule data they have collected so far. And it is taking into account variations in staffing levels - for example, the dates when individual team members will be out of the office, and dates when particular individuals will leave the team project.

The Optimized Forecast Date is displayed on the earned value charts as an orange line. When the orange line and the green line are far apart, this is a warning sign that the workload is unbalanced.

2.3.6. Earned Value Charts

When you track your work using the Task & Schedule tool, the Process Dashboard can analyze your data and produce many helpful charts to help you track your progress.

When you have the Task & Schedule window open, you can view these charts by clicking the Charts button. In addition, you can view these charts by clicking the "More Charts" hyperlink on the earned value report.

2.3.6.1. Cumulative Direct Time

This chart shows whether you have been able to devote as much time to your work as you originally expected.

The horizontal axis depicts the passage of time. The lines on the chart convey various measures of direct time:

Interpretation

You can compare the Plan and Actual lines to determine whether you are devoting as much time to the work as you originally expected. If the Actual line is below the Plan line, you are not getting in enough hours; this could potentially cause you to fall behind schedule. If the Actual line is above the Plan line, you are getting in more hours than you planned.

Remember that this chart only displays the time that you have logged to the tasks in this task list. It does not display all of the time you spend in the office. Accordingly, if your actual time is too low, you may be able to remedy the problem by eliminating workplace distractions and finding ways to devote more of your time to these tasks.

2.3.6.2. Cumulative Earned Value

This chart displays your planned and actual progress at a glance.

The horizontal axis depicts the passage of time, and the vertical axis displays percent complete. The lines on the chart convey various measures of progress:

Interpretation

The simplest and most useful way to use this chart, is to compare the Actual line to the Plan. If the Actual line is above the plan line, you are ahead of schedule. If it is below the plan line, you are behind schedule.

When you are behind schedule, it could be due to the fact that you are unable to spend as many direct hours as you planned. If so, the Cumulative Direct Time chart will make this problem clear. Otherwise, you could be behind because tasks are taking longer than expected. The Earned Value vs. Cost chart will highlight that problem.

Next, the Replan and Forecast lines can be helpful tools for strategic planning. But be wary about using the Forecast line during the first few weeks of your schedule. When limited actual data is available, the forecast date may be unstable, changing dramatically each time a task is marked complete. During those initial weeks, it is better to watch the Replan line. Once you have collected a few weeks' worth of data, the Forecast line will be much more useful. If the forecast line is consistently predicting a date that will not allow you to meet your commitments, you may need to escalate the issue.

On a team rollup, lines will be drawn for the "Forecast" and the "Optimized Forecast." The optimized line shows the date work might complete if the workload is rebalanced perfectly. In contrast, the Forecast line will be displaying the date when the last person is projected to finish, assuming that no tasks are reassigned. When the Optimized line and the Forecast line are far apart, this is an indication that the team workload is unbalanced, and tasks may need to be reassigned.

A forecast line cannot be drawn until you have logged some time against the schedule and marked at least one task complete. When you are looking at a team rollup, the forecast is computed by finding the date when the last team member will finish. If the schedule for any team member does not have a forecast, then no forecast can be computed for the team either. So if your team rollup doesn't have a forecast line, check to see whether some of your team members are still 0% complete. The easiest way to do this is to open the Task & Schedule window for the team schedule.

Normally, the Plan line will extend to reach 100%. However, if you have set an "end date" for your schedule, and there is not enough time in your plan to finish all of the work, the Plan line will not reach 100%. In this case, the dashboard's forecast calculation may also decide that the work will never complete, and no forecast line will be drawn on the chart. In these cases, you may need to escalate the issue.

When a Baseline is present, the Baseline line usually will not end at the 100% mark. For example, if the planned cost of your project has grown since the baseline was saved, the planned line will reach higher than the baseline. Thus, you can compare the Baseline to the Plan to visualize Baseline Growth.

2.3.6.3. Earned Value vs. Cost

This chart displays planned and actual progress and cost at a glance.

The horizontal axis depicts the passage of time. The lines on the chart convey various measures of progress and cost:

Interpretation

Comparing the red and blue lines will tell you whether you are ahead or behind schedule. This may seem obvious, because these two lines display the exact same data as the Plan and Actual lines on the Cumulative Earned Value chart (just with a different vertical scale).

Comparing the blue and green lines will tell you whether tasks are taking more or less time than expected. If the green line is above the blue line, tasks are taking more time than planned. If the green line is below the blue line, tasks are taking less time than planned.

You can compare the red line to the green line to get a rough idea of whether you are devoting as much time to the project as planned. However, this comparison will only be an approximation, because the lines on this chart do not include data from incomplete tasks. To accurately compare planned and actual time spent, view the Cumulative Direct Time chart.

This chart may be very familiar to individuals that have experience with traditional earned value management systems. The red "Plan Value" line corresponds to BCWS (Budgeted Cost for Work Scheduled). The blue "Actual Value" line corresponds to BCWP (Budgeted Cost for Work Performed). And the green "Actual Cost" line corresponds to ACWP (Actual Cost for Work Performed).

2.3.7. Tracking Task Dependencies

Creating a schedule with the Task and Schedule tool, and tracking your progress with earned value, is an excellent way to stay on track and deliver your work on time. But when you are working as part of a team, it is also important to coordinate with your team members. This is especially true if your team member needs to use something that you are producing (or vice versa). To facilitate this type of coordination, the dashboard will allow you to define and track task dependencies. Note: if you are not working as a member of a team, you probably don't need to declare task dependencies.

Task dependencies are a way of stating, "this task cannot start until those tasks are finished." You can define dependencies between tasks that appear in earned value schedules. Once defined, the dashboard will help you to track the status of these dependencies, as described below. However, the presence of dependencies does not currently alter the earned value calculations in any way. In particular, the dashboard does not use these dependencies to perform any sort of critical path analysis. If you use "Flat View" to specify task order, the dashboard does not prevent you from reordering tasks before their predecessors. These capabilities may be added in the future. But at the current time, task dependencies are simply a way of showing you the information you need in order to coordinate with your teammates more effectively.

There are two different ways you can define task dependencies:

Most teams will use the first approach almost exclusively.

Once you've defined a task dependency, the dashboard will display icons to indicate the presence and status of dependent tasks. If a task has a dependency, one of the following icons will be displayed:

??? This depends on at least one other task, but status information for that task is not available.
 
This depends on at least one other task that still has not been completed.
 
This depends on at least one other task that still has not been completed - and unfortunately, it does not look like the dependent task(s) will be ready as soon as you need them to be.*
 
All of the dependencies for this task have been completed.
 
Other people are waiting for you to complete this task, and/or collaborating with you on the task itself.
 
Other people are waiting for you to complete this task - and unfortunately, it does not look like you will complete this task in time to meet their needs.*

These icons are displayed in the "Dep" column of the task list when it appears in the Task and Schedule window, the earned value report, or the earned value weekly view. In addition, the icon will be displayed on the main dashboard window when you select a task that has a related dependency:

You can place your mouse over these icons for detailed status information. (When you see a dependency icon in your web browser, you'll need to click as well.) The detailed status will show you all the dependent tasks (if there is more than one), the completion status of each, the names of the individuals assigned to the task, the projected** completion date, and the task's percentage complete.

2.3.7.1. Misordered Dependencies

As described above, task dependencies are a way of stating, "this task cannot start until those tasks are finished." Accordingly, when task dependencies are present, it becomes necessary to work on tasks in a particular order.

However, the dashboard does not perform any critical path analysis on your task dependencies, and it does not attempt to compute the optimal order in which tasks should be performed. Thus, you must collaborate with your teammates to determine the best task order.

Once you decide which tasks you will be working on first, second, etc, you should use the flat view of your task list to record this order in the dashboard. The dashboard will then use this order to compute projected completion dates for each task.

Once all team members have performed this step, the dashboard will compare the projected** task dates to see if any dependent tasks have been placed out of order. For example, imagine the following scenario:

Obviously, the tasks are misordered! In this case, Person A would see a yellow warning sign next to Task A, with a message "Other individuals need this task earlier than it is projected to finish." Person B would see a red warning sign next to Task B, with a message "This dependent task is not projected to finish in time."

When you see these warning icons, it is a sign that you need to coordinate with your team members to resolve the problem! It is possible that the other individual just hasn't bothered to record the task order in their flat view yet. Or, it could be an indication of a serious scheduling problem. Either way, a conversation with your team member is in order. If your team uses task dependencies, it is best for each team member to use flat view faithfully so the dashboard can provide the most useful information for team collaboration.

2.3.7.2. Dependency Dates

By default, the dashboard uses the calculated "Replan" date as the "Projected" date for dependency tracking purposes. This means:

The "Replan" date is a good choice for dependency tracking purposes because it takes actual data into account, but is not typically as volatile as the forecast date. If you prefer to use "Plan" or "Forecast" dates for dependency tracking purposes instead, specify a value for the ev.dependencies.compareDates setting in the preferences editor.

2.3.8. Prediction Ranges in the Task & Schedule Tool

The task and schedule tool has always been capable of calculating metrics that help you determine whether your project is on cost and under budget. The three metrics that are the most useful for this purpose are:

In general, these metrics are calculated using standard earned value formulas that can be found in project management textbooks. For more details, see the help topic on earned value date calculations.

In addition, the dashboard also contains a powerful, advanced feature: it can calculate prediction ranges for these forecast values.

The forecast ranges in the Process Dashboard are prediction intervals that approximate 70% probability. But it would be a mistake to interpret these ranges as a 70% prediction of the date your project will finish. A better interpretation is:

Your plan was not perfect; some of the estimates were incorrect. If the list of remaining tasks is complete, and future tasks show the same average estimation error, the project could possibly complete on XXXX. However, that average calculation is just a rough approximation, because many completed tasks were higher and lower than the average. If you had worked on tasks in a slightly different order, it is possible that a different average would have occurred, resulting in a very different forecast. After analyzing the variation in your estimating errors, it seems that the forecast line could have just as easily (with 70% probability) fallen between YYYY and ZZZZ. If this range is wide, you should take the current forecast with a grain of salt.

Forecast ranges are an innovation developed by the Process Dashboard team. Since these calculations are new and innovative, the formulas and algorithms are not widely known. Discriminating users such as yourself will want to understand how these values are calculated before trusting/accepting them, so the algorithms are described below.

Some of the algorithms used by the dashboard to calculate earned value ranges require a non-statistical approximation to be made as part of the calculations. This approximation may slightly increase the percentage error of the calculated range. In general, the variance introduced by this approximation is much smaller than the variances that are present in a typical software engineering project, so the approximation is mathematically acceptable. Also, the approximation will cause the dashboard to err on the side of producing more conservative ("wider") forecast ranges. But the bottom line is that you should not treat the calculated ranges as being "statistically valid;" instead, you should view them as being "engineering approximations."

And as always, any forecast or prediction based on historical data should only be trusted if the future work is similar to the completed work. If you have reason to believe that the estimates made for future tasks are fundamentally different than the estimates made for tasks that have been completed, you should use the resulting forecasts with extreme caution, if at all.

Forecast Cost Range

Traditional earned value calculations generate forecast total cost based on the assumption that the cost performance index (CPI) for completed tasks is a predictor of the CPI for the remaining tasks. To calculate the forecast cost range for a schedule, the dashboard simply analyzes how the completed tasks have varied around the current CPI, and uses that information to estimate the potential variability of the CPI for the remaining tasks.

Specifically, the dashboard examines the relationship between "Planned Direct Time" and "Actual Direct Time" for all of the tasks in your task list that have been completed. A scatterplot of these points is created, and a line is fit to these points. The sum-squared variance of the points from the line is then used to calculate a prediction interval based upon a students-T distribution with n-2 degrees of freedom (where n is the number of completed tasks). Finally, the double-sided interval with probability 70% is used to calculate upper and lower ranges for CPI. This CPI range is applied to the original estimates for the tasks in the schedule that have not yet been completed, and the actual times for completed tasks are added back in to generate the upper and lower boundaries of a range that approximates 70% probability for total cost.

To generate the forecast cost range for a rolled-up/team schedule, the dashboard uses a monte-carlo simulation with several hundred trials, and sums up the forecast costs of each subschedule for each trial.

Forecast Completion Date Range

To calculate a accurate range estimates for the forecast completion date, it is necessary to consider variations in both cost and schedule. Possible variations in cost are adequately described by the probability density function of the cost range calculated above. To characterize schedule variations, the dashboard analyzes the completed time periods in the schedule. For each period, the planned direct time is divided by the actual direct time to generate "direct time performance index" (DTPI), a metric which is a mathematically related to the "time estimating error" for the period. The dashboard then calculates a weighted log-normal mean and standard deviation of these ratios. A confidence interval for this log-normal distribution is calculated using Angus's parametric bootstrap method, providing a probability density function for DTPI.

With these two probability density functions at hand, a monte-carlo simulation is once again used to characterize the range of the forecast completion date. In each trial, a total cost is randomly generated from the total cost probability density function, and a DTPI is randomly generated from the DTPI probability density function. A hypothetical earned value schedule is created by copying the existing earned value schedule. The planned direct times for each historical period in this trial schedule are set to the actual direct time spent in the period, and the planned direct times for future periods are divided by the random sample for DTPI. Normal earned value extrapolation techniques are then used to estimate when this randomized hypothetical schedule would reach the given random sample for total cost. The resulting date is stored as a single sample for random forecast completion date; two thousand trials are conducted to characterize the density function for forecast completion date, and this density function is used to generate the upper and lower boundaries of a range that approximates 70% probability.

To generate forecast completion date ranges for rolled-up/team schedules, monte-carlo simulations are used once again. In each trial, each subschedule is randomly seeded using the approach described above, yielding a random forecast completion date for each subschedule. In the dashboard, "Forecast Completion Date" is the date the schedule is projected to complete if no rebalancing is performed, so the chronologically latest of these dates in a given trial becomes a single random sample for forecast team completion date. "Optimized Forecast Completion Date" instead takes each of the randomized hypothetical subschedules and rolls them together to create a single team schedule. This randomized hypothetical team schedule is then extrapolated to determine when the random total forecast cost would be reached; the resulting extrapolation becomes a single random sample for optimized forecast team completion date. Several hundred trials are performed to characterize the probability distribution functions for "Forecast Completion Date" and "Optimized Forecast Completion Date," and these density functions are used to generate the upper and lower boundaries of ranges that approximate 70% probability.

2.3.8.1. When are Prediction Ranges Calculated?

By default, the dashboard can only calculate prediction ranges if:

When calculating a rolled-up team schedule, each subschedule will need to meet these criteria before prediction ranges can be calculated for the team schedule.

After calculating a prediction range, the dashboard applies several heuristic tests to determine its validity. If any of these tests indicates that the prediction range is not viable, it will be discarded and no range will be displayed on the chart.

Therefore, if ranges are not displayed for your schedule, it does not indicate an error - it just indicates that the data in your schedule can not be used to calculate a meaningful prediction range.

In this case, you can choose to calculate ranges anyway based on historical dashboard data. Choose Tools → Schedule Options, then put a check mark next to the option for historical data. (You can edit this option at the personal level, the team level, or both.) The dashboard will use the historical data you choose to calculate forecast ranges for cost and schedule. These calculations can be performed even before you begin work on the tasks in this schedule! When this schedule contains sufficient data, the calculations will switch to prefer the current data over the historical data.

2.4. Using the Size Estimating Template

The Size Estimating Template is used to help make estimates of how big a new project will be or how long it will take to create the project (size and time estimation). It is patterned after the Size Estimating Template from Watts Humphrey's book A Self-Improvement Process for Software Engineers.

(Note: Watts Humphrey released an earlier book called A Discipline for Software Engineering which used a very different layout for this form. If you are using the old version of the PSP scripts, you will see the old form layout. The paragraphs below describe the new version of the form.)

Right near the top of the form is a link to bring up the Size Estimating Template instructions form. The dashboard will bring up the instructions in a separate web browser so that the two can be placed side by side on your screen.

Also, there are several links on the form that will add rows to the form. If you need more room than the form provides, just click on the appropriate link and it will expand for you.

The header section contains a field for your name. If the field is empty, go ahead and enter your name; it will show up on the other forms as well.

The Size Estimating Template can be used to estimate many different types of work. If you are using a PSP task, the dashboard will assume that you are producing software source code, and will automatically enter "LOC" in the "Size Measure" field. If you are using a defined team workflow, the size measure from that process will be entered into this field instead. If you are using a generic project, you must enter the appropriate size metric in this field.

2.4.1. Base Parts

The Base Parts section is where you enter the information about any preexisting components that may need modifications during the course of your project. If you have several of these components, you can use a separate line for each.

The form has blanks for both Estimated and Actual sets of data. During the planning phase of the project, you should enter data in the Estimated columns. After the project is finished and you are in the postmortem phase, you can enter data in the Actual columns.

The form asks for the base size and the size of deleted, added, and modified elements. In the BASE column, enter the size of the preexisting component. (For example if you are creating a modification to an already existing computer program, the LOC from the existing program count as base LOC.)

In the next three columns, you estimate the size of deleted, modified, and added elements. (Continuing the software example, you would enter the number of existing LOC you think you might delete, the number of existing LOC you think you might modify, and some number of new LOC you think you might add.) A histogram appears to show you how these numbers relate to the size of the preexisting, base component. You can drag sliders to estimate an approximate percentage.

2.4.2. Parts Additions

Parts Additions is the section where you will record the bulk of new development in most of your projects. This section allows you to estimate the new components you believe you will create during the course of this project. You can choose the level of granularity that makes the most sense for your estimating needs. For software development, these could be new objects, new files, new functions, new subroutines, new methods, etc. For document creation, these could be new documents, new document sections, new paragraphs, etc. Each object should be something you can visualize during the planning process, and whose size can be estimated using the Size Metric displayed in the field at the top of the form.

Blanks are provided to enter the description of each added part, the type of part that is being added, the number of items that are going to be added of this type, the relative size of these items, and the numeric estimate/measure of the size of each added part.

The type of each part is selected from a table of standard object categories. When you first begin using this form, you may not have such a table. If you or your team members create one or more tables, you can enter them by clicking on the hyperlink at the top of the column. (If you are estimating software development in LOC, you will have the benefit of a default set of categories: namely Calculation, Data, I/O, Logic, Setup or Text. New PSP users should usually stick to the preset types; as you gain experience, you may use your PSP training to define your own proxy categories.) Select the category that best fits the type of each added part.

The number of items can be useful when you are estimating a high-level object. For example, if you are estimating the size of an object or class in an object-oriented language, you could use this field to record the number of methods that will be present in an object you plan to create. If you are using some custom proxy type category, this field could capture the count of proxy elements you plan to produce. If these scenarios don't apply, you can leave this field blank or enter the number "1".

The relative size pull down allows you to choose from subjective size categories such as Very Small, Small, Medium, Large, and Very Large. To produce the most accurate estimates, you should aim for a level of planning granularity that allows most of your planned parts to be of Medium size, with a balance of smaller and larger parts.

After you enter values in the previous three columns, the data from the proxy category table will be used to produce an estimated size. If the generated number seems too big or too small, choose a different relative size. If you did not have a table of object categories to use, you should make your best estimate of the size and enter it into this field.

If you are writing software, consider whether each new part is sufficiently general purpose that it can be checked into a reuse library. Generally this means more than just code that can probably be reused in the general sense. It usually has to do with proper packaging of the code as well: Are proper interfaces defined? Is the code sufficiently well documented? Etc. If you intend to design the code for reuse, put a check mark in the NR (New Reusable) column.

2.4.3. Reused Parts

Reused parts are typically only used during software development; they are objects that are brought into the program from a reuse library and used verbatim. New PSP users can sometimes be confused by the difference between a reused part and a base part. The main rule is that you must not count the same component as both base and reused - otherwise the size accounting formulas will not work out correctly. In addition, the form will not let you enter added/deleted/modified size for reused parts, so you should only put items in the reused parts section if they can be reused with no changes.

2.4.4. Performing the size/time estimation

Once you have thought through all the changes that are going to be made to the software, you are ready to calculate a prediction of size and or time. The form will add up numbers from the sections above to produce an Estimated Proxy Size, which the PROBE method will use as your base estimate.

The Size Estimation Template offers a link that will allow you to choose the PROBE Wizard to help you make your estimates. If you use the PROBE Wizard, it will read your Estimated Proxy Size off the size estimating template automatically, and will save your chosen estimates back to the size estimating template automatically. For more information about using the PROBE Wizard, see the Using the PROBE Wizard help topic.

On the other hand, if you use the PROBE tool, you will need to type the Estimated Proxy Size into the Estimate field on the tool. Once you have investigated the relationships among your process data, you should manually copy your final estimates back to the size estimating template, along with the various other measures that come about as a result of the estimation (B0, B1, UPI, LPI, prediction range, r2, probe method selected). If you use PROBE method C or D, the Prediction Range field and the other numeric fields below it can be left blank. For more information about the PROBE tool provided by the dashboard, see the Using the PROBE tool help topic.

2.4.5. Entering Actual data during Postmortem

Once you reach the Postmortem phase and you have the Actual size data, you should return to this form to enter the actuals for the various measures on the form (base, deleted, modified, and added size, counts for the various objects, etc.).

Some people do not care to enter detailed actual size data on the Size Estimating Template. Those numbers shown above can safely be skipped as long as you faithfully enter summarized actual size data on the Project Plan Summary:

2.5. Using the PROBE Wizard

The PROBE process is described in the PSP book A Self-Improvement Process for Software Engineers, but it can be complicated to follow. Even when the calculations are performed for you (for example, by the PROBE Tool), there are many cross-checks you must perform to verify the validity of the estimates. For individual who do not thoroughly understand the calculations being performed, it is easy to make a mistake.

The PROBE Wizard recognizes and reduces this complexity by automating as much of the process as possible. The PROBE Wizard can be opened by clicking on the link found on the Size Estimating Template.

When the PROBE Wizard is activated, it starts with a welcoming screen that reminds you of the nature of estimating with the PROBE method.

2.5.1. PROBE Wizard Step 1

Step 1 in the PROBE method is to verify that the Estimated Proxy Size is accurate. The Wizard shows you the number you have input on the Size Estimating Template and asks you to verify that this is indeed a good estimate.

2.5.2. PROBE Wizard Step 2

Step 2 is to verify your historical data. The PROBE Wizard puts up a table of numbers that shows your estimations from previous PSP projects.

On this pane, you can exclude data points that you know to be "outliers" statistically. By clicking on the checkboxes at the end of each row, you can exclude any data point that you know does not represent your normal work processes. If you are not completely sure about the consequences of excluding outlier data, you should probably leave all of the boxes unchecked.

2.5.3. PROBE Wizard Step 3

Step 3 is to estimate the size of the new development effort. The PROBE method (as implemented by the Process Dashboard) outlines 5 ways to estimate size:

A Estimate size based on a good correlation between previous Estimated Proxy Size data and Actual Added & Modified Size data. This method is the most preferred method, but can only be used if you have sufficient data that correlates well.
B If Proxy Size estimates do not correlate well enough to use method A, PROBE suggests estimating size based on a good correlation between previous Planned Added & Modified Size data and Actual Added & Modified Size data. Again, this method can only be used if you have sufficient data that correlates well.
C1 If neither of the data pairings for methods A and B correlate, but you do have Estimated Proxy Size data, you can use that data to do the estimate. This method requires at least some Estimated Proxy Size data be recorded.
C2 If you do not have any Estimated Proxy Size, but you do have Planned Added & Modified Size data, you can use that data to do the estimate. This method requires at least some Planned Added & Modified Size data be recorded.
D If you have no historical data, method D just indicates that you should use your best engineering judgement to make the estimate.

The Wizard will present all of these possibilities to you in decreasing order of preference based on how well each method seems to track (or correlates) with your historical data. You just have to choose the method you would like to follow by picking from a set of radio boxes.

The Wizard also has links to explanatory help windows that will pop up and give you more detail about the different types of calculations that it is doing to generate the different estimates. These links are shown in blue text.

2.5.4. PROBE Wizard Step 4

Step 4 is very similar to step 3, except the estimation is for time instead of size. The same basic set of methods is available, and the Wizard will offer each data estimate in decreasing order of preference.

The PROBE method (as implemented by the Process Dashboard) outlines 6 ways to estimate time:

A Estimate time based on a good correlation between previous Estimated Proxy Size data and Actual time data. This method is the most preferred method, but can only be used if you have sufficient data that correlates well.
B If Proxy Size estimates do not correlate well enough to use method A, PROBE suggests estimating time based on a good correlation between previous Planned Added & Modified Size data and Actual time data. Again, this method can only be used if you have sufficient data that correlates well.
C1 If neither of the data pairings for methods A and B correlate, but you do have Estimated Proxy Size data, you can use that data to do the estimate. This method requires at least some Estimated Proxy Size data be recorded.
C2 If you do not have any Estimated Proxy Size, but you do have Planned Added & Modified Size data, you can use that data to do the estimate. This method requires at least some Planned Added & Modified Size data be recorded.
C3 If you only have Actual Time and Size data, you can use that data to do the estimate.
D If you have no historical data, method D just indicates that you should use your best engineering judgement to make the estimate.

Unlike other wizards you may have used in the past, the PROBE Wizard updates the data in the dashboard whenever you click the Continue button to move onward (that is why there is no Cancel button on the Wizard). If you make a mistake while using the Wizard, you'll have to use the Back button to go back and fix it, or make the change manually on the Size Estimating Template. Of course, you can always just run the PROBE Wizard a second time.

2.5.5. PROBE Wizard Step 5

At this point, you are finished making your estimates. Step 5 encourages you to check the estimates to make sure that they make sense.

Clicking Finish dismisses the PROBE Wizard.

2.5.6. A sanity check

After you use various PROBE methods to independently generate your size estimate and your time estimate, it is always a good idea to "sanity check" those estimates to ensure that they are reasonable and in synch with each other. The final screen of the PROBE Wizard helps with this task. It uses your size and time estimates to calculate your planned productivity, and then compares this number with your historical productivity to date. When your planned productivity is significantly different than your historical productivity, it is usually a warning flag indicating that either your size estimate or your time estimate (or possibly both) is incorrect. When this occurs, the PROBE wizard strongly encourages you to reexamine your estimates.

If you rexamine your estimates and decide not to change them, you can close the PROBE Wizard by clicking on the second button.

2.6. Using the PROBE Tool

When following PSP's PROBE process (as defined in the book A Self-Improvement Process for Software Engineers), most people will want to use the PROBE Wizard. It thoroughly automates the PROBE process and helps you to avoid common mistakes.

However, the PROBE Wizard is specifically designed for the correlations described in the PSP process scripts. If you thoroughly understand the linear regression calculations, the PROBE tool can offer more flexibility. The PROBE Tool will allow you to explore the correlations between any pair of metrics, not just the pairs described in the PROBE process. The PROBE tool can be opened by selecting "Tools  PROBE" from the configuration menu.

If you wish to explore the correlations of the standard PROBE data pairs, the Method pull-down allows quick access to them. Clicking on the pull-down gives the following choices:

Choosing any of the standard PROBE methods will set the independent and dependent variables to their appropriate values. If you would like to explore correlations between any two other process metric variables, they can be chosen from the independent and dependent variable pull-downs.

Basically the PROBE tool runs a correlation test on the two sets of data chosen. It then reports the various statistical measurements on the dialog. There are two types of measurements shown on the dialog: those that show relationships between the sets of data chosen (r2, p, Variance, Standard Deviation), and those that are related to a projection based on the estimate entered (B0, B1, Range, UPI and LPI). Also there are two columns of data on the tool. The left column shows data based on a linear regression (this is for methods A and B the PROBE estimation method) and the right column shows data based on how well your data seem to predict on the average (this is for the different C methods of the PROBE estimation method).

2.6.1. Filtering your data set

The filter button allows you to restrict the data set of the correlation and projection to certain projects. It will pop up a tree view of the current projects stored and allow you to add or remove data items from the selected set.

Seleted items are marked with a graphical "X". By default the tool only shows projects in the tree (nodes). You can expand this view to include the process phases as well by choosing the "Show leaf nodes" box. This will allow you to include or reject data from among different phases of projects. The Apply button applies your filtering selection to the numbers in the PROBE dialog.

2.6.2. Measures of correlation

On a typical estimation, you will want to choose from the different combinations of correlations available to see if any of the data correlate well enough to be used for projections. The PROBE tool will make this quite simple. Just pick the two data sets you would like to correlate, and the numbers on the tool will update to show you the results. The key numbers to examine are the measure of correlation (r2) and the significance measurement (p).

2.6.2.1. The correlation measurement

As detailed by Watts Humphrey, an r2 value of over 0.5 indicates that the numbers correlate well enough to use a linear regression method. The degree of confidence as measured by the r2 variable is shown on the dialog by its color. When the value is too low to be used for predictive purposes, the r2 value will show up in red. Values that show better and better agreement are shown in different colors. The colors used are: red (very bad), yellow/orange (fair), blue (good), and black (very good).

2.6.2.2. The significance measurement

The significance measurement is an indication of how significant the correlation is. It is expressed in a percentage that represents the probability that this correlation could have happened by chance. Low numbers mean that the data is probably showing a causality and can be used to make projections. The same color scheme to show the relative "goodness" of the data is used here.

Both measures need to be taken into consideration before using a projection from a linear correlation. There are some data combinations that can make one of the measurements look good while the other is bad. For example if you have data that correlate well but the significance of that correlation is not very high, you could be looking at a random occurrence.

2.6.3. Making a projection

To make a projection, just enter an estimate in the Estimate entry. The estimate should be an estimate of the type of data that is chosen in the top pull down box marked "Correlate". For example, you should put an estimated number of New & Changed LOC in the entry if you are correlating against Estimated New & Changed LOC. The % range entry will allow you to change the confidence interval of the projection. Most PSP work is done at a 70% confidence interval, but you can set this as high or as low as you would like. Setting the confidence interval higher will give you a wider range of possible values, and setting the interval lower will narrow the range of possible values.

As you change the input parameters, the tool will relcalculate all the numbers appropriately. Some calculations may display ERROR if the data is poorly correlated, or if there are not enough historical data points to perform the calculation. The projected estimate will show up at the top of both columns (the left column showing the projection using linear regression and the right column showing the projection based on an averaging technique). It is up to you to decide which numbers are appropriate for making the projection.

2.6.4. Visualizing the data

The PROBE tool also offers a scatterplot of your process data. This view is chosen by clicking on the "Chart" button.

The plot will show a scatterplot of the data being used for the regression calculations and two lines passing through the data. A blue line shows the line as projected from B0 and B1 calculated using linear regression, and a red line shows the line as projected from the averaging calculation. Only one of these lines will be in color if you've chosen one of the standard PROBE estimating methods. In this case, the other line is shown in grey. If you choose a custom estimation method (i.e. you are comparing different sets of data than what the PROBE method calls for) both lines will show in color. Many times this visual representation of the data can provide insights that straight numbers may not.

The three columns below the plot display the actual values used for the data plotted. The first column contains the project name, and the second and third columns show the data values for the X and Y axes respectively.


3. Running the Dashboard

Both the PSP and the TSP require the collection and analysis of metrics at a very fine-grained level. Once data are collected at this level, statistical analyses of the data permit remarkable planning, tracking, prediction, and control of software products and projects.

These metrics collection and analysis processes, however, are not trivial. In any real-world project, tool support for the PSP and TSP become important considerations. Although studies have demonstrated that people can maintain their productivity when using the PSP without tool support, the "frustration factor" inherent with such an approach tries the patience of all but the most disciplined engineers, making PSP behaviors difficult to sustain.

The Process Dashboard was designed to facilitate a solution to this problem. When using the dashboard, the metrics required by the PSP can be measured quickly, easily, and accurately.

3.1. Selecting the Active Task

As you work, the dashboard maintains a concept of the currently active task. This task is displayed in the middle of the Process Dashboard toolbar. Items such as the play/pause button, the defect button, the script button and the completion checkbox always operate against this active task. The image below shows the dashboard ready to work on the Code phase of "Component A," which is part of "Release 1" in "My Project".

You can click on the name of the active task to change it. You can also click on the "overflow menu" to the left of the task name for more options. For convenience, this overflow menu provides two different "task selection styles" you can use. To move betweeen tasks in chronological order, click on the "Task Lists" option. To select tasks hierarchically (the default), click on the "All Tasks" option.

3.1.1. Selecting Tasks Hierarchically

By default, the dashboard uses the hierarchical task selection style. To better illustrate how this style works, the following example set of projects will be used.

This project hierarchy shows two top level project categories: "Project" and "Non Project". These are the two categories given as default when the dashboard is first run. Under "Project" there are four items defined: "My Project", "Web Project", "SOA Project", and "Legacy". Under "My Project", several items are defined, including "Release 1". "Release 1" has four subtasks, called "Component A" through "Component D". In this screenshot, only "Component A" has been expanded to show its phases. Phases are added into the project hierarchy as children of a project. "Component A" was created from a PSP2.1 template, and so it has all the development phases of a PSP2.1 project.

Back on the dashboard itself, if you click on the first element in the active task name, it will show all the entries in the project hierarchy that are defined at that level. In this case it shows the two default nodes "Project" and "Non Project".

Selecting the second name element shows the entries defined at that level under the selection from the first menu. In this case, the user has selected "Project" on the first menu, so the second menu shows the children of "Project" in the project hierarchy.

Clicking any task name element will display the hierarchical children of the component or task to the left. This final example shows the PSP 2.1 process phases that are defined for "Component A".

To help you keep track which tasks have marked complete, the task selector menus use a strikethrough font. (In the image above, the "Planning," "Design," and "Design Review" tasks have been marked complete.) You can mark an item complete with the completion checkbox.

If your work hierarchy is deep and complex, there may not be enough horizontal space to display the full name of the active task. In that case, the dashboard will display as much of the task as will fit. (If you would like to see more of the task name, just resize the dashboard window to be bigger.)

If you hover over a truncated name, a tool tip will tell you the full name. You can click the overflow menu to display the name elements that were dropped, and select different components at that level:

As you accumulate more projects and more tasks in your personal dashboard, the menu of choices under a particular item can potentially grow very long. To reduce clutter, the dashboard will identify projects and tasks that you completed some time ago, and move them to a submenu called "Older Completed Items." (You can configure this behavior in the Preferences Editor.)

3.1.2. Selecting Tasks Chronologically from a Task List

If you are actively working on a project, you may find that you spend most of your time working on tasks that are in a particular earned value task list. A special task selection style makes this easy. Just click on the task selection overflow menu and choose "Task Lists..." A window will ask you for the name of the task list for the project that you are working on.

Select the task list that you are working on, and click OK. (If you know you will only be working on a subset of a particular task list, you can drill down into the task list and select the portion you plan to work on.) The active task selector will now display a single menu which lists tasks in chronological order (as defined in the flat view of the earned value schedule).

If you are splitting your time between several projects, you can still use this approach to select tasks (across several projects) in roughly chronological order. Just create an EV rollup of the projects you are working on; then use this approach to navigate within that task list.

For more information on creating earned value schedules, and using the flat view of their task lists, see the Creating a schedule step by step help topic.

3.1.3. Selecting a Task Directly

Often you may have a specific task in mind that you would like to work on. Just click on the "Find Task" icon that appears to the right of the active task name. This will display a window of tasks (either from the hierarchy or from the current task list, depending on the current task selection style).

As you type in the "Find" box, the list of selections will automatically be narrowed to show tasks containing all of the letters you've typed. Capitalization is not important, and you can enter multiple filters separated by spaces. In the example above, the user has typed "leg scr". The first filter "leg" has narrowed the tree to show tasks under the "Legacy" portion of the hierarchy. The second filter "scr" has further narrowed the list to show Tasks with the letters "scr" in the name. (The end result is that "leg scr" has narrowed the list to show tasks associated with legacy software change requests.) You can collapse branches of the tree that correspond to old, inactive projects; collapsed branches will not match the search filter.

You can press the up and down arrow keys to select a specific task, and press the Enter key to change to the highlighted task. In addition, you can click directly on a task to activate it.

3.2. Using the Play/Pause Button

The play/pause button gives access to the timer that is built into the dashboard.

The dashboard timer makes it easy to measure the amount of time spent on various tasks. When you start the timer, it will automatically make appropriate entries in your time log for the currently active project/task.

When the timer is stopped, the paused icon will have a soft blue glow:

When the timer is running, the play icon will have a soft green glow:

It is not necessary to stop the timer before changing the active task. You can leave the timer in "play" mode as you move from one task to another, and it will properly finalize one entry in the time log, and open another.

When you start the timer on a new task, you will notice that the dashboard will not create an entry in the time log until you have spent a full minute there; this is by design. Navigating from one task to another may require multiple interactions with the active task selector, which necessarily implies that the "active" project/task will momentarily pass through several intermediate states before finally arriving at the desired task. You would not want the dashboard to create extraneous entries in the time log for all those intermediate tasks; therefore, the dashboard waits and creates the time log entry only after you have logged 60 seconds worth of elapsed time to an activity.

When you start the timer, it will make a short "clicking" sound to let you know it is timing you. You can leave the timer running as you move from task to task and project to project, and it will play the "timing sound" as you navigate to each new project/task. Once again, the sound is there to remind you that the dashboard is timing you; the sound will not play if the timer is not running. Therefore, as you move from one project/task to another, if you expect to hear the sound and do not (or vice versa), check the state of the timer.

When you first begin using the dashboard, it may be difficult to remember to start and stop the dashboard timer. A timing reminder feature is available to help; see the system tray icon help topic for more information.

3.2.1. The play/pause button pull-down control

The play/pause button contains a pull-down control that can be used to quickly jump to a project/task where you have recently recorded time. This provides another way of navigating to a task where you were recently working.

In this example, the individual had recently been working through the phases in a PSP2.1 project, when they were interrupted by an incoming email message. After finishing with the email message, they could select one of the entries in this pull-down list. The dashboard would activate the selected task and begin logging time there.

As this example illustrates, the items in the pull-down are not limited to the phases of the current project. Therefore, the pull-down control is very useful when you are juggling several activities. If you keep bouncing back and forth between several unrelated tasks, you can quickly jump to a recent activity and log time there by using the pull-down menu.

If you accidentally leave the timer running and begin logging time to a task that has been marked complete, a warning message will be displayed. The only purpose of this warning is to give you a heads-up in case you are logging time by accident. If you do not wish to receive these alerts, you can indicate that preference as you dismiss the dialog.

3.3. The Percent Spent Indicator

The percent spent indicator gives you continual feedback about the amount of time you have spent on the current task, and how that compares to the amount of time you planned to spend.

If you have not estimated the amount of time you plan to spend on a task, the indicator will display an hourglass. If you would like to enter an estimate for the current task, click on the hourglass.

Once you have estimated the amount of time you plan to spend on a task, the indicator will begin giving visual feedback. When you first begin working on a task, the indicator will show a full blue bar:

As you begin logging time, the indicator will slowly deplete, like the battery charge indicator on a handheld electronic device. The size of the blue bar shows you what percentage of the budgeted time you have left. In the image below, this individual has used up tho-thirds of the time they had planned. One-third of the time is still left:

When a task requires more time than you had planned, it is considered overspent. When that occurs, the bar will turn red, and will begin to grow. The more overspent you are, the larger the red bar will become. In the image below, the task has required 50% more time than originally expected:

When a task is 100% overspent (that is, it has taken twice as long as planned), the red bar will completely fill the space, and will not grow any larger.

At any time, you can hold your mouse over the indicator, and see a tooltip showing the planned time for the task, the actual time spent so far, and the percent spent calculation. (Percent Spent = Actual Time ÷ Planned Time.)

3.3.1. Editing the Time Estimate

Sometimes, your original estimate for a task was simply a "best guess." As you work on the task, you often gain additional insights and can produce a more accurate estimate of the time that will be required. In general, you can alter your estimate simply by clicking on the percent spent indicator.

Sometimes, however, the time estimate for the current task is not directly editable. The most common example might be the phases in a PSP project. Currently in the dashboard, you only have to enter the total planned time for the overall PSP project. Then, your historical data is used to spread this time across the various process phases. Since the time for an individual phase is a calculation, it is not directly editable. As a result, if you were to view the Project Plan Summary, the planned time for the phases would be displayed with a "read-only" gray background, and you would not be allowed to edit the values. Similarly, clicking on the percent spent indicator would not allow you to edit the estimated time for the phase.

In such situations, the percent spent indicator can actually play two roles. If the PSP project as a whole is taking much longer than expected, each phase will most likely be overspent as well, and the red bar will bring this to your attention. But even if you are under your estimate on the project as a whole, certain phases may be taking more or less time than expected, and this information can be useful. For example, a low quality product might cause you to find many defects in testing, pushing your test time higher than expected. In this case, the red bar could be an indication that the current phase is not going as planned. On the flip side, if you planned to perform a very thorough code review, a nearly full blue bar may be telling you that you haven't spent enough time reviewing yet.

3.4. Accessing Project Reports, Forms, Scripts and Tools

When you are using a high-maturity process to do work, that process will commonly provide scripts, forms, reports, and other tools to assist you. To see these items, click the script button on the dashboard.

Clicking the script button will open a menu showing the scripts, forms, reports, and other materials that have been provided by the process for the currently active task.

Choosing an item from this menu will open the named script or form in your web browser.

This example shows a project calling up the Planning script for PSP2.1.

Clicking the script button normally opens the menu of scripts and forms. If you prefer, you can reconfigure the script button so that it automatically opens the default script or form. Just check the appropriate box in the Preferences Tool. After enabling that option, you can use the drop-down button to open the full menu.

You can also select the "More..." option at the bottom of the menu to bring up a script browser. The script browser shows your hierarchy on the left; when you highlight a node in the hierarchy, it displays the available scripts and forms on the right. You can open one of those scripts or forms by double-clicking on it.

The script browser makes it easy to pull up forms for historical projects without needing to change the active task.

3.4.1. Custom Hyperlinks

In addition to the scripts and forms that come with the dashboard, you may have other web pages that are related to the task at hand. For example:

You can easily attach URLs such as these to the projects and tasks in the dashboard. Just select the "Add New Link..." option near the bottom of the menu. Then enter the name and target of the link, and decide which project, component, or task the link is associated with:

Your custom link will appear in the menu whenever you are working on the selected project, component, or task:

You can alter or delete custom links by clicking the "edit" icon that appears on the right edge of the menu item.

When you create custom links, they are recorded in the note for the selected component or task. If that component/task is part of a team project, the link will be shared with your team members too. For more information on this feature, see the note editor help topic.

3.4.2. The timing icons

Many of the built-in process scripts contain little stopwatch icons on them. These icons provide another way to navigate and time a process phase. When you click on one of these icons, the current phase being measured will change to the phase indicated by the icon and the timer will start measuring time for that phase.

3.4.3. External documents

Creating or obtaining documents is often an integral part of performing a process. The dashboard process scripts sometimes provide hyperlinks for these documents. If you click on a document hyperlink, the dashboard will:

  1. Possibly ask you for pertinent information. For example, the dashboard may need to know the name of a directory where it should store documents for this project, and it may display a form requesting that information. Once you provide this information and click "OK," the dashboard generally won't have to ask for it again.
  2. Check to see if the file already exists. If not, it may be able to create the file from a template.
  3. Open the file for editing.

3.4.4. Entering data into the forms

The various forms necessary to do your work have data entry fields which are to be used to capture the various process metrics. The forms are continually "live", which means they are always ready and waiting for input. There is no "submit" or "send" button on the forms. Just enter the data in the blanks and the dashboard will record it. Some blanks on the forms are greyed out. These data elements are computed by the dashboard and do not require data input. For more information, see the Entering data help topic.

3.5. The Process Scripts

Building upon the flexibility of the world-wide-web, the dashboard displays many scripts, forms, and reports in your web browser. See the Installation help topic for more info about which web browsers are supported and how to install them if necessary.

The connection between the dashboard and the browser is facilitated by a very small web server that is running within the dashboard. It is this web server, combined with some Java scripting, that provides all the live data communication between the dashboard and the browser. One consequence of this is that the various reports and charts that are displayed within the browser will not be available unless the dashboard is running.

3.5.1. The PSP Process Scripts

An add-on module for the Process Dashboard provides nearly all the scripts defined in the book A Self-Improvement Process for Software Engineers by Watts Humphrey.

An add-on module for the Process Dashboard is available that provides nearly all the scripts defined in the book A Self-Improvement Process for Software Engineers by Watts Humphrey. However, you have not installed that module. If you would like to use the scripts listed below, click here for installation instructions.

The PSP forms and scripts in this add-on module are designed to be as close to the "real thing" as possible (the "real thing" being the forms and tables in Watts Humphrey's book). Where the online forms and scripts deviate, the text is color coded as follows:

Many of the process forms contain links to other forms that are used at that process level, making navigation through the forms simple and intuitive. Also, many of the process scripts contain little stopwatch icons on them. These icons provide another way to navigate and time a process phase. When you click on one of these icons, the current phase being measured will change to the phase indicated by the icon and the timer will start measuring time for that phase.

For information on how to access the forms, see the Accessing process scripts help topic.

The following lists detail the forms and scripts provided by the dashboard at each PSP level. Items marked by * are "live" forms that either update themselves with process data (e.g. the project summary forms) or can be expanded as necessary to permit multiple data entry (e.g. the size estimating template or the PSP3 cycle summary form).

At PSP0: At PSP0.1: At PSP1: At PSP1.1: At PSP2: At PSP2.1: At PSP3:

3.6. Entering Process Data

There are two main ways of entering data into the Process Dashboard. The first is through various input tools and dialogs provided by the dashboard (e.g. the defect dialog, the time log editor, etc.).

The second is through various process forms. The scripts and forms are provided through an integrated web interface. See the Accessing Process Scripts help topic for more info on how to access the scripts and forms. To find out more information about the different process scripts and forms that are available, see the process scripts help topic.

3.6.1. The nature of the dashboard forms

The dashboard forms are implemented via static and sometimes dynamic HTML pages. Unlike the HTML forms you see on the internet, the forms on these HTML pages are "live" at all times, much like a spreadsheet. You can type values in the input fields and other fields will recalculate automatically, even if those fields are in different browser windows. There is no need to press any kind of "submit data" button.

After typing in a value, you must generally "leave" that input field to signal that you are finished entering information. Pressing the "Tab" key (to move to the next input field) or clicking anywhere else on the page is generally sufficient. As soon as the "input cursor" leaves the field in question, the dashboard will automatically pick up your data, recalculate related data items, and save your data for future sessions.

If you enter an invalid value for a data item (for example, typing "foo" in an input field that is expecting a number), the dashboard will reject the invalid value and restore the previous value for that input field.

The dashboard uses various visual cues to show you where data is missing or where a calculated value could not be completed. Here is a partial screen shot of a dashboard form that shows several of the ways the dashboard indicates incomplete or bad data:

When a required data value is missing, the dashboard will display "?????". This is an indication that you still need to enter a value for that data item. Therefore, you should ensure that there are no "?????" symbols in the Plan column of your project plan summary before marking the Planning phase complete. Similarly, make certain you fill in all missing values in the Actual column of your project plan summary before marking the project complete.

If the dashboard cannot recalculate a formula because the formula references a missing ("?????") or otherwise invalid data value, it will display "#VALUE!" as the result of the calculation. When you see "#VALUE!" in a dashboard form, it almost always means that there is a "?????" field somewhere that you still need to fill in.

If the dashboard recalculates a formula and encounters a divide-by-zero error, it will display "#DIV/0!" as the result of the calculation. Divide-by-zero errors are common when you first begin using the dashboard, since you will not have any historical data.

To make all this possible, the dashboard software actually contains a very small HTTP server embedded within it. This server allows communication between the HTML pages and the process data that is tracked by the dashboard. If you close the dashboard program while one of the HTML forms is open, the form will reset and display "NO CONNECTION". You can reestablish the connection simply by restarting the dashboard, then telling your browser to reload the HTML page.

3.6.2. Read-only data fields

The Process Dashboard automatically calculates many data elements for you. Normally, these calculated data values are not directly editable, but rather they will update when other data elements to which they are related get updated. If you are using a recent web browser, these values are displayed with a grey background.

Sometimes you may decide that you want to override one or more of these calculated values. You can "unlock" these read-only data elements by clicking on the "Unlock read-only data" link at the bottom of the page. Unlocking read-only data will make all the elements on the page editable, allowing you to override calculated values with your own.

Unlocking read-only data is useful for times when you intentionally want to override a calculation, but it is not without risk. Once you have overridden a calculation, it will no longer automatically update in response to changes in related data items. In addition, related calculations may no longer add up like you would normally expect. Therefore, this feature should be used with caution.

After you have overridden a calculation with some value, you may decide that you want the old calculation back. Just type DEFAULT in the input field, and when you leave the field the old calculation will be restored.

3.6.3. Frozen Calculations

For some component types, the dashboard will "freeze" appropriate pieces of data when the corresponding process phase is marked as completed. The two points where this happens are at the end of the Planning phase and at the completion of the component.

For example, when you are planning your component with a PSP process, the dashboard will use your historical data to help you create an estimate of how your total time will be distributed across the process phases. Once you click the completion checkbox to complete the planning phase, all your Planned data will be baselined. The estimates you entered for size and time, along with all the calculated computed data elements for estimated data, will be frozen so that your planned data will always stay constant.

Similarly, when you mark the component complete, the To Date numbers will be brought up to date and frozen. This will enable you to view this report again in the future without having the To Date numbers changing in the report.

One side effect of the freezing of data is that if you want to change your time or size estimate, you will have to navigate back to the Planning phase and mark it as incomplete by clicking the completion checkbox again. Once it has been marked as incomplete the dashboard will allow you to enter a different estimate.

The same is true of the To Date items on the report. If you navigate back to an old component and start logging time to it, the Actual columns will update as required, but the To Date columns will not. You will need to mark the component as incomplete so that the To Date items will thaw out and recalculate.

The Project Completion checkbox is located on the Project Plan Summary form.

3.6.4. Exporting form data

When you open a dashboard form, the form connects to the process dashboard to retrieve the most up-to-date values for all the data elements on the page. If you choose the "File Save" option from your browser, you will find that only the form is saved; the values contained in the form are not. If you want to save an electronic copy of a dashboard form (for example, to email to a coworker, or to save with project documentation), click the "Export to HTML" link at the bottom of the page. The dashboard will create an HTML version of the form containing a snapshot of your data. This HTML snapshot can be saved using the "File Save" option of your browser.

If you would like to perform additional analysis on the data in a dashboard form, use the "Export to Excel" link at the bottom of the page. This will open the form in Excel, where you can reference the data in Excel charts and equations. For more information on the Excel export feature, see the Exporting your data help topic.

Important: the Excel version of the form contains exported data only. If you edit values in the Excel spreadsheet, your changes will not be imported back into the Process Dashboard. To change a data value in the Process Dashboard, you must make the change in a dashboard form.

 

3.7. Entering Defects

We all make mistakes. Dealing with those mistakes in a constructive way so that we can learn from them is a lot of what process improvement is all about.

Entering defects in the dashboard is as easy as choosing the defect button.

When the defect button is chosen, the defect dialog pops up so that you can enter information about the defect that you have discovered.

In this dialog box, you enter all the data necessary to describe the defect. Each feature of the dialog box is detailed below.

3.7.1. Project/Task

A label at the top of the dialog shows the name of the project/component/task this defect is being logged against. This can be helpful to maintain context if you're working on more than one defect at a time.

3.7.2. Defect Type

The defect type pulldown allows you to choose the type of defect. The choices are determined by the defect type standard that is in effect for the currently selected project. You can create new defect type standards, and configure the defect type standards that should be used for various projects; see the defect editor help topic for more information.

3.7.3. Defect Date

This field captures the date the defect was found and/or removed. It will automatically be filled in with the current date, but you can edit it if the defect was found or removed in the past.

3.7.4. Phase Injected and Phase Removed

The defect injected and defect removed pulldowns allow selection of the process phases in which the defect was injected and removed, respectively. The dashboard will set both of these to what it thinks are appropriate choices given the current development phase, but that default choice can be overridden easily.

Sometimes, you might discover a defect, but might not choose to fix it right away. (For example, you might need to talk with others to determine the best course of action for the fix.) In this case, you can click the "Removed" label, then select the option indicating that the fix for the defect is still pending. After the defect has been fixed, you can use the Defect Log Editor to re-edit this defect and change the status to "Removed."

Note: changing this "pending" flag will not affect the defect removal counts that appear on the Project Plan Summary form for your project. Those removal counts will still include "pending" defects, even though the defects aren't officially removed. This behavior allows the defect calculations (such as yield, defect density, and defect removal rate) to continue working as expected.

3.7.5. Timing the Defect Fix

When fixing defects, it is helpful to track of the amount of time that was spent finding the root cause and fixing it. Tracking this information makes it possible to analyze the relative costs of different defect types, so you can continually improve your development process.

The defect dialog has a field where you can enter the defect fix time directly. But generally, it is easier to use the fix timer buttons. Just start the defect fix timer as soon as you become aware of a defect, and stop it when the defect has been fixed. Of course, you can also pause the timer if you begin working on some other task, and restart it when you resume working on this defect.

Of course, when you are fixing a defect, you generally need to log time against the corresponding project task as well. So the defect timer and the main timer work together to help you collect accurate data. For example:

3.7.6. Fix Count

Sometimes, you may find and fix several related defects. (For example, during the compile phase, the compiler might identify four missing semicolons, and you might fix all of them at once.) To simplify defect entry, you can make one entry in your defect log describing all of the defects, then enter the number of distinct defects in the "Fix Count" field.

Most of the time, however, you will leave the count at its default value of 1. You should only use the Fix Count field when all of the defects in question have the same type, injection/removal phase, and description. If you use the Fix Count field to record several unrelated defects, it will thwart your ability to analyze the defect data effectively.

As a very special case, you can enter the number "0" in this field to indicate that something isn't really a defect after all, or that it is a defect but should be ignored when calculating quality metrics. (For example, this might be appropriate if you find and fix a defect in legacy code that you did not write.) If you enter a zero in this field, the defect will still appear in defect logs and other reports, but it will not contribute to the "Defects Injected" or "Defects Removed" counts on the plan summary form. As such, it will not affect calculations for yield, defect density, defect removal rates, or other quality metrics.

3.7.7. Fix Defect

The "Fix Defect" entry is where you can put the ID number of another defect if this is a "fix defect". A fix defect is a defect that was injected while fixing another defect. In order to determine the ID number of the other defect, you can pull up the defect editor by choosing "Defect Log" on the menu. One of the columns of information about each defect will show the ID number. For more information about using the Defect Log see the Using the defect log editor help topic.

The "new fix defect" button to the right of the ID entry provides another way to enter a fix defect. Consider the following relatively common case. You are fixing a bug (so you already have the defect dialog open and it is timing your fix). You edit your code and save the changes. You compile and link to run a test to verify your fix. Immediately you notice that your fix broke something else. At this point, you can click the new fix defect button to get a second defect dialog (to enter this new defect). This second dialog will have the ID number of the previous defect already entered in the ID entry blank. You can now input data relating to this new fix defect. The following screenshot shows two defect dialogs open. The second dialog (the one on top) is being used to enter a fix defect.

This process works with defects that you edit from within the defect log editor as well. See the section below on fixing multiple defects for more discussion on having two defect dialogs open at once.

3.7.8. Entering a description

The defect description pane is where you record a description of the defect. To facilitate effective process improvement, you should describe the underlying defect itself, and not just the outward symptom of the defect. (For example, an outward symptom might be that the program hangs, while the underlying problem might have been forgetting to increment the index variable in a loop.)

As you enter the description, you can optionally include URLs to external web pages. For example, you could enter the URL to a webpage from the corporate defect tracking system, or you could include a reference to a requirement that is affected by the defect. When URLs are present in the description, an external link icon will appear above the description pane. You can click that icon to quickly navigate to one of the URLs. If a particular URL is not self-explanatory, you can document its purpose by enclosing the URL and a description in square brackets: for example, [http://some/url Description of webpage]. The description you provide will be used as the text of the hyperlink when you view the defect log in your web browser.

3.7.9. Fixing multiple defects at a time

If you have the need to fix more than one defect at one time, you can do so by simply pushing the defect button on the dashboard again to display another defect dialog. When this happens, the timer on the first dialog will stop (if it was running) and the new defect dialog's timer will start recording time for the new defect. This new defect will become the "current" defect. When this new defect dialog is dismissed, the most previously opened defect dialog will become the current defect. It will pop to the front and its timer will start up again (if it had been running previously).

In this way you can keep an arbitrary number of defect dialogs open at once. If this is to be done, we recommend that you enter a description of the defect into the dialog box as soon as it is opened so that when it comes back to the front as the currently active defect, it will be clear what you were working on.

3.8. The Task Note Indicator

Notes and comments can be attached to any project or task in the dashboard. To create, view, or edit these notes, click the note indicator icon near the right edge of the main dashboard toolbar.

The Task Comment Editor window will appear.

This window displays your project/task hierarchy on the left. Click a particular project, component, or task to create, view, or edit the associated note. To delete a note, simply delete all the text in the note, then save the changes.

When a note is associated with the currently active task (or any of its hierarchical parents), the note indicator on the main dashboard toolbar will turn yellow, and the tooltip will provide the text of the note.

If you attach a note to a component or task within a team project, that note will be shared with other members of the team project when you perform a "Sync to WBS" operation.

3.8.1. Linking to External Websites

Most people make use of many websites as they work. Your organization may have websites for tracking requirements, defects, and other issues. And your team may have websites for team collaboration.

These sites may include web pages that are relevant to a particular project, component, or task in the dashboard. You can easily link these webpages to your tasks in the dashboard. Just enter a note for a particular dashboard task or component, and include a webpage URL in the body of the note (as shown in the example above). The dashboard will discover these embedded URLs and automatically add them to the script button pull-down menu.

By default, the script button menu item will display the title of the target web page. If you want the menu item to display something else, just include the desired title after the URL, and enclose the item with square brackets []. (This can also be helpful if the website in question requires a login that would prevent the dashboard from retrieving the page title.) For example:

3.9. Using the Task Completion Checkbox

As you complete the activities for a given task, you should mark that task as completed via the completion checkbox.

Checking the box marks the task complete with the current date and time. If you need to enter a different completion date, press and hold the Ctrl button on your keyboard as you click the checkbox.

When you mark a task complete with this checkbox, the dashboard will automatically change the currently active task to the next process step in the current component. (This behavior can be disabled with the Preferences Editor.) If the timer is currently running, it will automatically stop recording time for the given task and start the timing of the next task. For more information on using the timer, see the Using the Play/Pause button help topic.

Tasks marked as complete will show a little checkmark in the completion checkbox. (If you hover the mouse over the checked box, the tooltip will tell you exactly what date and time the task was marked complete.)

If you need to go back to a previous phase in a given process, you can still do so even if the completion checkbox has been pressed. The dashboard will still accumulate time in whatever task you make current. (It will display a warning to make certain you're not logging time to the completed task by mistake, but you can safely dismiss this dialog.)

Marking a task complete vs marking the project complete

By default, a PSP project will be considered complete when all the phases in the project have been marked complete. However, if you manually edit the project completion date on the plan summary form (either via the input field or the checkbox), then you have manually overridden this behavior. From then on, the project completion status must be edited manually; it will no longer respond to changes in phase completion status. (Actually, you can restore the default behavior by typing DEFAULT in the project completion date input field on the plan summary form.)

Why should I bother marking tasks/projects complete?

It is worth remembering that the "To Date" data entries, the data analysis reports, and the PROBE tool only use data from components that are marked complete, so it is good to make a habit of marking your components and tasks complete, either with the completion checkbox or via the Project Plan Summary form.

Also remember that the Task and Schedule tool tracks your progress by looking to see which tasks have been marked complete, so it is good to make a habit of marking tasks complete. To help you keep track of what has and hasn't been marked complete, the task selection menus will use a strikethrough font to display the name of completed tasks.

3.10. Using the Add Task Button

When you are working on a project, sophisticated tools like the Work Breakdown Structure Editor and the Hierarchy Editor are provided to create, edit, and reorganize tasks. But sometimes, you just need to create a single new task, and it's more convenient to do this without leaving the main dashboard toolbar. The Add Task button is provided for this purpose.

Clicking this button will allow you to create a new task in the dashboard. The window that appears will show you where the new task will be created, and will allow you to enter a task name.

The new task will be created under the named parent, and will immediately follow the currently selected task.

In most cases, this means that the new task will appear in the hierarchy immediately after the task that was selected when you clicked the button. But if the previously selected task belongs to a rigidly structured process (such as the PSP), it may not be possible to insert your new task inside. In that case, the new task will immediately follow the rigidly structured task. (In the screen shots above, Component B was a PSP task, so the new task will be created in "Release 1" immediately following Component B.)

When you add a task to a team project, you can also choose the process phase that the new task should belong to. By default, the new task will have the same phase type as the task you were previously working on. But you can click the node icon to select a different task type.

After you create a new task, it's a good idea to estimate the time it will require. You can do this by clicking the Percent Spent Indicator.

For now, the Add Task button does not provide any functionality for editing or deleting tasks. If you add a task by accident, or if you mistype the name of the new task, you will need to fix the mistake using either:

3.11. The "" (Configuration) Menu

The dashboard provides access to a number of less-frequently-used features on the configuration menu. This menu is shown with just the icon "" in order to keep the dashboard toolbar as small as possible.

The entries on this menu allow access to various tools and editors to give you complete control of your personal data.

3.12. Using the Time Log Editor

You can use the time log editor to correct mistakes you might make when timing your activities. The time log editor can be opened by selecting the "Time Log" option on the configuration menu.

3.12.1. Project hierarchy

The left pane shows the current project hierarchy. Selecting various branches on the hierarchy will limit the time entries displayed to just those on the branch chosen.

Next to the name of each hierarchy node, the dashboard displays the total amount of time that has been logged against that node and all its children. If you apply a date filter (see below), these times will recalculate based on the filtered view of the time log. You can use the "Time Format" pulldown control to display these times in hours:minutes, decimal hours, or percentages (of either the total time, or the time logged to the parent of the node).

3.12.2. Date filter

Above the split pane is a set of controls that provide date filtering on the time entries display. Once the desired span of dates has been chosen, clicking the "Apply Filter" button will restrict the data shown to the range of dates specified.

The Apply Filter button has a pulldown control that provides for several common date filters.

To the left of the "From" entry box and the right of the "To" entry box are double arrowed buttons. These buttons will jump the date filtering forward and backward by a unit of time equal to the current filtering date range. For example, if you have filtered the data in the Time Log such that only one week of data is showing, pressing these buttons will cause the filtering to move backward or forward by one week at a time.

In addition, you can enter dates directly in the "From" and "To" boxes to perform a customized date range.

3.12.3. Time entries

To change data in the time entries, just pick on the element that you would like to change. The elements in the time entries pane are editable.

The "Logged To" column shows the project, task, and process phase to which the time was logged. If you select one or more table rows, you can drag them onto a different leaf of the tree to move them to a different task. (This is helpful if you logged time against the wrong task by mistake.) You can also move entries by highlighting rows, pressing Ctrl-X, highlighting a new task, and pressing Ctrl-V.

The remaining columns display editable data for each time log entry. The "Start Time" column shows the start date/time for the activity. The "Delta" column shows the length of time spent in the activity. The "Int" column shows the amount of time that the given activity was interrupted. The "Comment" column allows you to enter a comment for a particular time log entry.

3.12.4. Control buttons

The Add and Delete buttons allow the addition and deletion of time entries. When Add is chosen, by default the last entry in the time log will be copied into a new log entry. You can choose which entry will be copied to make the new time entry by picking one of the entries before clicking the Add button, or by highlighting the corresponding leaf of the tree.

The Save and Revert buttons will save the changes or revert the entries to their previous values.

The Summarize button will collapse all time entries that were logged to the same process phase into one entry. The Dashboard will create new entries each time that it starts recording time in a given process phase (i.e. when a process phase is left and then returned to again for more time measurement). This function will allow you to collaspe all duplicates entries in the current display.

The Time Card View button will display another view of the time data.

The Time Card View is handy if you work for an employer that makes you submit time cards or time sheets. You can open this window and refer to the data it contains as you enter data into your employer's time card.

At the top left, a pulldown and a text field allow you to choose the month and year to display. On the left side of the window is an abbreviated version of your hierarchy, containing only the nodes and tasks where you logged time during the selected month. Columns are displayed for the days in the month. Tooltips on the column headers display the corresponding day of the week, and the columns for Saturday and Sunday appear with a slightly different background color. Cells in the table display the amount of time logged by day and by task.

Two controls in the top center of the window allow you to customize the display. You can hide columns for days that contain no time data using the checkbox, and you can change the display time format using the pulldown.

You can choose to display time in hours:minutes, decimal hours, or minutes.

3.13. Using the Defect Log Editor

You can use the defect log editor to correct mistakes you might make when entering defects. The defects log editor can be opened by selecting the "Defect Log" option on the configuration menu.

The left pane shows the current project hierarchy. Picking various branches on the hierarchy will limit the defect entries displayed to just those on the branch chosen.

To change data in the defect entries, just pick on the element that you would like to change. When a particular defect entry is picked, the Edit button becomes active. Clicking the Edit button will bring up the same dialog box used to enter defects. All the defect data can be changed using this dialog. For help using the defect entry dialog please see the Entering defects help topic.

If defects were logged to the wrong component or task, you can select one or more defects, then drag them to the correct component in the tree on the left. When you drop the defects, they will be moved to the new location.

It's usually most convenient to add individual defects by pressing the defect button on the main dashboard toolbar; but you can also add them here. Select the target component first, then press the Add button.

In addition, it is possible to import bulk defect data from external sources by clicking the "Import" button. At the moment, three import sources are built-in:

3.13.1. Configuring Defect Type Standards

The dashboard will allow you to configure the "defect type standards" that you would like to use for various projects.

Defect type standards are associated with projects hierarchically. By default, projects just inherit the standard chosen by their parent. In addition, there is a "global default" defect type standard that is inherited when no other settings have been chosen.

As you select various branches in the project hierarchy, a component at the bottom of the left pane will show you the defect type standard setting in effect for the highlighted branch. You can select a different defect type standard from the drop-down list provided. The new value you select will become the default defect type standard for the highlighted branch of your project hierarchy.

Click on the "More..." button at the bottom of the left pane to:

3.14. The System Tray Icon

If your operating system supports it, and if you are running version 1.6 or higher of the Java Runtime Environment, the Process Dashboard will display an icon in the system tray. Double-clicking on the dashboard's tray icon will show the main Process Dashboard window.

If you place your mouse over this icon, a tooltip will indicate the name of the active task. If you hold down the Ctrl key and click on the icon, a window will be displayed allowing you to change the active task.

Clicking once on the icon will start/stop the timer. A small "play" indicator appears on the icon to indicate when the timer is running.

A right-click on the icon will display a popup menu. Among other things, this menu duplicates the contents of the configuration menu and the script menu.

In addition, the popup contains a "Reminder" submenu. This menu allows you to enable a timing reminder, which will appear at regular intervals. The reminder will ask whether you are still working on a particular task (or whether you are still idle, depending on the state of the play/pause button). If you often forget to start/stop the timer, this reminder can help you establish a consistent habit of metrics collection.

If you do not wish to use the system tray icon, you can disable it using the option provided in the popup menu. In the future, if you decide that you want it back, you can reenable it via the preferences editor.


4. Postmortem Analysis

Just as it is necessary to plan a software project, it is also advantageous to learn from the experience of a software project as well. In the PSP course, a lot of postmortem time is spent calculating the various metrics and recording them. The Process Dashboard will take away much of the tedium associated with a Postmortem analysis.

For the most part, the work involved in a postmortem for a project that uses the Process Dashboard is automated. The dashboard knows how to fill out the Project Plan Summary form with all the derived metrics that are a part of the PSP, and it also knows how to create many helpful graphs to let you get a visual feel for how the data look.

The main thing that isn't done automatically is the final LOC counts. You can use the built-in LOC counter, or an external LOC counter of your own choosing, to calculate LOC; then enter the final counts on the Project Plan Summary form (for PSP levels 0 and 0.1) and on the Size Estimating Template (for PSP levels 1 through 3).

4.1. Counting LOC

Measuring size is an important step in the PSP Postmortem phase. If you don't pause in your project postmortem to measure the number of added, deleted, and modified LOC, you may forever lose the opportunity to capture these metrics. It only takes a few moments, and provides you with valuable data for future planning efforts.

You may already have a LOC counter that you use on a regular basis. (In fact, most people who complete the PSP training course write a LOC counter during the training.) If you do need a LOC counter, one is built into the dashboard.

4.1.1. The LOC Counter Tool

You can access this LOC counter by selecting the appropriate option from the " → Tools" menu. The LOC Counter Tool can count code in several different ways.

4.1.1.1. Counting LOC in regular files

The "Files" tab of the LOC Counter allows you to count LOC in a single file or in a directory. It also allows you to compare two different files or directories to see how many lines of code were added, modified, and deleted. Just select the appropriate option at the top, then select the files or directories in the fields below. Then press the Count button.

4.1.1.2. Counting LOC changes from Git

If you use Git for version control of your source code, the "Git" tab makes it easy to count the number of lines of code that were added, deleted, and modified by a particular set of changes. To begin, select the directory on your computer that contains your git working copy.

Next, choose the tree or commit containing the changes you wish to count, followed by the tree or commit that contains the pre-change state. Then press the Count button to compare the trees and generate a report.

4.1.1.3. Counting LOC changes from Subversion

If you use subversion for version control of your source code, the "SVN" tab makes it easy to count the number of lines of code that were added, deleted, and modified by a particular set of changes. To begin, select the directory on your computer that contains your subversion working copy.

Then, several counting options are provided:

The options above can be used together: for example, to count the changes in several committed revisions as well as local modifications. After you have selected the desired options, press the Count button.

4.1.2. The Quick LOC Counter

The LOC Counter Tool described above provides powerful options for LOC counting. For quick/simple counting needs, a web-based interface is also provided. You can open this web-based interface by pointing your web browser to http://localhost:2468/dash/pspdiff.htm.

In addition, a link to this LOC counter is included in the Postmortem scripts for PSP0.1 and up.

The web interface allows you to count a single file or compare two files to each other. For more sophisticated needs, a hyperlink at the bottom of the page is provided to open the full-featured LOC Counter Tool.

The web interface will alternatively allow you to copy and paste code snippets that should be counted or compared. When you do this, keep in mind that the counter can no longer examine your filenames (e.g. "foo.java" or "foo.cpp"), so it may not be able to guess which programming language syntax to use for the count. In that case, you may need to select an option from the "Language" field near the top of the form.

4.1.3. The LOC Counter Report

After using any of the tools above, the dashboard will generate a report showing the number of physical LOC that you have added, deleted, and modified. It also displays a "redlined" version of the modified files, which can be very useful for peer reviews.

When you use the full-featured LOC Counter Tool, the top of the report will also show summary tables listing the files that were added, modified, or deleted, with individual LOC counts for each file.

4.1.4. Entering PSP Size Data

If you are using the PSP Size Estimating Template, you can drag items from the LOC Report summary tables and drop them onto rows of the Size Estimating Template. The actual LOC for the file in question will be applied to the target row in the Size Estimating Template. (This this feature is most useful if your conceptual design lists items at a file-level granularity or above. If you prefer to create separate rows in the Size Estimating Template for each added or modified method, you will need to perform your own manual accounting of the LOC for each Size Estimating row.) You can drag several items from the LOC report onto the same row of the Size Estimating Template, and the actual LOC contributions from each file will be summed. If you drop a file onto the wrong row, you can drag it to a different row or delete it entirely.

Entering actual LOC on the Size Estimating Template is a good way to improve your planning performance. As you apply the actual LOC to the rows of the Size Estimating Template, compare the actuals to your original plan. The differences can help you to understand the types of planning errors you typically make, which can help you to improve your plans in the future.

However, the data on the Size Estimating Template is not the official source of information for computing the size of a PSP program. The official source is the Actual Added and Modified field in the "Size" section of the PSP Project Plan Summary form.

The actual Added and Modified field is calculated from the values that appear in the actual Base, Deleted, Modified, Reused, and Total Size fields on the Project Plan Summary form. During postmortem, you should open the Project Plan Summary form and enter these values. This task is generally very fast and easy, because these aggregate numbers are readily available in a table near the top of the LOC Counter Report.

To receive good analyses from the PSP, it is very important for the "Actual Added and Modified" field to contain the right size. Therefore, you should always open the PSP Project Plan Summary form during the Postmortem phase of each PSP project and enter these values, even if you don't take the time to fill out the Actual columns of the Size Estimating Template.

4.1.5. Advanced Usage

Several configuration settings are provided to control the behavior of the LOC counter. For more information, see the Advanced Configuration Settings help topic.

The LOC counter that is built into the Process Dashboard is extendable to allow user defined LOC counting rules. For more information, see the custom LOC counter help topic.

4.2. Data Charts and Reports

The Process Dashboard automates many reports and charts that can be quite useful in a project postmortem.

4.2.1. The Project Plan Summary

The main report that contains the most useful postmortem information for your project will probably be the Project Plan Summary form. The Project Plan Summary can generally be produced by navigating to the project for which you would like the report, clicking the script button, and selecting the option for the Project Summary form.

4.2.2. Marking your project complete

It is important to mark your project as complete. This lets the dashboard know that you are finished with the project, and it can use the project data to calculate the various items in the reports and charts. You can edit the project completion date via the appropriate field on the Project Plan Summary. If you haven't edited the project completion date field on the Project Plan Summary, marking all the phases in the project complete will mark the project complete as well.

4.2.3. The Time Log and Defect Log

HTML versions of the Time Log and the Defect Log are also available from the scripts button. If you navigate to the main Process script for any of the PSP processes (usually by following a link marked "top" near the bottom of the various reports and forms), you will links named "Time Log" and "Defect Log" in the text of the script. These will bring up a read-only version of the two logs.

4.2.4. Graphical charts

The dashboard also makes many graphical charts of various kinds available. If you have any PSP components in your personal work hierarchy, the menu will display a "PSP Data Analysis" option. Choosing this option will display a split view with an index of various chart types on the left and thumbnails of the charts available on the right.

Clicking any of the thumbnail charts will bring up a full-sized version of the chart. When viewing a full-sized chart, resizing your browser window will cause the chart to resize as well. Finally, clicking on a full-sized chart will display a table of the data used to draw that chart.

The dashboard provides charts that allow

4.2.5. Custom charts and reports

If you need a special chart or report that the Process Dashboard does not provide, you can create your own reports using Java servlets or JSPs. For more information, see the Custom JSP Reporting help topic.

4.3. Exporting Data

4.3.1. Exporting Team Project Data

If you are participating on a team project, the dashboard will automatically export your team project data on a periodic basis. However, there may be times that you wish to publish your latest data immediately (for example, if you are on your way to a team meeting). Just click the script menu and choose the "Export My Data Now" option.

4.3.2. Advanced: Exporting Non-Project Data

If you have been collecting data that is not part of a team project, you can export that data if you wish. Just choose "Tools  Export" from the configuration menu.

To export data, choose the "Export Project Metrics" option. The following page will be displayed:

This screen allows you to choose the file where data will be exported, and the projects in your hierarchy that should be included in the export. When you click "Next", data for the selected projects will be exported to the designated file. This will include metrics data (e.g. the data visible on the plan summary form), defect data (e.g. the data visible in the defect log), and earned value data (if any of the selected projects are contained in any earned value task lists).

If you would like this data to be exported automatically each time the dashboard shuts down, choose "Yes" on the final checkbox. This will add this export operation to a permanent list of automatic exports. You can view that list, and alter its contents, by choosing the "Manage Automatic Exports" option on the initial page of the Data Export Wizard.

Advanced: Individuals who are interested in viewing/reusing the data in these exported files are free to do so; the export file is a simple ZIP archive with XML files inside. Keep in mind, however, that this file format is subject to change in future versions of the dashboard.

4.4. Importing Data

Files that have been exported by the dashboard (as described above) can be imported by the Data Import Wizard. To open the Data Import Wizard, choose "Tools  Import" from the configuration menu.

To import data, choose the "Import Project Metrics" option.

This screen allows you to choose a directory containing files that should be imported. The directory will be scanned for files previously exported by the dashboard (such files should have the ".pdash" suffix). The data in the files will be imported into the dashboard's data repository with the prefix chosen.

Metrics data imported in this way will be visible to tools like PROBE, the Data Analysis Center, and data rollup templates. Earned value data imported in this way can be added to earned value roll-ups. This provides many possibilities for rolling up data to the team level, and for analyzing data trends across projects.

If you would like the data to be imported the next time the dashboard starts, select Yes on the final checkbox. This will add the import operation to a permanent list of automatic imports. You can view that list, and alter its contents, by choosing the "Manage Automatic Imports" option on the initial page of the Data Import Wizard.

4.5. Exporting data to Excel (PC only)

Many of the reporting forms in the dashboard have links that say "Export to Excel...". When this link is clicked, an Excel sheet will come up that contains the data from that form.

By default, the data will be exported dynamically as a linked workbook. When the workbook opens, Excel will connect to the dashboard and retrieve the data items. At any time, you can ask Excel to refresh the data by right-clicking on the data and choosing "Refresh." This dynamic refresh behavior can be very powerful. For example, you can create additional sheets in the workbook to analyze and chart the raw data, then save the workbook. In the future, you can make sure the dashboard is running, reopen this workbook, and ask Excel to refresh the data. Excel will reload the raw data and your charts will update.

In some web browsers, that dynamic behavior may not work properly. In that case, you can try switching to a static export. The static export will show the values of process variables at the instant that the export was done. For instructions on configuring for static exports, see the related FAQ.

The "Export to Excel..." option will appear on

4.6. Importing Historical PSP Data

If you have PSP data from historical projects, and you would like to import them into the dashboard so they contribute to your "To Date" data, PROBE calculations, and "Data Analysis" charts/reports, you can use the "Import PSP Data" template.  To enter your historical data into the dashboard, follow these steps:

  1. Open the Hierarchy Editor.
  2. Highlight a node in your hierarchy like "Non Project", then click "Edit  Add Template  Import PSP Data". (If there is no "Import PSP Data" option in your "Add Template" menu, then you may need to install the PSP scripts and forms.) A new node will be created in your hierarchy. Give it a descriptive name; you might choose names like "Program 1" if you are entering data from a PSP course.
  3. Repeat step 2 for each PSP project whose data you wish to import.
  4. Choose "File  Save", then "File  Close" to close the hierarchy editor.
  5. Navigate to one of the projects you just created, then click the script button. An abbreviated project plan summary will appear. The fields on this summary are editable; enter your historical data for the given project.
  6. Repeat step 5 for each imported project.

The data entry is a manual process, but not a time-consuming one; it should be possible to enter the data from an entire PSP course in about 15 minutes.


5. Frequently Asked Questions

This is a list of Frequently Asked Questions about the Process Dashboard

5.1. Installation issues

5.2. Online forms

5.3. Files

5.4. Other questions


My web browser displays an error message when I try to view a script/form/chart/report/etc. What is wrong?

The dashboard actually contains a very small HTTP server that provides all the web content and thus the content cannot be displayed when the dashboard is not running. If you get an error message like "The page cannot be displayed - cannot find server," check to make certain that the dashboard is running.

If the dashboard is running, and you have never been able to view a script/form/chart/report, it may be that you need to adjust your proxy settings. Many people work at companies where they do not have a direct connection to the internet, but instead must connect to the web via an HTTP proxy server. If this describes you, you may need to tell your browser to bypass the proxy for the address "localhost". The instructions below may not apply to your browser word-for-word, but should hopefully get you pointed in the right direction:


My web browser is able to show the forms, but none of the entry blanks have any information. What is wrong?

The dashboard uses web browsers in unique and innovative ways. Unfortunately, some browsers aren't up to the task. If you can see the HTML forms but they don't seem to be talking to the Dashboard, then it is likely that your browser (or the Java environment within your browser) is encountering problems.

Your first step should be to ensure that you are using one of the browsers recommended for use with the dashboard. (See the installation help topic for more information.)

If you are using one of the approved browsers and you still have this problem, please send us an email at processdash-devel@lists.sourceforge.net and we will attempt to help you with the problem.


I have several versions of the Java Runtime Environment on my computer. How can I tell the dashboard which one to use?

(These instructions apply to Windows.) 

  1. Right-click on the icon you use to run the dashboard, and choose Properties
  2. The "Target" field will contain "C:\Program Files\Process Dashboard\pspdash.jar". Change it to read (all on one line):

    "C:\Program Files\JavaSoft\JRE\1.7\bin\java" -jar "C:\Program Files\Process Dashboard\pspdash.jar"

    (Of course, you may need to modify the path to the "java" program if it is slightly different on your computer.)


Our Team Dashboard is displaying the "toolbar" user interface designed for personal data collection. How can I fix this?

In most cases, when you create a team dashboard or personal dashboard, it will automatically be configured with a flag indicating the dataset type. However, if you have an older Team Dashboard that contains a mixture of team projects and accidentally created personal projects, the dashboard may not be able to infer the correct dataset type, and it may display the "toolbar" user interface that is designed to help individuals collect data. If this occurs, you can fix the problem by choosing " → Tools → Preferences → Advanced" and setting the "datasetMode" parameter to "team".


If I have a dashboard script or form open, and I click the script button to open another form, the new form appears in my existing browser window, replacing the old form. Why can't I have two forms open at once?

You can have as many scripts and forms open as you like! The behavior you are seeing is a Microsoft "feature" designed to reduce clutter on your screen. Fortunately, you can alter that behavior. The instructions below may not apply to your browser word-for-word, but should hopefully get you pointed in the right direction:

  1. In Internet Explorer, choose "Tools Internet Options".
  2. Click the "Advanced" tab.
  3. Remove the checkmark next to the option, "Reuse windows for launching shortcuts."


All my data elements say "NO CONNECTION". What is wrong?

The forms always display "live" data - this allows them to auto-recalculate numbers (like a spreadsheet does) when you edit data. It also allows changes made in one browser window to appear immediately in other browser windows. To make all this happen, the browser maintains an open connection to the dashboard, and passes data back and forth across this connection.

If you are viewing a form, and you close the main dashboard window, this open connection is closed as well. When this occurs, the form immediately displays "NO CONNECTION" to let you know that your changes are no longer making it back to the dashboard's data repository. To fix the problem, you must

  1. restart the dashboard
  2. click the refresh/reload button on your browser.

If you have just opened a page containing a lot of data, the dashboard may need time to perform the calculations. It will display "CALCULATING" while the data is prepared to let you know that the form is not ready yet.


Some of my data elements say "#VALUE!" or "#DIV/0!". What is wrong?

"#VALUE!" indicates that the dashboard cannot calculate a value because the formula references a value that is missing (displayed as "?????") or otherwise invalid (for example, a value like "foo" when a number was expected). When you see "#VALUE!" in a dashboard form, it almost always means that there is a "?????" field somewhere that you still need to fill in. If you fill in all the "?????" fields and the "#VALUE!" field does not recalculate, check to ensure that the calculation is not frozen.

"#DIV/0!" indicates that the dashboard encounted a divide-by-zero error when calculating a particular data value. Many times this is due to having a very small number of usable data points recorded by the dashboard. For instance, if you start the dashboard for the first time and try to look at Process Summary forms for a PSP2.1 process, the "% To Date" fields will be filled with "#DIV/0!". This is because the total amount of time recorded in the tool is 0. The percentage calculation attempts to divide by zero and returns the error.

Another problem can contribute to this condition as well. If you are not in the habit of clicking the little "completion" checkbox at the right end of the dashboard, some (or all) of your data will be ignored by the dashboard when creating reports and graphs. The reporting features of the dashboard only report tasks/projects that are marked as complete. See the Using the Completion Checkbox help topic for more information.


I tried to export my data to Excel with the link on one of the forms, but I just got a small text file. What is wrong?

For the "Export to Excel" functionality to work seamlessly, you must have the ".IQY" file type properly set up on your system. This setup is normally performed by Microsoft Office during the installation process for Excel (although, notably, certain releases of Office 97 do not perform this setup).

If the IQY file type is not properly set up, clicking the "Export to Excel" links may instead cause Notepad to appear with a short, three-line text file. Alternatively, that three line text file might appear in an Excel spreadsheet.

If you encounter such problems, the simplest fix is to add the following setting to the "Advanced" section of the preferences editor:

 excel.exportMethod=mime

And data will be exported to Excel statically.


Why is there no "submit" button on the HTML forms?

The HTML forms used by the dashboard are continually "live". There is no need to press a submit button to send your data to the dashboard. Simply enter your data where necessary, and the dashboard will record it. However, after editing a data field, it is usually necessary to leave that field for your changes to take effect. You can press the TAB button or click somewhere else on the page. If the data you are changing is related to other data items on the page, you should see the other data elements update. For more information, see the Entering process data help topic.


I've started the timer, but none of the numbers on my reports are changing. How can I know that it is working?

When the timer is running and you first navigate to an activity, the dashboard will not create an entry in the time log until you have spent a full minute there; this is by design. For a more detailed explanation, see the help topic for the play / pause button.

Also, the dashboard will make a quiet "tick" sound whenever the timer starts and when a new project or project phase is chosen by the hierarchy menus when the timer is running. If you do not hear this sound, check the state of the play/pause button. The current state of the timer can always be determined by positioning the mouse pointer over the play/pause button. A tooltip help will pop up containing the current state.


I made a mistake in one of my numbers on the Project Plan Summary form, but the form won't let me change the numbers! What can I do?

The dashboard will "freeze" your planning data once you have completed the planning phase by clicking the completion checkbox. Also it will freeze all the data when the project is marked as complete. You can make these numbers editable by marking either the project or the planning phase incomplete again. For more info on freezing data see the data freezing and the completion checkbox help topics.


What is the significance of the different text colors on the PSP process scripts and forms?

In his book A Self-Improvement Process for Software Engineers where he outlines the Personal Software Process, Watts Humphrey introduces the various process elements for doing PSP work in a graduated manner. Each PSP process is built upon the previous one. As a way of showing which process elements were added to the previous process definition, the forms in the book highlight the new process elements in bold italics. These highlighted elements return to normal text at the next process level. In our attempt to make our online forms as identical to the PSP forms as possible, we have included that detail.

However, the Process Dashboard makes certain steps on the scripts and forms unnecessary (e.g. instructions to sum up various data items -- the dashboard sums them for you). These unnecessary process steps are displayed as greyed-out text.

Also, there are places where the dashboard slightly changes the way certain steps are performed (e.g. instead of performing a PROBE calculation, the PROBE tool should be used). Green text is used to indicate this slight departure from the true PSP scripts and forms.


What is "Prototypical PSP Data?" I'm seeing it in some of the charts and reports.

When you first begin using the dashboard, you have no historical data. As a result, previous versions of the dashboard would display "#DIV/0!" in the "Plan" column of your first project if it was based upon anything other than a PSP0 process.

Beginning with version 1.6.2, the dashboard will detect that you have no historical data, and introduce an example dataset based upon industry data and best practices. The dashboard uses this dataset to calculate the plan for your first PSP project.

As soon as you complete at least one PSP project, this example dataset will disappear. In the meantime, it may appear in various dashboard charts and reports.


I click on a document hyperlink in a process script, but the document never opens.

For maximum portability, the document templates provided with the dashboard are rich text files (.rtf). Some browsers don't know what to do with a rich text file, and so they prompt you to save it (not very helpful). To solve this problem, you must:

  1. Obtain a program capable of editing rich text files, and install it on your machine. ("Open Office" is one possibility; it is free and runs on Linux. Visit http://www.openoffice.org/)
  2. Configure your web browser, and tell it that files ending with ".rtf" and/or files of mime type "application/rtf" should be opened with the program you just installed.


I'd like to make a minor change to a process script someone else wrote. Can I do that?

Yes you can! Please see the section on overwriting process scripts in the help topic that describes how the dashboard finds the script files.


Where is my PSP data stored?

The dashboard stores all of your data in a single directory, in plain text files. This directory is often referred to in this documentation as the "data directory".

You can find out the exact location of your data directory by choosing "Help About Process Dashboard" from the configuration menu, then clicking on the Configuration tab.

With the current default configuration, data is always stored in the "current working directory" when the dashboard is run.

On Windows systems, the "current working directory" is set by the icon you use to run the dashboard. Right-click on that icon and choose "Properties"

On Mac OS X systems, the data directory is set by the Application icon you use to run the dashboard. Ctrl-click on that icon, and choose "Show Package Contents." Then find the file "Resources/dataLocation.txt". You can edit this file to change the location where your data is stored.

On Unix/Linix systems, the current working directory is controlled by the shell script or icon you use to launch the dashboard. See this FAQ question below for more information.

It is possible to have multiple, independent data directories all on the same machine; just make copies of the icon you use to start the dashboard, and configure each icon with a different data location.


How can I backup my psp data and/or move it to another computer?

If you want to backup your psp data, simply back up the contents of your data directory. To move your psp data to a different computer,


I got a warning box that claims that my data files have been corrupted! Can I get my data back?

If you did not continue running the dashboard when the dialog warned you that doing so could be quite dangerous, then yes, you probably can.

If you see this message, realize that the dashboard is being overly cautious with your data. As long as you didn't plow on ahead and run the dashboard with the questionable files in place, no data has been lost yet. The best steps to take next are:

  1. Examine the corrupt files mentioned in the warning message. If they are of zero length, then there is most likely nothing to worry about. Just delete the zero length files and restart the dashboard.
  2. If the files contain something, examine their contents. Removing the "tttt" at the beginning of the filename should indicate what real file was being created at the time the problem was detected. See if the temporary files contain any data that is missing from the original file, and copy it over if necessary. Finally, delete the temporary files and restart the dashboard.

Even though the Dashboard has been designed to be safe with your precious process data, it is still a good idea to back up the Dashboard's data directory every so often. See the question about backing up your Dashboard data for more information.


I'm on a Unix/Linux system, and the dashboard is cluttering my home directory with lots of files! How do I fix this?

When you start the dashboard (whether on Linux, Windows, or any other operating system), it uses the "current working directory" for data storage.

On Windows, the installer program automatically creates a shortcut for the user which launches the dashboard with the appropriate current working directory, as selected during the installation process.

Unfortunately, the installer is not able to create shortcuts on all Linux/Unix platforms yet, so it may up to you to create an appropriate launcher manually. The dashboard does its best to help you out, by creating a shell script in your chosen data directory called "run-dash.sh". Take a look at the contents of that shell script. Embedded comments in that file include some helpful information; for example, If java and/or firefox are not in your path, you may need to edit a particular line of the script. With those edits, you should be able to use the script to launch the dashboard.

If you have already started using the dashboard and you've already created projects in your hierarchy that you want to keep, you can move them by carefully following the steps below:


Can I hide my finished projects from the hierarchy browser (and other screens)? They are starting to pile up and are taking up a lot of space.

Unfortunately, No. We have this as a feature request.

In the meantime, the Cut and Paste features in the hierarchy browser will allow you to move your completed projects away from the part of the hierarchy where you are doing your active development. You could create a node at the top of the project hierarchy called "Archived Projects" and Cut and Paste your finished projects as children under it. They would still count towards your PROBE Estimates and your Planning data. See the hierarchy editor help topic for more information.


I have a project in my hierarchy that doesn't have much to do with my current development habits. Can I mark it as an "outlier" so that it doesn't corrupt the Planning and PROBE estimates?

There are basically two concerns when in this kind of situation.

  1. Removing the project from PROBE Estimates
  2. Removing the project from Planning and To Date calculations

The most important time to identify a project as an outlier is during PROBE-style linear regression. This is easy to do; when using the PROBE tool, you can click on the "Chart" button to visually identify outliers, and the "Filter" button to remove any outliers from the regression calculation. The PROBE Wizard will also let you remove various data pairings from the regression calculation, but it won't show you a graph and thus isn't as intuitive. See the PROBE Tool and PROBE Wizard help topics for more information.

To remove a project's effects from Planning and To Date calculations, you can make use of multiple data sets. By defining a customized data set for your current project, you can isolate only the data you know is applicable. See the multiple To Date data help topic for more information.

A less desireable but simpler way to remove a project's effects would be to mark the project as incomplete. The To Date, Planning, and PROBE calculations only use completed projects for their data sets. The drawback with this approach is that you will lose the accurate completion date for the project that you mark incomplete.


Since the dashboard has a web server in it, do I have to worry about internet worms and viruses attacking my machine?

A good question! The short answer: the web server built into the dashboard is NOT susceptible to any existing worms or viruses, and the default dashboard settings make it impossible for other computers to connect to your dashboard.

The longer answer: the web handling logic in the dashboard is based on Jetty, a widely-used and thoroughly reviewed open-source web server. The broad user base and continual review process help to make Jetty very secure.

Fortunately, because the dashboard is written in Java rather than C/C++, it is not susceptible to many common hacking techniques like buffer overruns (a common worm infection strategy). This means that even if a hacker was interested in writing an attack targeted at the dashboard, the worst thing they could probably do is to crash your running dashboard program.

If this information doesn't allay your concerns, you can use the "http.allowRemote" setting to ensure that it is impossible for other computers to connect to the dashboard (this is the default). See the advanced settings help topic for more information.


When the dashboard starts up, it's attempting to make a connection to the internet. Why is it doing this?

Like many modern software programs, the dashboard provides an "update notification" feature. Once a month, this feature checks to see if an updated version of the dashboard is available. If you have installed add-on process sets, it also checks to see if updated versions of these are available.

If new versions are available, the dashboard will display an alert, listing the items which have been updated. This alert has a checkbox which reads "Don't perform a monthly check for new releases." If you check this box, the dashboard will never perform this check again. You can also disable this check manually by unmarking the appropriate box in the preferences editor.

In the normal case, this "update check" will succeed, and the dashboard will make a note not to check for another 30 days. However, the update check might fail if no network is available (for example, because you are running the dashboard on a laptop that isn't connected to the network). As a result, if the update check fails for any reason, the update checking logic will try again the next time you start the dashboard.

If you see the dashboard attempt to check every time it starts up, this means that the update check is never completing successfully. This could occur if your personal firewall is blocking the connection, or if you are behind a password-protected corporate firewall. In either case, you can turn off this feature entirely as described above.


What happened to the DCR and SCR processes?

The DCR and SCR processes were shipped with version 1.1 of the Process Dashboard. They were later removed from the main dashboard and distributed as add-on process sets. As of version 1.4.1, they are no longer available.

Explicit written permission from Addison-Wesley is required to modify PSP scripts or distribute modified PSP scripts. Since the DCR/SCR process scripts were derived from the copyrighted PSP process scripts in A Discipline for Software Engineering, they fall into this category. We have not attempted to obtain that permission from Addison-Wesley, so these processes are no longer available.


I would like to integrate the dashboard more closely with my IDE. Is it possible to programatically start/stop the timer, change the active hierarchy path, and open the defect dialog?

As of Process Dashboard 2.5, a Visual Studio plugin is available that makes it easy to collect metrics without leaving your IDE. Contact the development team if you are interested in using this functionality.

If you are interested in developing integration for another IDE, take a look at the various REST APIs that the dashboard publishes. Your plugin can interact with those APIs to retrieve and modify UI state.

For much simpler mashups (such as quick links in a webpage), a handful of older APIs are still available. For example, if you issue an HTTP request of the form:

http://localhost:2468/control/startTiming.class
the dashboard timer will start. Similarly, an HTTP request of the form:
http://localhost:2468/control/stopTiming.class
will pause the timer. And
http://localhost:2468/Non+Project/foo//control/setPath.class
will change the current hierarchy path to "/Non Project/foo". If you want to change the current hierarchy path and start the timer, use
...//control/setPath.class?start

To open the defect dialog and log a new defect against the active task (the same action as clicking the defect button), use

http://localhost:2468/control/showDefectDialog
To open the defect dialog and edit an existing defect, use
http://localhost:2468/Project/Foo/Some+task//control/showDefectDialog?id=42
where "/Project/Foo/Some+task" is the URL-encoded project/path that the defect was logged against, and "42" is the ID of the existing defect. (These values can be seen in the Defect Log Editor.)

Note: these commands will have no effect unless the HTTP request originates from the same machine where the dashboard is running.


Does the Process Dashboard support teams?

Yes, the dashboard does contain powerful features that make it possible to roll up individual data to the team level. See the Team Use help topic for more information.


Where can I get the latest information about the Process Dashboard?

The latest developments in the development of the Process Dashboard, including the latest version, can be found at http://www.processdash.com


I think I've found a bug. Whom do I contact?

If you like, you can fill out a bug form on our web site at http://www.processdash.com/bugTracker. The simplest way to do this is just to pick "Help → Submit bug report" from the dashboard's menu. This will open your web browser pointed right to the bug form.

If you would rather send us an email, write to processdash-devel@lists.sourceforge.net


6. Advanced Topics

Want to try your hand at writing your own processes? Want a little more control over how the Dashboard operates? Want to do things that aren't quite obvious? This is the place to look.

This section will tell you how you can change the default behavior for various features of the dashboard, track multiple sets of To Date data, and how to create your own processes for use in the Dashboard.

6.1. Team Use

The Process Dashboard includes extensive functionality which can be used by high-maturity project teams. This functionality will be most useful and intuitive to projects that are applying the Team Software Process(SM). However, since the dashboard's team functionality is general-purpose, it can be used effectively by non-TSP(SM) and non-software teams.

For more information and step-by-step instructions, see the Team Use section of the Users Manual.


Team Software Process(SM) and TSP(SM) are service marks of Carnegie Mellon University. The open source team that writes the Process Dashboard is not affiliated with Carnegie Mellon University. Neither Carnegie Mellon University nor the Software Engineering Institute have reviewed or endorsed the Process Dashboard.

6.2. Personal Data Storage Options

When you install the Process Dashboard, the installer will ask you to select a directory where your personal data will be stored. Time and defect log entries, task completion dates, and all other personal data you enter will be saved into this directory. You can find out the exact location of your data directory by choosing "≡ → Help → About Process Dashboard," then clicking on the Configuration tab.

The installer will suggest a reasonable default location for your data directory, which you may accept. But there are many different possibilities, which are described below.

  Local
Hard Drive
Network
Directory
Cloud
Storage
Enterprise
Server
Ease of setup and ongoing use Easy Hard Moderate Easy
Fast access to personal data
Access personal data while offline
Personal data backed up automatically   ?
Access data from multiple computers
Built-in data sharing controls
Automatic software upgrades
Time machine for historical data

6.2.1. Local Hard Drive

By default, the installer will suggest a data directory location on your local hard drive. This option is the simplest. Here are some of the tradeoffs of this approach:

PRO: Your personal data is always accessible on this computer. You can open your personal dashboard and collect data at any time, even if you have no network connection.
PRO: Local storage helps with data privacy: other people cannot look at your detailed personal data if they cannot read your data files.
CON: Your personal data is only accessible from one computer. If you regularly work on different computers throughout the day, you'll have to select one computer where you will run the Process Dashboard. If you are away from that selected computer, you won't be able to collect data.
CON: Your data can be lost if your hard drive crashes, because your data directory is the only place that contains a complete copy of all your personal data. (It's a common misconception that the data you collect for a team project might be stored in the WBS Editor or the Team Dashboard; but that is incorrect. Those locations only contain the summaries they need to generate team rollups.) You can mitigate this risk by configuring an automatic, external backup of your data.
NOTE: Mac OS X provides special operating-system protections for the Documents directory. Depending on the version of Mac OS X you are running, the dashboard may not be allowed to read and write files that appear under Documents. As a result, you may need to place your personal dashboard data somewhere under ~/Library/Process Dashboard. The installer will suggest this as the default; if you choose another location, be aware that Documents and its subfolders are probably off-limits.

6.2.2. Network Directory

If access from more than one computer is important to you, you can create a personal data directory on a network file server. The general steps are:

  1. Obtain access to a folder on a network file server.
  2. Map or mount the network file server so it is visible to your local computer (for example, as a new lettered drive in Windows, or as a folder under Volumes in Mac OS X).
  3. Create a new, empty folder in that area for your personal data.
  4. When installing the dashboard, enter the path to that folder as the location of your personal data.

This approach is much more complex than using the local hard drive. Here are some of the tradeoffs of this approach:

PRO: Your personal data can be accessed from more than one computer. You can collect data from various computers throughout the day (but note that the dashboard can still only be running on one computer at a time).
PRO: If the network server is managed by your IT department, and they are performing periodic backups, your data will be protected from loss in the case of a local hard drive crash. (But make sure to verify this with your IT department; if they aren't performing backups your data still isn't protected.)
CON: You can only access your personal data when your computer is connected to the same network as the network file server. It will be inaccessible if you don't have a network connection, or if you're traveling and don't have access to a VPN.
CON: File sharing protocols often have very slow performance - especially over a VPN. The dashboard stores data in a large number of fine-grained files, so if your network is slow, it can take an exceptionally long time for the personal dashboard to open or shut down.
CON: The network folder must be mapped/mounted on all the computers you use. These connections can time out and may need to be reestablished manually (especially after changes in network connectivity).
CON: File permissions can be tricky to configure. The files you write from one of your computers must be readable/writable by the other computers you use. And for data privacy, you'll need to make sure the permissions forbid read/write access by other people.
CON: If you use a mix of Windows, Mac OS X, and/or Linux computers, you may encounter insurmountable problems stemming from their differing support for file-sharing protocols. (This could manifest itself as a startup error stating that the dashboard was unable to lock files for writing.)
CON: Network file servers are a 1990's style technology that many IT departments are reluctant to support. With the modern preference toward zero-trust architectures, many organizations are eliminating their network file servers completely.

6.2.3. Cloud Storage

Many cloud storage providers - such as OneDrive, Dropbox, Google Drive, and others - offer desktop sync clients you can install on your computer. These sync clients copy files from your computer to the cloud, and vice versa. They generally work by creating a dedicated folder on your computer's hard drive, then keeping the contents of that special folder synchronized with the cloud.

This functionality provides an easy way to automatically backup your personal data. The general steps are:

  1. Create an account with a cloud storage provider, if you don't already have one. (If you already have a Microsoft 365 or Google account, it comes with cloud storage included. If you don't have one, it's easy to create a free account.)
  2. Download and install the desktop sync client offered by your cloud storage provider. Configure the sync client to start automatically each time you log in to your computer.
  3. Find the dedicated folder that your sync client is managing. Create a new, empty directory somewhere under that folder for your personal data.
  4. When installing the dashboard, enter the path to that new, empty directory as the location of your personal data.

This approach is fairly simple to set up (especially if you've already been using cloud storage). Here are some of the benefits of this approach:

PRO: Your personal data is protected from loss if your hard drive were to crash. The dashboard is writing your personal data into the directory you've chosen, and the sync client is keeping it backed up to the cloud automatically. (But this protection only happens if you keep your sync client running in the background. It the sync client pauses, shuts down, loses its connection, or needs you to log in again, your data won't be protected.)
PRO: Your personal data is always accessible on this computer. The sync client keeps a copy of the files locally, so you can open your personal dashboard and collect data at any time, even if you have no network connection. (Note: some sync clients may have an option to move files to the cloud to save space on your hard drive, then download them on-the-fly they are needed. This option isn't recommended for the directory containing your personal data, because it will result in extremely slow performance.)
PRO: The major cloud storage providers offer robust, zero-trust architectures to protect your data from unauthorized access.
CON: Special steps are required to protect your data if it is being synchronized to more than one computer. See the section below for more information.

6.2.3.1. Using Cloud Storage to Access Personal Data from Multiple Computers

Cloud storage providers allow you to synchronize your files to more than one computer, if you install their desktop sync client on all computers in question. This approach makes it possible to access your personal data from multiple computers. (But special precautions are needed; see below.) The setup steps are:

  1. Set up a personal dashboard on cloud storage, using the steps described above.
  2. Install the desktop sync client on a second computer. Configure the sync client to use the same cloud storage account as the first computer, and to run each time you log in.
  3. Wait for the sync client to copy all files down from the cloud to this second computer. Find the directory containing your personal data; it will include files like state, pspdash.ini, and global.dat.
  4. Install the Process Dashboard on this second computer. When it asks for the location of your personal data, provide the path to the directory you found in the previous step.
  5. Repeat steps 2-4 for other computers as desired.
IMPORTANT:  You must use extreme caution when using this technique.

When the personal Process Dashboard is running, it expects to have exclusive control over the files in your data directory. (It does not expect those files to be changed by any other program, including the sync client.) To ensure this exclusive control, it locks a file in your data directory on startup, and releases the lock on shutdown. Unfortunately, that lock doesn't work across the cloud storage boundary. As a result, the dashboard can't stop you from opening your personal data on two computers at once.

If you open your personal Process Dashboard on two computers at once, your data is almost certain to be corrupted. The dashboards on each computer will be writing files, each thinking they have exclusive control over the data. One is likely to blindly overwrite changes written by the other. Even worse, if a file is modified in both places at about the same time, the sync client will flag a conflict and create multiple copies of the conflicting file. The dashboard cannot resolve those conflicts (and neither can you).

To avoid these problems, you must faithfully follow the steps below each time you want to change computers where the dashboard is running:

  1. Close the Process Dashboard on the first computer. Wait for all windows to close.
  2. Ensure the sync client on the first computer is active, and wait for it to publish all files to the cloud.
  3. Go to the computer where you'd like to run the Process Dashboard next. Ensure its sync client is active. Wait for it to copy all files down from the cloud.
    • Note that sync operations typically happen in the background with low priority, and there often isn't an explicit way to force a sync to occur.
    • Your sync client may claim that all files are up-to-date, even when new files are waiting in the cloud. Waiting 5 minutes or so is a good precaution.
    • If you cannot wait, take a look at the log.txt file in your data directory. If its timestamp reflects the time you closed the dashboard on the first computer, and your sync client says files are up-to-date, you're safe to proceed.
  4. Open the Process Dashboard on the second computer. Do a quick review to make sure data is as you expect (correct task selected, recent time log entries in place, etc.)

If you only move between computers infrequently, you can follow these instructions fairly easily by keeping your sync client actively running everywhere, closing the Process Dashboard when you're not using it, and being very deliberate about tracking the computer where the dashboard is currently running.

If you're in the habit of moving between computers frequently, the risk of accidentally corrupting your personal data will grow. If you're unable to follow the steps above faithfully, you should consider limiting your dashboard usage to a single computer, or moving your data to an Enterprise Server as described below.

Note: The precautions in this section only apply to the personal Process Dashboard, not to the Team Dashboard. The Team Dashboard can be configured to support cloud-based usage from multiple computers simultaneously.

6.2.4. Process Dashboard Enterprise Server

The Process Dashboard Enterprise Server was purpose-designed to provide specialized storage for team and personal data. It is optimized for fast, reliable access, and eliminates many of the challenges described above. The general steps for using the Enterprise Server are:

  1. Obtain an account on a Process Dashboard Enterprise Server.
    • If many people in your organization use the Process Dashboard, your organization can purchase a license to run the server in-house.
    • For personal use, or use by a small team, monthly subscriptions are available.
  2. Log in to the Enterprise Server in your web browser. After successfully logging in, the main home page is the "My Datasets" view.
  3. Click the "Process Dashboard" link on the "My Datasets" page. This will download a small file with instructions to launch your personal dashboard.
    • Some web browsers will open this file automatically; if your browser does not, double-click the file to open it manually.
    • If your computer doesn't know how to open the file, click the link at the bottom of the "My Datasets" page to download and install the Process Dashboard Launcher software.
  4. Your server-based personal dashboard will open.
    • If you don't have any data in the server yet, the dashboard will look for preexisting personal data on your computer, and offer to import it into the server.
  5. You can open your server-based personal dashboard from as many other computers as you like. Just log in to the Enterprise Server through your web browser and click the "Process Dashboard" link on the "My Datasets" page. If you've installed the Process Dashboard Launcher, you can also use its application icon to open your dashboard.

The Enterprise Server provides a number of benefits:

PRO: Your data is safely backed up to the server at all times, and won't be lost if your hard drive crashes.
PRO: You can access your data from any number of different computers (including a mix of Windows / Mac OS X / Linux computers) without worrying about locks or corruption. It is still only possible to have the dashboard open on one computer at a time, but the server enforces that constraint reliably.
PRO: Dashboard operations are not affected by the speed of your network. Startup and shutdown times remain consistent, even over a slow VPN.
PRO: If you need to let a coach or team leader access your data, you can grant them permissions.
PRO: You don't need to manually upgrade the Dashboard when new versions of the software become available. The server administrator can push software upgrades automatically.
PRO: A "time machine" feature makes it possible to see what your data looked like at an arbitrary time in the past. This can assist with postmortem analysis, data recovery, and more.

6.2.5. Changing the Location of Personal Data

To change your data directory between the various file-based location types (local / network / cloud), follow these steps:

  1. Close the dashboard if it is running.
  2. Manually move your data directory to the new location, using an application like File Explorer / Finder / etc.
  3. Run the Process Dashboard installer again. When it asks you for the location of your personal data, enter the path to the new directory location. Then finish the remaining steps in the installer, and let it recreate your shortcuts. This will update your shortcuts to point to the new location.
  4. Use your shortcut to open the dashboard, and make sure your data is present as expected.
    • If the dashboard is completely empty, don't panic. This doesn't mean your data is lost; it just means your shortcut isn't pointing to the correct data directory.
    • Check the location the dashboard is using by choosing "≡ → Help → About Process Dashboard," then clicking on the Configuration tab. Make sure it shows the expected new location. If it's still using the old location, the shortcut you're using didn't get updated by the installer.
    • If the dashboard is using the wrong location, close it and run the installer again to fix the shortcut. If this doesn't help, you can fix the shortcut manually by following these instructions in the FAQ.

If you wish to move your personal data into the Enterprise Server, just use the computer that is currently hosting your data to open your server-based dataset for the first time. The dashboard will see that your server-based dataset is empty, will notice the existing data on your computer, and will offer to migrate the data in automatically.

6.3. Backing up Dashboard Data

The metrics data you collect is very valuable information. Accordingly, the dashboard provides several mechanisms for backing up this information.

6.3.1. Manual Data Backups

At any time, you can manually save a backup of your data by choosing " → Tools → Save Data Backup". This will prompt you for the name of a ZIP file, and will save a full backup of your data to the given file.

Optionally, you can choose to save your data as a "Process Dashboard Backup" file. This format contains the exact same data as the ZIP file, but may be useful in organizations that forbid the attachment of ZIP files to email messages.

Finally, you can choose to save your data as a "Redacted Process Dashboard Backup" file. This format allows you to select various categories of information that should be scrambled or removed from the data backup. This format can be useful if you need to protect the privacy of individuals or if you need to obscure proprietary information. However, some types of data cannot be redacted; so if the original data is highly sensitive, you should still use caution and review the resulting backup carefully before releasing it.

6.3.1.1. Viewing the data in a manual data backup

To view the data in a data backup, choose " → Tools → Open Dataset", and a file chooser window will open. Choose a data backup file in ZIP or PDBK format, and a second Process Dashboard window will open, displaying the data from that file. The data you view in that second window is transient/temporary data extracted from the backup; any changes you make will be discarded when the window is closed.

In addition, the Process Dashboard "Tools for Team Leaders" include a program called the Quick Launcher. You can drag a data backup file onto the Quick Launcher, and it will open a Process Dashboard window displaying the data inside. This functionality works just like the Open Dataset option on the Tools menu, but does not require another Process Dashboard window to be open first.

6.3.1.2. Restoring data from manual data backups

A data backup is just a ZIP file, containing the data in your personal data directory (along with some additional information). If you have lost or corrupted your personal data and you wish to restore your data from a backup, take these steps:

  1. Shut down the dashboard. It is imperative that the dashboard NOT be running while you perform the steps below.
  2. Extract the contents of your data backup file into your personal data directory, overwriting the files that are there.
  3. Restart the Process Dashboard.

6.3.2. Automatic, External Backups

The mechanism described above is very useful for interpersonal communication. But for disaster recovery, it is important to have an automated backup strategy. If your computer and hard drive were to crash, you wouldn't want to discover that your most recent backup was several weeks old.

Thus, the dashboard has a mechanism for making backups on a regular basis. To configure an automatic backup, take these steps:

  1. Click on the menu and choose "Tools → Preferences."
  2. In the User Preferences dialog, select the "Backups" category. A table will be displayed, showing a list of external locations where backups should be saved.
  3. Click the "Add" button to add a new backup location. Specify the full name of a backup ZIP file where you would like data to be saved, then click OK.

Each time the dashboard is shut down, it will create a backup ZIP file and save it to the location you've requested. If you are in the habit of leaving the dashboard running overnight, it will also save this backup each evening between midnight and 1 AM. The backup ZIP file will be overwritten each time, so at any point in time the external backup file will contain a copy of your most recent data.

If you want to keep a history of backup files, include the word %date in the name of your backup file. (Make certain to type this exactly as written: a percent sign followed by the word "date" in all lower case.) The current date (YYYY-MM-DD) will be included in the name of the file, so backups from dates in the past will not be overwritten. This can be particularly useful for the Team Dashboard, as a way to maintain a record of how the team plan has changed over time. If you use this technique, keep in mind that no old backups will be discarded, so the list of backup files could grow very large over time. You may need to visit the directory periodically and purge old backups that are no longer needed.

The backups created by this process are identical to the backups created by the manual "Save Data Backup" operation. Thus, they can be viewed in the Quick Launcher, and the mechanism for restoring from a backup is the same.

6.3.2.1. Additional Uses

Many teams choose to use backup files for a secondary purpose. Specifically, a process coach, team leader, or PSP instructor may need to look at the data for a particular individual, so they can troubleshoot data entry problems or mentor the individual in their process improvement efforts. The automatic external backups and manual data backups provide a simple way to support this particular need.

Accordingly, your team may decide to agree upon a particular network directory, then have each individual save an automatic backup to that directory. This would provide a disaster recovery plan if a team member's computer were to crash. In addition, it could enable your coach or planning manager to examine data for a particular individual if necessary.

If you choose to follow this approach, consideration should be given to data privacy concerns. For example, you might consider configuring the permissions on the given network directory to prevent read access by arbitrary individuals. On the other hand, if your organization follows high-maturity practices and does not abuse personal data for inappropriate purposes, this may not be a significant concern. Each organization must make these decisions based on their organizational climate. If organizational data privacy concerns outweigh the benefits of information sharing, you may wish to lock down the permissions so that data backups can only be read by the individual who created them.

6.3.3. Automatic, Internal Backups

The mechanisms above can be very useful for disaster recovery, such as the loss of your hard drive. But occasionally you may encounter other problems. For example, you might accidentally delete a large portion of your task hierarchy. Or you might encounter a rare bug in the Process Dashboard that corrupts your data. In these cases, by the time you shut down the Process Dashboard, your external backup would already be overwritten with the problem data.

To address these types of problems, the Process Dashboard automatically maintains a set of internal backups that reflect changes made to your data over the past few weeks. Each time the dashboard starts up or shuts down, and at least once daily, the dashboard will zip up the files containing your data. This ZIP file is stored in a "backup" subdirectory underneath your data directory.

If you look in this "backup" directory, you will typically notice many ZIP files. The most recent file is a full backup of your data, similar to a manual data backup. Earlier files are not full backups - they are incremental backups, containing only the files that changed between two points in time.

Incremental backups are not preserved forever. By default, the dashboard will retain backups for three weeks. (This timeframe can be changed via the preferences editor.)

6.3.3.1. Restoring data from automatic, periodic backups

If you decided that your data had been corrupted in some way, and you wanted to restore your data to some earlier point in time, you would follow the steps below. (Make certain you understand these instructions completely before you begin, and use extreme caution when following them; incorrect actions could result in permanent data corruption! Proceed at your own risk.)

  1. Shut down the dashboard. It is imperative that the dashboard NOT be running while you perform the steps below.
  2. View the contents of your "backup" directory, and sort the files so they appear in chronological order. The names assigned to the files are designed to help you perform this sort correctly.
  3. Use a ZIP extraction tool to extract the contents of the most recent ZIP file, placing the files into your data directory. This will overwrite files that are already present in that directory.
  4. Next, extract the second-to-last ZIP file, also placing the results into your data directory, and overwriting files. Continue in this manner, working your way backward through the ZIP files, until you reach the file representing the moment in time you wish to restore to.
  5. At this point, you may restart the dashboard. It should reflect the newly restored data, but please note the following:

6.4. Editing Preferences

The Preferences Editor allows you to alter configuration settings that affect the appearance and behavior of the Process Dashboard. You can open the Preferences Editor by selecting "Preferences" from the " → Tools" menu.

Common preferences are displayed in several categories.

6.4.1. User Interface

Window Title: this field allows you to change the title that appears on the main Process Dashboard toolbar. If you regularly work with more than one Process Dashboard dataset, changing the title of each window can make it easier to tell the datasets apart.

Include in Title: in the personal dashboard, these elements give the option to display dynamic timing metrics in the main window title bar.

Always On Top: If you are running Java 1.6 or higher, this setting will appear, allowing you to request that the Process Dashboard toolbar remain on top of other windows.

System Tray: If you are running Java 1.6 or higher, the dashboard can display an icon in the system tray. A checkbox here allows you to enable or disable this feature. If this feature is enabled, you can also choose how the Process Dashboard should behave when you minimize the main window. If you put a check in the "Minimize to system tray" checkbox, minimizing the dashboard will remove the entry from your application task bar, leaving only the system tray icon. In this mode, double-clicking on the system tray icon will bring the window back.

Translation Support: If your operating system is configured to use a language other than English, and if you (or others) have entered translations for that language, then the Process Dashboard may be able to display some messages in your language. Here, you can configure the extent to which messages will be translated:

Cross-platform theme: On the Windows operating system, the dashboard user interface will use an operating-sytem-native theme by default. If you prefer, you can enable a cross-platform visual theme instead by checking this box.

Use large fonts: On some systems, it is possible to increase the size of the fonts used in the application. Checking this box will increase the sizes of many fonts, which can make the user interface easier to read on high-resolution displays. (Unfortunately, limitations in the Java platform prevent some font sizes from changing.)

Click on script menu: When you click on the script button, it will normally open the script menu. If you would prefer for it to open the default script/form for the current task instead, you can check this box.

Auto-select next task: When you mark a task complete using the completion checkbox, the dashboard will normally select the next task for you. To disable this behavior, uncheck this box.

Hide completed tasks: To reduce clutter in the active task selector, the dashboard moves completed projects and tasks to an "Older Completed Items" submenu. This field allows you to control how old a task will be before it gets moved to the submenu. The default is two weeks, so you can still easily find and revisit tasks you've been working on recently. To move all completed tasks to the submenu, change this setting to 0. To disable this feature entirely, change the value to a very large number like 9999.

6.4.2. Add-ons

The Process Dashboard can read process templates, scripts, tools, extensions, and other modules from various locations. By default, it will find any modules that are placed in the directory where you installed the dashboard. If you and your team members want to use a shared network area for Process Dashboard scripts and templates, you can configure that area on this panel. Just ensure that the check box is enabled, and click the "Add" button to add a new template location.

You may have entries in this list that are related to team projects you have joined in the past. If some of the entries are out of date or describe nonexistent network directories, you can remove them from the list.

If your team is not actively using this feature and your organization's network is slow, you may wish to disable this feature entirely. Just uncheck the box on this panel. However, if you receive an error message the next time the dashboard starts, it may be necessary to reenable this feature.

6.4.3. Backups

The dashboard automatically keeps internal backups of data. On this panel, you can configure how many days worth of backup data should be kept. These internal backups are incremental, so they do not take up much space. As a result, the default value (six weeks) is fairly helpful.

In addition, you can ask the dashboard to make redundant external backups to one or more locations. Just add entries to the table on this preferences panel.

For more information about internal and external backups, see the data backup help topic.

6.4.4. Miscellaneous

Recommend read-only: Sometimes a Team Dashboard is shared by many people who routinely open it. Most of the time, these people may just need to view rolled up team reports. However, the act of opening the dashboard causes the data to be locked; then, another individual who really needs to make changes is told that the data is in use by someone else. To help with this problem, you can check this box for heavily shared team dashboards. Then, each time an individual opens this dashboard, they will see a prompt asking them if they need read access or if they just need to view reports. This allows the "report-only" individuals to open the dashboard without locking it, leaving the lock available to others who need to make changes.

Check for updated software: The dashboard can perform a monthly check to see if a new version of the software is available. If you do not want it to look for updates, remove the checkmark from this box.

Slow network: If your organization has an unusually slow network, or if you connect to team resources over a VPN, you can check this box. The dashboard will optimize some internal operations differently in an attempt to improve performance.

Numeric IP: The Process Dashboard displays some resources in your web browser. Most of the time, these pages are on the same computer where the dashboard is running. But in a small number of special cases, the dashboard is running on one computer and it displays a URL that you can use from another computer. The most common scenario for this is the Team Project Tools page in the Team Dashboard; it displays URLs that you can share with other people so they can join the project or view the plan summary. By default, it will use the name of the hosting computer to build these "shareable" URLs. But if your organization's network is not configured to register these names in DNS, other individuals may find that the URLs don't work. In that case, you can put a check mark in this box, and the dashboard will use the IP address of the hosting computer (instead of its name) to build the shareable URLs.

6.4.5. Advanced

The categories listed above provide access to the most commonly used dashboard settings. However, the dashboard has an extensive collection of other, infrequently used settings. If you need to change one of those other settings, you can add entries to the table on this panel.

For an abbreviated list of advanced settings, see the advanced settings help topic.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

6.4.6. Advanced Configuration Settings

The preferences editor displays several categories of commonly-used user preferences. Most people will find those settings adequate for their needs.

However, the dashboard supports many other configurable parameters. The list below describes a small set of those parameters that some people may find useful.

If you want to configure one of the settings below, open the preferences editor and select the "Advanced" section. Click the Add button to add a parameter, then enter the name setting and the value you wish to configure. Then save the changes. In most cases, you will need to restart the dashboard for your changes to take effect.

6.5. Using the Hierarchy Editor

The Hierarchy Editor is an advanced tool for making manual edits to your project/task hierarchy.

Most people will never need to use the Hierarchy Editor. Instead, they will create projects (either personally or as part of a team), then use the Work Breakdown Structure Editor to edit the components and tasks within those projects.

For advanced users, the Hierarchy Editor is provided as a manual editing tool for:

The hierarchy editor can be opened by selecting the "Hierarchy" option on the Tools menu.

The Hierarchy Editor allows you to create and delete nodes in your project tree. You can create any arbitrary node structure to organize the different types of projects you are working on, and add component templates to the tree from the template files provided.

In this image, some child nodes have already been defined under both "Project" and "Non Project". You can click the "+" and "-" icons to expand or collapse the children under a given node.

6.5.1. The File menu

The File menu provides the choices of Close, Save, and Revert. Their functionality is pretty self-explanatory: Close closes the editor, Save saves the changes to the dashboard project tree, and Revert will revert the project tree back to the state of the last save or to when the editor was opened.

6.5.2. The Edit menu and toolbar

The Edit menu provides some rudimentary editing control on the project tree. It provides the choices of Delete, Rename, Move Up, Move Down, Cut, Paste, Add Node, and Add Template. Several of these choices are duplicated on the Edit toolbar.

6.5.2.1. Deleting, moving, and renaming hierarchy nodes

Delete will allow the deletion of a portion of the project tree. It deletes the selected node and all its children from the tree. Be careful; deleted nodes and projects cannot be revived once you save your changes. Deleted projects will no longer contribute to your historical data. Therefore, you probably don't want to delete projects unless they contain no real data. If you find that many historical projects are cluttering up your hierarchy, your best strategy is to create a node in your hierarchy called "Archived Projects," then use Cut and Paste to move completed projects there.

The Rename option will allow you to rename a node in the the project hierarchy. When you choose this option, the name of the selected node will appear as a text entry. You can type a new name and hit return to finish, or escape to cancel the name change. But note: some nodes cannot be renamed (such as the process elements for Planning, Design, Code, etc). Also, node names cannot contain the '/' character.

Move Up and Move Down alter the relative position of the selected node in the tree. The selected node will still have the same parent, but it will appear earlier or later in the list of children for that parent. This can help you to organize nodes to your liking - for example, to place them in the order you plan to work on them.

Cut and Paste can be used to move a node, component, or project from one part of the tree to another. Simply highlight the item you wish to move, and choose Cut. Then highlight the new parent for the item, and choose Paste. The cut node (and all its children) will be relocated underneath the new parent. You can then use Move Up and Move Down to reposition the node relative to its siblings.

6.5.2.2. Organizing your hierarchy

The Add Node option on the Edit menu allows insertion of nodes into the tree. Nodes created in this way serve two general purposes:

  1. They behave like "folders", which can contain other nodes and/or projects. This allows you to add organization to your work projects.
  2. They can be used to track time for process-less tasks like "reading email." If your employer requires you to track your time for tasks like these, you can create an entire hierarchy of such nodes for time tracking purposes. These nodes will not interfere with your historical PSP component data - they will not contribute toward To Date calculations and they will not appear in PROBE linear regressions.

Actual components themselves generally should not be added in this way, but can be added via Add Template (see below). The Add Node menu brings up a cascading second menu that provides the choices of Above, Below, and As Child. Again, these are pretty self-explanatory: Above will add a node to the tree as a sibling to the selected node, and will place it above the selected node; Below will also add a sibling node, but will place it below the selected node; As Child will add a node as a child of the selected node.

6.5.2.3. Creating components that follow a defined legacy process

The Add Template option on the hierarchy menu allows insertion of a process template into the tree. Use this choice when you are ready to define a component. The Add Template menu brings up a cascading second menu that provides choices among the various defined processes. By default, two simple templates are provided: Generic and Timer. If you have installed the PSP process definitions, you will also see the 7 PSP process levels, along with Rollup PSP Data. If you have installed any other add-on process sets, other choices will appear as well. For more information about the processes and their scripts, see the process scripts help topic.

When you insert a component template into the hierarchy, it will initially have a generic name like "PSP2.1". You should feel free to change its name immediately to something more descriptive. (To make dashboard operation clear, this help document sometimes displays components with names like "PSP0", but such bland component names are neither required nor expected for actual use.)

6.5.3. Process templates

When a process template is added, all the process phase elements that are defined for that process will be automatically added as children.

These process phases cannot be edited in any way (with a couple exceptions). If a process phase is selected and the Edit menu is clicked, the menu will show all entries greyed out and disabled. This is to protect the integrity of the processes themselves.

6.5.4. Processes PSP0 - PSP1.1

PSP processes PSP0 through PSP1.1 do not provide for design or code reviews, as those improvements are introduced in PSP level 2. However, the dashboard will allow you to add design and or code reviews to these low level PSP processes if you choose. If you pick on a component that was defined from the PSP0, PSP0.1, PSP1, or PSP1.1 process templates and then choose the "Add Template" menu you will see Design Review and Code Review choices. Either of these can be added to the process. They will be automatically inserted in the correct places in the process phase order.

Once you insert a Design Review or Code Review phase, it will appear in the process scripts and forms for the component. If you later change your mind and decide you don't want the review phase after all, you can highlight it and choose Delete from the Edit menu.

6.5.5. The PSP3 process

The PSP3 process is a cyclic development process. As such, it provides a basic structure for the whole component and also provides the ability to add development cycles. When a PSP3 process is added to the hierarchy, it will have the basic skeletal structure defined (Planning, High Level Design, High Level Design Review, and Postmortem phases), along with one PSP3 cycle.

Once you decide upon your cyclical development strategy, you should create additional cycles underneath the PSP3 component. Each of these cycles will contain the other PSP3 process phases (Design, Design Review, Code, Code Review, Compile, Test, and Reassessment). The PSP3 cycles are added just like the PSP3 component itself, via the "Add Template" menu. When a PSP3 based component is selected and the Edit menu is chosen, the Add Template menu item will have only one available choice: PSP3cycle. The cycle will be placed appropriately before the Postmortem step. You can input as many cycles as you would like in this manner.

6.5.6. The "generic" process template

Very much of the methodology that is employed by the PSP can be used in other endeavors. Any kind of work that has measurable time, size, and/or defects can probably benefit from a PSP-like process. The generic process template gives estimation, measurement, and defect tracking support for other work efforts.

When you create a component based on the generic process in the hierarchy editor, it will initially contain only a planning phase and a postmortem phase. You can then add additional phases (and give them any names that you want) by selecting the node corresponding to the generic component, then selecting "Generic Phase" from the "Add Template" menu:

The generic process then creates a tailored plan summary form. It allows entry of time and size estimates, and even lets you enter the unit of size measurement. For example, you could run the generic process to measure and track your progress as you write a technical paper. The size unit would end up being something related to the work of writing (perhaps pages). The generic process would capture your productivity rates and allow you to enter defects. If you have installed the add-on with PSP process materials, the Size Estimating Template and PROBE Wizard will also be available to provide support for the estimation process.

6.5.7. The "timer" process script

The timer process allows for estimating and measuring activities that have only a time aspect to them. If you regularly perform some kind of task that pretty much remains the same each time, you could record estimates and times for that task to attempt to provide some engineering discipline.

 

6.6. Localization Tool

The dashboard has many users around the world. To better support all our users, we are currently working to internationalize the dashboard. The Process Dashboard includes a Localization Tool that you can use to translate dashboard messages into your own language. You can open the Localization Tool by selecting "Tools  Localization Tool" from the configuration menu.

(Note that the menu option for the localization tool will not normally appear for English-speaking users.) The Localization Tool is based upon the useful Zaval JRC Editor written by Victor Krapivin and others (http://www.zaval.org/products/jrc-editor/).

The localization tool arranges translation keys hierarchically and displays the resulting tree on the left. Exclamation points indicate keys that still need to be translated. When you select a key in this tree, the right hand side of the screen displays the English message and a place for translation into your native language.

Some translation keys end with the string "_FMT". The English message associated with these keys will contain expressions like "{0}". These translation items are Java MessageFormat strings; at runtime, the "{0}" will be replaced with a dynamically generated value. To translate these items correctly, you will need to understand the syntax of MessageFormat strings. For more information on MessageFormat syntax, visit http://java.sun.com/j2se/1.4.1/docs/api/java/text/MessageFormat.html

Other translations may contain cross-references. A cross-reference is a translation key surrounded by curly braces, with a '$' sign in front; an example would be ${some.other.key}. When the dashboard sees a cross-reference, it looks up the translation described by the named key, and replaces the reference with that translation.

Cross-references are designed to reduce the burden of translating the dashboard, without sacrificing expressiveness. For example, the English word "Plan" may be used in two different places inside the dashboard, but it may have different meanings (for example, in English the word "Plan" might be used as a noun, a verb, or an adjective). In another language, different words might be needed to capture these different meanings. Thus, the dashboard might define the following translation keys:

     Plan=Plan
     Plan_Noun=${Plan}
     Plan_Verb=${Plan}
     Plan_Adjective=${Plan}
This approach has two benefits. If your language, like English, reuses the same word in all these situations, then you will only need to translate the "Plan" key, and the other three keys will follow along automatically. If, however, your language requires different words for one or more of these situations, you can edit the other keys, deleting the cross-reference entirely and entering your translation instead.

After you enter translations, click on the Save icon. Your new translations will take effect the next time you restart the process dashboard.

The localizations you enter will be saved automatically into a file with a name like "pspdash_*.jar". You can locate this file by visiting http://localhost:2468/control/showenv.class. This file is formatted as a Process Dashboard Add-on, and can be easily shared with other dashboard users. Give them a copy of the file and instruct them to save it into the directory where they installed the Process Dashboard, and they can benefit from your translations as well.

If you choose to use the Localization Tool, please consider sharing your translations with the Process Dashboard development team. This will allow users around the world to benefit from your translation efforts. The Localization Tool can share your translations automatically if you give your consent. (Note that automatic sharing will not work if you have to use an HTTP proxy server to connect to the internet. No error message will be displayed in this case. If you would like to share translations, but you are behind an HTTP proxy server, please send email to processdash-devel@lists.sourceforge.net for further instructions.)

6.7. Database Support in the Process Dashboard

From its inception, the Process Dashboard has used a specialized data repository to manage project metrics. Beginning in version 2.0, selected metrics can also be accessed in a relational database via SQL. To enable access to this relational database, choose the "Database" option from the "Tools" menu.

For in-depth documentation on this functionality, including the contents of the database schema, please visit:
     http://www.processdash.com/dbhelp

6.8. Custom JSP Reporting

The Process Dashboard contains an embedded web server for the display of process scripts, reports, charts, and other materials. Beginning in version 2.1, this server is based on the Jetty JSP engine. This makes it possible to develop custom reports using standard Java technologies, and run them against the project data in the Team Dashboard.

For in-depth documentation on this functionality, please visit:
     http://www.processdash.com/jsphelp

6.9. Using Multiple "To Date" Data Sets

By default, the dashboard maintains one set of To Date data, which rolls up data from all of your completed PSP projects. This may not meet your data needs. For example, if you continually work in several different programming languages, you might want multiple, independent sets of To Date data, one for each programming language. "Data Rollup Templates" address this need.

Data Rollup Templates allow filtering of the data that appears on process forms such as the Project Plan Summary. Once you have created a data rollup in your hierarchy, you can choose to view the forms based on all of your PSP related data or just on the subset that you have defined. The Data Rollup Templates can also be used to rollup data from many small PSP-sized tasks up to the project level. It's just a matter of how you define the data rollup filter expression.

6.9.1. Creating Multiple "To Date" Data Sets

Extra To Date data sets are created using the Hierarchy Editor.

You can rename the data set node just like you can a project. Also, the location of the data set itself in the hierarchy is not important. Just place it wherever it seems to fit best to you. For more information on adding nodes and templates and on using the hierarchy editor in general, see the hierarchy editor help topic.

Note - there is always a default rollup, defined automatically by the dashboard, which is called "/To Date/PSP/All". This rollup will not appear in your hierarchy, but its data is available for use by projects in your hierarchy.

6.9.2. Customizing "To Date" Data Sets

When you first create a new To Date data set, it will (by default) be rolling up data from all completed PSP projects. Therefore, the first thing you'll probably want to do is customize the filter which is used to generate the list of projects that it will roll up data from. This is done via data entered in an HTML form, much like the standard process forms.

To access the filtering form, use the task selector to navigate to the To Date data set you have just created. Once there, click the script button and choose "Edit Data Rollup Filter."

The filter form will appear that will let you edit the expression that is used to filter the project list that is used in the data rollup.

Some common filtering criteria are displayed as choices on the form:

You can check the appropriate boxes, and edit the details for each criteria. When you're done, click the "Filter!" button. This button will compute the corresponding filter expression, and put it in the box below. This will also cause the "list of included projects" to recalculate, showing you all the projects in your hierarchy that meet the criteria.

If you feel comfortable with the data expression syntax, you can edit the filter expression directly. After you make changes to the expression, you'll have to move the cursor out of the text area (by hitting TAB or by clicking somewhere on the HTML page background) for the included project list to recalculate.

TIP: If the included project list is empty and you don't think it should be, you may have a syntax error in your filter expression. A syntax error in your expression will essentially be treated the same as the expression "false". Note, however, that an empty included project list does not automatically mean your filter expression syntax is bad - it may be a valid expression, and there just might not be any projects that meet the criteria.

6.9.3. Viewing Rolled Up Data

To view rolled up data, use the active task selector to navigate to a data rollup node, then click the script button and choose the first option. The Data Analysis center will appear - but it will be displaying only data from the projects that you have included in your rollup! In fact, the main "PSP Data Analysis" center which is launched from the configuration menu is nothing more than a view of the rolled up data for the automatic data rollup called "/To Date/PSP/All".

6.9.4. Using Alternate "To Date" Data Sets

Once you have created an additional data rollup set, you will notice that all of your PSP Project Plan Summaries will contain an extra drop-down list. This drop down list is located in the "Project Settings" section of the plan summary form. The drop-down list is labeled "Base 'To Date' PSP data on:", and the drop down list will contain all the PSP data rollup objects you have defined, plus the extra "default" rollup, which is called "/To Date/PSP/All". Choosing a different rollup from this list will cause this project to use that rollup as the basis for data in the "Plan" and "To Date" columns.

TIP: remember that data in the plan column freezes when planning is marked complete, and data in the "To Date" columns freezes when the project is marked complete. Therefore, if Planning and/or the entire project is marked complete when you alter the drop-down, the data in the "Plan" and/or "To Date" columns will not recalculate.

6.10. Making a change to a script

Perhaps a pre-existing process suits you well, but you'd like to make some small tweak to one of the HTML scripts. For example, you might like to add company specific instructions to some of the steps (to run a code analyzer perhaps).

When you're viewing the page in question, you notice it has a URL like:

http://localhost:2468/Project+Path//procID/script.htm

In this example, "procID" is the ID of the process containing the script, and "script.htm" is the name of an HTML script within that process.

Take the following steps:

  1. Choose " → Help → About," and click the "Configuration" tab. One of the paragraphs will state that "add-ons will also be read from the following directory." Find that directory on your computer; it will end with "Templates".
  2. Create a subdirectory within "Templates" with the name that appears in the "procID" space in the example above.
  3. Save the current version of the HTML file to the subdirectory you just created. This can be done by choosing "File Save As..." from within your web browser.
    • Give the file the same name that appears in the URL - in this instance, we would save the file as "script.htm". (Note: if the URL contains a "?" or "#", just use the filename that appears before the "?" or "#".)
    • If your web browser has a feature to save "html only", use it.
  4. Edit it to your heart's content using the HTML editor of your choice.

Now, every time you visit that page, for any project in your hierarchy that uses this process, the dashboard will show you the page containing your custom changes.

6.11. How the Dashboard finds process files

When it starts, the dashboard searches for process files and add-ins and dynamically loads them. Also, every time you request a web page from http://localhost:2468/, the dashboard is using this same search mechanism.

The dashboard searches for files in the following locations, in the following order:

  1. Look first in the directories specified by the add-on search path.
  2. Next, look in any WAR/JAR/ZIP files contained in that directory.
  3. Next, look in any WAR/JAR/ZIP files contained in the parent of that directory.
  4. Next, look in the user-specific application templates directory. (To locate this directory, choose "Help → About Process Dashboard → Configuration." Look for the heading that reads, "Dashboard add-ons will also be read from the following directory.")
  5. Next, look in any WAR/JAR/ZIP files contained in the application templates directory.
  6. If there is a Templates directory underneath the directory where the Process Dashboard is installed, look there: first for the file, then for WAR/JAR/ZIPs containing the file.
  7. Next, look within the WAR, JAR and ZIP files that are present in the Process Dashboard installation directory.
  8. Finally, look inside the Process Dashboard application file. (This file is called "pspdash.jar", and it appears in the Process Dashboard installation directory.)

When looking for a particular file, the dashboard will search in the above locations and stop as soon as it finds a matching file. This means that if you want to customize anything that appears in a process templates directory, you can. Just create your custom version and put it in a location earlier on the search list.

Note: although dashboard add-ons are distributed as ZIP or JAR files, you should refrain from unzipping them. For example, if you were to unzip an add-on in place, it would create a new Templates directory underneath the Process Dashboard installation directory. When you upgrade the dashboard in the future and a new version of the add-on is installed, your unzipped files will be overriding the newly released materials! This will almost certainly cause serious problems, as new and old versions of files will be interacting with each other. It is fine to extract single HTML files from an add-on if you intend to customize that one file. But do not extract files that you don't intend to change, or whose purpose you don't understand.

6.11.1. Sharing changes with team members

If you're working with a team, and everyone on your team would like access to changes you have made to a process script, you can do the following:

  1. Create a directory somewhere out on a shared network drive, called "Templates" (for example: "T:\Common\Our Team Folder\Templates" on a Windows network, or "/usr/shared/OurTeam/Templates" on a Unix network)
  2. Have each person on your team add this directory to their add-on search path.
  3. Put custom versions of files underneath this team templates directory. For example, you could put:
    • WAR files containing custom reports
    • HTML files overriding files that are built into the dashboard
    • LanguageFilters defining custom LOC counters
    • template.xml files defining team processes
    • Data files and HTML scripts/forms supporting those team processes
    and when you make changes to these items, everyone on the team will see them automatically (except as noted below).

6.11.2. Some files are only read at start up

When you change HTML files, everyone will see your changes immediately. The very next time they view the HTML page in question, they will see your changes. Other files, however, the dashboard will only read once. For example, template.xml files, datafiles, and LOC counters will only be read once, when the dashboard starts up. If you make changes to these files, people will have to shut down and restart their dashboard to see your changes.

6.12. Defining a Custom LOC Counter

In the PSP, lines of code (LOC) are often used to measure the size of a software component. To produce a size measurement that is useful for planning and analysis purposes, PSP recommends that you separately account for base, added, modified, and deleted LOC. In addition, it recommends that you exclude comment lines, blank lines, and automatically-generated code from the count.

Although many free and commercial LOC counters are available, they typically only measure total LOC, and they often include comment lines in the counts they produce. For this reason, the dashboard provides a simple LOC counting tool that developers can use to measure base, added, modified, and deleted LOC in a PSP-recommended way.

To properly exclude comments from the count, this LOC counting tool must have a rudimentary understanding of the programming language syntax. Accordingly, the LOC counting tool is prepopulated with several language filters that recognize the syntax of many popular programming languages. The LOC counter can automatically handle files of the following types:

Of course, many other source code languages exist, and you may find yourself needing to count LOC for a language not handled above. Fortunately, the dashboard allows language filters to be defined and loaded dynamically, so you can create your own custom language filters for use with the dashboard's LOC counter.

To create a custom language filter, follow these steps:

  1. Decide what lines of code should be counted
  2. Create an XML definition for your language filter
  3. Save your XML language filter definition
  4. Restart the dashboard

6.12.1. Step 1: Decide what lines of code should be counted

In the PSP, we seek to identify size measures that correlate well to development effort. While LOC is not perfect, we nevertheless want to craft our LOC counting standard so it supports this goal.

The PSP makes several recommendations to help us get started. For example, it recommends that we do not count comments, blank lines, or autogenerated code.

Following this advice, the dashboard's LOC counter automatically ignores lines that contain only whitespace. In Step 2(c) below, you will tell the LOC counter about the comment syntax for your programming language, so it can exclude comments from the count as well.

Autogenerated code can be trickier. But occasionally you may find that a particular type of autogenerated code follows a simple pattern, and can be excluded. For example, it is common for Java IDEs to automatically manage the import statements at the top of the file; if you regularly use that IDE feature, you might choose to exclude import statements from the LOC count.

In addition, be wary that autogenerated code may be present in your source code but invisible to you! Some IDEs (for example, Visual Studio) have been known to attach large headers or footers to a source file, but not display those headers/footers when the file is opened in the IDE. Use a plain text editor like Notepad or Emacs to open several typical source files and see if the contents match your expectations.

Finally, the PSP makes a blanket recommendation: if you aren't certain whether a particular line should be counted, try running your metrics both ways, then see which approach gives you a better correlation between size and effort.

As an example, this technique was used by the dashboard development team to determine that curly braces appearing on their own line usually should not be included in LOC counts of C-style languages. When you think about this, it becomes clear why. Consider the following three code fragments:

  if (test)
    then-clause;  
  else
    else-clause;  
  if (test) {  
    then-clause;  
  } else {  
    else-clause;  
  }
  if (test)
  {
    then-clause;  
  }
  else
  {
    else-clause;  
  }

For the purposes of this discussion, we aren't concerned about which of these fragments is "superior." We just want to think about how we should count the LOC they contain.

As written, the three fragments are semantically equivalent, differing only in the appearance and placement of the curly braces. The bulk of the programming effort will be invested in writing the test expression and the two conditional clauses; thus, we would expect these three fragments of code to require virtually identical effort to produce from scratch. To produce the best correlation between size and effort, we would ideally like them to have the same size measurement.

If we were to count every nonblank line as a line of code, then the third code fragment would allegedly be twice the size as the first (allegedly requiring twice as much effort to produce). That is counterintuitive and can be rejected straightaway. However, if we simply ignore any curly brace that appears on a line by itself, we will receive identical LOC counts from all three fragments. In this way, ignoring lone curly braces allows us to correct for varying whitespace styles across a large code base, improving the quality of our size measurements.

Once you have decided which lines of code you wish to count, you're ready for the next step.

6.12.2. Step 2: Create an XML definition for your language filter

The dashboard supports a simple declarative XML syntax for the definition of simple language filters. The discussion below assumes that you are familiar with XML. If this is not the case, please go read a nice tutorial on XML before proceeding!!

Here is an example of an XML description file for the C-style language filter:

<?xml version='1.0'?>

<dashboard-process-template>

   <locFilter id="C" fileSuffixes=".c .cpp .c++ .h .java .cs">
      <commentSyntax beginsWith="//" />
      <commentSyntax beginsWith="/*" endsWith="*/" />

      <stringSyntax delimiter="&quot;" escapeChar="\" />
      <stringSyntax delimiter="&apos;" escapeChar="\" />
      <stringSyntax beginsWith="@&quot;" endsWith="&quot;" mayInclude="&quot;&quot;" />

      <possibleFirstLine>#include</possibleFirstLine>
      <possibleFirstLine>#define</possibleFirstLine>
      <possibleFirstLine>#if</possibleFirstLine>
      <possibleFirstLine>#pragma</possibleFirstLine>

      <ignoreLine equalTo="{" />
      <ignoreLine equalTo="}" />
   </locFilter>

</dashboard-process-template>

The file begins and ends with the header and footer (which appear in blue above). Between the header and footer, any number of LOC filters can be defined through the use of the <locFilter> element (please note that capitalization is significant). Note that if you are also creating custom process definitions, you can combine custom process <template> definitions and custom <locFilter> definitions in the same XML description file, mixing the tags in any order.

Step 2(a): Assign a Unique ID

Each LOC filter must have a unique identifier, which is specified in the id attribute of the locFilter tag. This identifier will be displayed to end users in the LOC report, so it is best to choose a human-readable string. If you reuse the same ID as a LOC filter built-in to the dashboard (i.e., C, Sh, Pascal, SQL, Cobol, or Default), your definition will replace the built-in filter.

Step 2(b): List Typical Filename Suffixes

When you run a LOC comparison report, the dashboard looks at each file being compared and attempts to determine which language filter is most appropriate - a process called "LOC Filter Selection." This process involves several steps, but the first step is to look at the filename. You can use the fileSuffixes attribute to list the filename suffixes (separated by spaces) that are commonly used for source code files in the programming language you are describing.

Step 2(c): Define Comment Syntax

For the purposes of LOC counting, comment syntax is the most important difference between the various language filters. You can declare any number of comment styles for a language filter by creating embedded <commentSyntax> elements.

Each <commentSyntax> element must have a beginsWith attribute, indicating the string of characters that begins a comment. An endsWith attribute can also be specified, indicating the sequence of characters that ends the comment. If no endsWith attribute is given, the "end-of-line" character will be assumed; thus, single-line comment styles can be specified simply by a beginsWith attribute.

If your programming language has blocks of auto-generated code that begin with a distinctive sequence of characters, you may be able to use a <commentSyntax> element to describe them. Any matching blocks will be excluded from LOC counts along with the other comments in the file.

Technically, you could choose not to list any <commentSyntax> elements. The resulting LOC filter would describe a language without comments, or alternatively, a language where comments are included in LOC counts. The "Default" filter is a preinstalled example of this.

Step 2(d): Define String Literal Syntax

The LOC counter is primarily focused on identifying comments so those can be excluded from the count. However, there are occasions when a comment indicator can appear inside a string literal. Here is an example taken from a C program:

  printf("Visit http://example.com/ for more information");

In this line of code, the "//" that appears inside the string literal could be mistaken as the start of a single-line comment, which would prevent any subsequent changes on the line from being considered toward the "modified" count. To avoid this type of mistake, you can tell the LOC counter about the syntax for string literals in your programming language.

You can declare any number of string literal styles for a language filter by creating embedded <stringSyntax> elements. Each <stringSyntax> element must have one of the following:

An escapeChar attribute can optionally be specified, indicating a character (such as \) that is used to escape the following character inside the string.

In addition, a mayInclude attribute can optionally be specified to indicate a sequence of characters that are treated specially within the string literal and which should not signal the end of the string. A common example would be doubled-up delimiter characters, which occur in languages like Visual Basic. If your language allows the newline character to appear within a string literal, you can specify "\n" for this attribute; otherwise the LOC counter will treat the end-of-line as the end of an improperly formed string constant.

These attributes provide support for the vast majority of string literal constructs in the most popular languages. Some languages (for example, Perl) provide very flexible string quoting mechanisms that would become extremely complex to recognize without implementing a parser. If you use a language whose string rules cannot be expressed with this XML syntax, keep in mind that the LOC counter will not be able to detect comment indicators that appear within the more complex string constructs. Fortunately, this is fairly rare; however, you should be wary of comment indicators that appear inside string literals, and adjust your LOC counts if you know these are present.

Step 2(e): List Possible First Lines (Optional)

During the "LOC Filter Selection" process, if a file is encountered whose filename doesn't match any recognized suffix, the dashboard will look inside the file in an attempt to guess which language it contains.

Since it is very common for source code files to begin with a descriptive comment, the dashboard will first check to see if the first non-whitespace characters in the file appear to match any known comment syntax (specified via a <commentSyntax> element as described above).

If a particular file under comparison does not have a recognizable file suffix and does not begin with a recognizable comment, the "LOC Filter Selection" process might still be stumped. In that case, you can optionally list other strings that could legally appear at the beginning of a source code file. This is done by including embedded <possibleFirstLine> elements. If the first line of the file begins with one of these strings, this LOC filter may be considered a match.

<possibleFirstLine> elements are completely optional; most language filters will not need to use them. In particular, remember that these are only used as a last resort; normally files will be categorized based on their filename suffix.

Step 2(f): List Ignored Lines (Optional)

In addition to comments, there may be other lines of code that you wish to exclude from LOC counts. These can be specified by creating embedded <ignoreLine> elements. Each <ignoreLine> element must have exactly one of the following attributes:

The lines of code in the file will be matched against these patterns; if any pattern matches, the line will not be included in LOC counts. Keep in mind that lines are tested one at at time; therefore, multiline patterns are not supported.

6.12.3. Step 3: Save your XML language filter definition

Once your XML language filter definition is complete, it is time to save it somewhere where the dashboard can find it. Follow these steps:

  1. Choose " → Help → About," then click the "Configuration" tab. Just above the list of add-ons, a paragraph will tell you where the Process Dashboard is installed. Find that directory on your computer. It should contain a small number of files, including one called "pspdash.jar".
  2. Underneath this directory, create a subdirectory called "Templates".
  3. Save your XML language filter definition in that Templates directory. Important: you must give your XML language filter definition a filename ending with "-template.xml" to signal to the dashboard that the file contains dashboard metadata. If you do not choose a filename ending with "-template.xml", your language filter definition will be ignored.

This is the simplest place to put your XML language filter definition. Of course, if you want to share your LOC counting filter with team members, you may want to put it somewhere else. See the section on how the dashboard finds process files for more information. Keep in mind that the dashboard will search for "-template.xml" files in the "Templates" directories only - subdirectories will not be searched.

6.12.4. Step 4: Restart the dashboard

Once your XML language filter definition is in place, it is necessary to shut down the dashboard and restart it for the new filter to be found. Once found, it will automatically be included in the "LOC Filter Selection" process when a LOC report is run. If you make changes to your LOC filter definition, a dashboard restart will also be required for your changes to take effect.

6.13. Defining legacy process templates for use in the Process Dashboard

6.13.1. Important Note

The instructions below describe how to build customized XML process templates. But these templates are now considered legacy functionality, because they have a number of serious limitations. For example, they cannot be modified without invalidating historical data, and they can only be used for personal work, not by teams.

Fortunately, custom workflows in team/personal projects do not have those limitations. Accordingly, users are strongly encouraged to create a team or personal project, then use workflows in their WBS to define custom processes.

The instructions below are provided for long-time users who need to maintain their legacy XML process templates.

The dashboard has been designed from the ground up to support custom processes. The PSP scripts and forms that you see are not hard-coded into the tool. Instead, they are dynamically loaded from simple HTML and text files. Thus, it is possible to create your own custom process scripts, forms, and data that will be dynamically integrated into the dashboard.

The dashboard process definition framework provides a great deal of power for process automation. To create a custom personal process definition, just follow these steps:

  1. Identify your process structure
  2. Create an XML definition for your process
  3. Save your XML process descriptor
  4. Restart the dashboard

6.13.2. Step 1: Identify your process structure

What steps do you want to include in your process? The standard PSP0 process, of course, includes the phases Planning, Design, Code, Compile, Test, and Postmortem. Think through your process and decide upon the list of phases that your process will include.

Think this through carefully. Remember how you had to restart your "To Date" data when you graduated from PSP1.1 to PSP2? The same truth applies here. Once you have defined a custom process and used it in the dashboard, even slight changes to the process definition will invalidate all your historical data. In fact, once you create a process definition and use it to perform a project, you can no longer even change the names of the phases without losing historical data.

If your process definition is still immature and evolving, it is probably better to use the Generic process for a while. As you begin creating your own custom process definitions, the flexibility of the generic process will allow you to radically change your process from one task to the next in response to process improvement proposals. Once you decide upon and finalize the list of phases in your process, you are ready to begin using a custom process.

Some guidelines to consider as you identify your process phases:

Don't subdivide things too far. Take a look at the PSP processes, for example. They will define a single phase like Planning, even though it contains several different steps (obtain requirements, make size estimate, make resource estimate, create schedule, etc.). The PSP process definition does not break each of these steps into its own phase! Herein lies the difference between a phase and an activity. By carefully defining the high level phases in the process, Watts Humphrey was free to incorporate process improvements simply by altering the set of activities in each phase. Remember also that when you enact your process, you will have to collect time and defect data with phase-level granularity. If you break your process up into a zillion tasks that each take only a minute, you will go crazy just trying to log time accurately. Therefore, if your custom process contains more than a dozen phases, it's most likely subdivided too far.

Here's another way to think about this: the dashboard is a useful tool because it seamlessly integrates your process script and your metrics collection framework. By tying the two things together, you have all the tools you need at your fingertips to enact the process. But as a result, this means that when you create a custom dashboard process, you must understand and think about your custom process from both perspectives. Many people are able to easily think up a script for their process, but you must also take time to think about your metrics collection framework. The phases you choose in your custom process define the "buckets" in your metrics collection framework. If you choose these phases thoughtfully, it will allow room for your process to grow and improve. On the other hand, if you choose phases that correspond one-to-one with activities in your process, you may find that your custom process quickly becomes obsolete.

Choose abbreviations for long phase names. When you write your process script, you may have phases with verbose names like "High Level Design Review". Realize that if you use this long phase name, the main dashboard window is going to stretch halfway across your screen whenever you navigate to that phase. An abbreviation like "HLD Review" may be more appropriate. You can still refer to the phase by its unabbreviated name when you create your HTML process scripts and forms.

Include Planning and Postmortem phases. In his book, Watts Humphrey encourages you to always include these phases in any process you define. The planning phase serves an obvious purpose of estimating size, cost, schedule, risk, etc. The postmortem phase allows you to ensure accurate collection of data and capture process improvement proposals.

6.13.3. Step 2: Create an XML definition for your process

The dashboard understands a process structure that is described in XML format. The discussion below assumes that you are familiar with XML. If this is not the case, please go read a nice tutorial on XML before proceeding!!

Here is an example of an XML description file for a PSP0 process:

<?xml version='1.0'?>

<dashboard-process-template>
   <template name="PSP0" defectLog="true">
      <phase name="Planning"   type="plan"/>
      <phase name="Design"     type="dld"/>
      <phase name="Code"       type="code"/>
      <phase name="Compile"    type="comp"/>
      <phase name="Test"       type="ut"/>
      <phase name="Postmortem" type="pm"/>
   </template>
</dashboard-process-template>

The file begins and ends with the header and footer (which appear in blue above). Between the header and footer, any number of process templates can be defined. (The file above only defines one process template.)

A process definition begins with the <template> tag and ends with </template>. The template tag must have a "name" attribute, and all of the processes you define must have unique names. Also, template names cannot contain the "/" character. If you will be collecting defects with your process, you should include the "defectLog" attribute as shown above (and remember that XML is case-sensitive, so "defectlog" will not work).

Between the <template> tags, list the phases in order. Each phase is described with a <phase> tag. The phase tag must have a "name" attribute, and all of the phase names must be unique. As was true of template names, phase names cannot contain the "/" character. The phase type can optionally be specified with the "type" attribute. The following is a list of valid types that can be specified:

Phase types are not required. Even if you specify the phase type for one phase, you can omit it for others. If you do specify phase types, the dashboard will be able to intelligently calculate metrics like Yield, A/FR, and Defect removal efficiency.

6.13.4. Step 3: Save your XML process descriptor

Once your XML process descriptor is complete, it is time to save it somewhere where the dashboard can find it. Follow these steps:

  1. Choose " → Help → About," and click the "Configuration" tab. Just above the list of add-ons, a paragraph will tell you where the Process Dashboard is installed. Find that directory on your computer. It should contain a small number of files, including one called "pspdash.jar".
  2. Underneath this directory, create a subdirectory called "Templates".
  3. Save your XML process descriptor in that Templates directory. Important: you must give your XML process descriptor a filename ending with "-template.xml" to signal to the dashboard that this is an XML process template descriptor. If you do not choose a filename ending with "-template.xml", your process descriptor will be ignored.

This is the simplest place to put your XML process descriptor. Of course, if you want to share your process with team members, you may want to put it somewhere else. See the section on how the dashboard finds process files for more information. Keep in mind that the dashboard will search for "-template.xml" files in the "Templates" directories only - subdirectories will not be searched.

6.13.5. Step 4: Restart the dashboard

Once your XML process descriptor is in place, it is necessary to shut down the dashboard and restart it for the new process to be found. Once found, you will automatically have:

6.13.6. Advanced/Optional: Defining HTML scripts

Defining HTML scripts for your process and its phases is easy to do. Here is an example of an XML description file for a PSP0 process, with HTML script definitions added. The text in blue is identical to the example shown in step 2 above; the black text illustrates the additions:

<?xml version='1.0'?>

<dashboard-process-template>
   <template name="PSP0" defectLog="true"
             htmlID="top">

      <html ID="sum"
            title="Project Plan Summary"
	    href="dash/summary.shtm"/>
      <html ID="top"
            title="PSP0 Process Script"
	    href="psp0/script.html"/>
      <html ID="plan"
            title="PSP0 Planning Script"
	    href="psp0/planning.html"/>
      <html ID="dev"
            title="PSP0 Development Script"
	    href="psp0/develop.html"/>
      <html ID="pm"
            title="PSP0 Postmortem Script"
	    href="psp0/postmort.html"/>

      <phase name="Planning"   type="plan"
             htmlID="plan"/>
      <phase name="Design"     type="dld"
             htmlID="dev"/>
      <phase name="Code"       type="code"
             htmlID="dev"/>
      <phase name="Compile"    type="comp"
             htmlID="dev"/>
      <phase name="Test"       type="ut"
             htmlID="dev"/>
      <phase name="Postmortem" type="pm"
             htmlID="pm"/>
   </template>
</dashboard-process-template>

So right after your <template> tag, you list all the HTML pages that you want to appear on the script button's drop down menu, in order. (Note that you don't have to list every HTML page used by your process - just the ones that you want to appear on the script button menu.) For each HTML page, you state:

Then you (optionally) associate these HTML pages with the phases by adding an htmlID attribute which names the ID of the HTML page associated with that phase. You can have HTML pages that aren't associated with any phase, and vice versa. You can even associate an HTML page with the <template> tag, as shown above; then any phases which don't specify an htmlID of their own will inherit that htmlID.

Of course, before the dashboard will be able to open any of these HTML pages, you must actually create them and place them appropriately underneath the "Templates" directory. You can use your favorite HTML editor to create these pages; if you have a program like Microsoft Word, it is capable of saving files in HTML format. Since the hrefs are interpreted relative to the "Templates" directory, for this example we would need to create a directory called "psp0" underneath the "Templates" directory, and put files in that directory called "script.html", "planning.html", "develop.html", and "postmort.html".

The file "dash/summary.shtm" is special. It names an HTML file that is shipped with the dashboard. When you don't name any HTML files for your process, the dashboard assigns it "dash/summary.shtm" by default. (This is why you could create an XML template file, specify no HTML files, and still get a project plan summary form automatically.) However, as soon as you include <html> tags in your template definition, the dashboard will no longer automatically assign it "dash/summary.shtm", so you must manually include this entry to ensure that you can view a plan summary form for your process.

6.13.7. Additional Advanced Topics

That should be enough to get you started! For more advanced questions, send email to the development team at processdash-devel@lists.sourceforge.net.

6.14. Task Status API

Name taskStatus
URI /api/taskStatus
URL Example http://localhost:2468/api/taskStatus
Description This API makes it possible to retrieve and set the completion date for a particular task.
Context Personal dashboard only, for a leaf task within the hierarchy
HTTP Methods
  • GET - retrieves the current completion date for a leaf task
  • POST - sets or clears the completion date for a leaf task

6.14.1. HTTP GET

Retrieves the current completion date for a task in the personal hierarchy.

By default, invocations of this GET method will be rejected unless they originate from the same computer where the Process Dashboard is running. This policy can be disabled by setting an advanced preference with the name api.taskStatus.allowRemote and the value true.

6.14.1.1. Request Parameters

FieldTypeDescription
hierarchyPath (optional) String The full dashboard hierarchy path to the project and component/task whose status should be returned. (Example: /Project/My Team Project/Component A/Code).

The path must name a leaf task in the dashboard hierarchy.

This parameter is optional. If omitted, the default is to use the task which is currently selected in the Process Dashboard toolbar.

6.14.1.2. Errors

Error CodeDescription
personal-only Returned if this request is made against a team dashboard instead of a personal dashboard.
no-such-task The hierarchyPath parameter names a task that does not exist in the dashboard hierarchy.
not-leaf-task The hierarchyPath parameter names a task that has children (rather than a leaf task).

6.14.1.3. Results

application/json - successful completion examples

{
    "stat" : "ok",
    "taskPath" : "/Project/Team Project/Component/Task 1",
    "completionDate" : "2015-01-02 13:45:56"
}
{
    "stat" : "ok",
    "taskPath" : "/Project/Team Project/Component/Task 2",
    "completionDate" : null
}

application/json - error example

{
    "stat" : "fail",
    "err" : {
        "code" : "no-such-task",
        "msg" : "The task '/Foo/Bar/Baz' was not found."
    }
}

6.14.2. HTTP POST

Sets or clears the completion date for a task in the personal hierarchy.

By default, invocations of this POST method will be rejected unless they originate from the same computer where the Process Dashboard is running. This policy can be disabled by setting an advanced preference with the name api.taskStatus.allowRemote and the value true.

6.14.2.1. Request Parameters

FieldTypeDescription
hierarchyPath (optional) String The full dashboard hierarchy path to the project and component/task whose completion status should be altered. (Example: /Project/My Team Project/Component A/Code).

The path must name a leaf task in the dashboard hierarchy.

This parameter is optional. If omitted, the default is to use the task which is currently selected in the Process Dashboard toolbar.

completionDate Date The date to store for the given task. The following legal values are recognized:
  • null - to mark this task incomplete
  • now - to mark this task complete with the current date/time
  • YYYY-MM-DD HH:MM:SS - the completion date/time to store for this task, recorded in the local time zone.

6.14.2.2. Errors

Error CodeDescription
personal-only Returned if this request is made against a team dashboard instead of a personal dashboard.
no-such-task The hierarchyPath parameter names a task that does not exist in the dashboard hierarchy.
not-leaf-task The hierarchyPath parameter names a task that has children (rather than a leaf task).
date-not-editable The completion date cannot be set for the given task. For example, this could occur if the given task is the root node of a team project, for an individual who has not been assigned any tasks. Because no tasks are present, the node happens to be a leaf in the dashboard hierarchy; but it still represents a container for future project work and cannot be marked complete itself.
parameter-invalid The completionDate parameter is not in the expected format.

6.14.2.3. Results

application/json - successful completion

{
    "stat" : "ok"
}

application/json - error example

{
    "stat" : "fail"
    "err" : {
        "code" : "parameter-invalid",
        "msg" : "The 'completionDate' parameter value 'foo' is not a valid date",
        "param" : "completionDate"
    }
}

6.15. Size Metrics API

Name sizeMetrics
URI /api/sizeMetrics
URL Example http://localhost:2468/api/sizeMetrics
Description This API makes it possible to store new actual size measurements into the Size Inventory Form for a team project.
Context Personal dashboard only, within the context of a Team Project
HTTP Methods
  • POST - adds a new row of actual size data to the Size Inventory Form

6.15.1. HTTP POST

Adds a new row of actual size data to the Size Inventory Form.

This API can be called multiple times in succession to add multiple new rows to the Size Inventory Form. (Note: when multiple rows like these are present for a particular WBS item, they will be summed when the data is rolled up to the team level.)

At the moment, this API only supports size metrics recorded by an individual onto the Size Inventory Form of a team project. Other size metric types, such as the Size Estimating Template of a PSP task, are not currently supported. In addition, starting with dashboard version 2.5.3, team projects store size data in the WBS rather than the Size Inventory Form; such projects are not supported by this API either.

By default, invocations of this POST method will be rejected unless they originate from the same computer where the Process Dashboard is running. This policy can be disabled by setting an advanced preference with the name api.sizeMetrics.allowRemote and the value true.

6.15.1.1. Request Parameters

FieldTypeDescription
hierarchyPath (optional) String The full dashboard hierarchy path to the project and component/task where the size metric should be stored. (Example: /Project/My Team Project/Component A/Code).

The path must name a component or task within a team project. The root node of the team project is not allowed. If the personal project plan contains "PSP Task" objects, paths to/within those PSP task objects are also not allowed. Any other WBS item path is an acceptable target. (If in doubt, you can view a complete list of valid paths for a given team project by opening the Size Inventory Form and scrolling to the bottom of the page.)

This parameter is optional. If omitted, the default is to use the path of the WBS task which is currently selected in the Process Dashboard toolbar. (But note: that currently selected task must also meet the criteria described above for the size measurement to be stored successfully.)

description (optional) String A short, human readable description of this size measurement, which will be written into the Description field of the new Size Inventory Form row. (Example: "Perforce Changelist #1234")
sizeUnits (optional) String The size units for this size measurement. The value must be a valid size metric as defined in the metrics collection framework used by this Team Project. (For a list of valid values, look at the drop-down list on the "Size Units" field of the Size Inventory Form, and discard the "Inspected *" variants.)

This value is optional; if omitted, the API will assume "New & Changed LOC." (The abbreviation "LOC" can also be used as an alias for this size metric.)

actSize (required) Number The numeric size value which should be stored into the "Actual" column of the Size Inventory Form.
notify (optional) Boolean If true, the Process Dashboard window will display a notification to the user, letting them know that size measurements were added to their Size Inventory Form. They will be able to click on the notification to see an abbreviated version of the Size Inventory Form with the new rows highlighted.

If this API is called several times in rapid succession to add multiple size measures to a particular team project, the user will only see one notification summarizing all of the rows that were added.

6.15.1.2. Errors

Error CodeDescription
unsupported-target-path The hierarchyPath parameter (or the current task path, if that parameter is missing) does not point to a legal node in a team project. See the requirements described in the "Request Parameters" table above.
parameter-missing The required actSize parameter was not supplied
parameter-invalid One of the parameters does not have a valid value:
  • The actSize parameter is not a valid number
  • The sizeUnits parameter does not name a valid size metric in the metrics collection framework for this team project

6.15.1.3. Results

application/json - successful completion

{
    "stat" : "ok"
}

application/json - error example

{
    "stat" : "fail"
    "err" : {
        "code" : "parameter-invalid",
        "msg" : "The 'actSize' parameter value 'one' is not a valid number",
        "param" : "actSize"
    }
}