Software Testing as a Career
Date: March 13, 2006
Published in Indian Express dated 20 March 2006
Software Testing was an after-thought in the 1990s.
For a long time after the mainframe days – especially since the advent of personal computing, Software Testing used to be an activity that was performed almost as an after-thought. Developers themselves did much of the testing – which was very superficial and just enough to ensure all features seemed to work “just fine”. In addition sometimes there were testers hired to do what was called “monkey testing”. It was thought that if a monkey entered all sorts of random input sequences, that would find hidden bugs in the software. As if real users would behave like monkeys instead of doing their routine work!
There was a reason why such a treatment was given to the discipline of software testing. The PC brought software to the people. Companies small and large started building or using applications to automate their business processes. Professionals started using productivity applications like Word and Excel to organize their work. College kids started playing games on the computer. In those days software was a novelty, almost magic. Nobody thought much about quality. If anything, quality was about how appealing the user interface was. If the program worked, great! If it failed, you just had to hit ctrl-alt-del or the power button. Or simply go back to doing things the old way – by hand.
Software Quality has become critical.
The days of quality as an after-thought are long gone. Software is now a critical part of our lives. Software failures and data loss are no longer acceptable because they cost money, time, livelihoods, and sometimes even lives. NASA lost billions of dollars when a software bug related to simple conversion formulae caused destruction of its rocket. The Mars Orbiter endeavor was stuck in the Mars mud for days because a memory overflow bug caused disrupted communication. Patients have lost their lives because software bugs in radiology equipment caused excessive dosage of X-rays. Politicians have lost elections due to rounding errors in the vote-counting software! Hackers exploiting software bugs to bring down the Internet or steal confidential data is now routine news. There are numerous such examples of how software bugs have caused and continue to cause devastating consequences. Quality is now “must-have” rather than “nice-to-have”. It is now also understand that quality is not skin-deep, i.e. there is a lot more to the program’s quality than its user interface.
Software Testing is a quality oriented career.
A lot of people consider software testing as a destructive job – one that involves taking things apart and looking for any obvious problems. Yes, taking things apart is a technique used in software testing. But really software testing is more than that. It is about quality of the software. It is about knowing the end user’s expectation of quality and helping developers design and program that expectation. Software testers are quality professionals. They must be quality-conscious, familiar with the various quality attributes of software, and conversant with the tools and techniques used to verify that the recommended quality bar has been met.
Software Testing is a challenging activity.
Software is a complex thing – sometimes as complex as an airplane or a space shuttle. The only other thing which is probably more complex than software is Particle Physics – which itself uses a lot of software for modeling and simulation. The people who ensure quality of airplanes or space-crafts are not monkeys – they are engineers who know how the airplane is built to the bolt. They also know the weaknesses and physical limitations of its various components. They use this vast knowledge about the airplane to test its behavior and function. To make things more difficult for software, it’s an abstract entity – there is no way to “see” or “feel” its components. Despite the impression created by the proponents of “modular” development and “software layers”, software is essentially a blob of bits that can behave in unpredictable ways. There is another big difference between Software and traditional mechanical systems. A car, for example, rarely breaks down suddenly; it usually gives ample warnings – through some noises, creaking sounds, falling parts etc. When a software bug hits, the software failure is immediate.
Software development is unlike product manufacturing in other industries. In a hard goods industry, a product architect writes specifications which are turned over to engineering and the product is built exactly as planned – without deviation. Software development is a collaborative process. Typically an architect sets forth specifications for development. Then as the programmer works, he or she thinks of new techniques to improve scalability and performance. The programmer and the architect come together, make changes and continue to work in such a cycle.
It should thus be obvious that software testing is an extremely challenging activity. Software Testers, better known as STQE (software testing and quality engineering) Professionals at Disha Technologies, are software engineers who must be familiar with how software is designed and developed, how the “modules” interact, all interfaces with the external world, the weaknesses that may exist due to the choice of architecture, tools, and programming language, and the flaws that arise due to human errors.
There is money to be made in Software Testing.
As I mentioned earlier, quality is very much on the minds of end users. Software is now used for mission-critical purposes where bugs are not acceptable. This has caused software development companies to allocate bigger budgets to software testing. For example, the world-wide spending on software testing in 2002 was US $7 billion. By the year 2009 it is expected to reach US $ 21 billion – an average annual growth of 16%. Couple that with the fact that software testing is getting outsourced in huge quantities. The average annual growth in US$ of outsourced testing over the next 5 years is expected to be a whopping 82%. And finally there is a severe shortage of good STQE professionals. There is little doubt that the STQE career will continue to be a very lucrative career with a lot of growth.
Software Testers have to be a step ahead of the developers.
It’s a common misconception that one doesn’t need to know programming or software development to perform software testing. If you consider the airplane analogy once again, there is no way for the quality assurance engineer to certify that the airplane is flight-worthy if (s)he does not know the guts if the machine. Software Testers must understand the architecture and design of software to be able to point out the weaknesses and holes that are not obvious to the developers who created them in the first place. They also should be able to use programming techniques to develop smart test tools or automate the testing process.
Software testing in many ways is like a crime detective’s job. You look for clues, get into the mind of the programmer, try to re-trace his/her foot-steps, use fancy tools to study evidence, and find that evasive bug. A lot of testers these days do not stop at simply reporting bugs; they try to pin-point the problem.
One can start a software testing career by becoming a manual tester, but for him/her to build a long-term career, knowledge of software development and programming skills are essential.
Software Testing jobs at Independent STQE organizations offer unique advantages.
There are now many organizations, like Disha Technologies, which specialize in Software Testing. They appreciate the fact that software testing as a business requires unique hiring practices, specialized training, a creative work environment, access to experts in software quality, and an R&D focused on finding tools and methodologies unique to software testing and quality. The work culture in these places encourages finding defects and thinking with the end-user’s perspective. There is no glass ceiling in these places – everyone is a tester and hence there is no limit to how far you can climb the corporate ladder.
Software Testing offers many career paths.
Software Testing is an exciting career – because you work for the end user, you get to be involved at every phase of the software development lifecycle, you need creativity to find defects, and you get to play with cool new gadgets and applications.
Software Testers have a variety of career options. They can work towards becoming technical experts for specific quality attributes of software, e.g. performance, security, reliability, accessibility, interoperability, and usability. Or they can specialize in testing different types of software, e.g. web applications, operating systems, network protocols, embedded systems, storage devices, and database applications. Or they can become Quality Consultants and help small businesses build test strategy and release plans for their products. Or they can grow as leaders and manage large test projects – which involves managing test teams, working with other teams to plan the test effort, and ensuring a timely and high-quality release of the software. Or they can work at the cutting edge of software testing – by doing research in software testing, devising new ways and tools.
Functionality testing is just the beginning of software testing.
Generally, testing is viewed as verification of the functional specification. This is also known as functionality testing, and it constitutes the largest chunk of testing carried out by product companies. But just like taking a test drive of a car is not enough to judge its quality, and one should look under the hood to check the engine and transmission system, in the software world functionality testing is just the beginning. There are many other aspects of the software that need to be tested. Performance testing finds out how the software will perform under reasonable as well as unreasonable loads. Security testing aims to discover vulnerabilities in the software that might allow hackers to steal information or cripple its function. Accessibility testing verifies that people with physical handicaps can use the software without any problems.
Anyone who wants to build a test career, should explore some of these areas and develop a deep understanding, and possibly build tools or devise techniques to try out some of the underlying principles.
Software Testing is an engineering discipline.
The most important qualities of a Software Tester are the “testing mindset” – aptitude to find defects, and analytical ability – ability to grasp abstract models and tear them apart. Academic background must include engineering training with courses in computer science fundamentals, computer organization, data structures, software design, programming fundamentals, and software engineering. In addition, one needs to be a great communicator – in terms of both written and verbal communication, to able to understand quality requirements, articulate testing approach, assist developers to grasp the issues, and create actionable reports. Software Testing requires team spirit, high level of integrity, attention to detail, passion for technology, and empathy for the end user.