UML软件工程组织

CMMI之产品集成管理

 

2008-01-24 作者:张瑾 来源:csdn

 

在笔者进行CMMI的培训和咨询中经常遇到很多软件技术人员并不清楚软件产品集成是做什么的,在什么时候会进行产品的集成。产品集成对广大软件开发和测试人员来说是既熟悉又陌生的。熟悉是因为产品集成的概念经常被提及,例如集成测试等等,陌生是因为在现实项目中产品集成的过程并不显著。

产品集成的英文是Product Integration,在CMMI中的缩写是PI,它是一个单独的PA(过程域),可见产品集成在软件项目中的重要性。针对CMMI实施过程中发现的问题,笔者进行以下总结,供大家对产品集成进行理解。

(一)产品集成的目的

产品集成的目的就是组合产品组件最终形成产品,并要确保已集成的产品是符合用户和设计需要的。CMMI对该过程提供了进一步的描述,产品集成的过程就是将产品组件集成为更复杂的产品组件或完整的产品。

通过以上定义大家应该注意以下两个点:

1、 产品集成出来的部件不一定就是最终的产品,也可能是项目过程中某一个中间的组件。

2、 集成出来的产品或组件要符合用户和相关设计文档的要求。

通过对产品集成目的的分析,大家可以了解到产品集成在日常软件开发过程中是个持续的过程,因为软件产品是一步一步逐渐完成的,所以产品集成在软件开发过程中应该是一个经常性的活动。
  那到底什么时候会进行产品集成呢?接下来大家就一起对产品集成的时机进行分析。

(二)产品集成的时机

在很多软件开发模型的理论中都有提到过何时开展产品集成的活动,其中比较先进的理论是在敏捷式开发模型中提出的“持续集成”,以及微软的MSF开发模型中倡导的“日构建”理论,这些理论对软件项目的开发具有指导性的意义。

大家应该在尽可能的情况下将产品集成的工作日常化、自动化,这样做的好处是可以尽早发现产品集成时由于各种接口不匹配的问题所带来的风险,而且可以使项目团队成员对整体项目的进展有所了解。谈到自动化产品集成就不得不提到“自动化日构建”的工具,项目组成员可以利用NAnt或Ant来实现。这些工具都是基于XML的,使用起来非常简单。

因此在软件项目中除了里程碑或重大变更需要进行产品集成外,笔者还建议可以开展“自动化日构建”工作,将产品集成日常化、自动化。

(三)产品集成的原理

软件开发和其他传统行业的开发流程和方法在原理上都是具有相同性的,下面以一只笔的组装过程来对产品集成的原理进行探讨。首先拿出一只普通的签字笔,该签字笔就代表软件项目最终所需交付的产品,然后将该签字笔进行拆分,如图1-1所示可以分解出“笔帽”、“笔杆前半部分”、“笔杆后半部分”、“笔芯”四个部分,这四个部分将分别代表软件项目中的四个组件或模块。

通过对以上项目背景的描述,我们开始进入项目的开发过程,大多数软件项目都是团队合作完成的,在本项目中分别由四个小组来开发“笔帽”、“笔杆前半部分”、“笔杆后半部分”、“笔芯”四个模块。

图1-1 签字笔拆分示意图

产品集成顺序

CMMI对产品集成所要求实现的第一个特殊目标“准备产品集成”,它的第一个工作就是要先确定“产品集成的顺序”。假如大家在组装签字笔的四个部件时,先将“笔杆前半部分”与“笔杆后半部分”进行组合,再将组合出来的“笔杆”与“笔芯”进行组合,那就可能导致事倍功半,甚至会出现返工。因此确定正确的“产品集成顺序”是个非常重要而又需要尽早确定的工作。

产品集成的顺序最常见的是“自上而下”和“自下而上”的方式。当使用“自上而下”的方式进行产品集成时往往会使用到测试桩的对象,该功能通常可以由Mock对象来实现;当使用“自下而上”的方式进行产品集成时可以使用NUnit或JUnit等单元测试工具,通过单元测试用例来进行驱动,使组装得以顺利进行。

