本主题阐释了这些功能,以继续这一关注虚拟敏捷团队成员的一天的教程。

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 布局都会一起切换。

挂起当前工作并开始执行另一项任务

  1. 连接:如果尚未连接到要在其中工作的团队项目,请连接到团队项目
    1. 在“团队资源管理器”中,选择“主页”,然后选择“我的工作”。
  1. 挂起你的当前任务:
    1. 在“正在进行的工作”部分中,选择“挂起”。
    2. 在显示的框中,指定你要为此挂起的工作集提供的名称,然后选择“挂起”按钮。 默认名称是当前正在进行的工作项。
  2. 开始新任务、Bug 或其他工作项上的工作:
    1. 在选择工作项之前,你可能需要:
      • 通过选择“可用工作项”下的“新建”,创建新任务或其他工作项;或
      • 在“可用工作项”下选择不同查询。
    2. 将工作项从“可用工作项”拖动到“正在进行的工作”。
      或者,可以从“挂起的工作”项下拖出之前已挂起的工作项来切换到该工作项。

提示

当前正在进行的工作项将链接到当前代码更改和
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(, 1e-, true); // Less than allowed error
TestEqual(, 1e-, false); // More than allowed error
TestEqual(, 1e-, true); // Less than allowed error
TestEqual(, 1e-, 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.99999999999 const double allowedError = /;
return System.Math.Abs(a - b) < allowedError;
}

测试现在通过:

请求代码评审

Peter 对自己对 Bug 的修复感到满意,但是尚未签入其工作。 Peter 的团队使用代码评审来提高整体代码质量并减小因创建更多 Bug 带来的风险,因此,他使用团队资源管理器从团队同事 Julia 和 Adam 那里请求代码评审。

请求代码评审

  1. 在“团队资源管理器”中的“我的工作”页上,选择“请求审查”。“新代码审阅”页将出现。
  2. 指定一个或多个审阅者。
  3. 指定评审的名称。
  4. 指定区域路径。
  5. 指定审阅者的注释。
  6. 选择“提交请求”。

审阅者将通过电子邮件接收请求通知。

你还可以请求对挂起的工作、搁置集或变更集进行代码评审。 若要查看变更集的列表,请打开“源代码管理资源管理器”,然后选择“历史记录”按钮。

接受或拒绝代码评审

Julia 接收并接受代码评审请求。 她评审代码,并在文件和代码块级别编写注释,然后将代码评审反馈给 Peter。 Adam 太忙,无法评审代码,因此拒绝了请求。

Julia 在其注释中指出测试是错误的。 允许的误差应为输入值的指定部分,而不是常数。 因此,测试应将错误值乘以值。

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

提示

请注意,团队成员会将测试用作讨论焦点。 如果测试正确且足够,则代码也会如此。 与代码不同,每个测试表示单独的大小写。 因此,讨论测试通常比讨论代码更容易。

执行代码评审

  1. 在“团队资源管理器”中的“我的工作”页上,转到“我的代码评审和请求”部分并打开该请求。
  2. 在“代码评审”页上,你可以:
    • 选择“接受”或“拒绝”以通知作者你是否将执行评审。
    • 选择“添加审阅者”以将其他审阅者添加到代码审阅请求。
    • 查看对每个已为此工作项更新的文件的更改。
    • 展开“注释”以与作者和其他审阅者讨论更改。
      • 选择“添加总体评价
        - 或 -
        选择一个代码块,然后从快捷菜单中选择“添加注释”。
      • 选择“发送评论”以使你的提交对作者和其他审阅者可见。
    • 选择“发送和完成”以完成审阅,指出是否需要进一步修改代码。

响应代码评审

Peter
接收并响应了来自 Julia 的代码评审。

