Software Testing is the investigation and evaluation of an application in terms of its compliance with the specified requirements, proper work and quality. While the number of of an application users increases, the challenge in its testing grows. The goal is to identify and fix bugs at an early stage, before the developed components are implemented.
Testing is not the final step after development, but an integral part of ongoing Software Life Cycle. Time and cost investment in it is crucial, because non-operating apps turn users away. In order to encourage test-driven development and have an application virtually free of bugs, here are some smart software testing tips to follow, which I have taken from my own QA experience. Above all, every software tester should be eager to detect the bugs, which are most difficult to come across, and interface issues misleading the end-users. Finding those subtle things is the most challenging and satisfying for the smart testers.
- Prepare a good plan. Completely understand the test requirements and quality criteria, no matter how long it takes. Identify all dependencies of the module to other modules. Define testing scope, objectives, schedule, responsible engineers and all details. It is better to have issue tracking system (e.g. Jira, Redmine) in place. Create a sufficient input data before tests, test case conditions and database records. Maintain a list of sanity test cases that can be quickly run and give understanding of the application health.
- Set priorities. Dedicate more time to important modules. Security is nearly always the first place. The application should comply with company policy terms, maintain high privacy standard; user data should be protected. Always analyze, how important a certain bug is on application and business levels ‒ define its severity and priority before reporting. Remember, that you will often face challenging timelines, preventing you from luxury going through all test cases. If you seem to stuck on a certain item, quit it and move to the next one.
- Verify compatibility in various environments. Single browser and single operating system are not sufficient. Good software is compatible with the latest available versions. Nevertheless, checking it in older browser versions confirms your respect to your long-time customers, who, for whatever reason, are not abreast of the latest in technology. New technologies, such as cloud computing, HTML5, CSS3, responsive design, should also be considered. The rich multimedia related applications require testing on various players. Checking application’s behavior in a new environment can bring ideas for improvements. Keep the plug-ins and extensions in mind.
- Do not neglect regression testing. Make sure that the changes made have not caused any faults in the existing functionality, as if you are testing each component for the first time. For the developer, modifications may seem minor and unimportant, but the tester has to look for unintentional errors. Grouping similar test cases makes it easy to incorporate regression as part of daily cycle. Keep track of regression bugs on release-to release basis and make regular cleanup of regression test suite. In case of time constraint, informed project manager in advance about inability to cover risky areas.
- Performance is a “must have” feature. No matter how rich is your product functionally, if it does not meet the customer’s’ performance expectations will be self-defeating. Load testing simulates behavior of a large number of people to determine how the software responds. Stress testing shows how it reacts and performs when certain number of users are executing a defined sequence (workload). Keep pushing to failure to see where the system fails. High dependability on HTML5 and Flash may complicate load testing.
- Reasonably choose and apply automation tools. Automating repeated tests is common nowadays. Many web-based automation testing tools are available for free (e.g. Selenium, Jenkins, Gatling) and with company support. Free tools have limitations; it is also more safe to use paid versions. In multi-user load tests automation is irreplaceable, while for accessibility it is inapplicable. For regularly updated software with minor and few unexpected changes, using an automation tool is simple, but it may be painful to modify the script for every single change.
- Test things the application does not do. Use the program like the end user. Ask yourself “What might I expect if I were new to this software?” recommends well known QA and blogger Simon Hill. Apart from running functionalities, perform some “monkey tests”, as if you are attempting to break an application: enter wrong values, have multiple tabs open, change consequences of test steps etc. Potential vulnerabilities which may reveal themselves, once you diverge from a typical software testing format. If your application encompasses customers worldwide, opt for crowdsourcing to engage testers globally. Thus you ensure that your application has no location-specific issues.
- Good communication with team and stakeholders is a key to success. When both developers and testers are aware of the current status of the test, efforts of the entire team reduce. Communication allows to clearly assign tasks, compare results, share efficient solutions for encountered problems, focus on big “bottlenecks”. Bugs can be addressed, reconstructed and corrected only with good reporting. Communication with the customer is not less important. E.g., when new specifications come, but are not communicated duly, this may cause major delays and expenses. When you are tired and cannot sort out what is wrong, get your colleague onboard, e.g. to attack the software, or to view it from new perspective.
- Try Google Analytics for your web-application. This tool is unfairly overlooked, however, the data it provides is often invaluable in quality assurance. It shows the complete flow of customers, identifies, which operation systems and browsers are popular among them, which module is the mostly used and how long do they stick on the certain pages. This information will definitely help you set the right priorities in the next iteration.
- Increase the coverage but understand when to stop. According to ISO 9126, there are six software quality characteristics: functionality, reliability, usability, efficiency, maintainability and portability. Each of them is equally important! However, it is virtually not realistic to cover everything. You need to divide the software into sections, create individual tests for them, break them into sets and subsets. Thus you will avoid incorporating all assumptions into a single scenario. In theory, testing is a never-ending process; therefore, the task of QA-manager can never get completed. Severe budget and timeline constraints accompany the overall testing cycle. 100% test coverage is impossible, but your aim is to come as close as you can.
Software testing is creative and challenging work. Whether functional, load, usability or other type of testing should comprehensively cover user’s aspects, adhere to guidelines and strategies. Good code and bug fixes take time, but failing software is ultimately much more expensive. These are few tips that I believe make software quality control comprehensive.