Software Maintenance
Software Maintenance
Design, Testing
& Maintenance
Software Design
Design is ‘‘the process of applying various techniques and principles for
the purpose of defining a device, a process, or a system in sufficient
detail to permit its physical realization.’’
The design process converts the ‘‘what’’ of the requirements to the
‘‘how’’ of the design. The results of the design phase should be a
document that has sufficient detail to allow the system to be
implemented without further interaction with either the specifier or the
user.
When tools are integrated so that information created by one tool can be
used by another, a system for the support of software development,
called computer-aided software engineering(CASE), is established.
CASE combines software, hardware, and a software engineering database
(a repository containing important information about analysis, design,
program construction, and testing) to create a software engineering
environment analogous to CAD/CAE (computer-aided design/engineering)
for hardware.
CASE (Computer-Aided Software Engineering) tools are software applications that provide automated support
for various phases of software development, including software testing. These tools enhance the efficiency,
effectiveness, and quality of testing processes. Here’s how CASE tools are used in software testing:
1. Test Planning and Management
• Test Plan Creation: CASE tools help in creating detailed test plans by providing templates and guidelines.
They ensure all necessary aspects of testing are covered.
• Test Case Management: They offer features to design, organize, and manage test cases. This includes
maintaining a repository of test cases, which can be reused across different projects.
• Scheduling: CASE tools assist in scheduling tests, assigning tasks to team members, and tracking progress.
• Resource Allocation: They help in identifying the resources required for testing and allocate them
effectively.
2. Automated Test Case Generation
• Test Script Generation: CASE tools can automatically generate test scripts based on the code or models of
the system. This saves time and ensures comprehensive coverage.
• Regression Test Suites: They help create and maintain regression test suites, ensuring that new changes
do not break existing functionality.
3. Test Execution
• Automated Testing: CASE tools support the automation of test execution. They can run test scripts
automatically, compare actual outcomes with expected results, and generate reports.
• Simulators and Emulators: Some CASE tools provide simulators and emulators for testing software in
different environments without the need for actual hardware.
Phases of Design Process
A control flow graph (CFG) is a graphical representation of all paths that might be traversed
through a program during its execution. It is a vital tool in system testing for several reasons:
1. Understanding Program Logic
• Visualization: A CFG helps testers and developers visualize the flow of control within the
software. It displays the sequence in which statements, instructions, or functions are executed,
making it easier to understand complex program logic.
• Decision Points: It clearly marks decision points (such as loops and conditionals) and the
possible paths through the program, helping testers grasp the logic behind the software's
behavior.
2. Test Case Design
• Path Coverage: Testers can use the CFG to identify all possible paths through the code, which
is essential for path coverage testing. This ensures that all paths, including edge cases, are
tested.
• Branch Coverage: CFG is useful for branch coverage testing. Testers can ensure that each
branch (decision point) in the code has been executed at least once, improving the
thoroughness of the tests.
• Basis Path Testing: It aids in basis path testing by identifying independent paths through the
program. These are the minimum number of paths that, when tested, will cover every
statement and condition in the program at least once.
Regression Testing
• Impact Analysis: When changes are made to the code, CFG helps in
identifying the affected paths. Testers can focus their regression tests on
these paths to ensure that changes do not introduce new bugs.
• Test Case Prioritization: CFG helps prioritize test cases based on the
critical paths in the program, ensuring that the most important
functionality is tested first.
5. Bug Detection
• Path Testing: CFG facilitates path testing, which can uncover bugs that
might not be detected by other testing methods. By ensuring all paths
are tested, hidden bugs are more likely to be discovered.
• Data Flow Analysis: CFG can be used in conjunction with data flow
analysis to track how data moves through the program, helping to detect
anomalies such as data misuse, uninitialized variables, and potential
security vulnerabilities.
Control Flow Graphs
Software Quality
Schulmeyer and McManus have defined software quality as “the fitness
for use of the total software product”. A good quality software does
exactly what it is supposed to do and is interpreted in terms of
satisfaction of the requirement specification laid down by the user.
Quality Assurance
Software quality assurance is a methodology that determines the extent
to which a software product is fit for use. The activities that are included
for determining software quality are:
Auditing
Development of standards and guidelines
Production of reports
Review of quality system
Quality Factors
Correctness : Correctness determines whether the software
requirements are appropriately met.
Usability : Usability determines whether the software can
be used by different categories of users (beginners, non-
technical, and experts).
Portability : Portability determines whether the software
can operate in different platforms with different hardware
devices.
Maintainability : Maintainability determines the ease at
which errors can be corrected and modules can be updated.
Reusability : Reusability determines whether the modules
and classes can be reused for developing other software
products.
Software maintenance task:
Corrective:
Corrective maintenance of a software product is necessary to rectify the
bugs observed while the system is in use.
Adaptive:
A software product might need maintenance when the customers need
the product to run on new platforms, on new operating systems, or when
they need the product to interface with new hardware or software.
Perfective:
A software product needs maintenance to support the new features that
users want it to support, to change different functionalities of the system
according to customer demands, or to enhance the performance of the
system.
Software Maintenance