My cardiologist understands my heart, and my dentist understands my teeth. When asked about the future of software testing, one of my colleagues predicted more specialization in testers; much as medical doctors have specialized, so will testers.
This is already happening … some of the software testing specializations that I’m aware of:
- Performance testers measure how software consumes resources like time, cpu, memory, network i/o, disk i/o, and disk space.
- User experience testers evaluate the usability of the interface, including the design and look and feel.
- API testers focus on the programmability of the software.
- Web testers look at HTML/CSS/AJAX/Flash/Silverlight applications.
- Globalization / Localization testers look for issues that may happen when using software in different locales and languages, or when the software is translated to another language.
- Customer focused testers feel the pain of customers, during internal dogfood, beta, and after release.
- Domain specific testers know the non-software field that the software is aimed at, whether it be accounting, business intelligence, music, architecture, photography, or others.
- Cloud testers understand the challenges of datacenters and how to test in production, gather telemetry, and serviceability.
- Automation testers can turn test ideas into running test automation. This often further is specialized by knowledge of commercial or open source tools.
- Logo/compliance testers can evaluate the requirements set out by third parties.
- Install / upgrade / deployment testers examine how software gets installed or upgraded.
- Security testers hunt for vulnerabilities that allow escalation of privilege or leaking of sensitive information.
For all of these, there are core skills that help testers be effective, including test design, observation, evaluation, bug advocacy, diplomacy, and continued learning.
Just as a doctor’s bedside manner and care for the patient is key, I think the core skills matter more in the overall effectiveness of the tester in supporting the software development effort.