First of all, this may depend on the organization you live in and the tool you are using. Normally, your organization should define the glossary for your development process, and as part of that, the meaning of the different types of issue or work items.
We in our company use 3 different tools depending on the type of problem to tackle:
- Polarion for doing requirements engineering and the whole following workflow.
- JIRA for doing mostly issue tracking with a lots of possibilites to tune it.
- Trac for mostly developing projects with a more simple workflow.
The definitions we gave the different work item types (Polarion) or issues (JIRA) are:
- Defect: Denotes an error found in a test. Typical relation is child-of Test.
- Issue: Something that may be a defect, a change request or something different later. Has to be qualified first, and then will be solved by creating a defect or change request from it.
- Change request: Defines some change to application demanded by a customer, has normally implications to scope, budget, ... Will often be resolved by creating requirements from it, which will then be specified by use cases, ...
- Requirement: User, system or technical requirement, that will be implemented by a use case later.
- Use case: Specification of a functionality that the application has to fulfill.
- Task: Task of a person to do on some of the result oriented work items or issues.
We cluster all work item types in 2 sections:
- result oriented: the work item itself stands for the result. Types are: requirement, use case, component, test case, change request, ...
- process oriented: the work items stands for the action to do. Types are: defect, issue, task, ...
So to summarize it:
- Find your glossary that helps you.
- Define the scope you will address and include only work item types or issues that fall into that scope.
- Define a workflow for all of them, and keep that as simple as possible.
- Define the allowed relations between work item types, that help you track the solution.