向积压工作 (backlog) 或任务板添加 Bug
一些团队喜欢将 Bug 作为积压工作 (backlog) 项(如用户情景或要求)跟踪。 其他业务流程可能要求跟踪积压工作 (backlog) 或任务板上的其他工作项类型 (WIT)。
如果你使用的是 Scrum 项目,那么你的积压工作 (backlog) 中已经显示 Bug。 但是,如果你的团队项目是使用其他过程模板(如 Agile 或 CMMI)创建的,则 Bug 不会显示在积压工作 (backlog) 或任务板上。
要添加 Bug 或其他 WIT,你可以配置团队设置或自定义团队项目以支持以下选项:
部署 |
选项 |
---|---|
Visual Studio Online |
|
已安装 TFS 2013.4 更新的本地部署 |
|
未安装 TFS 2013.4 更新的本地部署 |
|
如果你在本地 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。
如果你不是团队管理员,则添加为管理员。
在团队管理页中打开“设置”,然后选中复选框以跟踪 Bug。
如果未找到该选项,则需更新团队项目的过程配置。
要查看更改,请打开并刷新团队积压工作 (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]。
验证或更新看板列映射
打开产品积压工作 (backlog) 面板页(看板)。
如果看到列配置无效的消息,则需要调整列映射。
打开自定义列并为已定义的每一列映射 Bug 工作流状态。
例如,如下所示,映射每一列:
选项 B:所有团队跟踪积压工作 (backlog) 上的 Bug 或其他 WIT
你添加到要求类别的 WIT 将显示在积压工作 (backlog) 页上。 对于要显示在用户情景 (Agile) 或要求 (CMMI) 积压工作 (backlog) 页上的 Bug,请对本地 TFS 团队项目进行以下修改:
将用于估计工作量的字段添加到 Bug 或其他 WIT 定义:情景点 (Agile) 或大小 (CMMI)。
将 Bug 或其他 WIT 添加到要求类别。
验证过程配置中的元状态映射。
下面是为基于 MSF for Agile 过程模板的团队项目添加 Bug WIT 的方式。
添加“情景点”字段
导出 Bug WIT 定义。
witadmin exportwitd /collection:" CollectionURL" /p:MyProject /n:bug /f:DirectoryPath/bug.xml
添加“情景点”字段。
<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>
向窗体布局添加“情景点”。
<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="<None>" /> <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" />
导入更新后的 Bug 定义。
witadmin importwitd /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/bug.xml"
将 Bug WIT 添加到要求类别。
导出类别定义。 如果没有 TFS 管理权限,则获取这些权限。
witadmin exportcategories /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/categories.xml"
将 Bug 工作项类型添加到要求类别。
<CATEGORY refname="Microsoft.RequirementCategory" name="Requirement Category"> <DEFAULTWORKITEMTYPE name="User Story" /> <WORKITEMTYPE name="Bug" /> </CATEGORY>
导入类别文件。
witadmin importcategories /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/categories.xml"
验证过程配置中的元状态映射
导出过程配置定义。
witadmin exportprocessconfig /collection:"CollectionURL" /p:MyProject /f: "DirectoryPath/ProcessConfiguration.xml"
验证“已解决”状态是否已在 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"。
导入过程配置。
witadmin importprocessconfig /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/ProcessConfiguration.xml"
确认可以将 Bug 添加到产品积压工作 (backlog)
打开产品积压工作 (backlog) 页或刷新该页(如果已打开)。
你应该会看到工作项**“类型”**的下拉菜单。
自定义看板以将 Bug 状态映射到泳道
打开产品积压工作 (backlog) 面板页(看板)。
如果你刚添加了 Bug 工作项类型或任何其他工作项类型,你将看到一条消息,指示列配置无效。
打开自定义列并为已定义的每一列映射 Bug 工作流状态。
例如,如下所示,映射每一列:
选项 C:所有团队跟踪任务板上的 Bug 或其他 WIT
你添加到任务类别的 WIT 将显示在任务板和迭代积压工作 (backlog) 页上。 对于显示在任务板上的 Bug 或任务,必须将其链接到父产品积压工作 (backlog) 项 (Scrum)、用户情景 (Agile) 或要求 (CMMI)。
对于本地 TFS,请进行以下修改:
向 Bug WIT 定义添加必填字段。
将 Bug WIT 添加到任务类别。
将所需元状态映射添加到过程配置。
下面是为基于 MSF for Agile 过程模板的团队项目执行此操作的方式。
添加必填字段
如果你没有团队项目的管理权限,请通过添加为管理员获取这些权限。
打开已安装 Visual Studio 或团队资源管理器的命令提示符窗口,然后输入:
cd %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE
在 64 位版本的 Windows 上,将 %programfiles% 替换为 %programfiles(x86)%。 你可以免费下载团队资源管理器。
导出 Bug 工作项类型定义。
witadmin exportwitd /collection:"CollectionURL" /p:MyProject /n:bug /f: "DirectoryPath/bug.xml"
CollectionURL 的一个示例是“http://MyServer:8080/tfs/TeamProjectCollectionName”。
添加活动字段。 如果你不添加,配置将无效。 或者,也可以添加计划字段,以便跟踪剩余和已完成的工作。 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>
将“活动”和计划字段添加到工作项窗体。 只需复制在任务工作项类型中定义的 Groups 并替换已存在的 Groups。
<FORM> . . . <Group Margin="(10,0,0,0)"> <Column PercentWidth="30"> <Group Label="Status"> <Column PercentWidth="100"> <Control FieldName="System.AssignedTo" EmptyText="<No one>" Type="FieldControl" Label="Assi&gned To" LabelPosition="Left" /> <Control FieldName="System.State" Type="FieldControl" Label="Stat&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="<None>" /> <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="<None>" /> </Column> </Group> </Column> <Column PercentWidth="30"> <Group Label="Classification"> <Column PercentWidth="100"> <Control FieldName="System.AreaPath" Type="WorkItemClassificationControl" Label="&Area" LabelPosition="Left" /> <Control FieldName="System.IterationPath" Type="WorkItemClassificationControl" Label="Ite&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>
导入更新后的 Bug 定义。
witadmin importwitd /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/bug.xml"
将 Bug WIT 添加到任务类别
导出类别定义。
witadmin exportcategories /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/categories.xml"
将 Bug 添加到任务类别。
<CATEGORY refname="Microsoft.TaskCategory" name="Task Category"> <DEFAULTWORKITEMTYPE name="Task" /> <WORKITEMTYPE name="Bug" /> </CATEGORY>
备注
可以让 Bug 工作项类型同时属于 Bug 类别和任务类别,这不会有问题。
导入类别文件。
witadmin importcategories /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/categories.xml"
将元状态映射添加到过程配置
导出过程配置定义。
witadmin exportprocessconfig /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/ProcessConfiguration.xml"
将“已解决”状态的元状态映射添加到 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"。
导入过程配置。
witadmin importprocessconfig /collection:"CollectionURL" /p:MyProject /f:"DirectoryPath/ProcessConfiguration.xml"
确认可以将 Bug 添加到任务板
打开任务板页或刷新该页(如果已打开)。
你应该能够选择任务或 Bug 作为用户情景的链接工作项。
若要将现有 Bug 添加到任务板,请打开用户情景。 在本示例中,用户情景标题为 Bug debt。 从**“所有链接”**选项卡中,选择要包含在冲刺 (sprint) 中的 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) 项对等,请执行以下步骤:
编辑 Bug 工作项定义:将“活动”和“剩余工作”字段添加到 FIELDS 和 FORM 部分。
编辑状态定义:向任务类别添加 Bug,并将 Bug 从要求类别中删除。
编辑过程配置定义:为任务类别映射“已解决”状态,并将其从要求类别中删除。
问:为什么所有已分配给冲刺 (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 类型的字段匹配。