2.2 Approaches to Systems Development


In professional organizations, system development typically follows one of two primary models: the waterfall model or the evolutionary model.


The Waterfall Model


The waterfall model is a widely used software development process known for its linear sequential approach. Originating in the 1970s, it consists of distinct phases: analysis, design, implementation, testing, and maintenance. Each stage flows into the next, with overlapping phases that allow for feedback and iteration. While it offers a structured framework for planning, it also presents several advantages and disadvantages.


Advantages

The waterfall model is straightforward, systematic, and provides thorough documentation. Its linear nature makes it easy to follow.


Disadvantages

Challenges include the difficulty of defining all requirements upfront, inflexibility in accommodating changes, and the delay in seeing a working version until late in the process. Additionally, it may not scale well for larger projects and requires extensive documentation.


Problems

Real projects often deviate from the sequential flow proposed by the model. Customers may struggle to articulate all requirements, leading to potential confusion and major issues if errors are not detected early. Despite these limitations, the waterfall model remains relevant for projects with well-understood requirements.


Evolutionary Software Process Models


Recognizing that software evolves over time, evolutionary models allow for more flexibility in development. These models are iterative, enabling developers to create increasingly complete versions of software as business needs change.


Techniques

Key techniques in evolutionary development include exploratory development, which collaborates with clients to refine requirements, and prototyping, which focuses on understanding and defining user needs through experimental models.


Two Evolutionary Approaches


1. The Incremental Model: This model breaks down the system into smaller increments, each delivering part of the required functionality. User requirements are prioritized, allowing for gradual improvement and adaptation over time.


2. The Spiral Model: Combining aspects of prototyping with the linear sequential model, the spiral model supports rapid incremental releases. It consists of task regions such as customer communication, planning, risk analysis, engineering, construction, and customer evaluation. Each iteration results in a more complete version of the software.




Problems with Iterative Models

Iterative models face challenges such as lack of visibility, poor structure due to continual changes, and difficulties in managing large systems. Frequent prototyping can also be costly. These models are best suited for smaller systems or projects with short lifespans.

Spiral Model

The spiral model is an evolutionary software development process that combines iterative prototyping with the structured approach of the linear sequential model. It allows for rapid development through incremental software releases, executed in short lifecycles that culminate in the release of executable software.

Key Components:

  1. Customer Communication: Establishes effective communication between developers and customers.
  2. Planning: Defines resources, timelines, and other project-related information.
  3. Risk Analysis: Assesses technical and management risks.
  4. Engineering: Builds representations of the application.
  5. Construction and Release: Involves construction, testing, installation, and user support.
  6. Customer Evaluation: Gathers customer feedback on the software.

Each of these regions is filled with specific tasks that adapt to the project's characteristics.

Evolutionary Model and Prototyping

The evolutionary model emphasizes prototyping as a means to evaluate feasibility and verify requirements. There are three main approaches to prototyping:

  1. Requirements Analysis Tool: Prototyping aids in understanding requirements.
  2. Design Uncertainty Accommodation: Prototypes evolve into final products, but may sacrifice documentation and robustness.
  3. Solution Experimentation: Allows testing different solutions before significant investments.

Drawbacks:

  • Can be costly to develop.
  • May become an end product in itself.
  • Early decisions can be difficult to change.
  • Can lead to poor programming practices.

Experimental Evaluation:

Boehm's studies suggest that while prototyping better addresses user interfaces, the waterfall model provides better product and process control, resulting in a more robust product.

Incremental Model

This model delivers functionality in small increments, focusing first on essential features. It can lead to leaner systems but may complicate later feature additions.

Variant: Incremental Implementation

  • Follows the waterfall model until implementation.
  • Defines useful subsets for delivery.
  • Ensures smooth interface for future additions.

Software Factory Concept

Many organizations separate initial development from maintenance, which can hinder the creation of maintainable and reusable systems. A shift is needed to manage product families rather than individual products.

CMM (Capability Maturity Model) Critique

CMM emphasizes control over flexibility, which can stifle creativity and learning. It treats individuals as replaceable within rigid processes, which may create inflexible organizations.

Key Issues:

  • The five levels of CMM can create an illusion of control.
  • Focus on rigid processes may detract from innovation and responsiveness.

Overall, while the spiral and evolutionary models offer advantages in flexibility and user involvement, they also present challenges related to cost, decision-making, and management practices.

Conclusion


Various software development approaches exhibit strengths and weaknesses, but they share common phases. The choice of a development model depends on project nature, required methods and tools, and the necessary controls and deliverables. Understanding these models can enhance the effectiveness of software engineering practices.

Comments