基于CMM的软件项目合同范围定义的扩充.doc
基于 CMM 的软件项目合同范围定义的扩充 摘要:本文从分析 CMM 的关键过程区域的基础上,结合软件项目合同的特点,对软件项目合同范围的定义进行了扩充,这对于降低项目开发的风险,提高软件开发方的过程能力成熟度,对于软件项目合同的签定双方都具有较大的借鉴意义。 关键词:软件项目合同 CMM 合同条款 软件项目合同作为保证软件项目开发方、客户方既可享受合同所规定的权利,又必须全面履行合同所规定的义务的法律约束,对软件项目开发的成败至关重要。经验表明,软件项目合同范围定义不当而导致管理失控是项目成本超支和时间延迟以及质量低劣的主要原因,有时由于不能或者没有清 楚地定义软件项目合同的范围,以致在项目实施过程中不得不经常改变作为项目灵魂的项目实施计划,相应的变更也就不可避免地发生,从而造成项目执行过程的被动,所以强调对项目合同范围的定义和管理,无论对项目涉及的任何一方来说,都是必不可少和非常重要的。 有关合同范围的普遍性定义和管理,我们在这里就不再赘述,本文主要针对软件项目开发过程的特点,结合 CMM 的相关知识,试图给出一个软件项目合同特有的范围定义,并以合同条款的形式予以表现。 我们在对 CMM 的研究中发现,作为 CMM 的重要组成部分 —— 关键过程区域 (KeyPractiviceArea 简称 KPA),具有类似于合同条款的功能。每个 KPA 识别出一串相关活动,当这些活动全部完成时,能达到一组对增强过程能力至关重要的目标。这与合同中列出相应条款,指出项目要达到的目标相吻合。所不同的, KPA 的直接目的是增强软件过程能力,合同条款的直接目的是实现项目目标,但两者的最终目标都是确保软件项目的成功。从这个意义上说,二者是一致的。为此,我们认为,采用 KPA 来界定合同范围是可取的。所要注意的是, CMM 中的 KPA 共有 18 个,我们不能完全照般,而必须结合合同自身的特点以及软件项目的实际, 予以取舍,并作恰当的变通。从目前我国的软件开发实际情况看,要提高软件过程能力成熟度,应该从 CMM2 级做起。为此,本文主要结合 CMM2 级的六个 KPA,谈谈如何扩充软件项目合同的范围定义,以此来促进项目过程的改善。 1.需求管理 需求管理的目的是在客户和软件项目开发方之间建立对客户需求的共同理解。它包括和客户一起建立和维护有关软件项目需求的协议。因此,合同具有如下条款: a.在整个项目开发过程中,开发方应明确保证对系统需求及其分配进行管理,并建立文档 ; b.项目双方协商制定影响软件项目活动的非技 术性需求 (协议、条件和附加合同条款 ),主要包括交付产品的形式、交付日期、项目里程碑等,并建立文档 ; c.项目双方协商制定影响软件项目活动的技术性需求,主要包括对软件的性能要求、界面要求、设计约束、最终用户的要求以及选用何种编程语言 ; d.项目双方协商制定确认软件产品满足客户需求的验收准则,包括采用何种方法、何种工具进行验收 ; e.项目双方协商制定对客户进行软件操作方面的培训准则,以及其他相关服务的说明。 2.软件项目策划 软件项目策划的目的是为了完成软件项目开发而制定合理的计划。它包括以 下步骤:估计软件工作产品规模以所需的资源,制定时间表,鉴别和评估软件风险和协商约定。因此,合同具有如下条款: a.开发方应在合同中指定负责协商约定和制定软件项目开发计划的项目经理 ;b.开发方应确保在项目经理和软件开发人员、其他工程组相关人员之间达成软件项目的约定,并建立文档 ; c.项目双方应对软件项目的规模、工作量、成本、进度等做出科学的估计 ; d.项目双方 (以开发方为主 )共同建立高级管理者评审方法,对所有的软件项目约定和计划进行评审,并使其保持在监控状态下 ; e.项目双方 (以开发方为主 )共 同明确开发工作的范围、技术目标和对象、最终用户的识别、成本和进度的约束及目标、项目伙伴 ; f.开发方应确保能够为策划软件项目提供足够的资源和投资,必要时应采取的应对措施 ; g.项目双方 (以开发方为主 )共同对与项目成本资源、进度和技术方面相联系的软件风险进行鉴别、评估和建立文档。 3.软件项目跟踪和监督 软件项目跟踪和监督的目的是建立对实际进展的适当的可视性,使项目经理能在软件项目性能明显偏离软件计划时采取有效措施。它包括对照已文档化的估计、约定和计划,评审和跟踪软件完成情况和结果,基于实际的完成 情况和结果调整这些计划。因此,合同具有如下条款: a.开发方能够采用并维护一个已文档化的软件开发计划作为跟踪软件项目的基础,随时向项目经理报告软件项目的状态和问题 ; b.开发方应确保能够为跟踪软件项目提供足够的资源和投资,必要时应采取的应对措施 ; c.在管理软件的技术和人员方面,软件经理受到培训,使其能熟练地管理技术项目,跟踪和监督软件规模、工作量、成本以及进度,管理职员 ; d.开发方应确保一线软件开发人员在软件项目的技术方面受到定向培训,包括项目的软件工程标准和规程、项目的应用领域 ; e.跟踪软件工作产品的规模,跟踪项目的软件工作量和成本,跟踪项目的关键计算机资源,跟踪项目的软件进度,必要时能采取应对措施 ; f.软件开发方应进行定期的内部评审以便对照软件开发计划跟踪技术进展、计划、性能和问题,并在里程碑处进行正式评审。 4.软件质量保证软件质量保证的目的是向项目经理提供适当的对软件项目正使用的过程和正构造产品的可视性。它包括评审和审计软件产品和活动以验证它们符合适用的规程和标准,给项目和其他有关的经理提供这些评审和审计的结果。因此,合同具有如下条款: a.项目双方 (以开发方为 主 )共同制定软件产品和活动遵循适用的标准、规程和需求的情况并得到客观的验证 ; b.开发方能保证受影响的组和个人接到软件质量保证活动和结果的通知 ; c.开发方存在负责协调和实施项目的 SQA 的组, SQA 组有一个向高级管理者报告的渠道,使其处理在软件项目内部不能解决的不符合问题 ; d.开发方应确保能够为SQA 活动提供足够的资源和投资,必要时应采取的应对措施 ; e.SQA 组的成员受到培训以完成他们的 SQA 活动,培训的内容包括软件工程技巧和实践、相关部门的岗位任务和职责、用于软件项目的标准、规程及方法 、软件项目的应用领域等 ; f.软件项目的成员接受有关 SQA 组的任务、职责、权力和价值等的定向培训。 5.软件配置管理 软件配置管理的目的是建立和维护在项目的整个软件生存周期中软件项目产品的完整性。它包括标识在给定时间点上软件的配置,系统地控制对配置的更改、并维护在整个软件生存周期中配置的完整性和可跟踪性。因此,合同具有如下条款: a.开发方能按照已文档化的规程对软件项目准备一份软件配置管理 (SCM)计划,明确指派每个项目的 SCM 职责,并保证其在整个软件开发过程中实行 ; b.开发方能确保项目 建立或利用一个仓库 (软件基线库 ),用来存储配置项 /单元和相关联的 SCM 记录 ; c.开发方存在或建立一个有权力管理项目软件基线的委员会 (即软件配置控制委员会 ——SCCB)以及负责协调和实施项目的 SCM的组,并建立制度定期审计软件基线和 SCM活动 ; d.开发方应确保能够为 SCM 活动提供足够的资源和投资,必要时应采取的应对措施 ; e.SCM 组的成员在有关进行其 SCM 活动的对象、规程和方法方面受到培训,包括 SCM 标准、规程和方法,以及 SCM 工具等 ; f.软件工程组和其他软件有关组的成员受到培训以便完 成其 SCM 活动。至于软件子合同管理KPA,其目的与本文的主旨相符,我们就不将其单独列出来了。综上所述,我们已经对 CMM2 级中的各个 KPA 进行了研究,并将其中比较重要、需要控制管理的内容以合同条款的形式予以表现。我们认为,从软件项目管理的发展趋势来看,以合同的模式来推行 CMM,对于降低项目开发的风险,提高软件开发方的过程能力成熟度,对于软件项目合同的签定双方都具有较大的借鉴意义。本文仅对 CMM2级中的 KPA 进行了研究,随着软件过程能力成熟度的提高,软件项目合同双方可根据自身的实际情况,逐步加入 CMM3 级、 4 级 乃至 5 级的内容。 参考文献 : [1].SW-CMMv1.1,卡内基 -梅隆大学软件工程研究所 (SEI) [2].中华人民共和国合同法 [3].郑人杰 ,殷人昆 ,陶永雷:实用软件工程 .第二版 ,清华大学出版社