Unit 5
Unit 5
Unit 5
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.
1. Load testing
Load testing simulates a real-world load on the system to see how it performs under stress. It
helps identify bottlenecks and determine the maximum number of users or transactions the
system can handle. It checks the product’s ability to perform under anticipated user loads. The
objective is to identify performance congestion before the software product is launched in the
market.
2. Stress testing
Stress testing is a type of load testing that tests the system’s ability to handle a high load above
normal usage levels. It helps identify the breaking point of the system and any potential issues
that may occur under heavy load conditions. It involves testing a product under extreme
workloads to see whether it handles high traffic or not. The objective is to identify the breaking
point of a software product.
3. Spike testing
Spike testing is a type of load testing that tests the system’s ability to handle sudden spikes in
traffic. It helps identify any issues that may occur when the system is suddenly hit with a high
number of requests. It tests the product’s reaction to sudden large spikes in the load generated
by users.
4. Soak testing
Soak testing is a type of load testing that tests the system’s ability to handle a sustained load
over a prolonged period. It helps identify any issues that may occur after prolonged usage of
the system.
5. Endurance testing
Endurance testing is similar to soak testing, but it focuses on the long-term behavior of the
system under a constant load. It is performed to ensure the software can handle the expected
load over a long period.
6. Volume testing
In Volume testing , a large number of data is saved in a database and the overall software
system’s behavior is observed. The objective is to check the product’s performance under
varying database volumes.
7. Scalability testing
In Scalability testing , the software application’s effectiveness is determined by scaling up to
support an increase in user load. It helps in planning capacity additions to your software
system.
Step 3: Plan Your Tests to Figure out different scenarios to test, considering things like how
users might behave and what data you will use. This helps you create tests that cover a range of
situations and decide what data to collect.
Step 4: Set Up Your Tools Get everything ready for testing, including tools and ways to track
what’s happening during the tests.
Step 5: Create and Run Tests Make the tests based on your plan and run them. Keep track of
all the data you get from the tests.
Step 6: Look at the Results After each test, see what you find out. Adjust your tests based on
what you learn, and run them again to see if things change.
Step 7: Keep Testing Keep analyzing and adjusting your tests to get the best results. Repeat
the process until you are satisfied with the performance.
It ensures the great optimization of the software and also allows many users to use it at the
same time.
It ensures the client as well as the end-customer’s satisfaction.
today’s digital ecosystem. It does this by distributing virtual users across multiple locations
and providing real-time information.
Regression testing is a crucial aspect of software engineering that ensures the stability and
reliability of a software product. It involves retesting the previously tested functionalities to
verify that recent code changes haven’t adversely affected the existing features.
By identifying and fixing any regression or unintended bugs, regression testing helps
maintain the overall quality of the software. This process is essential for software
development teams to deliver consistent and high-quality products to their users.
5.12 Techniques for the selection of Test cases for Regression Testing
Select all test cases: In this technique, all the test cases are selected from the already
existing test suite. It is the simplest and safest technique but not very efficient.
Select test cases randomly: In this technique, test cases are selected randomly from the
existing test suite, but it is only useful if all the test cases are equally good in their fault
detection capability which is very rare. Hence, it is not used in most of the cases.
Select modification traversing test cases: In this technique, only those test cases are
selected that cover and test the modified portions of the source code and the parts that are
affected by these modifications.
Select higher priority test cases: In this technique, priority codes are assigned to each test
case of the test suite based upon their bug detection capability, customer requirements, etc.
After assigning the priority codes, test cases with the highest priorities are selected for the
process of regression testing. The test case with the highest priority has the highest rank.
For example, a test case with priority code 2 is less important than a test case with priority
code 1.
1. Selenium
Open Source: Selenium is an open-source tool, making it freely available and accessible
for developers and testers.
Browser Compatibility: Supports multiple browsers, including Chrome, Firefox, Safari,
and Edge, ensuring tests can be run across different environments.
Programming Language Support: Allows writing tests in various programming languages
such as Java, Python, C#, Ruby, and JavaScript, providing flexibility for testers.
Cross-Platform: Capable of running on different operating systems, including Windows,
macOS, and Linux, which enhances the tool’s portability.
Web Application Testing: Primarily designed for automating web applications, making it
ideal for regression testing of web-based systems.
Extensive Community Support: Boasts a large and active community, offering a wealth of
resources, plugins, and extensions to aid in test automation.
Integration Capabilities: Integrates well with other tools such as Jenkins for continuous
integration and continuous deployment (CI/CD), facilitating automated regression testing in
development pipelines.
2. Ranorex Studio
Comprehensive Testing Solution: Ranorex Studio provides a complete testing solution
that supports end-to-end regression testing, including both functional and non-functional
tests.
User-Friendly Interface: The tool offers an intuitive and user-friendly interface, making it
accessible for both beginners and experienced testers.
Cross-Platform Testing: It supports cross-platform testing, enabling tests to be executed
on desktop, web, and mobile applications, ensuring broad test coverage.
Codeless Test Automation: Ranorex Studio offers codeless automation through its capture-
and-replay functionality, allowing testers to create automated tests without extensive
programming knowledge.
Robust Reporting: The tool provides detailed and customizable test reports, helping teams
to easily identify issues and track the quality of the software over time.
Integration Capabilities: It integrates seamlessly with popular development and CI/CD
tools such as Jenkins, Azure DevOps, and Git, promoting a streamlined workflow and
continuous testing.
Data-Driven Testing: Ranorex Studio supports data-driven testing, allowing testers to run
the same set of tests with different data inputs, enhancing test coverage and reliability.
3. testRigor
AI-Powered Test Automation: testRigor utilizes artificial intelligence to automate the
creation and maintenance of regression tests, reducing the effort and time required for
manual testing.
Natural Language Processing (NLP): The tool allows users to write test cases in plain
English, making it accessible to both technical and non-technical team members. This
feature simplifies test creation and improves collaboration.
Codeless Test Creation: Users can create and execute test cases without writing any code,
which speeds up the testing process and reduces the dependency on developers.
Cross-Browser and Cross-Platform Testing: testRigor supports testing across multiple
browsers and platforms, ensuring that the software works consistently in different
environments.
Self-Healing Tests: The tool automatically updates test scripts to adapt to minor changes in
the application’s UI, minimizing the maintenance overhead commonly associated with
regression testing.
4. Sahi Pro
Cross-browser Testing: Supports multiple browsers, ensuring consistent performance
across different environments.
Ease of Use: User-friendly interface with scriptless record and playback functionality,
making it accessible for testers with varying levels of expertise.
Robust Reporting: Detailed reports and logs that help in tracking and analyzing test results
efficiently.
Integrated Suite: Offers integration with various Continuous Integration (CI) tools like
Jenkins, enhancing the automation workflow.
Scalability: Capable of handling large-scale test automation projects with ease.
Script Flexibility: Supports both scriptless testing and advanced scripting using JavaScript,
providing flexibility for complex test scenarios.
5. Testlio
Global Network of Testers: Access to a diverse pool of professional testers from around
the world. Ensures comprehensive test coverage across different devices, operating systems,
and locations.
On-Demand Testing: Flexible scheduling allows for testing when needed, fitting into the
development cycle seamlessly. Enables quick turnaround times for regression testing after
code changes.
Integrated Platform: Combines test management, test execution, and reporting in a single
platform. Simplifies the regression testing process and provides a centralized view of test
results.
Comprehensive Reporting: Detailed reports with actionable insights. Helps identify and
prioritize issues, making it easier to address regressions promptly.
Among the significant risks associated with regression testing are the time and resources
required to perform it.
Incomplete or Insufficient Test Coverage.
False Positives and False Negatives.
Test Data Management Challenges.
Adhoc testing is an informal and unstructured type of software testing aimed at identifying
defects or errors early in the development process. Unlike traditional testing methods, adhoc
testing does not follow any documentation, test design techniques, or predefined test cases.
Instead, it relies on the tester's experience and intuition to find potential issues by randomly
checking different parts of the application.
Record Defects: Document all defects found during testing and assign them to developers for
fixing. Corresponding test cases should be written for each valid defect and added to the
planned test cases1.
Advantages and Disadvantages
Advantages
Time-Saving: Adhoc testing does not require elaborate test planning, documentation, or test
case design, saving a lot of time12.
Uncovering Unique Defects: It can identify errors that might not be found through formal
testing methods2 .
Flexibility: This testing can be performed at any time during the software development life
cycle2 .
Disadvantages
Difficult to Reproduce Defects: Since there are no test steps or requirements mapped to the
defects, reproducing them can be challenging.
Requires Experienced Testers: Effective adhoc testing relies heavily on the tester's
knowledge and experience with the system.
5.18 Object-Oriented Testing
Object-oriented testing is a specialized approach in software testing that focuses on verifying the
behavior and interactions of objects and classes in an object-oriented system. Unlike
conventional testing, which typically tests functions or procedures with clearly defined input-
output behavior, object-oriented testing deals with the complexities of classes, inheritance,
polymorphism, and dynamic binding.
5.19 Key Principles
Dependencies in Object-Oriented Systems
In object-oriented systems, there are additional dependencies compared to conventional systems.
These include class-to-class dependencies, class-to-method dependencies, and method-to-method
dependencies. These dependencies necessitate different testing techniques 1.
Testing Techniques
1. Fault-Based Testing: This technique involves creating test cases based on consumer
specifications or code to identify possible faults. It aims to flush out errors by executing each
line of code1 .
2. Class Testing Based on Method Testing: This approach tests each method of a class
individually, similar to unit testing in conventional methods1.
3. Random Testing: This involves developing a random test sequence to try a variety of
operations typical to the behavior of the classes1 .
4. Partition Testing: This method categorizes the inputs and outputs of a class to minimize the
number of test cases1 .
5. Scenario-Based Testing: This technique captures user actions and simulates them during the
test to find interaction errors12.
Levels of Object-Oriented Testing
Object-oriented testing can be performed at different levels:
1. Algorithmic Level: Testing individual modules of each class.
2. Class Level: Testing each class as an individual entity.
3. Cluster Level: Integration testing of individual classes to verify interclass interactions.
4. System Level: Integration testing between clusters and overall system testing2.
Challenges in Object-Oriented Testing
Dynamic Testing: It is not possible to test the class dynamically; only its instances (objects)
can be tested1 .
Inheritance Issues: Changes in a parent class can affect subclasses, making it difficult to
isolate errors1.
Control Flow: Control flow in object-oriented programs is characterized by message passing
among objects, requiring different testing approaches1.
State Influence: The state associated with an object influences the path of execution and
communication between methods1.
Purpose of Object-Oriented Testing
Object Interaction Validation: Ensuring objects interact appropriately in various situations1.
Design Error Detection: Identifying limitations and faults in the object-oriented design1.
Integration Problem Identification: Evaluating an object's ability to integrate and
communicate with other objects1.
Reusable Code Assessment: Ensuring reusable parts perform as intended in various
scenarios1.
Exception Handling Verification: Confirming that objects respond correctly to error
circumstances and exceptions1 .
Uniformity Verification: Maintaining uniformity inside and between objects and the system
as a whole
5.20 Testing Web Applications
Testing web applications is a crucial process to ensure that they function correctly, are user-
friendly, secure, and perform well under various conditions. This process involves several types
of testing, each focusing on different aspects of the web application.