views:

1119

answers:

7

I'm currently evaluating the MSF for CMMI process template under TFS for use on my development team, and I'm having trouble understanding the need for separate bug and change request work item types. I understand that it is beneficial to be able to differentiate between bugs (errors) and change requests (changing requirements) when generating reports. In our current system, however, we only have a single type of change request and just use a field to indicate whether it is a bug, requirement change, etc (this field can be used to build report queries). What are the benefits of having a separate workflow for bugs? I'm also confused by the fact that developers can submit work against a bug or a change request -- I thought the intended workflow was for bugs to generate change requests which are what the developer references when making changes.

A: 

A bug is something that is broken in a requirement which has already been approved for implementation.

A change request needs to go through a cycle in which the impact and effort has to be estimated for that change, and then it has to be approved for implementation before work on it can begin.

The two are fundamentally different under CMM.

Vaibhav
A: 

Is my assumption incorrect then that change requests should be generated from bugs? I'm confused because I don't think all bugs should be automatically approved for implementation -- they may be trivial and at least in our case will go through the same review process as a change request before being assigned to a developer.

Luke
+1  A: 

Generally, though I can't speak for CMM, change requests and bugs are handled and considered differently because they typically refer to different pieces of your application lifecycle.

A bug is a defect in your program implementation. For instance, if you design your program to be able to add two numbers and give the user the sum, a defect would be that it does not handle negative numbers correctly, and thus a bug.

A change request is when you have a design defect. For instance, you might have specifically said that your program should not handle negative numbers. A change request is then filed in order to redesign and thus reimplement that part. The design defect might not be intentional, but could easily be because you just didn't consider that part when you originally designed your program, or new cases that didn't exist at the time when the original design was created have been invented or discovered since.

In other words, a program might operate exactly as designed, but need to be changed. This is a change request.


Typically, fixing a bug is considered a much cheaper action than executing a change request, as the bug was never intended to be part of your program. The design, however, was.

And thus a different workflow might be necessary to handle the two different scenarios. For instance, you might have a different way of confirming and filing bugs than you have for change requests, which might require more work to lay out the consequences of the change.

Lasse V. Karlsen
A: 

@lassevk Again I take issue with the claim that fixing a bug is cheaper than implementing a change request. A change request could be as simple as "Change the home page background color" and a bug could be as complicated as "Server stopped responding after 300,000,000,000 pageviews". Both can be introduced at any point in the development of the product, and nothing can be assumed about the amount of work required to fix them. This is why I think they both need to be evaluated for priority using the same process -- a bug may affect so few users (or have easy enough workarounds) as to be not worth the time to fix it, and a change request may require so little work that it can be implemented trivially.

Luke
+4  A: 

@Luke

I don't disagree with you, but this difference is typically the explanation given for why there is two different processes available for handling the two types of issues.

I'd say that if the color of the home page was originally designed to be red, and for some reason it is blue, that's easily a quick fix and doesn't need to involve many people or man-hours to do the change. Just check out the file, change the color, check it back in and update the bug.

However, if the color of the home page was designed to be red, and is red, but someone thinks it needs to be blue, that is, to me anyway, a different type of change. For instance, have someone thought about the impact this might have on other parts of the page, like images and logos overlaying the blue background? Could there be borders of things that looks bad? Link underlining is blue, will that show up?

As an example, I am red/green color blind, changing the color of something is, for me, not something I take lightly. There are enough webpages on the web that gives me problems. Just to make a point that even the most trivial change can be nontrivial if you consider everything.

The actual end implementation change is probably much of the same, but to me a change request is a different beast, precisely because it needs to be thought about more to make sure it will work as expected.

A bug, however, is that someone said this is how we're going to do it and then someone did it differently.

A change request is more like but we need to consider this other thing as well... hmm....

There are exceptions of course, but let me take your examples apart.

If the server was designed to handle more than 300,000,000,000 pageviews, then yes, it is a bug that it doesn't. But designing a server to handle that many pageviews is more than just saying our server should handle 300,000,000,000 pageviews, it should contain a very detailed specification for how it can do that, right down to processing time guarantees and disk access average times. If the code is then implemented exactly as designed, and unable to perform as expected, then the question becomes: did we design it incorrectly or did we implement it incorrectly?.

I agree that in this case, wether it is to be considered a design flaw or a implementation flaw depends on the actual reason for why it fails to live up to expectations. For instance, if someone assumed disks were 100x times as fast as they actually are, and this is deemed to be the reason for why the server fails to perform as expected, I'd say this is a design bug, and someone needs to redesign. If the original requirement of that many pageviews is still to be held, a major redesign with more in-memory data and similar might have to be undertaken.

However, if someone has just failed to take into account how raid disks operate and how to correctly benefit from striped media, that's a bug and might not need that big of a change to fix.

Again, there will of course be exceptions.

In any case, the original difference I stated is the one I have found to be true in most cases.

Lasse V. Karlsen
A: 

@lassevk Thanks for the lengthy explanation! I think I get it now. I will probably still consolidate the two into a single work item type and use a flag to indicate what type of work item it is just because it will better match our existing process. The disposition team can key off of this flag to know whether they need to evaluate the effects of a change in requirements or not. I just don't think in the context of TFS work item tracking that we would really benefit from two different workflows and I'm trying to ease the transition.

Luke
+1  A: 

Keep in mind that a part of a Work Item Type definition for TFS is the definition of it's "Workflow" meaning the states the work item can be and the transitions between the states. This can be secured by security role.

So - generally speaking - a "Change Request" would be initiated and approved by someone relatively high up in an organization (someone with "Sponsorship" rights related to spending the resources to make a (possibly very large) change to the system. Ultimately this person would be the one to approve that the change was made successfully.

For a "Bug" however, ANY user of the application should be able to initiate a Bug.

At an organization I implemented TFS at, only Department Heads can be the originators of a "Change Request" - but "Bugs" were created from "Help Desk" tickets (not automated, just through process...)

fuzzbone