使用依赖项跟踪器扩展

Azure DevOps Services

注意

建议使用交付计划来跟踪依赖项,而不是使用依赖项跟踪器。 依赖项跟踪器扩展不是 Azure Boards 支持的功能,也没有得到任何产品团队的支持。 如果在使用扩展时有任何疑问、建议或问题,请访问 Azure DevOps 市场,依赖项跟踪器扩展页面。 依赖项跟踪器扩展仅适用于 Azure DevOps Services。

依赖项跟踪器扩展有助于管理跨团队、项目和组织的依赖项。 它提供了可筛选的视图,可以显示团队正在使用和生成的所有依赖项。 通过这些视图,可以跟踪依赖项的状态和计划,有助于评估产品可交付结果的依赖项风险。

使用依赖项跟踪器可在迭代或发布开始时规划依赖项,并在开发期间跟踪状态。 对于任何给定的依赖项,都涉及以下各方:

  • 使用者:有需求并启动工作请求的功能团队。
  • 生成者:致力于交付工作的功能团队。

每个工作请求和工作可交付结果都定义为一个工作项。 工作项按“后续项 + 前置项”链接类型或其他定向链接类型进行链接。 有关详细信息,请参阅链接类型引用“从链接生成/使用”。

提示

虽然任何工作项类型都可以参与依赖项跟踪,但你可能希望将依赖项限制为特定类型,例如功能、长篇故事、用户情景或错误。 可以通过配置依赖项跟踪器创建限制。

在依赖项跟踪器中,可以选择不同的视图和筛选器,向下钻取以了解具体细节。 以下各部分提供了对这些视图和选项的说明:

使用依赖项跟踪器可视化和跟踪以下工作项:

  • 团队正在交付的工作的可交付结果的依赖项。
  • 你对团队正在交付的工作的其他团队拥有的依赖项。
  • 其他团队对你的团队正在交付的工作拥有的依赖项。

组织中的所有团队都可以参与跟踪依赖项。

注意

依赖项跟踪器无法取代同意完成工作所需的面对面交互。 它提供了更易用的规划和跟踪功能。 在进入依赖项跟踪器之前,应由所有各方就依赖项达成一致意见。

关键术语

  • 依赖项:团队 A 需要让团队 B 执行团队 A 尝试执行的工作,这项任务就是依赖项。
  • 使用者:要求完成工作的团队。
    • 使用者负责参与和跟踪此项工作 - 由于这是其场景所需的工作,因此使用者需要负责提交、监视和跟踪工作状态
    • 使用者负责将工作输入到 Azure Boards 中,并将该项工作请求提交给生成者
    • 使用者负责管理他们请求的工作,以便了解任何实质性的更改和调整
  • 生产者:正在执行这项工作的团队。
    • 将工作提交给生产者后,生产者就拥有工作项,
      • 生成者负责维护 Azure Boards 中的工作项
      • 生成者拥有工作项和迭代的状态
      • 移交工作项后,使用者不应触及这些值
  • 先后顺序:在使用团队开始工作之前,需要生产团队的工作。

先决条件

  • 为要跟踪其依赖项的组织安装依赖项跟踪器扩展
  • 要查看依赖项,你必须是项目的“项目有效用户”组的成员。
  • 要创建依赖项,你必须是参与依赖项链接的两个项目的“参与者”组的成员。
  • 若要支持跨组织参与,所有组织都必须通过同一 Microsoft Entra ID 对用户进行身份验证。
  • Azure Boards 必须作为一项服务启用。 如果未启用,则必须将其重新启用。 有关详细信息,请参阅启用或禁用服务
  • 要修改配置,你必须是“项目集合管理员”组的成员。

重要

依赖项跟踪器的默认配置支持敏捷流程。 如果项目基于不同的流程,或者你已经自定义流程,可能需要修改配置。 请参阅本文后面的配置依赖项跟踪器

