0% found this document useful (0 votes)
28 views

Software mst-3

The document discusses the seven fundamental principles of testing according to ISTQB: 1) testing shows presence of defects, not absence, 2) exhaustive testing is impossible, 3) early testing saves time and money, 4) defects cluster together, 5) beware of pesticide paradox, 6) testing is context dependent, 7) absence of errors is a fallacy.

Uploaded by

kalpitrawat16908
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)
28 views

Software mst-3

The document discusses the seven fundamental principles of testing according to ISTQB: 1) testing shows presence of defects, not absence, 2) exhaustive testing is impossible, 3) early testing saves time and money, 4) defects cluster together, 5) beware of pesticide paradox, 6) testing is context dependent, 7) absence of errors is a fallacy.

Uploaded by

kalpitrawat16908
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/ 25

principles of testing

“Testing is a crucial element of software development. It can also be a complex


activity to structure correctly, and in a way that supports maximum efficiency.
Because of this complexity, it is always helpful to review processes and guidelines of
ISTQB (International Software Testing Qualifications Board)

What are the seven fundamental principles of testing by ISTQB?

These are the principles that have been collated and established by the ISTQB as
testing and software development has evolved over the years, and are recognised
as the absolute core of testing.

1. Testing shows the presence of defects, not their absence.


2. Exhaustive testing is impossible.
3. Early testing saves time and money.
4. Defects cluster together.
5. Beware of the pesticide paradox.
6. Testing is context - dependent.
7. Absence of errors is a fallacy.

1. Testing shows the Presence of Defects:

test software to discover issues so that they can be fixed before they are deployed to
live environments – this enables us to have confidence that our systems are
working.However, this testing process does not confirm that any software is completely
correct and completely devoid of issues. finding and resolving these issues is not itself
proof that the software or system is 100% issue-free. testing shows the presence of
bugs and not their absence

2. Exhaustive Testing is not Possible:

It is the process of testing the functionality of the software in all possible inputs (valid
or invalid) and pre-conditions is known as exhaustive testing. Exhaustive testing is
impossible means the ( it is absolutely impossible to test EVERYTHING )software can
never test at every test case. It can test only some test cases and assume that the
software is correct and it will produce the correct output in every test case. If the
software will test every test case then it will take more cost, effort, etc., which is
impractical.

3. Early Testing:
Testing early is fundamentally important in the software lifecycle. This could even mean
testing requirements before coding has started , for example – amending issues at this
stage is a lot easier and cheaper than doing so right at the end of the product’s
lifecycle, by which time whole areas of functionality might need to be re-written,
leading to overruns and missed deadlines.

4. Defect Clustering:

Components or modules of software usually contain the most number of issues, or are
responsible for most operational failures. Testing, therefore, should be focused on these
areas (proportionally to the expected – and later observed – defect density of these areas).
The Pareto principle of 80:20 can be applied – 80 % of defects are due to 20 % of code!

case with large and complex systems, but defect density can vary for a range of
reasons.
Issues are not evenly distributed throughout the whole system, and the more
complicated a component, or the more third-party dependencies there are, the
more likely it is that there will be defects.
Inheriting legacy code, and developing new features in certain components that
are

5. Pesticide Paradox:

This is based on the theory that when you use pesticide repeatedly on crops, insects
will eventually build up an immunity, rendering it ineffective ,Repeating the same test
cases, again and again, will not find new bugs. So it is necessary to review the test cases
and add or update test cases to find new bugs.

6. Testing is Context-Dependent:

Testing is ALL about the context , The methods and types of testing carried out can
completely depends on the context of the software developed. Different types of
software need to perform different types of testing. For example, The testing of the e-
commerce site is different from the testing of the Android application.

7. Absence of Errors Fallacy:

If a built software is 99% bug-free but does not follow the user requirement poor users
are unable to navigate, or/and it does not match business requirements then it is
unusable. It is not only necessary that software is 99% bug-free but it is also mandatory
to fulfill all the customer requirements.You should also be testing your software with
users

this can be done against early prototypes (at the usability testing phase),
To gather feedback that can be used to ensure and improve usability

