《软件项目管理 课件》由会员分享,可在线阅读,更多相关《软件项目管理 课件(30页珍藏版)》请在金锄头文库上搜索。
1、软件工程软件工程软件项目管理(2)六软件配置管理v任何软件开发都是迭代过程,也就是说,在设计过程会发现需求说明书中的问题,在实现过程又会暴露出设计中的错误,。此外,随着时间推移客户的需求也会或多或少发生变化。因此,在开发软件的过程中,变化(或称为变动)既是必要的,又是不可避免的。但是,变化也很容易失去控制,如果不能适当地控制和管理变化,势必造成混乱并产生许多严重的错误。v软件配置管理是在软件的整个生命期内管理变化的一组活动。具体地说,这组活动用来:标识变化;控制变化;确保适当地实现了变化;向需要知道这类信息的人报告变化。软件项目管理(2)软件配置v1. 软件配置项软件配置项v软件过程的输出信息
2、可以分为3类:计算机程序(源代码和可执行程序);描述计算机程序的文档(供技术人员或用户使用);数据(程序内包含的或在程序外的)。v上述这些项组成了在软件过程中产生的全部信息,我们把它们统称为软件配置,而这些项就是软件配置项。软件项目管理(2)2. 基线基线v基线是一个软件配置管理概念,它有助于我们在不严重妨碍合理变化的前提下来控制变化。IEEE把基线定义为:已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。v简而言之,基线就是通过了正式复审的软件配置项。在软件配置项变成基线之前,可以迅速而非正式地修改它。一旦建立了基线之后,虽然仍然可
3、以实现变化,但是,必须应用特定的、正式的过程(称为规程)来评估、实现和验证每个变化。v除了软件配置项之外,许多软件工程组织也把软件工具置于配置管理之下,也就是说,把特定版本的编辑器、编译器和其他CASE工具,作为软件配置的一部分“固定”下来。因为当修改软件配置项时必然要用到这些工具,为防止不同版本的工具产生的结果不同,应该把软件工具也基线化,并且列入到综合的配置管理过程之中。软件项目管理(2)软件配置管理过程软件配置管理过程v软件配置管理是软件质量保证的重要一环,它的主要任务是控制变化,同时也负责各个软件配置项和软件各种版本的标识、软件配置审计以及对软件配置发生的任何变化的报告。v具体来说,软
4、件配置管理主要有5项任务:标识、版本控制、变化控制、配置审计和报告。软件项目管理(2)1. 标识软件配置中的对标识软件配置中的对象v可以标识出两类对象:基本对象和聚集对象(可以把聚集对象作为代表软件配置完整版本的一种机制)。基本对象是软件工程师在分析、设计、编码或测试过程中创建出来的“文本单元”,例如,需求规格说明的一个段落、一个模块的源程序清单或一组测试用例。聚集对象是基本对象和其他聚集对象的集合。v每个对象都有一组能惟一地标识它的特征:名字、描述、资源表和“实现”。其中,对象名是无二义性地标识该对象的一个字符串。v在设计标识软件对象的模式时,必须认识到对象在整个生命周期中一直都在演化,因此
5、,所设计的标识模式必须能无歧义地标识每个对象的不同版本。软件项目管理(2)2. 版本控制版本控制v版本控制联合使用规程和工具,以管理在软件工程过程中所创建的配置对象的不同版本。借助于版本控制技术,用户能够通过选择适当的版本来指定软件系统的配置。实现这个目标的方法是,把属性和软件的每个版本关联起来,然后通过描述一组所期望的属性来指定和构造所需要的配置。v上面提到的“属性”,既可以简单到仅是赋给每个配置对象的具体版本号,也可以复杂到是一个布尔变量串,其指明了施加到系统上的功能变化的具体类型。软件项目管理(2)3. 变化控制变化控制v对于大型软件开发项目来说,无控制的变化将迅速导致混乱。变化控制把人
6、的规程和自动工具结合起来,以提供一个控制变化的机制。v典型的变化控制过程如下:接到变化请求之后,首先评估该变化在技术方面的得失、可能产生的副作用、对其他配置对象和系统功能的整体影响以及估算出的修改成本。评估的结果形成“变化报告”,该报告供“变化控制审批者”审阅。所谓变化控制审批者既可以是一个人也可以由一组人组成,其对变化的状态和优先级做最终决策。为每个被批准的变化都生成一个“工程变化命令”,其描述将要实现的变化,必须遵守的约束以及复审和审计的标准。把要修改的对象从项目数据库中“提取(checkout)”出来,进行修改并应用适当的SQA活动。最后,把修改后的对象“提交(checkin)”进数据库
7、,并用适当的版本控制机制创建该软件的下一个版本。软件项目管理(2)3. 变化控制变化控制v“提交”和“提取”过程实现了变化控制的两个主要功能访问控制和同步控制。访问控制决定哪个软件工程师有权访问和修改一个特定的配置对象,同步控制有助于保证由两名不同的软件工程师完成的并行修改不会相互覆盖。v在一个软件配置项变成基线之前,仅需应用非正式的变化控制。该配置对象的开发者可以对它进行任何合理的修改(只要修改不会影响到开发者工作范围之外的系统需求)。一旦该对象经过了正式技术复审并获得批准,就创建了一个基线。而一旦一个软件配置项变成了基线,就开始实施项目级的变化控制。现在,为了进行修改开发者必须获得项目管理
8、者的批准(如果变化是“局部的”),如果变化影响到其他软件配置项,还必须得到变化控制审批者的批准。在某些情况下,可以省略正式的变化请求、变化报告和工程变化命令,但是,必须评估每个变化并且跟踪和复审所有变化。软件项目管理(2)4. 配置审计配置审计v为了确保适当地实现了所需要的变化,通常从下述两方面采取措施:正式的技术复审;软件配置审计。v正式的技术复审关注被修改后的配置对象的技术正确性。复审者审查该对象以确定它与其他软件配置项的一致性,并检查是否有遗漏或副作用。v软件配置审计通过评估配置对象的那些通常不在复审过程中考虑的特征(例如,修改时是否遵循了软件工程标准,是否在该配置项中显著地标明了所做的
9、修改,是否注明了修改日期和修改者,是否适当地更新了所有相关的软件配置项,是否遵循了标注变化、记录变化和报告变化的规程),而成为对正式技术复审的补充。软件项目管理(2)5. 状态报告状态报告v书写配置状态报告是软件配置管理的一项任务,它回答下述问题:发生了什么事?谁做的这件事?这件事是什么时候发生的?它将影响哪些其他事物?v配置状态变化对大型软件开发项目的成功有重大影响。当大量人员在一起工作时,可能一个人并不知道另一个人在做什么。两名开发人员可能试图按照相互冲突的想法去修改同一个软件配置项;软件工程队伍可能耗费几个人月的工作量根据过时的硬件规格说明开发软件;察觉到所建议的修改有严重副作用的人可能
10、还不知道该项修改正在进行。配置状态报告通过改善所有相关人员之间的通信,帮助消除这些问题。软件项目管理(2)能力成熟度模型v美国卡内基梅隆大学软件工程研究所在美国国防部资助下于20世纪80年代末建立的能力成熟度模型(capabilitymaturitymodel,CMM),是用于评价软件机构的软件过程能力成熟度的模型。v最初,建立此模型的目的主要是,为大型软件项目的招投标活动提供一种全面而客观的评审依据,发展到后来,此模型又同时被应用于许多软件机构内部的过程改进活动中。软件项目管理(2)能力成熟度模型的基本思想v能力成熟度模型的基本思想是,由于问题是由我们管理软件过程的方法不当引起的,所以新软件
11、技术的运用并不会自动提高软件的生产率和质量。能力成熟度模型有助于软件开发机构建立一个有规律的、成熟的软件过程。改进后的软件过程将开发出质量更好的软件,使更多的软件项目免受时间和费用超支之苦。v软件过程包括各种活动、技术和工具,因此,它实际上既包括了软件开发的技术方面又包括了管理方面。CMM的策略是,力图改进对软件过程的管理,而在技术方面的改进是其必然的结果。软件项目管理(2)CMM在改进软件过程中所起的作用vCMM在改进软件过程中所起的作用主要是,指导软件机构通过确定当前的过程成熟度并识别出对过程改进起关键作用的问题,从而明确过程改进的方向和策略。v通过集中开展与过程改进的方向和策略相一致的一
12、组过程改进活动,软件机构便能稳步而有效地改进其软件过程,使其软件过程能力得到循序渐进的提高。软件项目管理(2)成熟度等级v对软件过程的改进,是在完成一个又一个小的改进步骤基础上不断进行的渐进过程,而不是一蹴而就的彻底革命。CMM把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。这5个成熟度等级定义了一个有序的尺度,用以测量软件机构的软件过程成熟度和评价其软件过程能力,这些等级还能帮助软件机构把应做的改进工作排出优先次序。v成熟度等级是妥善定义的向成熟软件机构前进途中的平台,每个成熟度等级都为软件过程的继续改进提供了一个台阶。软件项目管理(2)成熟度等级vC
13、MM对5个成熟度级别特性的描述,说明了不同级别之间软件过程的主要变化。从“1级”到“5级”,反映出一个软件机构为了达到从一个无序的、混乱的软件过程进化到一种有序的、有纪律的且成熟的软件过程的目的,必须经历的过程改进活动的途径。每一个成熟度级别都是该软件机构沿着改进其过程的途径前进途中的一个台阶,后一个成熟度级别是前一个级别的软件过程的进化目标。vCMM的每个成熟度级别中都包含一组过程改进的目标,满足这些目标后一个机构的软件过程就从当前级别进化到下一个成熟度级别;每达到成熟度级别框架的下一个级别,该机构的软件过程都得到一定程度的完善和优化,也使得过程能力得到提高;随着成熟度级别的不断提高,该机构
14、的过程改进活动取得了更加显著的成效,从而使软件过程得到进一步的完善和优化。CMM就是以上述方式支持软件机构改进其软件过程的活动。软件项目管理(2)1. 初始级初始级v软件过程的特征是无序的,有时甚至是混乱的。几乎没有什么过程是经过定义的(即没有一个定型的过程模型),项目能否成功完全取决于开发人员的个人能力。v处于这个最低成熟度等级的软件机构,基本上没有健全的软件工程管理制度,其软件过程完全取决于项目组的人员配备,所以具有不可预测性,人员变了过程也随之改变。如果一个项目碰巧由一个杰出的管理者和一支有经验、有能力的开发队伍承担,则这个项目可能是成功的。但是,更常见的情况是,由于缺乏健全的管理和周密
15、的计划,延期交付和费用超支的情况经常发生,结果,大多数行动只是应付危机,而不是完成事先计划好的任务。v总之,处于1级成熟度的软件机构,其过程能力是不可预测的,其软件过程是不稳定的,产品质量只能根据相关人员的个人工作能力而不是软件机构的过程能力来预测。软件项目管理(2)2. 可重复级可重复级v软件机构建立了基本的项目管理过程(过程模型),可跟踪成本、进度、功能和质量。已经建立起必要的过程规范,对新项目的策划和管理过程是基于以前类似项目的实践经验,使得有类似应用经验的软件项目能够再次取得成功。达到2级的一个目标是使项目管理过程稳定,从而使得软件机构能重复以前在成功项目中所进行过的软件项目工程实践。
16、v处于2级成熟度的软件机构,针对所承担的软件项目已建立了基本的软件管理控制制度。通过对以前项目的观察和分析,可以提出针对现行项目的约束条件。项目负责人跟踪软件产品开发的成本和进度以及产品的功能和质量,并且识别出为满足约束条件所应解决的问题。已经做到软件需求条理化,而且其完整性是受控制的。已经制定了项目标准,并且软件机构能确保严格执行这些标准。项目组与客户及承包商已经建立起一个稳定的、可管理的工作环境。v处于2级成熟度的软件机构的过程能力可以概括为,软件项目的策划和跟踪是稳定的,已经为一个有纪律的管理过程提供了可重复以前成功实践的项目环境。软件项目工程活动处于项目管理体系的有效控制之下,执行着基
17、于以前项目的准则且合乎现实的计划。软件项目管理(2)3. 已定义级已定义级v软件机构已经定义了完整的软件过程(过程模型),软件过程已经文档化和标准化。所有项目组都使用文档化的、经过批准的过程来开发和维护软件。这一级包含了第2级的全部特征。v在第3级成熟度的软件机构中,有一个固定的过程小组从事软件过程工程活动。当需要时,过程小组可以利用过程模型进行过程例化活动,从而获得一个针对某个特定的软件项目的过程实例,并投入过程运作而开展有效的软件项目工程实践。同时,过程小组还可以推进软件机构的过程改进活动。在该软件机构内实施了培训计划,能够保证全体项目负责人和项目开发人员具有完成承担的任务所要求的知识和技
18、能。v处于3级成熟度的软件机构的过程能力可以概括为,无论是管理活动还是工程活动都是稳定的。软件开发的成本和进度以及产品的功能和质量都受到控制,而且软件产品的质量具有可追溯性。这种能力是基于在软件机构中对已定义的过程模型的活动、人员和职责都有共同的理解。软件项目管理(2)4. 已管理级已管理级v软件机构对软件过程(过程模型和过程实例)和软件产品都建立了定量的质量目标,所有项目的重要的过程活动都是可度量的。该软件机构收集了过程度量和产品度量的方法并加以运用,可以定量地了解和控制软件过程和软件产品,并为评定项目的过程质量和产品质量奠定了基础。这一级包含了第3级的全部特征。v处于4级成熟度的软件机构的
19、过程能力可以概括为,软件过程是可度量的,软件过程在可度量的范围内运行。这一级的过程能力允许软件机构在定量的范围内预测过程和产品质量趋势,在发生偏离时可以及时采取措施予以纠正,并且可以预期软件产品是高质量的。软件项目管理(2)5. 优化级优化级v软件机构集中精力持续不断地改进软件过程。这一级的软件机构是一个以防止出现缺陷为目标的机构,它有能力识别软件过程要素的薄弱环节,并有足够的手段改进它们。在这样的机构中,可以获得关于软件过程有效性的统计数据,利用这些数据可以对新技术进行成本/效益分析,并可以优化出在软件工程实践中能够采用的最佳新技术。这一级包含了第4级的全部特征。v这一级的软件机构可以通过对
20、过程实例性能的分析和确定产生某一缺陷的原因,来防止再次出现这种类型的缺陷;通过对任何一个过程实例的分析所获得的经验教训都可以成为该软件机构优化其过程模型的有效依据,从而使其他项目的过程实例得到优化。这样的软件机构可以通过从过程实施中获得的定量的反馈信息,在采用新思想和新技术的同时测试它们,以不断地改进和优化软件过程。v处于5级成熟度的软件机构的过程能力可以概括为,软件过程是可优化的。这一级的软件机构能够持续不断地改进其过程能力,既对现行的过程实例不断地改进和优化,又借助于所采用的新技术和新方法来实现未来的过程改进。软件项目管理(2)CMMv一些统计数字表明,提高一个完整的成熟度等级大约需要花1
21、8个月到3年的时间,但是从第1级上升到第2级有时要花3年甚至5年时间。这说明要向一个迄今仍处于混乱的和被动的行动方式的软件机构灌输系统化的方式,将多么困难。软件项目管理(2)CMM评估中存在的若干问题评估中存在的若干问题v前言:本文部分内容参考了2000年2月IEEE杂志上的一篇文章。该文作者从采购方和软件企业方分析了SCE中存在的若干问题,最后发问:“CMM评估还可信吗?”中国软件企业的CMM评估,一开始就充满了浮躁、做秀和功利的气息。整个CMM评估的过程,我们看到的是好大喜功的政府行业主管部门、一贯爱凑热闹的新闻媒体、有赚白不赚的中介机构、证书随身带的主任评估师和愿意花钱买吆喝的软件企业。
22、CMM评估的这种浓厚的功利性,使得“GamingtheAssessment”成为软件企业上上下下的共识和“不宣之秘”。希望本文对国内软件业界正确对待CMM起到应有作用,不要像某些软件企业一样找个“证书随身带”、“一手交钱,一手交证”的主任评估师。毕竟,提高企业的核心竞争力是最重要的。软件项目管理(2)1 评估人员的资质评估人员的资质vSEI对主任评估师的资质要求比较严格,但是评估是由一个评估小组来进行的。问题1:评估组员的资质很难满足。通常,评估组员很难达到SEI所要求的软件工程的技术和管理背景。v问题2:评估人员多是管理人员,技术素质普遍较弱。这个问题也包括主任评估师,由于多年脱离软件开发实
23、践工作,主任评估师甚至在提问时有意回避技术问题,而是反复询问管理问题。因为评估人员的技术素质普遍较弱,因此对于CMM中涉及工程部分的关键实践解释能力很差。甚至在对企业员工面试时,当员工提到技术方面问题时,评估人员会将话题岔开,又转到管理问题上。软件项目管理(2)2 评估的时间压力评估的时间压力v一般评估的时间都在一周左右,要执行的工作相当多,时间压力很大。原来的评估方法中要求单个面试的方式,后来迫于时间压力,新版本中增加了“GroupInterview”(团体面试)。v问题3:团体面试本来是为了节省时间,实际上往往掩盖了问题,不能发现真实情况。项目管理论坛联想测试部门的面试,就是团体面试的方式
24、。对于评估小组而言,由于时间紧张,他们往往不愿意运用自己的洞察力和专业判断力,而是满足于在检查清单上一项一项划勾,也就是俗称的“Checklist强迫症”。v问题4:“Checklist强迫症”也给了软件企业一个钻空子的机会。软件企业可以努力使文档做得更加“方便评估小组的工作”。软件项目管理(2)3 CMM问卷问卷v在CMM评估中,用到的是同一套问卷。连美国人都批评到,“不可想像对于医生、建筑师或者律师采用同一套试卷来考察,而对于软件企业的评估使用的确实一套不变的问卷。想想看,这些软件企业可能是在为我们的国防系统进行开发!”v问题5:同一套成熟度问卷。CMM评估允许企业在评估前对员工作出培训,
25、而这个培训的作用往往被扭曲了。很多软件企业甚“教唆”员工在成熟度问卷上如何回答的“更成熟”一点。软件项目管理(2)4 文档文档v因为CMM评估要求文档应该有在线版本(这样才可以被配置管理软件所管理和控制),所以企业在将文档转换为在线版本时,就可以对文档作出修饰。因为知道评估小组的时间很紧张,软件企业可以把文档弄得故意非常复杂,评估小组有时候看到复杂得文档,会不愿意去深究,认为既然写了这么多,看在页数得份上,也应该满足要求。问题6:过分依赖文档。软件项目管理(2)5 项目的选择项目的选择v选择什么项目给评估小组看,这里大有学问。软件企业可以把自己最“成熟”的项目、最优秀的员工组成一个“Golde
26、rnProject”来供评估小组检查。那么,这样的评估可信性就大打折扣。比如,国内某软件企业明明是自己一个20多人的“中央研究院”过了CMM某个级别,在媒体宣传时却故意混淆视听,有意无意造成整个企业通过某个级别的错觉。问题7:选择什么项目,选择什么部门,这其中太多猫腻。软件项目管理(2)6 事先事先“培训培训”员工员工v甚至有这样的现象,员工在接受面试之前,塞给他一本企业的CMM指导手册,甚至要求他故意在手册上作点笔记、把手册弄得脏一点,以显得认真阅读过了。问题8:“培训”员工作假。这里最严重的问题,实际上是主任评估师的技术素质。计算机技术领域日新月异的发展,很多主任评估师是只知道“管理”,对于技术的理解可能仅仅限于510年前的技术。IEEE杂志文章的作者建议,在评估时应该同时“Conducton-sitetechnicalevaluations”,观察企业的开发人员实际完成技术工作的方式。作者特别举了一个企业的例子,纸面上的同行评审与实际中的同行评审的天渊之别。Paul在给联想评估时,竟然没有向测试部门提问,这个事实太令我失望了。其他领域不论,我真的不信对于测试领域竟然无话可问!软件项目管理(2)此课件下载可自行编辑修改,供参考!此课件下载可自行编辑修改,供参考!感谢你的支持,我们会努力做得更好!感谢你的支持,我们会努力做得更好!