电信 教育 政务 机械 汽车 船舶 交通 石化 烟草 服装 电力 金融 外贸 冶金 电子

应用生命周期管理解决方案

2004-6-14 发布方:CA冠群电脑 网友评论 0 条 点击进入论坛

1.挑战
    应用开发面临着严峻的挑战。经过长期的软件产业的同仁的艰苦努力,中国的计算机应用领域已经取得了长足的进步,在很多领域,计算机技术都得到了非常广泛的应用,IT技术已经普遍地服务于社会的各行各业,在很多的领域都形成了非常成熟的高水平的行业应用,各个行业也都从对IT技术的应用中获得了强大的业务发展的推动力。但同时我们也看到了一个非常严重的问题,那就是--软件危机。并不是只有在美国六十年代所爆发的才叫做软件危机,我们所面临的软件生产能力与业务发展的需求不相适应的这种现象就是一种软件危机。根据1999年美国的Standish Group对当年美国的软件项目的统计数字表明,只有26%的软件项目是真正成功的,其余的项目全都是失败的或是有问题的,28%的项目是干脆失败的;这些存在问题的或是失败的项目带来的直接损失是970亿美金,占了美国当年全部的IT投资(2550亿美金)的近40%,而由于这些项目所带来的间接损失是无法估量的;在全部这些项目中,平均超期189%,平均超预算222%,平均27个月滞后于最终用户的需求,更有80%的资源被开销在对应用的维护上。在美国这样一个软件产业高度发达的国家的软件开发现状尚且如此,在我们国家的状况又会是什么样呢?我想每个业内的人士心中自有答案。

 

    在当今世界,IT对于一个企业的重要性是毋庸置疑的,简单的用一句话可以概括--"应用就是业务!"IT的发展速度非常之快,我们不仅要问,究竟是什么原因会促使这种反战的继续?答案只有一个,业务驱动。随着经济一体化、全球化进程的加快,必然为各个企业带来的是不断面临崭新的业务环境,新的业务环境必然要新的业务过程来应对,而新的业务过程需要新的业务系统来支撑,这就对IT提出了一种挑战,快速地生产并交付出能够满足新的业务过程的需要的业务系统,正是这种驱动力推动着IT技术始终保持高速的发展;而同时,IT的技术上的领先性和先进性也为业务上的新环境的促成提供了必要的推动和支持。这就形成了一个良性发展的推动力,在这种推动了的驱动下,业务和IT都能够得到不断地进步和发展。

    对于中国的广大IT应用的企业来讲,经济全球化的趋势和WTO的加入会使得我们直接面临新的业务环境,毫无疑问,这会使我们的业务系统的应用水平得到快速的发展,但同时我们也要清晰地认识到,这给我们的IT所带来的挑战也会是直接的、强烈的。

    归结起来,我们说软件危机是一种矛盾,就是弱的软件生产能力与强的业务发展需求之间的矛盾。要能够迎接业务发展所带来的挑战,从事软件生产的组织迫在眉睫要去做的一件事就是--软件生产力的改造。在"应用就是业务"的今天,软件生产力的改造是决定企业能否获得并长久保持竞争优势的一个决定性的因素,所以对于企业的CTO或CIO来讲,关注并启动软件生产力的提升是一项战略性的决策,它具有伟大的现实意义和长远的历史意义,这是一项事业,是一个系统工程,它将决定企业能否获得竞争优势。

2 软件生产力的提升与质量管理

2.1 软件生产力与软件质量
    软件生产力是对在满足质量要求的前提下对生产软件产品的速度的一种评价。在相同的质量标准的前提下,这个速度越快,我们说软件生产力越强,反之就是越弱。当然有一个前提是软件质量。对于软件产品的质量,比较难于定义。

概括起来可以从这样三个方面来评价:
1.软件产品质量必须满足最终用户的需求,如果需求无法得到满足,质量无从谈起。
 
2.软件产品的构造,必须能否符合一些标准和规范。当前的软件生产者,是团队。团队从事软件生产就意味着软件开发(软件产品的生产活动)的成功要素发生了变化,管理与沟通会成为生产实践中的关键,产品生产符合一定的标准和规范正是为了满足这个要求。反之,不是在这样的一种条件下构造出来的软件产品很难保证它的质量。
 
3.软件产品必须要满足系统的隐含需求。隐含需求是指根据软件产品的使用要求而提出的一些软件产品的特性,这些特性不是由最终用户直接提出的。例如:文字处理系统要求的是易学、易用,而业务系统要求的是安全、可靠、高性能等等。

以上的三个方面是对软件产品质量的评价基础。
    软件生产力与软件质量之间究竟有什么样的关系?首先我们要肯定,软件产品的质量对于我们是最重要的,我们不是为了开发软件而开发软件,我们是为了支持业务来开发软件,因此业务能否正常运作,完全依赖于软件质量,用一句话来概括,那就是:"应用就是业务"。业务的竞争要求软件开发能够既快又好,但这似乎是一个矛盾。按照我们习惯的软件开发方式,在软件的开发过程中,再编码完成后一定要注重进行软件测试,软件测试的过程中会不断地发现软件中存在的缺陷,那么就边测边改,经常有人将这个阶段叫做系统联调,一般来讲,这个阶段的周期长短很难预计,需要边做边看,项目的进度往往都是在这里被耽搁了,

    软件生产力的提升的首要问题是软件质量的提升。对于软件,将其作为一种产品来理解是不会有任何的疑问的,但将软件的开发行为作为一种产品的制造和生产行为来认识,却在很多的开发人员的心目中存在着很多的疑问。我们常常听到软件开发人员讲:"我非常喜欢软件开发",细细体味起来这句话意味深长,不同的开发人员讲这句话实际是代表了他对软件开发活动的不同的理解。软件生产究竟是产品的生产行为还是一种个人创造力的展现行为?这是每个从事软件生产的人员应当让自己去反思的"简单"问题。软件产品既然是产品,那么软件开发就是这种特殊产品的生产行为,软件开发人员也自然称为软件行业的产业工人,那么他的生产行为也必然要受到产品制造工艺的指导和约束。而目前多数的从业人员却还没有建立起这样一种认识。这无论对于这个行业、还是对个人的发展都是有很大的阻碍的。将软件产品作为产品来认识是巨大的代价换来的,我们不必也不能再去付出代价来加深这种认识。


2.2 软件质量管理
    软件是一种产品,软件是一种特殊的产品。之所以说他特殊,是因为它有着许多不同于我们常规意义上的硬件产品的特性,我们在这里不必一一列举,单从它的质量的影响因素就可以略见一斑。要获得一件好的硬件产品,有两个必备的因素需要保证,材质与制造工艺;例如要得到一件好的家具,首先要有好的材料,其次制造他的工匠的手艺要好。而软件的特殊性就在于它没有物理存在,它是一个复杂逻辑的高度聚合体,这样在它的质量影响因素上就少了材质,而决定性的因素是它的制造工艺,这个制造工艺我们称其为软件过程。软件过程是对软件这种产品的制造工艺的一种术语表达。正因为软件是这样的一种特殊产品,决定了它的质量难于直观地进行评价,这也就决定了其质量难于控制。
 
    软件是产品,软件开发活动是软件这种产品的生产活动,产品生产必须有质量管理,才能保证产品质量;要保证软件生产能够交付出高质量的软件产品,就必须对这种产品的生产进行质量管理。

