软件维护与软件工程管理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14.3 软件开发进度计划
项目管理者的目标是定义全部项目任务,识别出关键任 务,规定完成各项任务的起、止日期,跟踪关键任务的进展 状况,以保证能及时发现拖延进度的情况。为了做到这一点, 管理者必须制订一个足够详细的进度表,以便监督项目进度, 并控制整个项目。
14.3 软件开发进度计划
14.3.1 Gantt图
第14章 软件维护与软件工程管理
本章目标
熟悉软件维护的基本概念。 了解软件估算的概念、方法、原则与技巧。 掌握制定软件开发进度计划的方法 了解软件开发人员组织的形式。 了解软件开发风险管理的概念。 了解软件质量保证的措施。 了解软件配置管理的相关概念。 熟悉软件工程标准与软件文档的概念。 熟悉软件过程能力成熟度模型。 了解软件项目管理的相关内容。 了解软件复用的概念。 掌握利用Microsoft Project管理开发过程。
14.1 软件维护
14.1.2 软件维护的分类
软件维护的分类
14.1 软件维护
14.1.源自文库 软件的可维护性
软件的可维护性是用来衡量对软件产品进行维护的难易程度的标准,它是软 件质量的主要特征之一。软件产品的可维护性越高,纠正并修改其错误或缺陷, 对其功能进行扩充或完善时,消耗的资源越少,工作越容易。开发可维护性高的 软件产品是软件开发的一个重要目标。影响软件可维护性的因素有很多,如可理 解性、可测试性、可修改性等。
软件重构的好处是,它可以提高程序的质量、改善软件生产率、减少维护工作量、使 软件易于测试和调试等等。
14.1 软件维护
3. 正向工程 正向工程也称为改造,用从现存软件的设计恢复中得到的信息去重
构现存系统,以改善其整体质量。在大多数情况下,实行再工程的软件 需重新实现现存系统的功能,并加入新功能和/或改善整体性能。正向 工程过程将应用软件工程的原则、概念和方法来重建现存应用。由于软 件的原型(现存系统)已经存在,正向工程的生产率将远高于平均水平; 同时,又由于用户已对该软件有经验,因而正向工程过程可以很容易地 确定新的需求和变化的方向。这些优越性使得再工程比重新开发更有吸 引力。
进行软件维护通常需要软件维护人员与用户建立一种工作关系,使软件维护人员能够 充分了解用户的需要,及时解决系统中存在的问题。通常,软件维护是软件生命周期中延 续时间最长、工作量最大的阶段。据统计,软件开发机构60%以上的精力都用在维护已有 的软件产品上了。对于大型的软件系统,一般开发周期是1~3年,而维护周期会高达5~ 10年,维护费用甚至会高达开发费用的4~5倍。
软件维护不仅工作量大、任务重,而且如果维护的不恰当,还会产生副作用,引入新 的软件缺陷。因此,进行维护工作要相当谨慎。
14.1 软件维护
14.1.1 软件维护的过程
典型的软件维护的过程可以概括为:建立维护机构,用 户提出维护申请并提交维护申请报告,维护人员确认维护类 型并实施相应的维护工作,整理维护记录并对维护工作进行 评审,对维护工作进行评价。
不同的软件开发阶段,估算的对象和使用的方法都会有所不同,估 算的精确度也不一样。一般来说,随着项目进展,对项目内容了解愈多, 估算也会越来越精确。
14.2 软件估算
14.2.2 软件估算的方法 估算的方法有很多,大致分为基于分解技术的估算方法
和基于经验模型的估算方法两大类。基于分解技术的方法包 括功能点估算法、特征点估算法、对象点估算法、代码行 (LOC)估算法、MARK Ⅱ等;基于经验模型的方法包括 IBM 模型、普特南模型、COCOMO模型等。
实际的“主程序员”应该由两个人来担任:一个是技术负责人,负 责小组的技术活动;一个是行政负责人,负责所有非技术的管理决策。 由于程序员组的成员人数不宜过多,当软件项目规模较大时,应该把程 序员分成若干个小组(每组2-8人)。
14.4 软件开发人员组织
14.4.2 主程序员组 为了使少数经验丰富、技术高超的程序员在软件开发过
程中能够发挥更大作用,程序设计小组也可以采用主程序员 组的组织方式。使用“主程序员组”的组织方式,可提高生 产率,减少总的人/年(或人/月)数。
14.4 软件开发人员组织
14.4.3 现代程序员组
软件的逆向工程通过对程序的分析,导出更高抽象层次的表示,如从现存的 程序中抽取数据、体系结构、过程的设计信息等,是一个设计恢复过程。
逆向工程过程所抽取的信息,一方面可以提供给软件工程师以便在维护活动 中使用这些信息;另一方面可以用来重构原来的系统,使新系统更易维护。
14.1 软件维护
2. 重构 软件重构是对源代码和/或数据进行修改,使其易于理解或维护,以适应将来的变更。
14.1 软件维护
软件维护是软件产品生命周期的最后一个阶段。在产品交付并且投入使用之后,为了 解决在使用过程中不断发现的各种问题,保证系统正常运行,同时使系统功能随着用户需 求的更新而不断升级,软件维护的工作是非常必要的。概括地说,软件维护就是指在软件 产品交付给用户之后,为了改正软件测试阶段未发现的缺陷,改进软件产品的性能,补充 软件产品的新功能等,所进行的修改软件的过程。
14.4 软件开发人员组织
14.4.1 民主制程序员组
民主制程序员组的一个重要特点是,小组成员完全平等,享有充分 民主,通过协商做出技术决策,对发现错误抱着积极的态度,这种积极 态度有助于更快速地发现错误,从而导致高质量的代码;小组有高度凝 聚力,组内学术空气浓厚,有利于攻克技术难关。因此,小组成员间的 通信是平行的,如果一个小组有n个成员,则可能的通信信道有n(n−1)/2 条。但其缺点是,小组人多的话,通信量会非常大;如果组内多数成员 技术水平不高,或是缺乏经验的新手,很有可能不能完成项目。
14.1 软件维护
14.1.4 软件维护的副作用
软件维护是存在风险的。对原有软件产品的一个微小的改动都有可能引入新 的错误,造成意想不到的后果。软件维护的副作用主要有3类,包括修改代码的 副作用、修改数据的副作用和修改文档的副作用。 (1)人类通过编程语言与计算机进行交流,每种编程语言都有严格的语义和语 法结构。编程语言的微小错误,哪怕是一个标点符号的错误,都会造成软件系统 无法正常运行。 (2)修改数据的副作用是指数据结构被改动时有新的错误产生的现象。当数据 结构发生变化时,可能新的数据结构不适应原有的软件设计,从而导致错误的产 生。 (3)修改文档的副作用是指在软件产品的内容更改之后没有对文档进行相应的 更新而为以后的工作带来不便的情况。
14.2 软件估算
14.2.1 软件估算的概念
软件估算是指以准确的调查资料和项目信息(如人员和设备信息) 为依据,从估算对象的历史,现状及其规律性出发,运用科学的方法, 对估算对象的规模,所需工作量和成本进行的测定。
软件估算的内容包括软件规模、工作量和进度。对于估算来说,有 些可以做的很仔细,而大多数只是凭主观经验判断。所以多数估算难以 做到10%以内的精确度,有的甚至误差达几倍,尤其是估算人员经验不 足或估算项目没有可参考凭借之时。
(1)可理解性是指人们通过阅读软件产品的源代码和文档,来了解软件的系统结构、功能、 接口和内部过程的难易程度。可理解性高的软件产品应该具备一致的编程风格,准确、完 整的文档,有意义的变量名称和模块名称,清晰的源程序语句等特点。 (2)可测试性是指诊断和测试软件缺陷的难易程度。程序的逻辑复杂度越低,就越容易测 试。透彻地理解源程序有益于测试人员设计出合理的测试用例,从而有效地对程序进行检 测。 (3)可修改性是指在定位了软件缺陷以后,对程序进行修改的难易程度。一般来说,具有 较好的结构且编码风格好的代码比较容易修改。
14.3.2 PERT图
PERT图也称“计划评审技术”,它采用网络图来描述一个项目的任务网络。 不仅可以表达子任务的计划安排,还可以在任务计划执行过程中估计任务完成的 情况,分析某些子任务完成情况对全局的影响,找出影响全局的区域和关键子任 务。以便及时采取措施,确保整个项目的完成。
PERT图是一个有向图,图中的有向弧表示任务,它可以标上完成该任务所 需的时间;图中的结点表示流入结点的任务的结束,并开始流出结点的任务,这 里把结点称为事件。只有当流入该结点的所有任务都结束时,结点所表示的事件 才出现,流出结点的任务才可以开始。事件本身不消耗时间和资源,它仅表示某 个时间点。每个事件有一个事件号和出现该事件的最早时刻和最迟时刻。每个任 务还有一个松弛时间,表示在不影响整个工期的前提下,完成该任务有多少机动 余地。松弛时间为0的任务构成了完成整个工程的关键路径。
Gantt图(甘特图)是一种能有效显示行动时间规划的方法,也叫横道图或条形 图。甘特图把计划和进度安排两种职能结合在一起,纵向列出项目活动,横向列 出时间跨度。每项活动计划或实际的完成情况用横道线表示。横道线还显示了每 项活动的开始时间和终止时间。某项目进度计划的甘特图如图所示。
14.3 软件开发进度计划
和代码重构不同,数据重构发生在相当低的抽象层次上,它是一种全范围的再工程活 动。当数据结构较差时,其程序将难以进行适应性修改和增强。数据重构在多数情况下由 逆向工程活动开始,理解现存的数据结构,称之为数据分析。数据分析完成后则开始数据 重新设计,包括数据记录标准化、数据命名合理化、文件格式转换、数据库类型转换等等。
14.1 软件维护
要想提高软件产品的可维护性,软件开发人员需要在开发过程和维护过程中 都对其非常重视。提高可维护性的措施有以下几种。 (1) 建立完整的文档。完整、准确的文档有利于提高软件产品的可理解性。文档 包括系统文档和用户文档,它是对软件开发过程的详细说明,是用户及开发人员 了解系统的重要依据。完整的文档有助于用户及开发人员对系统进行全面的了解。 (2) 采用先进的维护工具和技术。先进的维护工具和技术可以直接提高软件产品 的可维护性。例如,采用面向对象的软件开发方法、高级程序设计语言以及自动 化的软件维护工具等。 (3) 注重可维护性的评审环节。在软件开发过程中,每一阶段的工作完成前,都 必须通过严格的评审。由于软件开发过程中的每一个阶段都与产品的可维护性相 关,因此对软件可维护性的评审应该贯穿于每个阶段完成前的评审活动中。
14.1 软件维护
14.1.5 软件再工程技术
软件维护使软件的可维护性下降,束缚着新软件的开发。同时,待维护的软 件又常常是业务的关键,废弃它们重新开发不仅十分可惜,而且风险较大。软件 维护的此类问题引出了软件再工程。软件再工程是一类软件工程活动,通过对旧 软件实施处理,增进对软件的理解,同时又提高了软件自身的可维护性、可复用 性等。软件再工程可以帮助软件机构降低软件演化的风险,可使软件将来易于进 一步变更,有助于推动软件维护自动化的发展等等 1. 逆向工程
某项目的PERT图如左图所示 关键路径如图中粗黑线,该项目最 短完成时间为70。
14.4 软件开发人员组织
为了成功地完成软件开发工作,项目组成员必须以一种 有意义且有效的方式彼此交互和通信。如何组织项目组是一 个管理问题,管理者必须合理地组织项目组,使项目组有较 高生产率,能够按预定的进度计划完成所承担的工作。经验 表明,项目组组织得越好,其生产率越高,而且产品质量也 越高。组织软件开发人员的方法,取决于所承担的项目的特 点、以往的组织经验以及软件开发公司负责人的看法和喜好。
通常,重构并不修改整个软件程序的体系结构,而主要关注模块的细节。如果重构扩展到 模块边界之外并涉及软件体系结构,则重构变成了正向工程。
软件重构中代码重构的目标是生成可提供相同功能、更高质量的程序。需要代码重构 的模块往往以难于理解、测试和维护的方式编码。为此,用重构工具分析源代码,标注出 和结构化程序设计概念相违背的部分,然后重构此代码,复审和测试生成的重构代码,更 新代码的内部文档。
14.3 软件开发进度计划
PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所 需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外 一些任务,以及如期完成整个工程的关键路径。松弛时间则反映了完成 某些任务是可以推迟其开始时间或延长其所需的完成时间。但是PERT图 不能反映任务之间的并行关系。