代码的审阅者和作者可以根据需要交换注释。
作者一旦关闭评审,则评审就将结束。 每次有人参与讨论时,其他参与者都会收到电子邮件通知。

  1. 在“团队资源管理器”中的“我的工作”页上,转到“代码评审和请求”部分,然后双击该请求。

    你还可以打开请求的快捷菜单并选择“打开”。
  2. 阅读评论并根据需要进行答复。
    若要答复评论,请选择“答复”,在出现的框中输入你的评论,然后选择“确定”。 若要发送你的评论,请选择“发送评论”。
  3. 若要查看文件并查看包含注释的代码块或者要编辑文件,请转到“注释”部分。
    在“文件”子节中,打开文件的快捷菜单并选择“比较(只读)”或“编辑文件”。
  4. 如果你和其他审阅者已回复完彼此的评论并准备关闭审阅,请单击“关闭审阅”,然后选择:
    • 完成”可表明已完成审阅。
    • - 或 -
    • 放弃”可表明正在取消审阅。

修复测试和代码

阅读完 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 = /;
double allowedError = (System.Math.Abs(a) + System.Math.Abs(b)) * allowedErrorMultiple/;
return System.Math.Abs(a - b) < allowedError;
}

测试再次通过:

提示

若要修复此 Bug,请按照代码开发中的相同做法进行操作。 编写会失败的测试,然后设法让该测试通过。 仅在测试通过时,签入代码和测试。

Peter 现在将注意力转移到发现 Bug 的测试用例上。 在测试用例工作项中清楚说明了 Bug 的重现步骤。 他按照这些步骤操作,并发现已正确列出了发票。

签入修复

Peter 签入已修复代码和单元测试。 Bug 的状态自动设置为“已解决”,并且“指派给”值将自动重新分配给发现 Bug 的测试团队的成员。 该团队成员将验证 Bug 是否已修复并关闭工作项。

  1. 在“团队资源管理器”中,在“我的工作”页上,选择“签入”。
  2. 查看“挂起的更改”页的内容以确保:
    • 所有相关更改都在“包含的更改”中列出
    • 所有相关工作项都在“相关工作项”中列出。
  3. 指定“注释”以在你的团队查看已更改文件和文件夹的版本控制历史记录时助其了解这些更改的目的。
  4. 选择“签入”。

继续处理任务

Peter 继续处理自己的任务。 他很快就可以继续工作,因为他的所有代码更改连同重要的状态图位(如打开窗口、断点及观看窗口变量)都已还原至工作区。

继续任务中的工作

  • 在“团队资源管理器”中的“我的工作”页上,查找“挂起的和搁置的工作”列表。 打开项的快捷菜单。 你有两个选择:
    • 若要继续挂起的工作并自动挂起工作区中任何挂起的更改,请选择“继续”。
    • 若要将挂起的工作与工作区中已挂起的更改合并,请选择“正在进行部分合并”。

当你继续工作时

当你继续工作时,Visual
Studio 会还原:

  • 打开的解决方案
  • 代码更改
  • 打开的窗口的状态和位置
  • 断点
  • 监视窗口变量与表达式
  • 书签

验证此 bug 已消失

如果测试团队发现此
bug,他们会将一些测试用例链接到此 bug,并且将重新运行它们。 了解详细信息。

博客转自:《ALM开发人员生活中的一天:暂停工作、修复Bug和执行代码评审