质量管理发展到现在,归纳起来共出现了三种质量管理方式:
    事后检验。一个产品从需求的出现到产品的诞生要经历一个生产过程。这种质量管理方式是在生产线的末端设立质量检验环节,从而筛选合格产品与不合格产品,合格的产品直接进入市场,不合格的产品作为次品处理。这种质量管理方式出现的最早,应用也最为广泛,普遍应用于那些批量构造的、成本较低的产品的制造上。从这一点上,我们可以看出这种质量管理方式显然不适合软件产品的质量管理,因为软件产品的生产不具备批量性和成本低下性,但这种方式却是在软件生产行业中应用最广泛的。我们看到很多被软件产品的质量问题困扰的软件开发组织在热衷于寻找软件测试的解决方案,实际上就是在试图利用这样一种质量管理方式来解决产品的质量问题。我们说如果有一种测试解决方案,能够让我们做到达到这样的目的,那么它或许对我们保证产品的质量会有帮助,但却对我们提高软件生产力全无益处。因为软件产品如果通过测试发现了问题,那么必然会导致大量的返工(rework),返工是导致项目超期和超预算的根本因素,如果需求阶段的一个错误在系统测试的时候才被发现,那么解决起来的开销会是在需求阶段来解决的开销的1000倍。在具体的工程实践中,去解决这些问题往往是有很大的困难的,尤其是在项目的要求非常迫切的情况下,往往会省略掉很多的测试,这样就没有办法保证产品的质量,这是很多的软件项目不成功的一个根本的原因。既然这种质量管理方式不适合于软件产品的生产中的应用,那么我们来看第二种质量管理方式。

    全面质量管理(Total Quality Management)。全面质量管理的管理思想是:一个产品从需求到最终的产品出现,必然要经历一个复杂的生产过程,生产过程中有不同的加工环节来进行对产品的加工,在不同的加工环节中间会有中间产品在传递,如果能够找到一种有效的手段,来保证每个加工环节传递到下一个环节的中间产品不存在质量问题,那么最终可以保证这个产品的质量。这种质量管理思想从诞生到今天已经有一百多年的历史了,但第一个成功的应用是在二十世纪六十年代出现在日本的制造业,日本的汽车和家电工业利用了这种质量管理方式成功地提高了生产力,降低了产品构造成本,使日本的制造业的竞争优势一直保持到了今天。这种质量管理方法适用于构造成本高、制造周期长的复杂产品的质量管理。对于软件产品的生产过程中的质量管理,它也同样适合。
 
    软件产品是一种构造周期非常长、生产成本非常高的复杂产品,特别是在当前,软件产品的生产水平非常低的情况下,软件产品的生产还需要大量地依赖于人的手工生产,因此产品的构造会更为昂贵,在这种前提下,应用全面质量管理的质量管理方式,会更为有意义。它可以最大限度地降低在软件产品的生产中的风险,并降低返工的工作量,从而提高产品质量和产品的生产效率。

    软件产品的生产会经历一个生命周期。应用软件是服务于特定的业务过程,但并不是所有的业务过程都是清晰、稳定、成熟的。IT不单单是能够帮助业务提高运作效率,它还有一个非常重要的作用就是帮助业务过程的规范化和成熟化。因此在应用软件开发的最早的一个阶段要进行业务过程的规范化定义,这个过程在应用开发生命周期中被称为需求定义。需求定义阶段中,由业务专家对业务过程进行规范化的、清晰的定义,所定义的业务过程必须能够被完整、准确地文档化出来,并且要能够跨越业务领域与IT技术领域的沟通障碍,这个文档就要作为应用软件开发人员去理解需求的一个基础;有了明确的需求定义,接下来就需要由软件开发人员来理解需求,并从中分离出软件需求,并对其进行逐层的抽象、分解、求精,随着进程的进展,开发人员完成对需求的细化理解,这个过程就是我们常说的需求分析;在深入理解了用户需求的基础之上,软件设计人员要给出系统的架构设计,并定义出一个个的系统部件来实现不同的功能,最终使系统能够充分满足用户的需求,这个过程通常被称为设计;在设计完成后,要由程序设计人员来完成所设计出的系统部件的实现;这个过程通常被称为实现;在实现后还要检验或证明最终用户的需求能够得到满足,这需要进行软件测试;以上简单叙述了应用软件的开发的生命周期。在这个生命周期中的每个阶段,都可以被看作是一个软件产品在制造过程中所经历的不同的加工环节,每个加工环节都需要具备不同技能的工人来进行不同的加工,每个加工环节有都会有中间性的产品向下一个加工环节来传递,这些在加工环节之间所传递的中间性的产品,就是我们在全面质量管理重要去进行质量管理的对象,例如:从需求定义想需求分析所传递的是系统的《需求和规格说明》,我们必须能够寻找到一种手段来验证《需求和规格说明》的完整性和正确性,才能为软件开发团队对最终用户的实际需求建立起正确的理解建立一个坚实的基础,所以在全面质量管理中的一个关键点就是管理这个产品的质量。那么,《需求分析报告》、《软件设计说明书》、《程序设计说明书》等都是这样的中间型产品,如果再生产过程中能够有效地保证这些产品的质量,就可以让软件开发的过程中有效的降低项目风险,并且能够有效地减少返工,这就是通过质量管理这种手段来帮助提升生产力水平的基本的原理。

1、质量认证
    质量认证的质量管理方式,是全面质量管理的一种更高级的应用,是质量管理方式发展中的一种理想模式。它的应用方式是由权威机构来进行对企业内部的伴随着生产体系的一个质量管理体系及在这个生产系统下所出产的产品的综合评估,来认证这个企业的产品质量。这种质量管理方式的典型的应用就是我们所熟知的ISO9000系列的质量标准。

    对于从事软件产品生产的软件开发人员来讲,是否应当着重思考一下在我们的软件开发的生产实践中,究竟应用了什么样的质量管理方式?他对我们的产品质量和软件生产力产生了什么样的影响?想清楚了这个问题,对于我们改进产品的质量和生产效率会非常有帮助。

    在软件产品的生产过程中,产品的生产者是软件开发人员,质量问题的引入也是软件开发人员带来的,问题在于,没有人希望自己犯错误,但没有人能够保证自己不犯错误,因此,在软件这种产品现阶段所处在的生产能力下,全面质量管理这种质量管理方式尤其重要,必须将质量管理活动融入到产品生产的生产过程中,才能有效地保证产品质量,同时能够尽早地发现产品的质量问题,尽早地解决,要知道如果不能尽早地发现,这个缺陷将在后续的过程中被呈放射状地放大,因此,尽早地发现并解决问题,对提高生产效率会有非常明显的效果。因此,在引入软件工程化实践的过程中,要明确我们并不时为了引入技术而引入技术,实际上我们要做的是一种生产方式的改造,改造的核心目标是引入质量管理并将其制度化。通过对于质量管理方式的思考,我们知道了正确的提高软件生产力的方法,那就是:"Build the Quality into Process!",这也就是现在为什么很多的软件生产组织开始注重CMM和ISO的原因。


2.3 CMM与ISO9001

2.3.1 什么是CMM?
    在介绍CMM内容之前,首先概述一下不成熟软件组织与成熟软件组织的差异。在不成熟的软件单位,软件过程一般由实践者及其管理者在项目进程中临时拼凑而成,因而推迟进度和超出预算已成为惯例,产品质量难以预测,有时为了满足进度要求,常在产品功能和质量上做出让步。
    然而,一个成熟软件组织具有在全组织范围内管理软件、开发过程和维护过程的能力,规定的软件过程被正确无误地通知到所有员工,工作活动均按照已规划的过程进行。并通过可控的先导性试验和费效分析使这些过程得到改进,对已定义过程中的所有岗位及其职责都有清楚的描述,和通过文档与培训使全组织有关人员对已定义的软件过程都有很好的理解,从而使其软件过程所导致的生产率和质量能随时间的推移得到改进。

