1、第9章 软件项目管理,内容提要,9.1 软件项目管理的职能 9.2 成本估计 9.3 质量管理体系及策略 9.4 项目计划,软件项目管理,软件作为人们智力劳动的成果,与其他产品一样,不仅取决于所采用的技术、方法和工具,还取决于计划与管理水平。大量软件开发的实践表明,导致软件项目失败的原因常常不是技术上的问题,而是管理上的问题。因此,软件项目管理显得越来越重要。本章着重讨论项目计划、质量管理、成本估计等软件管理问题。,9.1 软件项目管理的职能,软件项目管理的职能,软件项目管理是指在软件生命周期中软件管理者所进行的一系列管理活动,其目的是在一定的时间和预算范围内,有效地利用人力、资源、技术和工具
2、,使软件系统或软件产品按预期的计划和质量要求如期完成。软件管理的主要职能包括:1.制定计划:规定待完成的任务、要求、资源、人力和进度。2.建立组织:为实施计划,保证任务的完成,需要建立分工明确的责任制机构。3.配备人员:任用各种层次的技术人员和管理人员。4.指导:鼓励和动员软件相关人员完成所分配的工作。5.检验:对照计划或标准,监督和检查实施的情况。,软件项目管理的职能,9.1.1 软件项目的特点 软件产品虽然也是一种产品,但与其他产业的产品有着明显的不同:它是不可见的逻辑实体,是完全没有物理属性的无形产品。因此,软件产品难以理解,难于驾驭,但它确实是把思想、概念、算法、流程、组织、效率和优化
3、等融合在一起了。文档编制的工作量在整个项目研制过程中占有很大的比重,并且直接决定和影响软件的质量。软件开发工作技术性很强,要求参加工作的人员具有一定的技术水平和实际工作的经验。另外,人员的流动对工作的影响很大,离去的人员不但带走了重要的信息,还带走了工作经验。,软件项目管理的职能,软件项目的特点主要表现在以下几个方面:1.智力密集,可见性差。软件开发充满了高强度的脑力劳动,而且软件开发的成果是无形的逻辑实体,软件产品的质量难以定量度量。软件项目的管理者不仅要求深入掌握软件知识,还要具有软件开发的实际经验。2.独特的研制方式。软件研制通常是在特定机型上,即采用特定硬件配置且由特定的系统软件或支撑
4、软件支持的特定开发环境中进行的。这种建立在内容、形式各异基础上的研制或生产方式,与其他领域中的大规模现代化生产有很大的差别,也自然会给管理工作造成许多实际困难。,软件项目管理的职能,3.劳动密集,自动化程度低。软件项目经历的各个阶段都渗透了大量的手工劳动,这些劳动十分细致、复杂并容易出错,使得软件的正确性难以保证。4.应用和维护困难。一方面表现在应用过程中,要求用户不仅要掌握计算机的基本知识,还要接受专门的培训;另一方面表现在软件维护的工作量和维护成本在软件生命周期中占有很大的比重。5.软件开发工作渗透了人的因素。为高质量地完成软件项目,不仅需要软件人员具有一定的技术水平,而且还要求他们具有良
5、好的心理素质。软件人员的情绪和工作环境都对他们的工作有很大影响。与其他行业相比,这一特点十分突出,必须给予足够的重视。,软件项目管理的职能,9.1.2 提高软件成功概率的途径软件开发实践表明,软件的成功取决于良好的商业计划、精细的管理方法、先进的开发技术以及优秀的软件工具。1.良好的商业计划和成功的商业运作是提高软件成功概率的首要条件。软件需求推动软件的研制和生产,一个良好的软件商业开发计划必须建立在真实的软件需求基础上。没有需求的软件,不管在技术上如何先进完美,在项目管理中如何精细无瑕,都不会获得商业上的成功,最终都会被无情地淘汰。2.加强软件开发过程的管理,做到组织有序、各类人员协同配合,
6、共同保证工程项目的完成,避免软件开发过程中个人单干的现象,从而保证软件的质量要求。,软件项目管理的职能,3.推广使用软件开发的成功技术和方法,并且不断探索更好的技术和方法,消除一些在计算机系统早期发展阶段形成的错误概念和做法。4.开发和使用好的软件工具来支持软件开发的全过程,即建立软件工程支持环境。总之,要从计划、管理、技术和开发工具等几方面入手,全面考虑,以保证软件的质量和提高软件成功的概率。,9.2 成本估计,成本估计,软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价,不包括原材料和能源的消耗,主要是人的劳动消耗。软件产品不存在重复制造过程,软件开发成本是以一次性开发过程所花费
7、的代价来计算的。因此,软件开发成本的估算,应该以从软件可行性研究、需求分析、设计、编码、单元测试、组装测试到确认测试,即整个软件开发过程所花费的代价作为依据。软件具有可见性差、定量化难等特殊性,尤其对于一个大型的软件项目,由于项目的复杂性,很难在项目完成前准确地估算出开发软件所需要的工作量和费用。,成本估计,对于一个大型的软件项目,要进行一系列的估算处理,主要靠分解和类推的方法进行,基本估算方法分为三类:1.自顶向下的估算方法。这种方法是从项目的整体出发,进行类推。估算人员根据以前已完成项目所消耗的总成本,来推算将要开发的软件的总成本,然后按比例将它分配到各开发任务单元中去。这种方法的优点是估
8、算工作量小,速度快。缺点是对项目中的特殊困难估计不足,估算出来的成本盲目性大,有时会遗漏被开发软件的某些部分。,成本估计,2.自底向上的估算方法。这种方法是把待开发的软件细分,直到每个子任务都已经明确所需要的开发工作量,然后把它们累加起来,得到软件开发的总工作量。这是一种常见的估算方法。它的优点是估算各个部分的准确性高。缺点是缺少各项子任务之间相互联系所需要的工作量,还缺少许多与软件开发有关的系统级工作量(配置管理、质量管理、项目管理)。所以估算值往往偏低,必须用其他方法进行检验和校正。,成本估计,3.差别估算方法。这种方法综合了上述两种方法的优点,其主要思想是把待开发的软件项目与过去已完成的
9、软件项目进行类比,从各个子任务中区分出类似的部分和不同的部分。类似的部分按实际工作量进行计算,不同的部分则采用相应的方法进行估算。这种方法的优点是可以提高估算的准确程度,缺点是不容易确定所谓“类似”的界限。此外,可以使用经验公式和成本估算模型进行估算。,成本估计,一种常用的成本估算方法是先估计完成项目所需的工作量(人月数),然后根据每个人月的代价(金额)计算软件的开发费用开发费用=人月数每个人月的代价另一种方法是先估计软件的规模(通常指源代码行数),然后根据每行源代码的平均开发费用(包括分析、设计、编码、测试所花的费用),计算软件的开发费用开发费用=源代码行数每行平均费用 典型的成本估算模型有
10、COCOMO模型和Putnam模型等。,9.3 质量管理体系及策略,质量管理体系及策略,质量需求是软件用户的最终需求。软件的质量不仅依赖于软件开发过程中所使用的技术和方法,而且依赖于一套完备的质量管理体系。,质量管理体系及策略,9.3.1 质量管理质量管理是软件管理者为保证软件质量而实施的一系列管理活动,它通过建立一套完备的质量管理体系,来实施一系列管理方法和手段,监控和及时调整软件开发过程中的所有活动,它贯穿于软件开发的全部过程中。软件质量管理着重于确定软件产品的质量方针、目标、职责以及制定达到这些目标的计划。在质量管理体系中,通过诸如质量策划、质量控制、质量保证和质量改进等手段监控及调整软
11、件计划、开发活动和质量目标。软件质量管理的目的是建立对软件产品质量的定量理解,实现特定的质量目标,以满足顾客及最终用户对高质量软件产品的需要。,质量管理体系及策略,9.3.2 人员组织的管理软件开发,尤其是大型软件开发凝聚着很多开发人员的集体智慧。因此,合理地组织好参加软件项目的人员,构建优秀的开发团队,最大限度地发挥他们的工作积极性和工作效率,对成功地完成软件项目极为重要。采用什么形式的开发组织,要根据软件项目的特点来决定,同时也要充分考虑参与人员的素质。,质量管理体系及策略,1.组织原则 在建立项目组织时应注意以下原则:(1)早落实责任。在软件项目工作的开始,要尽早指定专人负责,使其有权进
12、行管理,并对任务的完成全面负责。(2)减少接口。在软件开发过程中,人与人之间的交流和联系是必不可少的,即存在着通信路径。一个组织的生产效率因完成任务时存在的通信路径数目增多而降低。因此,合理的人员分工和组织结构对提高软件开发效率是非常重要的。(3)责权均衡。明确每个开发人员的权利和责任,开发人员的责任不应该大于其拥有的权利。,质量管理体系及策略,2.组织结构的模式通常有三种组织结构的模式可供选择: (1)按课题划分的模式。 (2)按职能划分的模式。 (3)矩阵形模式。这种模式实际上是以上两种模式的复合。一方面,按工作性质,成立一些专门组,如开发组、业务组、测试组等;另一方面,每一个项目由经理人
13、员负责管理。每个软件相关人员属于某一个专门组,参加某一项目的工作。,质量管理体系及策略,3.程序设计小组的组织形式尽管程序设计工作是按独立方式进行的,即程序员独立地完成任务,但开发人员之间的必要交流是不可缺少的。在一个开发团队中,人员之间联系的多少和联系的方式与生产效率直接相关。理论和实践都表明,在已经延误进度的软件项目中增加新的人员,只会使任务进一步拖延。小组内部人员的组织形式对生产效率也有影响。,质量管理体系及策略,4.人员配备合理地配备人员是成功地完成软件项目的切实保证。所谓合理地配备人员应包括:在不同阶段适时任用人员,恰当掌握用人标准。(1)配备人员的原则配备软件人员时,应注意以下三个
14、主要原则:重质量:软件项目是技术性很强的工作,任用少量有实践经验、有能力的人员去完成关键性的任务,常常要比任用较多的经验不足的人员更有效。重培训:花力气培养所需的技术人员和管理人员是有效解决人员问题的好方法。双阶梯提升:人员的提升应分别按技术职务和管理职务进行,不能混在一起。,质量管理体系及策略,(2)对项目经理人员的要求软件经理人员是工作的组织者,他的管理能力的强弱是项目成败的关键。除一般的管理要求外,他还应具有以下能力:对用户提出的非技术性要求加以整理提炼,以技术说明书形式转告给分析员和测试员。能说服用户放弃一些不切实际的要求,以保证合理的要求得以满足。具有解决综合问题的能力。要懂得心理学
15、。,质量管理体系及策略,9.3.3 进度管理 合理的进度安排是如期完成软件项目的重要保证,也是合理分配资源的重要依据,因此进度安排是管理工作的另一个重要组成部分。,质量管理体系及策略,1.软件开发小组人数与软件生产效率理论上,一个人就可以完成需求分析、设计、编码和测试工作。但是,随着软件开发项目规模的增大,需要更多的人共同参与同一软件项目的工作。例如10个人1年能够完成的项目,若让1个人干10年是不行的。因此要求由多人组成软件小组,共同参与项目的开发。但是,当几个人共同承担软件开发项目中的某一任务时,人与人之间必须通过交流来解决各自承担任务之间的接口问题,即所谓通信问题。通信需要花费时间和付出
16、代价,如会引起软件错误的增加以及软件生产效率的降低。理论上可以证明,随着软件小组人数的增加,软件生产效率就会下降。一般软件开发组的规模不能太大,人数不能太多,28人较合适。,质量管理体系及策略,2.任务的确定与并行性当参加同一软件工程项目的人数超过1人的时候,开发工作就会出现并行情况。软件项目的并行性提出了一系列的进度要求。因为并行任务是同时发生的,所以进度计划表必须决定任务之间的从属关系,确定各个任务的先后次序和衔接以及确定各个任务完成的持续时间。此外,应注意构成关键路径的任务,即若要保证整个项目能按进度要求完成,就必须保证这些关键任务要按进度要求完成。这样,就可以确定在进度安排中的重点。,
17、质量管理体系及策略,3.制定开发进度计划软件开发实践总结出一个分配软件开发各阶段工作量的规则,这个规则称为40-20-40规则。它指出在整个软件开发过程中,编码的工作量仅占20%,编码前的工作量占40%,编码后的工作量占40%。40-20-40规则只是作为一个指南,实际的工作量分配比例必须按照每个项目的特点来决定。一般在计划阶段的工作量很少超过总工作量的2%3%,除非是具有高风险的巨额投资项目。需求分析大约占总工作量的10%25%。花费在分析或原型化方面的工作量应当随项目规模和复杂性的增加而成比例地增加。,质量管理体系及策略,通常用于软件设计的工作量在20%25%之间,而用在设计评审与反复修改
18、的时间也必须考虑在内。由于软件设计已经投入了工作量,因此其后的编码工作相对来说要容易一些,用总工作量的15%20%就可以完成。程序调试和随后的软件测试工作约占总工作量的30%40%,所需要的测试量往往取决于软件的重要程度和软件设计的质量。按此比例确定各个阶段工作量的分配,从而进一步确定每一阶段所需要的开发时间,然后在每个阶段,进行任务分解,对各个任务再进行工作量和开发时间的分配。,质量管理体系及策略,(1)Gantt图Gantt图是作业排序中最常用的一种工具,最早由Henry L.Gantt于1917年提出。这种方法基于作业排序的目的,是将任务与时间联系起来的表现形式之一。有两种基本形式的Ga
19、ntt图:任务进度图和资源调度图。通常,可以使用Gantt图的直观显示进行组织运营,以此来提高工作效率。Gantt图用横坐标(表示时间)和纵坐标(表示软件开发的各个阶段)的形式来描绘软件开发任务的分解情况及每个开发阶段的开始时间和结束时间。,质量管理体系及策略,(2)工程网络图工程网络图是用圆圈(表示各个开发阶段,圆圈内是阶段符号,圆圈上是该阶段的最早开始.结束时间,圆圈下是该阶段的最迟开始.结束时间)和实线箭头(表示各个软件开发阶段的依赖关系)的形式来描述软件开发进程的工具。,质量管理体系及策略,工程网络图可解决Gantt图所不能实现的一些功能,例如,确定各个开发阶段的依赖关系,即执行的先后
20、顺序;根据每个阶段的最早、最迟时间来合理调整各个阶段的开始时间和结束时间,以实现资源的节省;另外,还可根据每个最早最迟时间相同的阶段,来确定整个开发过程中的关键路径(工程网络图中用双线箭头表示),关键路径上的开发阶段必须准时开始,否则开发的软件将不能按时完成。不是关键路径上的开发阶段可有一定程度的机动,全部机动时间为结束的最迟时间减去它开始的最早时间,再减去它的持续时间。,质量管理体系及策略,9.3.4 质量保证软件质量保证是为了保证软件系统或软件产品满足用户要求的质量而进行的有计划、有组织的活动,其目的是生产高质量的软件。在软件质量方面必须强调三个要点:1.软件必须满足用户规定的要求,与用户
21、需求不一致的软件,就无质量可言。2.软件应遵循软件标准所定义的一系列开发标准,不遵循这些标准的软件,其质量难以得到保证。3.软件还应满足某些隐含的要求,例如希望有良好的可理解性、可维护性等,而这些隐含的要求可能未被明确地写在用户规定的需求中,如果软件只满足它的显性需求而不满足其隐含需求,那么该软件的质量是令人怀疑的。,质量管理体系及策略,软件质量保证包括了与以下七个主要活动有关的各种任务:1.应用技术方法应该把软件质量保证设计到软件系统或软件产品中去,而不是事后再施加质量保证。因此,软件质量保证应首先从选择一组技术方法和工具开始,这些方法和工具帮助分析人员形成高质量的规格说明和高质量的设计。,
22、质量管理体系及策略,2.进行正式的技术评审一旦形成了规格说明和设计,就要对它们进行质量评估。完成质量评估的中心活动是正式的技术评审。正式的技术评审是一种由技术人员实施的程式化会议,其惟一目的是揭露质量问题。在多数情况下,评审能像测试一样有效地揭露软件中存在的缺陷。 3.测试软件软件测试组合了多种测试策略,这些测试策略包含一系列有助于有效地检测错误的测试用例。许多软件开发人员把软件测试用例作为质量保证的“安全网”,也就是说,开发人员认为通过测试能揭露最多的错误,借此减少对其他软件质量保证活动的需要。,质量管理体系及策略,4.标准的实施对软件工程应用正式的开发标准和过程的程度在各公司中是不同的。多
23、数情况下,标准由客户根据某些章程确定,某些场合下标准是自己确定的。如果存在正式的标准,软件质量保证活动就必须切实保证遵循这些标准。与标准是否一致的评估可以被软件开发者作为正式技术评审的一部分来进行。5.变动控制对软件质量的主要威胁来自“变动”。对软件的每次变动都有可能引入错误或者引入其他传播错误的副作用。变动的控制过程通过对变动的正式申请、评价变动的特征和控制变动的影响等活动直接提高软件的质量。变动控制应用于软件开发期间和软件维护阶段。,质量管理体系及策略,6.度量度量是任何工程学科必备的活动。软件质量保证的重要目标是跟踪软件质量和评价方法学及程序上的变动对软件质量的影响程度。要达到这个目标,
24、应该收集软件度量。软件度量包括某些技术上的和面向管理的度量。7.记录保存和报告软件开发记录的保存和报告为软件质量保证提供了收集和传播质量保证信息的过程。评审、检查、变动控制、测试以及其他软件质量保证活动的结果必须变成项目历史记录的一部分,并且应该把它传播给需要知道这些结果的开发人员。例如要记录过程设计的每次正式技术评审结果,并把记录放置在文件夹中,该文件夹包含了有关模块的所有技术信息和软件质量保证的信息。,9.4 项目计划,项目计划,软件项目计划涉及到实施项目的各个环节,带有全局的性质。计划的合理性和准确性往往关系着项目的成败。计划应力求完备、准确,充分考虑到一些未知因素和不确定因素以及可能的
25、修改,尽可能地提高所依据数据的可靠程度。针对不同的工作目标,软件计划可以有以下多种类型:(1)项目实施计划。这是软件开发的综合性计划,通常应包括任务、进度、人力、环境、资源、组织等多个方面。(2)质量保证计划。把软件开发的质量要求具体规定为在每个开发阶段中可以检查的质量保证活动。,项目计划,(3)软件测试计划。规定测试活动的任务、测试方法、进度、资源、人员职责等。 (4)文档编制计划。规定所开发项目应编制的文档种类、内容、进度、人员职责等。 (5)综合支持计划。规定开发过程中所需要的支持以及如何获取和利用这些支持。 (6)软件分发计划。软件开发项目完成后,如何提供给用户。 (7)用户培训计划。
26、规定对用户进行培训的目标、要求、进度、人员职责等。,项目计划,9.4.1 项目计划管理的内容软件项目计划的目标是提供一个能使项目管理人员对软件的范围、资源、成本和进度做出合理估算的框架。这些估算应当在软件项目开始时的一段时间内做出,并随着项目的进行定期更新。1.确定软件的范围软件范围包括功能、性能、限制、接口和可靠性。项目计划首先要确定软件的功能,并对其进行适当地细化以便提供更详细的细节。由于成本和进度的估算都与功能有关,因此常常采用某种程度的功能分解。性能的考虑包括处理和响应时间的需求。约束条件则包括外部硬件、可用存储器或其他现有系统对软件的限制。功能、性能和约束必须放在一起进行评价。当性能
27、限制变化时,为实现同样功能,开发工作量可能与变化前相差一个数量级。,项目计划,软件与其他系统元素是相互作用的。计划人员要考虑每个接口的性质和复杂性,以确定其对开发资源、成本和进度的影响。接口的概念可以理解为软件运行的应用环境,包括:(1)运行软件的硬件,如主机、打印机、显示器等。(2)必须与软件连接的现有软件,如数据库管理系统、操作系统等支撑软件。(3)通过终端或其他输入.输出设备使用软件的人。(4)软件运行前后的一系列操作过程。对每个接口,都必须清楚地了解通过接口的信息转换。软件范围最不明确的方面就是可靠性问题。在项目的初期,可以按照软件的一般性质规定一些具体的要求以保证它的可靠性。例如,用
28、于交通指挥系统的软件就不能失效,否则会危及人身安全。,项目计划,2.确定软件的资源软件的开发和运行需要一定的环境资源,这些资源包括人力资源、硬件资源以及软件资源。对每一种资源,应说明四个特性:资源的描述、资源的有效性说明、资源在何时开始需要以及资源使用的持续时间。(1)人力资源。人力资源是软件开发资源中最重要的资源,在计划开发活动时必须考虑人员的技术水平、专业、人数以及在开发过程的各阶段中对各种人员的需求。(2)硬件资源。硬件是作为软件开发项目的一种工具而投入的。在软件项目计划期间,需要考虑三种硬件资源:宿主机,软件开发时使用的计算机及其外部设备。目标机,运行已开发成功软件的计算机及其外部设备
29、。其他硬件设备,软件开发时所用的特殊硬件资源。,项目计划,(3)软件资源。软件资源是在开发期间辅助软件开发的相关软件。主要的软件资源包括: 业务系统计划工具软件。 项目管理工具软件。 支援工具软件。 分析和设计工具软件。 编程工具软件。 组装和测试工具软件。 原型化和模拟工具软件。 维护工具软件。,项目计划,3.成本估算在软件开发的初期很难对于软件成本和工作量做出准确的估算,因为各种人为和客观环境的变化,都会影响到软件最终成本和开发的工作量。但是,软件项目还是能够通过一系列系统化的步骤,在可以接受的风险范围内进行估算。,项目计划,4.设计开发进度进度安排的准确程度可能比成本估算的准确程度更重要
30、。软件产品可以靠重新定价或者靠大量的销售来弥补成本的增加,但是进度安排的落空,会导致市场机会的丧失,造成用户的不满意,而且也会导致成本的增加。因此,在考虑进度安排时,要把人员的工作量与花费时间联系起来,合理分配工作量,利用进度安排的有效方法严密监控软件开发的进展情况,以使软件开发的完成不致受到拖延。,项目计划,9.4.2 项目报告定期或及时地把有关项目进展情况的信息反馈给管理人员对于保证软件开发计划的顺利执行和软件质量是非常重要的。通过报告信息,管理人员可以对项目实施监控,及时修正成本估计、调整进度计划、改进资源配置和人员安排。报告的信息通常包括:已经完成的工作;下阶段计划要完成的工作;问题范
31、围;到目前为止的开发成本;项目预算执行情况以及其他有关的信息。,项目计划,为项目制定计划时,应该确立一系列里程碑。在每个里程碑上,开发人员都应该把正式的进展报告提交给管理人员。里程碑代表项目开发过程中一个独特阶段的顶峰。良好的里程碑的特点通常是完成某个文档,例如,“完成了总体设计”或“正式提出了测试计划”等。相反,像“完成了80%的编码工作”这样的里程碑是不好的,因为很难准确判断什么是完成了80%的编码工作。不应该把每个项目活动都确定为里程碑,否则开发小组用于准备报告的时间可能超过用于系统开发的时间。项目报告的另一种做法是建立月报制度,即每隔一个月定期向管理人员报告一次项目进展情况,通常使用固
32、定格式的月度报告表。,项目计划,9.4.3 项目检验项目检验是软件管理的最后一个方面。它是对照软件计划以及软件工程标准检查实施情况的过程。在发现项目的实施与计划或标准有较大的偏差时,应及时采取措施加以解决。1.检验管理的要点在检验管理时应注意以下问题:(1)重大偏差。在软件项目实施过程中,必须注意发现工作的开展与已制定的计划之间或与需要遵循的标准之间的重大偏差。遇到这种情况应及时向管理部门报告并采取相应的措施给予适当的处理。(2)选定标准。检验管理需要事先确定应当遵循的标准或规范,使得软件项目的工作进展可以用某些客观、精确且有实际意义的标准加以衡量。,项目计划,(3)特殊情况。任何事物在一般规
33、律之外都会存在一些特殊情况。管理人员必须把注意力放在软件项目实施的一些特殊情况上,认真分析其中的一些特殊问题,并加以解决。2.检验管理的工作范围检验管理在软件项目中可能涉及以下几个方面。(1)质量管理。包括用于明确度量软件质量的指标和准则,决定质量管理的方法和工具以及实施质量管理的组织形式。(2)进度管理。检验进度计划执行的情况。(3)成本管理。度量并控制软件项目的开销。,项目计划,(4)文档管理。检验文档编写是否符合要求。 (5)配置管理。对软件开发各阶段所产生的文档(如计划、说明书、报告)及一些在机器上可直接执行的程序文档的管理。,本章小结,软件项目管理是指软件生命周期中软件管理者所进行的
34、一系列管理活动。软件管理的主要职能是制定计划、建立组织、配备人员、指导和检验。软件产品作为人们智力劳动的成果,是不可见的逻辑实体,具有明显的特点,主要表现在:智力密集,可见性差,质量难以度量;独特的研制方式;劳动密集,自动化程度低;应用和维护困难以及渗透了人的因素。软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价。软件产品不存在重复制造过程,软件开发成本是以一次性开发过程所花费的代价来计算的。成本估计通常采用自顶向下的估算法、自底向上的估算法、差别估算法以及经验公式和成本估算模型等方法。,本章小结,质量管理是软件管理者为保证软件质量而实施的一系列管理活动,它通过建立一套完备的质量管
35、理体系,来实施一系列管理方法和手段,并贯穿于软件开发的全过程。合理地组织好参加软件项目的人员,构建优秀的开发团队,最大限度地发挥他们的工作积极性和提高他们的工作效率,对成功地完成软件项目极为重要。组织原则、组织结构的模式、程序设计小组的形式以及人员的配备对提高软件生产效率和保证软件质量起着重要作用。合理的进度安排是如期完成软件项目的重要保证,也是合理分配资源的重要依据。制定软件开发进度计划时,要考虑软件开发小组人数与软件生产效率的关系以及任务的并行性要求。,本章小结,软件质量保证是为了保证软件系统或软件产品满足用户要求的质量而进行的有计划、有组织的活动。软件必须满足需求规定、遵守开发标准、满足
36、隐含的需求。软件项目计划的目标是提供一个能使项目管理人员对软件的范围、资源、成本和进度做出合理估算的框架。它包括确定软件的范围、软件的资源、成本估算、设计开发进度。定期或及时地把有关项目进展情况的信息反馈给管理人员对于保证软件开发计划的顺利执行和提高软件质量是极端重要的。,本章小结,为项目制定计划时,应该确立一系列里程碑。里程碑代表项目开发过程中一个独特阶段的顶峰。项目检验是对照软件计划以及软件工程标准检查实施情况的过程。在发现项目的实施与计划或标准有较大的偏差时,应采取措施加以解决。,第10章 软件设计过程 的技术与方法,软件设计过程的技术与方法,10.1 软件工程方法学 10.2 软件工程
37、的标准化 10.3 软件设计常用的文档类型及作用 10.4 能力成熟度模型CMM,10.1软件工程方法学,软件工程方法学,10.1.1 软件开发流程与软件工程方法学软件工程方法学是指导和管理软件开发的应用工程学科,一个软件的开发流程不外乎涉及三个方面的内容:分析、软件设计和实现。随着开发方法的不断进步,人们设计了不同的软件生命周期模型。对不同生命周期模型实现过程的演化反映了软件工程方法的进化。纵观软件工程方法的进化过程,经历了从概念的提出到相关技术的研究,再到软件工程方法学的形成;从相关工具的形成,再到相关工具的实现等一系列的过程,逐步形成当前指导软件开发的技术基础。软件工程方法的每一步发展都
38、充分体现了在保证产品质量前提下提高开发速度的基本目标。,软件工程方法学,10.1.2 软件工程基本方法软件工程方法在软件开发的长期过程中随着软件工程技术的不断进步而不断完善,软件工程的基本方法经历了传统的结构化方法、面向对象方法、软件过程方法和构件工程方法四个阶段的演变。虽然软件工程方法取得了很大的进步,但是当前采用的软件开发方法主要还是结构化方法、面向对象方法。因为对相当数量的软件系统来说,以上两种方法,尤其是结构化方法,仍然是目前较为有效的软件开发方法。在本教材中主要使用结构化方法和面向对象方法描述软件开发的基本过程。,软件工程方法学,1.结构化方法结构化方法是按功能将问题分解抽象成模块、
39、建立模块和模块之间的调用关系来进行软件开发的。它的基本思想是将系统中的功能与数据相分离。结构化方法是一种围绕功能来组织软件系统的方法,在这种方法中,系统的基本构成要素是模块,它是一种实现系统单一功能的程序单元。模块具有输入、输出、内部数据和过程等基本要素。,软件工程方法学,2.面向对象方法面向对象开发方法是继结构化开发方法之后,着重解决系统需求变化和维护困难等问题而发展起来的一种全新的方法。面向对象方法是一种围绕真实世界中的事物来组织软件系统的全新方法。在这种方法中,系统的基本构成要素是对象。从软件开发人员的角度来看,对象是一种将数据和处理这些数据的操作合并在一起的程序单元;从用户的角度来看,
40、对象是一种具有某些属性和行为的事物。对象可以是具体的,也可以是概念性的。对象具有标识惟一性、分类性、多态性、继承性和封装性等基本特性。,软件工程方法学,3.软件过程方法软件过程方法起始于软件开发的过程思想。随着软件工程不同开发模型的相继提出,开发人员从注重软件开发的各个独立活动步骤发展到探究以软件开发过程中的方法、机制等内容为基础的思维方式,逐渐形成了软件开发的过程概念。,软件工程方法学,软件过程概念在1984年10月召开的第一届国际软件过程讨论会上首次正式提出,并将软件过程定义为:“软件过程(Software Process)是在软件生存期中所实施的一系列活动的集合,且每个活动可由一些任务组
41、成。”进入20世纪90年代,国际标准化组织(ISO)和国际电器电子工程师学会(IEEE)分别推出软件过程标准,将软件过程概念进一步扩展为多视面(Multi View)的过程。它把软件过程定义为“软件生命周期过程或软件过程组,是指软件生命周期中的一系列相关过程。过程是活动的集合,活动是任务的集合,任务则起到把输入加工成输出的作用。活动的执行可以是顺序的、迭代的(重复的)、并行的、嵌套的或者是有条件地引发的。它从合同、工程、运作、管理等视面研究软件生存期中所涉及的各种过程和活动。”,软件工程方法学,软件过程方法是为建立软件过程所必须实施的一系列工程化的活动,它的研究对象是与此有关的方法、工具和环境
42、。它的出现被认为是人们对软件工程方法认识的又一次质的飞跃。它促使软件开发人员把注意力从抽象的软件生命周期模型转向对软件项目成功起着关键作用的过程细节。,软件工程方法学,4.构件工程方法基于构件的软件工程(Component-Based Software Engineering,CBSE)是强调使用可复用的软件构件来设计和构造基于计算机的系统。它借鉴了工业界开发新产品中的使用已有部件,而不是一切都从头开始设计的成功经验。,软件工程方法学,软件复用的基础是由专门的软件企业生产的软件组件(Component),即构件。软件开发人员在软件开发时可大量复用这些规范的、高效的软件构件,以达到降低软件的开发
43、费用,提高软件的生产效率和提高软件质量的目的。在基于构件的软件工程方法的实施中,包含领域工程和基于构件的开发这两个并行的工程活动。领域工程是在应用领域探索可以复用的内容,这些内容包括功能模块、操作和数据。,软件工程方法学,基于构件的开发包括以下基本过程: (1)以客户的需求为基础,确定满足欲开发目标系统的体系结构。 (2)在可复用构件库中找出与本系统开发有关的构件。 (3)根据目标系统的体系结构确定符合要求的构件。 (4)对构件进行适应性修改,使其更好地满足系统集成的要求。 (5)集成构件以形成子系统和应用整体。在开发中,若构件库中已存在的构件不能满足系统开发的要求,还需要订制符合系统开发要求
44、的构件。,软件工程方法学,10.1.3 软件对象与方法选择 软件工程方法的选择与软件系统的特征有密切的关系,在软件的设计中一般涉及两类常见的软件系统。一类系统需求明确而且不随设计过程变化,这类系统的设计目标及功能可以预先指定。在实际应用中属于这类系统的有工艺稳定的生产过程的计算机控制系统、通讯设备的控制系统或者是计算机中的操作系统、编译程序、数据库系统等系统软件。这类系统的开发,与传统的工程方法十分类似,一般先进行规范的需求分析,需求规格说明书可以制定得非常精确和完整。在严格的组织管理下采用以瀑布模型和结构化分析及设计为代表的传统软件工程方法。,软件工程方法学,这种软件开发方法的主要特征是强调
45、生命周期前期的需求分析,假设用户的需求可以完全预先获取,认为在后期的开发过程中这个需求分析的结果是稳定的,基本不变的。这类软件系统的开发过程是有规律的、可预先计划的,通常这类系统也称为过程驱动的系统。在目前大多数软件系统的开发中,上述方法仍然对软件开发有着十分重要的指导意义,尤其是在项目管理方面。在实际应用设计中,即使是对一些复杂的、不确定的软件系统的开发,仍然可以在开发过程中部分地使用传统的软件工程方法。,软件工程方法学,在软件系统的开发中,用户的需求在大多数情况下是模糊的或随时间变化的。在这一类系统的开发中,甚至在系统开发完成后,在用户的使用过程中,用户还会由于需求的变化提出修改的要求。这
46、类系统的变化是在用户对系统的认识不断深化和要求更加确切的情况下而驱动的,所以这类系统一般也称为用户驱动的系统。例如在各行各业中普遍使用的管理信息系统、决策支持系统以及某些面向终端用户需要的系统等。开发这一类系统需要采用反复试探的技术,这类系统必须具有快速、简便地进行调整的特性。因此所用的开发方法也必须能迅速构建,反复试用和改进以满足变化和渐进的要求。这就对可提高软件系统的稳定性、可修改性和可重用性的面向对象方法、构件方法以及其他更新的开发方法提出了需求。,软件工程方法学,从上面的分析可以看出,要充分地对开发对象予以考虑,以选择合适的软件开发方法。这不但需要开发人员对所开发的系统进行仔细地分析、
47、理解和认识,也需要在软件的开发中积累经验,以便根据实际的问题选择适当的方法以经济、快捷的方式达到应用系统的目的。,10.2软件工程的标准化,软件工程的标准化,软件工程的基本思路是借助工程的方法开发软件,因此将工程中成熟的技术和方法应用在软件工程中是一条简捷、必要的途径。在各类工程技术中,标准化技术对工程项目的顺利实施、保证工程质量起到了重要的作用。采用标准化的方法,首先可以在企业内建立起最佳的生产秩序、技术秩序、安全秩序、管理秩序,使企业的生产活动和经营管理活动井然有序,避免混乱。另外,还可以获得最佳的社会效益和经济效益,因为一个标准的制定不仅要考虑标准在技术上的先进性,还要考虑经济上的合理性
48、。,软件工程的标准化,在软件的开发过程中,随着软件生命周期的演化,涉及许多技术、管理以及确认与验证工作。用规范的方法和要求来提供统一操作规程和衡量标准,使软件开发的各个工作环节都有章可循,保证软件开发的最佳效益,对软件的成功开发有重要的作用。难怪有人认为,软件开发的工程化和标准化是克服软件危机的有效途径。,软件工程的标准化,10.2.1 软件工程标准化的意义软件工程标准化是随着软件工程学的蓬勃发展而产生、发展起来的。通过开展软件工程标准化,可以将软件开发中复杂、多样、无序的事物或概念转变为简单、规整、有序的事物或概念,以求在一定范围内达成某种共识,满足软件开发技术发展的需要。软件工程标准化对实
49、现资源共享,大幅度缩短软件开发周期,节省软件的开发经费和运行维护成本,改进产品的安全性、通用性、可靠性和可维护性,提高生产效率、节省资源等都有重要的意义,由此可以获得巨大的社会效益和经济效益。由于计算机信息技术在新一轮技术革命中起着领导与促进作用,其特征决定了软件工程标准化实施的重要性。,软件工程的标准化,10.2.2 软件工程标准化的内容由于软件工程是一项针对软件开发的复杂的系统工程,因此它涉及的领域也是多方面的。它不仅包括软件开发的管理、工程和产品,也包括职业术语等方面的内容。软件工程的标准化一般从两个方面来规范软件的开发:(1)程序设计语言的标准化。为某一程序设计语言规定若干个标准子集,对于语言的实现者和用户都带来了很大方便。(2)软件过程的标准化。为软件生命周期各个阶段的工作建立标准或规范。例如国家标准GB/T155381995软件工程标准分类法就是有关软件工程标准的分类标准。,软件工程的标准化,软件工程标准涉及到过程管理、产品管理、资源管理以及确认与验证等多方面的内容,具体说它包括过程标准涉及方法、技术、度量等;产品标准涉及需求、设计、部件、描述、计划、报告等;专业标准涉及职别、道德准则、认证、特许、课程等;记法标准涉及术语、表示法、语言等。,软件工程的标准化,