I work with an IT software development organization, so most of my posts are specific to software development projects. During the testing phase, we typically experience the following problems:
1. We expend approx 15% to 20% of the development effort in the bug-fixing phase.
2. Our team discovers a lot of missing functionality during the testing phase.
3. Quality assurance (QA) and development teams have different mindsets, so they understand the same feature in different ways.
4. Test cases written by the QA are a conversion of a software requirements specifications document into an excel format.
5. During and after the coding phase, the developer doesn't often test the application himself and instead leaves everything for QA. He tends to believe bug identification is QA's task and that the developer should only be responsible for fixing bugs.
I think the software testing cycle works on the 90:10 rule: Ninety percent of the project takes 10% of the allocated time, while the remaining 10% takes 90% of the time. After expending a lot thought on this process, we came up with some solutions that may reduce the testing and bug fixing cycle:
1. Let the QA and development teams both review the requirements and get necessary clarifications from the client.
2. Ask the developer to give a presentation of his project understanding to QA and his module lead.
3. Have QA prepare the test cases.
4. Ensure test cases cover the functionality as well as the user cases and scenarios
5. Have the developer review and log defects, too.
6. After the completion of the coding phase, ask the developer to run high priority test cases prepared by QA.
7. The developer should submit the test log to QA.
8. QA shall start the testing.
9. Each discovered bug should have a corresponding test case ID. If the test case doesn't exist for the bug, then QA should add a new test case for it. This will ensure the test cases have covered all the use cases.
10. In the test log for each failed test case, enter the bug ID. This will ensure all bugs are raised and tracked to closure.
11. Perform the Root Cause Analysis (RCA) for each bug and improve the coding process.
12. Track the bugs raised by QA versus the bugs raised in user acceptance testing or bugs raised in production.
13. Test cases should be data-oriented, and QA should be trained enough to write simple SQL (Structured Query Language) queries.
14. The test log should show the number of rounds executed with the number of test cases that have failed, passed or have not been executed for each round of testing.
15. Track the actual effort spent in the testing and bug fixing phases to better plan for the next module or project.