软件工程重要技术——每日构建
每日构建(Daily Build)是软件开发的重要的技术措施,从每日构建出发可以带动一连串有效的、科学的软件开发技术措施的落实。
每日构建,顾名思义,就是每日将正在开发的程序构建(将模块check in 并编译)成为可以执行的软件一次。从软件开始设计的第一天就开始,也就是从哪怕只有一句“Hello world”的屏幕输出开始(“Hello world”通常是学习软件编程的最简单的入门例子,在屏幕上显示“Hello world”)就进行每日构建。每日构建出来的是一个可测的版本(或补丁),测试团队在这个基础上进行测试。每日构建另一种说法是每晚构建(Nightly Build),道理和原则是一样的,只是由于很多时候白天开发紧张,机器等资源受限,以及时间的有效利用等原因,将构建的工作安排在白天工作结束之后进行,所以称为每晚构建。
每日构建是微软等著名软件公司软件开发的秘诀之一。从WINDOWS平台的“我的电脑”的属性进入,就可以看到“Microsoft Windows 2000 5.00.2195”一类的版本标识,其中2195就是每日构建的构建号。
每日构建的好处大致可以归纳如下:
每日构建的意义在于使模块得以及时整合和进行测试,通过编译链接来检查进度、检查接口、发现进展中的问题、大家互相鼓励互相监督,提高协同工作的效率。
最为重要的还并不在每日构建这一技术本身,而在于这一方法带动了软件开发的其它有效的工程技术手段的落实。以目前世界上甚为推崇的敏捷开发、极限编程等的软件开发技术为例,新技术中所提倡的测试驱动开发(TEST-DRIVEN DEVELOPMENT)、持续集成(CONTINUOUS INTEGRATION)、频繁发布小版本(SMALL RELEASE)、每日晨会(DAILY MEETING)实质上都与每日构建直接相关。更深层次的,由于这种“日清日结”的开发方式增加了交流的频次,加强了成员之间的沟通,实现了现代软件开发理论所强调的“使团队开发就像一个人似的”。客观上也有助于减少加班的可能,像XP(极限编程)所提倡的“一周40小时”的模式。
每日构建的重要性,就像微软Visual C++部门经理Jim McCarthy在《Dynamics of Software Development》一书中写到的,“每日构建是软件项目的心跳,如果心跳停止,这个项目就死了”。
在实践中,每日构建碰到的最大的阻力或理由是,“我不可能每天都有东西提交出来”。其实,每日构建并不是绝对的要求每个人每天都必须有编好的程序提交出来,必须明确的是:
一、 每日构建是对一个团队而言;
二、 有了每日构建的原则,软件工程过程必须尽量的将软件模块细化,将任务细化,希望达到每人每天都有成绩(这一点太重要了)。
每日构建的实现需要一个成熟过程。开始时可以只是一个概念:“必须进行每日构建”,当然这必须是强调和重视的。然后安排负责每日构建的责任人。创造每日构建的环境条件,版本的规定、存放位置、相应的管理工具、构建程序、构建之后的测试安排等。在小型开发机构中,每日构建开始初期可能出现最大的问题是没有每天有东西提交出来编译,将就了这一客观原因之后,可能会出现隔几天构建一次,看工程的进展进行构建,这样一来,刚一开始的措施可能就搁浅了。这时,有效的措施是将开发任务细分,哪怕是形式上的需要,一定要实现每日构建,每日就是每日,不妨想想,这一措施的定义为什么是“每日构建”,而不是“按需要进行构建”或“频繁进行构建”。达不到每日可供构建的东西就得找原因,要清楚这是有规律的,健康的心跳的形成阶段,需要细心的培育,呵护。