文章链接:https://codemouse.online/archives/2020-05-29183056

软件维护

国标GB/T 11457-95定义:在一软件产品交付使用后对其进行修改,以纠正故障、改进其性能和其它属性,或使产品适应改变了的环境。

软件维护分类

新开发活动:强调要在一定的约束条件下从头开始实施。
软件维护:强调必须在现有系统的限定和约束条件下实施。
两种错误认识

  1. 软件维护是一次新的开发活动 。
  2. 软件维护就是改错 。

分类:

  • 纠错性维护:为了改正软件系统中的错误,使软件能够满足预期正常运行状态要求而进行维护。
  • 预防性维护:为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础而修改软件的活动。
  • 适应性维护:为了使软件适应内部或外部环境变化而去修改软件的过程。
  • 改善性维护:满足使用过程中用户提出增加新功能或修改已有功能的建议维护。

软件维护方法

  • 结构化维护:采用软件工程的方法进行软件开发,保证每个阶段都有完整详细文档。
  • 非结构化维护:不采用软件工程方法开发软件,软件只有程序而欠缺文档,则维护工作将十分困难。

软件维护问题

  • 理解别人的代码通常非常困难
  • 需要维护的软件没有文档、或资料严重不足
  • 不能指望原来的开发人员来完成或提供解释
  • 绝大多数软件在设计时没有考虑到将来的修改
  • 软件维护这项工作毫无吸引力

软件维护成本

软件维护除费用外的无形代价包括:

  • 占用了其他软件开发可用的资源,使资源利用率降低。
  • 一些修复或修改请求得不到及时安排,使得客户满意率下降。
  • 引入新的潜在的错误,降低了软件质量。
  • 将软件人员抽调到维护工作中,使其它软件开发过程受到干扰。

影响软件维护因素

影响维护工作量的因素主要有以下六种:

  1. 系统的规模
  2. 程序设计语言
  3. 系统年龄
  4. 数据库技术的应用
  5. 先进的软件开发技术
  6. 其它一些因素

软件维护组织

维护组织结构图

软件维护过程

对工作安排队列中的任务,由修改负责人依次从队列中取出任务,按照软件工程方法学规划、组织、实施工程。
非纠错性维护:首先判断维护类型,对适应性维护,按照评估后的优先级放入队列。
改善性维护:要考虑是否采取行动,如果接受申请,按照评估后得到的优先级放入队列,如果拒绝申请,通知请求者,并说明原因。

每种维护请求都要进行同样的一系列技术工作:

  • 修改软件需求说明
  • 修改软件设计
  • 设计评审
  • 必要时重新编码
  • 单元测试、集成测试( 包括回归测试)、确认测试等

维护工作最后一步是复审:

  • 依照当前状态,在设计、编码和测试的哪些方面还能用其他方法进行?
  • 哪些维护资源可用但未用?
  • 这次维护活动中主要(或次要)的障碍有哪些?
  • 在维护请求中有预防性维护吗?

软件维护记录

  • 维护申请报告
  • 软件修改报告

软件可维护性

可维护性:指理解、改正、调整和改进软件的难易程度。

  • 可理解性
  • 可移植性
  • 可修改性
  • 可测试性

软件可维护性-可理解性

可理解性:指理解软件的结构、接口、功能和内部过程的难易程度。
提高软件可理解性的措施有:

  • 采用模块化的程序结构;
  • 书写详细正确的文档;
  • 采用结构化程序设计;
  • 书写源程序的内部文档;
  • 使用良好的编程语言;
  • 具有良好的程序设计风格等

软件可维护性-可测试性

可测试性:指测试和诊断软件(主要指程序)中错误的难易程度。
提高软件可测试性的措施有:

  • 采用良好的程序结构;
  • 书写详细正确的文档;
  • 使用测试工具和调试工具;
  • 保存以前的测试过程和测试用例等

软件可维护性-可修改性(主要影响因素)

