软件维护的实施

server/2024/12/22 22:09:56/

软件维护活动

(1) 维护机构

除了较大的软件开发公司外,通常在软件维护工作方面,不保持正式的维护机构。维护往往是在没有计划的情况下进行的。虽然不要求建立一个正式的维护机构,但是在开发部门,确立一个非正式的维护机构则是非常必要的。例如图就是一个维护机构的组织方案。

维护申请提交给一个维护管理员,他把申请交给某个系统监督员去评价。一旦做出评价,由修改负责人确定如何进行修改。在维护人员对程序进行修改的过程中,由配置管理员严格把关,控制修改的范围,对软件配置进行审计。

维护管理员、系统监督员、修改负责人等,均代表维护工作的某个职责范围。修改负责人、维护管理员可以是指定的某个人,也可以是一个包括管理人员、高级技术人员在内的小组。系统监督员可以有其他职责,但应具体分管某一个软件包。

在开始维护之前,就把责任明确下来,可以大大减少维护过程中的混乱。

(2) 软件维护工作流程

 先确认维护要求。这需要维护人员与用户反复协商,弄清错误概况以及对业务的影响大小,以及用户希望做什么样的修改。然后由维护组织管理员确认维护类型。

 对于改正性维护申请,从评价错误的严重性开始。如果存在严重的错误,则必须安排人员,在系统监督员的指导下,进行问题分析,寻找错误发生的原因,进行“救火”性的紧急维护; 对于不严重的错误,可根据任务、机时情况、视轻重缓急,进行排队,统一安排时间。

对于适应性维护和完善性维护申请,需要先确定每项申请的优先次序。若某项申请的优先级非常高,就可立即开始维护工作,否则,维护申请和其它的开发工作一样,进行排队,统一安排时间。

尽管维护申请的类型不同,但都要进行同样的技术工作。这些工作有:修改软件需求说明、修改软件设计、设计评审、对源程序做必要的修改、单元测试、集成测试( 回归测试)、确认测试、软件配置评审等。

 在每次软件维护任务完成后,最好进行一次情况评审,确认:在目前情况下,设计、编码、测试中的哪一方面可以改进?哪些维护资源应该有但没有?工作中主要的或次要的障碍是什么?从维护申请的类型来看是否应当有预防性维护?

(3) 维护评价

评价维护活动比较困难,因为缺乏可靠的数据。但如果维护记录做得比较好,就可以得出一些维护“性能”方面的度量值。可参考的度量值如:

 每次程序运行时的平均出错次数;

 花费在每类维护上的总“人时”数;

 每个程序、每种语言、每种维护类型的程序平均修改次数;

 因为维护,增加或删除每个源程序语句所花费的平均“人时”数;

 用于每种语言的平均“人时”数;

 维护申请报告的平均处理时间;

 各类维护申请的百分比。

这七种度量值提供了定量的数据,据此可对开发技术、语言选择、维护工作计划、资源分配、以及其它许多方面做出判定。因此,这些数据可以用来评价维护工作。

4. 程序修改的步骤及修改的副作用

(1) 分析和理解程序

经过分析,全面、准确、迅速地理解程序是决定维护成败和质量好坏的关键。在这方面, 软件的可理解性和文档的质量非常重要。必须:

 理解程序的功能和目标;

 掌握程序的结构信息,即从程序中细分出若干结构成分。如程序系统结构、 控制结构、数据结构和输入/输出结构等;

 了解数据流信息,即所涉及到的数据来源何处,在哪里被使用;

 了解控制流信息,即执行每条路径的结果;

 理解程序的操作(使用)要求;

为了容易地理解程序,要求自顶向下地理解现有源程序的程序结构和数据结构,为此可采用如下方法:

① 分析程序结构图:

 分析各个过程的源代码,建立一个直接调用矩阵D或调用树。

 建立过程的间接调用矩阵。

 分析各个过程的接口,估计更改的复杂性。

② 数据跟踪

 建立各层次的程序级上的接口图,展示各模块或过程的调用方式和接口参数;

 利用数据流分析方法,对过程内部的一些变量进行跟踪;维护人员通过这种数据流跟踪,可获得有关数据在过程间如何传递,在过程内如何处理等信息。

③ 控制跟踪

控制流跟踪同样可在结构图基础上或源程序基础上进行。可采用符号执行或实际动态跟踪的方法,了解数据如何从一个输入源到达输出点的。

