三个月以前,加入了一个大型系统的开发团队。自此也没有更新过blog了,一晃几个月,今天来谈一谈自身的感言。
在一本十年前的书籍“Large-Scale C++ Software Design”中, John Lokas 阐述了一些关于大型系统开发的一些实践问题。其中重要的一点就是软件构建所需要花费的的时间。在此之前我并没有对此有什么真正的印象,然而在现在的项目里,确着实让我吃惊了一下。
在Joel on Software中,Joel 建议在每天吃中饭时,完成代码同步和构建。可是你每一次构建需要10+小时时,你该怎么办。
为什么我们的团队需要这么长的时间进行构建?
1. 代码量大。人多。 (废话)
2. 需要build 32bit 和 64bit 两套binary.
3. 在build源代码的同时还要build测试, 并且运行一系列基本的单元和功能测试。(这只是部分测试)
在开发流程中,每个开发者必须能够完成这一构建过程并通过所有测试才能提交代码。所以,这个痛苦的过程是每个开发者都无法避免的。这个时候,每个开发者面临两难的选择:
每日同步,意味着你可能花费大量时间在同步上。那好,我可以每天下班的时候进行这一步,可是如果有哪怕那么一点点错误让你的build失败,那么第二天当你打开电脑时,这一天你可能就要花在修复这个错误上,记住修复这个错误只需要一分钟,可重新build至少是一个上午。即使只是试图build你开发所需要的部分。
不同步,直到我准备提交代码。可是那时你可能要面对大量的conflict必须要手工合并。稍有差池,你可能要面对几百人的怒火:因为你break了他们的build.
所以,实践中你可以放在周末进行同步了。在这样的环境下,我认为有几个必需的部分:这样你可以星期五下班的时候开始,然后星期六看一看结果,修复错误。重新build。开发者在这样的环境里需要:
1. 好电脑。这决定了build一次的时间。在我的intel core 2 duo 上的构建速度是AMD 64 上的一倍。
2. 一定要有远程访问公司电脑的方法。这样星期六就不用非要到公司来修复错误了。
3. 最好至少有两台开发电脑。可以一台用于构建,一台用于开发。