There are several different practices and scopes of software testing but I will focus on testing during development. If you work in a very small project or alone on a piece of software, it could be easier to test your software by click around on the ui and check if it works how it should. But if things go a little bit bigger this style of testing produces some huge problems:
- Deploying your software and click around on the gui takes a lot of time.
- There are no regressions, if your feature works and you work on the next one, the first would be broken and if you forget to try it out again your software fail.
- There is no possibility to let the tests executed by some continuous integration server like Jenkins for example.
So if your code reaches a couple of lines, high quality work without testing would be nearly impossible or takes a lot of time until it works and if you change it a little bit it could end up in a mess very fast. But when you start this looks very simple and straight forward. It’s a little bit like a jenga tower. You build it up and checked everything. Let’s imagine it works and your customer is satisfied, but what if he wants some minor changes. Every change is like pull out a piece of the tower. If you change it enough times, he will fall down. So therefore you need something reliable which guarantees you, that your changes only produces the result your customer wants and not changing anything else. But how could you deal with it, if you have a lot of pressure and your schedule is very tight?