There are lots of materials available in internet to explain best practices in Software Testing.
Here I am writing only the very essential things for medium level projects based on my experience/view point.
- We should start our testing activities at beginning of Software development itself.
Understanding Scope/purpose of the project will help to judge the degree/level of testing required.
- Testers should go thro’ the requirements in detail without missing any points given by the client before writing test cases.
- The test cases should be updated immediately once the client gives new requirement or changes the requirements.
- The test case document should cover all the requirements even if some requirements are non-testable. These non-testable items should be marked as non-testable. Keeping traceability matrix document will helpful to achieve this.
- The Test case document should help to clearly identify hierarchy/arrangement of test cases. It should have clear approach to arrange test cases if many test cases exist with similar steps. It is not advisable to copy & paste the similar test cases many times, instead we can specify only the additional/different steps.
- Description of each test case should be written clearly after understanding the context/module of description. Steps should be written only after manually executing them. Expected results should not have any ambiguity. If required, Prerequisite/preconditions should be mentioned.
- Planning and creating test plan document is essential even for small short-term projects. The test plan document need not contain all the details, but it should contain at least very basic components such as scope, schedule, risks, environments, testers
- Planning of development/test/staging environments should be done clearly. And it is very important to move the code and maintain version of code in each environment without any ambiguity/confusion. Testers should know which version of code/data is available in each environment
- Test execution should be done carefully based on the test cases. It is very important to use appropriate test data. It is better to create different set of test data during test case creation itself. The test data should cover valid format, invalid format and boundary values.
Test result (pass/fail) should be clearly updated for each test case. It is good practice to mention Actual behavior if the test case fails.The test results should be communicated to the other parties (developers, business/client) daily even if all the test cases are not executed. In this case, we should add a note to indicate that the test execution is still in progress.The test execution summary document/mail should clearly mention date of execution, environment, test name and test result.
- In case, most of test cases are getting failed continuously, there is no meaning of continuing the execution. Execution should be resumed once after fixing the major issues.
- It will be nice if we highlight the testing status (pass, fail, yetToStart) in appropriate color. But anyway, just highlighting the test case with appropriate color without specifying status is not a good practice. Because while taking single color printout of the test report, it is difficult to see the status from the color.
- It is good practice to do some adhoc testing in addition to the test case execution.
- Clear/proper communication/co-ordination within the Testing team and also with other teams (developers, client/business) is very essential.
- The bug report should be prepared very clearly with all essential details, especially with the steps/testdata for reproducing the bug. The bug report should help the developers to reproduce the bug and to fix it.
- Doing re-test and small regression test is essential whenever a reported bug is fixed
- It is not good if we do all the testing manually, as manual testing will take more time/effort and it is difficult to manage, and also it not consistent or repeatable. So it is better to automate the test cases using test tools such as QTP (Quick Test professional). Even we can use simple shell scripts and vbscript to automate some part of the testing.