Software Engineering
Software Engineering
UNIT - 1
Introduction to Software Engineering:
Software engineering is a discipline that deals with the design, development, testing,
maintenance, and documentation of software. It is concerned with the application of
engineering principles, methods, and techniques to the development of software.
The main goal of software engineering is to develop software that is reliable,
efficient, and cost-effective.
The software development life cycle (SDLC) is a commonly used framework for
software engineering. The SDLC consists of several phases, such as planning,
analysis, design, implementation, testing, and maintenance.
Software Components:
Software Characteristics:
Software characteristics refer to the properties or attributes of software that affect its
quality and performance. Some of the important software characteristics include
reliability, efficiency, maintainability, usability, and portability.
SOFTWARE ENGINEERING 1
Reliability refers to the ability of software to perform its intended function without
failure. Efficiency refers to the ability of software to perform its functions in a timely
and efficient manner. Maintainability refers to the ease with which software can be
modified, updated, or repaired. Usability refers to the ease with which users can
interact with software. Portability refers to the ability of software to run on different
platforms or operating systems.
Software Crisis:
The software crisis refers to the challenges and problems associated with software
development, such as cost overruns, schedule delays, and poor quality. The
software crisis arose in the 1960s when software development became more
complex and difficult.
The software crisis was caused by several factors, such as the lack of standards and
methodologies, the use of ad-hoc approaches, and the complexity of software
systems. The software crisis led to the development of software engineering as a
discipline and the adoption of various methodologies and tools to improve software
development.
There are several software engineering processes, such as the waterfall model, the
iterative model, and the agile model. Each process has its strengths and
weaknesses, and the choice of process depends on the specific requirements of the
project.
The waterfall model is a sequential process that involves several phases, such as
requirements analysis, design, implementation, testing, and maintenance. The
iterative model is a process that involves repeating the same set of activities several
times, with each iteration resulting in a more refined and improved version of the
software. The agile model is a process that emphasizes flexibility, collaboration, and
responsiveness to changing requirements.
SOFTWARE ENGINEERING 2
2. Both involve the use of a systematic approach to problem-solving and decision-
making.
4. Software engineering processes often involve the use of specialized tools and
techniques, such as software modeling, simulation, and automated testing,
whereas conventional engineering processes often involve the use of more
traditional tools and techniques, such as physical prototypes, mockups, or
testing rigs.
2. Reliability: The ability of the software to perform its intended functions without
failure or errors.
3. Usability: The ease with which users can interact with the software and perform
their tasks.
4. Efficiency: The ability of the software to perform its functions in a timely and
efficient manner.
SOFTWARE ENGINEERING 3
5. Maintainability: The ease with which the software can be modified, updated, or
repaired.
7. Security: The ability of the software to protect itself and its users from
unauthorized access or malicious attacks.
8. Compatibility: The ability of the software to work with other software systems or
components.
9. Scalability: The ability of the software to handle larger workloads or to expand its
functionality as needed.
10. Testability: The ease with which the software can be tested and verified to
ensure its quality and correctness.
1. Waterfall Model: The Waterfall model is a linear sequential approach where the
development process flows downwards through the phases of requirement
analysis, design, implementation, testing, and maintenance. Each phase must
be completed before the next phase can begin, and there is little room for
changes or revisions once a phase is completed.
Advantages:
Simple and easy to understand: The linear structure makes it easy for
project managers and team members to grasp the process.
SOFTWARE ENGINEERING 4
Disadvantages:
Late feedback: The testing phase occurs near the end of the process, which
can lead to discovering issues only after significant time and effort have
been invested.
Not suitable for complex or rapidly changing projects: The Waterfall model is
less effective when requirements are uncertain or when the project involves
frequent updates or changes.
Advantages:
Disadvantages:
Scope creep: The iterative nature of the model can lead to continuous
changes in requirements, making it difficult to define a clear project scope.
3. Spiral Model: The Spiral model is a risk-driven approach that emphasizes the
identification and mitigation of risks throughout the development process. It
SOFTWARE ENGINEERING 5
consists of multiple cycles, each of which includes planning, risk analysis,
development, and testing.
Advantages:
Flexibility: The spiral model allows for changes and revisions during the
development process.
Suitable for complex projects: The model is well-suited for large, complex
projects with uncertain requirements.
Disadvantages:
Complex: The spiral model can be more difficult to understand and manage
compared to simpler models like Waterfall.
Disadvantages:
SOFTWARE ENGINEERING 6
Less predictability: The flexibility of Agile models can make it difficult to
predict project timelines and costs.
Advantages:
Flexibility: The iterative nature of the model allows for changes and revisions
during the development process.
Early and frequent feedback: Like other iterative models, the Iterative
Enhancement model allows for continuous feedback and testing, improving
the final product.
Disadvantages:
Potential for scope creep: The ongoing nature of the model can lead to
continuous changes in requirements, making it difficult to define a
clear project scope.
Each SDLC model has its own set of advantages and disadvantages, and the choice
of model depends on the specific needs and requirements of the project. The
Waterfall model is useful for projects with well-defined requirements, whereas the
SOFTWARE ENGINEERING 7
Prototype and Agile models are better suited for projects with more uncertain or
changing requirements. The Spiral model is useful for projects with a high degree of
risk, and the Iterative Enhancement model is useful for projects that require frequent
updates and improvements.
UNIT - 2
Requirement Engineering Process:
Requirement Engineering is the process of eliciting, analyzing, documenting,
reviewing, and managing user needs and requirements to develop a software
system that meets the needs of stakeholders. The requirement engineering process
is an iterative process that involves the following activities:
Feasibility Study:
SOFTWARE ENGINEERING 8
A feasibility study is an analysis of the viability of a software system. It is an
important step in the requirement engineering process as it helps to determine
whether the proposed system is feasible and cost-effective to develop. A feasibility
study typically includes the following steps:
1. Technical feasibility: This involves evaluating whether the proposed system can
be developed using existing technology, hardware, software, and other
resources. This includes evaluating the compatibility of the proposed system
with existing systems, the availability of required technology, and the technical
skills of the development team.
3. Legal feasibility: This involves evaluating whether the proposed system complies
with legal and regulatory requirements. This includes analyzing the legal and
regulatory framework that governs the proposed system, such as data protection
laws, intellectual property laws, and other relevant regulations.
Information Modeling:
SOFTWARE ENGINEERING 9
engineering to develop a clear understanding of the system being developed and to
facilitate communication between stakeholders.
A Data Flow Diagram (DFD) is a graphical representation of the flow of data through
a system. It shows how data enters and exits a system, how it is processed, and
where it is stored. A DFD consists of processes, data stores, data flows, and
external entities. It is used to identify the inputs and outputs of a system, to identify
the processes that are involved in data processing, and to identify the data stores
where data is stored.
SRS Document:
SOFTWARE ENGINEERING 10
system. By using these tools, software developers can ensure that the final software
product meets the needs of stakeholders and is delivered on time and within budget.
IEEE Standards for SRS:
The Institute of Electrical and Electronics Engineers (IEEE) has developed standards
for the development of software requirements specification (SRS) documents. These
standards provide guidelines for the content and structure of an SRS document, as
well as the process for developing and maintaining the document.
IEEE Std 830-1998: This standard provides guidelines for the development of
SRS documents. It includes information on the content of an SRS document, as
well as the process for developing and reviewing the document.
IEEE Std 1233-1998: This standard provides guidelines for the preparation and
maintenance of software requirements documents. It includes information on the
content, organization, and format of an SRS document.
Verification and validation are two key activities in the SQA process. Verification
involves checking that the software product meets the specified requirements, while
validation involves checking that the software product meets the needs of the users
and the business.
SQA Plans:
An SQA plan is a document that outlines the activities, tasks, and responsibilities
involved in the SQA process. It includes information on the goals and objectives of
the SQA process, as well as the resources and schedule required to carry out the
activities.
Software Quality Frameworks:
Software quality frameworks provide a set of guidelines and best practices for
ensuring software quality. They include a set of processes, methods, and tools for
managing the software development process and ensuring that the final software
product meets the needs of stakeholders.
SOFTWARE ENGINEERING 11
ISO 9000 Models:
The ISO 9000 series of standards provide guidelines for implementing a quality
management system in an organization. The standards include a set of requirements
for quality management, as well as guidelines for auditing and certification.
SEI-CMM Model:
The Capability Maturity Model Integration (CMMI) is a framework for improving the
software development process. It provides a set of best practices for managing the
software development process and improving software quality. The CMMI includes a
set of maturity levels that organizations can achieve by adopting the best practices
outlined in the model.
In conclusion, IEEE standards for SRS, software quality assurance, verification and
validation, SQA plans, software quality frameworks, ISO 9000 models, and SEI-
CMM model are all important tools and frameworks used in software engineering to
ensure that software products are of high quality and meet the needs of
stakeholders. By adopting these standards and frameworks, software developers
can ensure that their products are reliable, efficient, and meet the needs of users
and businesses.
UNIT - 3
Software Design
Software design is the process of defining the architecture, components, modules,
interfaces, and data for a software system to satisfy specified requirements. It is
intended to be a blueprint for the construction of the software system. Here's a
detailed explanation of the software design topics you mentioned:
1. Architecture: The overall structure and organization of the system, including the
relationships between its components.
2. Components: The individual building blocks that make up the system, which can
be modules, classes, or functions.
SOFTWARE ENGINEERING 12
3. Interfaces: The connections and interactions between components, which allow
them to communicate and work together.
4. Data: The information and data structures that the system processes and
manipulates.
Architectural Design
Architectural design focuses on defining the high-level structure of a software
system, which serves as a foundation for the system's detailed design and
implementation. Key aspects of architectural design include:
4. Establishing the overall organization, structure, and patterns that guide the
system's development.
Low-Level Design
Low-level design involves defining the detailed design of the software system,
including the design of individual components, modules, and data structures. Key
elements of low-level design include:
4. Flow Charts: Visual representations of the control flow and logic within an
algorithm or process, using standardized symbols and notation.
SOFTWARE ENGINEERING 13
Design Strategies
There are various design strategies that can be employed when creating a software
system:
3. Top-Down Design: A design process that starts with a high-level view of the
system and progressively refines the design into more detailed and specific
components, moving from the general to the specific.
4. Bottom-Up Design: A design process that begins with the detailed design of
individual components or modules, which are then combined and integrated to
form the overall system, moving from the specific to the general.
1. Size Oriented Measures: Metrics that focus on the size of a software system,
such as lines of code or number of modules.
Function Point (FP) Based Measures: Metrics that measure the size of a
software system based on the number of user-visible functions or features it
provides.
SOFTWARE ENGINEERING 14
edges representing the flow of control between those blocks. Cyclomatic
complexity is calculated as the number of edges minus the number of nodes,
plus two times the number of connected components.
By tracking and analyzing these metrics, software engineers can gain insights into
the characteristics of a software system, identify potential issues or areas for
improvement, and make informed decisions about the system's design,
development, and maintenance.
UNIT - 4
Software Testing
Software testing is the process of evaluating a software system to determine if it
meets the specified requirements and functions as intended. It helps identify defects
and issues in the system and ensures its quality. Here's a detailed explanation of the
software testing topics you mentioned:
Testing Objectives
The main objectives of software testing are:
Types of Testing
Various types of testing can be performed on a software system:
SOFTWARE ENGINEERING 15
3. Acceptance Testing: Testing the entire system to ensure that it meets the
specified requirements and is acceptable for its intended users.
2. Helps improve code quality by identifying dead code, unreachable code, and
redundant code.
SOFTWARE ENGINEERING 16
Disadvantages:
3. May not identify issues related to the system's overall functionality or end-user
experience.
1. Ensures that the system meets its specified requirements and behaves correctly
under various conditions.
Disadvantages:
1. May not uncover issues related to the internal logic or structure of the code.
3. Test cases are often based on assumptions and may not cover all possible
scenarios or edge cases.
SOFTWARE ENGINEERING 17
ensure that the software system is thoroughly tested and that potential issues are
identified and resolved before the system is released or deployed.
2. Beta Testing: Conducted by a limited group of external users who use the
software in a real-world environment and provide feedback on its functionality,
performance, and usability. This helps identify and address issues that may not
have been identified during internal testing.
4. Compliance with Design and Coding Standards: Ensuring that the software
system adheres to established design and coding standards, which can help
improve its quality, maintainability, and reliability.
UNIT - 5
Software Maintenance and Software Project Management
SOFTWARE ENGINEERING 18
Software maintenance and software project management are essential aspects of
the software development lifecycle. They ensure that a software system continues to
meet its requirements, remains reliable, and can evolve to accommodate changing
needs or technologies. Here's a detailed explanation of the topics you mentioned:
3. Updating the system to remain compatible with changes in its environment, such
as new hardware or operating systems.
Categories of Maintenance
There are three main categories of software maintenance:
SOFTWARE ENGINEERING 19
This includes activities such as adding new functionality, improving the user
interface, or updating the system to support new technologies.
Cost of Maintenance
The cost of software maintenance can be significant, often accounting for a large
portion of the total cost of ownership (TCO) of a software system. Factors that
contribute to the cost of maintenance include:
Effective software project management can help control and reduce the cost of
maintenance by prioritizing activities, allocating resources efficiently, and ensuring
that changes are well-planned and executed.
Software Re-Engineering
Software re-engineering is the process of modifying an existing software system to
improve its quality, maintainability, and performance, without changing its core
functionality. This may involve activities such as:
2. Updating the system's architecture or design to better align with modern best
practices or technologies.
Software re-engineering can help extend the useful life of a software system, reduce
the cost of maintenance, and improve its overall quality and performance.
Reverse Engineering
Reverse engineering is the process of analyzing a software system's components,
structure, and behavior to understand its design and implementation. This may
involve activities such as:
SOFTWARE ENGINEERING 20
1. Examining the source code, if available, to understand its logic, algorithms,
and data structures.
3. Observing the system's behavior during operation to deduce its underlying logic
and algorithms.
SOFTWARE ENGINEERING 21
The change control process is a structured approach to managing modifications to a
software system, which typically includes:
2. Evaluating the impact, feasibility, and potential risks of the proposed changes.
5. Verifying and validating the implemented changes to ensure they meet their
intended objectives and do not introduce new issues.
3. Tracking the history of changes, including who made the changes and when they
were made.
SOFTWARE ENGINEERING 22
4. Testing Tools: Automate various aspects of software testing, such as test case
management, test execution, and test results analysis.
SOFTWARE ENGINEERING 23
project's objectives, schedule, budget, or quality. Some common steps in software
risk management include:
IMP
Unit I
Explain the characteristics of software and how it
differs from hardware.
Software and hardware are two essential components of a computer system.
They work together to perform tasks, process information, and facilitate user
interactions. Here is an explanation of the key characteristics of software and
how it differs from hardware:
Characteristics of Software:
SOFTWARE ENGINEERING 24
software to changing user requirements or technological advancements.
5. Wear and tear: Hardware components can wear out or break down over time
due to physical stress, heat, or other environmental factors. Software, on the
other hand, doesn't experience physical wear and tear but may become
outdated or incompatible with newer hardware or operating systems.
SOFTWARE ENGINEERING 25
software crisis highlighted several issues in the software development process,
including:
1. Project delays and failures: Many software projects were unable to meet
their deadlines or failed to deliver the expected functionalities, causing
financial losses and disappointment to stakeholders.
These issues led to the realization that traditional development practices were
not sufficient to address the challenges of the software crisis. As a result, the
field of software engineering emerged as a discipline to apply systematic,
disciplined, and quantifiable approaches to software development. The
implications of the software crisis on software engineering include:
SOFTWARE ENGINEERING 26
extend, which helps minimize long-term maintenance costs and improve
software adaptability.
It is a linear and sequential model where each phase of the SDLC must be
completed before moving on to the next phase.
This model works well for small projects with well-defined requirements and
minimal risk of changing requirements during development.
Prototype Model
SOFTWARE ENGINEERING 27
The prototype may be a simple representation of the final system or a
partially functional version with limited features.
The Prototype Model is useful for projects with unclear or rapidly changing
requirements, as it allows for refinement and validation of requirements
based on user feedback.
Spiral Model
The Spiral Model combines elements of the Waterfall Model and the
Prototype Model, emphasizing risk analysis at each stage of development.
This model is well-suited for large, complex projects with high risks
and changing requirements, as it allows for continuous refinement and
adaptation based on feedback and risk assessment.
Each increment adds new features and functionality to the software system,
allowing for continuous refinement and adaptation based on user feedback
and changing requirements.
SOFTWARE ENGINEERING 28
These models focus on refining and enhancing an existing software system
through a series of iterative cycles.
Unit II
Explain the Requirement Engineering Process,
including elicitation, analysis, documentation,
review, and management of user needs.
Requirement Engineering (RE) is a crucial phase in the software development
process, focusing on the identification, analysis, documentation, review, and
management of user needs and expectations. RE helps to ensure that the final
software product meets the requirements of its users and stakeholders, leading
to higher user satisfaction and project success. The Requirement Engineering
process can be broken down into the following key activities:
2. Analysis: Once the requirements have been elicited, the analysis phase
involves organizing, prioritizing, and refining the gathered information to
develop a clear and consistent understanding of the user needs. This may
include categorizing requirements, identifying dependencies and conflicts,
and prioritizing requirements based on factors such as importance, risk, or
resource availability. The analysis phase also involves validating the
SOFTWARE ENGINEERING 29
requirements to ensure they are complete, consistent, feasible, and
verifiable.
4. Review: The review phase involves validating and verifying the documented
requirements with stakeholders and users to ensure that they accurately
represent the user needs and expectations. This may involve conducting
formal or informal reviews, inspections, or walkthroughs of the requirements
specification. The goal is to identify and address any issues, such as
inconsistencies, ambiguities, or missing requirements, before the
development process begins.
SOFTWARE ENGINEERING 30
evaluating various factors such as technical, economic, legal, operational, and
scheduling aspects, a feasibility study can provide valuable insights to help
stakeholders make informed decisions about whether to proceed with the
project, modify the project scope, or abandon it altogether.
SOFTWARE ENGINEERING 31
and resources by identifying and addressing potential issues before they
become critical problems during the software development process.
ISO 9001, a part of the ISO 9000 series, is the most widely used standard
for QMS certification. It specifies the requirements for organizations to
demonstrate their commitment to quality by implementing a QMS, which
includes continuous improvement and customer satisfaction.
The ISO 9000 series is generic and can be applied to organizations of any
size or industry. However, organizations may need to tailor the guidelines to
fit their specific context and software development processes.
SEI-CMM Model
SOFTWARE ENGINEERING 32
The CMM consists of five maturity levels, ranging from Level 1 (Initial) to
Level 5 (Optimizing), with each level representing a higher degree of
process maturity and capability. Organizations can use the CMM
framework to identify their current maturity level and develop plans for
improving their software processes and practices.
Both ISO 9000 and SEI-CMM models aim to improve software quality by
emphasizing the importance of well-defined, documented, and controlled
processes.
Unit III
SOFTWARE ENGINEERING 33
Discuss the principles of software design,
including architectural design and low-level
design.
Software design is a critical phase in the software development process, where
the system's architecture and components are defined and specified. The goal is
to create a blueprint for the construction of the software system that meets the
requirements, while optimizing performance, maintainability, scalability, and other
quality attributes. Software design can be divided into two main
levels: architectural design (high-level design) and low-level design (detailed
design). The principles of software design apply to both levels and help ensure
the creation of a robust, efficient, and maintainable software system.
Architectural Design
4. Layering: Organizing the system into a hierarchy of layers, with each layer
providing services to the layer above and relying on services from the layer
below, promotes separation of concerns, modularity, and maintainability.
Common layers include presentation, business logic, and data access.
SOFTWARE ENGINEERING 34
architectural patterns include client-server, n-tier, microservices, and event-
driven architectures.
Low-Level Design
Coupling
SOFTWARE ENGINEERING 35
Coupling refers to the degree of interdependence or interconnection between
modules. It is a measure of how closely related two modules are, and how much
they rely on each other to function correctly. In a well-designed software system,
the goal is to minimize coupling between modules, making them as independent
as possible. Low coupling offers several benefits:
Cohesion
Cohesion refers to the degree to which the elements within a single module are
related and focused on a specific task or responsibility. High cohesion means
that a module has a single, well-defined purpose, and all its elements contribute
to achieving that purpose. A well-designed software system aims to maximize
cohesion within modules. High cohesion offers several advantages:
3. Reusability: Modules with high cohesion can be more easily reused, as they
encapsulate a specific functionality that can be leveraged in different
contexts.
SOFTWARE ENGINEERING 36
Complexity Measures as various size-oriented
software measurement and metrics.
Size-oriented software measurement and metrics focus on assessing the size
and complexity of a software system based on its code and structure. These
measurements can help in estimating development effort, project duration, and
resource allocation. Three well-known size-oriented software measurement and
metrics are Halstead's Software Science, Function Point (FP) Based Measures,
and Cyclomatic Complexity Measures.
1. Program Length (N): The sum of the total number of operators and
operands in the program.
2. Program Vocabulary (n): The sum of the number of unique operators and
operands.
Halstead's Software Science provides insight into the size, complexity, and
maintainability of a program based on its code. However, its reliance on low-level
code constructs may limit its applicability and accuracy in some contexts,
especially when comparing programs written in different programming
languages.
Function Point (FP) Based Measures
SOFTWARE ENGINEERING 37
analysis considers the system's functionality as perceived by its users. The key
components of FP analysis are:
1. External Inputs (EI): The count of user input operations that provide data to
the system.
2. External Outputs (EO): The count of user output operations that present
processed data from the system.
3. External Inquiries (EQ): The count of user inquiry operations that involve
both input and output, like querying a database.
4. Internal Logical Files (ILF): The count of internal data structures or files
maintained by the system.
5. External Interface Files (EIF): The count of external data structures or files
used by the system for reference purposes.
where E is the number of edges in the control flow graph, N is the number of
nodes, and P is the number of connected components.
Unit IV
SOFTWARE ENGINEERING 38
Explain the objectives of software testing and the
different levels of testing, including unit
testing, integration testing, acceptance testing,
and regression testing.
Software testing is a crucial aspect of the software development process, aiming
to evaluate the functionality, quality, and performance of a software system. The
main objectives of software testing are:
2. Identify Defects: Detecting and fixing errors, bugs, and other issues in the
software.
SOFTWARE ENGINEERING 39
dependencies. Integration testing helps detect issues related to communication,
data exchange, and coordination among components, which may not be
identified during unit testing.
System Testing
Acceptance Testing
Acceptance testing is the process of validating the software system against the
end-user requirements and expectations. The goal is to ensure that the software
is acceptable for its intended use and meets the needs of its users. Acceptance
testing can be:
Acceptance testing helps gain confidence in the software system and confirms
that it is ready for release.
Regression Testing
In summary, software testing serves to verify and validate the software system,
identify defects, improve quality, reduce risks, and gain confidence in its
SOFTWARE ENGINEERING 40
functionality and performance. Different levels of testing (unit, integration,
system, acceptance, and regression) target specific aspects of the software
system, ensuring comprehensive evaluation and assessment across the
development process.
3. Test Design: Test cases are derived from the system's source code, its
control and data flow graphs, or other internal representations.
SOFTWARE ENGINEERING 41
Functional testing is based on the external functionality, behavior, and
specifications of the software system. In this approach, the tester is not
concerned with the internal structure or implementation of the system; instead,
they focus on the system's inputs and outputs. The main characteristics of
functional testing are:
3. Test Design: Test cases are derived from the system's requirements,
specifications, or user stories, without considering the internal
implementation.
4. Tester's Role: Functional testing does not require the tester to have
programming knowledge or understanding of the system's internal structure.
6. Limitations: Functional testing may not detect issues related to code quality,
logic errors, or performance bottlenecks, as it does not consider the internal
structure of the software.
In summary, structural testing (white box testing) and functional testing (black
box testing) are two complementary approaches to software testing. Structural
testing focuses on the internal structure and implementation of the software,
while functional testing focuses on the external functionality and behavior. Each
approach has its advantages and limitations, and they are often used together to
ensure comprehensive testing and assessment of the software system. By
combining structural and functional testing, it is possible to achieve a more
robust and reliable software system that meets both internal quality
standards and external user requirements.
SOFTWARE ENGINEERING 42
Discuss the role of static testing strategies in
software development, including formal technical
reviews (peer reviews), walkthroughs, code
inspections, and compliance with design
and coding standards.
Static testing strategies play a vital role in the software development process,
focusing on the examination and evaluation of software artifacts, such as
requirements, design documents, and source code, without actually executing
the program. These strategies aim to detect and prevent defects early in
the development lifecycle, improve overall software quality, and enhance
maintainability and readability. Some of the prominent static testing
strategies include formal technical reviews, walkthroughs, code inspections, and
compliance with design and coding standards.
Walkthroughs
Walkthroughs are informal and less structured reviews, where the author of
a software artifact presents their work to a group of peers and solicits feedback
and suggestions for improvement. Walkthroughs aim to identify defects and
misconceptions, clarify ambiguities, and foster a shared understanding of the
software artifact among the team members. Walkthroughs can be applied to any
stage of the software development process, from requirements and design to
implementation and testing.
Code Inspections
SOFTWARE ENGINEERING 43
and performance. Code inspections can help detect issues that may not be
easily identified during dynamic testing, such as subtle logic errors, resource
leaks, or potential security vulnerabilities.
Unit V
Explain the need for software maintenance and
describe the categories of maintenance:
preventive, corrective, and perfective maintenance.
Software maintenance is an essential phase in the software development
lifecycle that ensures the continued functionality, reliability, and performance of a
software system after its deployment. As software systems evolve over time due
to changing requirements, new technologies, and environmental factors, it
becomes necessary to modify and update them to maintain their effectiveness
and usefulness. The main reasons for software maintenance include:
SOFTWARE ENGINEERING 44
5. Ensuring compatibility: Updating the software to remain compatible with
changes in the underlying hardware, operating system, or dependent
libraries and frameworks.
Preventive Maintenance
Corrective Maintenance
Corrective maintenance involves fixing defects, errors, and issues that have
been discovered during the software system's operation. The goal of corrective
maintenance is to restore the software's functionality and performance by
addressing bugs, security vulnerabilities, and other problems that may impact its
users. Corrective maintenance activities may include:
Perfective Maintenance
SOFTWARE ENGINEERING 45
Improving existing functionality or user interfaces
Software Re-engineering
SOFTWARE ENGINEERING 46
engineering is to gain an understanding of the system's functionality, structure,
and dependencies, which can be useful for various purposes, such as:
Reverse engineering typically involves the use of tools and techniques such as
disassemblers, decompilers, debuggers, and static or dynamic analyzers, which
can help reconstruct the system's source code, control flow, data flow, and other
high-level information.
The change control process is a key element of SCM that governs how changes
to the software system, such as modifications to requirements, design, source
code, or other artifacts, are requested, approved, implemented, and tracked. The
change control process aims to ensure that changes are introduced in a
controlled and coordinated manner, minimizing the risk of introducing defects,
inconsistencies, or undesired side effects. The major steps in the change control
process include:
SOFTWARE ENGINEERING 47
dependencies.
6. Change documentation: The change, its rationale, and its impact are
documented and communicated to the relevant stakeholders, ensuring
traceability and accountability.
SOFTWARE ENGINEERING 48
SOFTWARE ENGINEERING 49