构建高效的版本管理和代码维护机制
2012-07-05翟宏宇文大化徐春凤
翟宏宇,文大化,徐春凤
(1.长春理工大学 计算机科学技术学院,长春 130022;2.中国科学院 长春光学精密机械与物理研究所,长春 130033)
项目开发过程中,代码维护是非常重要的环节。一个项目的开发中需要把每个人同自己相关的功能模块收集起来,如何高效管理和维护代码是保证项目顺利进行的关键。本论文介绍的是采用Clear Case进行版本控制来对项目的所有源代码、库文件、文档及发布(Release)时的安装程序的维护。开发人员需要每天中获取最新版本(Get Latest Version)的源代码,进行开发,然后需要Check in所有当天修改的代码,在Check in之前要保证编译顺利通过。
开发人员往往专注自己的模块或者当前工作任务中功能实现的部分,就会忽略改动对别的模块的影响。在实际工作中,尤其是集成发版本的时候,或多或少都有这种问题发生,而且一个模块的改动对整个系统的影响往往超乎人的意料。这样会给版本发布带来一系列的难以想象的困难。为了避免这种情况发生,保证集成版本的有效,本论文将基于Windows Mobile的手机开发项目介绍一种高效管理和代码维护的机制。
1 版本控制管理和代码审查
版本控制就是要及时发布最新的软件,每个版本完成应该完成的功能。在开发过程中,会不断发现新需求,不断发现Bug(错误),确保项目开发的顺利完成。随着软件系统的日益复杂化和用户需求、软件更新的频繁化,版本控制及代码管理逐渐成为软件生命周期中的重要控制过程,在软件开发过程中扮演着越来越来重要的角色[1]。一个好的版本控制过程能覆盖软件开发和维护的各个方面,同时对软件开过程的宏观管理,即项目管理,也有重要的支持作用。良好的版本控制能使软件开发过程有更好的可预测性,使软件系统具有可重复性。
1.1 Clear Case下的版本控制管理
本项目采用Clear Case的UCM模式来管理代码。于是就产生了基于此模式的开发流程,如图1所示。开发人员在将代码提交到集成流后,需要做一次集成编译,然后才能集成测试,全部都通过了之后才能提交完成。由于在Windows Mobile平台下,驱动的编译需要几个小时,编译工作将占用大量的机器资源,极大增加了开发人员的负担。
图1 Clear Case开发工作流程Fig.1 Clear case deliver work flow
采用快速提交代码,使用若干服务器编译,可以节省开发人员的时间和资源。为了提高开发人员工作效率,改进了开发人员的提交流程,如图2。
图2 改进的开发工作流程Fig.2 Improved deliver work flow
两种方法的主要变化是,开发人员在各自的开发流编译并测试成功后 Deliver,并直接 Complete;集成编译工作移至专用编译服务器上去完成,这样就能为开发人员节省出两个小时的宝贵时间。这些改动是为了能够保证这些编译结果的质量,以及能及时发现每个人提交的代码不会发生功能退化。
1.2 代码变更审查
对于项目开发而言,清楚每次变更的位置,变更的目的以及对其他模块的影响,对项目的后续开发以及Bug的查找都能够得到快速的帮助,能够提高项目的开发进度。
代码变更审查能够清楚知道每次变更的位置,体现在哪些代码发生变更,哪些模块发生变更和变更的目的,以及评估每次变更潜在影响[2]。体现在变更对整个系统的影响,对其它模块的影响。此部分的主要工作是对每一次的代码提交都与提交前的版本进行一次比较和审查,清楚变更模块的位置和目的。
代码变更审查主要是保证每次新提交的集成流都是健全的,保证无编译错误,无功能回退。并在第一时间内发现并定位问题。这就需要每日构建(DailyBuild)实时检测程序流,一旦有新代码提交,就会自动更新集成流,并开始编译,而后进行编译验证测试(BVT)。
2 Daily Build实时代码构建
Daily Build就是把一个软件项目的所有的最新的代码从配置库中取出,然后从头进行编译,链接和运行。可以再运行测试包对软件的主要功能进行测试,发现并报告错误的整个过程。通常由工具自动完成[3]。Daily Build一般是在每天半夜进行,前提是提交了更新的代码到配置库中。Daily Build也可称Nightly Build。Daily Build是一个很好的机制,它可以节省大量的时间,而有能实时的检测到代码更新后出现的问题[3,4]。Daily Build 的另一个重要功能就是验证软件中各模块关系是否正确,也可称为“每日集成”。
DailyBuild的实现是利用项目组开发的软件Daybreak完成[8],对进行中的项目进行监控,如果发现服务器上共享的项目文件有所改动,便会再次编译,得到软件的最新版本,并且生成测试并发Email给相关的开发人员。
Daybreak是一套完整的从下载最新代码,构建,测试与一体的软件,它实时检测程序流,一旦有新代码提交,就会自动更新集成流,并开始编译,生成手机的 Image.raw,而后进行 BVT 测试。
Daybreakd的主界面中设置编译路径和生成的日志保存存放的路径,并设置好Build的时间,一般都是选择在半夜进行,这样可以不影响开发进度,并在第二天及时的发现错误。在Buid模块主要是设定编译的参数,然后开始编译,如同3所示:
图3 Build界面Fig.3 The form of build
在Download模块完成的功能是首先将电脑和手机的通信连接上,然后将build之后生成的image.raw下载到手机中,如图4所示:
图4 Download界面Fig.4 The form of download
接下来进入Test模块中,Test模块是保证代码要通过WINCE的BVT测试。
3 编译验证测试BVT(Build Verify Test)
3.1 BVT测试介绍
BVT主要是针对WinCE驱动开发的测试。在开发时程中,一个模块的改动有时会对别的模块产生影响。尤其是集成发版本的时候,或多或少都有这种问题发生,而且一个模块的改动对整个系统的影响往往超乎人的意料[6]。这样会给版本发布带来一系列的难以想象的困难。为了避免这种情况发生,保证集成版本的有效,在提交流程中,设置了BVT这一环节。
BVT 是编译验证测试(Build Verify Test),就是针对每一个版本的改动后功能的验证。是一种简单、快速、确保改动没有造成基本功能退化的测试。它的作用有如下面的代码:
}通过BVT把问题拦截在了问题最可能发生的部分。
BVT是CETK(WinCE Test Kits)诸多测试用例的子集,选取CETK中基本驱动测试:LCD,Keypad,IR,OAL,Camera中时间比较短,单机可自动跑的测试。BVT测试是一项针对Driver基本功能的测试。在驱动开发和系统集版本发布时,它是一个方便验证功能的工具。目前选择了15个CETK的测试用例,可以根据具体的情况,增减测试用例。测试项如图5所示:
图5 Test模块中的BVT测试项Fig.5 The BVT in test model
3.2 BVT测试的执行
当在Daybreak中建立了某个 PPC或 SP的项目后,选中要测试项,手机连接上 ActiveSync,点击“Start”按钮,手机端就会进行相应的测试。在界面的下方的信息窗口中会显示正在测试的项。测试结束后,自动弹出测试结果的Excel表格,表格中显示通过和失败的测试项。可以根据这个结果来确定是否存在功能回退的问题。也可是使用SP_CETK(适用于单机+存储卡)首先将测试所需的DLL都拷贝到TFlash卡中,然后进行BVT测试。通过了BVT,还有一些性能测试、兼容性测试、灾难测试等需要在产品发布前进行[7]。
4 结束语
本文介绍了在ClearCase下的版本控制管理和DailyBulid的代码维护机制。通过Daybreak软件的自动执行来完成DailyBulid,同时采用快速提交代码,使用若干服务器编译,大大节省了开发人员的时间和资源。通过DailyBulid和BVT保证代码的健壮性,使得代码维护变得简单而且轻松的定位错误,提高了整个项目开发的效率,使得项目能够平稳的向前推进。此机制已在项目中使用,效果显著。Daybreak还需要不断的完善,例如支持多平台等,不断的探索中让其更好的发挥作用。
[1]Harold Kerzner.项目管理计划、进度和控制的系统方法[M].电子工业出版社,2010.
[2]Robert K.Wysocki.有效的项目管理:面向传统、敏捷、极限项目(第5版)[M].电子工业出版社,2011.
[3]陈能技.软件测试技术大全:测试基础 流行工具 项目实战(第二版)[M].人民邮电出版社,2011.
[4]Aditya R Mathurl.软件测试基础教程[M].机械工业出版社,2011.
[5]Steve McConnel.CODE COMPLETE,Second Edition[M].电子工业出版社,2006.
[6]傅曦,齐宇,徐骏.Windows Mobile手机应用开发[M].人民邮电出版社,2005.
[7]单锦辉,姜瑛,孙萍.软件测试研究进展[J].北京大学学报:自然科学版,2005,41(1):28-31.
[8]王雅文,宫云战,杨朝红.软件测试工具综述[J].北京化工大学学报:自然科学版,2007,34(1):1-3.
[9]http://www.eefocus.com/article/11-08/93270131348-9228_2.html?sort=1111_1122_1461_0.