Validation strategies
Validation strategies in testing refer to the approaches and techniques used to ensure
that a product or system meets its intended requirements and specifications. Here are
some common validation strategies used in software testing:

1. **Requirements Validation**: Ensure that the product or system meets the


specified requirements and fulfils the needs of stakeholders. This may involve
reviewing requirements documents, conducting walkthroughs or inspections, and
validating requirements through test cases.

2. **Functional Validation**: Validate that the product or system functions correctly


according to its functional specifications. This involves testing individual features and
functionalities to ensure they behave as expected. Techniques such as unit testing,
integration testing, system testing, and user acceptance testing (UAT) are commonly
used for functional validation.

3. **Non-functional Validation**: Validate non-functional aspects of the product or


system, such as performance, reliability, security, usability, and scalability. Non-
functional testing techniques include performance testing, load testing, stress testing,
security testing, accessibility testing, and compatibility testing.

4. **Regression Validation**: Validate that recent changes or updates to the product


or system have not introduced new defects or regression issues. Regression testing
involves retesting previously tested functionalities to ensure they still work as
expected after changes are made. Techniques such as automated regression testing,
selective regression testing, and impact analysis are used for regression validation.

5. **Data Validation**: Validate the correctness and integrity of data processed by the
product or system. This involves checking data input, storage, processing, and output
to ensure consistency, accuracy, and compliance with data requirements. Techniques
such as boundary value analysis, equivalence partitioning, and data validation rules
are used for data validation.
6. **User Validation**: Validate that the product or system meets the needs and
expectations of end-users. This involves gathering feedback from users through
usability testing, user interviews, surveys, and feedback mechanisms to identify areas
for improvement and ensure user satisfaction.

7. **Compliance Validation**: Validate that the product or system complies with


relevant standards, regulations, and industry best practices. This may involve
conducting compliance audits, security assessments, and validation against
regulatory requirements and industry standards.

Overall, validation strategies in testing involve a combination of techniques and


approaches to ensure that the product or system meets quality standards, satisfies
stakeholder needs, and delivers value to end-users.

Types of testing
“Testing is the process of executing a program to find errors. To make our software
perform well it should be error-free. If testing is done successfully it will remove all
the errors from the software. In this article, we will discuss first the principles of
testing and then we will discuss, the different types of testing.”
Different Types of Software Testing
1. Manual Testing
2. Automation Testing

1. Manual Testing

Manual testing is a technique to test the software that is carried out using the functions
and features of an application. In manual software testing, a tester carries out tests on
the software by following a set of predefined test cases. In this testing, testers make
test cases for the codes, test the software, and give the final report about that software.
Manual testing is time-consuming because it is done by humans, and there is a chance
of human errors.

2. Automation Testing

Automated Testing is a technique where the Tester writes scripts on their own and uses
suitable Software or Automation Tool to test the software. It is an Automation Process
of a Manual Process. It allows for executing repetitive tasks without the intervention of
a Manual Tester.

Types of Manual Testing


1. White Box Testing
2. Black Box Testing
3. Gray Box

1. White Box Testing

White box testing techniques analyze the internal structures the used data structures,
internal design, code structure, and the working of the software rather than just the
functionality as in black box testing. It is also called glass box testing clear box testing or
structural testing. White Box Testing is also known as transparent testing or open box
testing.

2. Black Box Testing

Black-box testing is a type of software testing in which the tester is not concerned with
the internal knowledge or implementation details of the software but rather focuses on
validating the functionality based on the provided specifications or requirements.

3. Gray Box Testing


Gray Box Testing is a software testing technique that is a combination of the Black Box
Testing technique and the White Box Testing technique.

1. In the Black Box Testing technique, the tester is unaware of the internal structure of
the item being tested and in White Box Testing the internal structure is known to the
tester.
2. The internal structure is partially known in Gray Box Testing.
3. This includes access to internal data structures and algorithms to design the test
cases.

Types of Black Box Testing


1. Functional Testing
2. Non-Functional Testing

1. Functional Testing

