Understanding Software Development Life Cycles
What is Software Engineering?
Software engineering is the study and application of systematic, economical, and measurable approaches to the development, operation, and maintenance of high-quality software.
What is Software?
Software comprises computer programs and associated documentation.
Key Characteristics of Software Engineering
Software engineering focuses on software systems developed by teams, not individuals. These systems must meet user requirements, be maintainable, perform well, be reliable, and be user-friendly.
Software Development Life Cycle
The software development life cycle outlines the stages involved in creating and maintaining software:
- Requirements Definition
- Analysis
- Design
- Coding
- Testing
Requirements Definition
Before development begins, the system’s usage, user interactions, and intended functions must be clearly defined.
Analysis
Analysis aims to:
- Verify the quality of gathered requirements
- Detail these requirements sufficiently for developers. In essence, analysis focuses on what the system should do.
Design
Design focuses on how to implement the requirements. This phase incorporates technology requirements into the components modeled during analysis, defining the platform and tools to be used.
Coding
Coding translates design decisions into a specific programming language.
Testing
Software testing ensures quality. Its primary goal is to analyze the software’s performance, verifying that it meets client needs. Key test types include:
- Unit Testing (performed by developers on individual components)
- Integration Testing (verifies the interaction between different units)
- System Testing (evaluates the system in a real or simulated working environment)
Software Life Cycle Models
A software life cycle model is an abstract, simplified representation of the software development process. It typically highlights key activities and data involved in producing and maintaining software.
Adopting a Model
Adopting a life cycle model alone isn’t enough to manage a software project effectively. Consider these factors:
- Organization of process activities
- Resource allocation (human, hardware, and software)
- Operating procedures
- Development policies and constraints
- Types of software
Characteristics of Life Cycle Models
Common features of life cycle models:
- Describe the main development stages
- Define key activities within each phase
- Specify the outputs of each stage and inputs for subsequent stages
- Provide a framework for mapping necessary activities
Common Life Cycle Models
- Waterfall Model
- Incremental Model
- Evolutionary Model
- RAD Model
- Prototyping
- Spiral Model
- RUP-Associated Life Cycle Model
Waterfall Model
The oldest and most widely used model, the Waterfall model, mirrors traditional engineering cycles. It requires a systematic, sequential approach and suits projects with well-defined requirements and experienced development teams.
While the model proposes a sequential flow, real-world projects often involve interaction between phases, with later phases potentially impacting earlier ones.
Advantages of Waterfall
- User involvement through reviews at each phase’s end
- Facilitates configuration control
- Each documented and approved step forms the basis for the next
Disadvantages of Waterfall
- Strict sequential flow is rarely realistic
- Requires complete, accurate requirements upfront
- Assumes developers fully understand the application from the outset
- Difficult to assess progress in early stages
Prototyping
Prototyping involves developing an initial program for user experimentation to define system requirements. This prototype is then re-implemented in the next phase. Prototyping is particularly useful for:
- Large, complex systems
- Projects lacking a pre-existing system or manual process to guide requirements
Goals of Prototyping
- Understanding user requirements
- Defining the user interface
- Demonstrating system feasibility to stakeholders
Iterative Development
Iterative development involves cycling through development activities. Two common iterative approaches are:
- Incremental
- Spiral
Spiral Development
Spiral development incorporates management aspects into the software process, including:
- Regular risk analysis
- Planning
- Control
- Decision making
The process is represented as a spiral, with each loop signifying a phase. Phases are flexible and determined by project needs. Risks are actively assessed and addressed throughout.
Incremental Development
Instead of delivering a complete system at once, development is divided into increments, each delivering a portion of the functionality. User requirements are prioritized, with high-priority features implemented in early increments. Requirements are frozen for each increment but can evolve for later ones.
Incremental Approach
This approach tackles requirement sets by iterating through development stages concurrently. It combines the Waterfall model with evolutionary principles, prioritizing requirements and delivering the system in increments, starting with core services. Each increment can follow a Waterfall or evolutionary approach internally.