7 软件维护

devtools/2024/11/13 21:24:22/

软件维护

  • 1、软件维护概念和分类
    • 1.1 软件维护概念
    • 1.1 软件维护分类
      • 完善性维护
      • 纠错性维护
      • 适应性维护
      • 预防性维护
  • 2、软件维护注意事项
  • 3、软件维护技术
    • 3.1 程序理解
    • 3.2 软件再工程
    • 3.3 软件逆向工程

1、软件维护概念和分类

1.1 软件维护概念

IEEE/EIA 12207[ISO/IEC2008]中对软件维护的定义是:软件维护是指由于软件产品出现问题或需要改进而对代码及相关文档的修改,其目的是对现有软件产品进行修改的同时保持其完整性。

软件维护阶段一般要消耗软件生命周期中经费开支的大部分。
在这里插入图片描述

  • 不同年代软件维护占软件成本的比重
    在这里插入图片描述

1.1 软件维护分类

在这里插入图片描述

完善性维护

在软件的使用过程中,用户往往会对软件提出新的功能于性能要求。为了满足这些要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。这种情况下进行的维护活动叫做完善性维护。
实践证明:

  1. 大部分维护工作是改变和加强软件,不是纠错。
  2. 完善性维护不一定是救火式的紧急维修,而可以是有计划、有预谋的一种再开发活动。
  3. 来自用户要求扩充、加强软件功能、性能的维护活动约占整个维护活动的50%。

纠错性维护

在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分隐藏的错误遗留到运行阶段。这些隐藏下来的错误在某些特定的使用环境下就会暴露出来。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误用,应当进行的诊断和改正错误的过程就叫做纠错性维护。

适应性维护

在使用过程中,外部环境(新的硬、软件配置)、数据环境(数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。为使软件适应这种变化,而去修改软件的过程就叫做适应性维护。

预防性维护

预防性维护是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好的基础。预防性维护定义为:采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编制和测试。

2、软件维护注意事项

软件维护具有困难性:

  1. 配置管理工作不到位;
  2. 人员变动造成的影响;
  3. 许多软件的可读性差;
  4. 任务紧、时间紧的情况下处理维护请求。
  • 技术方面:程序的理解、测试、影响分析、可维护性
    决定软件可维护性的主要因素:可理解性、可测试性、可修改行、可移植性、可重用性;
    影响软件可维护性的维护环境的因素:软件维护的文档、软件运行的环境、软件的维护组织、软件维护质量。
  • 管理方面
    契合组织的目标、人力资源、过程、如何组织维护活动、外包
  • 维护费用估算
    在这里插入图片描述
    在这里插入图片描述

3、软件维护技术

3.1 程序理解

程序理解的任务:以软件维护、升级和再工程为目的,在不同的抽象级别上建立基本软件的概念模型,包括从代码本身的模型到基本应用领域的模型,即建立从问题/应用域到程序设计/实现域的映射集。
具体任务:

  1. 通过检查单个的程序设计结构,程序被表示成抽象语法树、符号表或普通源文本;
  2. 尽量做到程序隐含信息的显性表示及程序内部关系的可视化;
  3. 从源代码中提取信息,并存放在通用的数据库中,然后通过查询语言对数据库进行查询;
  4. 检查程序构造过程中的结构关系,明确表示程序组成部分之间的依赖关系;
  5. 识别程序的高层概念,如标准算法、数据结构、语法及语义匹配等。

3.2 软件再工程

软件再工程指对现有软件进行仔细审查和改造,对其进行重新构造,使之称为一个新的形式,同时包括随之产生的对新形式的实现。
在这里插入图片描述

3.3 软件逆向工程

是分析目标系统,识别系统的构件及其交互关系,并且通过高层抽象或其他形式来展现目标系统的过程。
对逆向工程而言,抽象的层次、完备性、工具与分析人员协同工作的强度、过程的方向性等因素是需要考虑的。
在这里插入图片描述


http://www.ppmy.cn/devtools/133283.html

相关文章

LeetCode35:搜索插入位置

原题地址:. - 力扣(LeetCode) 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算…

泉州市工业和信息化局关于开展排查运维安全管理系统安全漏洞的通知

文章目录 引言附件1: 受影响版本和修复方案附件2:漏洞排查处置情况反馈表引言 接国家网络与信息安全信息通报中心通报,一款由北京圣博润高新技术股份有限公司研发的运维安全管理系统(俗称堡垒机)存在命令执行漏洞(CNVD-C-2024-781563、NVDB-CNVDB-2024768604)。攻击者可…

使用k8s管理应用以及java案例

使用k8s管理应用 制作镜像控制器管理podpod数据持久化创建service四层代理创建ingress规则对外发布应用日志与监控应用案例(因无开发代码,最终跑不起来)编写java代码编写 Dockerfile构建 Docker 镜像在 Kubernetes 上运行应用程序创建 Kubernetes 服务service创建in…

Android 如何实现不编译指定的apk,不加载系统应用

1.把Android.mk改为Android.mk_bak 2.删除当前Android.mk内容变为空mk 或者注释掉里面所有内容 3.以上方法存在些许问题,因为只是把当前的mk屏蔽了,但其他路径的类似应用也会编译进去。 在内置应用mk下添加需要覆盖的应用,这个比较全面&…

Oracle 23AI创建示例库

一、示例库介绍 多年来,Oracle 一直使用简单的数据库模式 SCOTT 及其两个突出的表 EMP 和 DEPT,用于文档和培训中的各种示例。但不少小伙伴并不知道如何创建这些示例数据,其实Oracle官方上就有提供对应的方法,本文就带领大家完成…

关于vue生命周期

父子组件生命周期执行顺序? v2 v3 父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount -> 子mounted -> 父mounted Vue2生命周期 Vue3生命周期 beforeCreate setup created created befor…

乐尚代驾十订单支付seata、rabbitmq异步消息、redisson延迟队列

账单信息 司机结束代驾之后,生成账单(包含账单信息和分账信息)司机发送账单给乘客乘客获取账单之后,进行支付 获取账单信息 order_bill表记录的账单信息,我们直接获取即可 Operation(summary "根据订单id获取…

JavaScript:loadScript 方法

一、loadScript 解释 在JavaScript中,loadScript 方法通常用于动态地加载一个外部JavaScript脚本。这种方法常用于需要根据某些条件(如用户交互、页面加载完成后的某些操作等)动态引入脚本的场景。 二、实现代码 function loadScript(url,…