[转载]基于TFS实践敏捷-修复Bug和执行代码评审
本主题阐释了这些功能,以继续这一关注虚拟敏捷团队成员的一天的教程。
Peter 忙于编写一些代码以完成积压工作 (backlog) 项任务。但是,他的同事发现了一个阻碍他们工作的 Bug,他想立即修复此 Bug。 他暂停了手中的工作并修复此 Bug。 他请求 Julia 审查修复情况,并在审查后检查修复结果并恢复其初始任务。
说明 |
Peter 使用的“我的工作”和“代码评审”功能仅在 Visual Studio 高级专业版和 Visual Studio 旗舰版中可用。 |
主题内容
- 挂起当前工作并开始处理 Bug
- 调查 Bug
- 请求代码评审
- 接受并执行(或拒绝)代码评审
- 接收并响应代码评审
- 修复测试和代码
- 签入修复
- 继续处理任务
挂起当前工作
当 Peter 处理积压工作 (backlog) 项时,Julia 过来讨论困扰她的 Bug。 这是 Peter 所熟悉的区域,因此他创建了修复 Bug 的任务,并将其分配给自己。 他决定立即开始修复工作。
在 Peter 开始处理新的 Bug 前,他想确保其当前工作保留在团队服务器上的安全位置。 在“我的工作”页上,Peter 选择“挂起”进行保存(在 Team Foundation Server 上):
- 他完成的所有工作包括对代码、测试和其他文件的更改。
- 打开解决方案、窗口、断点、监视窗口变量和其他 Visual Studio 状态的位。
限制已清理工作区,Peter 将新的任务从“可用工作项”拖动到“正在进行的工作”。 他已准备好研究和编写修复。
说明 |
你的工作上下文链接到在“我的工作”页中显示为“正在进行”的工作项。 通过使用“挂起”和“继续”,可在不同的任务间快速切换。 打开的解决方案和文件、代码更改以及 Visual Studio 布局都会一起切换。 |
挂起当前工作并开始执行另一项任务
- 连接:如果尚未连接到要在其中工作的团队项目,请连接到团队项目:
- 在“团队资源管理器”中,选择“主页”,然后选择“我的工作”。
- 挂起你的当前任务:
- 在“正在进行的工作”部分中,选择“挂起”。
- 在显示的框中,指定你要为此挂起的工作集提供的名称,然后选择“挂起”按钮。 默认名称是当前正在进行的工作项。
- 开始新任务、Bug 或其他工作项上的工作:
- 在选择工作项之前,你可能需要:
- 通过选择“可用工作项”下的“新建”,创建新任务或其他工作项;或
- 在“可用工作项”下选择不同查询。
- 将工作项从“可用工作项”拖动到“正在进行的工作”。
或者,可以从“挂起的工作”项下拖出之前已挂起的工作项来切换到该工作项。
- 在选择工作项之前,你可能需要:
提示 |
当前正在进行的工作项将链接到当前代码更改和 Visual Studio 状态。 若要允许 Visual Studio 帮助你组织工作,请确保你在从一个任务切换到另一个任务时,相应的项处于“正在进行中”状态。 |
调查 Bug
Peter 打开并阅读 Bug 工作项。 根据测试团队成员编写的说明,已付款的发票有时会被错误地标记为未付款。 有一个附加到 Bug 工作项的实验室环境快照。 Peter 可以打开运行测试的虚拟机,查看错误发票和 IntelliTrace 日志。 他跟踪以下方法存在的错误:
public class LocalMath{ public static bool EqualTo(double a, double b){return a == b;}
从 IntelliTrace 日志中,Peter 发现此方法有时会因参数存在极小的差异而返回 false。 Peter 知道此类舍入误差在浮点算法中是不可避免的,同时,利用此方法测试浮点数字的相等性也较为不妥。
增加测试以显示错误
在找到 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 errorTestEqual(1, 1e-5, false); // More than allowed errorTestEqual(1000, 1e-7, true); // Less than allowed errorTestEqual(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));}
他运行了该测试,结果如预期一样以失败告终。
让测试通过
Peter 修复代码:
public static bool EqualTo(double a, double b){// Allow for rounding errors.// For example, a == 2.0 and b = 1.99999999999const double allowedError = 1/1000000;return System.Math.Abs(a - b) < allowedError;}
测试现在通过:
请求代码评审
Peter 对自己对 Bug 的修复感到满意,但是尚未签入其工作。 Peter 的团队使用代码评审来提高整体代码质量并减小因创建更多 Bug 带来的风险,因此,他使用团队资源管理器从团队同事 Julia 和 Adam 那里请求代码评审。
请求代码评审
- 在“团队资源管理器”中的“我的工作”页上,选择“请求审查”。“新代码审阅”页将出现。
指定一个或多个审阅者。
指定评审的名称。
指定区域路径。
指定审阅者的注释。
- 选择“提交请求”。
审阅者将通过电子邮件接收请求通知。
你还可以请求对挂起的工作、搁置集或变更集进行代码评审。 若要查看变更集的列表,请打开“源代码管理资源管理器”,然后选择“历史记录”按钮。
接受或拒绝代码评审
Julia 接收并接受代码评审请求。 她评审代码,并在文件和代码块级别编写注释,然后将代码评审反馈给 Peter。 Adam 太忙,无法评审代码,因此拒绝了请求。
Julia 在其注释中指出测试是错误的。 允许的误差应为输入值的指定部分,而不是常数。 因此,测试应将错误值乘以值。
// We allow a rounding error of 1 in 1000000// as a fraction of the value:TestEqual(1, 1e-7, true); // Less than allowed errorTestEqual(1, 1e-5, false); // More than allowed errorTestEqual(1000, 1000*1e-7, true); // Less than allowed errorTestEqual(1000, 1000*1e-5, false); // More than allowed error
提示 |
请注意,团队成员会将测试用作讨论焦点。 如果测试正确且足够,则代码也会如此。 与代码不同,每个测试表示单独的大小写。 因此,讨论测试通常比讨论代码更容易。 |
执行代码评审
- 在“团队资源管理器”中的“我的工作”页上,转到“我的代码评审和请求”部分并打开该请求。
- 在“代码评审”页上,你可以:
- 选择“接受”或“拒绝”以通知作者你是否将执行评审。
- 选择“添加审阅者”以将其他审阅者添加到代码审阅请求。
- 查看对每个已为此工作项更新的文件的更改。
- 展开“注释”以与作者和其他审阅者讨论更改。
- 选择“添加总体评价”
- 或 -
选择一个代码块,然后从快捷菜单中选择“添加注释”。 - 选择“发送评论”以使你的提交对作者和其他审阅者可见。
- 选择“添加总体评价”
- 选择“发送和完成”以完成审阅,指出是否需要进一步修改代码。
响应代码评审
Peter 接收并响应了来自 Julia 的代码评审。
代码的审阅者和作者可以根据需要交换注释。 作者一旦关闭评审,则评审就将结束。 每次有人参与讨论时,其他参与者都会收到电子邮件通知。
- 在“团队资源管理器”中的“我的工作”页上,转到“代码评审和请求”部分,然后双击该请求。
你还可以打开请求的快捷菜单并选择“打开”。 - 阅读评论并根据需要进行答复。 若要答复评论,请选择“答复”,在出现的框中输入你的评论,然后选择“确定”。 若要发送你的评论,请选择“发送评论”。
- 若要查看文件并查看包含注释的代码块或者要编辑文件,请转到“注释”部分。 在“文件”子节中,打开文件的快捷菜单并选择“比较(只读)”或“编辑文件”。
- 如果你和其他审阅者已回复完彼此的评论并准备关闭审阅,请单击“关闭审阅”,然后选择:
- “完成”可表明已完成审阅。
- - 或 -
- “放弃”可表明正在取消审阅。
修复测试和代码
阅读完 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;}
测试再次通过:
提示 |
若要修复此 Bug,请按照代码开发中的相同做法进行操作。 编写会失败的测试,然后设法让该测试通过。 仅在测试通过时,签入代码和测试。 |
Peter 现在将注意力转移到发现 Bug 的测试用例上。 在测试用例工作项中清楚说明了 Bug 的重现步骤。 他按照这些步骤操作,并发现已正确列出了发票。
签入修复
Peter 签入已修复代码和单元测试。 Bug 的状态自动设置为“已解决”,并且“指派给”值将自动重新分配给发现 Bug 的测试团队的成员。 该团队成员将验证 Bug 是否已修复并关闭工作项。
- 在“团队资源管理器”中,在“我的工作”页上,选择“签入”。
- 查看“挂起的更改”页的内容以确保:
- 所有相关更改都在“包含的更改”中列出
- 所有相关工作项都在“相关工作项”中列出。
- 指定“注释”以在你的团队查看已更改文件和文件夹的版本控制历史记录时助其了解这些更改的目的。
- 选择“签入”。
继续处理任务
Peter 继续处理自己的任务。 他很快就可以继续工作,因为他的所有代码更改连同重要的状态图位(如打开窗口、断点及观看窗口变量)都已还原至工作区。
继续任务中的工作
- 在“团队资源管理器”中的“我的工作”页上,查找“挂起的和搁置的工作”列表。 打开项的快捷菜单。 你有两个选择:
- 若要继续挂起的工作并自动挂起工作区中任何挂起的更改,请选择“继续”。
- 若要将挂起的工作与工作区中已挂起的更改合并,请选择“与“正在进行”部分合并”。
当你继续工作时
当你继续工作时,Visual Studio 会还原:
- 打开的解决方案
- 代码更改
- 打开的窗口的状态和位置
- 断点
- 监视窗口变量与表达式
- 书签
验证此 bug 已消失
如果测试团队发现此 bug,他们会将一些测试用例链接到此 bug,并且将重新运行它们。 了解详细信息。
博客转自:《ALM 开发人员生活中的一天:暂停工作、修复 Bug 和执行代码评审》
[转载]基于TFS实践敏捷-修复Bug和执行代码评审相关推荐
- [转载]基于TFS实践敏捷-工作项跟踪
[转载]基于TFS实践敏捷-工作项跟踪 工作项跟踪(1) 可跟踪性是软件过程的重要能力,TFS主要是以工作项来实现过程的可跟踪性.曾有人问:"你们实际项目里的工作项是怎么样的?能不能让我们看 ...
- 基于TFS实践敏捷-可视化管理
TFS是基于微软平台一套不错的系统,支持源码管理+运行调试+持续集成+自动化测试+Bug管理+代码评审+任务项管理+文档管理+沟通管理. 基于TFS 2015实践看板管理,让团队的数据可视化,让大家更 ...
- 农行基于TFS工具的敏捷转型实践
" "春天工程"项目组是应用开发二部最早采用敏捷模式的项目组,项目组在项目推进过程中使用Scrum框架,结合"看板+站会"形式,积极探索项目推进新措施 ...
- 《android基于andFix的热修复方案》思路篇
1:需求背景 项目上线之后,发现BUG需要修复(比如安卓兼容性等测试难以发现的问题),频繁的更新影响用户体验 2:方案要求 静默下载,耗费流量少,打完补丁后立刻生效,不用重启apk 3:解决思路 3. ...
- 【每周CV论文推荐】基于GAN的图像修复值得阅读的文章
欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 图像修复(补全)是一个非常基础的图像处理领域 ...
- 基于 DevOps 实践的 .NET Core 给开发者带来了哪些好处?
关键要点 \n \n \n 无论你目前使用什么样的技术栈,DevOps都是值得一试的. \n\n \n 闭源.专有软件和构建过程与DevOps实践不兼容. \n\n \n .NET Core是开源的, ...
- 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
JPress 是一个使用 Java 开发的类似 WordPress 的系统,但更加侧重于企业营销和微信运营.支持模块化和插件化二次开发,国外对标 WordPress.国内对标 微擎 . 这个版本主要是 ...
- 修复bug的12个关键步骤:
修复bug的12个关键步骤: 1.明确目的. 2.准备工作. 3.匹配测试环境. 4.明确代码的用途. 5.重现和诊断错误. 6.编写测试案例. 7.进入修复模式. 8.整理代码. 9.找别人来审查一 ...
- openstack基于mysql的问题修复
openstack基于mysql的问题修复 同事一台openstack单节点服务器由于未知原因,无法正常工作. 远程引导同事检查故障. [root@localhost ~]# nova-manage ...
最新文章
- 10、ctemplate文档,简记(3)
- 你们这行我懂,不给点好处都不接!
- 我用Python分析了“青你2”漂亮小姐姐的颜值,结果真香了!
- Testng 测试框架源码阅读(二)
- mysql中的函数有哪些?(1.数字函数)
- Python实例讲解 -- 发送邮件带附件 (亲测)
- 【C++】错误处理和异常处理
- c# 再次尝试 连接失败_手机投屏电视连接不上怎么回事?
- initrd in linux 2.6.32.27
- 几种c++字符串split 函数实现的比较
- easyui 常用的属性
- Eclipse 下html语法高亮插件——HTML Editor
- 雷石服务器可以接入电视信号吗,雷石机顶盒使用方法
- 中英文数据库检索策略对比
- 什么是骨传导耳机,骨传导耳机有什么优缺点
- (翻译)文本字段的最优显示方式
- SQL Server 创建和管理数据表
- java 有向图 最短路径算法_java使用Dijkstra算法实现单源最短路径
- mdx和mdd格式的词典解析Android JNI方式实现
- 微信小程序获取数据接口动态渲染Echarts折线图
热门文章
- 基于docker创建的Jenkins,settings.xml文件放在哪里
- django 实现电子支付功能
- 关于windows10 CMD 的一些操作
- 鸡啄米vc++2010系列2(项目文件分析)
- [Zhuan]Lua about
- 高服从编纂器 VIM-操作篇(1)
- [Leetcode][第114题][JAVA][二叉树展开为链表][递归][迭代]
- 布尔运算_3dmax教程 - 布尔运算
- oracle distinct分页优化_Oracle SQL性能优化最常用的40条建议
- 数据结构c语言版第四章题库,数据结构(C语言版)(第4版)习题