软件工程思想——维护与再生工程

合集下载

软件工程导论PPT课件-第8章-维护

软件工程导论PPT课件-第8章-维护
改错或修改的要求不能及时满足引起的用户不满; 维护时的改动,引入潜伏错误,导致软件质量降低; 软件工程师从事维护工作造成的开发过程混乱。 生产率的大幅下降 维护工作量:生产性劳动+非生产性劳动。
分析评价,修改设计,编写代码等
理解代码功能、解释数据结构、接口特点和性能限度等
8.3 软件维护的特性
8.3.3 软件维护的副作用
-结构化维护
结构化维护是指软件开发过程是按照软件工程方法进 行的、各开发阶段文档齐全的软件的维护过程。
-非结构化维护
非结构化维护是指在只有源程序,缺乏必要的文档说 明,难于确定数据结构、系统接口等特性的情况下,进行 的软件维高昂
明显代价:高昂的维护费用,已上升达80%左右; 无形代价:
的工作环境,或适应已变动的数据或文件; (4)为预防软件系统的失效而对软件系统实施修改。
8.2 软件维护的分类
- 改正性维护
对在测试阶段未能发现的、在软件投入使用后才逐渐暴露出来的 错误的测试、诊断、定位、纠错,以及验证、修改的回归测试过程, 称为改正性维护。
- 完善性维护
为了满足用户在使用过程中对软件提出的新的功能与性能要求, 需要对原来的软件的功能进行修改或扩充。
- 适应性维护
使软件适应外部新的软硬件环境或者数据环境发生的变化, 而进行修改软件的过程。
- 预防性维护
为了提高软件未来的可维护性、可靠性等,或为了给未来 的改进奠定更好的基础而修改软件的过程。
8.2 软件维护的分类 预防性维护 4% 适应性维护 21% 完善性维护 50%
改正性维护 25%
四类维护占总维护的比例
修改软件设计、 复查、必要的代 码修改、单元测 试和集成测试、 验收测试和复审

《软件工程》第10章 软件维护

《软件工程》第10章 软件维护

北京大学远程教育课程
Software Engineering_Chapter10-2
问题定义
计划 时期 可行性论证 及软件计划
需求分析
概要设计 开发 时期
详细设计Байду номын сангаас
编码
测试 运行时期 运行/维护
北京大学远程教育课程
Software Engineering_Chapter10-3
本章主要内容
• 10.1 软件维护的定义,目标与任务 • 10.2 软件维护的类型 • 10.3 软件的可维护性
北京大学远程教育课程
Software Engineering_Chapter10-13
10.2.1 改正性维护(续)
• 实践表明,软件测试和排错不可能完全暴露并改正一个大 型软件系统中的所有错误。 • 经过统计分析,在典型的市场销售的软件包中,还有缺陷 的代码行约占代码总行数的3%。正式投入使用的软件中 含有错误是不足为奇的,即使是已运行多年的软件。 • 改正性维护举例:
北京大学远程教育课程
Software Engineering_Chapter10-6
10.1.3 软件维护的任务
• 一个软件开发机构60%的精力用在维护现有的软件上。随 着产品的增加,这个比例还将不断提高。不仅当前的软件 版本要维护,仍在使用的旧版本和即将投入使用的新版本 也将需要维护。 • 在软件整个运行周期中,不仅要解决原有问题,还要解决 修改过程中产生的新问题。因此软件维护是一个无穷尽的 过程。
Software Engineering_Chapter10-18
10.2.4 预防性维护
• 维护人员不要单纯等待用户提出维护的请求,而应该选择 那些还能使用数年、目前虽能运行,但不久就须作重大修 改或加强的软件,进行预先的维护。预防性维护可以改善 软件的可维护性,减少今后对它们维护时所需要的工作量。

软件开发流程图介绍

软件开发流程图介绍

软件工程开发第一章软件工程基本观念1.1 软件工程的目标与常用模型软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。

