向积压工作 (backlog) 或任务板添加 Bug

一些团队喜欢将 Bug 作为积压工作 (backlog) 项(如用户情景或要求)跟踪。 其他业务流程可能要求跟踪积压工作 (backlog) 或任务板上的其他工作项类型 (WIT)。

如果你使用的是 Scrum 项目,那么你的积压工作 (backlog) 中已经显示 Bug。 但是,如果你的团队项目是使用其他过程模板(如 Agile 或 CMMI)创建的,则 Bug 不会显示在积压工作 (backlog) 或任务板上。

要添加 Bug 或其他 WIT,你可以配置团队设置或自定义团队项目以支持以下选项:

部署

选项

Visual Studio Online

  • 选项 A:允许团队选择跟踪积压工作 (backlog) 上的 Bug。

已安装 TFS 2013.4 更新的本地部署

  • 选项 A:允许团队选择跟踪积压工作 (backlog) 上的 Bug

  • 选项 B:所有团队跟踪积压工作 (backlog) 上的 Bug 或其他 WIT

  • 选项 C:所有团队跟踪任务板上的 Bug 或其他 WIT

未安装 TFS 2013.4 更新的本地部署

  • 选项 B:所有团队跟踪积压工作 (backlog) 上的 Bug 或其他 WIT

  • 选项 C:所有团队跟踪任务板上的 Bug 或其他 WIT

如果你在本地 TFS 上工作,则可以对团队项目进行自定义,以便让 Bug 或其他 WIT 在积压工作 (backlog) 或项目板上显示,而不会同时在两者中显示

如果你要对 TFS 2012 中定义的团队项目进行更改,请查看本主题的 Visual Studio 2012 版本

选项 A:允许团队选择跟踪积压工作 (backlog) 上的 Bug(Visual Studio Online 或 TFS 2013.4)

