Despite signs of life in the economy, the realities of software development persist. Most companies and customers need their software yesterday with the most advanced features at the lowest possible cost. To accomplish these seemingly contradictory goals, developers seek to streamline production with fast, effective processes that can give the customer what he/she wants in the shortest time possible.
These realities and past development failures have led to a shift in software development thinking from the more structured, sequential methods of software development of the past, often called the "Waterfall" model, to more iterative and incremental models such as the "Rational Unified Process (RUP)" and "Agile."
Agile proponents abound and it can sometimes seem as if more traditional development processes have fallen out of favor, but in reality all three models have their plusses, minuses and ideal project environments. At the end of the day, the best method or blending of methods for you depends on a thorough understanding of all three processes and how they fit your software project, business culture, and development environment.
Waterfall programming is a highly structured process that relies heavily on up-front planning and a set of sequential, prescribed steps that flow into each other like a waterfall. Each step typically has its own team of experts and carefully scripted milestones and no step can begin until the previous step has been completed. The goal is to gather all your detailed requirements early in the process and provide a single complete solution with results that are highly predictable.
Typically the steps in Waterfall development are:
- Requirements and specifications gathering
- Software design
- Testing and debugging
Waterfall development can work very well for complex, mission-critical applications that interface with many other systems and for organizations such as NASA or the military that require the highest levels of fault tolerance.
Detractors say that Waterfall simply takes too long and lacks the flexibility -- or agility -- required for today's fast-paced software market and development environment. Waterfall projects typically take months or years, and by the time they're finished, it's sometimes found that the requirements have changed or that the original requirements were off the mark to begin with. The result can be expensive, budget-busting fixes.
Like Waterfall, the Rational Unified Process (RUP), originated by Rational Software and later by IBM, is also process heavy, but is an iterative approach that takes into account the need to accommodate change and adaptability during the development process.
Like Waterfall, RUP has a series of phases and milestones that flow into each other. Phases consist of:
- Inception, where the project's scope, estimated costs, risks, business case, environment and architecture are identified.
- Elaboration, where requirements are specified in detail, architecture is validated, the project environment is further defined and the project team is configured.
- Construction, where the software is built and tested and supporting documentation is produced.
- Transition, where the software is system tested, user tested, reworked and deployed.
RUP also defines the roles and activities of team members in depth and relies at each stage on the production of visual models, which are rich graphical representations of software systems, and specific use cases rather than the large amounts of documentation required for each stage of Waterfall. All team members have access to the same large knowledge base of guidelines, templates, tools, and other items to ensure that they share the same language and perspective on the project.