当前课程知识点:软件工程 > 第14章 软件交付与维护 > 14.2 软件演化与维护 > 讲课视频
我们在这门课的第一讲中
提到过可变性
是软件的本质特性
软件在投入使用之后
由于出现新的需求
商业环境的变化 修复缺陷
软硬件升级
以及进一步提升性能等原因
都会导致软件的不断修改
这种变化
说明软件具有使用价值
但是修改又会带来副作用
所以关键的问题
是需要采取适当的方法
有效地实施和管理这种变化
IBM公司的Lehman博士
通过对IBM OS360系统的研究
提出了关于演化的一系列法则
系统维护是不可避免的
当系统环境发生改变时
就会产生新的需求
系统就要修改
修改后的系统重新投入使用
又会促进环境的变化
于是进入新一轮的修改循环
随着系统的改变
系统的结构有可能发生退化
大型系统自身的动态特性
是在开发早期建立的
它决定了系统维护过程中的
一个总趋势
和系统变更可能次数的一个极限
绝大多数大型项目
是在一种饱和状态下进行运作
也就是说
资源和人员的变化
对系统长期演化的影响
是不易察觉的
向系统添加新功能
难免会引入新的缺陷
一个大的功能增量
意味着后面
要紧跟着一个版本
来修补系统新引入的缺陷
这个修补版本中
新的功能会比较少
所以一个版本中
如果有大的功能增量
在预算时应该考虑
还需要缺陷的修复
软件演化包括软件维护
和软件再工程两种策略
软件维护是为了修改软件的缺陷
或者增加新的功能
而对软件进行修改
这种修改通常只发生在局部
一般不会改变整个结构
软件再工程
是为了避免软件本身的退化
而对软件的一部分
进行重新地设计和构造
以便提高软件的可维护性
和可靠性
软件维护
包括改正性维护 适应性维护
和完善性维护三种类型
其中改正性维护
是修改使用之后发现的缺陷
适应性维护是修改软件
使它适应不同的操作环境
完善性维护
是增加或者修改系统功能
使它适应业务的变化
其中完善性维护的比例最高
大概达到所有维护的2/3左右
软件维护的成本是非常高的
通常是开发成本的1-4倍以上
软件维护工作
受到很多因素的影响
大部分情况下
负责维护的人员
并不是原来的开发人员
维护人员
需要对系统进行理解和掌握
才能做好维护
开发人员
往往不喜欢做软件的维护
感觉没有成就感
维护人员的技术水平
也会对维护工作产生很大影响
系统使用越长久也就越难以维护
比如说 很多银行系统
甚至是20世纪60年代开发的
现在已经很少有人熟悉
当时的编程语言
一般的软件维护过程
需要分析变更产生的影响
再决定是立即修改
在后续版本修改或者暂时不修改
变更实现过程
也与正常开发过程类似
有时候
会有一些需要紧急处理的情况
比如说
出现了严重缺陷需要马上修复
这时就会直接修改源代码
进行解决
当软件的修改
造成系统结构受到影响
或者某些部分修改频繁
这个时候
可以考虑用再工程的方法
进行维护
再工程
就是通过再构造
和再文档化的方法
使系统更易于维护
它不会改变系统的功能
再工程需要对现有系统
进行理解和转换
具体的方法
是首先使用逆向工程
把系统重新文档化
然后进一步修改程序结构
同样也需要对数据进行再工程
最后得到一个改善了结构的
再工程系统
逆向工程和开发过程相反
它是从源代码
得到软件系统的规格说明
和设计信息
现在也有很多逆向工程的工具
但是它们在实际应用中
存在一些障碍
由于软件缺少形式化的表示方法
加上代码编写不规范
或者结构比较混乱
在用工具进行逆向工程的时候
有可能得到的建模信息
没有太大价值
所以逆向工程
仍然是一个在探索的
软件工程领域
-1.1 软件无处不在
--讲课视频
-1.2 软件的本质特性
--讲授视频
-1.3 软件工程的产生与发展
--讲授视频
-1.4 软件工程的基本概念
--讲授视频
-1.5 软件质量实现
--讲授视频
-1.6 业界人士谈软件工程
-测验题--作业
-讨论题
--讨论题
-作业题
--第一张 作业题
-2.1 编程过程与规范
--讲课视频
-2.2 良好的编程实践
--讲课视频
-2.3 Python集成开发环境
--讲课视频
-2.4 代码静态检查
--讲课视频
-2.5 代码性能分析
--讲课视频
-2.6 结对编程实践
--讲课视频
-2.7 刘贺谈软件工程
--讲课视频
--讨论
-测验题--作业
-作业题
--第二章 作业题
-3.1 单元测试概述
--讲课视频
-3.2 黑盒测试方法
--黑盒测试方法
-3.3 白盒测试方法
--基本概念
--代码覆盖标准
--基本路径测试
-3.4 单元测试工具
--单元测试工具
--html
-测验题--作业
-作业题
--第三章 作业题
--作业题附件
-4.1 软件过程
--讲课视频
-4.2 软件过程模型
--讲课视频
-4.3 敏捷开发过程
--讲课视频
-4.4 微软公司开发过程
--邹欣经理自我介绍
--微软开发过程之一
--微软开发过程之二
-测验题--作业
-5.1 团队组织与管理
--讲课视频
-5.2 项目沟通管理
--讲课视频
-5.3 软件项目计划
--讲课视频
-5.4 软件项目估算
--讲课视频
-测验题--作业
-讨论题
--讨论
-6.1 敏捷开发之Scrum
-- 敏捷开发之Scrum
--html
-6.2 用户故事与估算
--讲课视频
-6.3 团队协作工具Tower
-6.4 配置管理
--讲课视频
-6.5 配置管理工具Git
--讲课视频
-测验题--作业
-作业题--作业
-7.1 需求工程师
--讲课视频
-7.2 需求定义
--讲课视频
-7.3 需求的类型
--讲课视频
--讲课视频(2)
-7.4 需求工程过程
--讲课视频
-7.5 需求的主要来源
--讲课视频
-7.6 需求获取技术
--讲课视频
--讲课视频二
--讲课视频三
-7.7 撰写需求文档
--讲课视频
-测验题--作业
-讨论题
--讨论
-8.1 用例建模概念
--讲课视频
-8.2 用例建模过程
--讲课视频
-8.3 用例建模精讲
--讲课视频
-8.4 建模工具介绍
--讲课视频
-8.5 微信抢票应用案例
--讲课视频
-测验题--作业
-讨论题
--讨论
-9.1 面向对象分析
--讲课视频
-9.2 CRC卡片分拣法
--讲课视频-1
--讲课视频-2
-9.3 面向对象设计
--讲课视频-1
--讲课视频-2
-9.4 类图建模
--讲课视频-1
--讲课视频-2
-第9章 面向对象分析与设计--测验题
-讨论题
--讨论
-10.1 顺序图概念
--讲课视频
-10.2 顺序图建模
--讲课视频
-10.3 顺序图风格
--讲义视频
-10.4 状态建模
--讲课视频
-10.5 状态图
--讲课视频
-10.6 状态图精讲
--讲义视频
-测验题--作业
-讨论题
--讨论
-11.1 软件体系结构概念
--讲授视频
-11.2 软件设计原则
--讲授视频
-11.3 软件体系结构风格(一)
--讲授视频
-11.4 软件体系结构风格(二)
--讲授视频
-11.5 软件体系结构风格(三)
--讲授视频
-11.6 软件设计过程
--讲授视频
-11.7 Web系统架构设计
--讲授视频
-11.8 数据库选择策略
--讲授视频
-测验题--作业
-作业题
--html
--html
--html
-作业题--作业
-12.1 交互设计概述
--讲授视频
-12.2 交互设计目标
--讲授视频
-12.3 GUI设计原则
--讲课视频
-12.4 KLM效率模型
--Video
-12.5 Fitts定律
--讲授视频
-12.6 交互设计过程
--讲授视频
-测验题--作业
-13.1 软件测试概念
--讲课视频
-13.2 软件测试类型
--讲课视频
-13.3 软件功能测试
--讲课视频
-13.4 软件性能测试
--讲课视频
-测验题--作业
-14.1 软件部署与交付
--讲课视频
-14.2 软件演化与维护
--讲课视频
-测验题--作业
-第一部分:基础知识
-第二部分:编程与测试(选做)