在能力成熟度模型(CMM)中,蕴涵着这样一些基本概念:
1、软件过程:人们用于开发和维护软件及其相关过程的一系列活动、方法、实践及变换。
 
2、软件过程能力:描述(开发组织或项目组)遵循其软件过程能够实现预期结果的程度,它既可对整个软件开发组织而言,也可对一个软件项目而言。

3、软件过程性能:表示(开发组织或项目组)遵循其软件过程所得到的实际结果,软件过程性能描述的是已得到的实际结果,而软件过程能力则描述的是最可能的预期结果,它既可对整个软件开发组织而言,也可对一个特定项目而言。

4、软件过程成熟度:一个特定软件过程被明确和有效地定义,管理测量和控制的程度。

5、软件能力成熟度等级:软件开发组织在走向成熟的途中几个具有明确定义的表示软件过程能力成熟度的平台。

6、关键过程域:每个软件能力成熟度等级包含若干个对该成熟度等级至关重要的过程域,它们的实施对达到该成熟度等级的目标起到保证作用。这些过程域就称为该成熟度等级的关键过程域,反之有非关键过程域是指对达到相应软件成熟度等级的目标不起关键作用。归纳为:互相关联的若干软件实践活动和有关基础设施的一个集合

7、关键实践:对关键过程域的实践起关键作用的方针、规程、措施、活动以及相关基础设施的建立。关键实践一般只描述"做什么"而不强制规定"如何做"。整个软件过程的改进是基于许多小的、渐进的步骤,而不是通过一次革命性的创新来实现的,这些小的渐进步骤就是通过一些着关键实践来实现。

8、软件能力成熟度模型(CMM):软件过程改进的必要指导。随着软件组织定义、实施、度量、控制和改进其软件过程,软件组织的生产力也伴随着这些阶段逐步前进,完成对软件组织进化阶段的描述模型。

    CMM提供了一个框架,将软件过程改进的进化步骤组织成5个成熟等级,为过程不断改进奠定了循序渐进的基础。这5个成熟度等级定义了一个有序的尺度,用来测量一个组织的软件过程成熟和评价其软件过程能力,这些等级还能帮助组织自己对其改进工作排出优生次序。成熟度等级是已得到确切定义的,也是在向成熟软件组织前进途中的平台。每一个成熟度等级为连续改进提供一个台基。每一等级包含一组过程目标,通过实施相应的一组关键过程域达到这一组过程目标,当目标满足时,能使软件过程的一个重要成分稳定。每达到成熟框架的一个等级,就建立起软件过程的一个相应成分,导致组织能力一定程度的增大。下面表2给出了CMM模型概要,表中的5个等级各有其不同的行为特征。要通过描述不同等级组织的行为特征:即一个组织为建立或改进软件过程所进行的活动,对每个项目所进行的活动和所产生的横跨各项目的过程能力。
 
表 CMM模型概要

    通过上表,我们知道每个成熟度级的关键过程域,每个关键过程域包括一系列相关活动,只有全部完成这些活动,才能达到过程能力目标。为了达到这些相关目标,必须实施相应的关键实践。

    CMM有两个基本用途:软件过程评估和软件能力评价。软件过程评估,目的是确定一个组织的当前软件过程的状态,找出组织所面临的急需解决的与软件过程有关问题,进而有步骤地实施软件过程改进,使组织的软件过程能力不断提高。因此,软件过程评估关注一个组织的软件过程有哪些需改进之处及其轻重缓急。评估组采用CMM来指导他们进行调查、分析和排优先次序。组织可利用这些调查结果,参照CMM中的关键实践所提供的指导,规划本组织软件过程的改进策略。

    软件能力评价,目的是识别合格的能完成软件工程项目的承包方,或者监控承包方现有软件工作中软件过程的状态,进而提出承包方应改进之处。软件能力评价关注识别一个特定项目在进度要求和预算限制内构造出高质量软件所面临的风险。在采购过程中可以对投标者进行软件能力评价。评价的结果,可用于确定在挑选承包方的风险,也可对现存的合同进行评价以便监控方的过程实施。从而识别出承包方的软件过程中潜在的可改进之处。

表1:基于一个二十万行代码规模的项目的估算结果


    对于国内的大部分用户来讲,正确地认识并应用CMM具有非常重要的意义,从上面的表中我们可以看到,有效地在软件组织内部实施CMM,能够使软件组织获得巨大的利益。反过来我们也要清楚地认识到,我们实施CMM所应当追求的,应当是表中所展现的结果,如果要追求的结果不是这样的,那么可能会导致CMM实施活动的彻底失败。


2.3.2 什么是ISO9001?
    ISO9001是国际标准组织所颁布的ISO9000系列标准中的一个,他适用于生产制造业的质量管理。因为它不是针对软件开发而建立的,因此又形成了ISO9000-3,作为补充说明来指导如何将ISO9001应用于软件行业。
在ISO9001中,对产品质量的标准和伴随着产品生产体系的质量管理体系的标准都进行了详尽的描述,应用它可以对产品及质量管理体系进行评估,从而认证一个企业及其产品是否符合质量标准的要求。

2.3.3 关于CMM与ISO9001
    在软件产业内,我们经常会看到这样的讨论:对于一个软件生产企业,究竟是应当实施ISO9001,还是应当实施CMM。其中一种观点认为应当先实施ISO9001,因为他明确、具体,容易实施,并且通过实施ISO9001能够帮助我们快速地建立起一个完善的质量管理体系,这对于在软件企业中实施质量管理非常有益,并且投资小、见效快;还有一种观点认为应当去实施CMM,因为他针对的是软件行业,指导是明确的,并且在国内外都有一些成功的范例,还有很重要的,它似乎成为了我们的软件行业通往国际软件市场的一个通行证,因此应当实施CMM。这两种观点非常具有代表性,我们暂且不去评价孰是孰非,我们先来看一下CMM与ISO9001的实质:

    其实从质量管理方式的角度来认识,就可以非常容易理解二者之间的区别。CMM的本质是全面质量管理(Total Quality Management)这种质量管理方式在软件产业的一个具体的应用;而ISO9001时对一个质量管理体系的规格说明。这也就是说,CMM所描述的是如何通过软件过程改进( Software Process Improvement)来逐步地改进软件生产实践活动,逐步建立起并完善软件生产所需要的全面质量管理体系;而ISO9001描述了一个完善的全面质量管理体系应当是什么样子。从实施的角度来评价,CMM指导的是循序渐进的建立过程,而ISO9001描述的是建立的目标,也就是说,CMM更为容易实施,而ISO9001在实施的层面上缺乏必要的指导。从实施的结果来看,实施过ISO9001的软件企业更多会有这样的感觉:"我们现在软件生产中的文档也规范了,但似乎对我的开发工作的效率并没有太大的帮助"

    其实从这一点就可以直观地了解,这种实施一定是"照猫画虎",即使质量管理体系已经建立起来了,但是这种质量管理活动无法实现于生产实践的有效结合,也就是说这个质量管理体系无法形成伴随着软件生产体系的质量管理,而变成了为软件开发团队增加麻烦的一个组织机构,这样很显然起不到应有的作用,对于软件生产无法带来促进与帮助,因此质量管理活动很难进行,也很难持久,这就是很多的软件企业''成功''地实施了ISO9001,却没有得到效果的一个根本原因。通过CMM的实施,质量管理体系是在软件生产过程的改进过程中建立并逐步完善的,其成长是于生产实践的发展同步进行的,因此质量管理活动可以与生产实践活动有效融合,自然效果显著。

    在这里,我们并不是评价CMM与ISO9001那个好、那个不好,事实上也不存在这样的问题,关键在于我们对它们的理解与使用,理解正确,使用得当,才能够获得期望的结果。国内也有过利用CMM作为指导,成功地实施ISO9001的范例,所以这里并不在于我们选择什么来实施,而关键点在于要有实施,而且这种实施的重点不在于学得像不像,而重点要关注实施的质量管理活动如何能够服务于生产实践。因为只有这样,所实施的内容才能被制度化,制度化并不简单地是一种行政命令,而是一种自动化地遵循规范,开发人员和质量管理人员之间并不是敌对关系,而是工作中的强力协作关系。

    同样,我们也不能认为,选择了CMM就一定能够获得成功,就目前国内的实施情况来看,我们也担心实施的实效性,特别急迫地出于业务的需要而迫不急待地拿到更高的级别的实施者,最后会失败的,因为它违背了事物发展的客观规律,它是不以我们的主观意志为转移的。
