views:

198

answers:

7

We are working on standardizing our Bugzilla application across all projects. The default installation has bugs grouped into Products which have Components and Versions.

We are united in our definitions of Product and Version but there is still some confusion/discussion/argument about what constitutes a Component.

How would you define a Component as far as it relates to classifying bugs in a project?

+1  A: 

I would define Component similar to referencing a branch of code like a project within Visual Studio which could be a class library, console application, windows application, or website/web application.

JB King
A: 

Anything that's a "helper" object, something that does something small to support the larger functionality of the application, and can be reused in other Products.

For example, an EmailSender class, or an ErrorLogger, etc.

Ricardo Villamil
I think you would have a hard time with classifying bugs by nailing it down to the individual class that is responsible. In reality, the person catching the bug will have little or no idea of the underlying class structure, and would have no idea what "component" to group the bug under.
James Van Huis
Good point, thanks!
Ricardo Villamil
@James: We always triage bugs, so that someone with domain-specific knowledge can file the bug under its proper component. Leaving it up to the users makes components almost meaningless (if your users are anything like ours)
Adam Bellaire
@Adam: We have the same type of triage here, but I guess my concern was more over the overall benefit of having metrics on what class a bug was generated from vs. maybe the same metric for a larger construct (package, etc). The offending class can always be referenced within the resolution section.
James Van Huis
A: 

Whatever it is you're most interested in breaking down your Products into for purposes of bug tracking. It's more important that the distinction is useful to you than it be "correct" according to some concept that's not specific to the problem of bug tracking.

To me, any part of the code for which you can change the implementation without breaking other parts could qualify as a component. Something you can definitively point to and say, "This bug is there, and nowhere else."

If your product is a giant spaghetti code ball, you might not get any benefit from components. If you've decoupled very well, and you have a very large project, you might have hundreds of things that could qualify as "components", and you'll probably have to semantically group them to prevent the distinction from being more trouble than it's worth.

EDIT: In response to a comment on another answer, this model works best if the person filing the bugs has the necessary knowledge of the problem to do the filing. We always review (triage) reported bugs and file them ourselves. If you're leaving component selection up to the users, this idea won't work very well for you.

Adam Bellaire
+1  A: 

A good definition that will serve your purpose.

Andrew Cowenhoven
A: 

Dr. A. Richard Newton from the University of Berkeley who teaches a course called "Component-Based SoftwareState-of-the-Art and Lessons Learned" defines a software component as

A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third parties

I dont think there is a better definition. So bug here could be at component level or at interface level i.e. composition level.

Perpetualcoder
+2  A: 

A component is a subdivision of a product and it provides a subset of the functionality of the product.

For example, if Stack Overflow is the product here are some potential components:

  • Questions
  • Tags
  • Badges
  • Profiles

A bit of glue logic should piece the components together to form the project.

ONODEVO
+3  A: 

For bug tracking purposes, I would use Component to represent high-level areas that different developers tend to handle. For me, Component [in bug tracking] == Area of Concern.

For example, for a fictional EventPlanner application, I would list my components as:

  • Calendar
  • User Interface
  • Printing

Note that this may be different than what I, as a developer, would typically consider a software component. For example, my EventPlanner app might have use Calendar API, but "User Interface" and "Printing" themselves are not software components.

David

related questions