[转载]基于TFS实践敏捷-修复Bug和执行代码评审的更多相关文章

  1. [转载]基于TFS实践敏捷-项目管理

    最近,一直想让团队加入敏捷开发,但TFS2010用下来,并不是令人满意,还好,TFS2012横空出世了.相比TFS2010,TFS2012改进太多了,主要体现在以下方面: Team Web Acces ...

  2. [转载]基于TFS实践敏捷-实现用户场景

    您是新用户的 Visual Studio 应用程序生命周期管理 (ALM) 和 Team Foundation Server (TFS) 吗? 您想知道如何您和您的团队可以获得最大受益的这些工具来生成 ...

  3. [转载]基于TFS实践敏捷-工作项跟踪

    工作项跟踪(1) 可跟踪性是软件过程的重要能力,TFS主要是以工作项来实现过程的可跟踪性.曾有人问:"你们实际项目里的工作项是怎么样的?能不能让我们看看?"我也一直很好奇别的公司T ...

  4. [转载]基于TFS实践敏捷-Scrum模式运用

    根据Forrester Research今年第二季度的一份研究报告,在超过1000名专业开发人员中,采用敏捷模式进行软件开发的已经有10.9%采用了Scrum模式,在所有的敏捷开发模式中名列首位,而在 ...

  5. 基于TFS实践敏捷-可视化管理

    TFS是基于微软平台一套不错的系统,支持源码管理+运行调试+持续集成+自动化测试+Bug管理+代码评审+任务项管理+文档管理+沟通管理.基于TFS 2015实践看板管理,让团队的数据可视化,让大家更多 ...

  6. [转载]基于Redis的Bloomfilter去重(附Python代码)

    前言: “去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比较大.去重需要考虑两个点:去重的数据量.去重速度.为了保持较快的去重速度,一般选择在内存中进行去重. 数据量不大时 ...

  7. 基于TFS的.net技术路线的云平台DevOps实践

    DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. 说DevOps,不得不说DevOps的具体含义.那么,D ...

  8. 敏捷开发中高质量 Java 代码开发实践

    Java 项目开发过程中,由于开发人员的经验.代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入 和周期等问题. 这些问题在一个项目组初建.需 ...

  9. 敏捷测试(6)--基于story的敏捷基础知识

    基于story的敏捷基础知识----需求管理(三) (3)每日站会 站会的目的有三个: (1)周知进度 仅从用户故事和任务的层面周知进度,任务进度只有两种状态:完成或未完成(完成百分比). (2)周知 ...

随机推荐

  1. Eclipse安装与配置

    http://www.th7.cn/Program/java/201307/144477.shtml http://www.eclipse.org/ 我们下载J2EE版本:Eclipse IDE fo ...

  2. 利用html5 canvas实现纯前端上传图片的裁剪

    今天跟大家分享一个前端裁剪图片的方法.许多网站都有设置用户头像的功能,用户可以选择一张本地的图片,然后用网站的裁剪工具进行裁剪,然后设置大小,位置合适的头像.当然,网上也有一些用js写的诸如此类裁剪的 ...

  3. Linux环境下查看历史操作命令及清除方法

    在Linux环境中可以通过方向键的上下按键查看近期键入的命令.但这种方法只能一个一个的查看,其实系统提供了查看所有历史命令的方法. 在终端中输入以下命令查看所有命令: history [root@te ...

  4. maven配置阿里云镜像

    编辑%maven_home%/conf/settings.xml文件,添加 <mirror> <id>aliyun-maven</id> <mirrorOf& ...

  5. webapi 中使用 protobuf

    相比json来说,好处是速度更快,带宽占用更小.其效果大致等于json+Gzip. 在webapi中使用protobuf的方法为: 引用nuget包 Install-Package protobuf- ...

  6. C#更改文件访问权限所有者(适用于各个Windows版本)

    前面也提到了,前段时间在做Online Judge系统,在正式上线前有几个比较老的版本,其中第一个版本使用ACL来控制权限以确保安全(但是这个版本完全建立在IIS上,所以这样做是没效果的),遇到了一些 ...

  7. Windows Azure 服务器时间问题

    最近一直在做学校的一个小项目,前期在没有服务器端的情况下意淫做出来了手机客户端.在寒假里使用ASP.NET快速做了一个网站并且设计好了需要使用其他内容,在Windows Azure上测试评估,为学校的 ...

  8. 图解js中常用的判断浏览器窗体、用户屏幕可视区域大小位置的方法

    有时我们需要获得浏览器窗口或屏幕的大小.窗口下拉框下拉的距离等数据,对应这些需求,js中提供了不少解决方法,只是数量稍多容易混淆它们各自的意义,下面咱们用图例来解释下12个常见对象属性的作用. 其中有 ...

  9. [自己动手玩黑科技] 1、小黑科技——如何将普通的家电改造成可以与手机App联动的“智能硬件”

    NOW, 步 将此黑科技传授予你~ 一.普通家电控制电路板分析 普通家电,其人机接口一般由按键和指示灯组成(高端的会稍微复杂,这里不考虑) 这样交互过程,其实就是:由当前指示灯信息,按照操作流程按相应 ...

  10. 让C#轻松实现读写锁分离--封装ReaderWriterLockSlim

    ReaderWriterLockSlim 类 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问. 使用 ReaderWriterLockSlim 来保护由多个线程读取但每次只采用一 ...