What is Functional and Non functional Testing in Software Testing?

In this blog, we will learn about types of Software Testing but before reaching to types of Software Testing we will see what Software Testing is?

What is Functional Non- Functional Testing
What is Functional Non- Functional Testing

Software testing is a process of executing a program or application with the intent of finding the software bugs. It also helps to identify errors, gaps or missing requirements contrary to the actual requirements.

Software Testing is basically of two types-
Functional Testing
Non-Functional Testing

1. Functional Testing:-

Functional Testing is the type of testing done against the business requirements of an application.
It involves the complete integrated system to evaluate the system’s compliance with its specified requirements. Based on the functional specification document this type of testing is to be carried out. In actual testing, testers need to verify a specific action or function of the code. For functional testing either manual testing or automation tools can be used but functionality testing would be easier using manual testing only.

Below are the steps needed to be keeping in mind in the Functional testing:

  1. Test data should be prepared based on the specifications of functions
  2. Based on functional specifications find out of output of the functions
  3. The execution of test cases
  4. Observe the actual and expected outputs

Functional Testing is of various types-

Unit Testing
Smoke Testing
Sanity Testing
Integration Testing
Interface Testing
System Testing
Regression Testing

1. Unit Testing:-

Unit testing of software applications is done during the development (coding) of an application. Unit Testing is a level of software testing where individual units/ components of a software are tested. The purpose is to validate that each unit of the software performs as designed.In procedural programming, a unit may be an individual program, function, procedure, etc. In object-oriented programming, the smallest unit is a method, which may belong to a base/ super class, abstract class or derived/ child class. (Some treat a module of an application as a unit. This is to be discouraged as there will probably be many individual units within that module.)

2. Smoke Testing:-

It is a kind of Software Testing performed after software build to ascertain that the critical functionalities of the program are working fine. It is executed “before” any detailed functional or regression tests are executed on the software build. The purpose is to reject a badly broken application so that the QA team does not waste time installing and testing the software application.
In Smoke Testing, the test cases were chosen cover the most important functionality or component of the system. For Example, a typical smoke test would be – Verify that the application launches successfully, Check that the GUI is responsive … etc.

3. Sanity Testing:-

Sanity testing is a kind of Software Testing performed after receiving a software build, with minor changes in code, or functionality, to ascertain that the bugs have been fixed and no further issues are introduced due to these changes. The goal is to determine that the proposed functionality works roughly as expected. If sanity test fails, the build is rejected to save the time and costs involved in a more rigorous testing. The main objective is “not” to verify thoroughly the new functionality but to determine that the developer has applied some rationality (sanity) while producing the software. The main aim of Sanity testing to check the planned functionality is working as expected. Instead of doing whole regression testing the Sanity testing is performed.

4. Integration Testing:-

Integration Testing is a level of software testing where individual units are combined and tested as a group. The purpose of this level of testing is to expose faults in the interaction between integrated units. Test drivers and test stubs are used to assist in Integration Testing. In integration Testing, individual software modules are integrated logically and tested as a group.
A typical software project consists of multiple software modules, coded by different programmers.Integration Testing focuses on checking data communication amongst these modules.After the integration testing has been performed on the components, they are readily available for system testing.

5. Interface Testing:-

Interface Testing is the testing done on AUT which actually verifies whether the communication between two different software systems is done correctly.
An interface is actually software that consists of sets of commands, messages, and other attributes that enable communication between a device and a user.
Interface Testing is performed to evaluate whether systems or components pass data and control correctly to one another. It is to verify if all the interactions between these modules are working properly and errors are handled properly. Verify that communication between the systems is done correctly. Verify if all supported hardware/software has been tested

6. System Testing:-

System Testing is the testing of a complete and fully integrated software product.
Usually, software is only one element of a larger computer-based system. Ultimately, software is interfaced with other software/hardware systems.
System Testing is actually a series of different tests whose sole purpose is to exercise the full computer-based system.
System test falls under the black box testing category of software testing.The purpose of this test is to evaluate the system’s compliance with the specified requirements.
System Testing is usually carried out by a team that is independent of the development team in order to measure the quality of the system unbiased. It includes both functional and Non-Functional testing.

7. Regression Testing:-

Regression Testing is defined as a type of software testing to confirm that a recent program or code change has not adversely affected existing features.
Regression Testing is nothing but a full or partial selection of already executed test cases which are re-executed to ensure existing functionalities work fine.
This testing is done to make sure that new code changes should not have side effects on the existing functionalities. It ensures that old code still works once the new code changes are done.
Regression testing is a normal part of the program development process and, in larger companies, is done by code testing specialists. Test department coders develop code test scenarios and exercises that will test new units of code after they have been written.

2. Non-Functional Testing:-

The non-functional testing is the type of testing done against the non-functional requirements. Non-functional requirements tend to be those that reflect the quality of the product, particularly in the context of the suitability perspective of its users. It can be started after the completion of Functional Testing. It includes testing of the specific function or user action like performance, scalability, security or behavior of application under certain constraints.
Non-functional testing has a great influence on customer and user satisfaction with the product. Non-functional testing should be expressed in a testable way, not like “the system should be fast” or “the system should be easy to operate” which is not testable.