每个团队均可选择跟踪积压工作 (backlog) 上的 Bug。 如果要连接到本地 TFS,则其必须已升级到 TFS 2013.4。 (请参阅 Microsoft Visual Studio 2013 Update 4

  1. 如果你不是团队管理员,则添加为管理员

  2. 在团队管理页中打开“设置”,然后选中复选框以跟踪 Bug。

    团队设置页面,跟踪积压工作上的 Bug

    如果未找到该选项,则需更新团队项目的过程配置。

  3. 要查看更改,请打开并刷新团队积压工作 (backlog) 页。

更新过程配置以支持跟踪积压工作 (backlog) 上的 Bug(本地 TFS)

如果团队设置页上未启用跟踪积压工作 (backlog) 上的 Bug 选项,请为团队项目验证或更新以下 XML 定义文件。 你需要是项目管理员组的成员才能更新这些对象。

  • 类别:要求类别仅应包含与积压工作 (backlog) 项相关联的 WIT。 Bug 类别仅应包含与 Bug 相关联的 WIT。 具体而言,要求类别不得包含任何 Bug 项。

    例如,以下定义是正确的:

    <CATEGORY name="Bug Category" refname="Microsoft.BugCategory">
        <DEFAULTWORKITEMTYPE name="Bug" />
      </CATEGORY>
      <CATEGORY name="Requirement Category" refname="Microsoft.RequirementCategory">
        <DEFAULTWORKITEMTYPE name="Product Backlog Item" />
      </CATEGORY>
    

    而且,这些定义错误是因为要求类别中包含 Bug WIT:

    <CATEGORY name="Bug Category" refname="Microsoft.BugCategory">
        <DEFAULTWORKITEMTYPE name="Bug" />
      </CATEGORY>
      <CATEGORY name="Requirement Category" refname="Microsoft.RequirementCategory">
        <DEFAULTWORKITEMTYPE name="Product Backlog Item" />
        <WORKITEMTYPE name="Bug" />
      </CATEGORY>
    

    若要更新类别,请参阅导入和导出类别 [witadmin]

  • ProcessConfiguration:其中包含BugWorkItems Bug 类别中定义的元素并将 Bug 工作流状态映射到元状态。 例如:

    <BugWorkItems category="Microsoft.BugCategory" pluralName="Bugs" singularName="Bug">
        <States>
          <State value="Active" type="InProgress" />
          <State value="Resolved" type="Resolved" />
          <State value="Closed" type="Complete" />
        </States>
    </BugWorkItems>
    

    另外,RequirementWorkItems 和 BugWorkItems 下的元状态映射必须一致。 例如,不能将 Active 在其中一项下映射到 Proposed,而在另外一项中却映射到InProgress。

    若要更新 ProcessConfiguration,请参阅导入和导出过程配置 [witadmin]

  • WIT 定义:Bug 类别中包含的 WIT 必须定义以下字段:

    • 用于跟踪工作量的字段(ProcessConfiguration 文件中的 type=Effort),例如,情景点 (Microsoft.VSTS.Scheduling.StoryPoints) 或大小 (Microsoft.VSTS.Scheduling.Size) 字段(基于是否采用 Agile 或 CMMI 过程模板创建团队项目)。

    • 用于跟踪积压工作 (backlog) 优先级的字段(ProcessConfiguration 文件中的type=Order),例如,堆栈级别 (Microsoft.VSTS.Common.StackRank)。

    • 对于基于 MSF for CMMI 的团队项目,则是要求类型 (Microsoft.VSTS.CMMI.RequirementType) 字段,因为其包含快速添加面板中用于进行过程配置。

若要更新 WIT 定义,请参阅导入、导出和管理工作项类型 [witadmin]

验证或更新看板列映射

  1. 打开产品积压工作 (backlog) 面板页(看板)。

    如果看到列配置无效的消息,则需要调整列映射。

    错误消息指示需要自定义列

  2. 打开自定义列并为已定义的每一列映射 Bug 工作流状态。

    例如,如下所示,映射每一列:

    自定义看板的列

选项 B:所有团队跟踪积压工作 (backlog) 上的 Bug 或其他 WIT

你添加到要求类别的 WIT 将显示在积压工作 (backlog) 页上。 对于要显示在用户情景 (Agile) 或要求 (CMMI) 积压工作 (backlog) 页上的 Bug,请对本地 TFS 团队项目进行以下修改:

  1. 将用于估计工作量的字段添加到 Bug 或其他 WIT 定义:情景点 (Agile) 或大小 (CMMI)。

  2. 将 Bug 或其他 WIT 添加到要求类别。

  3. 验证过程配置中的元状态映射。

下面是为基于 MSF for Agile 过程模板的团队项目添加 Bug WIT 的方式。

添加“情景点”字段

  1. 导出 Bug WIT 定义。

    witadmin exportwitd /collection:" CollectionURL" /p:MyProject /n:bug /f:DirectoryPath/bug.xml
    
  2. 添加“情景点”字段。

    <FIELDS>
    . . . .
       <FIELD name="Story Points" refname="Microsoft.VSTS.Scheduling.StoryPoints" type="Double" reportable="measure" formula="sum">
          <HELPTEXT>The size of work estimated for implementing the bug.</HELPTEXT>
       </FIELD>
    
    
    
    . . . .
    </FIELDS>
    

    对于基于 MSF for CMMI 的团队项目,添加“大小”和“要求类型”。

    <FIELD name="Size" refname="Microsoft.VSTS.Scheduling.Size" type="Double" reportable="measure" formula="sum" >
       <HELPTEXT>The size of work estimated for implementing this requirement</HELPTEXT>
    </FIELD>
    <FIELD name="Requirement Type" refname="Microsoft.VSTS.CMMI.RequirementType" type="String" reportable="dimension">
       <REQUIRED />
       <ALLOWEDVALUES>
          <LISTITEM value="Scenario" />
          <LISTITEM value="Quality of Service" />
          <LISTITEM value="Functional" />
          <LISTITEM value="Operational" />
          <LISTITEM value="Interface" />
          <LISTITEM value="Security" />
          <LISTITEM value="Safety" />
          <LISTITEM value="Business Objective" />
          <LISTITEM value="Feature" />
       </ALLOWEDVALUES>
       <DEFAULT from="value" value="Functional" />
    </FIELD>
    
  3. 向窗体布局添加“情景点”。

    <FORM>
    . . . 
       <Column PercentWidth="33">
          <Group Label="Planning">
          <Column PercentWidth="100">
          <Control FieldName="Microsoft.VSTS.Scheduling.StoryPoints" Type="FieldControl" Label="Story Points" LabelPosition="Left" />
           <Control FieldName="Microsoft.VSTS.Common.StackRank" Type="FieldControl" Label="Stack Rank" LabelPosition="Left" NumberFormat="DecimalNumbers" MaxLength="10" EmptyText="&lt;None&gt;" />
           <Control FieldName="Microsoft.VSTS.Common.Priority" Type="FieldControl" Label="Priority" LabelPosition="Left" />
           <Control FieldName="Microsoft.VSTS.Common.Severity" Type="FieldControl" Label="Severity" LabelPosition="Left" />          
           </Column>               
      </Group>
    
       </Column>
    . . . 
    </FORM>
    

    对于基于 CMMI 的团队项目,向窗体部分“大小”和“要求类型”。

    <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.Size" Label="Size" LabelPosition="Left" />
    <Control Type="FieldControl" FieldName="Microsoft.VSTS.CMMI.RequirementType" Label="Type" LabelPosition="Left" />
    
  4. 导入更新后的 Bug 定义。

    witadmin importwitd /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/bug.xml"
    

将 Bug WIT 添加到要求类别。

  1. 导出类别定义。 如果没有 TFS 管理权限,则获取这些权限。

    witadmin exportcategories /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/categories.xml"
    
  2. 将 Bug 工作项类型添加到要求类别。

    <CATEGORY refname="Microsoft.RequirementCategory" name="Requirement Category">
        <DEFAULTWORKITEMTYPE name="User Story" />
        <WORKITEMTYPE name="Bug" />
    </CATEGORY>
    
  3. 导入类别文件。

    witadmin importcategories /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/categories.xml"
    

验证过程配置中的元状态映射

  1. 导出过程配置定义。

    witadmin exportprocessconfig /collection:"CollectionURL" /p:MyProject /f: "DirectoryPath/ProcessConfiguration.xml"
    
  2. 验证“已解决”状态是否已在 RequirementBacklog 部分中定义。

    <RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="User Story">
        <States>
          <State value="New" type="Proposed" />
          <State value="Active" type="InProgress" />
          <State value="Resolved" type="InProgress" />
          <State value="Closed" type="Complete" />
        </States>. . . 
    
      </RequirementBacklog>
    

    如果你已自定义 Bug 来添加其他状态,则为已添加的每个状态添加映射。 请始终将向前转换内的最后一个状态映射到 type="Complete"。

  3. 导入过程配置。

    witadmin importprocessconfig /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/ProcessConfiguration.xml"
    

确认可以将 Bug 添加到产品积压工作 (backlog)

  • 打开产品积压工作 (backlog) 页或刷新该页(如果已打开)。

    你应该会看到工作项**“类型”**的下拉菜单。

    添加了 Bug 工作项类型的已更新面板

自定义看板以将 Bug 状态映射到泳道

  1. 打开产品积压工作 (backlog) 面板页(看板)。

    如果你刚添加了 Bug 工作项类型或任何其他工作项类型,你将看到一条消息,指示列配置无效。

    错误消息指示需要自定义列

  2. 打开自定义列并为已定义的每一列映射 Bug 工作流状态。

    例如,如下所示,映射每一列:

    为每一列映射 Bug 工作流状态

选项 C:所有团队跟踪任务板上的 Bug 或其他 WIT

你添加到任务类别的 WIT 将显示在任务板和迭代积压工作 (backlog) 页上。 对于显示在任务板上的 Bug 或任务,必须将其链接到父产品积压工作 (backlog) 项 (Scrum)、用户情景 (Agile) 或要求 (CMMI)。

对于本地 TFS,请进行以下修改:

  1. 向 Bug WIT 定义添加必填字段。

  2. 将 Bug WIT 添加到任务类别。

  3. 将所需元状态映射添加到过程配置。

下面是为基于 MSF for Agile 过程模板的团队项目执行此操作的方式。

添加必填字段

  1. 如果你没有团队项目的管理权限,请通过添加为管理员获取这些权限

  2. 打开已安装 Visual Studio 或团队资源管理器的命令提示符窗口,然后输入:

    cd %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE
    

    在 64 位版本的 Windows 上,将 %programfiles% 替换为 %programfiles(x86)%。 你可以免费下载团队资源管理器

  3. 导出 Bug 工作项类型定义。

    witadmin exportwitd /collection:"CollectionURL" /p:MyProject  /n:bug /f: "DirectoryPath/bug.xml"
    

    CollectionURL 的一个示例是“http://MyServer:8080/tfs/TeamProjectCollectionName”。

  4. 添加活动字段。 如果你不添加,配置将无效。 或者,也可以添加计划字段,以便跟踪剩余和已完成的工作。 Microsoft.VSTS.Scheduling.XXX 字段在现成报表中使用,但不由敏捷计划工具使用。 如果团队不使用这些字段,则不必添加它们。

    <FIELDS>
    . . . 
       <FIELD name="Activity" refname="Microsoft.VSTS.Common.Activity" type="String" reportable="dimension">
          <HELPTEXT>Type of work involved</HELPTEXT>
             <SUGGESTEDVALUES>
                <LISTITEM value="Development"/>
                <LISTITEM value="Testing"/>
                <LISTITEM value="Requirements"/>
                <LISTITEM value="Design"/>
                <LISTITEM value="Deployment"/>
                <LISTITEM value="Documentation"/>
             </SUGGESTEDVALUES>
       </FIELD>
       <FIELD name="Remaining Work" refname="Microsoft.VSTS.Scheduling.RemainingWork" type="Double" reportable="measure" formula="sum">
          <HELPTEXT>An estimate of the number of units of work remaining to complete this task</HELPTEXT>
       </FIELD>
       <FIELD name="Original Estimate" refname="Microsoft.VSTS.Scheduling.OriginalEstimate" type="Double" reportable="measure" formula="sum">
          <HELPTEXT>Initial value for Remaining Work - set once, when work begins</HELPTEXT>
       </FIELD>
       <FIELD name="Completed Work" refname="Microsoft.VSTS.Scheduling.CompletedWork" type="Double" reportable="measure" formula="sum">
          <HELPTEXT>The number of units of work that have been spent on this task</HELPTEXT>
       </FIELD>
       <FIELD name="Start Date" refname="Microsoft.VSTS.Scheduling.StartDate" type="DateTime" reportable="dimension">
          <HELPTEXT>The date to start the task</HELPTEXT>
       </FIELD>
       <FIELD name="Finish Date" refname="Microsoft.VSTS.Scheduling.FinishDate" type="DateTime" reportable="dimension">
          <HELPTEXT>The date to finish the task</HELPTEXT>
       </FIELD>
    . . . 
    </FIELDS>
    

    对于基于 MSF for CMMI 的团队项目,你应该添加“专业”和计划字段。

    <FIELD name="Discipline" refname="Microsoft.VSTS.Common.Discipline" type="String" reportable="dimension">
            <ALLOWEDVALUES>
              <LISTITEM value="Analysis" />
              <LISTITEM value="User Experience" />
              <LISTITEM value="User Education" />
              <LISTITEM value="Development" />
              <LISTITEM value="Test" />
            </ALLOWEDVALUES>
            <HELPTEXT>The discipline to which the task belongs</HELPTEXT>
          </FIELD>
    
  5. 将“活动”和计划字段添加到工作项窗体。 只需复制在任务工作项类型中定义的 Groups 并替换已存在的 Groups。

    <FORM>
    . . . 
          <Group Margin="(10,0,0,0)">
              <Column PercentWidth="30">
                <Group Label="Status">
                  <Column PercentWidth="100">
                    <Control FieldName="System.AssignedTo" EmptyText="&lt;No one&gt;" Type="FieldControl" Label="Assi&amp;gned To" LabelPosition="Left" />
                    <Control FieldName="System.State" Type="FieldControl" Label="Stat&amp;e" LabelPosition="Left" />
                    <Control FieldName="System.Reason" Type="FieldControl" Label="Reason" LabelPosition="Left" />
                  </Column>
                </Group>
              </Column>
              <Column PercentWidth="20">
                <Group Label="Planning">
                  <Column PercentWidth="100">
                    <Control FieldName="Microsoft.VSTS.Common.StackRank" Type="FieldControl" Label="Stack Rank" LabelPosition="Left" NumberFormat="DecimalNumbers" MaxLength="10" EmptyText="&lt;None&gt;" />
                    <Control FieldName="Microsoft.VSTS.Common.Priority" Type="FieldControl" Label="Priority" LabelPosition="Left" />
                    <Control FieldName="Microsoft.VSTS.Common.Activity" Type="FieldControl" Label="Activity" LabelPosition="Left" EmptyText="&lt;None&gt;" />
                  </Column>
                </Group>
              </Column>
              <Column PercentWidth="30">
                <Group Label="Classification">
                  <Column PercentWidth="100">
                    <Control FieldName="System.AreaPath" Type="WorkItemClassificationControl" Label="&amp;Area" LabelPosition="Left" />
                    <Control FieldName="System.IterationPath" Type="WorkItemClassificationControl" Label="Ite&amp;ration" LabelPosition="Left" />
                  </Column>
                </Group>
              </Column>
              <Column PercentWidth="20">
                <Group Label="Effort (Hours)">
                  <Column PercentWidth="100">
                    <Control FieldName="Microsoft.VSTS.Scheduling.OriginalEstimate" Type="FieldControl" Label="Original Estimate" LabelPosition="Left" />
                    <Control FieldName="Microsoft.VSTS.Scheduling.RemainingWork" Type="FieldControl" Label="Remaining" LabelPosition="Left" />
                    <Control FieldName="Microsoft.VSTS.Scheduling.CompletedWork" Type="FieldControl" Label="Completed" LabelPosition="Left" />
                  </Column>
                </Group>
              </Column>
            </Group>
    
    . . . 
    </FORM>
    
  6. 导入更新后的 Bug 定义。

    witadmin importwitd /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/bug.xml"
    

将 Bug WIT 添加到任务类别

  1. 导出类别定义。

    witadmin exportcategories /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/categories.xml"
    
  2. 将 Bug 添加到任务类别。

    <CATEGORY refname="Microsoft.TaskCategory" name="Task Category">
        <DEFAULTWORKITEMTYPE name="Task" />
        <WORKITEMTYPE name="Bug" />
    </CATEGORY>
    

    备注

    可以让 Bug 工作项类型同时属于 Bug 类别和任务类别,这不会有问题。

  3. 导入类别文件。

    witadmin importcategories /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/categories.xml"
    

将元状态映射添加到过程配置

  1. 导出过程配置定义。

    witadmin exportprocessconfig /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/ProcessConfiguration.xml"
    
  2. 将“已解决”状态的元状态映射添加到 TaskBacklog 部分。

    <TaskBacklog category="Microsoft.TaskCategory" pluralName="Tasks" singularName="Task">
        <States>
          <State value="New" type="Proposed" />
          <State value="Active" type="InProgress" />
          <State value="Resolved" type="InProgress" />
          <State value="Closed" type="Complete" />
        </States>
    . . . 
    
      </TaskBacklog>
    

    如果你已自定义 Bug 来添加其他状态,则为已添加的每个状态添加映射。 请始终将向前转换内的最后一个状态映射到 type="Complete"。

  3. 导入过程配置。

    witadmin importprocessconfig /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/ProcessConfiguration.xml"
    

确认可以将 Bug 添加到任务板

  1. 打开任务板页或刷新该页(如果已打开)。

  2. 你应该能够选择任务或 Bug 作为用户情景的链接工作项。

    添加了 Bug 工作项类型的任务板

  3. 若要将现有 Bug 添加到任务板,请打开用户情景。 在本示例中,用户情景标题为 Bug debt。 从**“所有链接”**选项卡中,选择要包含在冲刺 (sprint) 中的 Bug。

    将多个 Bug 链接到用户情景

    你可能必须刷新任务板,Bug 才会显示。

    提示

    你无法通过“实现”选项卡添加 Bug,因为这些 Bug 仅限于任务。若要支持通过“实现”选项卡添加 Bug,请将用户情景工作项类型的 FORM 部分修改为包含 Bug 的筛选器。

在任务板中,拖动 Bug 或任务以更新其状态。 你将注意到,无法将项拖动到对其无效的列中。 例如,无法将 Bug 拖动到“新建”状态,也无法将任务拖动到“已解决”状态。 如果希望使用这些状态,请将它们添加到工作流定义以获取相应的 WIT 定义。

问题解答

问:可以用于编辑 XML 定义文件的其他工具有哪些?

答:利用witadmin命令行工具,你可以导入和导出定义文件,如本主题中所示。 可用于该任务的其他工具是过程编辑器(可随 TFS 增强工具一起下载)或 TFS 团队项目管理器CodePlex 上提供的社区资源项目)。 通过使用 TFS 团队项目管理器,你可以快速导出、编辑和导入 XML 定义文件,而无需使用命令行接口。

