术语:CL ,是 Change List 的缩写,代表一次代码变更的集合。
为什么 CL 一定要小
代码评审得更快。对于评审者来说,与预留出 30 分钟的时间来评审一个大段 CL 相比,找到 5 分钟的时间来评审一小段 CL 要容易得多。 评审得更彻底。如果是一个很大的 CL ,评论者和作者往往会面对大量的详细评论感到沮丧,有时甚至会出现非常重要的观点被遗漏的情况。 不太可能引入bug。因为小的 CL 内容少,所以作者和评审者都更容易有效地分析 CL 的影响,并查看是否引入了bug。 如果这个 CL 被拒绝,浪费的工作就更少。如果作者写了一个巨大的 CL ,而评审员却认为:CL 的总体修改方向就是错的,那么,作者可能就浪费了很多工作。 CL 更容易合入。一个大的 CL ,需要写很长时间,如果在此期间有很多人提交了代码,那么作者在合并时会有很多冲突,而且必须经常做合并操作。 更容易得出好的代码设计。改进一个小的 CL 的设计和代码健康状况,要比改进一个大 CL 的所有细节容易得多。 减少阻塞,保持工作的连续性。如果这个 CL 是一个完整自包含的原子任务,当你提交评审后,等待评审意见时,你仍旧可以继续下一个原子任务。 让回滚更简单。如果一个 CL 较大,可能改动了较多的文件。当出现问题需要回滚时,我们很可能遇到的一个情况,即:这个大 CL 涉及多个文件,而这些文件在最初的 CL 和要回滚的 CL 之间,还被很多 CL 修改过。这会使回滚操作变得更加复杂(中间的 CL 可能也需要回滚)。
CL 要小到什么程度
据调查报告显示,每小时最多可以评审 500 行代码,而一次 CR 最好少于 400 行,更容易最大化收益。


如何正确地缩减 CL 的大小
一般来说,CL的正确大小是一个独立的变化。这意味着:
每个 CL 只做了一个非常小的改变,只解决了一件事。 它通常只是一个特性的一部分,而不是一次完成整个特性。CL 太小和太大都不好。你要和你的团队一起,找出一致可接受的尺寸。 CL应包括相关的测试代码。如果这个 CL 的确无法加入自动化测试,则需要在提交信息中写上 TestPlan,以便评审者更容易理解。 评审者需要了解关于本次 CR 的所有内容都在这个 CL 、CL 的描述、现有的代码库,或他们已经评审过的CL中。 在本次 CL 合入到代码库以后,不应该破坏系统的正常构建和执行,以便其他开发人员可以正常工作。如果 CL 被部署到生产环境,那么它也不应该给用户带来麻烦。 不能为了保证 CL 的小而让代码难以被评审者难以理解。如果你添加了一个新的 API ,那么就应该在同一个 CL 中包含这个 API 的用法,以便评审者能够更好地理解 API 的使用方式。这还可以防止合入未使用的 API 。
在什么情况下,大的 CLs 是被允许的?
如果你将某个文件完全删除了,那么即使它有 1000 行代码,你也可以把它看作是 1 行。因为,评审者并不会花很长时间去评审这个被删除的文件的内容。 有时候,由一个你完全信任的自动重构工具自动生成了一个大的CL,而评审者的只需要验证说它们真的就是该任务想要的变更。这种自动化生产的 CLs 可以更大一些。当然,一定要记住,上面提到的那些要求(比如合并和测试)仍然适用。
如何让 CLs 以正确的方式变小
拆分文件
将重构与新增和修复分离
实在无法让 CLs 更小,怎么办?
其它注意事项
不要让构建失败
CL 应该包含与其相应的测试代码
使用新的测试用例验证预先存在的、已提交的代码。 确保重要的逻辑被测试覆盖。 增加对受影响代码的后续重构的信心。例如,如果要重构那些没有测试用例覆盖的代码,则在提交重构 CLs 之前,先提交测试 CLs,以验证重构前后测试行为是否保持不变。 重构测试代码(例如引入 helper 函数)。 引入更大的测试用例(例如集成测试)。
文章转载自持续交付2.0,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




