0% found this document useful (0 votes)
48 views6 pages

Assignment SE - 2017 - 022

This document contains Josiah Prathaban's responses to 9 questions about software evolution and maintenance for the SENG 41212 Software Evolution assignment. The questions cover topics such as the differences between maintaining existing software versus developing new systems, different classifications of software maintenance, the role of program comprehension, and strategies for migrating software systems. Overall, the responses provide detailed explanations of key concepts in software evolution and how they relate to effective software maintenance.

Uploaded by

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

Assignment SE - 2017 - 022

This document contains Josiah Prathaban's responses to 9 questions about software evolution and maintenance for the SENG 41212 Software Evolution assignment. The questions cover topics such as the differences between maintaining existing software versus developing new systems, different classifications of software maintenance, the role of program comprehension, and strategies for migrating software systems. Overall, the responses provide detailed explanations of key concepts in software evolution and how they relate to effective software maintenance.

Uploaded by

JOSIAH PRATHABAN
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

SENG 41212

Software Evolution
Assignment

Josiah Prathaban
SE/2017/022
01. What are some characteristics of maintaining software as opposed to new software systems?

Maintaining software involves activities such as fixing bugs, enhancing existing features, and ensuring
compatibility with new hardware and software systems. It also includes providing ongoing technical
support for users and making improvements to improve performance, security, and usability. The main
goal is to keep the software running smoothly and meeting the needs of its users.

In comparison, developing new software systems involves a more comprehensive process. It starts with
gathering requirements and defining the problem the software is intended to solve. Next, a design is
created, followed by implementation and testing to ensure the software meets the defined
requirements and functions as intended. Finally, the software is deployed and made available to users.
The focus is on creating a new, innovative solution that meets the needs of its users.

02. Compare the software maintenance classification based on intention, activity, and evidence.

Intention-based classification:

• Corrective Maintenance: This type of maintenance aims to fix errors and bugs in the software to
restore its correct functioning.
• Adaptive Maintenance: This type of maintenance aims to make changes to the software to
accommodate changes in the operating environment, such as hardware or software upgrades.
• Perfective Maintenance: This type of maintenance aims to improve the software by adding new
features, enhancing existing ones, or improving the user experience.
• Preventive Maintenance: This type of maintenance aims to prevent potential problems from
occurring in the software by proactively fixing potential problems before they occur.

Activity-based classification:

• Corrections: This type of maintenance focuses on fixing errors and bugs in the software to
restore its correct functioning.
• Enhancements: This type of maintenance focuses on adding new features, enhancing existing
ones, or improving the user experience.

Evidence-based classification:

• Business rules: This classification is based on the evidence from business rules and can be
further divided into enhancive, corrective, or reductive activities.
• Software properties: This classification is based on the evidence from the software properties
and can be further divided into adaptive, performance, preventive, or groomative activities.
• Documentation: This classification is based on the evidence from documentation and can be
further divided into updative or reformative activities.
• Support interface: This classification is based on the evidence from the support interface and
can be further divided into evaluative, consultive, or training activities.
03. Explain the term software cloning and discuss its significance with respect to software evolution.

Software cloning refers to the creation of a duplicate of an existing software system. This duplicate can
be used to make changes or add new features to the software without affecting the original system. By
having a separate copy, developers can safely test and implement changes, leading to a smoother and
more controlled evolution of the software.

Cloning can greatly aid in software evolution as it allows for the reuse of existing code, architecture, and
knowledge. This helps to speed up the development process and reduces the effort required to create
new software systems. Additionally, cloning provides a stable foundation for software maintenance and
evolution, as changes made to the cloned system do not affect the original system.

04. Discuss the role of program comprehension in software maintenance and evolution.

Program comprehension is the process of understanding the structure, behavior, and relationships
between components of a software system. It is a critical aspect of software maintenance and evolution,
as developers need to comprehend the software they are working on in order to perform maintenance
and evolution tasks effectively.

In software maintenance, program comprehension is essential for identifying the root cause of
problems, determining the necessary modifications, and implementing the changes effectively. It helps
developers to understand the existing system and avoid introducing new bugs or breaking existing
functionality.

In software evolution, program comprehension is crucial for adding new features, extending the system
to meet changing requirements, and ensuring that changes do not introduce unintended consequences.
Developers need to understand the structure, behavior, and relationships of the software components
to make informed decisions about where and how to make changes.

05. Explain the concept of mental model in program comprehension.

A mental model is a mental representation or internal image of a system that helps an individual
understand how it works. In the context of program comprehension, a mental model refers to a
developer's internal understanding of a software system. It includes knowledge about the system's
structure, behavior, and relationships between components, as well as how the system fits into its larger
context.

Having a mental model of a software system is critical for program comprehension because it allows
developers to understand the system's behavior and relationships between components. This
understanding is essential for performing software maintenance and evolution tasks, such as fixing bugs,
adding new features, and modifying existing features. A mental model helps developers to make
informed decisions and carry out changes effectively.

In simple terms, a mental model is like having a map in your head of how a software system works. It
helps you find your way around and make changes without getting lost.
06. Explain why it is important to conduct program comprehension before impact analysis.

