You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于C#项目代码覆盖率自动生成ADO用户故事?求工具及开发可行性

基于C#代码覆盖率未覆盖类自动创建Azure DevOps用户故事的工具与开发可行性

现有工具情况

目前没有直接开箱即用的工具能完全匹配你描述的端到端流程——从C#项目代码覆盖率检测到自动生成Azure DevOps用户故事。不过可以通过组合现有工具实现近似效果:

  • 用dotnet test配合自定义.runsettings文件生成代码覆盖率报告(支持导出为XML/JSON格式)
  • 借助Azure DevOps的REST API或官方.NET SDK(Microsoft.TeamFoundationServer.Client)编写脚本,解析覆盖率报告里的未覆盖类,批量创建用户故事

自行开发的可行性

完全可行,以下是核心步骤的实现思路:

  1. 配置代码覆盖率

    • 编写.runsettings文件,指定要检测的程序集、排除项等规则,示例片段:
      <RunSettings>
        <DataCollectionRunSettings>
          <DataCollectors>
            <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
              <Configuration>
                <CodeCoverage>
                  <ModulePaths>
                    <Include>
                      <ModulePath>.*YourProject\.dll$</ModulePath>
                    </Include>
                  </ModulePaths>
                </CodeCoverage>
              </Configuration>
            </DataCollector>
          </DataCollectors>
        </DataCollectionRunSettings>
      </RunSettings>
      
    • 执行dotnet test --settings YourSettings.runsettings --collect:"XPlat Code Coverage"生成覆盖率报告(默认在TestResults目录下的XML文件)
  2. 解析覆盖率报告

    • 读取XML格式的覆盖率报告,筛选出覆盖率为0%的类(或根据你的需求定义“待覆盖”规则)。可以用System.Xml.Linq或第三方库(如Coverlet.Core)简化解析逻辑。
  3. 调用Azure DevOps API创建用户故事

    • 使用Azure DevOps的工作项创建API,通过HTTP请求或官方SDK提交工作项。示例用SDK的核心代码片段:
      using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
      using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
      using Microsoft.VisualStudio.Services.Common;
      
      var connection = new VssConnection(new Uri("https://dev.azure.com/YourOrg"), new VssBasicCredential("", "YourPAT"));
      var workItemClient = connection.GetClient<WorkItemTrackingHttpClient>();
      
      var workItemCreate = new JsonPatchDocument();
      workItemCreate.Add(new JsonPatchOperation()
      {
          Operation = Operation.Add,
          Path = "/fields/System.Title",
          Value = $"编写单元测试覆盖类:{unCoveredClassName}"
      });
      workItemCreate.Add(new JsonPatchOperation()
      {
          Operation = Operation.Add,
          Path = "/fields/System.WorkItemType",
          Value = "User Story"
      });
      // 可添加其他字段描述,如Area Path、Iteration Path等
      
      await workItemClient.CreateWorkItemAsync(workItemCreate, "YourProject", "User Story");
      
  4. 整合流程

    • 将上述步骤封装成控制台应用或Azure DevOps Pipeline任务,实现一键触发:配置runsettings → 执行覆盖率检测 → 解析并生成用户故事。

注意事项

  • 需要确保Azure DevOps的个人访问令牌(PAT)拥有创建工作项的权限
  • 可根据实际需求调整“待覆盖类”的判定规则(比如不是完全0覆盖率,而是低于某个阈值的类)
  • 批量创建工作项时建议添加去重逻辑,避免重复生成相同的用户故事

内容的提问来源于stack exchange,提问作者Chukchak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:18:32