Skip to content

Software Engineering Process

AcronymFull Form
BPMNBusiness Process Modeling Notation
CASEComputer-Aided Software Engineering
CMMCapability Maturity Model
CMMICapability Maturity Model Integration
GQMGoal-Question-Metric
IDEFOIntegration Definition
KAKnowledge Area
PDCAPlan-Do-Check-Act
SLCMSoftware Life Cycle Model
SLCPSoftware Life Cycle Process
UMLUnified Modeling Language

This chapter examines the software engineering process, which involves the work activities software engineers use to build and operate software. An engineering process is a set of interrelated activities that transform inputs into outputs. Since its emergence, the software engineering discipline has continuously learned from and adapted processes from other engineering fields, focusing on design, manufacturing analogies, and operations.

A core understanding is that no single process is ideal. Software processes must be selected, adapted, and applied based on the specific project and organizational context, with a strong emphasis on empirical measurement to support management and decision-making.


Breakdown of Topics for the Software Engineering Process

Section titled “Breakdown of Topics for the Software Engineering Process”
  • Software Engineering Process Fundamentals
    • Introduction
    • Software Engineering Process Definition
  • Life Cycles
    • Life Cycle Definition, Process Categories, and Terminology
    • Rationale for Life Cycles
    • The Concepts of Process Models and Life Cycle Models
    • Paradigms for Development Life Cycle Models
    • Development Life Cycle Models and Their Engineering Dimension
    • The Management of SLCPs
    • Software Engineering Process Management
    • Software Life Cycle Adaptation
    • Practical Considerations
    • Software Process Infrastructure, Tools, and Methods
    • Software Engineering Process Monitoring
  • Software Process Assessment and Improvement
    • Overview of Software Process Assessment and Improvement
    • Goal-Question-Metric (GQM)
    • Framework-Based Methods
    • Process Assessment and Improvement in Agile

1. Software Engineering Process Fundamentals

Section titled “1. Software Engineering Process Fundamentals”

Software engineering processes are the work activities used to build and operate software. They are modeled on general engineering processes, which transform inputs into outputs using a set of interrelated activities. While early software engineering borrowed concepts like design and manufacturing from other disciplines, it’s now understood that building software requires significant design and learning effort focused on both the product and the process itself.

1.2 Software Engineering Process Definition

Section titled “1.2 Software Engineering Process Definition”

A process is a set of interrelated activities that transform inputs into outputs to deliver an intended result.

  • An activity is a set of cohesive tasks within a process.
  • A task is a specific action intended to achieve an outcome of a process.

The output of one process often serves as the input for another, highlighting their interconnected nature. These processes are also guided by controls (e.g., constraints) and enabled by mechanisms (e.g., tools, workforce).


2.1 Life Cycle Definition, Process Categories, and Terminology

Section titled “2.1 Life Cycle Definition, Process Categories, and Terminology”

A life cycle describes the evolution of a system, product, or service from its conception through retirement. The term development refers to the crucial stage of building or changing a software system. The complete software system life cycle includes all processes from ideation to retirement, covering production, operation, and evolution.

Life cycle processes are typically grouped into four main categories:

  1. Technical Processes: Engineering practices to build, operate, and retire software (e.g., requirements definition, architecture, design, implementation, integration, verification, validation, maintenance).
  2. Technical Management Processes: Activities for planning and control (e.g., project planning, risk management, configuration management, quality assurance).
  3. Organizational Project-Enabling Processes: Support processes at the organizational level (e.g., infrastructure management, human resources, quality management, knowledge management).
  4. Agreement Processes: Processes to support collective decision-making, acquisition, and supply.

Defining a life cycle is a powerful tool for managing the complexity of software creation. Because software processes are highly interrelated (the output of one is often the input to another), a life cycle specification provides a clear, understandable framework for communication, management, and coordination.

2.3 The Concepts of Process Models and Life Cycle Models

Section titled “2.3 The Concepts of Process Models and Life Cycle Models”

A Software Life Cycle Model (SLCM) is a framework that can be used to create a project-specific sequence of activities, known as a life cycle. Well-known SLCMs include the waterfall, V-model, incremental, spiral, and Agile models.

2.4 Paradigms for Development Life Cycle Models

Section titled “2.4 Paradigms for Development Life Cycle Models”

Different life cycle models follow different paradigms:

  • Predictive Life Cycle: The project’s scope, time, and cost are determined in an early phase. It assumes requirements are a closed set that will not change significantly.
  • Iterative Life Cycle: The scope is generally determined early, but time and cost estimates are refined as the team’s understanding grows. The product is developed through a series of repeated cycles.
  • Incremental Life Cycle: The deliverable is produced through a series of iterations that successively add functionality. The product is considered complete only after the final iteration.
  • Evolutionary Life Cycle: The product changes over its lifetime, often because requirements are introduced in successive steps rather than all at once.
  • Continuous Development: Practices that allow for frequent releases of new systems through the use of automated tools.

