Skip to main content

How to write good manual tests?

When I first started out writing manual tests, I was really keen to do every step in minute detail and write out the expected result for every little step. In an ideal world where time is no constraint, resource is no constraint and updating the scripts is no constraint.. oh and the person writing the scripts didn't get bored.. then this would probably be the best way!

However, in the business world, we have all these constraints!!

The business want features yesterday, they want these features delivered with the minimal resource within the acceptable time frame and they want new features further down the line that make the old features redundant. 

With the above in mind, it's important to address, what makes up a good manual test? As these tests may or may not be around forever....

I think in order to answer the question above another question needs to be addressed, which is:

Is it going to form part of a manual regression test pack? Or is it throwaway?

If a test is going to be rerun and form a manual regression pack, then it is my opinion that it needs to be in as much detail as possible, and time taken to maintain these as I believe it's good practise to get new QA starters to run through a regression pack of what they are testing, which will help them get a feel for the application. The last thing you want is constant questions over whether this is correct behaviour or not (I am not moaning at new starters who do this, as it's genuine questions and the fault of the test if the test says otherwise)... It's also beneficial in a truly cross functional team, meaning that developers can run the tests without too much confusion.

For throwaway tests, I am a big fan of Given, When, Thens (Gherkin and BDD) or even Exploratory Testing (more on this in future posts). For example:

A Given When Then for searching for a Coming Soon product on a website


Whenever it's possible I like to write throwaway tests in this style, purely because it is meant to be run by someone who knows the application under test and it means that the test is quick and easy to write, quick and easy to update (if required) and can easily be parameterised. Of course there can be additional information in there (for example SQL scripts that may be needed to be run) if required, so long as each step is clearly defined, then I see no reason why you wouldn't want to write tests in this way (unless it is a complex end to end test, but then these types of tests tend to make it into some form of a regression pack anyway, so GWTs aren't really suitable for this form).

The project I am working on currently, isn't really new functionality that will need to be added to a regression pack, and as such, all of the tests that are being written are in this format, with attached data (SQL scripts etc.) if needed.

Another positive for GWTs is that they are easily automated, this can be achieved using SpecFlow, which binds the steps together and creates automated tests which can be run using a toolset of your choice (we use Selenium WebDriver for the WebUI automated tests currently - I will go over this in more detail in future posts).

Manual tests are on the decline,  when I first started in QA 5 years ago the vast majority of tests were manual,  however now with agile values,  continuous integration and better tooling more and more tests are becoming automated,  with what little manual testing that remains being covered by exploratory testing (again more on this in future posts).



Comments

  1. what do you mean by throwaway tests in terms of automation?

    ReplyDelete
    Replies
    1. Sorry, perhaps I wasn't 100% clear, I meant in throwaway manual tests, tests that aren't going to form a part of a regression pack, and aren't going to be used again. For instance, I recently worked on a project that had an aggressive golive date, and the business wanted it out quickly and it was just reworking existing functionality for a new language, so I created throwaway tests around them, in the format of GWTs. Minimal time/effort, but enough information to be able to let people know what is being tested and how.

      Delete

Post a Comment

Popular posts from this blog

Testers: Be more like a Super-Villain!

Who doesn't love a Super Hero? Talk to my son, and he'll tell you how much he loves them, talk to many adults and they'll say the same! Deep down, we all love to be the Super Hero, we all want to save the day! However, I want to talk about the flip side of Super Heroes, the Super Villains... I often play Imaginext with my son, and I (unfortunately?) am nearly always the Super Villain! Be it Lex Luthor, Joker, Two Face, Mr Freeze or The Riddler! These are all great characters and great Super Villains, but why would I want to write about Super Villains? A while ago where I worked, we had a few Super Heroes, people who would be able to come in and "fix" things that had broken and help deliver projects on time. We then shifted, we decided to do away with the Super Hero culture and try and prevent from being in that position in the first place, whilst we didn't go as far as wanting to hire Super Villains, it's definitely a story that has stuck with me and t...

Treating Test Code as Production Code

It's important when writing automated tests to remember that the code you write should be up to production standards, meaning any conventions that you have in place should be adhered to and that it should follow good design patterns. Too many people often say why does it have to be as good as production code, it's "Only" a test, so long as it passes then that's fine... To answer this we need to look at why we want our tests to be written in such a structured and efficient manner: - Maintainability - by making the test code structured and efficient, it becomes far easier to maintain and in doing so changes in the future can happen quickly as the test isn't linked to anything that it shouldn't be and it's easy to understand for a new set of eyes. - Durability - Again by making the tests structured they should be resistant to changes, if you change a variable name for instance then it shouldn't effect the unit test unless it absolutely has to....

Tech Develops - A day dedicated to YOU!

Working in Tech, it can be difficult to find the time to further improve yourself, you're focused a lot on delivery, and it can be hard to drag yourself away from it and spend time on delivering an improved you. This is why some companies are starting to have time dedicated to your personal development, where people drop tools and do a personal project or watch some tutorials. Luckily working at ASOS we get the last Friday of every month to focus on this! Last Friday we held what we call a "Tech Develops" day, where as an employee of ASOS and working in Technology, In the week running up to it we decided it would be a good idea to have a platform where people could stand up and perform a 99 Second Talk about anything they please. We had 12 people sign up to it, and we had talks ranging from the technical (Git-Bisect) to a Conference review (UKStar). The first talk was an informative talk about Git Bisect and how it's used and why because of it, it's import...