项目已经有了一定规模了,现在团队开始关注测试。
现在我们想制定一些团队规范:
请有经验的大牛分享一下经验
什么时候需要增加测试
当你敲完rails new **
后,当然你也可以严格按照 TDD
什么时候需要修改测试,什么时候不需要修改测试(关于测试质量)
当测试不通过的时候。
如何审查测试
有新代码修改必须附带测试,否则 ignore。 我一般除了 view 不写测试 (有集成测试),其它尽量都覆盖。
一开始写测试可能有点慢,但熟练后就很快了。 写不写测试更多和团队氛围有关,大家都写,你自然会写。
这个话题内容很多。从工具的角度来说,可以考虑上 rails_best_practices,先从代码质量入手。 https://github.com/railsbp/rails_best_practices 单元测试要看程序员的积累,练习加实践是最好的。这里测试的目的有两个:
集成测试,什么白盒,黑盒,看团队规模。太小,就用 rails 自己生成的框架去写。如果团队有专人做 QA,那就让他们去折腾吧。有团队喜欢用 python,bash 去做。
其实可以反思一下这个标题——“什么时候需要增加测试?”,乍一看很奇怪,合格的工程师都要对自己的工作进行测试,所以无所谓增加测试,这个问题要问的其实是“什么时候需要增加自动化
测试”
这么一想你就明白了,所有的自动化工作都可以这么归纳——“当人肉成本不足的时候就进行自动化”
所以首先严格要求团队成员通过测试确保质量,然后培训或者提醒他们——测试的手段包括自动化
,其它事情由开发人员决定就可以了,当他发现回归测试是一个噩梦的时候,合格的程序员自然会添加自动化的工作
具体落实起来要多考虑一个因素,有些事情不做不是因为不重要,而是人手不足,此时考虑自动化吧
注意:我并没有去可以扣字眼,如果有冒犯之处,请之言。我们是讨论技术,不必客气。
@fsword 跑题了,请不要扩展话题而不讲实际问题。楼主问“什么时候需要增加测试”,你在 20 楼回答“实际上,要提高自动化测试的 IOR,先要问问它是干什么用的,我的建议是换一下思路” 。what's up? 你把问题直接扩展了,“自动化测试”完全和“什么时候需要增加测试”是不对路的回应。难道我理解有误。
@zlx_star 前面@knwang 已经提供了很好的参考 .观点已经很明确: 1.没有借口,开项目就要写测试,不会写,可以学高手的代码。向高手请教。 2.没有借口,直接去做测试的事情。 3.没有借口,直接去做测试的事情。 4.没有借口,直接去做测试的事情。
》》我的意思是:找出几种特殊的情况下,我们明确表示需要添加测试。
假设你现在你系统没有明显的错误和漏洞 - 如果有就没什么说的先堵漏洞 - 那么增加测试的过程就是减少风险的过程,所以要看系统里面哪些地方需要防范风险,或者风险较大。减少风险的结果就是象@fsword 说的,对系统的质量放心。
一些我能想到的供你参考,重要性按顺序
涉及到付费的 - 有钱出现的地方不仅要测试而且要大量测试。从 Unit 到 Functional 到 端到端 的 Integration。不仅要保证正面情况的工作性,而且要对所有可能发生的错误情形进行合适处理;能想到的边角情况都要测试。
核心业务逻辑 - 这些的变化往往会波及系统的多个部分。一定要用测试包裹,来及早应对处理
和第三方集成的 - 主要目的是回归,因为你无法控制别人接口的可能变化
系统里面容易变化的地方 - 你们应该有感觉哪些部分的代码相对稳定,哪些部分总需要改变。对变化大的地方及其周边加强测试
系统里有多个 object 协作的地方 - objects 状态的变化很容易在这地方造成出错。当然,这些地方也是你最需要重构的地方。
代码晦涩,难以理解,没人敢碰的地方 - 晦涩的代码往往因为程序员经验不足没有选择正确的 abstraction. 增加测试是重构这些地方的第一步
很多 conditional 的地方 - 很多的 if, case, 等等;这是复杂逻辑的体现
多行连续的地方 - 如果有 conditional, 往往表明需要进一步得掰开;即使已有测试也往往覆盖不足
在增加测试的过程中,你往往会发现测试会给你明确的重构信号,有了测试覆盖后就大胆出手把。
最后,新写的代码会象@xds2000 说的测试先行对吧
Enjoy.
这两天 DHH 的一个 tweet,是 kent beck 回复的 stackoverflow 上面的一个问题。 http://stackoverflow.com/questions/153234/how-deep-are-your-unit-tests
讲的很好,特别是能打破一些人对 TDD 的迷信。 意思和@knwang 差不多,但对 TDD 动机的描述更清晰一些。