Conducting program comprehension before impact analysis is important because it helps ensure that
the analysis is accurate and effective. Program comprehension provides a deeper understanding of the
software system, including its structure, behavior, and relationships between components. This
understanding is critical for identifying the potential impacts of changes to the system and for making
informed decisions about how to modify the system.

Without program comprehension, impact analysis can be based on incomplete or incorrect information,
leading to inaccurate predictions about the effects of changes to the system. This can result in
unintended consequences, such as the introduction of new bugs or performance issues, or the failure to
meet stakeholders' requirements.

07. What is ripple effect? In what way is it different from side effect?

The ripple effect refers to the indirect and often unintended consequences of changes made to a
software system. It occurs when a change to one part of the system affects other parts of the system,
causing a chain reaction of impacts that can be difficult to anticipate or predict.

For example, consider a software system that calculates the average of a set of numbers. If the
developer makes a change to the system to sort the numbers before calculating the average, this change
could have a ripple effect on other parts of the system. For example, the change could cause the system
to become slower, or it could introduce new bugs that were not previously present.

Side effects, on the other hand, refer to the unintended consequences of a change that are direct and
immediate. Unlike the ripple effect, side effects can usually be predicted and addressed before the
change is made.

For example, in the above scenario, the side effect of sorting the numbers would be that the system
now calculates the average of the sorted numbers, rather than the unsorted numbers.

08. What are the differences among reengineering, reverse engineering, forward engineering, and
rehosting?

Forward engineering refers to the process of creating a new software by moving downward from the
highest level of abstraction to the lowest level, following a sequence of activities such as formulating
concepts, identifying requirements, designing the system, and implementing the design.

Reverse engineering refers to the process of moving upward through the layers of abstraction to
understand a software system. It involves analyzing the software to determine its components and
relationships, and representing the system at a higher level of abstraction or in another form. Examples
of reverse engineering include decompilation, architecture extraction, document generation, and
software visualization.
Reengineering refers to the process of creating a more abstract view of the system through reverse
engineering activities, restructuring the abstract view, and then implementing the system in a new form
through forward engineering activities.

Rehosting means reengineering the source code of a system without adding or reducing features in the
transformed source code. It's often done to improve the efficiency of execution or reduce maintenance
costs. Rehosting involves alteration at the source code level, but if a change is needed at a higher level
of abstraction, such as the architecture design, reverse engineering techniques are applied.

In summary, forward engineering is the process of creating new software, reverse engineering is the
process of understanding existing software, reengineering is the process of creating a new form of
existing software, and rehosting is the process of improving the qualities of existing software without
changing its functionality.

09. Why is the risk of failure for Cold turkey migration strategy high?

The Cold turkey migration strategy, also known as the "Big Bang" migration strategy, involves switching
from the old system to the new system all at once. This means that there is no overlap between the use
of the old and new systems, and no fallback option in case the new system fails. This can lead to a high
risk of failure because the new system may have unforeseen problems or may not work as expected. If
the new system fails, there may not be any means to restore the old system, leading to significant
downtime, data loss, and other issues. Additionally, the sudden change can be disruptive to users and
may cause them to resist the adoption of the new system. Overall, the lack of a transition period and a
fallback option makes the Cold turkey migration strategy a high-risk approach to software migration.

10. What are the drawbacks of the Butterfly migration approach?

The Butterfly migration approach is a software migration strategy where the original system and the
new system are run in parallel for a certain period of time. The drawback of this approach is that it can
be complex and difficult to manage as both the old and new systems must be kept running
simultaneously. This can lead to increased costs, higher risks of failure, and a need for increased
resources to manage both systems. Additionally, the process of switching from the old system to the
new system can be time-consuming and may require significant coordination and testing. Finally, the
parallel operation of both systems can result in compatibility and synchronization issues, which can
cause errors and data loss.

11. What is the major difference between stability analysis and impact analysis?

Stability analysis and impact analysis are two distinct approaches used in software engineering,
specifically in software maintenance and evolution.

Stability analysis is focused on understanding the stability of the system and checking if any changes
made to the software will have unintended consequences. The objective of stability analysis is to ensure
that changes made to the software will not break or negatively impact the system as a whole.
On the other hand, impact analysis is focused on understanding the effects of changes made to the
software, including changes made to requirements, design, code, or testing, on the entire software
development process. The objective of impact analysis is to evaluate the cost, effort, and resources
required to make the changes and determine if they are feasible.

In summary, stability analysis is focused on ensuring the reliability of the software, while impact analysis
is focused on evaluating the effects of changes on the software development process.

12. Briefly explain the need for restructuring software.

Restructuring software is the process of changing the design and organization of existing code to
improve its internal structure and improve maintainability, readability, and scalability without affecting
its external behavior. The need for restructuring software arises due to various reasons such as evolving
business requirements, technological advancements, bug fixing, performance improvement, and code
modernization. It is essential to perform restructuring as it helps to reduce the maintenance cost,
minimize the risk of software failure, and enhance the overall software quality.

You might also like