对开发人员而言,如果非得在质量与生产率之间分个主次不可,那么应该是质量第一,生产率第二.软件工程的主要环节如图1所示,软件开发过程一般包括可行性与需求分析、系统设计、程序设计、测试和维护。

图1 软件工程环节常见的软件工程模型有:线性模型,渐增式模型,螺旋模型,快速原型模型,形式化描述模型等等。

虽然线性模型比较简单,太理想化,但是每一个非线性的模型都能转化为一系列简单的线性模式,因此在其他模式中需要灵活运用线性模式。

1.2 软件开发的基本策略1.2。

1 复用在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的.应该把大部分的时间用在小比例的创新工作上,而把小部分的时间用在大比例的成熟工作中。

我们将具有一定集成度并可以重复使用的软件组成单元称为软构件。

软件复用可以表述为:直接使用已有的软构件,即可组装(或加以合理修改)成新的系统.这样可以提高生产率和质量。

图2应用软构件产生应用软件1.2。

2 分而治之我们可以把复杂的问题分解成N个简单的问题,再逐个寻求解决方法.但是最终的目的是要保证单个的简单问题可以通过程序实现,组装后能够使原本复杂的问题得到合理解决。

1.2.3 优化——折衷优化是用以优化软件的各个质量因素,但不能面面俱到,应折衷,其目标就是协调各个质量因素,实现整体质量最优.而不能盲目得拆东墙,补西墙。

第二章软件开发过程各个环节介绍2.1 可行性分析与需求分析2。

1。

1 可行性分析要求可行性分析是从经济、技术、市场与政策及人员方面分析这个项目做还是不做。

2。

1。

2 需求分析要求当确定做之后,我们就要与客户交流,进行需求分析,但由于客户表达不清、需求自身经常变动或分析人员理解有误,都会导致需求分析困难.因此,有必要通过请教行家或者分析同类型产品,来做进一步的分析.2.2 系统设计2.2。

软件工程第八章维护

软件工程第八章维护

软件工程第八章维护第一点:软件维护的定义和重要性软件维护是指在软件发布后对其进行的一系列操作和活动,旨在确保软件系统的持续可用性、可靠性和性能。

软件维护是软件开发生命周期中的一个重要环节,它涉及到对软件进行修正、优化和升级。

软件维护的重要性体现在以下几个方面:1.保障软件质量:软件在实际运行过程中可能会出现各种问题,维护可以帮助及时修复这些问题,保证软件的正常运行。

2.提高用户满意度:通过维护,可以对软件进行功能优化和界面调整,使其更加符合用户的需求,提高用户的使用体验。

3.降低风险:软件维护可以帮助提前发现并解决潜在的风险,避免因软件问题导致的损失。

4.延长软件寿命:通过不断的维护和升级,可以使软件适应不断变化的环境和需求,延长其使用寿命。

5.提高开发效率:良好的维护可以避免因软件问题导致的重复开发,提高开发团队的效率。

第二点:软件维护的类型和策略软件维护可以分为以下几种类型:1.改正性维护:这种维护类型主要是针对软件中存在的问题和错误进行修复,保证软件的正常运行。

2.适应性维护:随着环境的变化和用户需求的变化,软件需要进行相应的调整和优化,以适应新的环境和工作需求。

3.完善性维护:这种维护类型主要是针对软件的功能进行增强和扩展,以满足用户的新需求。

4.预防性维护:预防性维护是为了避免软件出现潜在的问题和风险,提前对软件进行调整和优化。

在进行软件维护时,可以采取以下策略:1.计划维护:制定详细的维护计划,包括维护的时间、内容、责任人等,确保维护工作的有序进行。

2.变更管理:对于软件的修改和更新,需要进行严格的变更管理,确保每次变更都是经过审核和评估的。

3.版本控制:通过版本控制工具,对软件的不同版本进行管理,确保软件的每个版本都是可追踪和可恢复的。

4.文档管理:对软件的维护过程和结果进行详细的文档记录,方便对软件进行管理和维护。

5.持续集成:将软件的维护工作与开发工作结合起来,通过持续集成的方式,确保软件的质量和稳定性。