Functional Testing is a type of Software Testing in which the system is tested against the
functional requirements and specifications. Functional testing ensures that the
requirements or specifications are properly satisfied by the application. This type of
testing is particularly concerned with the result of processing. It focuses on the
simulation of actual system usage but does not develop any system structure
assumptions. The article focuses on discussing function testing.

2. Non-Functional Testing

Non-functional Testing is a type of Software Testing that is performed to verify the non-
functional requirements of the application. It verifies whether the behavior of the
system is as per the requirement or not. It tests all the aspects that are not tested in
functional testing. Non-functional testing is a software testing technique that checks
the non-functional attributes of the system. Non-functional testing is defined as a type
of software testing to check non-functional aspects of a software application. It is
designed to test the readiness of a system as per nonfunctional parameters which are
never addressed by functional testing. Non-functional testing is as important as
functional testing.

Types of Functional Testing


1. Unit Testing
2. Integration Testing
3. System Testing
1. Unit Testing

Unit testing is a method of testing individual units or components of a software


application. It is typically done by developers and is used to ensure that the individual
units of the software are working as intended. Unit tests are usually automated and are
designed to test specific parts of the code, such as a particular function or method. Unit
testing is done at the lowest level of the software development process, where
individual units of code are tested in isolation.

popular frameworks and tools that are used for unit testing include JUnit, NUnit, and
xUnit.

2. Integration Testing

Integration testing is a method of testing how different units or components of a


software application interact with each other. It is used to identify and resolve any
issues that may arise when different units of the software are combined. Integration
testing is typically done after unit testing and before functional testing and is used to
verify that the different units of the software work together as intended.

Different Ways of Performing Integration Testing:

Different ways of Integration Testing are discussed below.

Top-down integration testing: It starts with the highest-level modules and


differentiates them from lower-level modules.
Bottom-up integration testing: It starts with the lowest-level modules and
integrates them with higher-level modules until all modules are tested.
Big-Bang integration testing: It combines all the modules and integrates them all at
once.
Incremental integration testing: It integrates the modules in small groups, testing
each group as it is added.

Example :
In Top Down Integration, the order of In Bottom-Up Integration, the order of
integration : Integration could be:

1. Contacts with Mail


1. Yahoo Homepage with Mail
2. Sent with Mail
2. Yahoo Homepage with News
3. Inbox with Mail
3. Yahoo Homepage with Shopping
4. Mail with Yahoo Homepage
4. Yahoo Homepage with Finance
5. Mail with Inbox 5. News with Yahoo Homepage

6. Mail with Sent 6. Finance with Yahoo Homepage


7. Mail with Contacts 7. Shopping with Yahoo Homepage

3. System Testing

System Testing is a type of software testing that is performed on a completely


integrated system to evaluate the compliance of the system with the corresponding
requirements. In system testing, integration testing passed components are taken as
input. The goal of integration testing is to detect any irregularity between the units that
are integrated.

System Testing Process: System Testing is performed in the following steps:

Test Environment Setup: Create testing environment for the better quality testing.
Create Test Case: Generate test case for the testing process.
Create Test Data: Generate the data that is to be tested.
Execute Test Case: After the generation of the test case and the test data, test cases
are executed.
Defect Reporting: Defects in the system are detected.
Regression Testing: It is carried out to test the side effects of the testing process.
Log Defects: Defects are fixed in this step.
Retest: If the test is not successful then again test is performed.

Tools used for System Testing :

1. JMeter
2. Gallen Framework
3. Selenium

Acceptance Testing
“Acceptance Testing is a method of software testing where a system is tested for
acceptability. The major aim of this test is to evaluate the compliance of the system
with the business requirements and assess whether it is acceptable for delivery or not.”

“It is formal testing according to user needs, requirements, and business processes
conducted to determine whether a system satisfies the acceptance criteria or not and
to enable the users, customers, or other authorized entities to determine whether to
accept the system or not.”

Types of Acceptance Testing

1. User Acceptance Testing (UAT)

