《第9章 软件工程管理-1.pptx》由会员分享,可在线阅读,更多相关《第9章 软件工程管理-1.pptx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第9章 软件工程管理9.1软件估算 9.1.1软件估算的概念软件估算是指以准确的调查资料和项目信息(如人员和设备信息)为依据,从估算对象的历史,现状及其规律性出发,运用科学的方法,对估算对象的规模,所需工作量和成本进行的测定。软件估算的内容包括软件规模、工作量和进度。对于估算来说,有些可以做的很仔细,而大多数只是凭主观经验判断。所以多数估算难以做到10%以内的精确度,有的甚至误差达几倍,尤其是估算人员经验不足或估算项目没有可参考凭借之时。不同的软件开发阶段,估算的对象和使用的方法都会有所不同,估算的精确度也不一样。一般来说,随着项目进展,对项目内容了解愈多,估算也会越来越精确。9.1软件估算
2、9.1.2软件估算的方法 估算的方法有很多,大致分为基于分解技术的估算方法和基于经验模型的估算方法两大类。基于分解技术的方法包括功能点估算法、特征点估算法、对象点估算法、代码行(LOC)估算法、MARK 等;基于经验模型的方法包括 IBM 模型、普特南模型、COCOMO模型等。9.2 软件开发进度计划 项目管理者的目标是定义全部项目任务,识别出关键任务,规定完成各项任务的起、止日期,跟踪关键任务的进展状况,以保证能及时发现拖延进度的情况。为了做到这一点,管理者必须制订一个足够详细的进度表,以便监督项目进度,并控制整个项目。9.2 软件开发进度计划 9.2.1 Gantt图Gantt图(甘特图)
3、是一种能有效显示行动时间规划的方法,也叫横道图或条形图。甘特图把计划和进度安排两种职能结合在一起,纵向列出项目活动,横向列出时间跨度。每项活动计划或实际的完成情况用横道线表示。横道线还显示了每项活动的开始时间和终止时间。某项目进度计划的甘特图如图所示。9.2 软件开发进度计划 9.2.2 PERT图PERT图也称“计划评审技术”,它采用网络图来描述一个项目的任务网络。不仅可以表达子任务的计划安排,还可以在任务计划执行过程中估计任务完成的情况,分析某些子任务完成情况对全局的影响,找出影响全局的区域和关键子任务。以便及时采取措施,确保整个项目的完成。PERT图是一个有向图,图中的有向弧表示任务,它
4、可以标上完成该任务所需的时间;图中的结点表示流入结点的任务的结束,并开始流出结点的任务,这里把结点称为事件。只有当流入该结点的所有任务都结束时,结点所表示的事件才出现,流出结点的任务才可以开始。事件本身不消耗时间和资源,它仅表示某个时间点。每个事件有一个事件号和出现该事件的最早时刻和最迟时刻。每个任务还有一个松弛时间,表示在不影响整个工期的前提下,完成该任务有多少机动余地。松弛时间为0的任务构成了完成整个工程的关键路径。9.2 软件开发进度计划 PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个
5、工程的关键路径。松弛时间则反映了完成某些任务是可以推迟其开始时间或延长其所需的完成时间。但是PERT图不能反映任务之间的并行关系。某项目的PERT图如左图所示关键路径如图中粗黑线,该项目最短完成时间为70。9.3 软件开发人员组织 为了成功地完成软件开发工作,项目组成员必须以一种有意义且有效的方式彼此交互和通信。如何组织项目组是一个管理问题,管理者必须合理地组织项目组,使项目组有较高生产率,能够按预定的进度计划完成所承担的工作。经验表明,项目组组织得越好,其生产率越高,而且产品质量也越高。组织软件开发人员的方法,取决于所承担的项目的特点、以往的组织经验以及软件开发公司负责人的看法和喜好。9.3
6、 软件开发人员组织 9.3.1 民主制程序员组 民主制程序员组的一个重要特点是,小组成员完全平等,享有充分民主,通过协商做出技术决策,对发现错误抱着积极的态度,这种积极态度有助于更快速地发现错误,从而导致高质量的代码;小组有高度凝聚力,组内学术空气浓厚,有利于攻克技术难关。因此,小组成员间的通信是平行的,如果一个小组有n个成员,则可能的通信信道有n(n1)/2条。但其缺点是,小组人多的话,通信量会非常大;如果组内多数成员技术水平不高,或是缺乏经验的新手,很有可能不能完成项目。9.3 软件开发人员组织 9.3.2 主程序员组 为了使少数经验丰富、技术高超的程序员在软件开发过程中能够发挥更大作用,
7、程序设计小组也可以采用主程序员组的组织方式。使用“主程序员组”的组织方式,可提高生产率,减少总的人/年(或人/月)数。9.3 软件开发人员组织 9.3.3 现代程序员组 实际的“主程序员”应该由两个人来担任:一个是技术负责人,负责小组的技术活动;一个是行政负责人,负责所有非技术的管理决策。由于程序员组的成员人数不宜过多,当软件项目规模较大时,应该把程序员分成若干个小组(每组2-8人)。把民主制程序员组和主程序员组的优点结合起来,是在合适的地方采用分散作决定的方法。这样做有利于形成畅通的通信渠道,以便充分发挥每个程序员的积极性和主动性,集思广益攻克技术难关。9.4 软件开发风险管理 9.4.1软
8、件开发风险 软件开发风险是一种不确定的事件或条件,一旦发生,会对项目目标产生某种正面或负面的影响。风险有其成因,同时,如果风险发生,也导致某种后果。风险大多数随着项目的进展而变化,不确定性会随之逐渐减少。风险具有3个属性:风险事件的随机性:风险事件是否发生、何时发生、后果怎样?许多事件发生都遵循一定统计规律,这种性质叫随机性;风险的相对性:风险总是相对项目活动主体而言,同样的风险对于不同的主体有不同的影响;风险的可变性:辩证唯物主义认为,任何事情和矛盾都可以在一定条件下向自己的反面转化了去,这里的条件指活动涉及的一切风险因素,当这些条件发生变化时,必然会引起风险的变化。9.4 软件开发风险管理
9、 按照不同的分类标准,风险可以分为不同的类别。按风险后果划分,可以分为纯粹风险和投机风险;按风险来源划分,可以分为自然风险和人为风险;按风险是否可管理划分,可以分为可以预测并可采取相应措施加以控制的风险,反之,则为不可管理的风险;按风险影响范围划分,可以分为局部风险和总体风险;按风险的可预测性划分,可以分为已知风险、可预测风险和不可预测风险;按风险后果的承担者划分,可以分为业主风险、政府风险、承包商风险、投资方风险、设计单位风险、监理单位风险、供应商风险、担保方风险和保险公司风险等。9.4 软件开发风险管理 9.4.2软件开发风险管理 风险管理就是预测在项目中可能出现的最严重的问题(伤害或损失
10、),以及采取必要的措施来处理。9.5软件质量保证 9.5.1软件质量的基本概念质量是产品的生命线,保证软件产品的质量是软件产品生产过程的关键。ANSI/IEEE729-183把软件质量定义为“与软件产品满足规定的和隐含的需要的能力有关的特征或特性的组合”。也就是说,软件产品包含一系列的特征或特性,这些特征或特性可以对产品在性能、功能、开发标准化等各方面的绩效进行度量。软件产品的质量越高,其相关特征或特性就越能满足用户的需求。实际上,可以通俗地说,软件质量是指软件系统满足用户需要或期望的程度。高质量的软件产品意味着较高的用户满意度及较低的缺陷等级,它较好地满足了用户需求,具有高水平的可维护性和可
11、靠性。不难理解,软件的质量是由多种因素决定的,它等价于软件产品的一系列的质量特性。根据ISO Standard 9126的定义,软件质量的特性包括功能性、可靠性、可用性、效率、可维护性和可移植性。9.5软件质量保证 9.5.2软件质量保证的措施 在软件开发实践中,可以采取多种方法保证软件产品的质量。下面介绍几种常用的方法。1基于非执行的测试非执行的测试是指不具体执行程序的测试工作,也称为软件评审。非执行的测试需要贯穿于整个软件开发过程。在项目开发前期,软件开发人员需要制定详细的开发计划以及评审计划,标识各阶段的检查重点以及阶段工作的预期输出,为以后的阶段评审做准备。在项目的阶段评审工作中,要保
12、证评审工作的严格性和规范性。首先,评审人员要具备相应的资格和能力,评审团队的规模及任务分配要合理。每次评审都需要做详细的评审记录,并做出明确的评审结果。对于不合规范的工作成果还要给出修改意见。软件评审的具体实施手段包括设计评审、审查、走查、个人评审等。9.5软件质量保证 2基于执行的测试 基于执行的测试是指通过具体地执行程序,观察实际输出和预期输出的差异,来发现软件产品错误的方法。软件开发人员通常使用一种或几种自动测试工具对系统进行测试。但是,由于手工测试灵活性高的特点,手工测试也是必需的。测试人员可以使用黑盒测试或白盒测试的方法设计测试用例进行测试。软件测试有利于及早揭示软件缺陷,其相关内容
13、在第13章中已有详细介绍。3程序的正确性证明 软件测试有一条重要原则是:测试可以发现程序中的错误,但是不能证明程序中没有错误。可见,软件测试并不能完全证明程序的正确性和可靠性。如果能采用某种方法对软件系统运行的正确性进行证明,那么软件产品的质量将更有保证。目前,人们已经研究出证明Pascal和LISP程序正确性的软件系统,正在对其进行完善和功能扩充。但是,这些系统还只适用于小型的软件系统,并不适合大规模的软件系统。9.6软件配置管理概述 软件的开发过程中,常常产生大量的文档和程序版本,比如立项报告、需求规格说明书、概要设计文档、详细设计文档、编码设计说明、源代码、可执行程序、用户手册、测试计划
14、、测试用例、测试结果、在线文档等,此外还可能有合同、会议记录、报告、审核等管理文档。在软件开发中,还常常存在对这些文档的大量变更。在人员方面,随着软件规模越来越大,很多项目有成千的开发人员,而且可能分布于世界各地,有不同的文化和社会背景。如何有效地组织和管理这些内容,对于项目的成败和效率影响非常重大。9.6软件配置管理概述 9.6.1 软件配置管理术语9.6.2配置管理的过程 配置管理的工作范围一般包括4个方面:标识配置项、进行配置控制、记录配置状态、执行配置审计。1标识配置项 所谓配置项是配置管理中的基本单元,每个配置项应该包含相应的基本配置管理的信息。标识配置项就是要给配置项取一个合适的名
15、字。所有的软件产品都要进行配置项的标识,该标识符应该具有唯一性,并且要遵循特定的版本命名规律,以便于管理和追踪。比如,V2015.0.1,V2016.1.2。9.6软件配置管理概述 2进行配置控制进行配置控制是配置管理的关键,包括访问控制、版本控制、变更控制和产品发布控制等。(1)访问控制通过配置管理中的“软件开发库”、“软件基线库”、“软件产品库”来实现,每个库对应着不同级别的操作权限,为团队成员授予不同的访问权利。(2)版本控制是指用户能够对适当的版本进行选择从而获得需要的系统配置,它往往使用自动的版本控制工具来实现,比如Git。(3)变更控制是应对软件开发过程中各种变化的机制,可以通过建
16、立控制点和报告与审查制度来实现。(4)产品发布控制面向最终发布版本的软件产品,旨在保证提交给用户的软件产品版本是完整、正确和一致的。9.6软件配置管理概述 3记录配置状态 记录配置状态的目的是使配置管理的过程具有可追踪性。配置状态报告记录了软件开发过程中每一次配置变更的详细信息,包括改动的配置项、改动内容、改动时间和改动人等。配置状态报告是开发人员之间进行交流的重要工具,对项目的成功非常重要。4执行配置审计 配置审计是为了保证软件工作产品的一致性和完整性,从而保证最终软件版本产品发布的正确性。软件的配置管理贯穿于整个软件开发过程,可以建立和维护在整个软件生命周期内软件产品的完整性。目前市场上流
17、行的配置管理工具有很多,比如微软公司的Visual Source Safe(VSS)、Rational公司的Clear Case以及Github的Git等。9.7 软件工程标准与软件文档 9.7.1 软件工程标准1软件工程标准化的定义在软件工程项目中,为了便于项目内部不同人员之间交流信息,要制定相应的标准来规范软件开发过程和产品。随着软件工程学的发展,软件开发工作的范围从只是使用程序设计语言编写程序,扩展到整个软件生命期,包括软件需求分析、设计、实现、测试、运行和维护,直到软件退役。软件工程还有一些管理工作,如过程管理、产品质量管理和开发风险管理等。所有这些工作都应当逐步建立其标准或规范。由于
18、计算机技术发展迅速,在未形成标准之前,计算机行业中先使用一些约定,然后逐渐形成标准。软件工程标准化就是对软件生命期内的所有开发、维护和管理工作都逐步建立起标准。9.7 软件工程标准与软件文档 9.7.2 软件文档 在软件工程中,文档记录了从需求分析到产品设计再到产品实现及测试的过程,甚至到产品交付以及交付后的使用情况等各个阶段的相关信息。文档一方面充当了各个开发阶段之间的桥梁,作为前一阶段的工作成果及结束标志,它使分析有条不紊地过渡到设计,再使设计的成果物化为软件。另一方面,文档在团队的开发中起到了重要的协调作用。此外,还有一些与用户打交道的文档成为用户使用软件产品时最得力的助手。合格的软件工
19、程文档应该具备以下几个特性。(1)及时性 (2)完整性 (3)实用性(4)规范性 (5)结构化 (6)简洁性9.7 软件工程标准与软件文档 软件文档的分类9.8软件过程能力成熟度模型 软件过程能力成熟度模型(Capability Maturity Model,CMM)是用于评估软件能力与成熟度的一套标准,它由美国卡内基梅隆大学软件工程研究所推出,侧重于软件开发过程的管理及工程能力的提高与评估,是国际软件业的质量管理标准。软件过程能力成熟度模型认为,软件质量难以保证的问题在很大程度上是由管理上的缺陷造成的,而不是由技术方面的问题造成的。因此,软件过程能力成熟度模型从管理学的角度出发,通过控制软件
20、的开发和维护过程来保证软件产品的质量。它的核心是对软件开发和维护的全过程进行监控和研究,使其科学化、标准化,能够合理地实现预定目标。9.8软件过程能力成熟度模型 软件过程能力成熟度模型图软件过程能力成熟度模型的成熟度等级9.9软件项目管理 9.9.1 软件项目管理概述 软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员、产品、过程和项目进行分析和管理的活动。软件项目管理包含5大过程:启动过程确定一个项目或某阶段可以开始,并要求着手实行;计划过程进行(或改进)计划,并且保持(或选择)一份有效的可控的计划安排,确保实现项目的既定目标;执行过程协调人力和其他资源,并执行计划
21、;控制过程通过监督和检测过程确保项目目标的实现,必要时采取一些纠正措施;收尾过程取得项目或阶段的正式认可,并且有序地结束该项目或阶段。同时,软件项目管理涉及9个知识领域,包括整体管理、范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、风险管理和采购管理。9.9软件项目管理 9.9.2 软件项目管理与软件工程的关系 软件工程与软件项目管理都是围绕软件产品开发的管理。软件工程是软件开发方法论,是关于如何开发出好的软件产品;软件项目管理是软件产品的生产管理形式,项目目标是项目的绩效。软件工程对于任何软件项目具有指导性,而软件项目管理是落实软件工程思想的载体。9.10 软件复用 复用也称
22、为再用或重用,是指同一事物不做修改或稍加改动就可多次重复使用。显然,软件复用是降低软件成本、提高软件生产率和软件质量的非常合理、有效的途径。广义地说,软件复用可划分成以下3个层次:知识复用(如软件工程知识的复用);方法和标准的复用(如面向对象方法或国家标准局制定的软件开发规范或某些国际标准的复用);软件成分的复用。这里着重讨论软件成分的复用问题。软件成分的复用可以划分为3个级别。9.10 软件复用(1)代码复用 人们谈论得最多的是代码复用,通常把它理解为调用库中的模块。实际上,代码复用也可以采用下列几种形式中的任何一种。源代码剪贴源代码包含继承(2)设计结果复用 设计结果复用指的是,复用某个软件系统的设计模型(即求解域模型)。这个级别的复用有助于把一个应用系统移植到完全不同的软、硬件平台上。(3)分析结果复用 这是一种更高级别的复用,即复用某个系统的分析模型。这种复用特别适用于用户需求未改变,但系统体系结构发生了根本变化的场合。