全面质量管理的实施,是一种文化的改造,文化的改造的一个难点在于,文化很难被直接触及,而必须通过事实教育才能有所转变,而事实教育又必须要有实践,这就形成了一个死循环,要打破它,就必须借助外部的力量,这个力量应当是一种合力,这个合力分为压力与推力,压力来源于企业的高层领导,而推力来源于软件工程过程组(Software Engineering Process Group)。这两股力量缺一不可。

    软件生产力的提升必须要通过软件过程改进来完成。软件过程改进活动之所以要改进,就是我们不能够"眉毛胡子一把抓",而需要在一种合理的指导下循序渐进地、坚持不懈地关注并改进软件生产实践,强调的是循序渐进性与持久性;改进(Improvement)是明显地区别于再工程(Re-engineering)的,改进是改革性的,而再工程是革命性的。"照猫画虎"地实施ISO9001就是一种再工程的行为,因此失败的风险比较高。在软件过程的改造上,CMM提倡的、强调的是改进行为。

    这里我们也要对过程的概念进行进一步的引申,我们说软件生产力的提升的关键是软件过程改进,这里提倡的是改进行为。而企业业务能力的改进是靠什么?是业务过程的改进(Business Process Improvement)还是业务过程在工程(Business Process Re-engineering)?我们知道,大中型企业关注的是ERP、CRM实际上就是针对企业的业务过程的一种改造,是改革还是革命?是每个企业的高级管理层的决策的问题。改革的风险小,成功率高,但进展相对缓慢;而革命的进展快,但风险极大,成功率非常低。例如:西方国家的业务过程经历了长时间的发展,其成熟度与合理性科学地评价起来自然远远地超过我们,但是不是简单地"拿来主义"、"洋为中用"就可以解决我们的问题?我们认为这是值得思考的。国外的著名厂商的ERP高端产品在我们国内的企业实施中实施失败的例子屡见不鲜,这种现象其实就是证明了对过程应当采取改进还是再工程的论点的一个最好的实例。


2.4 国内的软件产业现状分析
    我国的软件产业的软件生产力落后是必须直面的一种现实,但在我们坦然地直面这种现实的同时,我们必须要问:"为什么?"要得到这个问题的答案,要看我们的软件产业的发展轨迹。过去我们的软件开发多是为了应付一些短期的业务目标而进行的,这些应用软件的特点是功能相对来讲比较简单、需求也比较明确,那么大家进行基于代码的方式来考虑面临的业务问题似乎还可以处理,所以这也是我们当前的软件行业的手工作坊的生产模式形成的一个背景。但是当前我们所面临的业务问题,无论从范围还是从复杂度方面,都与过去的软件不能同日而语,再这样的情况下,首先对于业务过程的理解上、软件的设计和实现上的难度都增加了,再基于过去的那种软件开发方式无法应付了,它需要利用特定的软件工程化技术来完成。而这些技术对于我们大部分的软件开发人员来讲是陌生的。对比我们与软件产业发达国家之间的差距,我们发现在软件开发人员的知识结构上以及软件开发机构的组织架构上都存在着巨大的差距。国外的软件开发人员的组成情况看,我们会看到其中有业务分析员、系统分析员、架构设计师、软件设计人员、和程序设计人员等明确的划分,事实上它们已经形成了软件工厂,而我们的开发人员的特点是综合能力非常强,每个人可以再一个项目中来完成这些工作,但质量和效果就无法保证,这也就是我们为什么可以开发出技术上非常先进的工具类的软件产品,但却很难开发出成百上千人年的大规模的软件产品的一个原因,我们当前国内的大部分的软件开发机构,可以称其为小作坊或是大作坊,但却不能称其为软件工厂,这样的组织结构下,我们没有环境培养和锻炼出优秀的高级软件人才,所以,软件工程化的核心任务就是实现生产模式的转变。我们要把大作坊变成大软件工厂,把小作坊变成小软件工厂。这是发展的需要,无论对整个行业,还是对每个个体。

    所以,我们既不要盲目悲观,也不要盲目乐观,科学的方法指导和遵循客观规律的实践活动是我们成功的关键。所以,在这里我们要重新定义软件工程化,我们说它不是技术,而是实践。软件工程化实践包括多个方面,覆盖软件的完整的生命周期,包括软件各个加工环节上的技术实践和在整个软件生命周期中的管理实践。这些实践同样需要在科学的指导下以改进的方式融入。这个科学的指导,选择CMM是一种明智之举。首先,CMM的成功的应用非常多,这证明了它的科学性与合理性;其次,SPI所涉及的是企业文化的改造,大家在进步的过程中都是摸着石头过河,包括向自己学习和向他人学习,这需要由一个交流环境,采用CMM作为SPI的指导的企业最多,自然这个交流的环境也最好。总结起来,软件工程化实践可以分为管理实践与技术实践两类,按照CMM模型的指导,基本的管理实践应当是先期建立的,再CMM的LEVEL 2中,包含了六个关键过程域(Key Process Area),其核心是建立起项目管理的基本实践能力。项目管理是实现其它一切的基础。在这六个关键过程域当中,包括需求管理(Requirement Management)、项目计划(Project Planning)、项目跟踪与监控(Project Tracking and Oversight)、转包合同管理(Subcontract Management)、软件质量保证(Software Quality Assurance)和软件配置管理(Software Configuration Management)。其中两个关键过程域是直接关注项目管理的两项基本活动的,项目计划和项目的跟踪与监控,而其它的四个关键过程域所关注的是项目管理的辅助。需求管理是为了帮助项目经理控制项目的需求和范围;转包合同管理是为了帮助项目经理对转包合同实现统一的管理;软件质量保证是帮助项目经理了解项目进展的真实状况,它的重要程度相当于项目经理的耳朵和眼睛;软件配置管理是帮助管理再项目过程中产品的完整性和一致性。这些具体的管理实践,是帮助通过对各个方面有效的管理活动,服务于项目管理。因此,对于国内的绝大多数的软件开发组织来讲,其开展软件工程化实践的首要任务九是建立起上述的项目管理的基本及相关的管理实践。在这些管理实践建立起来之后,还要去关注其它软件工程化技术实践的逐步引入,逐步提升特定的软件生产环节上的技能,从而达到生产力向更高的层次迈进。

