Software testing is an essential activity in the software development process. Without testing, you’ll end up with a buggy product that doesn’t do what it’s supposed to do - a lemon. Black box testing and white box testing are two different types of software testing strategies, that are equally powerful, and even better when combined.
We’ll explore each in turn to see how it helps to shape a successful, performant end product.
What is black box testing?
If you’re a non-programmer, when you hear the words “black box” you probably immediately think of the (almost) indestructible flight recorders that record flight details and communications and can be recovered in the event of a crash, even if it’s catastrophic.
In software, black box testing is also handy - but to reduce the risk of catastrophic (software) crashes. What might a catastrophic software crash be? Oh, perhaps your system crashes in the middle of updating your customer database and you don’t have any backups. In that case, you would have just lost all your customer data. Gah!
How does black box testing actually work?
There are three types of black box testing: Functional testing, non-functional testing, and regression testing.
Functional black box testing
With functional black box testing, we can check if the software does what it’s supposed to do without knowing how it does it.
Software is written in modules, or components. It’s a series of many little different components that come together to make up a whole system. By writing software in this way, in small components, we can test each component to make sure it functions as expected, instead of just testing some huge big system we’ve written in a big blob and hoping there are no bugs. The “big blob” approach will always have bugs.
So, with each small component we have inputs and expected outputs. To conduct blackbox testing, you need to create a list of valid and invalid inputs, including boundary cases.
Here’s a simple functional black box testing example. Let’s say you have a software module that takes in a number and adds 7 to it.
Your simplified test inputs would be:
- A positive number
- A negative number
- A decimal point number
- A non-number value
- A null input
You can see that your first 4 inputs should return a valid and correct result, where as the last 2 should give an error message.
Non-functional black box testing
There are other expected system behaviours that we can also test with black box testing. These can include things like system response times, expected screen flows, handling of large network traffic, etc.
Non-functional testing will include things like setting up simulated test environments to see how systems perform under pressure. There are various tools that help us achieve these testing goals and automate the processes involved.
Regression black box testing
This is when we do black box testing of the whole system (including functional and non-functional tests) when we make a change in one place - to ensure it hasn’t impacted other parts of the system unexpectedly.
Obviously, this process needs to be automated otherwise it would take forever!
What is white box testing?
White box testing is when we test the internal structure of a software module: the code itself. Why do we need to do this if we already know the system works? Well, there are various reasons that white box testing is a good testing strategy to employ.
For security reasons
Sometimes code is inherently “unsafe” - whether it’s because it references and uses an insecure function from an external source, it accidentally causes data leaks, or it uses the wrong structure.
To fix inefficiencies
There are infinite ways to create a software module that can all do the same thing. While something can always work, that doesn’t mean it has been configured in the best way. If the code structure can be more efficient from a performance perspective, white box testing can discover this.
To check paths or data flows
Should a financial transaction be recorded in your system before or after it’s confirmed? Maybe it needs to be recorded both before and after? White box testing allows you to examine the inner workings of paths and flows of data to see whether they make the most sense, and/or conform to system requirements.
There are also plenty of other reasons for white box testing, too.
Systems need a combination of black box and white box testing
Black box testing, as you can see, is essential to make sure a system works as expected. This kind of testing can be performed without much knowledge of coding necessary - as it doesn’t require examining the code itself. A knowledge of how software systems work is far more important in this case.
White box testing is more difficult and needs to be conducted by experienced programmers, utilizing advanced tools.
Both types of testing have a large toolset available to help out - but that’s beyond the scope of this article.
What kind of testing do we do at CodeFirst?
We’re software professionals who employ tools and techniques to conduct both black box and white box testing of all of our projects. We know that testing software is equally as important as (if not more so) important than writing code.
Often if you choose inexperienced, cheap, or unproven software houses for your software development project, you’ll find that you get a poor end product. Part of the issue is inevitably because of their testing practices within the company.