Having development and QA go their separate ways in order to interpret the requirement can create a lot of waste in the form of repetitive requirement clarification (Relearning).
The two interpretations of the requirements are then matched up when the code is tested. Any misinterpretations can cause delays or may be missed all together. A dysfunctional relationship can develop between development and QA by ‘completing’ dev tasks with known bugs with the expectation that an opportunity to fix those bugs will be granted in the future. These bugs are much more costly if we wait for QA to find them, and even more costly if they slip by QA.
An agile practice is to first agree on the acceptance criteria before test and before development. These failing tests are what drive development by providing a clear objective: make the test pass. This also limits the amount of extra-features inserted into development since there is no test that requires it.
Acceptance Criteria
For developers, it is a ‘to-do’ list
For customers, it is an expectation list
For testers, it is the tests
For project managers, it is their agreements with developers that a task is complete
Acceptance Tests
For all features, think about S.A.F.E scenarios when writing acceptance tests:
Success: What needs to happen to ensure success of the feature?
Advance: What needs to happen in order to move the feature along toward success?
Fail: What predictable scenarios may happen that are adverse to the user’s goal?
Error: What errors may happen based on user input or any other factors that are out of the control of the system?
Role of Agile QA:
- Home
- Help define stories
- Ensure stories are testable
- Add stories related to non-functional requirements ( usability, performance etc)
- Organize non-functional testing
- Help define acceptance criteria for stories before they are completed
- Verify the completion of stories as they are completed
- Encourage and/or help developers write good unit tests
- Increase code coverage by adding more automated tests
- Perform exploratory testing on early builds