3、AllFusion的技术架构
    AllFusion是CA公司的软件工程化一体化解决方案的全新商标,CA公司将其定位在全面的应用生命周期管理解决方案,其中包括建模、变更与配置管理、过程与项目管理、生命周期管理门户等部分,AllFusion将这些部分有效地整合为一个有机结合的整体,以满足软件生产组织在软件产品的开发和维护的过程中的全部需求。

    AllFusion之所以被成为应用生命周期管理解决方案,是因为这个解决方案所关注的核心是软件生产中的管理。或许当前还会有人认为软件生产中技术是关键因素,但是我们说这种错误的认识正在被一天天地转变。在长期的软件生产实践中,我们看到了如下的一个发展过程:在发展的早期阶段,技术是其决定作用的,由于当时的计算机的处理能力非常有限,因此要想让计算机能够提供更多的服务,必须在计算的算法和处理上进行大量的优化,以便利用可怜的资源实现计算要求,在这样的前提条件下,基于代码的适当的优化对于能否让计算机技术帮助我们工作起到了决定性的作用,同时,这个时期的软件特点是算法的含量高,而功能相对较为简单,因此这是时代是技术起决定性作用的时代,同时也是"英雄"辈出的时代。

    在发展的中期阶段,计算机的时间和空间的矛盾得到了适当的缓解,计算能力和存储能力都得到了很大程度的加强,于是就尝试着将计算机技术应用到信息管理的领域,信息的管理技术进入了初期的发展阶段,这时的软件在功能上和和规模上较之前一个阶段都有了较大幅度的提高,因此软件开发过程中引入了开发组的概念,以便使开发工作能够更快速地完成。在小组中,开发工作按照功能范围进行了划分,但并没有明确的阶段分工。在这个阶段中,技术仍然是项目成功的主要因素。

    软件开发发展到现今的阶段,计算资源进一步得到了增强,应用的范围进一步扩大,并且普遍地渗透到了业务处理领域,在这个阶段中,软件的规模和复杂度出现了爆炸式的增长,开发工作的从事者变成了项目团队,在项目团队中,出现了明确的职责划分、和项目的阶段划分,每个阶段来完成整个开发任务中的特定的工作,由于所处理的问题更为纷繁复杂,因此每个阶段中的工作的难度也随着复杂度的增高而增高,需要有专门的掌握专业技能的人员来完成,才能满足软件开发的需要。因此在团队中,人员的角色划分更为明确,全队中不同角色人员间的协作被突出地强调,在这种背景下,能够让这些团队成员能够高效协作,圆满地完成软件开发任务,成为项目成功的决定性的因素,因此发展到这个阶段,管理是否成功成为了项目成功的关键因素。

    软件工程化技术的发展,也随着这样的发展变化过程在发展。软件工程化技术是在美国六十年代大规模爆发软件危机的背景下应运而生的,而它的发展和认识的逐步加深,也是随着实践的发展而发展、深入的。从早期出现的面向开发人员的CASE工具,到今天正在逐渐被大家认识和理解的软件生命周期管理的集成化、一体化解决方案,需求和相应的解决方案在不断地变化着,因此,在今天,在考虑进行软件工厂的环境建设的时候,一定要注意的一个问题是:"您是站在那个角度上再思考问题?是技术人员的角度还是管理人员的角度?"因为这个选择非常重要,它将决定您所进行的工作--软件生产方式的改造能否顺畅地、高效地进行,您能否从中获得发展中的竞争优势。
 
    CA公司的AllFusion是从管理者的需求的角度而提供的一套软件工程化解决方案,它的核心是为管理者提供在软件的完整生命周期中(开发和维护)来解决各个环节的管理问题的必要的支撑。并为一个软件组织持续地提高软件生产力的实践活动(例如:基于SEI CMM的指导进行持续的软件过程改进的实践)提供了必要的支撑,这是CA公司的AllFusion区别于其它公司的软件工程化解决方案的一个最为显著的特点。下面就分别来介绍AllFusion的各个部分。


3.1 过程和项目管理

3.1.1 什么是项目管理?
    项目是为了创造一个唯一的产品或提供一个唯一的服务而被进行的一个临时性的努力。项目管理是一系列的伴随着项目的进行而进行的、目的是为了确保项目能够达到期望的结果的一系列管理行为。由于软件是一种特殊的产品,这种产品的特殊性之一就是它的生产活动是一项目的形式来进行,因此项目管理对软件生产具有着决定性的意义。特别是在当今的软件项目中,项目管理的质量与软件产品的质量有着直接的对应关系,因此,提高项目管理的能力对于软件组织的软件生产力的提高是最为重要的。在SEI CMM中,对于不成熟的软件组织进行软件过程改进的指导的第一个目标,就是建立起项目管理的基本实践,因为项目管理是其它一些的一个基本前提,没有项目管理的前提下,其它的一切管理的实践都无法实现。

    项目管理是一项复杂的管理活动,包括:项目范围管理、项目进度管理、项目开销管理、质量管理、人力资源管理、沟通管理、项目风险管理、项目变更管理等多项管理实践,而在一个实际项目的进展过程中,这些管理实践又是相互融合、相互关联的,是复杂的、专业化的,因此要求有专职的项目经理和专门的项目管理机构来完成。

    在软件项目管理的实践过程中,归纳起来出现了两种类型的项目管理:被动式与主动式。

被动式的项目管理:
    这种项目管理是从技术小组的开发方式延续来的一种项目管理方式。在技术小组中,一直沿用的一种方式是以技术最好的人作为技术带头人,如在技术小组中担任组长,这个组长要对软件开发主要负责,在实际的开发项目中,这些技术带头人都是''英雄'',在项目中的工作方式是不断地解决不断出现的问题,我们将他的行为比喻为不断地在救火,当项目的规模和复杂度不算很大的情况下,这种方式似乎也能在项目中获得成功,但我们说一个项目的成败与否是维系在个人的能力上。在现在项目的规模和复杂度都有了很大幅度的增长之后,为了解决业务问题能够更快速,必然要引入更多的人员参与软件开发,这时出现的是项目团队的概念,在这样的前提下,过去那种按照技术的优劣来确定项目负责人的方式显然不能适合现今的项目管理的需要。因为在项目管理中,工作内容的重点是通过各种管理手段来保障项目组的成员能够协同工作,最终能够达到在质量符合要求的前提下在规定的期限内、在预算范围之内完成项目,这需要的是管理行为,而单纯地技术行为是无法解决这个问题的。因此,被动式的项目管理严格地来讲不是项目管理,这样的项目经理也实际上是有名无实,因此,在需要项目管理的今天,在项目经理的选材和培养方面也要进行必要的调整。项目管理中最为重要的是要变被动为主动。

