Uttara University
Department of Computer Science and Engineering Holding 77, Beribadh Road, Turag,
Uttara, Dhaka 1200, Bangladesh Software Engineering (CSE06133309)
Academic Session: Summer 2025
Course Teacher Name: Md. Ashraful Kabir Designation: Lecturer & Coordinator,
Department of CSE Qualifications: M.Sc. Engg. Bangladesh University of Engineering
and Technology (BUET) M.Sc. Jahangirnagar University B.Sc. North South University
Email: [email protected]
Chapter 2: Software Processes
2.1 Software Processes
A software process is a structured set of activities required to develop a software
system. While many different software processes exist, they all typically involve the
following fundamental activities:
Specification: Defining what the system should do.
Design and Implementation: Defining the organization of the system and
implementing it.
Validation: Checking that the system does what the customer wants.
Evolution: Changing the system in response to changing customer needs.
A software process model is an abstract representation of a process, presenting a
description of a process from a particular perspective.
Topics Covered
This chapter covers the following key topics:
Basic software process models
Process activities
Coping with change & additional software process models
The Rational Unified Process (RUP)
2.2 Generic Process Models
Software process models are simplified representations of the software development
process. Three generic process models are commonly used:
2.2.1 The Waterfall Model
The waterfall model is a plan-driven process where each stage of development is
completed sequentially. It is suitable for systems with well-defined requirements and
stable environments. The main stages are:
Requirements definition: All system requirements are defined at the beginning.
System and software design: The system architecture and software
components are designed.
Implementation and unit testing: The software is coded and individual units
are tested.
Integration and system testing: Components are integrated and the entire
system is tested.
Operation and maintenance: The system is deployed and maintained.
2.2.2 Incremental Development
Incremental development involves developing the system in small, manageable
increments. This approach allows for early delivery of functionality and better
handling of changing requirements. Key characteristics include:
Interleaving activities: Specification, development, and validation are
interleaved rather than separate phases.
Rapid feedback: Users can provide feedback on increments, leading to better
understanding of requirements.
Reduced risk: Risks are reduced as problems are identified and addressed early.
2.2.3 Reuse-Oriented Software Engineering
This approach focuses on building systems from existing components rather than
developing everything from scratch. It can significantly reduce development time and
cost. The process involves:
Component analysis: Searching for reusable components.
Requirements modification: Adapting requirements to available components.
System design with reuse: Designing the system around existing components.
Development and integration: Developing new components and integrating
them with reusable ones.
2.3 Software Process Descriptions
When describing and discussing software processes, we typically talk about the
activities involved. These activities can be described from different perspectives:
Product perspective: Focuses on the artifacts produced during the process (e.g.,
requirements document, design models, code).
Activity perspective: Describes the actions performed (e.g., requirements
elicitation, design, coding, testing).
Role perspective: Identifies the responsibilities of different people involved
(e.g., software engineer, project manager, quality assurance).
Tool perspective: Specifies the software tools used to support the process (e.g.,
IDEs, version control systems, testing tools).
2.4 Plan-driven and Agile Processes
Software development processes can broadly be categorized into two main types:
2.4.1 Plan-driven Processes
In plan-driven processes, all process activities are planned in advance, and progress is
measured against this plan. These processes are characterized by:
Detailed planning: Extensive planning before development begins.
Documentation-heavy: Emphasis on creating detailed documentation at each
stage.
Sequential execution: Activities typically follow a strict sequence.
Suitability: Best for systems with stable requirements and clear objectives.
2.4.2 Agile Processes
Agile processes, in contrast, are incremental processes where planning is interleaved
with development and delivery. They are characterized by:
Flexibility: Adaptability to changing requirements.
Rapid iteration: Short development cycles with frequent deliveries.
Customer collaboration: Close collaboration with customers throughout the
development.
People-oriented: Emphasis on individuals and interactions over processes and
tools.
Suitability: Ideal for systems with evolving requirements or where rapid delivery
is crucial.
2.5 Process Activities
All software processes involve four fundamental activities:
2.5.1 Software Specification
This is the process of understanding and defining what services are required from the
system and identifying the constraints on the system’s operation and development.
It involves:
Requirements elicitation and analysis: Gathering and understanding
stakeholder needs.
Requirements specification: Documenting the requirements in a clear and
unambiguous way.
Requirements validation: Checking that the requirements are consistent,
complete, and meet user needs.
2.5.2 Software Design and Implementation
This activity translates the requirements into a software system. It involves:
Architectural design: Identifying the overall structure of the system and its main
components.
Interface design: Defining how components interact with each other and with
external systems.
Component design: Designing individual software components.
Database design: Designing the system’s data structures and storage.
Implementation: Translating the design into executable code.
2.5.3 Software Validation
Validation is the process of checking that the software conforms to its specification
and meets the expectations of the customer. It includes:
Component testing: Testing individual components independently.
System testing: Testing the integrated system to ensure it meets requirements.
Acceptance testing: Testing by the customer to ensure the system is fit for
purpose.
2.5.4 Software Evolution
Software is inherently subject to change. Software evolution is the process of adapting
software to changing requirements, new platforms, or to fix defects. It involves:
Change analysis: Understanding the impact of proposed changes.
Release planning: Deciding what changes to include in the next release.
System implementation: Implementing the changes.
New system release: Deploying the updated system.
2.6 Coping with Change
Software processes must be able to accommodate change. Two general approaches to
managing change are:
2.6.1 Process Improvement
This involves understanding existing processes and making changes to improve them.
Steps include:
Process analysis: Understanding the current process.
Process definition: Clearly defining the improved process.
Process measurement: Collecting data to evaluate the effectiveness of changes.
Process change: Implementing the changes.
2.6.2 Process Automation
Automating parts of the software process can improve efficiency and reduce errors.
This can involve using:
CASE tools: Computer-Aided Software Engineering tools to support various
activities.
Integrated development environments (IDEs): Tools that combine various
development functionalities.
Configuration management systems: Tools for managing changes to software
artifacts.
2.7 The Rational Unified Process (RUP)
The Rational Unified Process (RUP) is a modern, iterative software development
process framework. It is use-case driven, architecture-centric, and iterative and
incremental. RUP is structured along two dimensions:
Phases: Represent the time dimension of the project and include Inception,
Elaboration, Construction, and Transition.
Workflows (Disciplines): Represent the logical grouping of activities and include
Business Modeling, Requirements, Analysis & Design, Implementation, Test,
Deployment, Configuration & Change Management, Project Management, and
Environment.
RUP emphasizes:
Iterative development: Development proceeds in a series of iterations, with
each iteration producing an executable release.
Risk management: Risks are identified and addressed early in the lifecycle.
Use-case driven: Requirements are captured as use cases, which drive the entire
development process.
Architecture-centric: A strong focus on developing a robust and stable
architecture early on.
Conclusion
Chapter 2 of Ian Sommerville's "Software Engineering" (9th Edition) provides a
foundational understanding of software processes. It highlights the essential activities
involved in software development, introduces various process models like the
Waterfall, Incremental, and Reuse-oriented approaches, and discusses the critical
need for processes to adapt to change. The chapter also introduces the Rational
Unified Process (RUP) as a comprehensive framework for modern software
development. Understanding these concepts is crucial for anyone involved in the
engineering of software systems, as they lay the groundwork for effective and efficient
software project management and delivery.
2.1.1 Importance of Software Processes
The software process is not merely a sequence of steps; it is a critical framework that
dictates the quality, efficiency, and predictability of software development. A well-
defined software process offers several benefits:
Improved Quality: By enforcing systematic procedures, processes help in
identifying and rectifying defects early, leading to higher quality software
products. This includes rigorous testing phases and quality assurance
checkpoints.
Enhanced Predictability: Processes provide a roadmap, allowing for better
estimation of timelines, resources, and costs. This predictability is crucial for
project management and stakeholder communication.
Increased Efficiency: Standardized processes reduce ambiguity and rework,
optimizing resource utilization and accelerating development cycles. This is
achieved through clear roles, responsibilities, and defined workflows.
Better Maintainability: A structured approach ensures that software is
developed with future maintenance and evolution in mind, making it easier to
update, adapt, and extend the system over its lifecycle.
Risk Management: Processes incorporate mechanisms for identifying, assessing,
and mitigating risks throughout the development lifecycle, thereby reducing the
likelihood of project failures.
Knowledge Transfer and Reusability: Documented processes facilitate
knowledge transfer among team members and promote the reuse of
components, designs, and best practices across projects.
2.1.2 Characteristics of Effective Software Processes
An effective software process should possess several key characteristics to ensure
successful project outcomes:
Understandability: The process should be easy to understand by all
stakeholders, including developers, managers, and clients. Clear documentation
and training are essential.
Visibility: The progress of the software development should be visible at all
stages, allowing for effective monitoring and control. This often involves regular
reporting and progress tracking.
Supportability: The process should be supported by appropriate tools and
technologies that automate tasks and enhance efficiency. This includes version
control systems, integrated development environments (IDEs), and testing
frameworks.
Acceptability: All team members should accept and adhere to the process. This
requires their involvement in process definition and continuous improvement.
Reliability: The process should consistently produce high-quality software
within predicted timelines and budgets. This implies a repeatable and
measurable process.
Adaptability: The process must be flexible enough to adapt to changes in
requirements, technology, and project constraints. This is particularly important
in dynamic environments.
Rapid Development: In today's fast-paced market, the process should enable
rapid development and delivery of software, without compromising quality. Agile
methodologies are particularly strong in this aspect.
2.2.1.1 Advantages of the Waterfall Model
Despite its limitations, the Waterfall model offers several advantages, particularly for
certain types of projects:
Simplicity and Ease of Understanding: Its linear, sequential nature makes it
straightforward to understand and manage. Each phase has clear deliverables
and review points.
Clear Milestones: The distinct phases provide clear milestones, making it easy to
track progress and manage project timelines.
Stability for Well-Defined Projects: For projects with stable and well-
understood requirements, the Waterfall model can be very effective. Changes are
minimized once a phase is completed.
Strong Documentation: The emphasis on documentation at each stage ensures
that comprehensive records are maintained, which can be beneficial for
maintenance and knowledge transfer.
Good for Small Projects: For smaller projects with predictable outcomes, the
overhead of the Waterfall model is manageable, and its structured approach can
lead to efficient development.
2.2.1.2 Disadvantages of the Waterfall Model
However, the Waterfall model also has significant drawbacks that limit its applicability
in modern software development:
Inflexibility to Change: One of its biggest weaknesses is its inability to
accommodate changes easily. Requirements often evolve during a project, and
making changes in later stages can be costly and disruptive.
Late Discovery of Errors: Errors or misunderstandings in requirements are often
discovered late in the development cycle (during testing or operation), making
them expensive to fix.
Limited Customer Involvement: Customer involvement is typically limited to
the initial requirements phase and the final acceptance testing, leading to a lack
of feedback during critical development stages.
Long Development Cycles: The sequential nature means that a working version
of the software is not available until late in the project, delaying feedback and
market entry.
Risk and Uncertainty: High risk is associated with projects where requirements
are not fully understood upfront, as fundamental flaws may not be identified
until late in the process.
2.2.2.1 Advantages of Incremental Development
Incremental development addresses many of the shortcomings of the Waterfall model,
offering several benefits:
Early Delivery of Functionality: Customers can use and provide feedback on
working software increments much earlier in the development cycle.
Reduced Risk: Risks are spread across increments, and issues can be identified
and resolved early, reducing the overall project risk.
Accommodates Changing Requirements: The iterative nature allows for
flexibility and adaptation to evolving requirements, as new features can be
incorporated into subsequent increments.
Increased Customer Satisfaction: Regular delivery of working software and
continuous feedback loops lead to higher customer satisfaction and better
alignment with their needs.
Better Resource Utilization: Resources can be allocated more efficiently as
development progresses, and teams can learn and adapt based on feedback
from previous increments.
2.2.2.2 Disadvantages of Incremental Development
Despite its advantages, incremental development also presents certain challenges:
Lack of Overall System View: Without a complete upfront design, maintaining a
clear overall system architecture can be challenging, potentially leading to
integration issues.
Complexity of Management: Managing multiple increments and ensuring their
seamless integration requires careful planning and coordination.
Resource Management: It can be difficult to manage resources effectively across
multiple, overlapping increments, especially in larger projects.
Contractual Challenges: Defining contracts for incremental projects can be
complex, as the full scope of work may not be known at the outset.
Potential for Scope Creep: The flexibility to incorporate changes can sometimes
lead to uncontrolled scope creep if not managed properly.
2.2.3.1 Advantages of Reuse-Oriented Software Engineering
Reuse-oriented software engineering offers significant benefits, particularly in terms of
efficiency and quality:
Reduced Development Time and Cost: Reusing existing components saves the
time and effort that would otherwise be spent on developing them from scratch.
Increased Reliability: Reused components are typically well-tested and proven
in previous applications, leading to higher system reliability and fewer defects.
Lower Risk: The use of established components reduces the technical risks
associated with new development.
Improved Standards Compliance: Reused components often adhere to industry
standards, promoting consistency and interoperability.
Access to Specialized Functionality: Organizations can leverage specialized
components developed by experts, even if they lack in-house expertise in those
areas.
2.2.3.2 Disadvantages of Reuse-Oriented Software Engineering
However, there are also challenges associated with reuse-oriented development:
Finding Suitable Components: Identifying and locating appropriate reusable
components can be time-consuming and challenging, especially for specific
requirements.
Integration Issues: Integrating diverse components, especially those from
different sources, can lead to compatibility and interface problems.
Lack of Control over Component Evolution: Developers have limited control
over the future evolution or maintenance of external reusable components,
which can pose long-term risks.
Intellectual Property and Licensing: Managing intellectual property rights and
licensing agreements for reused components can be complex.
Performance Overhead: Reused components may not be optimized for the
specific application, potentially leading to performance overhead or unnecessary
functionality.
Not Always a Perfect Fit: Reused components may not perfectly match the
system's requirements, necessitating modifications or workarounds that can
negate some of the benefits of reuse.
2.3.1 Importance of Process Descriptions
Detailed process descriptions are crucial for several reasons:
Communication: They provide a common understanding of the development
process among all team members, stakeholders, and even new hires. This
reduces ambiguity and ensures everyone is on the same page.
Training: New team members can quickly learn the established procedures and
practices by referring to well-documented process descriptions. This reduces
onboarding time and ensures consistency.
Process Improvement: By clearly defining each step, organizations can identify
bottlenecks, inefficiencies, and areas for improvement. This allows for
continuous optimization of the development workflow.
Quality Assurance: Process descriptions serve as a baseline for quality
assurance. They define the expected inputs, outputs, and activities for each
stage, making it easier to verify compliance and identify deviations.
Auditing and Compliance: For regulated industries, detailed process
descriptions are essential for demonstrating compliance with industry standards,
legal requirements, and internal policies. They provide an auditable trail of how
software is developed.
Risk Management: By outlining specific activities and their dependencies,
process descriptions help in identifying potential risks and developing mitigation
strategies. This proactive approach can prevent costly delays and failures.
Knowledge Management: They capture institutional knowledge about how
software is built, preventing loss of expertise when team members leave and
facilitating the transfer of best practices across projects.
2.3.2 Elements of a Comprehensive Process Description
A comprehensive software process description should include various elements to
provide a holistic view of the development lifecycle. These elements go beyond just
listing activities and delve into the specifics of how those activities are performed, by
whom, with what tools, and what outcomes are expected.
Activities and Tasks: A breakdown of the major activities (e.g., requirements
engineering, design, coding, testing) into smaller, manageable tasks. Each task
should have a clear purpose, inputs, and outputs.
Roles and Responsibilities: Clear definition of the roles involved in the process
(e.g., project manager, software architect, developer, QA engineer) and their
specific responsibilities within each activity. This avoids confusion and ensures
accountability.
Artifacts and Deliverables: A list of all documents, models, code, and other
outputs produced at each stage of the process. This includes specifications,
design documents, test plans, user manuals, and the final software product itself.
Entry and Exit Criteria: For each phase or activity, define the conditions that
must be met before starting (entry criteria) and before completing (exit criteria).
This ensures that work is performed in a structured manner and that quality
gates are in place.
Tools and Technologies: Specify the software tools, programming languages,
frameworks, and other technologies used to support the process. This includes
version control systems, IDEs, testing tools, and project management software.
Techniques and Methods: Describe the specific techniques and methods
employed within each activity. For example, for requirements elicitation, this
might include interviewing, prototyping, or use case modeling. For design, it
could involve object-oriented design or architectural patterns.
Metrics and Measurement: Define the metrics used to measure the progress,
quality, and efficiency of the process. This could include lines of code, number of
defects, test coverage, or cycle time. Regular measurement allows for data-driven
process improvement.
Review and Approval Procedures: Outline the procedures for reviewing and
approving artifacts and deliverables. This includes who is responsible for
reviews, the review criteria, and the approval workflow. This ensures quality and
stakeholder buy-in.
Communication Plan: Describe how communication will be managed
throughout the project, including regular meetings, reporting mechanisms, and
escalation procedures. Effective communication is vital for project success.
Risk Management Plan: Detail how risks will be identified, assessed, mitigated,
and monitored throughout the software development lifecycle. This includes
contingency plans for unforeseen issues.
Configuration Management Plan: Explain how changes to software artifacts
(code, documents, etc.) will be controlled and tracked. This typically involves
using a version control system and defining branching and merging strategies.
By including these elements, a process description becomes a comprehensive guide
that not only tells what needs to be done but also how, by whom, and with what
resources, thereby fostering a more disciplined and effective software development
environment.
2.4.3 Comparing Plan-driven and Agile Processes
The choice between plan-driven and agile processes depends on various factors,
including the nature of the project, the stability of requirements, the size of the team,
and the organizational culture. Here’s a more detailed comparison:
Feature Plan-driven Processes Agile Processes
Fixed and well-defined at the Evolving and expected to change
Requirements
start of the project. throughout the project.
Detailed upfront planning for the Iterative planning, with detailed
Planning
entire project. plans for each iteration.
Customer Limited to initial requirements Continuous and active
Involvement and final acceptance. collaboration with the customer.
A single, final product is delivered Incremental delivery of working
Delivery
at the end of the project. software in short cycles.
Change Changes are discouraged and Changes are welcomed and can be
Management costly to implement. incorporated in later iterations.
Comprehensive documentation is Focus on working software over
Documentation
a key deliverable. extensive documentation.
Hierarchical, with clearly defined Self-organizing and cross-
Team Structure
roles and responsibilities. functional teams.
Risk Risks are identified and managed Risks are mitigated through short
Management through detailed planning. iterations and continuous feedback.
Large, complex projects with Small to medium-sized projects
Best Suited For stable requirements and a with evolving requirements and a
predictable environment. dynamic environment.
2.4.4 Hybrid Approaches
In practice, many organizations adopt a hybrid approach that combines elements of
both plan-driven and agile methodologies. This allows them to leverage the strengths
of both approaches while mitigating their weaknesses. For example, a project might
use a plan-driven approach for the overall system architecture and design, while using
agile methods for developing individual components or features. This can provide a
balance between the structure and predictability of plan-driven processes and the
flexibility and responsiveness of agile methods.
Some common hybrid models include:
Scrumfall: A combination of Scrum and Waterfall, where the initial requirements
and design phases are done in a Waterfall style, followed by development in
Scrum sprints.
Disciplined Agile Delivery (DAD): A process decision framework that provides a
more structured and disciplined approach to agile development, incorporating
elements of lean and iterative development.
LeSS (Large-Scale Scrum): A framework for applying Scrum to large-scale
development projects, providing guidance on how to structure and coordinate
multiple Scrum teams.
2.4.5 Choosing the Right Process
Selecting the appropriate software process is a critical decision that can significantly
impact the success of a project. Factors to consider when choosing a process include:
Project Size and Complexity: Large and complex projects may benefit from the
structure of a plan-driven approach, while smaller projects may be better suited
to agile methods.
Requirements Stability: If requirements are well-understood and unlikely to
change, a plan-driven approach may be appropriate. If requirements are
expected to evolve, an agile approach is a better choice.
Team Size and Experience: Agile methods work best with small, co-located
teams with a high level of expertise. Larger, distributed teams may require a
more structured approach.
Organizational Culture: The organizational culture plays a significant role in the
success of a process. Agile methods require a culture of collaboration, trust, and
empowerment, while plan-driven processes are more suited to hierarchical and
command-and-control environments.
Customer Availability: Agile methods rely on close and continuous
collaboration with the customer. If the customer is not available for regular
feedback and interaction, a plan-driven approach may be more practical.
Regulatory Requirements: For safety-critical systems or projects in regulated
industries, the comprehensive documentation and traceability of a plan-driven
approach may be necessary to demonstrate compliance.
Ultimately, there is no one-size-fits-all solution. The best approach is to carefully
evaluate the specific needs of the project and choose a process that is most likely to
lead to a successful outcome. It is also important to be open to adapting and evolving
the process as the project progresses and new challenges arise.
2.5.1.1 Challenges in Software Specification
Software specification, while fundamental, is fraught with challenges that can
significantly impact the success of a project:
Ambiguity and Incompleteness: Requirements are often stated vaguely or
incompletely, leading to misinterpretations and rework. Natural language, while
easy to use, is inherently ambiguous.
Conflicting Requirements: Different stakeholders may have conflicting needs or
priorities, making it difficult to arrive at a unified set of requirements. Negotiation
and conflict resolution are crucial.
Changing Requirements: Requirements are rarely static; they evolve throughout
the project lifecycle due to changes in business needs, market conditions, or
technology. Managing these changes effectively is a major challenge.
Stakeholder Communication: Effective communication between developers
and stakeholders is vital. Misunderstandings can arise due to differences in
technical knowledge, vocabulary, or perspectives.
Scope Creep: Uncontrolled expansion of project scope due to new or changing
requirements can lead to delays, budget overruns, and project failure. Robust
change management processes are essential.
Lack of User Involvement: Insufficient involvement of end-users in the
specification process can lead to systems that do not meet their actual needs,
resulting in low adoption or dissatisfaction.
Technical Feasibility: Sometimes, desired requirements may not be technically
feasible or may be too costly to implement within the given constraints. Early
feasibility analysis is important.
2.5.2.1 Design Principles and Best Practices
Effective software design and implementation adhere to several key principles and
best practices to ensure maintainability, scalability, and robustness:
Modularity: Breaking down the system into smaller, independent modules with
well-defined interfaces. This promotes reusability, simplifies testing, and allows
for parallel development.
Cohesion: Ensuring that the elements within a module are functionally related
and work together to achieve a single, well-defined purpose. High cohesion leads
to more understandable and maintainable code.
Coupling: Minimizing dependencies between modules. Low coupling reduces
the impact of changes in one module on others, making the system more flexible
and easier to modify.
Abstraction: Hiding complex implementation details behind simpler interfaces.
This allows developers to focus on the 'what' rather than the 'how', improving
understandability and reducing complexity.
Encapsulation: Bundling data and methods that operate on the data within a
single unit (e.g., a class) and restricting direct access to some of the component's
parts. This protects data integrity and promotes modularity.
Separation of Concerns: Dividing a computer program into distinct sections
such that each section addresses a separate concern. For example, separating
the user interface logic from the business logic and data access logic.
Don't Repeat Yourself (DRY): Avoiding duplication of code or functionality.
Instead, promote reuse through functions, classes, or libraries. Duplication leads
to increased maintenance effort and potential inconsistencies.
KISS (Keep It Simple, Stupid): Striving for simplicity in design and
implementation. Complex solutions are harder to understand, test, and
maintain. Simpler designs are often more robust.
YAGNI (You Ain't Gonna Need It): Avoiding the temptation to add functionality
that is not currently required. Focus on delivering what is needed now, as future
needs may change.
Testability: Designing the software in a way that makes it easy to test. This often
involves designing modules with clear interfaces and minimizing dependencies.
Scalability: Designing the system to handle increasing workloads or data
volumes without significant performance degradation. This involves considering
aspects like concurrency, distributed systems, and efficient algorithms.
Security: Incorporating security considerations throughout the design and
implementation phases, including secure coding practices, input validation,
access control, and encryption.
2.5.3.1 Types of Software Testing
Software validation is a critical phase that ensures the developed software meets its
requirements and is fit for purpose. It involves various types of testing, each with a
specific objective:
Unit Testing: This is the lowest level of testing, focusing on individual
components or modules of the software in isolation. Its primary goal is to verify
that each unit of code performs as expected. Developers typically perform unit
testing.
Integration Testing: After individual units are tested, they are combined, and
integration testing is performed to ensure that these integrated units work
together correctly. This identifies interface defects and communication issues
between modules.
System Testing: This involves testing the complete and integrated software
system to evaluate its compliance with the specified requirements. It includes
functional testing (verifying features), non-functional testing (performance,
security, usability), and regression testing (ensuring new changes haven't broken
existing functionality).
Acceptance Testing: This is the final stage of testing, performed by the end-users
or clients to verify that the system meets their business needs and is ready for
deployment. It often involves user acceptance testing (UAT) and operational
acceptance testing (OAT).
Regression Testing: This type of testing is performed to ensure that new code
changes, bug fixes, or configuration changes have not adversely affected existing
functionalities. It is often automated to ensure efficiency.
Performance Testing: Evaluates how the system performs in terms of
responsiveness, stability, scalability, and resource usage under various
workloads. This includes load testing, stress testing, and scalability testing.
Security Testing: Identifies vulnerabilities in the software system that could lead
to security breaches. This includes penetration testing, vulnerability scanning,
and security audits.
Usability Testing: Assesses how easy and intuitive the software is for end-users
to learn and use. It often involves real users performing typical tasks and
providing feedback.
2.5.4.1 Challenges in Software Evolution
Software evolution is an ongoing process that presents unique challenges:
Legacy Systems: Maintaining and evolving older systems (legacy systems) can
be difficult due to outdated technologies, poor documentation, and lack of
original developers.
Understanding the System: As systems evolve, their complexity increases,
making it harder for new developers to understand the codebase and make
changes without introducing new defects.
Impact Analysis: Accurately assessing the impact of a proposed change across
the entire system can be challenging, especially in large and complex systems.
Regression Risks: Every change carries the risk of introducing new bugs or
breaking existing functionality. Comprehensive regression testing is essential but
can be time-consuming.
Cost of Change: The cost of making changes tends to increase significantly as
the software ages and its complexity grows. Early changes are generally cheaper
than late changes.
Tool Support: Lack of adequate tool support for managing changes,
configurations, and testing in evolving systems can hinder the evolution process.
Organizational and Process Issues: Organizational resistance to change, lack of
clear processes for managing evolution, and insufficient resources can impede
effective software evolution.
2.7.1 RUP Phases in Detail
Each phase in RUP has specific objectives and milestones:
Inception Phase: The primary goal of this phase is to establish the project’s
scope and business case. It involves defining the vision, identifying key
stakeholders, and assessing initial risks. Key activities include initial
requirements gathering, preliminary use-case modeling, and architectural
prototyping to demonstrate feasibility. The main output is a vision document and
a preliminary business case.
Elaboration Phase: This phase focuses on refining the architecture and planning
the project in more detail. It involves identifying and specifying most of the use
cases, creating a robust architectural baseline, and mitigating the highest risks.
Key activities include detailed use-case analysis, architectural design, and
development of an executable architectural baseline. The main output is a
software architecture document, a refined risk list, and a detailed development
plan.
Construction Phase: This is the core development phase where the system is
built. It involves iterative and incremental development of the software
components, integrating them, and testing them thoroughly. Key activities
include component design, coding, unit testing, integration testing, and system
testing. The main output is a series of executable releases, each adding more
functionality.
Transition Phase: The objective of this phase is to ensure that the software is
ready for deployment and use by the end-users. It involves beta testing, user
training, data migration, and deployment of the system to the production
environment. Key activities include acceptance testing, user training, and
product release. The main output is the deployed software system and user
documentation.
2.7.2 RUP Workflows (Disciplines) in Detail
RUP organizes activities into nine core workflows or disciplines:
Business Modeling: Understanding the business context of the system, including
business processes, organization structure, and business rules. This helps in
aligning the software with business needs.
Requirements: Eliciting, organizing, and documenting the system requirements.
This involves use-case modeling, supplementary specifications, and a glossary of
terms.
Analysis & Design: Transforming the requirements into a design model that
describes the system’s structure and behavior. This includes architectural
design, component design, and database design.
Implementation: Translating the design into executable code and performing
unit testing. This involves coding, component integration, and debugging.
Test: Verifying the quality of the system by identifying and reporting defects. This
includes unit testing, integration testing, system testing, and acceptance testing.
Deployment: Planning and executing the delivery of the software to the end-
users. This involves packaging the software, installing it, and providing user
support.
Configuration & Change Management: Managing changes to software artifacts
and ensuring consistency across different versions. This includes version control,
change request management, and build management.
Project Management: Planning, organizing, and controlling the project to
ensure it meets its objectives within budget and schedule. This includes risk
management, resource management, and progress tracking.
Environment: Providing the necessary infrastructure, tools, and processes to
support the development team. This includes setting up development
environments, providing training, and defining development guidelines.