One of the final parts of any development lifecycle is the much-maligned process of testing. I’m probably revealing a little about myself by using the word ‘maligned’ there - I should probably replace it with something like ‘vital’, ‘essential’ or even ‘helpful’ - I’d be the first to admit it’s not my strong point, however, testing your application or website is undeniably all of those adjectives and more.
Web development is a breeding ground for different types of testing and the list seems to get longer all the time. There are some you will no doubt already be aware of (Beta Testing? Usability Testing? Perhaps A/B Testing?) but others you may not. So here’s a quick (far from exhaustive) glossary of testing terminology and why each one matters.
A Unit Test seeks to break down the code into small bite-sized chunks and checks that each part of the code is doing what it’s supposed to do. In theory this sort of testing should be built in parallel with the rest of the development work, so each new addition to the code has its own corresponding test.
Loosely speaking this involves testing that different elements that make up your product (both internal and external) are speaking to each other properly - for example, can your website reach a required API and does it get the right data back?
As the name suggests, this is simply the process of checking that the data coming in isn’t completely mad and fits what you need. A classic example is when you ask a user to enter a number between 1 and 10. A sanity test looks to ascertain if they've done this or, perhaps, if they've written ‘ten’ or maybe something altogether more sinister, which brings us nicely on to…
Security Testing / Penetration Testing (aka Pen Testing)
As we know, the internet is not always a lovely, friendly place where everyone respects everyone else's opinion and would never dream of doing anything near the illegal spectrum. Unfortunately, a fact of life is that there are a huge amount of rouge processes (aka bots) roaming around the web attempting to find cracks in web applications, which they can then force open. Keeping your site secure is a constant battle.
One I often fall foul of myself, I have to admit, regression testing comes in especially handy when you have multiple developers working on the same project. Essentially, this is making sure that something new you have added to the application hasn’t broken something else which was already in there. Perhaps there is a harmless-looking function that you need to tweak ever-so-slightly to get the result you require, on your particular part of the code. Not knowing that this little bit of code is also called multiple times elsewhere throughout the code, means that you still expect it to return data in the original way but you've effectively confused the system - suddenly you have a broken app on your hands.
A pretty high level one this - Acceptance Testing does what it says on the tin - is your project acceptable? Does it meet the agreed requirements that were set out before you started building it? This level of testing is critical to every project and should never be overlooked.
A ubiquitous term now, usually used to indicate that the product is essentially ready to see the light of day, but any users should be aware that their may still be bugs or developments to come. Beta can sometimes be used simply as a disclaimer (“Don’t blame us if things don’t work quite right yet”), but really, as a developer, you should be monitoring for any errors even more so than usual during this stage. Its less well known sibling is Alpha Testing, essentially the same thing but usually undertaken by internal users, rather than public users.
Performance / Load Testing
A key factor for many, if not all, websites is how well it can stand up to load, or in other words, how many simultaneous visitors are able to view the site at the same time without causing issues? This is a tricky one, there are a huge amount of factors that make getting an accurate figure here nigh-on impossible (in my experience). But, as always, the key is to test, test and test again, not taking the launch of a website to be the end but rather just the beginning of ongoing improvements.
As the name suggests, this tests how easy the application is to use for its intended audience. You can write the most beautiful code the world has ever seen (or in most cases, will never see *sigh*), but if your target audience can’t find what they’re looking for or achieve the goal you’re meant to be facilitating, then really you’ve already lost. Usability testing can take many forms, from remote online user testing to mediated user testing labs and interviews.
This is essentially taking two ideas which aim to achieve the same thing and splitting your users 50/50 - half of them see version A, half see version B - which one gets the better feedback? Which one achieves the most sales conversions? A nifty little tool for testing out new ideas and making sure you’re not taking a backwards step with new functionality. The key to A/B Testing is being scientific and only making very minor changes between the two versions to test each time.
As you see, testing can quickly become a full-time occupation (in fact, funnily enough, there are plenty of actual career Software Testers out there). It’s easy to become overwhelmed, but introducing these methodologies into your day to day processes is the only way to make sure that the product you deliver is as good as it can possibly be, in as painless a way as possible. But, there's still a cynical part of me that thinks it will never be easy… Sorry!