The following testings are non-functional testing types:

Compatibility Testing
Endurance Testing
Load Testing
Performance Testing
Security Testing
Scalability Testing
Stress Testing
Usability Testing
Volume Testing

1. Compatibility Testing:-

Compatibility Testing is a type of Software testing to check whether your software is capable of running on different hardware, operating systems, applications, network environments or Mobile devices. Compatibility is a non- functional testing to ensure customer satisfaction. The application could also impact due to different versions, resolution, internet speed and configuration etc. Hence it’s important to test the application in all possible manners to reduce failures and overcome from embarrassments of bug’s leakage. It is to check the compatibility of the software application on different browsers like Chrome, Firefox, Internet Explorer, Safari, and Opera etc

2. Endurance Testing:-

Endurance Testing is testing of an application or software with a significant load extended over a long period of time, to evaluate how the system behaves under sustained use.
This type of testing is performed at the last stage of performance run cycle. It ensures that the application is capable enough to handle the extended load without any deterioration of response time.
Endurance testing is a long process and sometimes last for even up to a year. This may include applying external loads such as Internet traffic or user actions. This makes endurance testing differ from Load Testing, which usually ends in a couple of hours or so

3. Load Testing:-

Load testing is a kind of Performance Testing which determines a system’s performance under real-life load conditions. This testing helps determine how the application behaves when multiple users access it simultaneously This testing usually identifies-The maximum operating capacity of an application, Determine whether the current infrastructure is sufficient to run the application, Number of concurrent users that an application can support, and scalability to allow more users to access it.
It is a type of non-functional testing. Load testing is commonly used for the Client/Server, Web-based applications – both Intranet and Internet.

4. Performance Testing:-

Performance Testing is a type of testing to ensure software applications will perform well under their expected workload.
Features and Functionality supported by a software system is not the only concern. A software application’s performance like its response time, reliability, resource usage and scalability do matter. The goal of Performance Testing is not to find bugs but to eliminate performance bottlenecks.
The focus of Performance Testing is checking a software program’s
• Speed – Determines whether the application responds quickly
• Scalability – Determines maximum user load the software application can handle.
• Stability – Determines if the application is stable under varying loads

5. Security Testing:-

Security Testing is a variant of Software Testing which ensures, that system and applications in an organization, are free from any loopholes that may cause a big loss. Security testing of any system is about finding all possible loopholes and weaknesses of the system which might result in a loss of information at the hands of the employees or outsiders of the Organization.

6. Scalability Testing:-

Scalability Testing is the ability of a network, system or a process to continue to function well when changes are done in size or volume of the system to meet growing need. It is a type of non-functional testing.
Scalability testing ensures that an application can handle the projected increase in user traffic, data volume, transaction counts frequency, etc. It tests the system, processes, and databases ability to meet a growing need.

7.Stress Testing:-

Stress testing is the process of determining the ability of a computer, network, programmer device to maintain a certain level of effectiveness under unfavorable conditions. The process can involve quantitative tests done in a lab, such as measuring the frequency of errors or system crashes. Stress testing is used to test the stability & reliability of the system. This test mainly determines the system on its robustness and error handling under extremely heavy load conditions.
It even tests beyond the normal operating point and evaluates how the system works under those extreme conditions. Stress Testing is done to make sure that the system would not crash under crunch situations. The need of stress testing generally arise on festival time, an online shopping site may witness a spike in traffic, or when it announces a sale.

8. Usability Testing:-

In usability testing basically, the testers test the ease with which the user interfaces can be used. It tests that whether the application or the product built is user-friendly or not.
Usability testing also reveals whether users feel comfortable with your application or Web site according to different parameters – the flow, navigation and layout, speed and content – especially in comparison to prior or similar applications.
People involved in the usability testing are required to possess skills like patience, ability to listen to the suggestions, openness to welcome any idea, and the most important of them all is that they should have good observation skills to spot and fix the issues or problems. This testing mainly focuses on the user’s ease to use the application, flexibility in handling controls and ability of the system to meet its objectives. It is also called User Experience Testing.

9. Volume Testing:-

Volume testing is done to analyze the system performance by increasing the volume of data in the database. With the help of Volume testing, the impact on response time and system behavior can be studied when exposed to a high volume of data. In volume testing we basically check that-Verify if there is any data loss, Check the system’s response time, Verify if the data is stored incorrectly, Check if the data is overwritten without any notification.

We hope this post is helpful for you.

If your friend also wants to know about this post Please share with them, so they will also get to know about the same. If you have any question or query please let us know by sending a comment below.Kindly don’t forget to follow us on Facebook and Twitter and Subscribe to YouTube Channel for latest upcoming software testing videos.

Leave a Reply

Your email address will not be published. Required fields are marked *