User acceptance testing is used to determine whether the product is working for the
user correctly. Specific requirements which are quite often used by the customers are
primarily picked for testing purposes. This is also termed as End-User Testing.

2. Business Acceptance Testing (BAT)


BAT is used to determine whether the product meets the business goals and purposes
or not. BAT mainly focuses on business profits which are quite challenging due to the
changing market conditions and new technologies, so the current implementation may
have to being changed which results in extra budgets.

3. Contract Acceptance Testing (CAT)

CAT is a contract that specifies that once the product goes live, within a predetermined
period, the acceptance test must be performed, and it should pass all the acceptance
use cases. Here is a contract termed a Service Level Agreement (SLA), which includes
the terms where the payment will be made only if the Product services are in-line with
all the requirements, which means the contract is fulfilled. Example : contract in terms
of the period of testing, areas of testing, conditions on issues encountered at later
stages, payments, etc.

4. Regulations Acceptance Testing (RAT)

RAT is used to determine whether the product violates the rules and regulations that
are defined by the government of the country where it is being released. This may be
unintentional but will impact negatively on the business. If any rules and regulations
are violated for any country then that country or the specific region then the product
will not be released in that country or region. If the product is released even though
there is a violation then only the vendors of the product will be directly responsible.

5. Operational Acceptance Testing (OAT)

OAT is used to determine the operational readiness of the product and is non-functional
testing. It mainly includes testing of recovery, compatibility, maintainability, reliability,
etc. OAT assures the stability of the product before it is released to production.

6. Alpha Testing

Alpha testing is used to determine the product in the development testing environment
by a specialized testers team usually called alpha testers.

7. Beta Testing

Beta testing is used to assess the product by exposing it to the real end-users, typically
called beta testers in their environment. Feedback is collected from the users and the
defects are fixed. Also, this helps in enhancing the product to give a rich user
experience.
Types of Non-functional Testing
1. Performance Testing
2. Usability Testing
3. Compatibility Testing

1. Performance Testing

Performance Testing is a type of software testing that ensures software applications


perform properly under their expected workload. It is a testing technique carried out to
determine system performance in terms of sensitivity, reactivity, and stability under a
particular workload.

2. Usability Testing

You design a product (say a refrigerator) and when it becomes completely ready, you
need a potential customer to test it to check it working. To understand whether the
machine is ready to come on the market, potential customers test the machines.
Likewise, the best example of usability testing is when the software also undergoes
various testing processes which is performed by potential users before launching into
the market

3. Compatibility Testing

It is performed on an application to check its compatibility (running capability) on


different platforms/environments. This testing is done only when the application
becomes stable. This means simply this compatibility test aims to check the developed
software application functionality on various software, hardware platforms, networks
browser etc.

Smoke Testing
Smoke testing, also known as “Build Verification Testing” or “Build Acceptance
Testing,”Smoke testing is a process where the software build is deployed to a quality
assurance environment and is verified to ensure the stability of the application.
Smoke Testing is also known as Confidence Testing or Build Verification Testing.
Smoke Testing is a software testing method that determines whether the employed
build is stable or not. It acts as a confirmation of whether the quality assurance
team can proceed with further testing. Smoke tests are a minimum set of tests run
on each build.
Example: If the project has 2 modules so before going to the module make sure that
module 1 works properly.

Characteristics of Smoke Testing:


1. Level of Testing: Without delving into specific functionality, the testing procedure is
superficial and broad-based, covering only the most important features.
2. Automation: Automated smoke tests are a common way to quickly and effectively
confirm fundamental system functionality.
3. Frequency of execution: Usually, smoke testing is done following the release of a
new build or following significant code modifications. In order to identify major
issues early on, it can be run either daily or per build.
4. Time Management: The process of determining the build’s stability is usually swift,
requiring little time.
5. Environment: Usually, smoke tests are carried out in a controlled setting that is
quite similar to the production setting.

Goal of Smoke Testing :


1. Stop Wasting Resources:
2. Time Management:
3. Making Objective Decisions:
4. Continuous Integration:
5. Communication

Tools used for Smoke Testing:


Selenium
PhantomJS