问:如果从基于 Scrum 的团队项目的要求类别中删除 Bug WIT,会发生什么情况?

**答:**引用要求类别的现成可用的自定义查询将不再返回包含 Bug WIT 的结果。 你可能希望更新这些查询。

而且,当你创建基于要求的测试套件时,检索的工作项属于要求类别。 对于希望为 Bug 创建测试计划的 Scrum 团队,则需要更新查询以包含 Bug 类别。

问:关于元状态映射我需要了解些什么?

**答:**选项 B 和选项 C 中的介绍的过程说明了如何对基于 TFS 2013 提供的 Agile 和 CMMI 过程模板创建的团队项目进行更改。 你添加的 WIT 的状态模型必须与 ProcessConfiguration 文件中指定的元状态映射一致。 如果状态模型和 metatstate 映射不一致,则必须额外进行定义,如此处所述。

问:如何使 Bug 显示在 Scrum 的任务积压工作 (backlog) 和面板页上?

**答:**如果团队项目基于 Scrum 过程模板,并且你希望 Bug 与任务但不与产品积压工作 (backlog) 项对等,请执行以下步骤:

  1. 编辑 Bug 工作项定义:将“活动”和“剩余工作”字段添加到 FIELDS 和 FORM 部分。

  2. 编辑状态定义:向任务类别添加 Bug,并将 Bug 从要求类别中删除。

  3. 编辑过程配置定义:为任务类别映射“已解决”状态,并将其从要求类别中删除。

