SE Unit 5 RG22
SE Unit 5 RG22
There are two distinct types of risks : generic risks and product-specific risks. Generic risks are a potential threat to every
software project. Product-specific risks can be identified only by those with a clear understanding of the technology, the people, and
the environment that is specific to the project at hand. To identify product-specific risks, the project plan and the software statement
of scope are examined and an answer to the following question is developed: "What special characteristics of this product may
threaten our project plan?"
One method for identifying risks is to create a risk item checklist. The checklist can be used for risk identification and focuses on
some subset of known and predictable risks in the following generic subcategories:
• Product size—risks associated with the overall size of the software to be built or modified.
• Customer characteristics—risks associated with the sophistication of the customer and the developer's ability to communicate
with the customer in a timely manner.
• Process definition—risks associated with the degree to which the software process has been defined and is followed by the
development organization.
• Development environment—risks associated with the availability and quality of the tools to be used to build the product.
Technology to be built—risks associated with the complexity of the system to be built and the "newness" of the technology that is
packaged by the system.
• Staff size and experience—risks associated with the overall technical and project experience of the software engineers who will
do the work.
The risk item checklist can be organized in different ways. Questions relevant to each of the topics can be answered for each
software project. The answers to these questions allow the planner to estimate the impact of risk. A different risk item checklist format
simply lists characteristics that are relevant to each generic subcategory. Finally, a set of “risk components and drivers" are listed
along with their probability of occurrence. Drivers for performance, support, cost, and schedule are discussed in answer to later
questions.
A number of comprehensive checklists for software project risk have been proposed in the literature . These provide useful insight
into generic risks for software projects and should be used whenever risk analysis and management is instituted. However, a relatively
short list of questions can be used to provide a preliminary indication of whether a project is “at risk.”
Next, the impact of each risk is assessed. Each risk component is assessed and an impact category is determined. The categories
for each of the four risk components—performance, support, cost, and schedule—are averaged to determine an overall impact value.
Once the first four columns of the risk table have been completed, the table is sorted by probability and by impact. High-probability,
high-impact risks percolate to the top of the table, and low-probability risks drop to the bottom. This accomplishes first-order risk
prioritization.
The project manager studies the resultant sorted table and defines a cutoff line. The cutoff line (drawn horizontally at some point in
the table) implies that only risks that lie above the line will be given further attention. Risks that fall below the line are re-evaluated to
accomplish second-order prioritization. Risk impact and probability have a distinct influence on management concern. A risk factor
that has a high impact but a very low probability of occurrence should not absorb a significant amount of management time. However,
high-impact risks with moderate to high probability and low-impact risks with high probability should be carried forward into the risk
analysis steps that follow.
All risks that lie above the cutoff line must be managed. The column labeled RMMM contains a pointer into a Risk Mitigation,
Monitoring and Management Plan or alternatively, a collection of risk information sheets developed for all risks that lie above the
cutoff.
Risk probability can be determined by making individual estimates and then developing a single consensus value. Although that
approach is workable, more sophisticated techniques for determining risk probability have been developed. Risk drivers can be
assessed on a qualitative probability scale that has the following values: impossible, improbable, probable, and frequent.
Mathematical probability can then be associated with each qualitative value (e.g., a probability of 0.7 to 1.0 implies a highly probable
risk).
Returning once more to the risk analysis approach proposed by the U.S. Air Force , the following steps are recommended to
determine the overall consequences of a risk:
1. Determine the average probability of occurrence value for each risk component.
2. Determine the impact for each component based on the criteria .
3. Complete the risk table and analyze the results as described in the preceding sections.
The overall risk exposure, RE, is determined using the following relationship:
RE = P x C
where P is the probability of occurrence for a risk, and C is the the cost to the project should the risk occur.
For example, assume that the software team defines a project risk in the following manner:
Risk identification. Only 70 percent of the software components scheduled for reuse will, in fact, be integrated into the application.
The remaining functionality will have to be custom developed.
Risk probability. 80% (likely).
Risk impact. 60 reusable software components were planned.
Risk exposure. RE = 0.80 x 25,200 ~ $20,200.
One way to do this is to represent the risk in condition-transition-consequence (CTC) format . That is, the risk is stated in the
following form: Given that <condition> then there is concern that (possibly) <consequence>.
Using the CTC format for the reuse risk noted in Section 6.4.2, we can write:
Given that all reusable software components must conform to specific design standards and that some do not conform, then there
is concern that (possibly) only 70 percent of the planned reusable modules may actually be integrated into the as-built system,
resulting in the need to custom engineer the remaining 30 percent of components.
Subcondition 1. Certain reusable components were developed by a third party with no knowledge of internal design standards.
Subcondition 2. The design standard for component interfaces has not been solidified and may not conform to certain existing
reusable components.
Subcondition 3. Certain reusable components have been implemented in a language that is not supported on the target
environment.
The consequences associated with these refined subconditions remains the same (i.e., 30 percent of software components must
be customer engineered), but the refinement helps to isolate the underlying risks and might lead to easier analysis and response.
Example:
Let us understand RMMM with the help of an example of high staff turnover.
Risk Mitigation:
To mitigate this risk, project management must develop a strategy for reducing turnover. The possible steps to be
taken are:
• Meet the current staff to determine causes for turnover (e.g., poor working conditions, low pay, competitive job
market).
• Mitigate those causes that are under our control before the project starts.
• Once the project commences, assume turnover will occur and develop techniques to ensure continuity when
people leave.
• Organize project teams so that information about each development activity is widely dispersed.
• Define documentation standards and establish mechanisms to ensure that documents are developed in a timely
manner.
• Assign a backup staff member for every critical technologist.
Risk Monitoring:
As the project proceeds, risk monitoring activities commence. The project manager monitors factors that may
provide an indication of whether the risk is becoming more or less likely. In the case of high staff turnover, the
following factors can be monitored:
• General attitude of team members based on project pressures.
• Interpersonal relationships among team members.
• Potential problems with compensation and benefits.
• The availability of jobs within the company and outside it.
Risk Management:
Risk management and contingency planning assumes that mitigation efforts have failed and that the risk has
become a reality. Continuing the example, the project is well underway, and a number of people announce that they
will be leaving. If the mitigation strategy has been followed, backup is available, information is documented, and
knowledge has been dispersed across the team. In addition, the project manager may temporarily refocus
resources (and readjust the project schedule) to those functions that are fully staffed, enabling newcomers who
must be added to the team to “get up to the speed“.
Drawbacks of RMMM:
• It incurs additional project costs.
• It takes additional time.
• For larger projects, implementing an RMMM may itself turn out to be another tedious project.
• RMMM does not guarantee a risk-free project, infact, risks may also come up after the project is delivered.
2. Adaptive Maintenance
It contains modifying the software to match changes in the ever-changing environment.
3. Preventive Maintenance
It is the process by which we prevent our system from being obsolete. It involves the concept of reengineering & reverse
engineering in which an old system with old technology is re-engineered using new technology. This maintenance
prevents the system from dying out.
4. Perfective Maintenance
It defines improving processing efficiency or performance or restricting the software to enhance changeability. This may
contain enhancement of existing system functionality, improvement in computational efficiency, etc.
Q6. Reengineering:
Software Re-engineering is a process of software development which is done to improve the maintainability
of a software system. Re-engineering is the examination and alteration of a system to reconstitute it in a new
form. This process encompasses a combination of sub-processes like reverse engineering, forward engineering,
reconstructing etc.
Re-engineering, also known as reverse engineering or software re-engineering, is the process of analyzing,
designing, and modifying existing software systems to improve their quality, performance, and maintainability.
This can include updating the software to work with new hardware or software platforms, adding new features,
or improving the software’s overall design and architecture.
Software re-engineering, also known as software restructuring or software renovation, refers to the process of
improving or upgrading existing software systems to improve their quality, maintainability, or functionality. It
involves reusing the existing software artifacts, such as code, design, and documentation, and transforming
them to meet new or updated requirements.
The primary goal of software re-engineering is to improve the quality and maintainability of the software system,
while minimizing the risks and costs associated with the redevelopment of the system from scratch. Software
re-engineering can be initiated for various reasons, such as:
1. Improving software quality: Re-engineering can help improve the quality of software by eliminating defects,
improving performance, and enhancing reliability and maintainability.
2. Updating technology: Re-engineering can help modernize the software system by updating the technology
used to develop, test, and deploy the system.
3. Enhancing functionality: Re-engineering can help enhance the functionality of the software system by
adding new features or improving existing ones.
4. Resolving issues: Re-engineering can help resolve issues related to scalability, security, or compatibility
with other systems.
The process of software re-engineering involves the following steps:
1. Planning: The first step is to plan the re-engineering process, which involves identifying the reasons for re-
engineering, defining the scope, and establishing the goals and objectives of the process.
2. Analysis: The next step is to analyze the existing system, including the code, documentation, and other
artifacts. This involves identifying the system’s strengths and weaknesses, as well as any issues that need
to be addressed.
3. Design: Based on the analysis, the next step is to design the new or updated software system. This involves
identifying the changes that need to be made and developing a plan to implement them.
4. Implementation: The next step is to implement the changes by modifying the existing code, adding new
features, and updating the documentation and other artifacts.
5. Testing: Once the changes have been implemented, the software system needs to be tested to ensure that
it meets the new requirements and specifications.
6. Deployment: The final step is to deploy the re-engineered software system and make it available to end-
users.
Overall, software re-engineering can be a cost-effective way to improve the quality and functionality of existing
software systems, while minimizing the risks and costs associated with starting from scratch.
Re-engineering can be done for a variety of reasons, such as:
To improve the software’s performance and scalability: By analyzing the existing code and identifying
bottlenecks, re-engineering can be used to improve the software’s performance and scalability.
1. To add new features: Re-engineering can be used to add new features or functionality to existing
software.
2. To support new platforms: Re-engineering can be used to update existing software to work with new
hardware or software platforms.
3. To improve maintainability: Re-engineering can be used to improve the software’s overall design and
architecture, making it easier to maintain and update over time.
Some experts provide specific examples of forward engineering, including the use of abstract database models or
templates into physical database tables. Other examples include a situation where developers or others make models or
diagrams into concrete code classes, or specific code modules.
Forward engineering is basically a technique through which we create high-level designs or models using low-level
information under high complexities. Thus, this type of engineering consists of a completely different set of principles
for information process and packaging. It applies to all the processes of software engineering that contain SDLC for
recreating the existing application. The main aim of forward engineering here is to fulfill the needs of new users with
the process of re-engineering.
What is Reverse Engineering?
A common name of this type of engineering is backward engineering. Reverse engineering is basically a process
similar to that of forward engineering, but it happens in reverse. This process collects information out of the pre-
existing given application. This process takes comparatively less time than forward engineering when developing an
application. Reverse engineering breaks down an application into minute systems to extract its architecture or the
knowledge within.
Difference between Forward Engineering and Reverse Engineering
Here is a list of the differences between forward engineering and reverse engineering.
Basics Forward engineering aims at re-developing Reverse engineering aims at deducing the resources
an application with the provided resources and requirements that went into developing an
according to the current requirements. application in the first place.
Certainty It always leads to the production of Using this type of engineering, a user can easily yield a
applications that implement the specified lot of ideas associated with the requirements of the
requirements. implementation and development of the application.
Skills Needed It requires high-proficiency skills. It works even with a low level of expertise.
Total Time Required It takes more time. It takes comparatively less time.
Accuracy The model in engineering must be complete An inexact model can also yield partial information
and precise. about the initial requirements and resources that went
into its development.
Examples A few examples of forward engineering are Performing research on various instruments is a
the construction of a DC motor, constructing commendable example of backward engineering.
kits (electronic), etc.