Skip to main content

How to guarantee bug free software?

It was a bad weekend for me, my fantasy team lost, with regards to the fantasy team, it has shown to me that no matter how well you prepare, how well you plan, there are things that are going to happen that you just can not predict.

Which leads me onto the title of this post, you can never guarantee bug free software. You can highlight the areas of risk and highlight what you have and haven't tested, to make business owners aware of what issues may arise, but you just can't guarantee bug free software being released. There are far too many variables that affect what you can and can't test unfortunately. Software is an extremely complex system, and this is ignoring hardware, which makes it even more complex.

Going to an extreme, NASA have shown that it's possible to make "virtually" bug free software, but mistakes are still made, which are sometimes unfortunately, fatal.

One solution is, as I said, to highlight the areas of risk, highlight what you have tested, and highlight possible things that you deem low risk, and make the business aware of the implications of what you ahve and haven't tested, as unfortunately, there isn't time to test everything.

Something that definitely helps in highlighting areas of risk is a good set of requirements, we don't always have this, but if we don't we need to say early and often.

Another thing that helps, is TDD, by testing early and testing frequently, you are far more likely to catch bugs before they enter production. It also encourages developers and QA to ask questions about requirements, so definitely feeds into the above paragraph too.

Every once in a blue moon, you may get an issue arising that you had marked as low risk, but this is life, it is full of unknowns.  What you mustn't do, is completely change your approach, you are a good tester, you need to stick to what you know, and probably tweak your approach so that the issue or something similar doesn't happen again, but it would be foolish to throw away the game plan that has proved successful in the past. The important thing is to learn from it.

This reminds me of an interview I once held, I asked "What's the biggest bug that you've let go into Production?" to which he replied "None", I immediately thought this was strange, we've all made mistakes, the important thing is how we learn from our mistakes, and ensure that it doesn't happen again.

Which is what I am going to try and do with my fantasy football team, I'm going to stick with David Wilson, stick with Dwayne Bowe, but tweak the lineup slightly to ensure that I have the best chance of success in Week 2!

Comments

  1. Always an important thing to make sure non-testers (heck, maybe testers too) are aware of. My turn of phrase when asked is usually we can "make quality more likely" or we can "make critical issues less likely". Maybe weasel words to some, but it's the truth!

    For assessing risk areas in critical systems I apply Failure Modes and Effects Analysis (FMEA) on occasion. Then build tests around those we identify, along side the usual Functional type testing of course.

    Mark.

    ReplyDelete
  2. Awesome article! I have gradually become fan of your article and would like to suggest putting some new updates to make it more effective.
    MAC Address Spoof

    ReplyDelete

Post a Comment

Popular posts from this blog

Coding something simple.... or not! Taking a screenshot on error using Selenium WebDriver

I recently wrote a little function that takes a screenshot at the end of a test if it has errored. What sounded very simple at the start turned out to be quite a bit of work, and quite a few lines of code to handle certain scenarios! It's now over 50 lines of code! I'll start with what I had at the beginning, this was to simply take a screenshot in the working directory, we are using SpecFlow and Selenium to run the tests, so we are going to check if the ScenarioContext.Current.TestError isn't null, if it is, then using Selenium, take a screenshot (note the below code is a simplified version of what I had at the beginning). [AfterScenario]         public static void TakeScreenShotOnError()         {             if (ScenarioContext.Current.TestError == null) return;             var screenshotDriver = Driver as ITakesScreenshot;             if (screenshotD...

How to manage resources within new teams?

Working where I work we are constantly spinning up new teams to take on new workloads as business come up with new demands and new features they want developed and tested. The problem with this is how do we ensure the work of the newly spun up team is of sufficient quality. One method is by taking people from other established teams and placing them on the new team. This works great for the new team, but unfortunately it will oftenl eave the established team lacking in a resource whilst they try and fill the gap left by the person who has left. We are seeing this often with our offshore teams, it can be damaging to the team structure and the teams velocity, but try as I might, I can't think of another way around it. It's far easier to take 1 person from a team that is established than it is to build a whole new team from scratch. At least by leaving the core of a team in place, you should be guaranteeing that the new team are aware of any coding standards or any QA standard...

Considerations when creating automated tests

We recently released to a number of teams our automated regression pack that has been worked on over the past few months. This regression pack tests legacy code, but contains a large number of tests.  As a bit of background, a number of teams are working on new solutions whilst some are still working on legacy code. With this in mind we constructed an email with a list of guidelines when creating new tests that need to be added to this regression pack.  I figured that these can be quite broad so should apply for any organisation, so thought it would make an interesting blog post...  So here goes,  when creating automated tests, it's important to consider and adhere to the following: - Think about data . The tests need to retrieve or set the data they need without any manual intervention - This should help them be more robust and easier to run without manual intervention. - The tests need to be idempotent - By making it so that each test is standalone and does...