软件工程之软件维护与再工程
文章链接:https://codemouse.online/archives/2020-05-29183056
软件维护
国标GB/T 11457-95定义:在一软件产品交付使用后对其进行修改,以纠正故障、改进其性能和其它属性,或使产品适应改变了的环境。
软件维护分类
新开发活动
:强调要在一定的约束条件下从头开始实施。
软件维护
:强调必须在现有系统的限定和约束条件下实施。
两种错误认识
:
- 软件维护是一次新的开发活动 。
- 软件维护就是改错 。
分类:
纠错性维护
:为了改正软件系统中的错误,使软件能够满足预期正常运行状态要求而进行维护。预防性维护
:为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础而修改软件的活动。适应性维护
:为了使软件适应内部或外部环境变化而去修改软件的过程。改善性维护
:满足使用过程中用户提出增加新功能或修改已有功能的建议维护。
软件维护方法
结构化维护
:采用软件工程的方法进行软件开发,保证每个阶段都有完整详细文档。非结构化维护
:不采用软件工程方法开发软件,软件只有程序而欠缺文档,则维护工作将十分困难。
软件维护问题
- 理解别人的代码通常非常困难
- 需要维护的软件没有文档、或资料严重不足
- 不能指望原来的开发人员来完成或提供解释
- 绝大多数软件在设计时没有考虑到将来的修改
- 软件维护这项工作毫无吸引力
软件维护成本
软件维护除费用外的无形代价包括:
- 占用了其他软件开发可用的资源,使资源利用率降低。
- 一些修复或修改请求得不到及时安排,使得客户满意率下降。
- 引入新的潜在的错误,降低了软件质量。
- 将软件人员抽调到维护工作中,使其它软件开发过程受到干扰。
影响软件维护因素
影响维护工作量的因素主要有以下六种:
- 系统的规模
- 程序设计语言
- 系统年龄
- 数据库技术的应用
- 先进的软件开发技术
- 其它一些因素
软件维护组织
维护组织结构图
软件维护过程
对工作安排队列中的任务,由修改负责人依次从队列中取出任务,按照软件工程方法学规划、组织、实施工程。
非纠错性维护
:首先判断维护类型,对适应性维护,按照评估后的优先级放入队列。
改善性维护
:要考虑是否采取行动,如果接受申请,按照评估后得到的优先级放入队列,如果拒绝申请,通知请求者,并说明原因。
每种维护请求都要进行同样的一系列技术工作:
- 修改软件需求说明
- 修改软件设计
- 设计评审
- 必要时重新编码
- 单元测试、集成测试( 包括回归测试)、确认测试等
维护工作最后一步是复审:
- 依照当前状态,在设计、编码和测试的哪些方面还能用其他方法进行?
- 哪些维护资源可用但未用?
- 这次维护活动中主要(或次要)的障碍有哪些?
- 在维护请求中有预防性维护吗?
软件维护记录
- 维护申请报告
- 软件修改报告
软件可维护性
可维护性
:指理解、改正、调整和改进软件的难易程度。
- 可理解性
- 可移植性
- 可修改性
- 可测试性
软件可维护性-可理解性
可理解性
:指理解软件的结构、接口、功能和内部过程的难易程度。
提高软件可理解性的措施有:
- 采用模块化的程序结构;
- 书写详细正确的文档;
- 采用结构化程序设计;
- 书写源程序的内部文档;
- 使用良好的编程语言;
- 具有良好的程序设计风格等
软件可维护性-可测试性
可测试性
:指测试和诊断软件(主要指程序)中错误的难易程度。
提高软件可测试性的措施有:
- 采用良好的程序结构;
- 书写详细正确的文档;
- 使用测试工具和调试工具;
- 保存以前的测试过程和测试用例等
软件可维护性-可修改性(主要影响因素)
可修改性
:指修改软件(主要指程序)的难易程度。
在修改软件时经常会发生这样的情况:
- 修改了程序中某个错误的同时又产生新的错误(由程序的修改引起的);
- 或者在程序中增加了某个功能后,导致原先的某些功能不能正常执行。
软件可维护性-可移植性(主要影响因素)
可移植性
:指程序转移到一个新的计算环境的难易程度。
影响软件可移植性的因素有:
- 信息隐蔽原则;
- 模块独立;模块化;
- 高内聚低耦合;
- 良好的程序结构;
- 不用标准文本以外的语句等
提高可维护性的方法
通常采用的方法有:
- 确定质量管理目标和优先级
- 规范化程序设计风格
- 选择可维护性高的程序设计语言
- 改进程序文档
- 保证软件质量审查方法
再工程技术
逆向工程
:在软件生存周期中,将软件的某种形式描述转换成更抽象形式的活动。重构
:在同一抽象级别上转换系统的描述形式。设计恢复
:借助工具从已有程序中抽象出有关数据结构设计、总体结构设计和过程设计的信息。
再工程的概念
再工程
:指在逆向工程所获信息的基础上修改或重构已有的系统,产生系统的一个新版本。再工程的
主要目的
:为遗留系统转化为可演化系统提供一条现实可行的途径 。再工程是一个工程过程,它将逆向工程、重构和正向工程组合起来,将现存系统重新构造为新的形式。
通常再工程包含:业务过程再工程、软件再工程 。
业务过程再工程
定义业务目标、标示评估现有业务过程以及修订业务过程以更好满足业务目标。
软件再工程
包含库存目录分析、文档重构、逆向工程、程序和数据重构以及正向工程。这一部分通常由软件工程师完成 。
再工程的原因
- 维护一行源代码的代价可能是最初开发该行源代码代价的14-20倍。
- 重新设计软件体系结构时使用了现代设计概念,它对将来的维护会有很大的帮助。
- 用户具有较多使用该软件的经验。
- 利用逆向工程和再工程的工具,可以使一部分工作自动化。
业务过程再工程
- 每个系统都是由不同的子系统构成,而子系统还可以再细分为更细的子系统,从而整个业务呈现一种层次结构
- 让那些使用过程结果的人来执行流程;
- 将信息处理工作合并到生产原始信息的现实工作中;
- 将地理分散的资源视为它们是集中的;
- 连接并行的活动以代替集成它们的结果;
- 在工作完成的地方设置决策点,并将控制加入过程中;
- 在其源头一次性获取数据。
- 业务过程再工程是迭代的,没有开始和结束,只有不断的演化。
- 在业务过程被分析清楚后,可以对软件实施再工程,整个软件再工程过程模型如下
逆向工程
用户界面
:理解旧软件的用户界面。数据
:底层数据库和外部文件理解
:系统,程序,部件,模式和语句
软件工程之软件维护与再工程相关推荐
- 软件工程导论——软件维护
1.软件维护的定义 定义:所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程. 分类 改正性维护:软件中肯定隐藏着某些未被发现的错误,在使用过程中发现了隐藏的错误后,诊 ...
- 软件工程之七——软件维护
软件维护是指在软件运行/维护阶段对软件进行的修改.软件维护的代价是很大的,占整个软件生命周期的75%,而且还在逐年上升.软件维护的类型有三种:改正性维护.适应性维护.完善性维护. 可维护性是指理解.改 ...
- 【软件工程】软件维护
概述 在软件交付给用户使用后,软件也会出现各种问题,这时,就需要我们去维护,维护也是一个非常重要的阶段,看看维护是怎么定义的. 定义:在软件运行/维护阶段对软件产品进行的修改就是维护. 导图 维护工作 ...
- 软件工程的顶会和顶刊
软件工程的顶会和顶刊 软件工程领域的四大顶级会议: ASE (IEEE/ACM International Conference on Automated Software Engineering) ...
- 软件工程期末复习汇总(非常详细)
期末复习 文章目录 期末复习 第1章 概论 软件过程模型 瀑布模型 演化模型 增量模型 原型模型 螺旋模型 喷泉模型 基于构件的开发模型 形式方法模型 第2章 系统工程 可行性分析 经济可行性 技术可 ...
- 软件工程复试归纳总结
第1章 1.1什么是计算机软件? 计算机软件是指计算机系统中的程序及其文档.程序是计算机任务的处理对象和处理规则.文档是了解程序的阐述资料 1.2计算机软件的特点? 软件开发成本和进度难以准确估算 软 ...
- 软件工程导论期末考试-试卷2
软件工程基础 一. 选择题 1.软件需求分析阶段的工作,可以分为4个方面:需求获取,需求分析,编写需求规格说明书以及 A).用户 B).需求审评 C).总结 D).都不正确 (B) 2.在原型法中称 ...
- 软件工程基础知识点汇总
第四章 软件工程基础 4.1 软件工程基本概念 4.1.1 软件定义与软件特点 4.1.2 软件危机与软件工程 4.1.3 软件过程与生命周期 1.软件过程 2. 软件开发生命周期(softeware ...
- 【系统分析师之路】系统分析师必知必会(软件工程)
[系统分析师之路]系统分析师必知必会(软件工程) 系统分析师必知必会 软件工程篇 [系统分析师之路]系统分析师必知必会(软件工程) 一. 逆向工程/再工程 1)逆向工程 2)逆向工程概念 3)恢复信息 ...
- 复旦961-软件工程笔记
先推一下复旦软工考研大群 QQ群号:690285208 今天调剂复试了,帖子发出来给考961的大家参考下,也攒攒人品. 图 汇总 用例图-这人博客有很多关于怎么画图的 数据流图 数据流图(文件的输入输 ...
最新文章
- Python 高级特性 (1)- 闭包
- python里混淆矩阵 左下角为漏报,右上角为误报
- 为什么函数式语言会火
- Linux记录-salt命令
- leetcode题解——贪心
- postgressql数据库给模式添加search_path
- java litjson_仿造 Gson 的自制 json 解析器
- Webservice 实践
- linux apache支持ipv6,如何在Nginx和Apache中启用IPv6?
- oracle如何创建基表,创建本地基表的物化视图
- 阿里云认证是什么?报考要什么条件?
- 前端例程20211122:盐酸与氢氧化钠溶液中和pH计算工具
- 语音模块LD3320模块的二次开发,并与树莓派进行串口通信
- SQL联合查询 join
- BZOJ2054疯狂的馒头
- UWA发布 | 2017 Unity手游体检蓝皮书 — MMORPG篇
- PTA:宿舍谁最高?
- 阿里云服务器学生机的申请与使用
- 6岁男孩向他们敬礼2分钟,夏日炎炎,你们都辛苦了!
- 【FPGA,MPPT】基于FPGA的MPPT最大功率跟踪系统verilog开发
热门文章
- 工业智能网关BL110应用之六十二: 实现西门子S7-200SMART PLC 接入MQTT Client One云平台
- Vue 中播放帧动画(抽离方法)
- swift 第三方库SwiftyJSON
- 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第四章(3) 创建新工程
- RS-485通信协议简介
- 【网络文摘】程序人生:我们工作到底为了什么
- bigemap 软件功能对比
- 数据绑定之DataFormatString
- 教你sql查询分析器执行存储过程
- 台式计算机键盘驱动,提示检测到不兼容的键盘驱动程序怎么解决 教你几个步骤轻松修复...