Not all defects are created equal – sometimes things are actually by design.? Sometimes the problem was a one-off type error that can’t be reproduced.? Sometimes the person reporting the problem simply gets it wrong.? For this reason, every project I have ever worked on has had some mechanism for rejecting defects.?
There are generally three possible reasons a defect is rejected.? The first is that the problem cannot be reproduced.? In this case, the rejection is done by either the testing staff (if defects are vetted before being assigned to a developer), or by the developer assigned to the defect.? A large number of non-reproducible defect reports is often a symptom of multi-threading issues.? Sometimes though, weird things just happen, and the effort required to protect against the 1 in a million chance of it happening again is too great to warrant attempting to fix the problem.?
The second reason is that the problem identified is actually correct behavior.? For these rejections, it usually requires a domain expert to make the appropriate judgement.? If a large number of rejections of this type are being seen, it usually indicates a usability error since users are not able to determine “correct” behavior.? Often rejections of this nature will spawn secondary defects or new requirements centered around improving the interface that caused the user to believe there was an error.
The final reason a defect might get rejected is because the defect is no longer relevant.? It has been Overcome By Events (OBE).? This rejection is a favorite of developers, and is usually cited when a consistently reproducible item suddenly stops being reproducible.? This is related to the first type of rejection, but in this case the defect is not as transient as in the first case.? In this case, the defect is a known problem that ceases to occur.? This can happen for a variety of reasons, especially in tightly coupled code.? A large number of these types of rejections is often a sign that development may be getting out of control and that unrelated changes are affecting code in other places.?
Sometimes developers like to “pad their stats” by marking items in cases 1 and 2 as fixed instead of rejecting them.? They like to have these problems show up as being fixed instead of rejected under the belief that since the problem no longer occurs, it was “fixed” by something.? I don’t like this method because it obscures actual changes being made to the code base.? This artificially inflates the number of changes that a given version appears to have had made to it.? Conceivably, if one were unscrupulous, you could create an entire release without doing any work simply by saving all these items in the work queue and then marking them as fixed all at once, giving the appearance of a large number of improvements when the code did not change at all.
However, I am assuming that rejected defects are subject to some sort of review process to ensure the rejections are appropriate.? Generally, this falls to either the testers or the customer, and they simply need to validate the explanation given for the rejection.? If the problem can be reproduced, or if there is continued disagreement, the defect should be re-opened and sent back for further review.? Otherwise, rejection becomes the resting place for all the unpopular changes and requests.