A key distinction is whether a life cycle is open to change. Predictive models typically freeze requirements early, whereas Agile models allow requirements to change at any point.

2.5 Development Life Cycle Models and Their Engineering Dimension

Section titled “2.5 Development Life Cycle Models and Their Engineering Dimension”

Several specific models have shaped software engineering:

  • Waterfall Model: A predictive model where development proceeds sequentially through phases (requirements, design, implementation, etc.). It is document-driven and was an early attempt to systematize software development. The V-model is a well-known variant.
  • Spiral Model: An evolutionary model that is risk-driven, where activities are performed iteratively until the software is complete.
  • Rapid Prototyping: Emphasizes developing prototypes early to get feedback and analysis.
  • Unified Process: An iterative and incremental framework, with variants like the Rational Unified Process (RUP) and OpenUP.
  • Agile: A mindset based on values and principles that prioritize communication, being open to change, and delivering value to the customer. It is not a single method but an umbrella for practices like Scrum and Extreme Programming. It advocates for small, incremental deliveries.
  • DevOps: A set of principles and practices that enable better communication and collaboration between development and operations stakeholders, facilitating continuous improvement and frequent releases.

A general software life cycle can be viewed as having several key stages, which are not necessarily sequential:

  1. Concept: Identifying stakeholder needs and exploring solutions.
  2. Development: Refining requirements and creating the system.
  3. Production: Producing and testing the system.
  4. Utilization: Operating the system to satisfy user needs.
  5. Support: Providing actions to ensure satisfactory operation.
  6. Retirement: Disposing of the system according to established procedures.

2.7 Software Engineering Process Management

Section titled “2.7 Software Engineering Process Management”

Process management involves the direction, control, and coordination of work. It occurs at multiple levels:

  • Technical Level: The core engineering processes.
  • Technical Management Level: Project management processes.
  • Executive Management Level: Organizational enabling processes like portfolio and knowledge management.

Life cycles are not one-size-fits-all. They must be adapted for each project, considering the product’s characteristics, stakeholder needs, and relevant standards. This involves selecting an appropriate development strategy, defining stages and processes, and documenting the rationale.

Defining a life cycle process requires addressing all four process categories (technical, organizational, management, and agreement). A key lesson learned in the industry is the importance of realistic estimations and measurements to reduce uncertainty. Working in large batches without intermediate deliverables increases risk, which is why continuous delivery and effective communication, as championed by the Agile mindset and DevOps, have become critical.

2.10 Software Process Infrastructure, Tools, and Methods

Section titled “2.10 Software Process Infrastructure, Tools, and Methods”

Processes can be defined using various notations, such as natural language, UML activity diagrams, or BPMN. A software process infrastructure includes tools that support these processes. Modern software engineering relies on integrated tools—once called Computer-Aided Software Engineering (CASE)—to automate essential processes like configuration management, testing, and issue tracking.

2.11 Software Engineering Process Monitoring

Section titled “2.11 Software Engineering Process Monitoring”

Process execution must be monitored to assess whether objectives are met and risks are managed. This requires a holistic approach that evaluates both the process and the product to ensure the final result meets stakeholder needs.


3. Software Process Assessment and Improvement

Section titled “3. Software Process Assessment and Improvement”

3.1 Overview of Software Process Assessment and Improvement

Section titled “3.1 Overview of Software Process Assessment and Improvement”

The idea that any process can be improved is fundamental and is captured in paradigms like the Plan-Do-Check-Act (PDCA) cycle. For software engineering, process assessment and improvement rely on gathering empirical evidence to make informed decisions about choosing, assessing, and improving a life cycle process.

The GQM approach is a method for process improvement based on setting measurable goals. By defining goals, asking questions to clarify them, and using metrics to answer those questions, a team can evaluate the effect of a change and determine if an improvement has occurred.

Some assessment methods use frameworks that include a process reference model and an assessment model. Prominent examples include:

  • Capability Maturity Model (CMM) and Capability Maturity Model Integration (CMMI).
  • ISO/IEC 33000 (also known as SPICE), which provides a framework for assessing process quality characteristics (like capability) and organizational maturity.

These frameworks are built on the concept of continuous improvement.

3.4 Process Assessment and Improvement in Agile

Section titled “3.4 Process Assessment and Improvement in Agile”

Agile methods embed process improvement directly into the life cycle. For example, Scrum uses retrospectives at the end of each iteration. During a retrospective, the team analyzes what went well and what didn’t, identifies root causes, and defines actions for improvement, creating a continuous learning loop.