可修改性:指修改软件(主要指程序)的难易程度。
在修改软件时经常会发生这样的情况:

  • 修改了程序中某个错误的同时又产生新的错误(由程序的修改引起的);
  • 或者在程序中增加了某个功能后,导致原先的某些功能不能正常执行。

软件可维护性-可移植性(主要影响因素)

可移植性:指程序转移到一个新的计算环境的难易程度。
影响软件可移植性的因素有:

  • 信息隐蔽原则;
  • 模块独立;模块化;
  • 高内聚低耦合;
  • 良好的程序结构;
  • 不用标准文本以外的语句等

提高可维护性的方法

通常采用的方法有:

  • 确定质量管理目标和优先级
  • 规范化程序设计风格
  • 选择可维护性高的程序设计语言
  • 改进程序文档
  • 保证软件质量审查方法

再工程技术

  • 逆向工程:在软件生存周期中,将软件的某种形式描述转换成更抽象形式的活动。
  • 重构:在同一抽象级别上转换系统的描述形式。
  • 设计恢复:借助工具从已有程序中抽象出有关数据结构设计、总体结构设计和过程设计的信息。

再工程的概念

  • 再工程:指在逆向工程所获信息的基础上修改或重构已有的系统,产生系统的一个新版本。

  • 再工程的主要目的:为遗留系统转化为可演化系统提供一条现实可行的途径 。

  • 再工程是一个工程过程,它将逆向工程、重构和正向工程组合起来,将现存系统重新构造为新的形式。

  • 通常再工程包含:业务过程再工程、软件再工程 。
    业务过程再工程定义业务目标、标示评估现有业务过程以及修订业务过程以更好满足业务目标。
    软件再工程包含库存目录分析、文档重构、逆向工程、程序和数据重构以及正向工程。这一部分通常由软件工程师完成 。

再工程的原因

  • 维护一行源代码的代价可能是最初开发该行源代码代价的14-20倍。
  • 重新设计软件体系结构时使用了现代设计概念,它对将来的维护会有很大的帮助。
  • 用户具有较多使用该软件的经验。
  • 利用逆向工程和再工程的工具,可以使一部分工作自动化。

业务过程再工程

  • 每个系统都是由不同的子系统构成,而子系统还可以再细分为更细的子系统,从而整个业务呈现一种层次结构
  • 让那些使用过程结果的人来执行流程;
  • 将信息处理工作合并到生产原始信息的现实工作中;
  • 将地理分散的资源视为它们是集中的;
  • 连接并行的活动以代替集成它们的结果;
  • 在工作完成的地方设置决策点,并将控制加入过程中;
  • 在其源头一次性获取数据。
  • 业务过程再工程是迭代的,没有开始和结束,只有不断的演化。
  • 在业务过程被分析清楚后,可以对软件实施再工程,整个软件再工程过程模型如下

逆向工程

  • 用户界面:理解旧软件的用户界面。
  • 数据:底层数据库和外部文件
  • 理解:系统,程序,部件,模式和语句