此外,您还应该执行以下配置或自定义任务:

  • 设置将参与依赖项跟踪的区域路径和团队。
  • 为项目配置迭代路径/冲刺,并将其分配给参与依赖项跟踪的工作项。 这项任务至关重要,可以让“时间线”视图生成有意义的数据。
  • 根据需要自定义流程以支持任何其他工作项或字段。
  • 配置依赖项跟踪器以满足您的业务需求并解决任何自定义问题。

打开依赖项跟踪器扩展

  1. 打开已定义团队的项目的 Web 门户。

  2. 选择 Boards>依赖项跟踪器

    此屏幕截图显示 Azure Boards 中的依赖项跟踪器中心。

  3. 从下拉菜单中选择与要查看其依赖项的团队对应的区域

    此屏幕截图显示正在选择区域。

    只能对那些为项目定义的区域路径进行筛选。

筛选器选项

通过输入关键字或者使用一个或多个字段,筛选每个支持的视图。 提供的字段包括“状态”、“工作项类型”和“迭代路径”。 根据输入的关键字,筛选器函数会按任何显示的列字段列出工作项。

若要显示筛选器工具栏,请选择 筛选器图标。

此屏幕截图显示依赖项跟踪器筛选器选项。

通过选择筛选器图标,打开和关闭筛选器。 若要查看更多筛选器,可以使用筛选器列表末尾的箭头。

从每个字段的下拉菜单中选择一个或多个值。 使用以下值填充这些字段:

  • 工作项类型:选中要查看的工作项类型的一个或多个复选框。 这些是配置为参与依赖项跟踪的工作项类型。 默认工作项类型包括:长篇故事、功能、用户情景和 bug。 若要修改配置,请参阅依赖项跟踪器的配置
  • 状态:选中要查看的工作项状态的一个或多个复选框。 下拉列表应包括为所选视图中显示的所有工作项类型定义的所有工作流状态。
  • 迭代:选中要查看的迭代路径的一个或多个复选框。 下拉列表应包括为项目配置的所有迭代路径,以及在当前视图中列出了其工作项的迭代路径。
  • 优先级:选中要查看的优先级的一个或多个复选框。 这些是分配给工作项的优先级值
  • 合作伙伴:为其定义工作项的合作伙伴组织。

筛选选项取决于为依赖项跟踪器定义的配置,并且对应于符合筛选条件的所选视图中显示的工作项。 例如,如果没有任何工作项分配给冲刺 (sprint) 4,则“冲刺 (sprint) 4”选项不会显示在迭代路径的筛选器选项中。

可以在所选区域中删除依赖项,这将排除您团队内的依赖项。

查看向下钻取选项

多个视图通过向下钻取提供交互式可视化效果。 本文后面的标签视图说明中将介绍这些功能。

此屏幕截图显示“使用依赖项”,向下钻取到区域中已完成的工作。

创建依赖项

依赖项表示一个团队依赖于另一个团队的工作。 两个团队都应在各自的区域路径中跟踪自己的工作。 通过链接依赖于其他团队工作的工作,可以可视化和跟踪依赖项。

  1. 选择“新建依赖项”

    此屏幕截图显示选择“新建依赖项”。

    如果合作伙伴团队位于其他组织中,则首先选择“合作伙伴帐户”。 可以通过配置依赖项跟踪器来启用或禁用“合作伙伴帐户”选项。

    “创建依赖项”对话框的屏幕截图,选择“合作伙伴帐户”。

  2. 按 ID 搜索工作项,或输入工作项标题中包含的关键字。 在以下示例中,我们将用户情景和 bug 链接。

    “创建依赖项”对话框的屏幕截图,选择要链接的两个现有工作项。

    • 生成者是致力于交付工作的团队。
    • 使用者是需要或依赖于工作的团队。
    • 创建依赖项链接的最快速方法是在搜索框中键入“生成者”和“使用者”工作项 ID,然后选择“保存”。

    (可选)可以选择“新建”添加工作项,然后将其链接为相互依赖的工作项。 在这里,我们创建两个新功能,并将它们链接起来。

    “创建依赖项”对话框的屏幕截图,创建要链接的新工作项。

    如果依赖项的一半不存在工作项,可以根据需要创建一个新工作项。

  3. 选择“保存”。 “保存”按钮仅在选择两个工作项进行链接后才可用。

  4. 在成功确认对话框中,选择“查看依赖项”

    成功确认对话框的屏幕截图。

    你链接的工作项会突出显示。

    在以下示例中,Fabrikam Fiber/服务交付/语音团队依赖于 MyFirstProject 团队来交付其 User Story 706: Cancel order form 以完成 Bug 390: Cancel order form

    “创建依赖项”对话框的屏幕截图,链接的依赖工作项。

