技术开发 频道

协作开发中的质量保证技术

【IT168 技术文章】

    问题的提出

    编码过程是软件工程的重要一环。这一部分工作的好坏直接关系到软件产品的质量。高效率的多人协作开发,依赖于团队精神、设计师对于软件架构的整体把握、好的并行版本控制技术,以及制度化的每日构建和最后阶段的交付工程。

    今年六月,我有幸在一家开发安全软件的公司观摩了他们的每日构建和交付工程中的活动。他们对于并行版本控制、每日构建技术熟练而深入的应用给我留下了非常深刻的印象。在此,我愿与读者一同分享我自己的学习体会,这其中的某些部分得益于在那家公司的实地观摩,另一些则来自于我自己参加的实际软件工程项目的体会。

    毫无疑问地,一个软件工程项目最有价值的部分还是在它的设计阶段。良好的设计能够让实现环节变得更有效率,从而极大地提高劳动生产率;而好的编码规范,则是协同开发的重要基石。限于篇幅,对于前述两项内容本文将不会过多设计,我将着重介绍软件工程中编码与测试环节的一些经验,这些经验对于已经拥有优秀的软件设计师和编程、测试人员,而苦于由于连调、最终测试导致发布频频延期的开发团队来说是非常有益的。

    并行版本控制——多人协作开发的有效保障

    设想一个有4名编程人员的小型开发团队(以下简称“TJRP开发组”),Tom、Jason、Robert和Pat分别负责4个模块,按照传统的软件开发模式,开发将经历编程-连调-测试-发布4个阶段。

    如果最初的设计正确,并且,四个开发人员都是Guru级的程序员而且配合默契,那么这个模式将会运转良好。然而遗憾的是,Pat刚刚参加工作不久,对于设计师撰写的设计文档的理解不够透彻,而Robert则自作主张地对设计进行了一些修正,更糟糕的是,项目组会议的时候,这些问题没有及时地被暴露出来,导致Pat和Robert代码在设计上的“分歧”越来越大。结果,进入连调的阶段,Pat和Robert发生了激烈的争执,在吵得不可开交之后,项目经理终于让4个人坐到了一起来解决问题,最后,连调阶段整整多花了一倍的时间。

    但倒霉的事情还没有结束。Jason在测试中发现,原本正常的代码的行为被改变了,并且,他惊讶地发现代码被某个“别人”改过,在翻箱倒柜地找出某份正常版本的副本之后,他又发现,“别人”修改中的某些地方是必要的。代码合并和重新测试使得测试阶段足足花掉了原先预想3倍的时间。

    可怜的Tom运气更差,作为主要的代码复审人员,他不得不阅读所有的代码。Robert和Pat的争吵导致了大量的代码变动,他不得不重新审核代码,而Jason的代码合并引发的新问题又让他不得不分神去帮助Jason进行调整。

    最后的结果是,软件开发的成本是预期的2.4倍,发布时间也拖后了不少。我并不是在开玩笑,上面所讲的是一个发生在那家安全软件公司的真实故事。他们的技术经理介绍,在施行了规范的开发制度,以及启用并行版本控制系统之后,他们认为开发达到了一个全新的水平。并行版本控制系统本身并没有产生任何代码,但由于使用这样的系统,开发的效率被大大地提高了。

    所谓版本控制其实并不是什么复杂的概念。对于开发活动的绝大多数参与者来说,版本控制系统在某种意义上能够帮助他们做好开发过程中的记录工作,并且,通过保存文件在不同时期的版本,交付工程师和代码复审员能够很容易地缩小搜索问题代码的范围,而程序员则可以通过这样的系统更好地并行协作。一般来说,源代码的版本控制系统能够实现以下一些最基本的功能:

    保存任意一个源代码文件的不同版本

    记录修改者、修改原因

    当两个用户同时修改一个文件时,尽可能地自动合并修改;在不能合并时,给出提示

    比较不同版本之间,或与本地副本之间的差异

    获取最新版本的全部源代码供测试,并允许回退到所保存的源代码的任意版本

    创建代码分支,便于软件发布和后期维护(后面将会提到);新的代码可以合并到这些分支中。

    对不同的源代码给出标记,方便日后审查

    访问控制:阻止未经授权的修改和查阅

    我们知道,技术不是解决一切问题的灵丹妙药,但是谁也不会否认大规模的机械化生产的效率高于人拉肩扛的手工业作坊,一旦运用得当,技术将极大地改善我们的工作和生活。我们可以看到,上面的功能有效地解决了TJRP开发组所面临的绝大部分问题,例如:

    由于能够同时修改代码,并获取对方的修改,Pat和Robert能够有效地、尽早地进行沟通

    促进开发者之间的交流,每一个修改都必须给出原因,并记录提交者

    测试和连调可以尽早开始,避免模块之间的不兼容在最后阶段被暴露出来而阻碍发布

    不同开发者的修改能够及时合并,并避免由于版本不一致导致的冲突

    代码复审可以针对某一代码分支进行,从而,允许一些开发者持续地开发下一个版本,而稳定的代码则可以交付给用户

    更进一步,以管理者的角度,还有了一些额外的好处,如:

    每日构建和测试能够让项目经理更好地把握工程的进度

    谁作了多少工作,谁工作的更出色,可以在版本控制系统中清晰地体现

    分工明确,通过访问控制,可以避免不了解整个代码体系的开发人员偶然的错误修改导致的全盘崩溃

    更重要地,版本控制系统中将保持大量的开发经验,这对于一个开发团队来说是一笔无价的财富

    我们可以看到,上述改进集中地体现了一个重要的思想,即:

    及时沟通以预防问题的出现;尽早发现、尽早解决问题;明确奖惩制度,激发开发人员的积极性。

0
相关文章