主动式的项目管理:
    其实项目管理的被动与主动之分,主要区别在于应对风险的方法上。被动式的项目管理中,是尽量储备强大的技术后盾来等待风险的爆发,一旦有风险爆发,主要依赖技术力量来解决,所以非常依赖于技术人员的技术能力,但当前的项目中,风险的因素越来越多,很多并不是单纯的技术问题,因此这种项目管理自然不能应对;主动式的项目管理,是建立在对项目的需求和范围清晰了解的基础之上,制定合理详尽的项目计划,完整地计划项目中的开发行为、质量管理行为、资源和环境、风险管理等,在计划项目中的活动的同时,要参照完成开发任务所必需进行的必要的活动,同时要分析这些活动中那些会出现一些什么样的风险,在列举出风险的基础上对风险进行排队并对主要风险准备风险的防范计划,风险防范的相关行为也会一并计划在项目开发行为中,这种方式的项目管理,采取的是对项目风险主动进攻的方式,主动式的项目管理才是真正意义上的项目管理。

    在实际项目中,项目管理的主要工作内容包括:项目计划和项目的跟踪监控两项基本任务。在项目的前期,项目经理将掀起计划在项目的初始化和计划阶段的工作,在这个阶段的重点是明确项目的范围和需求,并据此计划项目的活动,并进行项目的估算和资源分配,进度表的排定等。在项目计划完成后,要由整个项目团队按照计划的安排来完成安排的各项工作,在工作进展的过程中,项目经理要通过多个途径来了解项目的实际进展情况,并检查与项目计划之间是否存在偏差,偏差出现就意味着工作没有按照计划的预期来进行,这有可能对项目的最终结果产生重大影响,因此需要及时调整项目计划,当然计划的调整要具体问题具体分析,先要找到问题发生的原因,然后再作出相应的应对活动的安排。在实际项目的进展过程中,计划工作与跟踪工作会交替进行,核心是围绕着最终的项目目标。

    一个实际的项目,项目计划的基本要求是制定切合实际的项目计划,要做到项目计划的切合实际是一个非常高的要求,需要对项目的需求进行详细的分析,根据项目的实际规模制订合理的项目计划,计划的内容包括进度安排、资源调配、经费使用等,为了降低风险,要进行必要的风险分析与制订风险管理计划。同时要对自己的生产力有非常准确的了解。这来源于项目经理的职业技能和实践经验的持续积累。

    在切合实际的项目计划的基础之上,才能进行有效的跟踪与监督,也就是在项目中进行跟踪与监控的工作时,项目计划是根本的依据。当发现项目计划的实际执行情况与计划不付的时候要进行适当的及时的调整,确保项目按期、按预算、保质量地完成。项目成功与否的关键是能不能成功地实施项目管理。

    单纯注重项目管理技术的本身,是无法对项目管理能力有切实的提高的,因此在这里我们要引申出过程管理。

3.1.2 什么是过程管理?
    所谓过程,简单来说就是我们做事情的一种固有的方式,我们做任何事情都有过程存在,小到我们日常生活中的琐事,大到我们的工程项目。对于做一件事,有过经验的人对完成这件事的过程了解,他会知道完成这件事需要经历几个步骤,每个步骤都完成什么事,需要什么样的资源、什么样的技术等等,因而可以顺利地完成工作;没有经验的人对过程不了解,就会有无从着手的感觉。

    过程管理,顾名思义,就是对过程进行管理,这种管理的目的是要让过程能够被共享、复用,并得到持续的改进。在软件行业,要管理的是软件过程。对于软件这种产品来讲,软件过程具有非常重要的意义。我们考虑一个简单的硬件产品的质量的最主要的影响因素是什么,比如说一件家具,我们说它的质量主要有两方面的因素来影响,一是用于生产这件家具的材料的质量要好,否则很难有好的家具,再就是从是生产的加工工艺要好,早期的家具是手工制造为主,那么由于工匠的手艺不同,产品的质量自然参差不其,技术的不断发展,材料上得到了进一步的提高,同时在产品的加工上,更多地引入了高技术含量的木工机械,产品的加工能力和质量的稳定性都得到了很大程度的提高。在软件这种产品的生产上,我们说有一定的特殊性,首先,软件产品没有物理的存在实体,它是完全的逻辑的高度聚合体,那么在质量因素的构成上,材料质量的因素就没有了,那么,在生产过程中唯一影响产品质量的就是产品的生产工艺,这个生产工艺在软件工程化中的术语就是软件过程。软件过程管理对于软件产业的发展非常重要。软件产业的发展基础不能永远是零,软件产业发展中的重要问题就是要注重循序渐进地积累,不单是积累技术实践,更为重要的是积累我们所欠缺的管理实践,积累项目中的各个环节的实践经验和项目管理的实践经验,这样才能保证我们的生产力持续地发展,满足业务发展的需要。

    对于软件过程的理解,绝对不能简单地理解为软件产品的开发流程,因为我们要管理的并不只是软件产品开发的活动序列,而是软件开发的最佳实践。它包括:流程、技术、产品、活动间关系、角色、工具等,是软件开发过程中的各个方面的因素的有机结合。因此,在软件过程管理中,首先要进行过程定义,将过程以一种合理的方式描述出来,并建立起企业内部的过程库,使工程成为企业内部可以被重用的共享资源。对于过程,要不断地进行改进,以不断地优化和规范化过程,以帮助提高企业的生产力。

    软件过程是极其复杂的过程。我们知道,软件是由需求驱动的,有了用户应用的实际需求才会引发开发一个软件产品。软件产品从需求的出现直到最终的产品出现,要经历一个复杂的开发过程,软件产品在使用时要根据需求的变更进行不断的修改,这称为软件维护。我们把用于从事软件开发及维护的全部技术、方法、活动、工具,以及他们之间的相互变换统称为软件过程。由此可见,软件过程的外延非常之大,包含的内容非常之多。对于一个软件开发机构来说,做过一个软件项目,无论成功与否,都能够或多或少地从中总结出一些经验。做过的项目越多,其经验越丰富,特别是一个成功的开发项目是很值得总结的,从中可以总结出一些做事的上佳过程,我们称之为最佳实践(Best Practices)。最佳实践是存放在成功者的头脑中的,很难被在机构内部共享和重复利用,发挥其应有的效能。长期以来,这些本应从属于机构的巨大的财富被人们所忽视,这无形中给机构带来了巨大的损失,当人员流动时这种企业的财富也随之流失,并且也使这种财富无法被其它的项目再利用。过程管理,就是对最佳实践进行有效的积累,形成可重复的过程,使我们的最佳实践可以在机构内部共享。过程管理的主要内容包括过程定义与过程改进。过程定义是对最佳实践加以总结,以形成一套稳定的可重复的软件过程。过程改进是根据实践中对过程的使用情况,对过程中有偏差或不够切合实际需要的地方进行优化的活动。通过实施过程管理,软件开发机构可以逐步提高其软件过程能力,从根本上提高软件生产能力。

    软件过程管理,将帮助软件组织将过程资产有效管理,使之可以被复用在实际项目中,并结合从项目中获取的过程的实际应用结果来不断地改进过程,这样软件组织将能够有能力改变自身的命运,将它从维系在一个或几个个体身上变成维系在企业中的管理上。过程管理能够让软件组织直观感觉到的一个最明显的转变就是软件项目中的所有成员的位置可替换。


3.1.3 过程和项目管理
    过程管理与项目管理在软件组织中是两项最为重要的管理,项目管理用于保证项目的成功,而过程管理用于管理最佳实践。但这两项管理并不是相互孤立的,而是有机地紧密地结合的。下图中展现的是过程管理和项目管理的基本关系。过程管理的成果--软件过程可以在项目管理中辅助于项目管理的工作,在项目的计划阶段,计划项目的最佳参考是过去的类似项目中的实践经验,这些内容通过过程管理都成为了过程管理的工作成果,这些成果对于一个项目的准确估算和合理计划非常有帮助,合理的计划是项目成功管理的基础,在项目计划的执行过程中,计划将根据实际情况不断地得到调整,直到项目结束时,项目计划才能被真正稳定下来。这份计划及其变更历史将是过程管理中的过程改进的最有价值的参考。在国外的成熟的软件组织内部,每个项目的开发完成后必须提供两篇重要的文档,一个是《项目开发历史》,在这个文档中将重点纪录在项目进展过程中的主要事件,即相应的应对措施及效果分析。另一个是《软件过程改进建议》,这是从软件开发项目的过程中提炼出来的对软件过程的改进的建议。过程的改进就是通过这样不断地注重从项目的实际经验中不断地将最佳实践(Best Practices)提炼出来的。

3.1.4 Process Continuum
    根据多年来的软件开发的实践活动的经验,针对软件组织在过程和项目管理方面的实际需求,CA公司提供了一个过程和项目管理(PPM)的工具系列,来解决软件组织应对过程和项目管理的需求时所面临的问题。

    (Process Continuum)产品介绍

