Stephens Rod

Beginning Software Engineering


Скачать книгу

these three tools can help you study the project’s total duration, look for potential bottlenecks, and schedule the project’s tasks.

      However, you can’t understand how tasks fit into a schedule unless you know how long those tasks will take, so the last sections about project management deal with predicting task lengths and with risk management.

       PERT Charts

      A PERT chart (PERT stands for Program Evaluation and Review Technique) is a graph that uses nodes (circles or boxes) and links (arrows) to show the precedence relationships among the tasks in a project. For example, if you’re building a bunker for use during the upcoming zombie apocalypse, you need to build the outer defense walls before you can top them with razor wire.

      PERT charts were invented in the 1950s by the United States Navy. They come in two flavors: activity on arrow (AOA), where arrows represent tasks and nodes represent milestones and activity on node (AON), where nodes represent tasks and arrows represent precedence relations. Activity on node diagrams are usually easier to build and interpret, so that’s the kind described here.

      To build an AON PERT chart, start by listing the tasks that must be performed, the tasks they must follow (their predecessors), and the time you expect each task to take. (You can also add best-case and worst-case times to each task if you want to perform more extensive analysis of the tasks and what happens when things go wrong.)

      Note that you don’t need to include every possible combination of predecessors. For example, suppose task C must come after task B, which must come after task A. In that case, task C must come after task A, but you don’t need to include that relationship in the table if you don’t want to. The fact that task C must come after task B is enough to represent that relationship. However, you also don’t need to remove every unnecessary relationship. Those extra relationships won’t hurt anything.

      If you like, you can add a Start task as a predecessor for any other tasks that don’t have predecessors. Similarly, you can add a Finish task for any other tasks that don’t have successors.

      To make rearranging tasks easy, make an index card or sticky note for each task. (You can draw the chart on a piece of paper or with a drawing tool, but index cards and sticky notes make it easy to shuffle tasks around if necessary.) Include each task’s name, predecessors, and expected time.

      Then to build the chart, follow these steps:

      1. Place the Start task in a Ready pile. Place the other tasks in a Pending pile.

      2. Position the tasks in the Ready pile in a column to the right of any previously positioned tasks. (The first time through, the Ready pile only contains the Start task, so position it on the left side of your desk.)

      3. Look through the tasks in the Pending pile and cross out the predecessors that you just positioned. (Initially that means you’ll be crossing out the Start task.) If you cross out a card’s last predecessor, move it to the Ready pile.

      4. Return to step 2 and repeat until you have positioned the Finish task.

      PUZZLING PREDECESSORS

      If you don’t move any tasks into the Ready pile during step 3, that means the tasks have a predecessor loop. For example, task A is task B’s predecessor and task B is task A’s predecessor.

      For example, at my college, you needed to pay registration fees before you could get your student ID; you needed a student ID to get financial aid checks; and you needed financial aid checks to pay registration fees. (At least, you probably do if you need financial aid.) You needed to fill out extra paperwork to break out of the predecessor loop.

      After you finish positioning all of the cards, draw arrows representing the predecessor relationships. (You may want to use a dry-erase marker so that you can get the arrows off your desk later.)

      At this point, you have a chart showing the possible paths of execution for the tasks in the project.

       EXAMPLE Building a PERT Chart

      The steps for building a PERT chart are a bit confusing, so let’s walk through an example that creates a PERT chart for a project that builds a bunker to protect you and your video games in case of a zombie apocalypse. (The U.S. Strategic Command actually developed a plan for fighting off a zombie apocalypse as part of a training exercise. You can read it at i2.cdn.turner.com/cnn/2014/images/05/16/dod.zombie.apocalypse.plan.pdf.)

Start by building a table that lists the tasks, their predecessors, and the times you expect them to take. Table 3.1 shows some of the tasks you would need to perform to build the bunker. To keep things simple, I’ve omitted a lot of details such as installing sewer lines, building forms for pouring concrete, and obtaining permits (assuming the planning officials haven’t been eaten yet).

Table 3.1 Tasks for a Zombie Apocalypse Bunker

After you’ve built the task table, create index cards for the tasks (or be prepared to draw them with a drawing tool). Figure 3.1 shows what the card for task I might look like.

Figure 3.1 Each task’s card should hold its name, duration, and predecessors. You’ll fill in the total time later.

      Next, start working through the four steps described earlier to arrange the cards. This is a lot easier to understand if you go to the trouble of creating index cards or sticky notes instead of trying to imagine what they would look like. Trust me. If you found the steps confusing, make the cards.

      1. Place the Start task in a Ready pile. Place the other tasks in a Pending pile.

Figure 3.2 shows the initial positions of the cards. (I’ve omitted the task names and abbreviated a bit to save space.)

Figure 3.2 Initially only the Start task is in the Ready pile.

      2. Position the tasks in the Ready pile in a column to the right of any previously positioned tasks. (The first time through, the Ready pile contains only the Start task. Just position it on the left side of your desk.)

      3. Look through the tasks in the Pending pile and cross out the predecessors that you just positioned. (Initially, that means you’ll be crossing out the Start task.) If you cross out a card’s last predecessor, move it to the Ready pile.

Referring to Figure 3.2, you see that tasks A, F, and H have the Start task as predecessors. In fact, the Start task is the only predecessor for those tasks, so when you cross out the Start task, you move tasks A, F, and H into the Ready pile. Figure 3.3 shows the new arrangement.

Figure 3.3 After one round, the Start task is positioned and tasks A, F, and H are in the Ready pile.

      4. Return to step 2 and repeat until you have positioned the Finish task.

To do that, position tasks A, F, and H because they’re in the Ready pile. Then cross them out for any tasks that are still in the Pending pile. When you cross out those tasks, task B loses its last predecessor so move it into the Ready pile. Figure 3.4 shows the new arrangement.

Figure 3.4 After two rounds, the Start task and tasks A, F, and H are positioned. Task B is in the Ready pile.

      5. Return to step 2 and repeat until you have positioned the Finish task.

This time position task B and remove it from the remaining tasks’