Advantages of Smoke Testing:


1. It helps in identifying defects in the early stages.
2. It improves the quality of the system.
3. Smoke testing reduces the risk of failure.
4. It saves test effort and time.
5. It makes it easy to detect critical errors
6. It runs quickly
7. It minimizes integration risks.

Types of Smoke Testing:


1. Daily Smoke Testing:
2. Acceptance Smoke Testing:
3. UI Smoke Testing:

Regression Testing
Regression testing is a black box testing techniques. It is used to authenticate a code change
in the software does not impact the existing functionality of the product. Regression testing
is making sure that the product works fine with new functionality, bug fixes, or any change in
the existing feature,

Test cases are re-executed to check the previous functionality of the application is working
fine, and the new changes have not produced any bugs.
When can we perform Regression Testing?
1. When new functionality added to the application.
2. When there is a Change Requirement.
3. When the defect fixed
4. When there is a performance issue fix
5. When there is an environment change

How to perform Regression Testing?

Regression testing can be performed using the following techniques:

1.Re-test All:

In this approach, all the test case suits should be re-executed. Here we can define re-test as
when a test fails, and we determine the cause of the failure is a software fault. The fault is
reported, we can expect a new version of the software in which defect fixed.

2.Regression test Selection:


In this technique, a selected test-case suit will execute rather than an entire test-case
suit.
The selected test case suits divided in two cases
1. Reusable Test cases.
2. Obsolete Test cases.
Reusable test cases can use in succeeding regression cycle.
Obsolete test cases can't use in succeeding regression cycle.

3.Prioritization of test cases:Prioritize the test case depending on business impact, critical
and frequently functionality used. Selection of test cases will reduce the regression test
suite.

Difference Between Smoke Testing and Regression Testing

1. Black Box testing: It is used for validation. In this, we ignore internal working
mechanisms and focus on “what is the output?”
2. White box testing: It is used for verification. In this, we focus on internal
mechanisms i.e. how the output is achieved.

What is Software Maintenance?


Software maintenance is the process of changing, modifying, and updating software to
keep up with customer needs. Software maintenance is done after the product has
launched for several reasons including improving the software overall, correcting
issues or bugs, to boost performance, and more.

Software maintenance is a natural part of SDLC (software development life cycle).


Software developers don’t have the luxury of launching a product and letting it run,
they constantly need to be on the lookout to both correct and improve their software
to remain competitive and relevant.

Why is software maintenance important?


Creating a new piece of software and launching it into the world is an exciting step for
any company. A lot goes into creating your software and its launch including the
actual building and coding, licensing models, marketing, and more. However, any great
piece of software must be able to adapt to the times.

This means monitoring and maintaining properly. As technology is changing at the


speed of light, software must keep up with the market changes and demands.

What are the 4 types of software


maintenance?
The four different types of software maintenance are each performed for different
reasons and purposes.A given piece of software may have to undergo one, two, or all
types of maintenance throughout its lifespan.

The four types are:

1. Corrective Software Maintenance


2. Preventative Software Maintenance
3. Perfective Software Maintenance
4. Adaptive Software Maintenance
Corrective Software Maintenance
Corrective software maintenance is the typical, classic form of maintenance (for
software and anything else for that matter). Corrective software maintenance is
necessary when something goes wrong in a piece of software including faults and
errors. These can have a widespread impact on the functionality of the software in
general and therefore must be addressed as quickly as possible.

Example : software vendors can address issues that require corrective maintenance
due to bug reports that users send in. If a company can recognize and take care of
faults before users discover them, this is an added advantage that will make your
company seem more reputable and reliable (no one likes an error message after all).

Preventative Software Maintenance

Preventative software maintenance is looking into the future so that your software
can keep working as desired for as long as possible. This includes making necessary
changes, upgrades, adaptations and more. Preventative software maintenance may
address small issues which at the given time may lack significance but may turn into
larger problems in the future. These are called latent faults which need to be detected
and corrected to make sure that they won’t turn into effective faults.

Perfective Software Maintenance

