A Complete Non-Functional Testing Guide
A Complete Non-Functional Testing Guide
A Complete Non-Functional Testing Guide
Beginners
A Complete Guide to Non-Functional Testing: Its Purpose, Types, Tool, Test
Cases with Examples
What is Non-Functional Testing?
Non-functional testing is done to verify the non-functional requirement of the
application like Performance, Usability etc.
It verifies if the behavior of the system is as per the requirement or not. It covers all
the aspects which are not covered in functional testing. In our day to day testing, a lot
of attention is given to functional testing and functional requirements.
The clients are also interested in fulfilling the functional requirements which are
directly related to the functionality of an application. But in the actual phase i.e. when
you’re functionally tested, the software comes into the market and is used by the real
end users, and there are chances for it to face some issues related to the performance.
These issues are not related to the functionality of the system, but they can affect the
user experience in a negative manner. Hence it is important for the software or
application to be tested for Non-Functional requirements as well in order to avoid
negative customer experience.
Importance
This testing was missing due attention considering that it's not affecting the
functionality of the system.
The Non-Functional requirements were also not given proper attention in the earlier
test cycles. However, this has changed now. Non-functional tests are now most
important as they consider all the application performance and security issues these
days.
This testing has a greater impact on applications, when it comes to the performance of
the application under high user traffic. This testing ensures that your application is
stable and is able to handle load under extreme conditions.
As the name itself depicts, this testing concentrates on the non-functional aspect of the
application. So what are the non-functional aspects? Or should I say what are the
features which are not related to the functionality of the application?
Well, here are the answers to those:
How does the application perform under normal circumstances?
How does the application behave when too many users log in concurrently?
Can the application handle stress?
How secure is the application?
Can the application recover from any disaster?
Can the application behave in the same way in a different environment or OS?
How easy is to port the application in a different system?
Are the documents/user manual provided with the application easy to
understand?
The list keeps going on. But the point here is that – are not these features contributed
towards the quality of the application? The answer is YES. These features are equally
important.
Imagine that an application meets all the user requirements perfectly, but some
unauthorized user easily goes and cracks the data entered by the user in the
application, or the application dies when more than 5BB of any file is uploaded. So
would you say that the application is of good quality? Obviously not right!!
Purpose
The sole purpose of this type of testing is to ensure that the non-functional aspects of
the application are tested and the application works well in context to the same.
The purpose is to cover the testing of all the characteristics of the application which
help to provide an application that meets the business expectation.
Example
This is an important testing type.
Functional testing tests the application's functionality and ensures that it works as
expected but the non- functional testing ensures that the application works good
enough to meet the business expectations.
Meanwhile, when the application goes live, it might result in critical or major issues
like when the load is increased on the application, it becomes too slow and takes a lot
of time to open.
Response time might increase or when the load is increased to an extent, the
application might crash. This shows how important it is to test an application's non-
functional aspects.
Advantages
Given below some of the advantages of a non-functional test:
It covers the testing which cannot be covered in functional testing.
It ensures that the application runs efficiently and is reliable enough.
It ensures the security of the application.
How To Capture Non-Functional Requirements?
While we perform testing, the focus is mainly on functional testing which tests the
functionality of the product. But non-functional testing is as important as functional
testing and its requirement should be taken into consideration right from the inception
of the product.
Non-Functional requirements are used to perform Non-Functional testing. These
requirements include the performance output that is expected from the application or
the software under test. This basically includes the time taken by the software to
operate a particular system.
Non-Functional requirements also capture the behavior when large number of people
are using the software at the same time. Most of the time it is experienced that the
servers are busy or unavailable due to heavy load (i.e. more people are using it at the
same time). Booking online railway tickets can be the best Example of such a
situation.
Hence documenting the Non-Functional requirement properly and performing the
testing correctly will ensure high satisfaction in terms of usability by the potential
customers.
Though this testing does not have a direct business impact on the functionality of the
system, it can increase the user experience and user friendliness to a higher extent
which in turn will have a greater impact on the quality of the software.
Example:
Consider the same Facebook login page example. In this case, the scope of Non-
Functional testing is to note the time required by the system to login to Facebook after
entering the valid credentials.
Also, it can be tested as when (let’s say 100) the users log in at the same time, how
much time does it take to log in the user on Facebook.
This ensures that the system can handle load and traffic which in turn has a good user
experience.
#3) In Artifacts
A separate artifact should be prepared for the non-functional requirements, this in turn
would help to have a better idea of what needs to be tested and how it can be done in
iterations.
5 The implementation plan for The implementation plan for non functional
functional requirement is defined in requirement is defined in system architecture.
system design document.
A checklist is generally used when there is no time for documentation and the product
has to be tested or when there is a time constraint, a checklist can be used to ensure
that all the important aspects have been covered.
Approach Document
Develop a specific approach document for the Performance Test stage by refining the
overall Test strategy. This Test approach guides in planning and execution of all the
Performance Test tasks.
Test Scope
Test Metrics
Test Tools
Key Dates and Deliverables
Test Scope
Conduct Performance Testing from different perspectives, such as user performance,
business processes, system stability, resource consumption, and so on. Types of
Performance Testing to execute are discussed in the above section of the article (like
Load test, Stress test etc.)
Test Metrics
The Test approach refines the metrics to measure and report during Testing,
such as:
Response time (online)
Batch window (batch)
Throughput (For Example, number of transactions per unit of time)
Utilization (For Example, the percentage of resources utilized)
Test Tools
Mostly Performance Testing requires usage of appropriate tools:
Load generation tools
Performance monitoring tools
Performance analysis tools
Application profiling tools
Base-lining tools.
Performance Testing:
Evaluates the overall performance of the system.
Key elements are as follows:
Validates that the system meets the expected response time.
Evaluates that the significant elements of the application meet the desired
response time.
It can also be conducted as a part of integration testing and system testing.
Load Testing:
Evaluates whether the system’s performance is as expected under normal and
expected conditions.
Security Testing:
Security testing is done to ensure that the application has no loopholes which could
lead to any data loss or threats. It is one of the important aspects of non-functional
testing and if not performed properly, it can lead to security threats.
It includes testing authentication, authorization, integrity, and availability.
Scalability Testing:
Scalability testing is done to verify if the application is capable enough to handle
increased traffic, number of transactions, data volume etc. The system should work as
expected when the volume of data or change in the size of data is done.
Compliance Testing:
Compliance testing is done to verify if the standards defined are being followed or
not. Audits are done to verify the same.
For Example, Audits are done to verify the process of creating test cases/test plans
and placing them in the shared location with the standard name that is being done or
not. In QC, while naming the test cases the standard test case name is being followed
or not. Documentation is complete and approved or not.
These are the few pointers that are covered while auditing.
Endurance Testing:
Endurance Testing is done to verify the system's behavior when a load is increased to
an extent for a long time.
It is also called as Soak testing & Capacity testing. It helps to verify if there are any
memory leaks in the system. Endurance testing is a subset of load testing.
Localization Testing:
Localization testing is done to verify the application in different languages i.e.
different locales. The application should be verified for a particular culture or locale.
The main focus is to test the content, GUI of the application.
Internationalization Testing:
Internationalization testing is also known as i18n testing.
I18n represents I –eighteen letters- N. It is done to verify if the application works as
expected across all the language settings. It verifies that any functionality or
application itself does not break i.e. the application should be capable enough to
handle all the international settings.
It also verifies that the application gets installed without any issues.
Reliability Testing:
Reliability testing is done to verify if the application is reliable and is tested for a
specific period of time in the defined environment. An application should give the
same output as expected every time, only then it can be considered as reliable.
Portability Testing:
Portability testing is done to verify if in case a software/application is installed on a
different system or on a different platform it should be able to run as expected i.e. no
functionality should be affected because of a change in the environment.
While testing, it is also required to test the change with the hardware configuration
such as the hard disk space, Processor and also with different operating systems to
ensure that the applications correct behavior and expected functionality are intact.
Baseline Testing:
Baseline testing is also known as benchmark testing as it creates a base for any new
application to be tested.
For Example: In the first iteration, the response time for an application was 3
seconds. Now, this has been set as a benchmark for the next iteration and in the next
iteration, the response time changes to 2 seconds. It is basically a validation document
which is used as a base for future references.
Efficiency Testing:
Efficiency testing is done to verify if the application works efficiently and the number
of resources required, tools required, complexity, customer requirement, environment
required, time, what kind of project it is etc.
These are some of the pointers that would help to define how efficiently an
application would work if all the considered parameters work as expected.
Maintainability Testing:
Once the application/Product goes live, then there are chances for an issue to come up
in the live environment or the customer may want an enhancement for the application
which is already live.
In this case, maintenance testing team is available to test the above scenarios
mentioned. Once the application goes live it still needs maintenance for which the
maintenance testing team works.
How come we never get to see and practice on writing non-functional test cases?
Let’s start with what we know and as always a practical scenario.
The user would perform the exact same steps to make as in the functional test case.
Am I right?
Check out our Performance Testing Tutorials to know more about it.
Now, If I were to test the performance of the transfers’ transaction, I would have 10,
20, 30, 100…1000…etc users perform the transfer operation simultaneously or
incrementally depending on what I want to target and gather data about.
What steps would each user perform in order to use the transfer while the performance
test is in progress?
When do I want to check if the transfers are hack proof and are directed correctly to
the intended recipients and that there are no black spots in the entire process? I would
perform the transfer while the monitoring process for security leaks goes on in
parallel.
Therefore, in effect, I am carrying out the exact same steps that I would normally
do in case of a functional test case.
I guess, we have enough to establish that the steps in all the situations are the same.
The method and the intention behind the process are what is different.
Type of
Who? Why? Intention
Testing
Efficiency
Business applicability
Ease of learning
Efficiency
Performance Performance testers via a tool that treats the operation as a Response time
transaction performed by a certain number of concurrent
users while the tester is analyzing all the logistics
Type of
Who? Why? Intention
Testing
Security Scanning tools and other monitoring system by specialized Hack safe
security experts
What is interesting to note is that no matter what form of testing we want to do, all
the steps are the same.
The real difference is that:
1. Who performs these steps?
2. What is the intention, or in other words what am I trying to achieve via this
test?
3. The tools and techniques used.
Coming back to our question, why do we never learn to write non-functional test cases
with all the detailed steps that are there to it?
It’s because, at their very core, test steps for variation on test types on a certain
function are all the same, functional or not. It is the intention that makes a
difference and maybe the method.
Conclusion
Before performing non-functional testing, it is essential to plan the testing strategy
correctly to ensure proper testing. There are different tools that are available in the
market to perform this type of tests like Load Runner, RPT, etc.
This testing plays a major role in the success of an application and to build up good
customer relationship and hence it should not be neglected. This is one of the
important parts of Software testing and testing cannot be considered complete without
this.
We can include non-functional testing details in the test plan or can create a separate
strategy for it. In either case, the goal is to have proper coverage of non-functional
aspects of the software.
We hope that this process of delving deep into this topic has been as much fun to you
as it has been presented to you all. We would love to hear your feedback and thoughts
on this subject.