3.2 变更和配置管理

3.2.1 概述
    软件配置管理是在软件的整个生命周期中,对软件及其相关产品的变更进行管理,以提高效率、避免混乱,有效保护软件资源的一项技术。软件配置管理技术,是支持团队化的软件开发、规范化团队开发下团队成员行为的一项技术。它可以有效地记录相关于一个某一特定的软件产品的全部配置项(包括构成一个软件产品的全部代码、文档、数据和测试用例等)的历史变更轨迹,控制变更行为,使变更在一种受控的状态下进行,以保证变更的正确性。软件产品的开发工作及开发完成后的维护工作都是对软件的不同的配置项的不断的变更的过程,变更地越频繁越容易引起混乱,所以必须对团队模式下的变更进行有效管理。

    业的软件资产(包括软件、文档以及数据等)是企业的一项重要投资。这些资产的变更由于会对企业的主要业务造成很大的潜在影响,因此必须予以严格的科学管理。软件变更与配置管理(CCM)可以记录并维护软件资产及其相互关系,并对这些资产如何变更进行管理和控制,这种控制是为了保障资产的质量和可用性。

    随着计算机应用技术的发展,应用越来越复杂,变更控制问题进一步加重。但软件开发人员把更大的优先权放在开发程序而不是对变更进行存档这一烦琐的任务上,从而忽略了对变更的妥善管理,造成了非常严重的后果。最为直观的影响是软件开发机构绝大部分的人力资源(粗略估计在80%以上)开销在维护上。这对于软件生产机构的软件生产力和软件产品的质量都造成了。因此,对于大规模的复杂的应用,进行有效的变更与配置管理是非常必要的。

3.2.2 变更与配置管理
    变更与配置管理相关技术的发展,经历了一个逐渐认识、逐步完善的发展阶段,随着技术的不断变化,管理方法和相关的管理技术、管理重点也出现了一系列的变化,下面就一些典型的技术进行概要的介绍:

版本管理:
    版本管理的主要功能是对所管理的对象集中受控,需要对受控的对象进行编辑的时候需要将对象检出系统,在开发环境中经过修改后再检入到系统中,在检入时系统将比较检入的对象与检出的对象之间是否存在不同,当存在不同时,系统将以一个新的版本号对变更进行标识,所标识的变更将被以增量的方式存储下来。在后续的技术发展中,又在版本主干的基础上增加了分支及归并的支持,以支持对受管理的对象的并发的修改工作。因此,对于一个完整的版本管理系统,应当能够提供检出、检入、分支的创建与分支的归并等功能。通过这些功能,可以实现对受控对象的变更的历史变更轨迹的记载和变更的控制和管理,同时支持团队的并发工作的需求。

变更请求管理:
    通过版本管理功能,只能纪录是谁(Who)、在什么时间(When)、对什么对象做了变更(What),而要做到对变更的全面完整的管理,非常重要的一点就是要纪录每个变更所发生的原因(Why)。纪录一个变更所发生的原因有利于管理者检查每个变更是不是在经过授权的条件下、基于合理的原因而发生的,这对于管理在开发和维护的过程中对产品的变更非常重要。同时,对原因的管理也可以成为开发工作管理的一种机制。

    这里首先澄清变更请求的概念。无论是软件产品中存在软件产品中存在Bug,还是软件产品存在功能不足,可以将这些现象统称为软件产品中存在缺陷,这些缺陷就是软件产品变更的基本原因。变更请求针对的就是这些缺陷。软件产品中存在的缺陷既然是变更的原因,那么对于变更的管理就可以上升到对于缺陷的追踪管理,要对缺陷的解决的全程进行追踪管理,并管理缺陷所关联的受控对象的相关变更。

    在原有的技术上,往往版本管理与变更请求管理是两个独立的系统,需要进行必要的集成才能做到变更请求与相关的产品变更的紧密关联。


过程驱动:
    过程驱动是近年来出现在软件配置管理中的一项新技术,简而言之,它是一种机制,通过这种机制可以帮助企业在开发和产品维护过程中去自动化地强化变更管理流程(Change Control Procedure)的实现。这一点非常有利于软件过程的稳定性和可重复性,对于软件产品的质量也有很大的帮助。近年来,软件配置管理技术的一个重要的发展方向就是注重与软件过程之间的结合,能否将产品与变更控制过程结合得更为紧密将决定软件变更控制流程能否在软件生产过程中高效地实现。

    过程驱动的机制首先可以支持过程根据定义的情况被自动化地实现,自动化的意义除了高效外,更重要的一点是可以稳定地实现控制过程,做到过程的稳定、可重复;过程驱动的另外一个要点是要支持变更控制流程的灵活定义,每个开发机构可以根据自己的管理办法定义自己的变更控制流程,并对过程进行管理。

发布管理:
    软件产品成功开发后会出现发布管理的问题,一般来讲,一个产品经过长时间的多个用户的使用,会出现很多发布的版本,这些不同版本在不同的最终用户处被同时的使用着,这对于软件生产组织就提出了一个要求,对这些用户必须能够提供支持,这就要求在任何的时刻都能够重构过去发布过的任何一个版本,这只有通过对产品发布的科学管理才能够做得到。特别是对于过去采用结构化程序设计方法所开发出来的软件产品,发布管理非常的必要。
 
    在配置管理系统中,全部的产品的组成部分(包括文档、代码、数据文件、测试用例等)被做为软件资产统一地存放在软件资产库中,对于每个发布的版本必须保存一份发布配置纪录,并且遵循规范的发布过程,这就为重构历史发布版本提供了可能。

变更与配置管理:
    变更与配置管理实际上是上面所谈及的各项管理的一种有机结合,在早期的软件管理系统中,管理的重点非常倾向于对产品的配置的管理,但随着软件技术的发展,变更的管理越来越成为管理的重点,其中更为注重的式对变更控制流程的强化,因此在CA的解决方案中,将变更与配置管理的概念提出来,取代了原来的软件配置管理的概念。

    在软件配置管理的概念中,其中也涉及到了变更控制流程的概念,非常具有代表性的就是软件资产三级库的概念,也称为配置管理三环境。这个概念是这样的,在配置管理系统内部必须提供支持开发、测试和产品管理的三个基本环境,传统的实现方式是建立三个物理上分立的存储库。第一个叫做开发库,提供给开发人员进行任意的产品变更;第二个叫做受控库,在受控库中任何人不允许做变更,只提供给测试人员进行测试;第三个叫做产品库,产品库只允许产品管理人员从库中提取产品发布。在三个库之间需要有产品的迁移,这些工作都是在特定的授权下由专门的人来进行的。

    在过程驱动的模式下,这些产品生命周期中的控制都可以被自动化地实现,并且可以避免认为的疏忽所引入失误的可能性。在当前的应用开发环境下,由于开发的规模日益扩大,因此变更过程的管理被提到了一个更高的位置上。

    在没有自动化配置管理解决方案的任何软件开发机构要处理变更请求均将发生错误、延迟和过度的成本消耗。信息系统机构正面临提供更高质量产品以及更短开发生命周期和更简便维护的日益压力。因此,配置管理的真正挑战就是在不影响生产力的情况下将控制引入应用软件的开发和维护过程。通过有效地进行软件的变更和配置管理,可以帮助软件开发团队提高软件开发过程的稳定性,并保证软件产品具有良好的可维护性和可重用性,为当前形势下要求的快速地建立高质量的应用提供必要的支撑。

3.2.3 CA变更与配置管理简介

(CCC/harvest)产品介绍插入

3.3 数据和业务过程建模