还可以使用“链接”选项卡链接工作项,以创建“后续任务/前导任务”链接。 前导任务是工作项的生成者,或者是必须首先显示的项。 后续任务是工作项的使用者,或者是依赖于第一项的项。

“添加链接”对话框的屏幕截图,手动创建链接。

注意

后续任务/前导任务(使用者/生成者)链接类型是依赖项跟踪器使用的默认链接类型。 如果使用托管 XML 流程模型自定义项目,则可以在依赖项跟踪器配置中指定不同的链接类型。 有关详细信息,请参阅本文后面的配置依赖项跟踪器,以及链接用户情景、问题、bug 和其他工作项

通过从链接的工作项中选择 操作图标,然后从菜单中选择“删除依赖项链接”选项,可以删除依赖项。

工作项列表的屏幕截图,选择操作菜单以删除依赖项链接。

(可选)可以从工作项的“链接”选项卡中删除链接。

创建依赖项的查询

若要打开一组从属工作项,请采用与批量编辑相同的方式选择它们,从一个选定的链接工作项选择 操作图标,然后从菜单中选择“在查询中打开”选项。

工作项列表的屏幕截图,创建依赖项的查询。

此时会打开“查询结果”页的一个新选项卡。

还可以通过选择“工作项”和“直接链接”查询类型,并选择任何工作项类型来创建自定义查询。

选择“复制到 HTML”,将所选的工作项作为格式化表复制到剪贴板。

“使用依赖项”视图

“使用依赖项”视图显示团队依赖于其他团队或区域路径的工作。

依赖项跟踪器的屏幕截图,“使用依赖项”视图。

条形图上的每一列代表另一个区域路径,该路径按所选区域视图的工作流状态生成依赖项。 该表显示了唯一的依赖项的数量。 它还列出了参与跟踪的依赖项的筛选视图的所有工作项。

在该表中,可以完成以下操作。

  • 通过在条形图中选择一个区域路径条和进度状态来筛选工作项列表
  • 使用 展开和 折叠图标展开或折叠工作项列表,以显示依赖工作项的完整列表
  • 通过打开列选项添加或删除列字段
  • 通过选择“显示”来切换工作项的顺序:顶部的使用者或顶部的生成者

“生成依赖项”视图

“生产依赖项”视图显示每个所选区域中其他团队或区域路径所依赖的工作。

依赖项跟踪器的屏幕截图,“生成依赖项”视图。

条形图上的每一列代表另一个区域路径,该路径按所选区域视图的工作流状态使用依赖项。 该表显示了唯一的依赖项的数量,并列出了跟踪依赖项的筛选视图中包括的所有工作项。

在该表中,可以完成与“使用依赖项”视图中相同的操作。

“时间线”选项卡

“时间线”选项卡提供了依赖项的日历视图。 “时间线”视图为 beta 版本。

重要

要使时间线显示有意义的数据,必须将依赖工作项分配给迭代路径,并且迭代路径必须分配有开始日期和结束日期。

“时间线”视图有两个版本:“正确流”和“错误流”。 每个版本都显示颜色编码的工作流状态。 您可以在依赖项跟踪器配置中自定义颜色代码。

“正确流”视图

“正确流”视图显示按正确顺序排列的依赖项。 后续工作项在其前置工作项之后完成。

“时间线”视图的屏幕截图,正确流。

“错误流”视图

“错误流”视图显示不符合顺序的依赖项。 至少有一个前置工作项在其后续工作项之后完成。

“时间线”视图的屏幕截图,错误流。

风险图

