We’re very excited to announce Melissa Avila as the winner of the QASymphony Software Testing Scholarship! Melissa is a junior at Cornell University studying Information Sciences. On campus, she is involved with Women in Computing At Cornell (WICC), Rewriting the Code (RTC), and the Association of Computer Science Undergraduates (ACSU). Her favorite course has been INFO 3300, Data Driven Web Applications, in which she learned to use the JS D3 library to make interactive data visualizations, which you can view here. This semester, she is most looking forward to classes in Game Design and Rapid Prototyping.
We think Melissa’s entry did a great job of capturing why software quality is important, and why it can be so difficult to achieve. You can read her winning essay below.
Why Is Software Testing Important?
by Melissa Avila
Asking why software testing is important is like asking why anyone should bother proofreading. Sure, straight to production is fast and easy, but mistakes happen. As a software developer, I know the feeling of just wanting to deliver a piece of software after coding for hours and debugging per days (finding that missing semicolon alone takes several days), but I’ve learned that just because my code “looks” like it works, that doesn’t mean that it won’t break as soon as it leaves my machine. Software testing is how developers verify that their code is viable in ALL use conditions, including different operating systems, environments with different processing space available, on a customer computer with hundreds of windows open, etc. Shipping a piece of software without testing it in multiple environments is a definite recipe for fatal errors, mysterious bugs, and very unhappy clients (all the bane of a software developer’s existence).
A major downfall of software developers is believing that all their users will use the software as it’s “intended.” However, George Carlin once said, “Think of how stupid the average person is, and realize half of them are stupider than that.” Thus, the purpose of software testing is not just to ensure that a piece of code works like it was designed to, but that the software can withstand ALL the junk data, useless processes, infinite loops, and just general abuse that users are likely to put the code through. In the testing process, it is the tester’s goal to find ways of breaking the software because they want to find (and then fix) a bug before their client does. For this reason validation, beta testing, stress testing, integration testing, performance testing, and many more different types of software testing must all be used to find all possible ways that software usage can lead to failure.
But while my lack of proofreading will really only hurt myself, a lack of extensive and rigorous software testing can often lead to devastating results. The explosion of the Ariane 5 rocket was caused by a simple data conversion error, causing a of loss of guidance and altitude information, and ultimately the explosion of more than $7 billion and 10 years worth of development. Had edge case and stress testing been performed, it’s possible the whole fiasco could have been avoided. Or for a more well-known example, if Apple Maps had live tested their app more thoroughly, then we wouldn’t have the fantastic jokes about Apple Maps guiding people to drive into local lakes (albeit the app has vastly improved since 2014). Depending on where a piece of software is used, a lack of comprehensive testing can cost lives, money, and A LOT of time. It’s better to test for the least probable conditions than to encounter such a condition and have a system failure in a critical moment. From a purely business perspective, if an untested product runs into bugs with the client, that reflects poorly on the developers, the designers, and the entire company. Succinctly, bad quality software is bad for business.
I have a lot of respect for quality assurance testers. It is their job to test for cases that an average human being would never even think to consider. Software testers are faced with the burden of having to put themselves in EVERYONE’S shoes and looking outside the bounds of the design specifications. Without software testing, using simply mundane software would be rife with frustration and IT support!