3.3.1 为什么要建模?
    对于软件开发,所有开发人员都知道需要经历一个软件生命周期,在开发的前期需要对需求进行收集和抽象,对收集到的原始需求要进行分析,在分析的基础之上要进行设计,再进行实现、测试等,从而完成一个软件产品的开发工作。说起来软件的开发工作似乎就是这样简单,但在实际的软件开发过程中,往往会出现很多困难的情况,核心的问题最终是体现在软件产品的质量方面。软件项目经常会出现超期、超预算,最终用户对所开发的产品不满意等问题,这些原因最终都会直接影响产品的质量。造成这些现象的原因可以说是多方面的,其根本的问题是出现在项目管理方面,但开发的早期生产环节上的一些问题,也对这些问题的解决有重大的影响。

    在开发团队谈到项目管理方面的问题的时候往往会谈到这样的一些感觉,如项目的范围难于控制,工作量难于进行准确地估计等,而其中大家感觉最严重的问题是"用户的需求经常变化",由于用户的需求经常变化,造成大量的时间和劳动力上的浪费。但这里我们要澄清的一个问题时,是否用户的需求在软件开发的过程中真的发生变化了?还是我们在开始开发工作的过程中对需求的不断深入的理解给我们造成了这种感觉?这是一个值得认真思考的问题。如果在软件开发的过程中,用户方没有出现过业务过程调整的问题,那么,就不能说用户的需求发生了变化,而只能认为是开发团队对用户的需求的理解存在问题。

    在过去,软件的规模不大,复杂度不高的情况下,在进行软件开发工作时,开发人员并没有借助一些方法,似乎也能够完成需求分析与软件设计等工作,甚至有的软件项目根本就没有专注进行此类的工作,而是将这些工作与实现(编码)工作结合在一起进行了。但在今天,再利用这种方式来进行软件开发工作,似乎就越来越显得力不从心了,项目的失败率也越来越高。这里面一个核心的问题就在与软件产品的规模,过去的软件项目多是基于一些短期的临时性的业务目标而产生的,所应对的问题的复杂性是我们利用人脑可以直接加工和处理的,因此采用基于编码的思维方式似乎可以应对;而今天的软件需求在理解上就必须借鉴必要的方法,无法直接想清楚。

    据此,我们需要对软件产品的生产过程(生命周期)进行再次定义,以便对这项工作达成一致的理解。从一个产品的加工过程的角度来看,可以将这些过程定义为需求定义、需求分析、设计、实现、测试等,其中在实现前期的工作是更为重要的,可以说,越早期的工作,其质量问题对产品的质量的影响越大,因此也越重要。软件产品是为支持特定的业务过程的运作的,业务过程应当是什么样,这是应当由业务专家根据业务运作的实际需要来定制的,这个过程就是需求定义。业务专家所定义的需求需要以一种方式准确地表述给软件开发人员,软件开发人员据此来理解最终用户的需求,并在理解的基础上由设计人员给出能够满足需求的软件设计,然后编程人员才能够利用程序设计语言讲软件实现出来。测试人员可以根据对需求和软件设计的理解来从不同的角度检查软件是否存在问题。在这个过程中,很重要的一点是软件开发团队成员间的沟通,信息的传递是否准确、清晰、完整,将决定最终产品的质量。

    在当前的软件开发中,需求定义、需求分析和设计等环节普遍存在较大的问题,采用什么样的工作方法、采用什么样的描述方式,才能够满足这些工作上对工作进展和质量管理的要求?建模无疑是一种最佳的手段。
 
    在团队开发中沟通是最重要的问题,沟通的问题既存在于开发人员之间,也存在于开发人员与业务人员之间,由于问题域的业务术语的不同所带来的沟通障碍必须依赖于准确、清晰的建模语言来跨越,大家将规范化的建模语言作为公共语言来沟通,就可以屏蔽掉很多问题。


3.3.2 模型驱动的开发方法

业务过程建模
    对于业务过程进行动态和静态的描述。利用IDEF0(功能分解)来描述业务活动及其相互之间的关系,对于一个特定的业务活动,在模型中可以从输入、输出、控制和机制等四个角度进行描述,再配合一定的问题说明,可以支持对业务活动的静态结构及其相互之间的管理关系进行准确的描述。对于一个具体的功能,可以从动态的角度细化地利用IDEF3(工作流)进行描述。通过这些方法,可以对业务过程进行准确地描述。
    在实际的项目开发过程中,利用这种方法进行描述时,当遇到一些无法描述清楚的问题时,就意味着对这段业务过程的理解上还存在问题,这样就可以引导我们将思维集中在那些尚不清楚的问题上,在早期就可以解决风险。

    业务过程的准确描述是后续一切工作的基础。

数据建模
    数据是对业务运行过程中的信息的一种抽象,所以它是与业务过程紧密结合的。通过IDEF1x模型,利用实体关系方法对数据进行抽象分析,这个分析的结果可以与业务过程紧密结合,一方面可以帮助业务过程的描述,另一方面可以进行交互的检查,以保证业务过程的描述的完整性和正确性。
 
构件建模
    基于业务过程模型和数据模型可以实现对需求的完整描述和详细的规格说明,这就完成了需求的定义。需求定义完成后,开发团队中的分析人员可以从中发现出软件需求并进行进一步的分析和设计工作,这就涉及到软件的架构设计和详细设计,在这里可以使用面向对象的分析与设计方法、利用UML建模语言,进行针对软件系统的分析与设计工作,即进行构件建模。

模型管理
    在大型的软件开发项目中,任何一个模型的建立都需要由一组人来完成,因此与软件开发相同,对模型也要引入必要的管理,以支持由团队所带来的模型建立与修改中的各种问题。

3.3.3 CA的AllFusion中的企业建模套件
    ERwin Modeling Suite产品介绍插入

3.4 生命周期管理门户
    在一个软件项目中,项目各团队成员间的沟通是否顺畅将是决定项目团队能否发挥最高的生产力水平的关键因素,也是决定项目管理机构能否切实地把握项目的进展和质量状况,从而有效地控制项目,使其能够按期、按预算、保质量完成的重要保障。

    在一个项目中,顺畅的沟通应当能够作到如下一些方面:
    项目计划的信息应当让每个项目团队成员都细致了解,并且每个成员都能够清楚地知道每天的工作计划和工作计划时间表。对每项工作的内容、要完成这项工作应当使用的标准方法、标准工具、出产的产品、需要的输入产品、前置条件等信息都要能够了解。
    每个项目成员的实际工作进展状况应当能够被及时、准确地收集并方便地汇总到项目管理部门,为项目管理人员控制项目的发展方向提供决策的依据。

    软件项目是多团队、多成员协作的共同成果,因此沟通机制应当能够支持项目各层面人员间实现顺畅的高效的信息沟通。以使各人员间形成高效的相互配合。
    建立沟通的方式很多,最有效的应当是信息获取方便、沟通信息有记载、沟通方式规范。并应当能够很好地支持信息的加工和汇总并方便地形成各种专题报告,这尤其对管理工作可以提高效率,使管理人员能够把更多的精力集中在管理行为本身,促进管理能力的进一步提高。
 
Advisor 产品介绍插入

3.5 软件测试

已有 0 位对此文章感兴趣的网友发布了看法    
我来评两句 用户名: 密码:
  匿名发表
相关案例
解决方案速查(共有 14131 个方案)
基础软件
安全保密
管理软件
办公软件
软件开发
系统网络
图形多媒体
辅助设计
行业专用
教育教学
电子政务
其他软件
接入
通信
网络
存储
IT服务
电子杂志订阅
点击电子杂志名称查看样刊
输入E-mail地址即可订阅
E-mail
赞助商链接