虚拟座谈会:代码测试比率、测试驱动开发及行为驱动开发
作者:网络转载 发布时间:[ 2012/9/26 11:05:15 ] 推荐标签:
尽管对于不同的项目,不同的团队,要具体事件具体分析,但我还是强烈地建议程序员们从集成测试和系统测试转向微测试。
Dan:我不认为对于比率的建议会行之有效,对我而言,这甚至会有风险。如果某个错误出现的可能性较高,或某个错误的影响较大,我会花更多的时间去解决。举例说明,我曾希望以测试驱动的方式编写转换数据的代码,因为我知道把转换数据搞糟是多么容易,而发现错误又是多么的困难。类似地,如果我在为系统的外围交互模块写代码,我会非常非常小心需要传送和接受的数据。一旦发现Bug,我会编写一段测试用例来隔开这个Bug,并且用测试驱动的方式去修复它。其他时候,我会用REPL(一种命令行接口的语言)来实践,并找出Bug。
Gojko:我想这个问题过于宽泛,没有一个具体的项目,我没法给你答案。
Ron:比起“把这些事情做起来”,我并没有更好的答案。运用TDD及相关的实践方法进行编码,花费的成本会更少,结果也会更好。有些人或团队认为,如果他们运用TDD,搭上的时间会更多,这也是解释得通。也许会存在一些真实的开发情况,但我并没有找到。通常来说,这些人比较简单,也并不喜欢TDD。这样做的后果是,他们认为自己会很快速,但得到的只是不停增长的缺陷数。这些缺陷必须消除,却使设计变成恶梦,反过来又增加了缺陷,使缺陷不易被发现和修复,从而拖慢整个进程,让进程变得异常困难,造成恶性循环。往往在项目后的几周,他们后只能收到坏消息。
这是“死亡行军”(译注:越做错越多,越无法收拾)。当然,有些人或产品也能侥幸“活”下来。但遗憾的是,花如此大的时间和精力“活”下来,会让团队以为,所有项目都必须这样完成。(译注:感触颇深,同时有过3个项目,我带2个,另一个PM带一个,我的项目成员几乎不用在UAT前加班,氛围也非常好;另个项目天天加班,士气低落,民不聊生)。这才是大错特错!在有更好、更简单的选择的时候,他们几乎将自己逼进绝路。
Steve:我没法给出答案,除非你已经为相同的团队搭建了可辨识的系统。敏捷方法的基本要领是对应已发生的情况。同样重要的一点是这些比例会随着项目进程而改变。
问题:除了至关重要的系统,现在似乎比较统一的说法是的测试覆盖不能作为一个目标,也是不实际的。你是否认为代码/测试比率能提升测试的注意力和效率吗?
JB:正相反,如果组织重点关注在这些目标,那么无形中创造出灾难的、会受到炮轰的“成熟模式”。你懂的:级别1表示“我们写测试”;级别2表示“我们为所有新代码写测试”;级别3表示“我们对系统做50%的覆盖”;我假设级别5表示“我测试故我在”。我认为这是没有意义的事情,我可以做这些,但结果还是交付了垃圾的产品。我觉得这是对我所教和我所崇尚的实践的一种嘲讽。
当我有我自己的“网络瞬间(Network moment)”时,我开始关心起这些事情了——你知道的,“我像个疯子,我再不会接受这些!”我尝试让人们学会有自己的“网络瞬间”,然后给他们建议如何去解决问题。我相信比起目标式的测试覆盖率,这更有效。
Dan:我认为教条式的代码测试比率恰巧有着相反的作用。这意味着所有的代码都是同等重要,具有相同的风险,这样的想法是错误的。相反,我提倡对不同的代码,采用不同关注程度及审查力度的测试。任何企图达到代码统一的测试覆盖率的机会成本都是疯狂的,特别在用户接口测试方面。把时间和精力放到改进需要重点关注的代码的质量上,会更加行之有效,立竿见影。
Gojko:只关注代码覆盖率很可笑。关注在10%的风险高的代码比关注99%可忽略风险的代码,收益要多得多。我认为风险覆盖比起测试覆盖要重要得多。我偏好使用属性构架能力矩阵(Attribute Component Capability Matrix),然后决定什么需要覆盖及怎样去覆盖。(详见James Whittaker的《How Google Tests Software》一书——译注:好书一本!)
Ron:测试覆盖率永远都不该成为我们的目标。如果我们的测试很棒,那么我们势必能找到缺陷,这是显而易见的。那缺陷还会在哪里呢?在我们没有测的地方。因此覆盖率并不需要做得美好,只要“够用”足够好了。我们需要做两件事情:
首先,我们需要不停地提升我们的测试技巧,那样我们测不到的地方会越来越少。如果我们仅仅做TDD的教条是没有意义的——“为得到失败而写测试(译注:为了找到错误而拼命地写更多的测试)”。我们会自然而然地得到完整的代码覆盖,以及很好的路径覆盖。
第二,我强烈建议团队分析测试覆盖和这类信息,这样才能更好地决定什么需要改进。人无完人,但我们必须警觉,如果发现了缺陷,那么我们需要回顾所发生的情况,补充漏掉的测试用例,保证将来不再发生。
Steve:我还是认为,在数据和划分不清楚之前,这是评价会有失。代码覆盖率有用,但作为外部的、过分强调的目标,也会影响团队应有的关注程度。

sales@spasvo.com