一、简要回答如下的问题:
1. 软件维护有哪些内容?
(1) 校正性维护
在软件交付使用后,由于软件开发过程中产生的错误在测试中并没有完全彻底地发现,因此必然有一部分隐含的错误被带到维护阶段来。这些隐含的错误在某些特定的使用环境下会暴露出来。为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护,
校正性维护占整个维护工作的21%。
(2) 适应性维护
随着计算机的飞速发展,计算机硬件和软件环境在不断发生变化,数据环境也在不断发生变化。为了使应用软件适应这种变化而修改软件的过程称为适应性维护。例如,某个应用软件原来是在DOS环境下运行的,现在要把它移植到Windows环境下来运行;某个应用软件原来是在一种数据库环境下工作的,现在要改到另一种安全性较高的数据库环境下工作,这些变动都需要对相应的软件作修改。这种维护活动要占整个维护活动的25%。
(3)完善性维护
在软件漫长的运行时期中,用户往往会对软件提出新的功能要求与性能要求。这是因为用户的业务会发生变化,组织机构也会发生变化。为了适应这些变化,应用软件原来的功能和性能需要扩充和增强。这种增加软件功能、增强软件性能和提高软件运行效率而进行的维护活动称为完善性维护。例如,软件原来的查询响应速度较慢,要提高响应速度;软件原来没有帮助信息,使用不方便,现在要增加帮助信息。这种维护性活动数量较大,占整个维护活动的50%。
(4) 预防性维护
为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。这是为以后进一步的运行和维护打好基础。这需要采用先进的软件工程方法对需要维护的软件或软件中的某一部分进行设计、编码和测试。在整个维护活动中,预防性维护占很小的比例,只占4%。
2. 软件维护的副作用有哪些?
维护的目的是为了延长软件的寿命并让其创造更多的价值,经过一段时间的维护,软件中的错误减少了,功能增强了。但修改软件是危险的,每修改一次,潜伏的错误就可能增加一分。这种因修改软件而造成的错误或其他不希望出现的情况称为维护的副作用。维护的副作用有编码副作用、数据副作用和文档副作用三种。
1)编码副作用
在使用程序设计语言修改源代码时可能引入如下错误:
(1) 删除或修改一个子程序、一个标号和一个标识符。
(2) 改变程序代码的时序关系,改变占用存储的大小,改变逻辑运算符。
(3) 修改文件的打开或关闭。
(4) 改进程序的执行效率。
(5) 把设计上的改变翻译成代码的改变。
(6) 为边界条件的逻辑测试做出改变。
以上这些变动都容易引入错误,要特别小心、仔细修改,避免引入新的错误。
2) 数据副作用
在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而导致软件错误。数据副作用是修改软件信息结构导致的结果,
有以下几种:
(1) 重新定义局部或全局的常量,重新定义记录或文件格式。
(2) 增加或减少一个数组或高层数据结构的大小。
(3) 修改全局或公共数据。
(4) 重新初始化控制标志或指针。
(5) 重新排列输入/输出或子程序的参数。
以上这些情况都容易导致设计与数据不相容的错误。数据副作用可以通过详细的设计文档加以控制,在此文档中描述了一种交叉作用,把数据元素、记录、文件和其他结构联系起来。
3)文档副作用
对数据流、软件结构、模块逻辑或任何其他有关特性进行修改时,必须对相关技术文档进行相应修改。否则会导致文档与程序功能不匹配、缺省条件改变和新错误信息不正确等错误,使文档不能反映软件当前的状态。如果对可执行软件的修改没有反映在文档中,就会产生如下文档副作用:
(1) 修改交互输入的顺序或格式,没有正确的记入文档中。
(2) 过时的文档内容、索引和文本可能造成冲突等。
因此,必须在软件交付之前对整个软件配置进行评审,以减少文档副作用。事实上,有些维护请求并不要求改变软件设计和源代码,而是指出在用户文档中不够明确的地方。在这种情况下,维护工作主要集中在文档。
为了控制因修改而引起的副作用,要做到:按模块把修改分组;自顶向下的安排被修改模块的顺序;每次修改一个模块。
对每个修改了的模块,在安排修改下一个模块之前要确定这个修改的副作用。可使用交叉引用表、存储映像表和执行流程跟踪等。
3. 提高可维护性的方法有哪些?
(1)建立明确的软件质量目标
如果要程序满足可维护性的 7
种特性的全部要求,那是不现实的。实际上,有一些可维护特性是相互促进的,如可理解性和可测试性,可理解性和可修改性;而另一些则是相互矛盾的,如效率和可移植性,效率和可修改性等。为保证程序的可维护性,应该在一定程度上满足可维护性的各个特性,但各个特性的重要性随着程序用途的不同或计算机环境的不同而改变。对编译程序来说,效率和可移植性是主要的;对信息管理系统来说,可使用性和可修改性可能是主要的。通过大量实验证明,强调效率的程序包含的错误比强调简明性的程序所包含的错误要高出10倍。因此明确软件所追求的质量目标对软件的质量和生存周期的费用将产生很大的影响。
(2) 使用先进的软件开发技术和工具
利用先进的软件开发技术能大大提高软件质量和减少软件费用。例如,面向对象的软件开发方法就是一个非常实用而强有力的软件开发方法。
面向对象方法与人类习惯的思维方法一致,用现实世界的概念来思考问题,从而能自然地解决问题。它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在开发过程中都使用应用领域的概念去思考,开发过程自始至终都围绕着建立问题领域的对象模型来进行。按照人们习惯的思维方式建立起问题领域的模型,模拟客观世界,使描述问题的问题空间和描述解法的解空间在结构上尽可能一致,开发出尽可能直观、自然的表现求解方法的软件系统。
面向对象方法开发出的软件的稳定性好。传统方法开发出来的软件系统的结构紧密依赖于系统所需要完成的功能。当功能需求发生变化时,将引起软件结构的整体修改,因而这样的软件结构是不稳定的。面向对象方法以对象为中心构造软件系统,用对象模拟问题领域中的实体,以对象间的联系刻画实体间的联系,根据问题领域中的模型来建立软件系统的结构。由于客观世界的实体及其之间的联系相对稳定,因此建立的模型也相对稳定。当系统的功能需求发生变化时,并不会引起软件结构的整体变化,往往只需要做一些局部性的修改。所以面向对象方法构造的软件系统也比较稳定。
面向对象方法构造的软件可重用性好。对象所固有的封装性和信息隐蔽机制,使得对象内部的实现和外界隔离,具有较强的独立性。因此对象类提供了比较理想的模块化机制和比较理想的可重用的软件成分。
由于对象类是理想的模块机制,它的独立性好,修改一个类通常很少涉及到其他类。若只修改一个类的内部实现部分而不修改该类的对外接口,则可以完全不影响软件的其他部分。由于面向对象的软件技术符合人们习惯的思维方式,用这种方法所建立的软件系统的结构与问题空间的结构基本一致,因此面向对象的软件系统比较容易理解。
对面向对象的软件系统进行维护,主要通过对从已有类派生出一些新类的维护来实现。因此,维护时的测试和调试工作也主要围绕这些新派生出来的类进行。类是独立性很强的模块,向类的实例发消息即可运行它,观察它是否能正确的完成要求它做的工作。对类的测试通常比较容易实现,如果发现错误也往往集中在类的内部,比较容易调试。
总之,面向对象方法开发出来的软件系统,稳定性好、容易修改、容易理解,易于测试和调试,因而可维护性好。
(3) 建立明确的质量保证
质量保证是指为提高软件质量所做的各种检查工作。质量保证检查是非常有效的方法,不仅在软件开发的各阶段中得到了广泛应用,而且在软件维护中也是一个非常重要的工具。为了保证可维护性,以下
4 类检查是非常有用的。
<1> 在检查点进行检查
检查点是指软件开发的每一个阶段的终点。在检查点进行检查的目标是证实已开发的软件是满足设计要求的。在不同的检查点检查的内容是不同的。例如,在设计阶段检查的重点是可理解性、可修改性和可测试性,可理解性检查的重点是检查设计的复杂性
<2> 验收检查
验收检查是一个特殊的检查点的检查,它是把软件从开发转移到维护的最后一次检查。它对减少维护费用,提高软件质量是非常重要的。验收检查实际上是我们已讲过的验收测试的一部分,只不过验收检查是从维护角度提出验收条件或标准的。
<3> 周期性的维护检查
上述两种软件检查适用于新开发的软件。对已运行的软件应进行周期性的维护检查。为了改正在开发阶段未发现的错误,使软件适应新的计算机环境并满足变化的用户需求,对正在使用的软件进行改变是不可避免的。
改变程序可能引入新错误并破坏原来程序概念的完整性。为了保证软件质量应该对正在使用的软件进行周期性维护检查。实际上周期性维护检查是开发阶段对检查点进行检查的继续,采用的检查方法和检查内容都是相同的。把多次维护检查结果同以前进行的验收检查结果以及检查点检查结果做比较,对检查结果的任何改变都要进行分析,找出原因。
<4> 对软件包的检查
上述检查方法适用于组织内部开发和维护的软件或专为少数几个用户设计的软件,很难适用于享有多个用户的通用软件包。因为软件包属于卖方的资产,用户很难获得软件包的源代码和完整的文档。对软件包的维护通常采用下述方法。使用单位的维护程序员在分析研究卖方提供的用户手册、操作手册、培训教程、新版本策略指导、计算机环境和验收测试的基础上,深入了解本单位的希望和要求,编制软件包检验程序。
软件包检验程序是一个测试程序,它检查软件包程序所执行的功能是否与用户的要求和条件相一致。为了建立这个程序,维护程序员可以利用卖方提供的验收测试用例或重新设计新的测试用例,根据测试结果检查和验证软件包的参数或控制机构,从而完成软件包的维护。
(4)选择可维护的语言
程序设计语言的选择对维护影响很大。低级语言很难理解,很难掌握,因而很难维护。一般来说,高级语言比低级语言更容易理解,
在高级语言中,一些语言可能比另一些语言更容易理解。
(5)改进程序的文档
<1> 程序文档
程序员利用程序文档来理解程序的内部结构、程序同系统内其他程序、操作系统和其他软件系统如何相互作用。程序文档包括源代码的注释、设计文档、系统流程图、程序流程图和交叉引用表等。
<2> 用户文档
用户文档提供用户如何使用程序的命令和指示,通常是指用户手册。更好的用户文档是联机的,用户在终端就可以阅读到它,这给没有经验的用户提供必要的帮助和引导。
<3> 操作文档
操作文档指导用户如何运行程序,它包括操作员手册、运行记录和备用文件目录等。
<4> 数据文档
数据文档是程序数据部分的说明,它由数据模型和数据词典组成。数据模型表示数据内部结构和数据各部分之间的功能依赖性。通常数据模型是用图形表示的。数据词典列出了程序中使用的全部数据项,包括数据项的定义、数据项的使用以及在什么地方使用。
<5> 历史文档
历史文档用于记录程序开发和维护的历史,不少人尚未意识到它的重要性。历史文档有三类,即系统开发日志、出错历史和系统维护日志。了解系统如何开发和系统如何维护的历史对维护程序员来说是非常有用的信息,因为系统开发者和维护者是分开的。利用历史文档可以简化维护工作。例如理解原设计意图,指导维护员如何修改代码而不破坏系统的完整性。
4.何谓结构化方法?有何特点?
结构化方法是指根据某种原理,使用一定的工具,按照特定步骤工作的软件开发方法。它遵循的原理是自顶向下、逐步求精,使用的工具有数据流图(DFD)、数据字典、判定表、判定树和结构化语言等。
结构化方法是从分析、设计到实现都使用结构化思想的软件开发方法,实际上它由三部分组成:结构化分析(Structured
Analysis,简称SA),结构化设计(Structured Design ,简称SD)和结构化程序设计(Structured
Pergramming, 简称SP)。
结构化方法具有以下特点:
(1)它是使用最早的开发方法,使用时间也最长。
(2)它应用最广,特别适合于数据处理。
(3)相应的支持工具多,发展较为成熟。
5. 说明对象、类、类结构及消息的基本概念。
1 ) 对象
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象类型主要有以下几种:
(1) 有形实体: 指一切看得见,摸得着的实物,如计算机、机房、机器人和工件等。这些都属于有形实体,也是最容易识别的对象。
(2) 作用:指人或组织所起的作用,如医生、教师、学生、工人、公司和部门等。
(3) 事件:指在特定时间所发生的事,如飞行、演出、事故和开会等。
(4) 性能说明:指厂商对产品性能的说明,如产品名字、型号及各种性能指标等。
对象不仅能表示结构化的数据,而且能表示抽象的事件、规则以及复杂的工程实体。因此,对象具有很强的表达能力和描述功能。
2 ) 类
具有相同或相似性质对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性;
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
3 )类结构
在客观世界中有若干类,这些类之间有一定的结构关系,通常有两种主要的结构关系,即一般具体结构关系及整体部分结构关系。
一般具体结构称为分类结构,也可以说是“或”关系,是“is
a”关系。类的这种层次结构可用来描述现实世界中的一般化的抽象关系,通常越在上层的类越具有一般性和共性,越在下层的类越具体、越细化。整体部分结构称为组装结构,它们之间的关系是一种“与”关系,是“has
a”关系。上层的类具有整体性,下层的类具有成员性。在类的结构关系中,通常上层类称为父类或超类,下层类称为子类。
4 )消息
对象之间进行通信的一种构造叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。接收消息的对象经过解释,然后给予响应。这种通信机制称为消息传递。发送一条消息至少要包含说明接收消息的对象名、发送给该对象的消息名(即对象名.方法名),一般还要对参数加以说明,参数可以是只有认识消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
消息传递是从外部使得一个对象具有某种主动数据的行为。对于一个系统来说,使用消息传递的方法可更好地利用对象的分离功能。
二、
某图书管理系统有以下功能:
(1)
借书:输入读者借书证,系统首先检查借书证是否有效,若有效,对于第一次借书的读者,在借书文件上建立档案。否则,查阅借书文件,检查该读者所借图书是否超过10本,若已达10本,拒借,未达10本,办理借书(检查库存、修改库存目录并将读者借书情况登入借书文件)。
(2)
还书:从借书文件中读出与读者有关的记录,查阅所借日期,如果超期(三个月)作罚款处理。否则,修改库存目录与借书文件。
(3)
查询:可通过借书文件和库存目录文件查询读者情况、图书借阅情况及库存情况,打印各种统计表。
请就以上系统功能画出分层的DFD图,并建立重要条目的数据字典。
http://s6/middle/6543d4e7h878ac2a3f0c5&690
http://s12/middle/6543d4e7h878ac07ac81b&690
数据字典:
元素名称
|
名称
|
类型
|
说明
|
IPO1
|
还书处理
|
处理
|
根据书号做还书处理,违规做处
|
IPO2
|
有效性检查
|
处理
|
检查读者号,图书号的有效
|
IPO3
|
借书处理
|
处理
|
按读者号,图书号进行借书处理
|
IPO4
|
查询
|
处理
|
管理员对一些基本信息进行查询
|
IPO5
|
打印报表
|
处理
|
打印查询到的信息
|
IPO6
|
处罚管
|
处理
|
根据规则对延期给予相应的处罚
|
IPO7
|
数量检查
|
处理
|
对读者借出的数量是否符合规定进行检查
|
DS001
|
读者信息
|
数据存储
|
读者信息录入,修改,删除,保存
|
DS002
|
库存信息
|
数据存储
|
图书的基本的情况以及所有图书的整体情况
|
DS003
|
错还信息
|
数据存储
|
存储借还书信息,系统自动处理,不能人工录入
|
DS004M
|
处罚信息资
|
数据存储
|
存储延期的处罚信息
|