软件工程学维护

软件工程学维护
对已经存在的软件,重新进行开发是可行的,因为: ① 维护一行源代码的成本可能是该行代码初始开发成本的
20-40倍。 ② 使用现代设计概念重新设计软件体系结构,对未来的维护
工作将有很大的帮助。 ③ 由于软件原型已经存在,软件开发生产率将远远高于平均
水平。 ④ 由于用户已经有较丰富的软件使用经验,所以很容易确定
为了使软件和变化了的环境(如软/硬件升级、新数据库 等)适当地配合而修改软件的活动。约占全部维护活动的18 % ~25%。
§1. 软件维护的定义
③ 完善性维护(perfective maintenance) 为了增加软件新功能、改已有功能(如改造界面)、增强软
件性能、提高运行效率等,而修改软件的活动。 约占全部维护活动的50% ~66%。
④ 预防性维护(preventive maintenance)
为了改进未来的可维护性或可靠性,或为了给未来的改进奠 定更好的基础而主动修改软件的活动。与其它维护活动共占总 维护的4%左右。
注:① 一般维护的工作量占生存周期70%以上,维护成本约 为开发成本的4倍;
② 文档维护与代码维护同样重要。
§2. 软件维护的特点
1、建立维护组织(maintenance team)
在维护活动开始之前就明确维护责任是十分必要的,这样可 以大大减少维护过程中可能出现的混乱。
§3. 软件维护过程
钱太少 要
任务评价

不干!
求 维
客户要求





任务评价
维护管理员
系 统 管 理 员
2、维护报告
§3. 软件维护过程
⑴ 维护要求表(Maintenance Request Form)

软件再工程

软件再工程

软件维护
4
图10-3 软件再工程过程模型
逆向工程是一个恢复原设计的过程。通过分析现存的
程序,从中抽取出数据、体系结构和过程的设计信息。
代码重构是在保持系统完整的体系结构基础上,对应
用系统中难于理解、测试和维护的模块重新进行编码,同
时更新文档。
数据重构是重新构建系统的数据结构。正向工程也称
革新或改造,它根据现存软件的设计信息,改变或重构现
软件维护
2
再生工程的三种类型——重构
•重构 •逆向工程 •前向工程
软件维护
3
1. 软件再工程过程模型
Pressman建议的一个软件再工程过程模型 为软件再工程定义了6类活动。 一般情况下,这些活动是顺序发生的,但每个活动都可能重复,
形成一个循环的过程。 这个过程可以在任意一个活动之后结束。 以下从信息库分析开始,依次对各类活动作简要说明。
软件工程
软件再工程
再生工程主要出于如下愿望: (1)在商业上要提高产品的竞争力;
(2) 在技术上要提高产品的质量。但这种愿望无法靠软 件的维护来实现,因为:
a) 软件的可维护性可能极差,实在不值得去做; b) 即使软件的可维护性比较好,但也只是治表不治 本。再生工程干脆对已有软件进行全部或部分的改造, 赋予软件新的活力。
存系统,以达到改善其整体软件质维护量的目的。
5
软件维护
6
2. 逆向工程
“逆向工程”起源
软件的逆向工程定义:指从源代码出发,重新恢
复设计文档和需求规格文档。
已经出现了一些CASE工具来帮助实现逆向工程,
它们或使源代码能以更清晰的方式显示,或直接从源
代码中产生流程图或结构图之类的图表。

软件工程各阶段的工作内容及特征

软件工程各阶段的工作内容及特征

软件工程各阶段的工作内容及特征软件工程的目标是提高软件质量,质量因素有正确性、性能、可靠性、容错性、易用性、灵活性、可扩充性、可理解性、可维护性等等。

开发常用模型有:线性模型、渐增式模型、螺旋模型、快速原型模型、形式化描述模型等等。

“套用固定的模型不是程序员的聪明之举”。

比如“程序设计”与“测试”之间的关系,习惯上总以为程序设计在先,测试在后,而对于一些复杂的程序,将测试分为同步测试与总测试更有效。