④ 在分析的过程中,充分阅读和使用源程序清单和文档,分析现有文档的合理性。

⑤ 充分使用由编译程序或汇编程序提供的交叉引用表、符号表、以及其它有用的信息。

⑥ 如有可能,积极参加开发工作。

(2) 修改程序

对程序的修改,必须事先做出计划,有预谋地、周密有效地实施修改。

① 设计程序的修改计划

程序的修改计划要考虑人员和资源的安排。修改计划的内容主要包括:

 规格说明信息:数据修改、处理修改、作业控制语言修改、系统之间接口的修改等;

 维护资源:新程序版本、测试数据、所需的软件系统、计算机时间等;

 人员:程序员、用户相关人员、技术支持人员、厂家联系人、数据录入员等;

 提供:纸面、计算机媒体等。

针对以上每一项,要说明必要性、从何处着手、是否接受、日期等。通常,可采用自顶向下的方法,在理解程序的基础上,

ⅰ) 研究程序的各个模块、模块的接口、及数据库,从全局的观点,提出修改计划。

ⅱ) 依次地把要修改的、以及那些受修改影响的模块和数据结构分离出来。为此,要

   识别受修改影响的数据;

   识别使用这些数据的程序模块;

   对于上面程序模块,按是产生数据、修改数据、还是删除数据进行分类;

  识别对这些数据元素的外部控制信息;

  识别编辑和检查这些数据元素的地方;

   隔离要修改的部分;

ⅲ) 详细地分析要修改的、以及那些受变更影响的模块和数据结构的内部细节,设计修改计划,标明新逻辑及要改动的现有逻辑。

ⅳ) 向用户提供回避措施。用户的某些业务因软件中发生问题而中断,为不让系统长时间停止运行,需把问题局部化,在可能的范围内继续开展业务。可以采取的措施有:

   在问题的原因还未找到时,先就问题的现象,提供回避的操作方法。

   如果弄清了问题的原因,可通过临时修改或改变运行控制以回避在系统运行时产生的问题。

② 修改代码,以适应变化

 正确、有效地编写修改代码;

 要谨慎地修改程序,尽量保持程序的风格及格式,要在程序清单上注明改动的指令;

 不要删除程序语句,除非完全肯定它是无用的;

 不要试图共用程序中已有的临时变量或工作区,为了避免冲突或混淆用途,应自行设置自己的变量;

 插入错误检测语句;

在修改过程中做好修改的详细记录,消除变更中任何有害的副作用(波动效应);③ 修改程序的副作用

所谓副作用是指因修改软件而造成的错误或其它不希望发生的情况,有三种副作用:

 修改代码的副作用。在使用程序设计语言修改源代码时,都可能引入错误。例如,删除或修改一个子程序、删除或修改一个标号、 删除或修改一个标识符、改变程序代码的时序关系、改变占用存储的大小、改变逻辑运算符、修改文件的打开或关闭、改进程序的执行效率,以及把设计上的改变翻译成代码的改变、为边界条件的逻辑测试做出改变时,都容易引入错误。

 修改数据的副作用。在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而导致软件出错。数据副作用就是修改软件信息结构导致的结果。例如,在重新定义局部的或全局的常量、 重新定义记录或文件的格式、增大或减小一个数组或高层数据结构的大小、修改全局或公共数据、重新初始化控制标志或指针、重新排列输入/输出或子程序的参数时,容易导致设计与数据不相容的错误。数据副作用可以通过详细的设计文档加以控制。在此文档中描述了一种交叉引用,把数据元素、记录、文件和其它结构联系起来。文档的副作用。对数据流、软件结构、 模块逻辑或任何其它有关特性进行修改时,必须对相关技术文档进行相应修改。否则会导致文档与程序功能不匹配,缺省条件改变,新错误信息不正确等错误。使得软件文档不能反映软件的当前状态。对于用户来说,软件事实上就是文档。如果对可执行软件的修改不反映在文档里,就会产生文档的副作用。例如,对交互输入的顺序或格式进行修改,如果没有正确地记入文档中,就可能引起重大的问题。过时的文档内容、索引和文本可能造成冲突,引起用户的失败和不满。因此,必须在软件交付之前对整个软件配置进行评审,以减少文档的副作用。

为了控制因修改而引起的副作用,要做到:

ⅰ) 按模块把修改分组;

ⅱ) 自顶向下地安排被修改模块的顺序;

