使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

目录

DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
其中微软的开发的Devops产品叫Azure DevOps(之前叫TFS).
Azure DevOps 为支持团队提供开发人员服务,用于计划工作、开发代码开发以及生成和部署应用程序。它提供的集成功能可通过 web 浏览器或 IDE 客户端访问,分为几下几个独立的功能服务:

  1. Azure Repos:提供了 Git 存储库或 TEAM FOUNDATION 版本控制 (TFVC) 来控制代码的源代码。
  2. Azure Pipelines: 提供了生成和发布服务,以支持应用程序的持续集成和交付。
  3. Azure Boards:提供了一套敏捷工具,用于支持使用看板和 Scrum 方法规划和跟踪工作、代码缺陷和问题。
  4. Azure Test Plans:提供了多种工具来测试应用,包括手动/探索测试和持续测试。
  5. Azure Artifacts 允许团队从公共和专用源共享包,如 Maven、Npm、NuGet 等,并将包共享集成到管道中。

一个虚拟流程:挂起工作,修正bug以及进行代码审查

在带有Team Foundation Server的Visual Studio Premium和Visual Studio Ultimate版本中,可以从当前工作直接切换到另外一项工作。团队成员也可以方便的对代码更改交换意见。这篇文章模拟了一个虚拟团队成员使用上述功能的流程。
Peter正在编写一项积压任务的代码。但是,他的同事被一个bug卡住了,他像立即修改这个bug。Peter挂起了当前工作,修复了bug,请求Julia对修复代码进行审查,审查通过后进行bug迁入;最后Peter重新恢复到先前的工作。

1、挂起当前工作

当Peter忙于一个积压任务时,Julia找他讨论一个bug。恰巧Peter对这个领域很熟悉,所以他创建了一个bug任务,然后分配给自己。他决定自己开始修复bug。
在VS的团队资源管理器中:

  1. 连接:确保已经连接到相关工程;然后点击Home图标,选择“我的工作”页。
  2. Suspend当前任务:
    a. 在In Progress Work(正在进行的工作)段中,选择Suspend
    b. 在出现的方框中,指定你想挂起(suspend)工作集的名称,然后选择Suspend按钮。
  3. 开始一项新工作:
    a. 在选择新工作之前,你可能想要:
    通过Available Work Items(可用工作项)中的New按钮创建一个新任务或者其他工作项;
    在Available Work Items(可用工作项)中打开一个新的查询。
    b. 从Available Work Items(可用工作项)拖动一个任务到 In Progress Work正在进行的工作)。
    使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

2、研究代码

Peter阅读了bug工作项的相关代码。通过测试人员的描述,一张已付款的费用单有时会被标记为未付款。在bug工作项上有一个实验室环境的快照。Peter打开了运行这个测试的虚拟机,看到了不正确的结果,退回到IntelliTrace 日志。他将故障跟踪到以下方法:

public class LocalMath
{
    public static bool EqualTo(double a, double b)
    {
        return a == b;
    }

从IntelliTrace 日志可以看出,浮点值相差很小时,函数会返回错误,上述函数比较浮点值的方式不正确。

3、增加测试以显示错误

当bug找到时,表明单元测试存在漏洞,或者测试并没有匹配用户实际需求。因此,修复bug以前,Peter增加了反映这个错误的测试。

// Added 2012-02-02 for bug 654321:
/// <summary>
/// Make sure that number equality test allows for 
/// small rounding errors.
/// </summary>
[TestMethod]
public void TestDoublesEqual()
{
    // We allow a rounding error of 1 in 1000000:
    TestEqual(1, 1e-7, true); // Less than allowed error
    TestEqual(1, 1e-5, false); // More than allowed error
    TestEqual(1000, 1e-7, true); // Less than allowed error
    TestEqual(1000, 1e-5, false); // More than allowed error
}
private void TestEqual(double value, double error, bool result)
{
    // Try different combinations of error and value:
    Assert.IsTrue(result == LocalMath.EqualTo(value + error, value));
    Assert.IsTrue(result == LocalMath.EqualTo(value, value + error));
    Assert.IsTrue(result == LocalMath.EqualTo(value - error, value));
    Assert.IsTrue(result == LocalMath.EqualTo(value, value - error));
}

运行后,果然出错。
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

4、修正代码

Peter修正代码为:

public static bool EqualTo(double a, double b)
{
    // Allow for rounding errors.
    // For example, a == 2.0 and b = 1.99999999999

    const double allowedError = 1/1000000;
    return System.Math.Abs(a - b) < allowedError;
}

现在,单元测试通过了:
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

5、请求代码审查

修复代码后,Peter没有着急迁入(check in)。他所在团队为了提高整体代码质量、同时防止产生新的bug,要求对代码进行审查。
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

