Functional testing is a kind of black box testing where test cases are prepared keeping the specifications in mind. This form of testing is done to check if the system is in compliance with the client’s requirements. Basically in case of functional testing the following checks are important:
Types of functional testing include:
In a software system there are many requirements such as performance, security, user interface etc. that are non-functional in nature however it is very important to test these attributes. Software testing carried out to test non-functional attributes of a system is called non-functional testing. The types of non-functional testing methodologies are as follows:
Usability testing is a process in which the testers test the product to check how easy it would be for the user to use the user interface or in other words the software is tested for its user friendliness. It is a form of black box testing. The software is tested for three things:(1) How convenient the software will be for the user? (2) Will the user be able to use it?(3) Will the user be able to learn it?
Usability has following aspects associated with it:
The form of testing carried out to test if the graphical user interface of an application is working in the right manner is called GUI or Graphical User Interface testing. The GUI is not only checked for proper functionality but also for its adherence to the defined quality standards. The following are some of the most important things that need to be checked during GUI testing:
Graphical user interface is the look and feel of an application. Testing anything other than the look and feel of an application such as command lines interfaces, batch processes and various events which trigger certain use cases in a software application come under non graphical user interface testing.
Portability TestingPortability testing is carried out to test how the change of environment changes the performance of the software. For instance, how the software works on different operating systems or if it is a web-based application, it would be checked for performance on different web browsers. This form of testing is important if the customer intends to use the software applicationfor more than one platform.
This form of testing is a subset of system testing. Here the software may be installed in more than one environment or its executables may be created and run on different platforms. In order to carry out portability testing without any issues it is important to keep all portability requirements in mind while designing and developing the software. This type of testing is performed after integration testing. It is important to have the right testing environment to carry out portability testing.
Security, Authentication And Authorization TestingA software application is tested for any kind of security flaws in security testing. Authentication and authorization are considered to be two very important aspects of software testing. It is crucial to carry out this form of testing to ensure that the software is secure and capable of storing confidential customer information when necessary.
Authentication is a process where the person trying to access the software is asked for a username and a password. A wrong combination of the two parameters indicate that the person is not what he is claiming to be and is not allowed to go any further. This is an authentication check which ensures that the login credentials of an authorized software application use are checked.
Authorization on the other hand is all about privileges to use certain restricted features of a software application. Just because you have cleared the authentication process does not mean you have been authorized to access all the data, features and use cases on the software application. For example, in case of social media sites once you feed in the right username and password, you can only access the details of your account and not any other account besides that.
Besides authentication and authorization, security testing also deals with confidentiality, integrity, availability, non-repudiation, software data security, SQL insertion flaws, cross-site scripting attacks and other security related concern which is a complete different subject matter expertise by itself.
Data And Database Integrity TestingIn data integrity testing we need to check if the data stored in the database is accurate and produces results as per the expectations. Some checks are very important for data integrity testing such as whether it is possible to retrieve blank information from the database or not, is data validated properly before getting saved in data base, can the data stored in database be updated, are you able to run tests for all kind of data files etc. In other words data integrity testing is carried out to ensure that the data is accurate and consistent over its entire life cycle.
Database integrity on the other hand deals with testing of all the necessary methods and processes that are important for accessing the database and managing the data within. It is also about how all the access methods functions and data are processed. The data should not get corrupted and should not get deleted, updated or created unknowingly, and there should be test cases to make these validations.
Fault Tolerance And Failover TestingFault tolerance testing is carried out to check how an application would react if any fault occurs in real time scenario. In this type of testing various scenarios are considered such as connection error with network, connection problem with application server, not being able to connect to a database etc.
Failover testing on the other hand is carried out to test the ability of software to recover from unexpected severe problems such as hardware failure or a crash. This form of testing explains how well the system will restore to its original state in case of any kind of failure.
Configuration and Deployment TestingConfiguration testing is carried out to verify how a system performs for various types of system configurations. There are several reasons for carrying out configuration testing. It can help you determinethe reaction time of the system in the test environment and the optimal configuration required for the system to perform as expected. Configuration testing also plays a very important role in scenarios where there is a need to migrate a software from one platform to the other. It helps in verifying whether the system is compatible with the new environment as required by the hardware specifications.
Once the system has been deployed, it is important to conduct certain checks to ensure that it is going to work properly. This includes checking the system for its performance issues such as low speed or chances of crashes, how the application is working in real time scenario, is the software employed correctly in the correct folder etc. All this is part of Deployment testing.
Regression TestingOnce a defect is detected in the system it is immediately sent for fixing. However, once the defect is fixed it is important to carry out intense testing in order to check that changes made in the code has not affected any other area of the system. Regression testing is carried out to ensure that bug fixing has not caused any functionality or business logic violation. Regression testing helps in minimizing gaps in testing process. It ensures that the application has no defects before it is sent for next testing phase.
Performance TestingSubjects such as network delay, data rendering, database transaction processing, load balancing between servers are generally uncovered during performance testing. In other words, rather than finding defects in the actual software, performance testing focuses on testing performance issues. It is important to conduct performance testing in any software for which it is important to have stability, scalability and speed which means good response time and data rendering.
Load Testing And Performance BenchmarkingThe process of load testing is also very interesting; here the behavior of the software is tested under maximum load. Load testing is carried out to check how the software performs or behaves under peak load conditions. There are several tools available for load testing such as JMeter, Load Runner, Silk Performer and so on. These tools are used for automated load testing of the software where several virtual users can be created and then a script is executed to check how the software behaves when multiple users try to access the system concurrently. The tester can control the number of virtual users and see how the system behaves.
Stress TestingIn stress testing the software is intentionally subjected to abnormal conditions and then its performance is monitored. In stress testing the software is tested by applying load that is much beyond the acceptable limit and the resources are withdrawn to find out the point at which it would fail to perform. There are many ways of creating abnormal conditions for stress testing, the database can be turned off and on, and network ports can be shut or restarted randomly. The most common way of performing stress testing is by starting processes that would consume a lot of resources.