Like Open Workbench and Microsoft Project, Project Control Panel (PCP) is an example of a project management tool.
Here's a screen shot of Open Workbench:
A project management tool allows project managers to
1. Specify the resources needed by a project.
2. Specify the project tasks that need to be executed.
3. Generate a schedule for the project.
A project consists of resources and tasks.
Resources can be labor, equipment, or material. A resource has a name and a daily cost.
A deliverable is a file (.uml, .doc, .java, .jar, .xml, etc.) or a presentation.
A task has a name, description, duration, start time, end time, percent completed, a list of deliverables, and a list of required resources.
A task, T, has a list of predecessor tasks that must be completed before the task can begin and a list of successor tasks that can't begin until T is completed. Note that if T1 is a predecessor of T2, then T2 is a successor of T1. Also note that if T1 and T2 are sub-tasks (see below), then they both must be sub-tasks of the same parent task.
Example:
In this diagram we have:
task4.predecessors = {task1, task2, task3}
task4.successors = {task5, task6, task7}
Note that the diagram above contains implicit forks and joins. Here's the actual diagram:
There are two types of tasks: simple and composite. (Consider using the Composite Design Pattern for this.)
A composite task has sub-tasks. In particular, a composite task has a start sub-task, and a list of final sub-tasks. Of course a sub-task can be simple or composite.
We can organize the sub-tasks of a composite task into a graph called a workflow.
Workflows are like activity diagrams but without loops, guards, effects, or choice points. Forks and joins are implicit in workflows.
Example:
In this example task1, 2, 3, and 4 are possible sub-tasks of some parent task, while sub-tasks 1, 2, 3, and 4 are sub-tasks of task2.
The project itself can be viewed as a single composite task called main with no predecessors of successors:
The duration of a task is the number of days needed to complete the task. In the case of a simple task this is estimated when the task is created. In the case of a composite task it is computed by adding the durations of all sub-tasks on the critical (i.e., longest) path.
The start time of a task is the latest end time of its predecessors. If it has none, then it is the start time of its parent task. If it has none, then the start time is 0.
The end time of a task is its start time plus its duration:
t.endTime = t.startTime + t.duration
This will be the day that any successor tasks can begin.
Example
A schedule is a table. Each row is headed by a day number followed by a list of the simple tasks that will be active that day.
Example
Here is a schedule for the project in the previous example:
Day |
Tasks |
0 |
task1 |
1 |
task1 |
2 |
task1 |
3 |
task2, task3 |
4 |
task2, task3 |
5 |
task2, task4 |
6 |
task2 |
7 |
task2 |
8 |
task2 |
9 |
task2 |
10 |
task2 |
11 |
task2 |
12 |
task2 |
13 |
task5 |
14 |
task5 |
15 |
task5 |
16 |
task5 |
17 |
task5 |
18 |
task5 |
19 |
|
PCP allows project managers to
add resources and tasks to a project.
edit resources and tasks.
view resources and tasks.
save and read projects to a file or database.
generate and display the task schedule.
Save and read projects to a file in ProjectML format, where ProjectML is an XML language you invent for representing projects
Save task schedules in .xls format
Display simple tasks as a directed graph (see my Graphs API for hints on this.)
Allow loops in the workflows. In other words, allow tasks to be repeatable. An example of a repeating task might be "run tests". To do this, you will need to decouple tasks from their predecessors and successors. Consider introducing a new class called something like Job. A job has predecessor and successor jobs as well as a task that will be performed.
Modify the project schedule so that rows are labeled by actual dates rather than day numbers. Allow the project manager to specify the start date from a calendar. Skip over weekends and federal holidays.
Add three JPanels to your GUI: tasks, resources, and schedule. In the tasks panel display all of the tasks using a JTree control. In the resource panel list all of the resources. In the schedule panel display the schedule using JTable. Tasks and resources should be selectable. So when the user selects a task or resource, then selects edit from a menu, automatically the selected task or resource is the one to be edited.
pcp.uml (contains use cases, analysis model, and design model)
pcp.doc (RAD for PCP)
pcp.jar (executable for PCP)
Here are the PCP tasks each team must accomplish by the deadline.