ⅲ) 每次修改一个模块;

ⅳ) 对于每个修改了的模块,在安排修改下一个模块之前,要确定这个修改的副作用。可以使用交叉引用表、存储映象表、执行流程跟踪等。(3) 重新验证程序

在将修改后的程序提交用户之前,需要用以下的方法进行充分的确认和测试,以保证整个修改后的程序的正确性。

① 静态确认

修改软件,伴随着引起新的错误的危险。为了能够做出正确的判断,验证修改后的程序至少需要两个人参加。要检查

 修改是否涉及到规格说明? 修改结果是否符合规格说明? 有没有歪曲规格说明?

 程序的修改是否足以修正软件中的问题? 源程序代码有无逻辑错误? 修改时有无修补失误?

修改部分对其它部分有无不良影响(副作用)?

对软件进行修改,常常会引发别的问题,因此有必要检查修改的影响范围。

② 计算机确认

在充分进行了以上确认的基础上,要用计算机对修改程序进行确认测试:

 确认测试顺序:先对修改部分进行测试,然后隔离修改部分,测试程序的未修改部分,最后再把它们集成起来进行测试。这种测试称为回归测试。

 准备标准的测试用例。

 充分利用软件工具帮助重新验证过程。

 在重新确认过程中,需邀请用户参加。③ 维护后的验收──在交付新软件之前,维护主管部门要检验:

 全部文档是否完备,并已更新;

所有测试用例和测试结果已经正确记载;

 记录软件配置所有副本的工作已经完成;

 维护工序和责任已经确定。


http://www.ppmy.cn/server/152334.html

相关文章

【Http,Netty,Socket,WebSocket的应用场景和区别】

Http,Netty,Socket,WebSocket的应用场景和区别 Http、Netty、Socket、WebSocket都是网络通信领域中的重要技术和工具,它们在应用场景和特性上有所区别。以下是对这四种技术和工具的应用场景及区别的详细分析: Http的…

docker如何学习与使用入门

学习和使用 Docker 的入门可以分为以下几个步骤。Docker 是一个功能强大的工具,通过容器化技术使得应用开发和部署更加高效、简便。以下是一个逐步的学习路径,帮助你从入门到熟练掌握 Docker。 1. 理解容器化的概念 在学习 Docker 之前,先了…

深度解析京东API接口:如何高效获取商品详情与SKU信息

在当下电商蓬勃发展的时代,如何高效地获取商品详情与SKU(Stock Keeping Unit,库存单位)信息成为了商家们进行电商运营、价格比较、库存管理及市场分析等活动的关键。京东API接口为此提供了强大的支持,使得开发者能够通…

ios 混合开发应用白屏问题

一、问题场景 项目业务中某个前端页面中使用了多个echart 组件来显示历史数据, 在反复切换到这个页面后,会出现白屏问题。 二、问题分析 0x116000ab0 - GPUProcessProxy::didClose: 0x116000ab0 - GPUProcessProxy::gpuProcessExited: reasonCrash 0x11…

XXE靶场

XXE-lab 靶场 靶场网址&#xff1a;http://172.16.0.87/ 第一步我们看到网站有登录框我们试着用 bp 去抓一下包 将抓到的包发到重放器中 然后我们构建palody <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "php://filter/readconvert.base64-encode/resourceC:/flag/fla…

WordPress 去除?v= 动态后缀

Wordpress url后面带有?vxxx的参数符&#xff0c;这种现象出现在安装了Woocommerce插件的店铺类型站点上&#xff0c;参数的作用是帮助系统根据用户的geographic定位计算 tax and shipping fee。 如何删除&#xff1f; 后台进入WooCommerce Settings &#xff0c;将根据IP定…

联发科MTK8788_MT8788安卓核心板安兔兔跑分_安卓主板方案商

MT8788安卓核心板具有集成的蓝牙、fm、WLAN和gps模块&#xff0c;是一个高度集成的基带平台&#xff0c;包括调制解调器和应用处理子系统&#xff0c;启用LTE/LTE-A和C2K智能设备应用程序。该芯片集成了工作在2.0GHz的ARM Cortex-A73、最高可达2.0GHz的ARM Cortex-A53和功能强大…

面试题整理9----谈谈对k8s的理解1

谈谈对k8s的理解 1. Kubernetes 概念 1.1 Kubernetes是什么 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统&#xff0c;其服务、支持和工具的…