问:为什么所有已分配给冲刺 (sprint) 的 Bug 和任务不显示在冲刺 (sprint) 积压工作 (backlog) 上?

**答:**可以将任务分配给迭代,但不能将其链接到父积压工作 (backlog) 项。 这些项将显示在创建的查询中,但不会在任务板本身上显示。 TFS 将运行查询并在显示任务板项之前应用几个后台进程。

以下三个原因可能导致属于任务类别的工作项不会出现在冲刺 (sprint) 积压工作 (backlog) 页或任务板上:

  • 未将该任务链接到父积压工作 (backlog) 项。 只有其迭代路径设置到冲刺 (sprint) 的已链接到父产品积压工作 (backlog) 项 (Scrum)、用户情景 (Agile) 或要求 (CMMI) 的这些 Bug 和任务将显示在冲刺 (sprint) 积压工作 (backlog) 页上。

  • 该任务是其他任务的父任务。 如果已经创建任务的层次机构,则仅显示结构底层的子任务。

  • 该任务链接的父任务对应于为其他团队定义的积压工作 (backlog) 项。 或者,该任务的父积压工作 (backlog) 项的区域路径与该任务不同。

问:如何使用“积压工作 (backlog) 优先级”或“堆栈级别”字段?

**答:**积压工作 (backlog) 和面板页使用“积压工作 (backlog) 优先级 (Scrum)”和“堆栈级别(Agile 和 CMMI)”字段管理工作项的排序顺序。 应该为团队项目的所有 WIT 定义这些字段。 但是,你无需将其包含在工作项窗体上。 这些字段必须与分配到 ProcessConfiguration 定义文件中的 Order 类型的字段匹配。