Contrary to what many programmers think, QA role is not to do the dirty work for them. QA’s role is to validate, independently, that the code actually works.
The reason I put the responsibility on the coder is simple. The coder is the one who writes the code, the one that understands it and the one that can change it. Why should anyone else be the owner ?
QA has a lot less options for proving the code works and reducing the risk than the developer, they can only test the functionality from a black box perspective.
The developer, on the other hand, has multiple options , beyond the ones already listed in part II.
- Rewrite the code in a more modular fashion so it is easier to have unit tests
- Move from c# to Python to make it easier to write mocks and do sub system testing
- Add logs, alerts and assertions so he knows that edge conditions are safely handled
- Refactor the code so User Interface validations and server validations use the same mechanism
- Add new code with a separate flag\object\screen so it has less chance to have regression on other functionality
- Shout at the product manager that the requirements are too complex and there is not way to implement them In SQL with proper testing
- Move from simple ASP.NET mode to MVC model so more parts of the UI can be tested separately
- Ask QA to help with extensive PRE-COMMIT manual testing as part of the development stage
- Ask QA to help with running the automatic testing on development branches
- Help the Automated QA team to make sure new features are tested during the development stage and not post deployment
The manager role is:
- Iterate over and over the concept of ownership, proof and responsibility
- Back the theory with resources – buy machines for testing, software for code checking etc
- For example, buying two servers for the clustering team so they can test their code actually runs on a cluster
- Help to manage trade-offs and real world considerations
- For example, which functionality is used a lot and which is hardly used
- Pay the “price” for making higher quality code
- For example, Pay $50,000 for a new automated testing project
- Avoid being dogmatic in the specific methodology
- For example, unit testing might not be effective in certain places and forcing everyone to do them will just create resentment
- Introduce and promote new technologies such as Virtualization and lab automation
- Help apply the right methods in the right context
To summarize, like any other professional, the developer is the one responsible for the quality of his or her work.Allowing them to push unproven code to customers is what gave us bad reputation as an industry.However, the best ones are able not just to code, but also to analyze the risk, check for validity ,rewrite and design to create bullet proof products.
And if you read so far, here is a reminder to a lovely 80′s song.