CS 435 - Week 8 Lecture 1 - 2014-03-11 * PLANNING a software project - Jalote Chapter 4 * Jalote's view: planning is THE most important project *management* activity ...and as a general rule/classically, it tends to get short shrift; * Brooks agrees on the important of planning as well -- see MMM Chapter 2's suggested planning heuristic; * 2 basic objectives: * establish reasonable cost, schedule, and quality goals for the project, * to draw out a plan to deliver the project goals * Jalote then defines "project success" to be MEETING the project's cost, schedule, and quality goals; * ...at least, ideally! * one reason for goals? to know when (and even that) you have succeeded...! * another advantage of detailed planning - it allows for more effective/practical monitoring of progress, and of control of the project; * "inputs" to the planning activity? include: * certainly includes the requirements! (I'd think the SRS would be part of this;) * maybe the software architecture, if that is yet known; * "outputs" of the planning activity: * the overall PROJECT MANAGEMENT PLAN document that establishes the project GOALS in terms of cost, schedule, and quality * also DEFINES the plans for managing RISK, MONITORING the project, etc. * the DETAILED PLAN (often ref'd to as the DETAILED PROJECT SCHEDULE), specifying: * the tasks to be performed to meet those goals * WHO will perform them * their SCHEDULE * note that planning can also include identifying HIGH-PRIORITY potential risks, and how they might be mitigated * and it can also include a plan for how the plan will be monitored...! EFFORT ESTIMATION ...if from the requirements specifications, the estimate approach can produce estimates that are within 20% of the actual effort about 2/3 of the time, that's considered "good" for an estimating approach two CATEGORIES of effort estimation approaches: top-down, bottom-up * top-down: try to estimate the project's overall size, and then estimate the effort needed from there; * bottom-up: divide the project into tasks, estimate the effort needed for each task to estimate the overall effort; TOP-DOWN... * figure out the size, determine the effort needed from that; * IF past productivity on similar projects is known, you can use that as the estimation function; IF productivity is P KLOC/PM KLOC = 1000-lines-of-(debugged)-code PM = Person Month then one quick-n-sleazy effort estimate could be: SIZE / P person-months (where SIZE is -- gulp -- 1000-lines-of-code...) * this can only POSSIBLY be reasonable IF the current project is similar in size and type to the set of projects from which the productivity P is derived; * the above is rather limited for the cases it can help with; * a slightly more general function: (that is evidently used at times!) EFFORT = a * (SIZE^b) where a and b are constants determined via regression analysis applied to data about similar projects performed in the past; * Watson and Felix ([81] from 1977) found that, for 60+ IBM Federal Systems Division projects, ranging from 4000- 467,000 lines of *delivered* source code, that for SIZE given in KLOC, the total effort P in person-months can be estimated using the equation: EFFORT = 5.2 * (SIZE^.91) (a = 5.2, b = .91) * COCOMO - (NOTE: what the text calls "COCOMO" is now called COCOMO 81, and the "newer" COCOMO is called COCOMO II) COnstructive COst MOdel <-- Boehm in COCOMO 81, * you get an initial estimate, the NOMINAL ESTIMATE, based on the equation for an organic project: EFFORT = 3.9 * (SIZE ^ .91) (EFFORT in PM, SIZE in KLOC) * BUT -- you then TWEAK the nominal estimate by ESTIMATING the rating for each of 15 COST DRIVER ATTRIBUTES, and then grab the multiplying factor for that rating of that attribute for each attribute * these ratings are a small, qualitative set -- very low, low, nominal, high, very high