产品集成的环境

实现了第一个目标“准备产品集成”后,第二个工作就是确定“集成的环境”,这点非常容易,简单来说就是项目组需要指定一台服务器作为产品集成的环境,需要注意的是该服务器的配置应该能够满足项目的需要。

建立产品集成的步骤和准则

产品具体怎么集成应该有一套详细的方案和步骤,项目组可在适当的时候将其详细制定出来并通过相关的评审。如何确定产品集成是否成功,项目组还应该制定出相应的验收准则,这样产品集成才有据可依。

通过以上步骤,产品集成的准备工作就完成了,接下来就是产品集成的另外一个重要环节,检查“产品的接口”是否符合并匹配设计要求。

确保产品接口的兼容性

在CMMI的产品集成过程中,第二个目标就是要“确保产品接口的兼容性”。接口想必大家都十分清楚,在软件开发和设计中都是非常重要的,产品集成是否成功很大因素取决于它。大家来回顾一下图1-1,其中“笔杆前半部分”和“笔杆后半部分”的哪个部分是“笔杆”的接口呢?大家可以发现“笔杆前半部分”和“笔杆后半部分”各有螺旋形的“接口”,大家可以通过该螺旋形的“接口”将“笔杆前半部分”和“笔杆后半部分”拧到一起,组装为一个完整的“笔杆”。假如“笔杆前半部分”和“笔杆后半部分”的螺旋形接口不匹配,那将产生次品或返工。

在软件项目中项目组可以在设计文档中详细描述各个接口以及之间的关系,或者通过一个列表来维护本项目的接口。当出现变更时,产品接口的信息也务必及时更新。

组合产品组件并交付产品

通过对CMMI产品集成过程中定义的第一和第二个特殊目标的实现,下面项目组就可以按照以上计划和准备工作开始进行产品的组装。

在进行产品组装前要先确定项目组提交的各个组件或模块本身的功能是符合要求的,否则组装起来麻烦就更大了。如何确保组件在集成前的质量,以及集成后的组件或最终产品是符合要求的,这就需要通过单元测试来实现。现在主流的开发工具都有其配套的单元测试工具或功能,以TDD测试驱动开发模型的要求,开发人员会在开发过程中编写并进行单元测试(当然最好是先写单元测试用例再进行开发)。如果有了单元测试用例,那么在产品集成前和产品集成后通过运行相应的测试用例就可以判断产品是否符合设计的要求。

最后就可以将组合好的组件或最终产品进行发布。但大多数时候产品集成后的发布是给测试组进行系统测试的。按照CMMI的最佳实践,集成后的产品发布给测试组的时候应该有一个交接、确认的过程,测试组只需要检查相关单元测试用例是否全部通过测试即可作为交接的依据。

产品集成与配置管理之间的关系

笔者继续以签字笔为例,在项目起初阶段只将“笔芯”和“笔杆后半部分”生产出来,那么按照“产品集成的顺序”可以先将其进行集成,组合成为一个新的组件A,当该组件A通过单元测试后,可以将其放入配置管理的“受控库”中进行保存。当“笔杆前半部分”生产出来后,再将组件A与“笔杆前半部分”进行集成产生新的组件B,新的组件B通过测试后仍旧提交“受控库”进行保存。依次类推将各个组件进行集成直到生成最终的产品。

总结

产品集成是软件开发日常性的工作,是和广大软件开发和测试人员息息相关的基础性工作,笔者提倡将产品的集成日常化、自动化起来。大家可以通过手中的笔就可以很好的将产品集成概念进行理解,只要把握住产品集成的“顺序”、“环境”、“步骤”、“接口”、“集成测试”五个部分,那产品集成的管理就简单可行了。为了便于理解,大家只要看看手中的笔就可以了。