风险图提供了依赖项如何从使用者团队流向生产者团队或从生产者流向使用者的可视化效果。 该图让团队可一目了然地了解依赖项的数量和关联的风险级别。 此外,风险图视图还展示了链接依赖项并将其阶梯式上升到情景的值。

依赖项跟踪器风险图的屏幕截图。

有两种视图:“使用来源”和“生成对象”。 工作流状态颜色编码是可配置的。 线条的宽度指示该区域中存在多少依赖项,链接越粗,依赖项越多,如图例所示。

使用来源

依赖项跟踪器风险图的屏幕截图,“使用来源”视图。

生成对象

依赖项跟踪器风险图的屏幕截图,“生成对象”视图。

根据特定依赖项进行筛选

可以通过选择其中一个依赖项向下钻取到特定内容。

依赖项跟踪器风险图的屏幕截图,生成对象,根据依赖项进行筛选。

配置依赖项跟踪器

必须是项目集合管理员组的成员才能修改配置。 对配置所做的所有更改都会应用于组织中定义的所有项目。

若要更改配置,请选择 齿轮图标并修改列出的语法。 完成操作后,选择“保存”

可以修改的主要属性汇总如下:

  • 用于创建依赖项链接的链接类型。 默认值为后续任务/前导任务链接类型。 只有在使用托管 XML 流程模型自定义工作跟踪时,才会进行自定义。
  • 工作项和工作项类型
    • 参与依赖项跟踪的工作项类型
    • 工作项类别状态到颜色的映射
    • 工作项工作流状态和颜色的映射
  • 依赖项列表中的默认字段列
  • 默认筛选器选择:
    • 选定的依赖项工作项类型
    • 选定的迭代路径
  • 已启用选项:
    • 时间线
    • 新依赖项链接
    • 跨帐户(组织)依赖项
    • 跨帐户依赖项切换默认状态
  • 风险图配置:
    • 与有风险(红色)工作项关联的工作项状态
    • 与中性(灰色)工作项关联的工作项状态
    • 与正常进行(绿色)的工作项关联的工作项状态

有关完整列表和说明,请参阅本节后面提供的属性说明

启用或禁用“新建依赖项”选项

newDependencyButtonEnabled 属性可以启用或禁用“新建依赖项”链接选项。 启用后,链接将显示在依赖项跟踪器页上。 禁用后,用户无法从跟踪器创建依赖项,只能查看通过其他方式创建的依赖项。 默认值设置为 true(启用)。

启用或禁用跨组织链接

crossAccountConfigs 属性可以启用或禁用“新建依赖项”对话框中的跨组织依赖项链接。 默认值设置为 true(启用)。

若要禁用,请将 JSON 配置中的以下语法设置为 false

{
"crossAccountConfigs": {
  "crossAccountDependencyEnabled": false,
  "crossAccountDependencyToggleDefaultState": false, //default state for cross account toggle
  "crossAccountDependencyToggleOnText": "Cross-account dependencies on",
  "crossAccountDependencyToggleOffText": "Cross-account dependencies off"}
}

跨帐户链接需要使用特殊链接类型,并且只能与“新建依赖项”选项配合使用。

属性说明

下表描述了配置文件中指定的每个属性项。

属性/说明

默认/示例

consumesLinkName

指定用于创建从生成者到使用者的链接的链接类型。

System.LinkTypes.Dependency-Reverse

producesLinkName

指定用于创建从使用者到生成者的链接的链接类型。

System.LinkTypes.Dependency-Forward

queryFields

指定要用于代替依赖项跟踪器用于返回链接工作项结果的系统字段的自定义字段。 默认情况。 系统引用名称用于返回以下字段的值:

  • areaPath - 区域路径
  • assignedTo - 分配到
  • id - ID
  • areapath - 迭代 ID
  • areapath - 迭代路径
  • areapath - 优先级
  • areapath - 状态
  • areapath - 标记
  • teamProject - 团队项目
  • title= 标题
  • workItemType - 工作项类型

如果使用自定义字段代替其中一个系统字段,可以输入以下内容来指定替换:

{
title: "Custom.Title",
assignedTo: "Custom.AssignedTo" 
}

dependencyWorkItemTypes