once the software is released to the public, new issues and ideas come to the surface.
Users may see the need for new features or requirements that they would like to see in
the software to make it the best tool available for their needs. This is when perfective
software maintenance comes into play.
Perfective software maintenance aims to adjust software by adding new features as
necessary and removing features that are irrelevant or not effective in the given
software. This process keeps software relevant as the market, and user needs, change.

Adaptive Software Maintenance

Adaptive software maintenance has to do with the changing technologies as well as


policies and rules regarding your software. These include operating system changes,
cloud storage, hardware, etc. When these changes are performed, your software must
adapt to properly meet new requirements and continue to run well.

The Software Maintenance Process

The software maintenance process involves various software maintenance techniques


that can change according to the type of maintenance and the software maintenance
plan in place.

software maintenance process models include the following steps:

1. Identification & Tracing – The process of determining what part of the software
needs to be modified (or maintained). This can be user-generated or identified by the
software developer itself depending on the situation and specific fault.

2. Analysis – The process of analyzing the suggested modification including


understanding the potential effects of such a change. This step typically includes cost
analysis to understand if the change is financially worthwhile.
3. Design – Designing the new changes using requirement specifications

4. Implementation – The process of implementing the new modules by programmers.

5. System Testing – Before being launched, the software and system must be tested.
This includes the module itself, the system and the module, and the whole system at
once.

6. Acceptance Testing- Users test the modification for acceptance. This is an


important step as users can identify ongoing issues and generate recommendations
for more effective implementation and changes.

7. Delivery – Software updates or in some cases new installation of the software. This
is when the changes arrive at the customers.

Software Maintenance Cost


1. The cost of software maintenance can be high. However, this doesn’t negate the
importance of software maintenance. In certain cases, software maintenance can
cost up to two-thirds of the entire software process cycle or more than 50% of the
SDLC processes.
2. The costs involved in software maintenance are due to multiple factors and vary
depending on the specific situation. The older the software, the more maintenance
will cost, as technologies (and coding languages) change over time. Revamping an
old piece of software to meet today’s technology can be an exceptionally
expensive process in certain situations.
3. There are certain ways to try and bring down software maintenance costs. These
include optimizing the top of programming used in the software, strong typing,
and functional programming.
4. Without maintenance, any software will be obsolete and essentially useless over
time.

Software maintenance strategies

All software companies should have a specific strategy in place to tackle software
maintenance effectively and completely.
Documentation is one important strategy in software development. If software
documentation isn’t up to date, upgrading can be seemingly impossible. The
documentation should include info about how the code works, solutions to
potential problems, etc.
QA is also an important part of a software maintenance plan. While QA is
important before an initial software launch, it can also be integrated much earlier
in the process (as early as the planning stage) to make sure that the software is
developed correctly and to give insight into making changes when necessary.

Importance of Software Maintenance


•Improves reliability and stability

•Improves performance

•Improves security

•Reduces downtime and disruption

•Adapt to changing technology trends

Bug Fixing

Bug fixing comes at a priority to run the software seamlessly. This process contains
searching out for errors in code and correcting them. The issues can occur in hardware,
operating systems, or any part of the software. This must be done without hurting the
rest of the functionalities of existing software.

Removal of Outdated Functions

The unwanted functionalities are useless. Moreover, by occupying space in the solution,
they hurt the efficiency of the solution. Using a software maintenance strategy, such UI
and coding elements are removed and replaced with new development using the latest
tools and technologies. This elimination makes the system adaptive to cope with
changing circumstances.

Performance Improvement

It improve system performance, developers detect issues through testing and resolve
them. Data and coding restrictions as well as reengineering are part of software
maintenance. It prevents the solution from vulnerabilities. This is not any functionality
that performs in operations, but it develops to stop harmful activities like hacking.

Software Maintenance Cost


The cost of the specific software can be categorized into three different components:
Software License, Software Maintenance, and Implementation Services.

But if we consider the cost of software maintenance, it is categorized into two parts.

1. Non-Technical Factors
2. Technical Factors

1. Non-Technical Factors

The non-technical factors include for average software maintenance cost are:

