Can a tester ever become a developer?

What should be the ideal relationship between developers and testers?

I've worked in teams that had everything from 1 tester per developer to 1 tester per 10+ developers to no testers at all. Each of them were able to release software of the expected quality (not everyone did, but that's a different story).

The short answer is, of course, it depends. However, looking through the answers that are already here, I found a lot about cost, type of software, and testing methods , while I know nothing about practices related to the creation of Software found.

When we think of quality assurance, responsibility for quality begins much earlier than the testers. Or better yet, if your team understands quality assurance, you should have a role as a tester and not about that job speak of a tester. In such an environment, everyone on the team, especially developers who role of the tester.

With such an attitude would be one of the key factors a set of design practices that you use to create software :

  • Methods like TDD, ATDD, BDD help you automate tests during development based on test scenarios that may come close to actual use of the app
  • Continuous delivery means that, on the one hand, you release to the production environment (or possibly close to the production environment) as often as possible. This forces the team to automate (not just test) as many important things as possible, but also to make the steps so small that the risk and cost of posting with an error is usually very small.
  • Code reviews and / or pair programming (see a nice comparison) help to significantly improve the code quality before it even comes to functional tests.
  • Automated tests with tools like TestComplete, Selenium or similar help you fill in gaps that are not easy to fill with tests written in code, and serve a similar purpose: less regressions, higher quality, less manual testing.

I know teams that could go to 0 testers with such an approach. Note: I'm saying about 0 tester jobs, not that nobody ever fulfills this role. Pretty much the opposite of what everyone does.

Another crucial factor is that expected quality . It is expected that not all software will be of the same quality. Another social website may fail with little to no consequences while we definitely don't want to see bugs in military software.

When we talk about this, it is worth asking how quickly we can fix the problem and the answer may be in continuous delivery, which I mentioned earlier. If we are ready to update the software immediately, the potential consequences of a sliding error through the tests will not be as great.

Still, I personally feel more secure if someone looks at the software before it is released. No matter how automated the process is, I prefer to have at least one tester on a team.