指定参与依赖项跟踪的工作项类型。 在“创建依赖项”对话框中,只能创建已列出的那些工作项类型。

默认值:

[  
"Epic",  
"Feature",  
"User Story",  
"Bug"  
]

如果使用 Scrum 流程,请将条目更改为:

[  
"Epic",  
"Feature",  
"Product Backlog Item",  
"Bug"  
]

selectedDependencyWorkItemTypes

将初始焦点限制为依赖项跟踪器显示或列出的那些工作项类型。 根据默认的“Any”,将显示或列出包含依赖项链接类型的任何工作项类型。 用户可以通过筛选来更改焦点。

默认值:

Any

若要将工作项类型限制为仅长篇故事和功能,请指定:

[  
"Epic",  
"Feature"  
]

selectedReleases

将初始焦点限制为分配给等于或低于指定版本的那些迭代路径的工作项。 基于空白默认值,不应用任何限制。 用户可以通过筛选来更改焦点。

默认值:

[]

若要将 Fabrikam 项目的工作项类型限制为版本 1 和版本 2,请指定:

[  
"Fabrikam/Release 1",  
"Fabrikam/Release 2",  
]

workItemCategoriesAndColors

根据工作项的类别和工作流状态,指定用于表示工作项的颜色。 有关详细信息,请参阅如何在积压工作和面板中使用工作流状态和状态类别

默认值:

{
"Proposed": {
"displayName": "Proposed",
"color": "#a6a6a6"
},
"InProgress": {
"displayName": "In Progress",
"color": "#00bcf2"
},
"Completed": {
"displayName": "Completed",
"color": "#9ac70b"
},
"Removed": {
"displayName": "Removed",
"color": "#d9242c"
},
"Resolved": {
"displayName": "Resolved",
"color": "#ff9d00"
}
}

workItemDislayStatesAndDisplayColors

将工作流状态映射到用于显示工作流的颜色。 如果自定义工作流状态,或使用的流程用了不同的工作流状态,必须更新此属性。

默认值:

{  
"New": {  
"textColor": "rgb(112, 112, 112)",  
"chartColor": "rgb(112, 112, 112)",  
"states": [  
"New"  
]  
},  
"Active": {  
"textColor": "rgb(0, 122, 204)",  
"chartColor": "rgb(0, 122, 204)",  
"states": [  
"Active",  
"Resolved"  
]  
},  
"Closed": {  
"textColor": "rgb(16, 124, 16)",  
"chartColor": "rgb(16, 124, 16)",  
"states": [  
"Closed"  
]  
},  
"Removed": {  
"textColor": "rgb(204, 41, 61)",  
"chartColor": "rgb(204, 41, 61)",  
"states": [  
"Removed"  
]  
},  
"Other": {  
"textColor": "rgb(178, 178, 178)",  
"chartColor": "rgb(178, 178, 178)",  
"states": []  
}  
}  

riskAssessementValues

指定风险字段值。 “风险”字段指定对成功完成用户情景的相对不确定性的主观分级。 它是针对敏捷流程定义的,但可以添加到其他流程中使用的工作项类型。

默认值:

["1-High", "2-Medium", "3-Low"]

partnerAccounts

可选配置,指定在创建跨帐户依赖项时可从“依赖项”对话框中选择哪些 Azure DevOps 组织。 如果未指定,则会基于用户之前访问过的组织来生成列表。

默认值:

[]

示例:

["account-1", "account-2"]

timelineEnabled

启用或禁用“时间线”视图。

默认值:

true

newDependencyButtonEnabled

启用或禁用“新建依赖项”链接以创建新的链接依赖项。

默认值:

true

crossAccountConfigs

(1) 启用或禁用对在其他合作伙伴帐户中的工作项创建新依赖项的支持,(2) 指定“创建依赖项”对话框中“合作伙伴帐户”选项的默认状态。

默认值:

{
"crossAccountDependencyEnabled": true,  
"crossAccountDependencyToggleDefaultState": false
}

如果不希望创建属于其他组织的任何依赖项,请将此配置更改为:

{  
"crossAccountDependencyEnabled": false,  
"crossAccountDependencyToggleDefaultState": false
}

