How Do We Make Sure We Develop Great Software? - Part 5 software development
Quality Assurance and Software Testing
Quality assurance and software testing phase is critical for delivering
quality code to the users. To fully test software a four layered
sequential approach is required. The first level of testing is already
completed in the form of unit tests created by the developers. This
provides a baseline of system integrity. The second layer of testing is
test scripts derived directly from the requirement phase’s use cases.
Performance tests make up the third layer of testing known as load
tests. The last form of testing is performed by business subject matter
experts (SMEs) in the form of user acceptance testing for final
To understand unit tests please refer to the development and coding section within the document.
Test scripts are a set of instructions that represent actions that make
up a scenario as defined by typical system interactions of the users.
These high level scenarios are defined in the requirements phase. The
test scripts use the use case as a starting point and include addition
information such as pre-conditions, inputs, expected output and post
conditions. Pre-conditions must be true, before the test can be
attempted (e.g. in order to complete a billing report, the bill amounts
must already be computed). Inputs represent direct inputs from the
tester to complete the test (e.g. must enter name and address to
complete a request form). Expected output represents the feedback that
the user would expect after they complete the test (e.g. after clicking a
button to submit a form, a validation screen appears). Post conditions
represent information that must be true after the test has been
completed successfully (e.g. after I pay my bill online, my account must
be reduced by that amount).
Automating these types of tests is essential for long term productivity
of the QA testers. A couple of automated testing frameworks that are
helpful for Ruby on Rails projects are called Cucumber and RSpec. Please
review the sites directly for Cucumber and RSpec for more information.
Performance tests represent a way for the tester to understand how the
system will perform under load. Performance tests can capture response
times for a variety of different types of tests. The tester may want to
know how system response times are affected with an increased number of
users. In the requirements phase the BA should have identified the
average number of concurrent users and also service level agreements
(SLAs) of the responsiveness of the system. Performance tests can
programmatically test that the system meets those SLAs by simulating the
stipulated number of concurrent users on the system and timing the
responses. Another performance test may be responsiveness of a process
intensive operation. SLAs may dictate that reports must come back in
under a minute. Performance tests can validate these SLAs to ensure that
report generation responses are within agreed limits.
Load testing software can help automate a lot of these types of tests.
HP LoadRunner is one of many possible solutions. Please review here for
User Acceptance Testing
User acceptance testing is the final layer of testing. These users
represent business subject matter experts (SMEs) and can speak for the
business that the functional behavior of the system meets their
By using a layered approach the quality assurance testers can
systematically evaluate the application. Unit tests take care of
checking low level system functions. Test cases test for end-to-end
functionality represented in the use cases. Performance tests ensure the
system can perform within the required SLAs. User acceptance testing
gives final sign-off of functionality. Once all the testing is complete
the software is ready for the implementation phase.
Once the tollgate requirements have been satisfied and management sign-off is acquired the implementation phase may begin.