软件开发中的三种基本策略:“复用”“分而治之”“优化—折衷”。

软件复用是将具有一定集成度并可以重复使用的软件组成单元,称为软构件。

分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。

软件的优化是指优化软件的各个质量因素,如提高运行速度,提高对内存资源的利用率,使用户界面更加友好等等。

优化工作的复杂之处是很多目标之间存在千丝万缕的关系,当不能够使所有的目标都得到优化时,就需要“折衷”策略。

软件中的折衷策略是指通过协调各个质量因素,实现整体质量的最优。

软件折衷的重要原则是不能使某一方损失关键的职能,更不可以像“舍鱼而取熊掌”那样抛弃一方。

下面从需求分析、系统分析、系统实现、测试与改错、维护与再生这五个方面逐一阐述。

2.1 需求分析阶段需求分析是项目成败与否的第一步,对需求把握得越准确,软件的修修补补就越少。

有些需求在一开始时很难确定,在开发过程中要不断地加以改正。

软件修改越早代价越少,修改越晚代价越大。

需求分析要关注到每一个最终使用者,避免遗漏使用方的需求。

需求分析尽量从多个角度进行。

需求分析需要与使用者进行多次反复沟通,开发者做到真正领会使用者的需求。

做可行性分析不能以偏盖全,也不可以什么鸡毛蒜皮的细节都加以权衡。

可行性分析必须为决策提供有价值的证据。

需要分析的工作要点有:1)完成问题整理、收集;2)走访使用部门,进行询问、沟通;3)交流中的心态定位是我们在为编辑、为业务工作;4)我们要为用户考虑。

软件工程基础之 软件维护

软件工程基础之 软件维护

可维护性改进
代码重构
对代码进行重新组织和优化,使其更易于阅读、理解和维护 。
文档更新
更新软件文档,以反映软件的新功能、性能优化和修复的缺 陷,方便后续维护和开发。
05
适应性维护
环境变化处理
操作系统升级
当操作系统升级时,软件也需要进行相应的调整以适应新的操作系统。这可能涉及到修改软件与操作系统的接口、更 新系统调用等。
软件版本控制
为了确保软件的版本兼容性和升级的顺利进行,需要进行软件版本的控制和管理 。这可能涉及到版本号的分配、版本升级流程的制定和实施等。
兼容性测试
在软件升级后,需要进行兼容性测试以确保新版本软件与旧版本软件的兼容性。 这可能涉及到测试用例的设计、测试环境的搭建和测试执行等。
THANKS
感谢观看
04
完善性维护
功能增强
增加新功能
根据用户需求或市场需求,对软 件进行功能扩展或升级,增加新 的特性和功能。
优化现有功能
对现有功能进行改进和调整,提 高其性能、稳定性和用户体验。
性能优化
提升运行速度
通过优化算法、减少冗余计算或使用 更高效的存储结构等方式,提高软件 的运行速度。
降低资源消耗
优化软件对内存、CPU等资源的利用 ,降低软件运行成本和维护成本。
文档化与标准化
文档是软件维护的重要依据,包 括系统架构、系统功能、接口协
议等方面的文档。
标准化则是指遵循统一的编码规 范、命名规范、接口规范等,提
高代码的可读性和可维护性。
文档化和标准化有助于提高软件 的可维护性和可扩展性,降低维
护成本。
03
改正性维护
错误识别与定位
错误报告
01
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

