Software mst-3
Software mst-3
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.
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
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.
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:
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.
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.
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.
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.
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.
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.
popular frameworks and tools that are used for unit testing include JUnit, NUnit, and
xUnit.
2. Integration Testing
Example :
In Top Down Integration, the order of In Bottom-Up Integration, the order of
integration : Integration could be:
3. System Testing
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.
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.”
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.
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.
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.
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
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
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.
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
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.
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.
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.
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 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.
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.
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.
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.
7. Delivery – Software updates or in some cases new installation of the software. This
is when the changes arrive at the customers.
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.
•Improves performance
•Improves security
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.
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.
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:
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.
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 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.
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.
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.
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.
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