  1. 在Team Exporer(团队资源管理器)中,打开“My Work”页,选择“请求评审”.此时出现New Code Review页面。
  2. 指定一个或者多个评审人
  3. 指定评审名称
  4. 指定评审区域路径
  5. 指定一段说明给评审人
  6. 点击提交请求。
    评审人会通过邮件接收到这个通知。

6、接受或者拒绝代码审查

Julia收到了代码审查请求并接受了它。她审查了代码,在文件和代码块层面写了一些意见,然后发回给Peter。Adam太忙拒绝了代码审查工作。
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

  1. 在Team Exporer(团队资源管理器)中,打开 My Work页面,到My Code Reviews & Requests段中,打开请求。
  2. 在Code Review页面,你可以:
    a. 选择Accept(接受)或者Decline(拒绝)代码评审。
    b. 选择 Add Reviewer(增加评审人)去增加评审人。
    c. 查看每个有更改的文件
    d. 和代码作者以及其他评审人交换意见:可以选择Add Overall Comment,或者选择代码块右键从快捷菜单选择Add Comment;最后,选择Send Comments将意见发送给作者或者其他评审者。
  3. 选择 Send and Finish完成评审,指示代码是否需要更多修改。

在她的意见中,Julia指出测试是错误的。允许误差应该是输入值的指定分数,而不是一个常数。 所以测试应该将误差乘以值。

// We allow a rounding error of 1 in 1000000
// as a fraction of the value:
TestEqual(1, 1e-7, true); // Less than allowed error
TestEqual(1, 1e-5, false); // More than allowed error
TestEqual(1000, 1000*1e-7, true); // Less than allowed error
TestEqual(1000, 1000*1e-5, false); // More than allowed error

7、回复代码审查

Peter收到信息后回复了Julia的审查意见。
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

  1. 在Team Exporer(团队资源管理器)中,打开 My Work页面,到My Code Reviews & Requests段中,双击请求。
  2. 读取意见并在必要时回复。点击Reply,在方框中输入你的意见,最后点击ok。最后,可以选择Send Comments发送。
  3. 想要查看文件或者代码块中的意见,或者编辑一个文档,去到Comments段中。在Files的字段中,打开相应文件的快捷菜单,选择Compare(read-only)或者Edit file.
  4. 当你或者其他审查者完成所有意见的回复后,并且你也准备好关闭审查,单击Close Review,然后你可以选择以下两者之一:
    a. Complete:只是审查结束
    b. Abandon:退出审查。

8、修正代码

阅读了 Julia 的评论后,Peter 按照她的建议修复了他的单元测试。测试失败,这显示了代码仍不正确。
Peter再次修正代码:

/// <summary>
/// Returns true if two numbers are equal.
/// </summary>
public static bool EqualTo(double a, double b)
{
    // Allow for rounding errors.
    const double allowedErrorMultiple = 1/1000000;
    double allowedError = (System.Math.Abs(a) + System.Math.Abs(b)) * allowedErrorMultiple/2;
    return System.Math.Abs(a - b) < allowedError;
}

现在,测试再次通过:
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

Peter 现在将注意力转向发现错误的测试用例。 在测试用例工作项中清楚地描述了重现错误的步骤。 他按照步骤操作,发现发票已正确列出。

9、迁入代码

Peter 迁入了代码和单元测试用例。 bug的状态会自动设置为Resovled,并且“Assigned To ”的值自动分配给发现错误的测试人员。该测试人员将验证这个bug是否修复并关闭该工作项。
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

  1. 在Team Exporer(团队资源管理器)中,打开 My Work页面,点击 Check In。
  2. 检查Pending Changes页的内容,确保:
    a. 所有相关变更均已罗列在Included Changes
    b. 所欲相关工作项均已罗列在Related Work Items.
  3. 指定注释以帮助团队在查看版本控制线时,能够理解代码变更的原因。
  4. 点击 Check In(迁入).

10、重新恢复先前工作

Peter恢复了先前的工作。他可以迅速进入到先前工作,因为之前代码变更已经在他的工作空间中恢复了,与之一起恢复的还有诸如断点、监视变量、打开窗口等各项重要的状态位。
使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

  1. 在Team Exporer(团队资源管理器)中,打开 My Work页面,找到 Suspended & Shelved Work列表。打开某一项的快捷菜单,你可以:
    a. 如果要恢复暂停的工作并自动暂停工作区中的任何待定更改,请选择Resume(恢复)。
    b. 如果要将挂起的工作与工作区中已有的挂起更改合并,请选择Merge with In Progress(与正在进行的合并)。

当你恢复你的工作以后,vs将恢复:

  1. 打开的解决方案
  2. 代码更改
  3. 打开窗口的位置和状态
  4. 断点
  5. 监视窗口变量和表达式
  6. 书签

使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查

上一篇:devops系列四:windows下Jenkins-发布测试版本


下一篇:JFrog 收购 Vdoo 以提供从开发到设备的端到端持续安全