priorityValues

指定优先级字段值。 “优先级”字段指定对与业务相关的 bug、问题、任务或用户情景的主观分级。 它是针对大多数积压工作项类型和流程定义的,但可以添加到其他流程中使用的工作项类型。

默认值:

["0","1","2","3","4","(blank)"]

defaultColumns

指定用于显示依赖项列表的字段列和顺序。

默认值:

[
"Id",
"Area Path",
"Dependency Title",
"State",
"Consumers",
"Producers"
]

riskAnalysisEnabled

指定是否启用风险功能。 如果设置为 true,必须要定义 riskAssessmentValues 属性。

默认值:

False

riskAssessmentValues

默认值:

[]

riskGraphConfig

将工作流状态映射到图表上显示的三个风险区域之一:atRisk 是红色、neutral 是灰色、onTrack 是绿色。

默认值:8

{  
"atRisk": [  
"Removed"  
],  
"neutral": [  
"New"  
],  
"onTrack": [  
"Active",  
"Resolved",  
"Closed",  
"Other"  
]
}

添加或删除参与依赖项跟踪的工作项类型中使用的工作流状态。

iterationDepth

指定依赖项跟踪器查询以生成“时间线”视图的迭代路径的分层深度。

默认值:8A 深度 3 对应于:Fabrikam/版本 1/冲刺 20。

默认配置语法

{
    "consumesLinkName": "System.LinkTypes.Dependency-Reverse",
    "producesLinkName": "System.LinkTypes.Dependency-Forward",
    "queryFields": {},
    "dependencyWorkItemTypes": [
        "Epic",
        "Feature",
        "User Story",
        "Bug"
    ],
    "selectedDependencyWorkItemTypes": "Any",
    "selectedReleases": "",
    "workItemCategoriesAndColors": {
        "Proposed": {
            "displayName": "Proposed",
            "color": "#a6a6a6"
        },
        "InProgress": {
            "displayName": "In Progress",
            "color": "#00bcf2"
        },
        "Completed": {
            "displayName": "Completed",
            "color": "#9ac70b"
        },
        "Removed": {
            "displayName": "Removed",
            "color": "#d9242c"
        },
        "Resolved": {
            "displayName": "Resolved",
            "color": "#ff9d00"
        }
    },
    "workItemDislayStatesAndDisplayColors": {
        "New": {
            "textColor": "rgb(112, 112, 112)",
            "chartColor": "rgb(112, 112, 112)",
            "states": [
                "New"
            ]
        },
        "Active": {
            "textColor": "rgb(0, 122, 204)",
            "chartColor": "rgb(0, 122, 204)",
            "states": [
                "Active",
                "Resolved"
            ]
        },
        "Closed": {
            "textColor": "rgb(16, 124, 16)",
            "chartColor": "rgb(16, 124, 16)",
            "states": [
                "Closed"
            ]
        },
        "Removed": {
            "textColor": "rgb(204, 41, 61)",
            "chartColor": "rgb(204, 41, 61)",
            "states": [
                "Removed"
            ]
        },
        "Other": {
            "textColor": "rgb(178, 178, 178)",
            "chartColor": "rgb(178, 178, 178)",
            "states": []
        }
    },
    "riskAssessmentValues": [],
    "releases": [],
    "partnerAccounts": [],
    "timelineEnabled": true,
    "newDependencyButtonEnabled": true,
    "crossAccountConfigs": {
        "crossAccountDependencyEnabled": true,
        "crossAccountDependencyToggleDefaultState": false
    },
    "priorityValues": [
        "0",
        "1",
        "2",
        "3",
        "4",
        "(blank)"
    ],
    "defaultColumns": [
        "Id",
        "Area Path",
        "Dependency Title",
        "State",
        "Consumers",
        "Producers"
    ],
    "riskGraphConfig": {
        "atRisk": [
            "Removed"
        ],
        "neutral": [
            "New"
        ],
        "onTrack": [
            "Active",
            "Resolved",
            "Closed",
            "Other"
        ]
    },
    "iterationDepth": 8
}