软件工程之软件维护与再工程相关推荐

  1. 软件工程导论——软件维护

    1.软件维护的定义 定义:所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程. 分类 改正性维护:软件中肯定隐藏着某些未被发现的错误,在使用过程中发现了隐藏的错误后,诊 ...

  2. 软件工程之七——软件维护

    软件维护是指在软件运行/维护阶段对软件进行的修改.软件维护的代价是很大的,占整个软件生命周期的75%,而且还在逐年上升.软件维护的类型有三种:改正性维护.适应性维护.完善性维护. 可维护性是指理解.改 ...

  3. 【软件工程】软件维护

    概述 在软件交付给用户使用后,软件也会出现各种问题,这时,就需要我们去维护,维护也是一个非常重要的阶段,看看维护是怎么定义的. 定义:在软件运行/维护阶段对软件产品进行的修改就是维护. 导图 维护工作 ...

  4. 软件工程的顶会和顶刊

    软件工程的顶会和顶刊 软件工程领域的四大顶级会议: ASE (IEEE/ACM International Conference on Automated Software Engineering) ...

  5. 软件工程期末复习汇总(非常详细)

    期末复习 文章目录 期末复习 第1章 概论 软件过程模型 瀑布模型 演化模型 增量模型 原型模型 螺旋模型 喷泉模型 基于构件的开发模型 形式方法模型 第2章 系统工程 可行性分析 经济可行性 技术可 ...

  6. 软件工程复试归纳总结

    第1章 1.1什么是计算机软件? 计算机软件是指计算机系统中的程序及其文档.程序是计算机任务的处理对象和处理规则.文档是了解程序的阐述资料 1.2计算机软件的特点? 软件开发成本和进度难以准确估算 软 ...

  7. 软件工程导论期末考试-试卷2

    软件工程基础 一.  选择题 1.软件需求分析阶段的工作,可以分为4个方面:需求获取,需求分析,编写需求规格说明书以及 A).用户 B).需求审评 C).总结 D).都不正确 (B) 2.在原型法中称 ...

  8. 软件工程基础知识点汇总

    第四章 软件工程基础 4.1 软件工程基本概念 4.1.1 软件定义与软件特点 4.1.2 软件危机与软件工程 4.1.3 软件过程与生命周期 1.软件过程 2. 软件开发生命周期(softeware ...

  9. 【系统分析师之路】系统分析师必知必会(软件工程)

    [系统分析师之路]系统分析师必知必会(软件工程) 系统分析师必知必会 软件工程篇 [系统分析师之路]系统分析师必知必会(软件工程) 一. 逆向工程/再工程 1)逆向工程 2)逆向工程概念 3)恢复信息 ...

  10. 复旦961-软件工程笔记

    先推一下复旦软工考研大群 QQ群号:690285208 今天调剂复试了,帖子发出来给考961的大家参考下,也攒攒人品. 图 汇总 用例图-这人博客有很多关于怎么画图的 数据流图 数据流图(文件的输入输 ...

最新文章

  1. Python 高级特性 (1)- 闭包
  2. python里混淆矩阵 左下角为漏报,右上角为误报
  3. 为什么函数式语言会火
  4. Linux记录-salt命令
  5. leetcode题解——贪心
  6. postgressql数据库给模式添加search_path
  7. java litjson_仿造 Gson 的自制 json 解析器
  8. Webservice 实践
  9. linux apache支持ipv6,如何在Nginx和Apache中启用IPv6?
  10. oracle如何创建基表,创建本地基表的物化视图
  11. 阿里云认证是什么?报考要什么条件?
  12. 前端例程20211122:盐酸与氢氧化钠溶液中和pH计算工具
  13. 语音模块LD3320模块的二次开发,并与树莓派进行串口通信
  14. SQL联合查询 join
  15. BZOJ2054疯狂的馒头
  16. UWA发布 | 2017 Unity手游体检蓝皮书 — MMORPG篇
  17. PTA:宿舍谁最高?
  18. 阿里云服务器学生机的申请与使用
  19. 6岁男孩向他们敬礼2分钟,夏日炎炎,你们都辛苦了!
  20. 【FPGA,MPPT】基于FPGA的MPPT最大功率跟踪系统verilog开发

热门文章

  1. 工业智能网关BL110应用之六十二: 实现西门子S7-200SMART PLC 接入MQTT Client One云平台
  2. Vue 中播放帧动画(抽离方法)
  3. swift 第三方库SwiftyJSON
  4. 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第四章(3) 创建新工程
  5. RS-485通信协议简介
  6. 【网络文摘】程序人生:我们工作到底为了什么
  7. bigemap 软件功能对比
  8. 数据绑定之DataFormatString
  9. 教你sql查询分析器执行存储过程
  10. 台式计算机键盘驱动,提示检测到不兼容的键盘驱动程序怎么解决 教你几个步骤轻松修复...