个人收集整理文档勿用做商业用途
维护与再生工程
编程大师曾说:“哪怕程序只有三行长,总有一天你也不得不对它维护.”
很多软件产品不是一次性地买卖.比如在电信、金融等领域,有些软件系统要用十几年,对软件进行维护是必不可少地.8.1节将介绍“软件维护地常识”,对维护活动进行分类,并解释为什么维护比较困难.
软件公司地经理们没有哪一个喜欢被维护地费用吓一跳,但软件维护地代价通常是高昂地.7.2节将说明影响维护代价地一些主要技术因素与非技术因素.
如果希望提高已有软件地质量并且提高商业竞争力,却又无法靠维护来实现,只好对已有软件进行全部或者部分地改造,这种活动叫再生工程(Reengineering).7.3节将解释什么是再生工程,并论述再生工程地三种类型:重构(Restructure)、逆向工程(Reverse Engineering)和前向工程(Forward Engineering).
8.1 软件维护地常识
对软件而言,“维护”是个不太直观地术语,因为软件产品在重复使用时不会被磨损,并不需要进行像对车辆或电器那样地维护.软件维护是人们对既丰富多彩又会令人心酸地活动地统称.其中丰富多彩地活动是指那些反映客观世界变化、能使软件系统更加完善地修改和扩充工作.令人心酸地活动是指那些永无修止、并且改了旧错却引起新错让人欲哭无泪地工作.
一些学者将软件维护划分为主要地三类:纠错性维护(Corrective maintenance)、适应性维护(Adaptive maintenance)和完善性维护(Perfective maintenance):
(1)纠错性维护.由于前期地测试不可能揭露软件系统中所有替在地错误,用户在使用软件时仍将会遇到错误,诊断和改正这些错误地过程称为纠错性维护.
(2)适应性维护.由于新地硬件设备不断推出,操作系统和编译系统也不断地升级,为了使软件能适应新地环境而引起地程序修改和扩充活动称为适应性维护.
(3)完善性维护.在软件地正常使用过程中,用户还会不断提出新地需求.为了满足用户新地需求而增加软件功能地活动称为完善性维护.
Lientz 和Swanson调查发现(1980年),完善性维护约占65%,适应性维护约占18%,纠错性维护约占17%[Sommerville 1992].上述调查已是20年前地事了,我们不必太关心具体地比例,心里有数即可.
以下一些因素将导致维护工作变得困难:
(1)软件人员经常流动,当需要对某些程序进行维护时,可能已找不到原来地开发人员.只好让新手去“攻读”那些程序.
(2)人们一般难以读懂他人地程序.在勉强接受这类任务时,心里不免嘀咕:“我又不是他肚子里地虫子,怎么知道他如何编程.”
(3)当没有文档或者文档很差时,你简直不知道如何下手.
(4)很多程序在设计时没有考虑到将来要改动,程序之间相互交织,触一而牵百.即使有很好地文档,你也不敢轻举妄动,否则你有可能陷进错误堆里.
(5)如果软件发行了多个版本,要追踪软件地演化非常困难.
(6)维护将会产生不良地副作用,不论是修改代码、数据或文档,都有可能产生新地错误. (7)维护工作毫无吸引力.高水平地程序员自然不愿主动去做,而公司也舍不得让高水平地程序员去做.带着低沉情绪地低水平地程序员只会把维护工作搞得一塌糊涂.
8.2 维护地代价及其主要因素
软件维护是既破财又费神地工作.看得见地代价是那些为了维护而投入地人力与财力.而看不见地维护代价则更加高昂,我们称之为“机会成本”,即为了得到某种东西所必须放弃地东西[Mankiw 1999].把很多程序员和其它资源用于维护工作,必然会耽误新产品地开发甚至会丧失机遇,这种代价是无法估量地.
影响维护代价地非技术因素主要有:
(1)应用域地复杂性.如果应用域问题已被很好地理解,需求分析工作比较完善,那么维护代价就较低.反之维护代价就较高.
(2)开发人员地稳定性.如果某些程序地开发者还在,让他们对自己地程序进行维护,那么代价就较低.如果原来地开发者已经不在,只好让新手来维护陌生地程序,那么代价就较高.(3)软件地生命期.越是早期地程序越难维护,你很难想像十年前地程序是多么地落后(设计思想与开发工具都落后).一般地,软件地生命期越长,维护代价就越高.生命期越短,维护代价就越低.
(4)商业操作模式变化对软件地影响.比如财务软件,对财务制度地变化很敏感.财务制度一变动,财务软件就必须修改.一般地,商业操作模式变化越频繁,相应软件地维护代价就越高.
影响维护代价地技术因素主要有:
(1)软件对运行环境地依赖性.由于硬件以及操作系统更新很快,使得对运行环境依赖性很强地应用软件也要不停地更新,维护代价就高.
(2)编程语言.虽然低级语言比高级语言具有更好地运行速度,但是低级语言比高级语言难以理解.用高级语言编写地程序比用低级语言编写地程序地维护代价要低得多(并且生产率高得多).一般地,商业应用软件大多采用高级语言.比如,开发一套Windows环境下地信息管理系统,用户大多采用Visual Basic、Delphi或Power Builder来编程,用Visual C++地就少些,没有人会采用汇编语言.
(3)编程风格.良好地编程风格意味着良好地可理解性,可以降低维护地代价.
(4)测试与改错工作.如果测试与改错工作做得好,后期地维护代价就能降低.反之维护代价就升高.
(5)文档地质量.清晰、正确和完备地文档能降低维护地代价.低质量地文档将增加维护地代价(错误百出地文档还不如没有文档).
8.3 再生工程
再生工程主要出于如下愿望:(1)在商业上要提高产品地竞争力;(2)在技术上要提高产品地质量.但这种愿望无法靠软件地维护来实现,因为:(1)软件地可维护性可能极差,实在不值得去做;(2)即使软件地可维护性比较好,但也只是治表不治本.再生工程干脆对已有软件进行全部或部分地改造,赋予软件新地活力.
在对待一个不良之徒时,可以进行思想教育并给予他关心和帮助,这种方式类似于“软件维护”;也可以把他关进监狱,送去劳改,这种方式相当于软件地“再生工程”;如果此人坏透顶了,就毙掉算了.
再生工程与维护地共同之处是没有抛弃原有地软件.如果把维护比作“修修补补”,那么再生工程就算是“痛改前非”.再生工程并不见得一定比维护地代价要高,但再生工程在将来获取地利益却要比通过维护得到地多.
再生工程主要有三种类型:重构、逆向工程和前向工程.
8.3.1重构
重构一般是指通过修改代码或数据以使软件符合新地要求.重构通常并不推翻原有软件地体系结构,主要是改造一些模块和数据结构.重构地一些好处如下:
(1)使软件地质量更高,或使软件顺应新地潮流(标准).
(2)使软件地后续(升级)版本地生产率更高.
(3)降低后期地维护代价.
要注意地是,在代码重构和数据重构之后,一定要重构相应地文档.
8.3.2逆向工程
逆向工程来源于硬件世界.硬件厂商总想弄到竞争对手产品地设计和制造“奥秘”.但是又得不到现成地档案,只好拆卸对手地产品并进行分析,企图从中获取有价值地东西.我地很多同学从事集成电路设计工作,他们经常解剖国外地集成电路,甚至不作分析就原封不动地复制该电路地版图,然后投入生产,并美其名曰“反向设计”(Reverse Design).
软件地逆向工程在道理上与硬件地相似.但在很多时候,软件地逆向工程并不是针对竞争对手地,而是针对自己公司多年前地产品.期望从老产品中提取系统设计、需求说明等有价值地信息.
8.3.3前向工程
前向工程也称预防性维护,由Miller倡导.他把这个术语解释成“为了明天地需要,把今天地方法应用到昨天地系统上”.[Pressman 1999]
乍看起来,主动去改造一个目前运行得正常地软件系统简直就是“惹事生非”.但是软件技术发展如此迅速,与其等待一个有价值地产品逐渐老死,还不如主动去更新,以获取更大地收益.其道理就同打预防性针一样.所以,预防性维护是“吃小亏占大便宜”地事.
8.4 小结
大学科研机构里地软件维护工作恐怕是做得最差地了.几乎每一批新地研究生都会把毕业生留下地软件臭骂一通,然后全部推到重做.到他毕业该走时,就轮到别人骂他地工作了.如此轮回,最终没有什么成果留下.
如果希望软件系统能活下,必须要对它进行维护.如果希望软件系统有效益,则必须设法降低维护地代价.。

相关文档
最新文档