What is Unique About Quality Assurance for Software?
Imagine a car being put together on an assembly line. The frame is inspected before assembling the electronics, interior, and body panels. After doing each of these tasks, there is no reason to inspect the frame again; it has already passed inspection. Software differs from this in the sense that dependencies are not as concrete and components are subject to change. It's ridiculous to imagine an assembly line where, after the entire vehicle is assembled, the frame must undergo a large adjustment. Doing this could potentially impact everything that depends on the frame and may even require undoing a large amount of the assembly work. In software, this type of change is just a fact of life. Unlike a vehicle, which can be replaced every few years, software is continuously maintained. Well-known platforms like Facebook and Instagram don't rewrite everything when requirements change; they make adjustments. Making changes to software is practically guaranteed to break something, and that is ok. Seeing where and how things go wrong is an important part of the design process. The most worrisome aspect of continual development and maintenance is introducing bugs that go unnoticed. Finding bugs introduced by updates can be a headache for developers and users alike, but automated testing can lighten the load on developers and help maintain a consistent experience for users.
How is Testing Done?
Part of learning the architecture of a year-long project that I joined here at Rapid Development Group was going through a long list of functionalities that had been implemented and making sure that they still worked. I stepped through the software as if I were a user and performed all the actions permitted for each role. Testing like this is intuitive but can be prohibitively expensive. It's impractical to have a human perform the same actions over and over again with each software release. Rather than paying an intern or professional software tester, various services provide test automation that allows features to be tested quickly, automatically, and asynchronously. This means that developers can implement features and tests simultaneously, and the added functionality can be verified by running an automated test. For web development, testing usually involves recording a sequence of actions and comparing the visual display to a screenshot that represents the expected behavior. Some services, such as Rainforest QA, allow the user to create tests like this without writing any code. These tests can then be scheduled to run when it is most convenient, and the results are available to the development team for inspection. Testing in this way means that developers are presented with the test case that failed, as well as all the actions leading up to the failure.
Is Testing Right for my Project?
Software testing, like any tool, has a time and a place; it’s not realistic for every project and every price point. For large companies like Facebook, testing is imperative. Facebook offers a long list of functionalities to millions of users. Their business depends on the satisfaction of those users; any problems with their software mean losing revenue. In fact, quality assurance and testing are so important to Facebook that when they refactored the chat functionality on their platform, they also diverted resources to develop a brand new testing service. This service, called Jest, was open-sourced two years later. On the flip side, a simple landing page for a small business may not require testing. Such a platform would not be subject to frequent changes and therefore would not need frequent testing. The primary benefit of automated software testing is the time saved by not stepping through software in search of bugs or failures. Therefore, the more complicated a piece of software is and the longer it will be in development, the more beneficial it is for automated testing during development.