Software Domain: When the domain of the software is well-defined, system


requirements may not change over time. This will lead to a fewer chance of
maintenance.

Team Stability: When a new team member joins the dedicated software development
team, it takes some time to get his hands on the software development process.
Therefore, it becomes quite difficult to make changes to the software. This will add a
cost to the software maintenance.

Software Lifecycle: When software becomes obsolete, the original hardware is


changed, and the conversion cost exceeds the rewriting cost.

Dependent on External Environment: When software is dependent on the external


environment, it must be modified whenever the external environment changes.
Hardware Stability: Software maintenance expenses are reduced to zero if the
software executes on a specific hardware configuration that does not change during
the entire software lifecycle. However, this is a rare occurrence due to ongoing
hardware development.

2. Technical Factors

The technical factors include for average software maintenance cost are:

Module Independence: The ability to update any software block in the system
without impacting the others.

Programming Language: Software written in a high-level programming language is


generally easier to understand than written in a low-level language.

Programming Style: The developer's writing method determines the ease of updating
and understanding software.

Program Validation and Testing: The more time spent evaluating the design and
testing of the software, the fewer bugs it contains and the lower the cost of software
maintenance. The cost of resolving errors is determined by the type of error. Errors in
software requirements are the most expensive.

Documentation: A clear and complete documentation will bring down the


maintenance cost.
Configuration Management Techniques: Keeping track of system documentation and
ensuring uniformity is one of the costs involved. This means that good configuration
management can help you save money.

Challenges in Software Maintenance

Lack of documentation

Jumping into a new project without any documentation can be a developer's worst
nightmare. It's like starting a new job and needing to ask questions about every little thing
just to get by. This can make it difficult for developers to understand how the software works
and identify the root cause of problems or issues. Inadequate documentation can also hinder
new developers from learning about the software and contributing to its upkeep and growth.
Legacy code

Legacy code refers to code that was written using outdated programming languages,
frameworks, or technologies. As new technology emerges, it can be difficult to maintain
legacy code and keep it up to date with the latest software standards. This usage of older
technologies can make it challenging for developers to maintain and update the software, as
they may need to make significant changes to the codebase to keep it functional and
compatible with new technology trends.
Limited resources

Software maintenance requires a significant investment of time, money, and resources. When
resources are limited, it can be challenging to maintain and update the software. This
shortage can result in delayed updates, reduced quality, and increased risk of security
breaches and other issues.
Scope creep
Scope creep refers to software functionality expanding beyond its original scope. As new
features and capabilities are added to the software, it can become more complex and
challenging to maintain. This complexity can result in higher maintenance costs, longer
development times, and an increased risk of bugs and errors.

Best practices for software maintenance


•Maintain proper documentation

•Regular software testing

Software Maintenance Models

Quick-Fix Model

Just how it sounds, the main aim of this model is to search for glitches and fix them
as soon as possible. The main advantage of the quick-fix model is that it works very
rapidly at a low price. The approach of this model is to modify the coding with
minimal consideration.

Iterative Enhancement Model

The primary nature of the changes in this model is iterative. Based on the analysis of
the existing system, the changes are incorporated in this model. It requires complete
documentation of the software that is available before making any changes.

The Re-use Oriented Model

In this model, the part of the existing system that is in the position of using is
identified; hence it is called the ‘re-use-oriented model’. After analyzing, this model
goes through changes or enhancements as required.
Software Reengineering
“Software reengineering refers to updating the existing software without changing its
functionality. The code is rewritten, and the software design is changed during this
process , Sometimes, it’s not easy to implement the latest technologies with your
existing software. It becomes a tedious process if the hardware becomes obsolete.”

Re-Engineering Process

First process that comes in re-engineering is to make a decision. You have to


decide what to reengineer. Is it some part of your software product or the
entire?
Second step is to execute reverse engineering to implement the
specifications of existing software.
Restructure the program part. For example, do the needful change the
function-oriented programs into object-oriented programs.
The next involves the restructuring of the required data.
Implement forward engineering strategies for re-engineered software.

You might also like