0% found this document useful (0 votes)
30 views3 pages

Software Maintenance and Reengineering Overview

This document discusses software maintenance and software reengineering. It defines software maintenance as modifying and updating software after delivery to address bugs, add features, improve performance, or ensure compatibility. There are three main types of software maintenance: corrective, adaptive, and perfective. Software reengineering is defined as a two-step process involving reverse engineering existing software followed by forward engineering to modernize, enhance, and optimize older systems, though it requires significant resources and risks. Proper planning is key to successful software reengineering.

Uploaded by

Elijah Mwale
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views3 pages

Software Maintenance and Reengineering Overview

This document discusses software maintenance and software reengineering. It defines software maintenance as modifying and updating software after delivery to address bugs, add features, improve performance, or ensure compatibility. There are three main types of software maintenance: corrective, adaptive, and perfective. Software reengineering is defined as a two-step process involving reverse engineering existing software followed by forward engineering to modernize, enhance, and optimize older systems, though it requires significant resources and risks. Proper planning is key to successful software reengineering.

Uploaded by

Elijah Mwale
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

STUDENT ID: 29005815

LECTURES NAME: MR BENTLY BWALYA


COURSE: SOFTWARE ENGINEERING
Q1)

Software Maintenance refers to the process of modifying and updating a software system
after it has been delivered to the customer. This can include fixing bugs, adding new features,
improving performance, or updating the software to work with new hardware or software
systems. There Two broad categories of process models for software maintenance, the first
model is preferred for projects involving small reworks where the code is changed directly
and the changes are reflected in the relevant documents later in this approach, the project
starts by gathering the requirements for changes. The requirements are next analysed to
formulate the strategies to be adopted for code change. At this stage, the association of at
least a few members of the original development team goes a long way in reducing the cycle
team, especially for projects involving unstructured and inadequately documented code, the
second process model for software maintenance is preferred for projects where the amount of
rework required is significant. This approach can be represented by a reverse engineering
cycle followed by a forward engineering cycle. Such an approach is also known as software
reengineering. The reverse engineering cycle is required for legacy products. During the
reverse engineering, the old code is analysed (abstracted) to extract the module specifications.
The module specifications are then analysed to produce the design. The design is analysed
(abstracted) to produce the original requirements specification. The change requests are then
applied to this requirements specification to arrive at the new requirements specification.

The motivation behind software maintenance stems from the recognition that software is not
a static entity, rather it exists within a dynamic and evolving environment. Several key
motivations drive the need for software maintenance;

Bug fixer: Software is prone to errors, or bugs, which can affect its functionality, reliability,
and security, Maintenance involves identifying and rectifying these issues to ensure the
software performs as intended.

Adaptation to Changing Requirements: As business needs evolve or new features are


demanded by users, software must be adapted to accommodate these changes

Compatibility: Software operates within an ecosystem of hardware, operating systems, and


other software components.

Cost Efficiency: It is often more cost-effective to maintain and enhance existing software
than to develop an entirely new system from scratch.
There are basically three types of software maintenance and these are;

Corrective: this 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

(Boehm 1981) states that COCOMO’s intermediate model provides estimates which deviate
from the actual needed effort only about 20% in average. Cocomo-II is the new updated
version of the classic model, with a more modern project database. Boehm (1981) has also
represented a simple linear model for determining maintenance costs, but he admits that it has
many limitations. [1]

Q2

Software reengineering is a combination of two consecutive processes i.e., software reverse


engineering and software forward engineering. software reengineering involves overhauling
existing software systems to modernize, enhance, and optimize them. While it offers various
benefits such as improved maintainability, enhanced functionality, and competitive
advantage, organizations should be mindful of potential downsides such as complexity,
resource intensity, and the risk of unforeseen challenges. Proper planning, clear objectives,
and effective project management are essential for successful software reengineering
endeavors. [2]

[1] H. S. Behera, A. Prof, K. K. Sahu, and G. Bhattacharjee, “LECTURE NOTES ON SOFTWARE


ENGINEERING Course Code: BCS-306.”

[2] M. Majthoub, M. H. Qutqui, and Y. Odeh, “Software Re-engineering: An Overview,” in 2018


8th International Conference on Computer Science and Information Technology, CSIT 2018,
Institute of Electrical and Electronics Engineers Inc., Oct. 2018, pp. 266–270. doi:
10.1109/CSIT.2018.8486173.

Common questions

Powered by AI

Software reengineering addresses challenges in maintaining legacy systems by modernizing, enhancing, and optimizing them through reverse and forward engineering processes. This involves abstracting old code to extract module specifications, which are then used to produce a design and original requirements. Changes are applied to these requirements to address new specifications, thus improving maintainability and functionality .

The primary objectives of software reengineering are modernizing software systems, enhancing maintainability, optimizing functionality, and improving performance. Achieving these objectives ensures that companies can leverage their existing software assets more effectively, leading to improved efficiency, innovation capabilities, and, consequently, a competitive advantage in the market .

Adaptive maintenance involves modifying a software product so that it continues to work in a changed environment, such as a new platform or interface, while perfective maintenance focuses on enhancing performance or adding requested features to improve the software. Adaptive maintenance is applied when external dependencies such as hardware changes occur, whereas perfective maintenance is chosen when user feedback suggests feature enhancements .

Cost efficiency drives the choice for software maintenance as it is often cheaper to modify and enhance existing software than develop a new system from the ground up. Maintenance allows companies to leverage previous investments in software assets, avoiding the steep costs and risks associated with developing entirely new systems, while still aligning with current business needs .

Boehm's linear model for estimating software maintenance costs is limited by its simplicity which might not account for the nuanced and variable factors influencing maintenance cost. Although it provides a straightforward approach, it may not accurately reflect the complexity of modern projects or align with the actual resource variations due to its linear assumptions, leading to potential inaccuracies .

Reverse engineering in software reengineering involves analyzing old code to create module specifications, which guide re-designing and understanding the original requirements of the software. This process is beneficial in the maintenance phase as it helps extract valuable insights from legacy systems, enabling necessary updates, improvements, and ensuring the alignment with current requirements without starting from scratch .

COCOMO's intermediate model aids software maintenance by providing a structured framework for estimating development efforts with deviations from actual effort needed averaging only about 20%. However, it is limited by its reliance on historical data and assumptions that may not capture the unique conditions of newer projects or the dynamics of technological advancements .

Even with proper planning and management, software reengineering poses challenges such as complexity in redesign processes, resource intensity, potential for introducing new bugs or mismatches, and the difficulty of accurately predicting system behaviour after reengineering. These challenges necessitate careful strategy and risk management .

Key motivations for software maintenance include fixing bugs, adapting to changing user or business requirements, ensuring compatibility with newer systems and hardware, and cost efficiency by enhancing existing software rather than developing new systems. These motivations influence whether a direct code change or a reengineering process is more appropriate, depending on factors like the extent of required rework and project scope .

The two broad categories of process models for software maintenance are: 1) the direct code change model, which is preferred for projects involving small reworks where changes are reflected in documents later; and 2) the software reengineering model, which is suited for projects that require significant rework and is represented by a reverse engineering cycle followed by a forward engineering cycle .

You might also like