Today, many things are controlled by software and software quality is becoming the number one issue. With the world more interconnected by the internet, software has reached more people and more businesses than ever. With that, software defects have also increased significantly. While some defects can disrupt work, others can create damages with millions dollars in losses.
The software engineering process requires that testers be involved in the beginning of the project and developers have to be part of the quality solution. This process stated that when a product is being designed, the test case should also be designed along with it, not afterwards. Since the developer creates the code, there is nobody else better to test the code than the developer because he understands his own code. When developer writes codes, he must also write the test cases. Every line of code must be written with testability in mind and the software product has to be designed that it is testable in the end. The question is who has to do the testing? The answer is developer has to test his own code (Unit test) and write test cases for the functional testing on the code which they are written. By doing that, all defects in code can be identifies, fixed, and eliminated at the development phase.
Testers should be involved in the beginning of the project to make sure that developers are following testing principles and design the software product that falls within the scope of testing tools. Basically, when the developer writes code and test cases, at the same time, the tester also write their own correspondent test cases. Together they work to ensure the quality of the final product. While developer focuses on their unit test and functional test, tester focuses more towards system test and integration test where many units and functions are combined to form the final product. Of course, working together is not easy and there are issues that tester must overcome. Beside the personal conflict or teaming issue, there is another technical issue too. With advanced programming tools, developers can improve their productivity significantly.
For example, with Integrated Development Environment (IDE) a software tool that combines source code editor, compiler, build automation and debugger, developers can code, test, and also do the functional testing on the code which they have written much faster. Some IDEs such as “IntelliJ” and “Eclipse” help developers with feedbacks on their code they have written too. This put more pressure on testers since developers can write code faster, but testers still have to incorporate all the testing methods to ensure the software has no defect. This is why sometime developers complain that testers are too slow and prevent the release of software.
Tester in agile project
The Agile approach works well for small projects (3 to 8 people). When it comes to testing, the development team itself does its own testing. There is no distinguish roles between developers and testers as team members often switch roles. In other world, with Agile approach “developers” and “testers” are part of the development team. For example, with Extreme Programming, there is an approach called “Pair programming” where two people work together in one task. One plays the role of “Developer” (or Driver) and the other play “Tester” (or Observer). They observe each other’s works, learn from each other, review each other’s code, and provide feedbacks to each other. The developer learns testing skills from tester and the tester also learns coding skills from the developers. Eventually they switch roles as they continue to work together. However, it does NOT mean the tester’s job is eliminated. As a tester, you will be included in the development team where you will also learn programming and work as developer too.
I know that this is different from the waterfall approach where developers only test their own code (Unit test) then give it to testers for additional tests (verification and validation). Unless your company is ONLY focusing on small projects, there will be larger project too (Maybe 20, or 50, or 200 people) so there is still a need for independent testing team. Large project is usually complex, critical, with many technical difficulties for one person to assume many roles. Larger projects also require certain expertise and experienced people who has certain specialty so you should NOT worry that testing job will go away soon.
For most large project, the developing team would focus on requirements, architect, design, code, and unit tests. The test team is working in parallel with the development activities but focuses more on specific problems which are difficult for the development team to find and provide feedbacks to the development team. This types of testing is similar to the “Pair programming” approach in Agile but the testing team is experienced and trained to performs certain tests (Verification and Validation) to ensure quality is “built in”. For example, the test team will focus on the integration issues (Integration tests) to ensure that the development team’s solution will work well with existing systems or solutions done by other development teams. For complex system, the test team may focus on the security issue (Security testing) and make sure that it is well designed and fits into current systems. In most large projects, there are several development teams, each is concentrating on certain functions or specific area, but there should be only one independent test team to oversee everything and make sure that the develop system will work (Verification and Validation tests).
Unless you really like to work permanently as a tester, I believe learning new skills, new knowledge is a natural progression in a software career. I would NOT hesitate to learn about Agile and prepare to work in new roles such as programmer, developers, or even Scrum Master. The more knowledge you have, the more secure is your job. Do NOT worry about the company’s direction to move to Agile but focus on what you can learn and what you can do to improve your career. You want to be the best software professional possible, no matter what roles and what responsibilities.