MODULE 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 detects defects within both the integrated units and the whole
system. The result of system testing is the observed behavior of a component or a system
when it is tested.
• System Testing is carried out on the whole system in the context of either system
requirement specifications or functional requirement specifications or the context of both.
System testing tests the design and behavior of the system and also the expectations of the
customer.
• It is performed to test the system beyond the bounds mentioned in the software
requirements specification (SRS). System Testing is performed by a testing team that is
independent of the development team and helps to test the quality of the system impartial.
• It has both functional and non-functional testing. System Testing is performed after the
integration testing and before the acceptance testing.
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.
System Testing Process
Types of System Testing
Here are the Types of System Testing are follows:
• Functional Testing: This checks if the system’s features work as expected and meet the
defined requirements.
• Performance Testing: This tests how the system performs under different conditions, like
high traffic or heavy use, to ensure it can handle the expected load.
• Security Testing: This ensures the system’s security measures protect sensitive data from
unauthorized access or attacks.
• Compatibility Testing: This makes sure the system works well across different hardware,
software, and network environments.
• Usability Testing: This evaluates how easy and user-friendly the system is, making sure it
provides a good experience for users.
• Regression Testing: This ensures that any new code or features don’t break or negatively
affect the system’s existing functionality.
• Acceptance Testing: This tests the system at a high level to make sure it meets customer
expectations and requirements before release.
Tools used for System Testing
Here are the Tools used for System Testing are follows:
1. JMeter
2. Gallen Framework
3. HP Quality Center/ALM
4. IBM Rational Quality Manager
5. Microsoft Test Manager
6. Selenium
7. Appium
8. LoadRunner
9. Gatling
10. JMeter
11. Apache JServ
12. SoapUI
Advantages of System Testing
Here are the Advantages of System Testing are follows:
• In System Testing The testers do not require more knowledge of programming to carry out
this testing.
• It will test the entire product or software so that we will easily detect the errors or defects
which cannot be identified during the unit testing and integration testing.
• The testing environment is similar to that of the real time production or business
environment.
• It checks the entire functionality of the system with different test scripts and also it covers
the technical and business requirements of clients.
• After this testing, the product will almost cover all the possible bugs or errors and hence
the development team will confidently go ahead with acceptance testing
• Verifies the overall functionality of the system.
• Detects and identifies system-level problems early in the development cycle.
• Helps to validate the requirements and ensure the system meets the user needs.
• Improves system reliability and quality.
• Facilitates collaboration and communication between development and testing teams.
• Enhances the overall performance of the system.
• Increases user confidence and reduces risks.
• Facilitates early detection and resolution of bugs and defects.
• Supports the identification of system-level dependencies and inter-module interactions.
• Improves the system’s maintainability and scalability.
Disadvantages of System Testing
Here are the Disadvantages of System Testing are follows:
• System Testing is time consuming process than another testing techniques since it checks
the entire product or software.
• The cost for the testing will be high since it covers the testing of entire software.
• It needs good debugging tool otherwise the hidden errors will not be found.
• Can be time-consuming and expensive.
• Requires adequate resources and infrastructure.
• Can be complex and challenging, especially for large and complex systems.
• Dependent on the quality of requirements and design documents.
• Limited visibility into the internal workings of the system.
• Can be impacted by external factors like hardware and network configurations.
• Requires proper planning, coordination, and execution.
• Can be impacted by changes made during development.
• Requires specialized skills and expertise.
• May require multiple test cycles to achieve desired results.
Best Practices for System Testing
To make system testing effective, follow these best practices:
1. Clear Test Plan and Requirements: Make sure you have a well-defined test plan and
clear requirements. This ensures all parts of the system are covered and tested correctly.
2. Test Early and Often: Start testing as soon as possible in the development process and
continue testing regularly. Finding and fixing issues early helps save time and money.
3. Use Automation for Repetitive Tests: Automate tests that you run repeatedly, like
regression or performance tests. This saves time and allows you to focus on more complex
testing.
4. Create Realistic Test Scenarios: Design test cases based on how users will actually use
the system. This includes testing for edge cases, unusual inputs, and potential system
failures.
5. Collaborate with Developers: Work closely with developers throughout the testing
process. They can help identify problems faster and provide insights into how the system
functions.
System testing is a important step in software development that verify the system works as
expected and meets the required standards. By testing the entire system, developers and testers can
catch problems early, improve the software's quality, and provide a better user experience. Whether
it's testing for functionality, performance, or security, system testing makes sure the software meets
the needs of users and stakeholders, while reducing risks and errors. Successful system testing
relies on careful planning, effective execution, and strong teamwork.
FUNCTIONAL VS NON-FUNCTIONAL TESTING
What is 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 simulation of actual system usage but does not develop any
system structure assumptions. It is basically defined as a type of testing which verifies that each
function of the software application works in conformance with the requirement and specification.
This testing is not concerned about the source code of the application. Each functionality of the
software application is tested by providing appropriate test input, expecting the output and
comparing the actual output with the expected output.
What is 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 which are not tested in functional testing. 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.
Below is the difference between functional and non-functional testing:
FUNCTIONAL TESTING
Functional Testing is defined as a Type of Software Testing that verifies that each function of
the Software Application works in conformance with the requirements and specifications. This
testing is not concerned with the source code of the application. Each functionality of the software
application is tested by providing appropriate test input, expecting the output, and comparing the
actual output with the expected output.
This testing focuses on checking the user interface, APIs, Database, Security, Client or Server
Application, and functionality of the Application Under Test. Functional testing can be performed
manually or through automation, depending on the needs of the project.
Purpose of Functional Testing
Functional testing mainly involves black box testing and can be done manually or using
automation. The purpose of functional testing is to:
• Test each function of the application: Functional testing tests each function of the
application by providing the appropriate input and verifying the output against the
functional requirements of the application.
• Test primary entry function: In functional testing, the tester tests each entry function of
the application to check all the entry and exit points.
• Test flow of the GUI screen: In functional testing, the flow of the GUI screen is checked
so that the user can navigate throughout the application.
What to Test in Functional Testing?
The goal of functional testing is to make sure the app’s features work as they should. It focuses on
these key areas:
1. Basic Usability: This checks if users can easily navigate the app without any trouble. It’s
all about making sure the experience is smooth.
2. Main Functions: Functional testing also looks at the app is a core features to verify they
are working correctly, just as they are meant to.
3. Accessibility: This ensures the app is accessible to everyone, including users with
disabilities. It checks whether accessibility features are in place and functioning properly.
4. Error Handling: Lastly, it tests how the app handles errors. Are the right error messages
shown when something goes wrong? This part verify users are informed when an issue
arises.
Functional Testing Process
Functional testing follows four steps to check if your app or software works as expected:
Step 1. Identify test input
The first step in functional testing is to identify the functionality that needs to be tested. This
involves determining which core features of the application, such as login, registration, or payment
processing, should be tested. It also includes testing usability functions like buttons, forms, and
navigation links.
Additionally, error conditions must be considered, such as invalid inputs or scenarios where the
system fails.
Step 2. Compute expected outcomes
Once the test inputs are identified, the next step is to calculate the expected outcomes based on the
functional specifications of the system. Here, you define what should happen for each test case
based on the input data. For instance, when entering a valid username and password, the expected
output could be that the user is successfully redirected to the homepage.
On the other hand, for invalid login attempts (like an incorrect password), the expected outcome
might be an error message prompting the user to try again.
Step 3. Execute test cases
After defining the expected outcomes, the next step is to execute the test cases using the identified
inputs. This is where you run the tests and see how the system behaves. Test cases can be executed
manually or using automation tools such as Selenium, JUnit, or TestNG.
Step 4. Compare the actual and expected output
In the final step of functional testing, you compare the actual output of the system to the expected
output. If the system's response matches what was expected, then the functionality is confirmed to
be working correctly. This step ensures that the system functions as expected, providing the correct
results under various conditions.
Type of Functional Testing Techniques
There are various types of functional Testing which are as follows:
1. Unit testing: It is the type of functional testing technique where the individual units or
modules of the application are tested. It ensures that each module is working correctly.
2. Integration testing: Combined individual units are tested as a group and expose the faults
in the interaction between the integrated units.
3. System Testing: It is a type of 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.
4. User Acceptance Testing (UAT): User Acceptance Testing (UAT) serves the purpose of
ensuring that the software meets the business requirements and is ready for deployment by
validating its functionality in a real-world environment. It allows end-users to test the
software to ensure it meets their needs and operates as expected, helping to identify and fix
any issues before the final release.
5. Regression testing: It is done to make sure that the code changes do not affect the existing
functionality and the features of the application. It concentrates on whether all parts are
working or not.
6. Smoke testing: It is a type of functional testing technique where the basic functionality or
feature of the application is tested as it ensures that the most important function works
properly.
7. Sanity testing: It is a subset of regression testing and is done to make sure that the code
changes introduced are working as expected.
8. End to End Testing: End-to-end testing is the type of software testing used to test the
entire software from start to end, along with its integration with the external interfaces. The
main purpose of end-to-end testing is to identify the system dependencies and to ensure
that the data integrity and communication with other systems, interfaces, and databases to
exercised in complete production.
Functional Testing vs Non-Functional Testing
Below are the differences between functional testing and non-functional testing:
Functional Testing Tools
Here are the tools for functional testing which are used in the testing purpose:
1. Selenium: It is an open-source umbrella project for a range of tools and libraries developed with
the aim to support browser automation.
• It is used to automate web browsers.
• It provides a single interface that lets the tester write test scripts in languages
like Ruby, Java, NodeJS, etc.
• It provides a playback tool for authoring functional tests across most modern web browsers.
2. QTP: This tool now can UFT is a tool designed to perform automated functional testing without
the need to monitor the system in intervals.
• It can be used to test web, desktop applications, and client servers.
• It is based on the VB scripting language.
• It is one of the widely used automation tools in the testing industry.
3. JUnit: It is a unit-testing open-source framework for the Java programming language. It is used
by Java developers to write and execute automated test cases.
• It can be used along with the Selenium WebDriver to automate tests for web applications.
• It provides several annotations to identify test methods.
• It has test runners to run tests.
4. SoapUI: It is one of the leading tools for SOAP and Web Service testing. It allows for easy and
rapid creation and execution of functional, regression, and load tests.
• It has an easy-to-use graphical interface.
• It provides a code-free test environment where one can create and execute complex test
cases with drag-and-drop options.
• It lets to dynamically analyze how well SOAP and REST service contract is covered by the
functional tests.
5. Cucumber: It is an open-source testing tool written in Ruby language.
• This tool focuses on end-user experience.
• Quick and easy setup and execution.
• This tool allows for easy reuse of code in tests due to the style of writing the tests.
Benefits of Functional Testing
Here are the Benefits of Functional Testing.
• Bug-free product: Functional testing ensures the delivery of a bug-free and high-quality
product.
• Customer satisfaction: It ensures that all requirements are met and ensures that the
customer is satisfied.
• Testing focused on specifications: Functional testing is focused on specifications as per
customer usage.
• Proper working of application: This ensures that the application works as expected and
ensures proper working of all the functionality of the application.
• Improves quality of the product: Functional testing ensures the security and safety of the
product and improves the quality of the product.
Limitations of Functional Testing
Here are the Limitations of Functional Testing.
• Missed critical errors: There are chances while executing functional tests that critical and
logical errors are missed.
• Redundant testing: There are high chances of performing redundant testing.
• Incomplete requirements: If the requirement is not complete then performing this testing
becomes difficult.
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.
Non-Functional Testing Types and Techniques
Here is the Non-Functional Testing Techniques and Types mentioned bellow:
• Performance Testing: Performance testing is a type of software testing that focuses on
evaluating the performance and scalability of a system or application. Performance testing
aims to identify bottlenecks, measure system performance under various loads and
conditions, and ensure that the system can handle the expected number of users or
transactions.
• Load Testing: Load testing determines the behavior of the application when multiple users
use it at the same time. It is the response of the system measured under varying load
conditions.
• Security Testing: Security testing is important to check and sure that applications and
systems are protected from various threats. There are several types of security testing, each
targeting specific vulnerabilities and aspects of security.
Objectives of Non-functional Testing
The objectives of non-functional testing are:
• Increased usability: To increase usability, efficiency, maintainability, and portability of
the product.
• Reduction in production risk: To help in the reduction of production risk related to non-
functional aspects of the product.
• Cost Reduction: To help in the reduction of costs related to non-functional aspects of the
product.
• Optimize installation: To optimize the installation, execution, and monitoring way of the
product.
• Collect metrics: To collect and produce measurements and metrics for internal research
and development.
• Enhance knowledge of product: To improve and enhance knowledge of the product
behavior and technologies in use.
Non-functional Testing Parameters
Let's find some common non-functional testing parameters. These parameters are often used to
ensure a system's performance, reliability, usability, and other quality attributes.
1. Security: This parameter is tested during Security testing. This parameter defines how the
system is secure against sudden attacks from internal and external sources.
2. Reliability: This parameter is tested during Reliability testing. This defines the extent to
which the system performs its intended functions without failure.
3. Survivability: This parameter is tested during Recovery testing. This parameter checks
that the software system is able to recover itself in the case of failure and continuously
performs the specified function without any failure.
4. Availability: This is tested during Stability testing. Availability here means the availability
percentage of the software system to the original service level agreement. It means the
degree to which the user can rely on the software during its operation.
5. Efficiency: This parameter means the extent to which the software system can handle the
quantity and response time.
6. Integrity: This parameter measures how high the source code quality is when it is passed
on to the QA.
7. Usability: This is tested in usability testing. This parameter means how easily usable the
system is from the user's perspective.
8. Flexibility: This parameter means how well the system can respond to uncertainty in a way
that allows it to function normally.
9. Scalability: This parameter is tested during scalability testing. This parameter measures
the degree to which the application can scale up or scale out its processing capacity to meet
an increase in demand.
10. Reusability: This means how many existing assets can be reused in some form within the
software product development process or in another application.
11. Interoperability: This parameter is tested during the Interoperability testing. This checks
that the application interfaces properly with its components or other application or
software.
12. Portability: This parameter checks the ease with which the software can be moved from
one environment to another.
Benefits of Non-functional Testing
Here is the Non-functional testing advantages that enhance software quality and user satisfaction:
• Improved performance: Non-functional testing checks the performance of the system
and determines the performance bottlenecks that can affect the performance.
• Less time-consuming: Non-functional testing is overall less time-consuming than the
other testing process.
• Improves user experience: Non-functional testing like Usability testing checks how
easily usable and user-friendly the software is for the users. Thus, focus on improving the
overall user experience for the application.
• More secure product: As non-functional testing specifically includes security testing that
checks the security bottlenecks of the application and how secure is the application against
attacks from internal and external sources.
Limitations of Non-functional Testing
Here are the Non-functional testing dis-advantages:
• Non-functional tests are performed repeatedly: Whenever there is a change in the
application, non-functional testing is performed again. Thus, it is more resource intensive.
• Expensive in case of software update: In case of software update, non-functional testing
is performed again thus incurring extra charges to re-examine the software, and thus
software becomes expensive.
ACCEPTANCE TESTING
Acceptance Testing is a 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.
Acceptance Testing is the last phase of software testing performed after System Testing and before
making the system available for actual use.
Types of Acceptance Testing
Here are the Types of Acceptance Testing
1. User Acceptance Testing (UAT)
2. Business Acceptance Testing (BAT)
3. Contract Acceptance Testing (CAT)
4. Regulations Acceptance Testing (RAT)
5. Operational Acceptance Testing (OAT)
6. Alpha Testing
7. Beta 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.
• Sometimes, this contract happens before the product goes live.
• There should be a well-defined 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. Generally, the
product or application that is to be released in the market, has to go under RAT, as different
countries or regions have different rules and regulations defined by its governing bodies.
• 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.
Use of Acceptance Testing
1. To find the defects missed during the functional testing phase.
2. How well the product is developed.
3. A product is what actually the customers need.
4. Feedback help in improving the product performance and user experience.
5. Minimize or eliminate the issues arising from the production.
Advantages of Acceptance Testing
1. This testing helps the project team to know the further requirements from the users directly
as it involves the users for testing.
2. Automated test execution.
3. It brings confidence and satisfaction to the clients as they are directly involved in the testing
process.
4. It is easier for the user to describe their requirement.
5. It covers only the Black-Box testing process and hence the entire functionality of the
product will be tested.
Disadvantages of Acceptance Testing
1. Users should have basic knowledge about the product or application.
2. Sometimes, users don't want to participate in the testing process.
3. The feedback for the testing takes a long time as it involves many users and the opinions
may differ from one user to another user.
4. Development team is not participated in this testing process.
SUMMARY OF SOFTWARE TESTING
The Software Testing Life Cycle (STLC) is a process that verifies whether the Software Quality
meets the expectations or not. STLC is an important process that provides a simple approach to
testing through the step-by-step process. Software Testing Life Cycle (STLC) is a fundamental part
of the Software Development Life Cycle (SDLC).
Phases of STLC
There are six major phases of the Software Testing Life Cycle (STLC) that we are discussing here
in detail.
1. Requirement Analysis
Requirement Analysis is the first phase where the QA/testing team understands what needs to be
tested. The activities that take place during the Requirement Analysis stage include:
• Reviewing the software requirements document (SRD) and other related documents
• Interviewing stakeholders to gather additional information
• Identifying any ambiguities or inconsistencies in the requirements
• Identifying any missing or incomplete requirements
• Identifying any potential risks or issues that may impact the testing process
2. Test Planning
Test Planning is the most crucial phase where the overall test strategy and plan are created. The
major activities carried out during the Test Planning phase include:
• Identifying the testing objectives and scope
• Developing a test strategy: selecting the testing methods and techniques that will be used
• Identifying the testing environment and resources needed
• Identifying the test cases that will be executed and the test data that will be used
• Estimating the time and cost required for testing
• Identifying the test deliverables and milestones
• Assigning roles and responsibilities to the testing team
• Reviewing and approving the test plan
3. Test Case Development
The Test Case Development phase testers design detailed test cases and prepare the necessary test
data. The main activities performed during the Test Case Development phase include:
• Identifying the test cases that will be developed
• Writing test cases that are clear, concise and easy to understand
• Creating test data and test scenarios that will be used in the test cases
• Identifying the expected results for each test case
• Reviewing and validating the test cases
• Updating the requirement traceability matrix (RTM) to map requirements to test cases
4. Test Environment Setup
Test Environment Setup defines the hardware, software and network conditions under which
testing will be executed. The activities involved in the Test Environment Setup phase include:
• Install and configure required software, tools and databases.
• Set up servers, browsers, operating systems and devices.
• Prepare access credentials and permissions.
• Validate the environment before test execution.
5. Test Execution
In Test Execution phase prepared test cases are executed in the defined environment. The activities
performed during the Test Execution phase include:
• Run manual or automated test cases.
• Log defects with details like severity and priority.
• Retest fixed defects (defect retesting).
• Perform regression testing if required.
• Collect and analyze test results.
• Document and share test reports.
6. Test Closure
Test Closure is the final phase where testing activities are completed and documented. The final
activities carried out during the Test Closure phase include:
• Prepare a Test Summary Report (test cases executed, pass/fail count, defects
found/resolved).
• Ensure all defects are tracked and closed.
• Clean up the test environment.
• Archive test cases, data and reports.
• Conduct a retrospective for lessons learned.
• Share knowledge with stakeholders.
STLC vs SDLC