Functional vs. Non-Functional Testing Methodologies
Functional vs. Non-Functional
Software testing is one of the most important parts of the development process. When it comes to types, testing processes can fall under either functional or non-functional. Functional testing covers functionality (unsurprisingly) and features of the application, while non-functional testing evaluates a wide range of other factors. These non-functional variables can range from interface design to performance and security.
Functional Testing Methodologies
In most testing methodologies, functional testing involves testing the application against the business requirements. Functional testing is done using the functional specifications provided by the client or by using the design specifications like use cases provided by the design team.
The functional testing part of a testing methodology is typically broken down into four components - unit testing, integration testing, system testing and acceptance testing – usually executed in this order. Each of them is described below:
The unit testing part of a testing methodology is the testing of individual software modules or components that make up an application or system. These tests are usually written by the developers of the module and in a test-driven-development methodology (such as Agile, Scrum or XP) they are actually written before the module is created as part of the specification. Each module function is tested by a specific unit test fixture written in the same programming language as the module.
SpiraTest includes support for the management and execution of automated unit tests. With its library of plugins and extensions for all of the major unit test frameworks (xUnit, JUnit, NUnit, PyUnit, etc.), SpiraTest allows the test manager to ensure that there is full coverage of all program code and that all unit tests have passed.
The Integration testing part of a testing methodology is the testing of the different modules/components that have been successfully unit-tested when integrated together to perform specific tasks and activities (also known as scenario testing, End to End testing, or E2E). This testing is usually done with a combination of automated functional tests and manual testing depending on how easy it is to create automated tests for specific integrated components.
SpiraTest includes support for storing, managing and coordinating integration tests across various modules and components. In addition, specifically for E2E and scenario tests, you can assign different test cases in a single test scenario to different testers so that they can work together on an integrated test.
With its library of plugins and extensions for different automated functional testing tools including our Rapise automation platform, SpiraTest is the perfect solution for managing your integration testing.
The system testing part of a testing methodology involves testing the entire system for errors and bugs. This test is carried out by interfacing the hardware and software components of the entire system (that have been previously unit-tested and integration-tested), and then testing it as a whole. This testing is listed under the black-box testing method, where the software is checked for user-expected working conditions as well as for potential exception and edge conditions.
SpiraTest includes support for storing, managing and coordinating system tests across all the modules and components that make up a system. SpiraTest also supports data-driven testing where test cases are defined with input parameters and different combinations of test data can be passed to the manual and automated tests. This ensures that both expected and exception cases can be tested using the same test frameworks.
As mentioned above, SpiraTest can be further augmented by using our Rapise automated functional testing solution in conjunction to automate the system testing activities:
Rapise has support for multiple system testing approaches, including: record and play, object-based learning, codeless and script-based testing. Rapise will let you automate the system testing of multiple platforms, including: web, mobile, desktop, web and APIs. In fact, Rapise’s ability to test multiple technologies at once makes it ideal for testing integrated scenarios where you may be testing different modules as part of one end to end test.
The acceptance testing part of a testing methodology is the final phase of functional software testing. It ensures that all the product/project requirements have been met and that the end users and customers have tested the system to make sure it operates as expected and meets all their defined requirements:
User Acceptance Testing (UAT)
This is an activity that is vitally important, because the customer or organization usually will not accept the software and sign off on it until you have completed UAT. Therefore, having a smooth and successful UAT is very important.
It is important to have a tool for them to use that makes the testing process as easy as possible. For example, make it easy to follow the script, interact with the system under test in the same window, and record results and screenshots without unnecessary complexity.
SpiraTest provides a powerful manual testing solution that helps you coordinate and manage your acceptance testing activities with all the test scripts, assignments, test results, and associated defects/bugs all tracked in a single unified system. With SpiraTest’s requirements test coverage capabilities, you can validate that all of your requirements have been fully tested to your customer’s satisfaction.
Non-Functional Testing Methodologies
On the other hand, compared to functional testing, non-functional testing involves testing the application against requirements called technical qualities (also known as the ‘-ilities’ because they all end in ‘-ility), for example: vulnerability, scalability, usability. Some examples of non-functional testing are described below:
Performance, Load, Stress Testing
There are several different types of performance testing in most testing methodologies. For example, performance testing can be used to measure how a system behaves under an increasing load (both numbers of users and data volumes). Load testing verifies that the system can operate at the required response times when subjected to its expected load. Then, stress testing can find the failure point(s) in the system when the tested load exceeds that which it can support.
With its library of plugins and extensions for different automated performance testing tools including LoadRunner, JMeter, OctoPerf, WebLoad, and NeoLoad, SpiraTest is the perfect solution for managing your performance testing.
Security & Vulnerability Testing
Previously, security was something that was tested after the fact. With the rise in cybercrime and the awareness of the risks associated with software vulnerabilities, application security is now something that needs to be designed and developed in tandem with the desired business functionality. Security testing checks the software for confidentiality, integrity, authentication, availability, and non-repudiation factors and weaknesses. Individual tests are conducted to prevent any unauthorized access to the software code.
The usability testing part of a testing methodology looks at the end-user usability aspect of the software. In other words, the ease with which a user can access the product forms the main testing point. Usability testing looks at five aspects of testing — learnability, efficiency, satisfaction, memorability, and errors.
The compatibility part of a testing methodology tests that the product or application is compatible with all the specified operating systems, hardware platforms, web browsers, mobile devices, and other designed third-party programs (e.g., browser plugins). Compatibility tests ensure that the product works as expected across all the different hardware/software combinations and that all functionality is consistently supported.
When you can perform compatibility testing using automated tests, one feature that you should really consider having, is a way to do data-driven testing:
This allows you to create sets of different test configurations that need to be tested, which are automatically generated by a system (e.g., give it all the browsers and all the platforms, and it creates an N by N matrix of all possible permutations). Then you can run all your tests quickly and easily through all the combinations to ensure there are no missed ‘edge’ cases.
Automate Your Testing with Inflectra
If you’re ready for a testing solution that can handle automated testing, end-to-end traceability, and more all from an easy-to-use interface, Spira is the ideal answer. Being able to easily visualize, manage, and automate your projects allows you to increase efficiency, reduce bugs and issues, and organize everything you need in one place. Get started with a free trial by clicking the button below!