Section 1: Automated Testing – A General Overview
In this section, you will be introduced to automated testing. We will discuss why you would want to use it, what it exactly entails, and when you should use it.
This section contains the following chapters:
- Chapter 1, Introduction to Automated Testing
- Chapter 2, Test Automation and Test-Driven Development
Chapter 1: Introduction to Automated Testing
A couple of years ago, I finally got to write this book on application test automation – one I had wanted to write for a long time already, as automated testing doesn't appear to be a love-at-first-sight topic for many. And, like testing in general, in many implementations, it tends to be subordinate to requirements specifications and application coding, be it a project or a product. And who really loves testing? It is not typically what the average developer gets enthusiastic about. Even functional consultants do not easily step up, for example, when raising this question during many of my workshops on automated testing.
So, when I started writing this book, inevitably, I did pose the question to myself: do I love testing? And I answered it with a yes. A big YES. This subsequently led to additional questions, such as: What makes me love testing? Did I always love testing? Why do I love it while the rest of the world seems not to? Questions with answers that made me go around the world evangelizing test automation, stubbornly sharing my findings, and pushing Microsoft to improve their tests to make them better and reusable. And all because I reckon that it is fun – BIG fun!
Having been an application tester in the former Dynamics NAV Global Development Localization (GDL) team at Microsoft, I surely got exposed to the testing virus. You could say that I had to learn to do the testing job, as I was paid for it. But it also suited me well, with me apparently having this specific DNA kind of a thing that makes testers what testers are. Having pride in breaking the thing and loving to prove its robustness (hopefully) at the same time. And, not in the least, daring to break it, running the risk that your developers will no longer like you.
One afternoon at Microsoft, my developer team member walked into our office and stopped next to my desk. Him being very tall and me sitting, I had to turn my head up to look at him.
"What's up?" I asked.
"Don't you like me anymore?" he responded.
Me: What?
Him: "Don't you like me anymore?"
Me: "Nope, still like you. Why?"
Him: "You rejected my code; don't you like me anymore?"
Me: "Dude, I still like you, but concerning your code, my tests show it somehow useless."
Testing is not rocket science, nor is automated testing. It's just another learnable skill. From a developer's perspective, however, it requires a change of mindset to write code with a totally different purpose than you are used to. And we all know that change is often not the easiest thing to achieve. Because of this, it's not unusual for attendees at my workshops to get to a certain level of frustration.
Application testing is a mindset, and it needs a big dose of discipline too – the discipline to do what needs to be done: to verify that the feature was built right; to verify that the feature under test meets the requirements – and the discipline when bugs are reported and fixed to execute the whole test run again and again with any new bug, to ensure that the verification is complete.
I tend to see myself as a disciplined professional. I have been quite a disciplined tester, with a high rate of bug reporting. But did I always love testing? You know, in those days, all our tests were executed manually, and with each bug I found, my discipline was challenged in some way. Imagine my mind running when executing the fifth test run after another bug fix. It's 4:00 P.M. and I am almost done, and the feature under test has to be delivered today. At breakfast, I promised my wife that I would be home on time, for whatever reason. Let's pick a random one: our wedding anniversary. So, me being a disciplined tester, my promise to be home on time, 4:00 P.M., and … I … hit … another … bug. Knowing that fixing it and rerunning the tests would take at least a couple of hours; how do you think my mind is running? Right: binary.
I had two options:
- Reporting the bug would keep me at work and make my wife highly disappointed, to say the least.
- Not reporting the bug would get me home on time and save me trouble at home.
Had automated tests been in place, the choice would have been quite simple: the first option, resulting in no hassle at home and no hassle at work. Welcome to my world. Welcome to test automation!
In this chapter, we will discuss the following topics:
Why automated testing?
Plainly said: it all boils down to saving you a lot of hassle. There are no emotions or time-intensive execution that will keep you from (re)running tests. It's just a matter of pushing the button and getting the tests carried out. This is easily reproducible. Each time you push the button, the test will be executed exactly the same. It is fast to execute, as automated tests are "light-years" faster than any of us could do, and objective: a test fails or succeeds, and this will be part of the overall reporting. No human emotions that could hide it away.
If it was as straightforward as that, then why haven't we been doing this in the Dynamics 365 Business Central world all these years? You probably can come up with a relevant number of arguments yourself. Of which the most prominent might be we do not have time for that. Or maybe: who's going to pay for that?
Why not?
Before elaborating on any arguments, pros or cons, let me create a more complete why not? list. Let's call it the whys of non-automated testing:
- Costs are too high and will make us uncompetitive.
- We are not used to doing it this way and our sales and management team don't see the benefits and cannot be "convinced."
- Dynamics 365 Business Central platform does not enable it.
- Customers do the testing, so why should we bother?
- Who's going to write the test code? We already have a hard time finding people.
- Our everyday business does not leave room to add a new discipline.
- There are too many different projects to allow for test automation.
- Microsoft has tests automated, and still, Dynamics 365 Business Central is not bug-free.
Why yes?
Dynamics 365 Business Central is not as simple as it used to be way back when it was called Navigator, Navision Financials, or Microsoft Business Solutions – Navision. And the world around us isn't as one-fold either. Our development practices are becoming more formal, and, with this, the call for testing automation is pressing on us for almost the same reasons as the whys of non-automated testing:
- Drive testing upstream and save costs.
- Dynamics 365 Business Central platform enables test automation.
- Relying on customers to do the testing isn't a great idea.
- Having a hard time finding people – start automating your tests.
- Test automation will free up time for everyday business.
- Keep on handling different projects because of test automation.
Let's check each of these aspects separately.
Drive testing upstream and save costs
Regarding costs, I tend to say that a Dynamics 365 Business Central project goes 25% over budget on average, mainly due to bug fixing after go-live. Quite a number of attendees of my workshops, however, have tended to correct me, saying that this is on the low side. Whatever percentage is the case, the math is quite simple. If you're spending 25% extra at the end of the line, why not push it upstream and spend it during the development phase on automated testing, and meanwhile build up reusable collateral? Even more, this also ends up being a powerful multi...