使用Azure Devops(TFS)编写代码:挂起工作,修正bug以及进行代码审查
作者:互联网
目录
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
其中微软的开发的Devops产品叫Azure DevOps(之前叫TFS).
Azure DevOps 为支持团队提供开发人员服务,用于计划工作、开发代码开发以及生成和部署应用程序。它提供的集成功能可通过 web 浏览器或 IDE 客户端访问,分为几下几个独立的功能服务:
- Azure Repos:提供了 Git 存储库或 TEAM FOUNDATION 版本控制 (TFVC) 来控制代码的源代码。
- Azure Pipelines: 提供了生成和发布服务,以支持应用程序的持续集成和交付。
- Azure Boards:提供了一套敏捷工具,用于支持使用看板和 Scrum 方法规划和跟踪工作、代码缺陷和问题。
- Azure Test Plans:提供了多种工具来测试应用,包括手动/探索测试和持续测试。
- 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的团队资源管理器中:
- 连接:确保已经连接到相关工程;然后点击Home图标,选择“我的工作”页。
- Suspend当前任务:
a. 在In Progress Work(正在进行的工作)段中,选择Suspend
b. 在出现的方框中,指定你想挂起(suspend)工作集的名称,然后选择Suspend按钮。 - 开始一项新工作:
a. 在选择新工作之前,你可能想要:
通过Available Work Items(可用工作项)中的New按钮创建一个新任务或者其他工作项;
在Available Work Items(可用工作项)中打开一个新的查询。
b. 从Available Work Items(可用工作项)拖动一个任务到 In Progress Work正在进行的工作)。
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));
}
运行后,果然出错。
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;
}
现在,单元测试通过了:
5、请求代码审查
修复代码后,Peter没有着急迁入(check in)。他所在团队为了提高整体代码质量、同时防止产生新的bug,要求对代码进行审查。
- 在Team Exporer(团队资源管理器)中,打开“My Work”页,选择“请求评审”.此时出现New Code Review页面。
- 指定一个或者多个评审人
- 指定评审名称
- 指定评审区域路径
- 指定一段说明给评审人
- 点击提交请求。
评审人会通过邮件接收到这个通知。
6、接受或者拒绝代码审查
Julia收到了代码审查请求并接受了它。她审查了代码,在文件和代码块层面写了一些意见,然后发回给Peter。Adam太忙拒绝了代码审查工作。
- 在Team Exporer(团队资源管理器)中,打开 My Work页面,到My Code Reviews & Requests段中,打开请求。
- 在Code Review页面,你可以:
a. 选择Accept(接受)或者Decline(拒绝)代码评审。
b. 选择 Add Reviewer(增加评审人)去增加评审人。
c. 查看每个有更改的文件
d. 和代码作者以及其他评审人交换意见:可以选择Add Overall Comment,或者选择代码块右键从快捷菜单选择Add Comment;最后,选择Send Comments将意见发送给作者或者其他评审者。 - 选择 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的审查意见。
- 在Team Exporer(团队资源管理器)中,打开 My Work页面,到My Code Reviews & Requests段中,双击请求。
- 读取意见并在必要时回复。点击Reply,在方框中输入你的意见,最后点击ok。最后,可以选择Send Comments发送。
- 想要查看文件或者代码块中的意见,或者编辑一个文档,去到Comments段中。在Files的字段中,打开相应文件的快捷菜单,选择Compare(read-only)或者Edit file.
- 当你或者其他审查者完成所有意见的回复后,并且你也准备好关闭审查,单击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;
}
现在,测试再次通过:
Peter 现在将注意力转向发现错误的测试用例。 在测试用例工作项中清楚地描述了重现错误的步骤。 他按照步骤操作,发现发票已正确列出。
9、迁入代码
Peter 迁入了代码和单元测试用例。 bug的状态会自动设置为Resovled,并且“Assigned To ”的值自动分配给发现错误的测试人员。该测试人员将验证这个bug是否修复并关闭该工作项。
- 在Team Exporer(团队资源管理器)中,打开 My Work页面,点击 Check In。
- 检查Pending Changes页的内容,确保:
a. 所有相关变更均已罗列在Included Changes
b. 所欲相关工作项均已罗列在Related Work Items. - 指定注释以帮助团队在查看版本控制线时,能够理解代码变更的原因。
- 点击 Check In(迁入).
10、重新恢复先前工作
Peter恢复了先前的工作。他可以迅速进入到先前工作,因为之前代码变更已经在他的工作空间中恢复了,与之一起恢复的还有诸如断点、监视变量、打开窗口等各项重要的状态位。
- 在Team Exporer(团队资源管理器)中,打开 My Work页面,找到 Suspended & Shelved Work列表。打开某一项的快捷菜单,你可以:
a. 如果要恢复暂停的工作并自动暂停工作区中的任何待定更改,请选择Resume(恢复)。
b. 如果要将挂起的工作与工作区中已有的挂起更改合并,请选择Merge with In Progress(与正在进行的合并)。
当你恢复你的工作以后,vs将恢复:
- 打开的解决方案
- 代码更改
- 打开窗口的位置和状态
- 断点
- 监视窗口变量和表达式
- 书签
标签:审查,代码,Work,Devops,error,Azure,Peter,bug 来源: https://blog.csdn.net/mary288267/article/details/118385051