Functional Software Testing Explained
Adam Creamer
To the uninitiated, mobile testing may seem like a relatively straightforward plug-and-play method of ensuring a product is ready to launch. Run it through some software, do some baseline checks on the ability of a server to handle large bandwidth, operate the app through its typical regimen, and we’re ready to go.
However, testing the user experience extends beyond just debugging. Testers have to measure not only the operations and actions of an app, but also the behavior of the operations. In other words, yes, your mobile popcorn delivery app may function and execute sales at the customer’s point of sale, but is the customer having a fully-optimized user experience? Are their elements to the purchase that can be smoothed over or enhanced?
This divide in testing is what we refer to as functional and non-functional testing. We’re going to discuss the differences between these two testing types, examples of functional and non-functional testing, and when testers should employ each type to guarantee that their mobile app is a success on Day One.
Functional testing is meant to set a standard in performance for your mobile app. An essential facet in the development process, functional testing measures exactly what it sounds like: whether or not an app can be used as it’s meant to be. If a user goes to add an item to their cart, is the item directed towards the cart? Is the quantity preserved? When a user clicks to change their profile picture, does the picture save? Functional testing pools together the myriad of questions that arise when asking ourselves, “What simplicity do we overlook in our daily app experience?” The things that make an app go, the things that keep an app from going; this is what our attention is focused on in functional testing of mobile apps.
In practice, client requirements are typically listed out and a software specification/Requirement Specification is utilized to guide testers through testing the functionality of the application. Test data is then structured based on this and a number of test cases are formulated. Applications are then tested in real environments to determine if actual and expected results are aligned. This style of functional testing, known as the Black Box technique, is typically used as a manual form of testing to check for bugs.
The idea behind functional testing is to measure the result of processing. The act focuses squarely on simulating actual system usage without any assumptions of how the system structure should function. Each component of the mobile app is tested to ensure that each component works in compliance with the base requirement. This form of testing is also uninterested in how source code works. Instead, each function of the software is tested by testers delineating an appropriate test input, noting the expected output and comparing the two during the testing process to see that expectations match the results of the functional test.
The different types of functional testing range across the board. Smoke testing is done before the actual system testing to ensure that the most critical functions – much like an emergency smoke detector – are operational. Testers do this so they don’t have to waste time reinstalling and going through deeper testing processes if the baseline measures aren’t operational. Another example of functional testing is integration testing, when two or more functions of a mobile app are integrated within a larger system. Localization testing will check to ensure that a mobile app will function regardless of client languages. If a mobile app developed in English is localized to a spanish-speaking user and the language is set up in Spanish, will functionality continue to work?
These forms of functional testing are failsafes to make sure the app is running as it should. Let’s turn our attention to non-functional testing operations to get a feel for how this aspect of testing can influence your development process.
Non-functional testing is centered on assessing the user experience and making the app overall a more reliable entity. This is critical in that the UX can dramatically shape the public perception of a brand. Users take to rating your app and, while they may not be writing about it crashing, they are noting how “unuseable” the app is, how frustrating the commands may be, and all of this contributes to a perception that your mobile app doesn’t perform. We use non-functional testing to counter this.
The list of non-functional test types is extensive; it’s ultimately an umbrella term for a long list of testing conditions that teams can check for. Accessibility testing is a key non-functional test, used to ensure that your mobile app caters to users with a range of disabilities outlined in the Americans with Disabilities Act. Performance testing is a non-functional test that many teams employ, testing how an app’s speed holds up under a range of simulated conditions. In a similar ballpark is load testing, which tests an app to function at peak server usage. Failover testing will determine how an app is able to recover under a backup system should the system fail. Internationalization testing checks an app’s ability to adapt to regional languages and other factors. Usability testing is typically a more manual experience, but it’s conducted by team members checking a number of gestures and performances from the user perspective to determine ease of use.
There are a myriad of other non-functional tests that measure everything from scalability to security, and each has a purpose in your development process. The idea is to employ non-functional testing now in a preventative mentality, rather than wait until it’s too late and have to be reactive to faults in the app once it hits the market. Early non-functional testing can thus be thought of as a means to enhance the brand, save time in the long run, and reduce costs for the team taking the app to market. Utilizing a testing regimen of both non-functional and functional testing procedures alike will lead to a well-rounded app that you can feel confident is ready to go on launch day.