如何确保开发人员对其代码进行单元测试

时间:2009-02-05 20:39:49

标签: unit-testing tdd

如何确保团队中的所有开发人员都对其代码进行单元测试?代码覆盖率指标是我能够客观地衡量这一点的唯一方法。还有另一种方式吗?

(当然,如果你真的关注TDD,那么这不应该是一个问题。但是,让我们假设你有一些开发人员还没有“获得”TDD。)

11 个答案:

答案 0 :(得分:12)

这可能是一个社会问题而不是技术问题。首先,您是否希望单元测试能够实现100%的代码覆盖率,或者您是否能够满足更少的需求,并且相信您的开发人员可以在真正重要的地方进行单元测试,以及它们有意义的地方。您可能会使用某种类型的系统进行代码覆盖测试,以确保单元测试覆盖一定比例的代码。但是,仍然有办法游戏系统。它仍然不会导致无错误的代码。由于停止问题之类的问题,我们无法覆盖代码中的任何路径。

答案 1 :(得分:6)

在构建过程中自动运行测试覆盖率报告。我们使用CruiseControl执行此操作。否则,您必须实际检查测试结果报告中的测试内容。

答案 2 :(得分:3)

代码覆盖率工具几乎肯定优于您可以提出的任何临时方法。这就是他们存在的原因。

即使是获得TDD的开发人员也远远不能免受覆盖范围的影响。通常,修复错误的代码会破坏横向测试或创建原始开发人员没有预料到的分支,维护开发人员没有意识到这是新的。

答案 3 :(得分:2)

编写测试的好方法是增加问责制。如果开发人员必须向其他人解释为什么他们没有编写单元测试,他们更有可能这样做。我工作的大多数公司要求在提交之前由另一个开发人员审查任何建议的主干提交,并且审阅者的名称应包含在提交注释中。在这种环境中,您可以告诉您的团队他们不应该允许代码“通过”同行代码审查,除非进行单元测试。

现在你有责任链。如果开发人员在没有命名审阅者的情况下提交代码,您可以询问谁审核了代码(并且,当我学到了很难的方法时,当被问到这个问题并不好玩时,不得不向老板说“无人”!)。如果您确实意识到在没有单元测试的情况下提交了代码,您可以向开发人员询问代码审阅者为什么不包含单元测试。被问到这个问题的可能性鼓励代码审查员坚持单元测试。

您可以采取的另一个步骤是在您的版本控制系统中安装一个提交挂钩,在提交时通过电子邮件发送整个团队,以及文件甚至是构成提交的代码。这提供了高度的透明度,并进一步鼓励开发人员“遵守规则”。当然,只有当它扩展到你的团队每天提交的次数时,这才有效。

这更像是一种心理解决方案,而不是技术解决方案,但在管理软件团队时,它对我来说效果很好。它比另一个答案中建议的橡胶软管更温和一些。 : - )

答案 4 :(得分:1)

这里我们只有一个测试文件夹,其中包含一个镜像实际代码的包结构。要签入一个类,策略声明它必须有一个附带的测试类,并指出每个方法需要测试的方法和方法。 (示例:我们不需要测试纯粹的getter和setter)

快速浏览一下测试文件夹会显示课程缺失的时间,并且可以使用橡胶软管(或根据您的政策)殴打有问题的人。

答案 5 :(得分:1)

进入并更改随机变量或在某处传递null,您应该会看到一堆红色。 = d

答案 6 :(得分:1)

这样做的一种方法是编写脚本搜索术语'test'或'testfixture'的所有签到(显然取决于您的环境)。如果有一个提交日志或发送给管理员的电子邮件,说明所做的详细更改,那么使用您喜欢的文本处理语言扫描代码文件以获取单元测试的迹象(Assert关键字)是微不足道的可能是最好的选择)。

如果没有单元测试,那么在下一次代码审查期间,请举一个最近签到的示例,并花十分钟谈论可能出现的“出错”方式,以及单元测试的方式发现错误更快。

答案 7 :(得分:0)

让他们定期提交报告或某种单位测试结果的屏幕截图。他们可以伪造它(更可能花费更多时间而不是实际进行测试)或者实际执行它们。

最后,您将了解那些没有进行测试的人,他们将是那些容易被单元测试捕获的错误的人。

答案 8 :(得分:0)

问题在于社交和技术问题。如果您的开发人员“还没有”获得'TDD,那么帮助他们了解TDD的好处可能是一个更好的长期解决方案,而不是技术措施“让”他们编写测试,因为它是必需的。不情愿的开发人员可以轻松编写符合代码覆盖标准的测试,但却不是有价值的测试。

答案 9 :(得分:0)

这里应该提到的一件事是你需要一个定期运行单元测试的系统。它们应该是您的登记手册或夜间构建系统的一部分。仅仅确保单元测试的编写并不能确保您从中获得价值。

答案 10 :(得分:0)

坐下来观察他们做了什么。如果他们不进行单元测试,请轻轻提醒他们。