In a quality process such as the one described here, checkpoints are needed at the end of each iteration of the process component. This is where we apply the process checks of necessity and sufficiency. They are followed by the ability of the development process to modify and change itself to suit the actual project or to map to the actual project. This is where the malleability aspect comes in.
An iterative and incremental project plan ensures that the user is continuously involved in the development process. Table 4.1 shows how a typical insurance system's development occurs in an iterative and incremental fashion. The left-most column in the table shows the actual release versions of the entire system. These releases are shown as versions 0.1, 0.5, 0.9, and the first main release (1.0). Corresponding to each of the releases is a row indicating what is likely to be achieved in that release. The horizontal rows indicate the part of an iteration that is completed within the release. The vertical slices correspond to each of the subsystems or packages, and represent a physical increment.
Example Release Versions | New Lucky Insurance System | Client Subsystem | Policy Subsystem | Claims Subsystem | Marketing Subsystem |
---|---|---|---|---|---|
v 0.1 (initial) | Full scoping; layering | All use cases, activities, and business classes; prototypes; in MOPS Some implemented | Some use cases and business classes dentified in MOPS | Some use cases identified in MOPS | Exists only as a package name; no iwork thus far in MOPS |
v 0.5 (major) | Reviews of MOPS with users MOSS with designers | Client package within MOSS complete; most classes implemented | All use cases, business classes documented some implemented; prototypes | All claims-related use cases complete; relating to client and policy in MOPS; initial classes | Sales and marketing research; some use cases and activities documented |
v 0.9 | MOPS MOSS, and MOBS complete for client | GUI, charts printing, and interfaces to legacy complete; testing started | Some interfaces completed; tested | Some classes implemented; no work on interfaces, printing; prototypes | Business-level classes identified; none implemented |
v 1.0 (Final) Main release | First release (increment) deployed | Acceptance testing of client by users; possible deployment | Complete domain-specific underlying class library | Math models complete; generic for future reuse | Specific charting complete generic for reuse |
As you will notice from Table 4.1, the client subsystem is part of the first increment of this project plan. Therefore, in the initial release of the system, the client use cases get completed first, along with their corresponding class diagrams and the solution design. The other increments are in the offing, and will perhaps follow the first increment. Some of the domain-level activities that deal with the entire insurance domain will continue to happen in the background across all iterations and increments.
Compare the approach outlined in Table 4.1 with a waterfall-based software development lifecycle. A waterfall-based approach completes all use cases and activity diagrams across all subsystems before proceeding with the business class diagrams, and so on. If, during the implementation of a suite of class diagrams, an error in understanding the requirements is discovered, then the analysis-level diagrams need to be changed, which is a very difficult undertaking.
In the iterative and incremental approach discussed here, risks are reduced by letting the users shape the requirements through an initial iteration within an increment of the system. Completing and correcting requirements and designs, even with this IIP approach, is difficult to achieve because the requirements change and because the users learn more about what they want as they see the output of each iteration. What can be said with confidence is that this is the ideal way to guarantee the least-incomplete and least-incorrect models. I take the humble view of least incompleteness and least incorrectness, because in practice, despite taking extra care and following the process precisely, I have always come across well-meaning users, architects, and designers who want to add “one more thing” to the requirements.
The iterative and incremental approach outlined in Table 4.1 needs to be placed in a project task plan in order to enable a project manager to follow it. This requires the project manager to create a task plan that repeats the activities and tasks from the process-components. This project plan can incorporate all the increments at the outset, or one increment only with provisions for adding to and updating the project plan with additional increments.
Table 4.2 shows a small cross section of such a plan. As you will notice, the tasks related to requirements modeling (these tasks will be mostly derived from the process-components) are repeated for the subsystems. The essence of what is shown in Table 4.2 is that all practical project plans have sequential tasks, as shown by the task numbers in the first column. However, iterative and incremental development means that the project manager has to attempt to repeat activities and tasks at suitable intervals. Finally, although the tasks in Table 4.2 are repeated for different subsystems, identification of these subsystems is not shown here. It can be assumed that these subsystems will have been identified earlier in the project plan.
Task No. | Tasks | Deliverables | Role |
---|---|---|---|
1 | Identify actors | Requirements model (use case model) | BA, User |
2 | Identify use cases for client subsystem | Requirements model | BA, User |
3 | Document use cases for client subsystem | Requirements model (use case documentation) | BA, User |
4 | Create use case diagrams for client subsystem | Requirements model | BA, User |
5 | Complete actor list | Requirements model | BA, User |
6 | Complete use case diagrams for client subsystem | Requirements model | BA |
7 | Document most use cases for client subsystem | Requirements model (use case documentation) | BA |
8 | Identify initial test cases for client subsystem | Tester, BA, User | |
9 | Identify use cases for policy subsystem | Requirements model | BA, User |
10 | Document use cases for policy subsystem | Requirements model | BA, User |
11 | Create use case diagrams for policy subsystem | Requirements model | BA, User |
12 | Complete actor list for policy subsystem | Requirements model | BA, User |
13 | Document remaining use cases for client subsystem | Requirements model | BA |
14 | Document most use cases for policy subsystem | Requirements model | BA, User |
The project plan in Table 4.2 would usually be created in a sequential task-based project management tool such as Microsoft Project. However, it is worth considering project-management tools that are iterative and incremental in nature themselves. That means these project-management tools use techniques to enable the project manager to manage the project without repeating the tasks (as was necessary in the sample project plan in Table 4.2). Examples of such process tools are discussed in Process Tools Using UML. These tools give due consideration to the iterative and incremental aspect of a process. This means these process CASE tools are able to take the activities and tasks of the process and place them within the context of a project-management framework that allows these activities and tasks to be performed again and again, a sufficient number of times, resulting in a complete and correct deliverable.
The iterative and incremental nature of process tools also helps to provide not only detailed cross-referencing on all activities and tasks within the process, but also excellent tracking mechanisms for the activities and tasks. Despite their growing importance, availability, and capability, in practical enactment of the process, these process CASE tools usually end up being used together with the sequential project-management tools such as Microsoft Project.
3.138.36.38