第8章 维护
周四上午2#211的34节,下午在1#202的78节
在软件产品被开发出来并交付用户使用之后,就进入了软件的运行维护阶段。
这个阶段是软件生命周期的最后一个阶段。
大型软件的维护成本高达开发成本的4倍左右。
8.1软件维护的定义
在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
四项活动:改正性维护,适应性维护,完善性维护(一半以上),预防性维护。
8.2软件维护的特点
8.2.1结构化维护与非结构化维护差别巨大
1. 非结构化维护
2. 结构化维护
8.2.2维护的代价高昂
维护工作量的一个模型:
M=P+K*exp(c-d)
M是维护用的总工作量,P是生产性工作量,K是经验系数,c是复杂程度(非结构化设计和缺少文档都会增加软件的复杂程度),d是维护人员对软件的熟悉程度。
8.2.3维护的问题很多
1.
2.
3.
4.
5.
理解别人写的程序通常非常困难; 没有文档或文档资料显著不足; 不能指望开发人员详细说明软件; 设计时未考虑将来的修改; 维护不是一项吸引人的工作。
8.3软件维护过程
1. 维护组织
未必建立正式的维护组织,但是非正式的委托责任是绝对必要的。
在维护活动开始之前就明确维护责任是十分必要的,可以大大减少维护过程中可能出现的混乱。
2. 维护报告
即软件修改报告。
3. 维护的事件流
4. 保存维护记录
5. 评价维护活动
8.4软件的可维护性
定义:维护人员理解、改正、改动或改进这个软件的难易程度。
8.4.1决定软件可维护性的因素
1. 可理解性
定义:外来读者理解软件的结构、功能、接口和内部处理过程的难易程度。
2. 可测试性
可以用程序复杂度来度量它的可测试性。
3. 可修改性
耦合、内聚、信息隐藏、局部化、控制域与作用域的关系等,都影响软件的可修改性。
4. 可移植性
定义:把程序从一种计算环境(硬件配置和操作系统)转移到另一种计算环境的难易程度。
5. 可重用性
定义:同一事物不做修改或稍加改动就在不同环境中多次重复使用。
大量使用可重用的软件构件开发软件,可以提高软件的可维护性。
8.4.2文档
软件系统的文档可以分为以下2类:
1. 用户文档:功能描述,安装文档,使用手册,参考手册,操作员指南等。
2. 系统文档:系统设计、实现、测试等文档。
习题8
1. 软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?
2. 假设自己的任务是对一个已有的软件做重大修改,而且只允许从下述文档中选取两份: (a)程序的规格说明; (b)程序的详细设计结果(自然语言描述加上某种设计工具表示); (c)源程序清单(其中有适当数量的注解)。
应选取哪两份文档?为什么这样选取?打算怎样完成交给自己的任务?
3. 分析预测在下列系统交付使用以后,用户可能提出哪些改进或扩充功能的要求。如果由自己来开发这些系统,在设计和实现时将采取哪些措施,以方便将来的修改?
(1) 储蓄系统
为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。
(2) 机票预订系统
为方便旅客,某航空公司拟开发一个机票预订系统。旅行社把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客。
(3) 患者监护系统
目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还可能会延误抢救时机。某医院打算开发一个以计算机为中心的患者监护系统。
医院对患者监护系统的基本要求是随时接收每个病人的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况以形成患者日志,当某个病人的生理信号超出医生规定的安全范围时向值班护士发出警告信息,此外,护士在需要时还可以要求系统印出某个指定病人的病情报告。
第二篇:软件工程导论最全复习总结
1、
2、 程序是能够完成预定功能和性能的可执行的
程序序列;数据是是使程序能够适当的处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。
3、 软件工程学包含3
4、
5、
6、7、 Rup
8、
9、所经受的变化。
10、 也就是对数据流程图中所包含的所有元素的定义
的集合。
11、 没有流程图,数据字典也难以发挥作用。
12、 需求分析阶段结束之前,系统分析员应该写出软件需求规格说明书,以书面形式准
确的描述软件需求。
13、 9
14、 ER形表示属性,用直线把实体和其属性连接。
15、
16、 ,总体设计又称为概要设或初步设计。
17、
18、 1)测试是为了发现程序中的错误而执行程序的过程;(2)好的
测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现可至今为止尚未发现的错误的测试。
19、
20、
21、 用面向对象方法开发软件,通常需要建立3象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。
22、 最核心的。
23、 通常,使用提供的类图来建立对象模型。
24、 4种关系。
25、 在UML
26、
27、
28、
29、 3种典型人员组织方式:民主制程序员组、住程序员组、现代程序员组。
30、 软件过程的输出信息可以分为3类计算机程序、描述计算机程序的文档、数据,这些项组成了软件过程中产生的全部信息,人们把他们统称为软件配置,而这些项就是软件配置项。
31、 Cmm把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形
成五个逐层提高的等级。能力的成熟度的5个等级从低到高依次是:初始级(1级)、可重复级(2级)、已定义级(3级)已管理级(4级)和优化级(5级)。
15、编码风格:持续内部文档、数据说明、语句构造、输入输出、效率、
32、 软件危机的典型表现:对软件开发成本和进度的估计常常很不准确;用户对“已完
成”的软件系统不满意的现象经常发生;软件产品质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机总成本中所占的比例逐年上升;软件开发生产效率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
33、 软件不同于硬件,他是计算机系统的逻辑部件而不是物理部件。
34、 软件不同于一般程序,它的一个显著特点就是规模庞大。
简单题
1、软件工程基本原理(1)用分阶段的生存周期严格管理。(2)坚持进行阶段评审。(3)实行严格的产品控制。(4)采用现代程序设计技术。(5)结果应能清楚地审查。(6)开发小组人员应该少而精。(7)承认不断改进软件工程实践的必要性。
2、软件生命周期各阶段的基本任务 软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。(1)问题定义 (2)可行性研究 (3)需求分析 (4)总体设计 (5)详细设计 (6)编码和单元测试 (7)综合测试(8)软件维护
3、需求分析的任务一、确定对系统的综合要求(1)功能需求(2)性能需求(3)可靠性和可用性需求(4)出错处理需求(5)接口需求(6)约束(7)逆向需求(8)将来可能提出的需求二、分析系统的数据要求
三、导出系统的逻辑模型四、修正系统开发计划
4、改进软件设计的启发式规则(1)改进软件结构提高模块独立性(2)模块规模应该适中
(3)深度、宽度、扇出和扇入都应适当(4)模块的作用域应该在控制域之(5)力争降低模块接口的复杂程度(6)设计单入口单出口的模块(7)模块功能应该可以预测
5、面向对象设计准则和启发式原则
(1)模块化(2)抽象(3)信息隐藏(4)弱耦合(5)强内聚(6)可重用
(1)设计结果应该清晰易懂(2)一般-特殊结构的深度应适当(3)设计简单的类(4)使用简单的协议(5)使用简单的服务(6)把设计变动减至最小
6、软件维护的几种类型
(1)改正性维护(2)适应性维护(3)完善性维护(4)预防性维护
7、决定软件可维护性因素
(1)可理解性(2)可测试性(3)可修改性(4)可移植性(5)可重用性
8、软件配置项
软件配置的主要任务就是控制变化,同时也负责各个软件配置项和软件各种版本的标志、软件配置审计以及软件配置发生的任何变化的报告。(1)标识软件配置中的对象(2)版本控制(3)变化控制(4)配置审计(5)状态报告
设计题
1、等价类 有效/无效数据 边界值测试
2、UML类图的描述 3、N-S图、PAD图
论述题
(1) 软件工程(2)可行性研究 问题定义阶段必须回答的关键问题是:“要解决的问题是
什么”。如果不知道问题是什么就试图解决这个问题,显然是盲目的,只会自白浪费
时间和金钱,最终得出的结果很可能是毫无意义的。尽管确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最容易被忽视的一个步骤。(3)需求分析这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统必须做什么”这个问题。(4)总体设计这个阶段的基本任务是,概括地回答“怎样实现目标系统?”这个问题。概要设计又称为初步设计、逻辑设计、高层设计或总体设计。(5)详细设计这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。(6)编码实现(语言,测试)这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。(7)维护维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。
(8)面向对象技术(9)项目管理
1.软件工程学:为了更有效地开发与维护软件,软件工作者早20世纪xx年代后期开始认真
研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科。
2.软件危机典型变现:
(1).对软件发开成本和进度的估计常常不准确.
(2).用户对"已完成的"软件系统不满意的现象经常发生.
(3).软件产品的质量往往靠不住.
(4).软件常常是不可维护的.
(5).软件通常没有适当的文档资料.
(6).软件成本在计算机系统总成本中所占的比例逐年上升.
(7).软件开发产生率提高的速度,远远跟不上计算机应用迅速普及深入的趋势.
3.产生软件危机的原因:
(1).软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件.
(2).软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模
的增加而呈指数上升.
(3).软件本身独有的特点确实给开发和维护带来一些客观困难.
(4)与软件开发和维护有关的许多错误认识和做法形成,可以归因于在计算机系统发展的早
期阶段软件开发的个体特点.
4.消除软件危机的途径:
(1).应该对计算机软件有一个正确的认识.
(2).充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是组织良好、管理严密、各
类人员协同配合、共同完成的工程项目.
(3).在使用要总结出成功的技术和方法,尽快消除错误概念和做法.
(4).开发和使用更好的软件工具
5.软件工程的本质特性:
(1).软件工程关注于大型程序的构造.
(2).软件工程的中心课题是控制复杂性.
(3).软件经常变化.
(4).开发软件的效率非常重要.
(5).和谐地合作是开发软件的关键.
(6).软件必须有效地支持它的用户.
(7).在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产
品.
6.软件工程的原理:
(1).用分段的生命周期计划严格管理.
(2).坚持进行阶段评审.
(3).实行严格的产品控制.
(4).采用现代程序设计技术.
(5).结果应能清楚地审查.
(6).开发小组的人员应该少而精.
(7).承认不断改进软件工程实践的必要性.
7.软件生命周期:由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段.
8.软件开发时期4个阶段:总体设计,详细设计,编码和单元测试,综合测试.
9.软件维护,维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要.
10.瀑布模型的特点:
(1).阶段间具有顺序性和依赖性.
(2).推迟实现的观点.
(3).质量保证的观点.
11.快速原型模型:是快速建立起来的可以在计算机运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集.
12.快速模型的主要优点是不带馈环的,软件产品基本上是线性顺序进行的.
13.可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决.
14.可行性的解法:
(1)技术可行性.(2)经济可行性.(3)操作可行性.
15.可行性研究过程步骤:
(1).复查系统规模和目标.
(2).研究目前正在使用的系统.
(3).导出新系统的高层逻辑模型.
(4).进一步定义问题.
(5).导出和评价供选择的解法.
(6).推荐行动方针.
(7).草拟开发计划.
(8).书写文档提交审查.
16.系统流程图:是概括地描绘物理系统的传统工具.它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件.
17.数据流图(DFD):是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换.
18.数据字典:是关于数据的信息的集合,就是对数据流图中包括的所有元素的定义的集合.
19.数据字典组成元素:(1)数据流.(2)数据流分量.(3)数据存储.(4)处理.
20.定义数据的方法:定义绝大多数复杂事物的方法,都是用被定义的事物的成分的某种组合表示这个事物,这些组成成分又由更底层的成分的组合来定义.
21.数据字典最重要用途:作为分析阶段的工具。
22.为什么要进行需求分析:因为它的基本任务是准确地回答“系统必须做什么?”这个问题。可行性研究阶段只是粗略了解用户的需求,许多细节被忽略,然而最终的系统中却不能遗漏任何细节。所以可行性研究并不能代替需求分析。
23.软件系统综合要求:(1)功能需求.(2)性能需求.(3)可靠性和可行性需求.(4)出错处理需求.(5) 接口需求.(6)约束.(7)逆向需求.(8)将来可能提出的要求.
24.访谈:是最早开始使用的获取用户需求的技术,是迄今为止仍然广泛使用的需求分析技术.
25.需求分析过程3种模型:数据模型、功能模型和行为模型.
26.数据模型包含3种相互关联信息:数据对象、数据对象的属性及数据对象彼此间相互连接的关系.
27.总体设计的目的:就是回答"概括地说,系统应该如何实现?"这个问题.
28.总体设计两个过程:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构.
29.总体设计过程步骤: (1)设想供选择的方案.(2)选取合理的方案.(3)推荐最佳方案.(4)功能分解.(5)设计软件结构.(6)设计数据库.(7)制定测试计划.(8)书写文档.(9)审查和复查.
30.模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求.
31.怎做到模块独立:开发具有独立功能而且和其他模块之间没有过多的相互作用的模块. 32模块独立两个定性标准度量:内聚和耦合.
33.耦合:对一个软件结构内不同模块之间互连程度的度量.
34.内聚:标志着一个模块各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然
扩展.
35.功能内聚10分 顺序内聚9分 通信内聚7分 过程内聚5分 时间内聚3分 逻辑内聚1
分 偶然内聚0分
36.设计时要力争做到高内聚,低耦合.
37.启发式规则介绍:
(1).改进软件结构提高模块独立性.
(2).模块规模应该适中.
(3).深度、宽度、扇出和扇入都应适当.
(4).模块的作用域应该在控制域之内.
(5).力争降低模块接口的复杂程度.
(6).设计单入口单出口的模块.
(7).模块功能应该可以预测
38.交换流:信息沿输入通信路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出路变成外部形式离开软件系统.
39.事务流:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行.
40.详细设计目标:确定应该怎样具体地实现所要求的系统.
41.结构程序设计:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进
行连接,并且每个代码只有一个入口和一个出口.
42.实现:通常把编码和测试统称.
43.编码:就是那软件设计结果翻译成用某种程序设计语言书写的程序.
44.测试方法:黑盒测试(知产品的功能可测试)和白盒测试(知产品内部工作过程可测试)
45.测试步骤:(1)模块测试.(2)子系统测试.(3)系统测试.(4)验收测试.(5)平行运行.
46.测试重点:(1)模块接口(2)局部数据结构(3)重要的执行通路(4)出错处理通路(5)边界条件.
47.确认测试:也称验收测试,它的目标是验收软件的有效性.
48.Alpha测试:由用户在开发者的场所进行,并且在开发者对用户的"指导"下进行测试.开发者负责记录发现的错误和使用中遇到的问题.
49.Beta测试:由软件的最终用户在一个或多个客户场所进行.与Alpha测试不同,开发者通常不在Beta测试的现场,因此,Bate测试时软件在开发者不能控制的环境中的"真实"应用.
50.调试:是在测试发现错误之后排除错误的过程.
51.软件维护:就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改的过程.
52.改正性维护:诊断和改正错误的过程.
53.决定软件维护性的因素:(1)可理解性.(2)可测试性.(3)可修改性.(4)可移植性.(5)可重用性.
54.用户文档:是用户了解系统的第一步,它应该能使用户获得对系统的准确的初步印象.
55.用户文档包括的内容:(1)功能描述(2)安装文档(3)使用手册(4)参考手册(5)操作员指南.
56.系统文档:指从问题定义、需求说明到验收测试计划这样一系列和系统实现有关的文档.