软件工程 系列为本学期(2020春季)软件工程以及软件工程实践课程笔记整理~
问题1:针对一个软件系统,在不给代码和文档的情况下如何进行软件维护 ?
问题2:结合自己的实际经验,谈谈如何提升系统的可维护性?
软件交付给用户之后,生命周期进入系统维护阶段。
系统维护:
(1)改正软件运行过程中发生的故障和错误,软硬件维护人员对系统进行必要的修改与完善
(2)对原系统做局部系统更新与改变-->适应用户环境的变化、满足用户提出的新的需求
系统维护在软件生命周期过程中经历的时间最长,任务最为繁重
ps:问题1是老师上课的时候提出的,问题2是在整理完这章节内容的时候自己想到的
目录
1.软件维护的原因
2.软件维护的定义
3.软件维护的特点
4.软件维护的费用
5.软件维护的种类
6.软件维护的方法和技术
7.软件维护过程
8.软件维护管理
9.软件可维护性及其度量
10.提高软件可维护性的方法
(1)原有的功能和性能不再适应用户的要求;
(2)工作环境发生了变化,软件需要进行相应的变更,比如增加了新的外部设备;
(3)软件运行过程中发生了错误,需要进行修改;
为解决软件中存在的问题而进行的维护活动:问题分析和确认、代码的识别与修改、软件修改后的一系列活动(软件测试、版本配置更新等)
IEEE:软件维护时软件发行之后,修改软件系统和其组件以修正错误、提升性能和其他属性以及适应产品环境改变的过程
这种将软件维护限定为交付之后才发生的行为观点是缺乏远见的-->会使得软件维护更加困难
软件维护:对软件系统提供划算的支持和所有行为的统称,包括软件交付前和软件交付后
交付前-->交付后的运行计划、支持、后勤保障管理
交付后-->软件修改、培训和运行
如果软件产品完成后没有系统分析、设计、实现以及测试等详细的技术文档,而只有源代码-->维护活动非常困难,对代码的解析和阅读可能会产生错误
如果有完整的软件配置存在(每一个过程都有详细的文档可供查询),维护工作将变得非常有序
(1)维护代价高,时间漫长:使用期间用户的环境发生变化或者用户产生新的需求
(2)软件维护小心翼翼,严防错误:要求从业人员有高超的软件技术和足够的细心
软件维护过程中可能会引入不需要的错误活动-->软件维护的副作用,包括修改代码、修改数据和修改文档的副作用
(3)软件维护苦难重重,理解为上:软件维护人员不一定是早期的开发人员,要完全理解设计与开发人员的思想非常困难
(1)影响维护费用的因素:系统规模、程序设计语言、系统使用年限、设计过程采用的技术、软件开发过程的管理技术
(2)Belady的统计公式
M:总的维护费用
P:生产性活动工作量
K:经验常数
C:非结构化维护引起的程序复杂度
D:对软件的熟悉程度
(1)完善性维护
在用户对软件提出新的功能和性能要求时
扩充软件功能、增强软件性能、改进加工效率来提高软件的可维护性
(2)改正性维护
定位、识别和纠正错误,完善软件性能上的缺陷以及一系列的回归测试
(3)适应性维护
用户的软件外部环境(软硬件配置)或者数据环境(数据库、数据格式)发生变化,使软件适应这些需求的变化,eg:升级操作系统
(4)预防性维护
使用软件重用等先进的软件工程方法,对需要维护的软件或者其中一部分进行重新设计、编制和测试-->增加预防性新功能
在具备完备的技术文档的前提下:
(1)快速修复模型
基本过程:修改编码,然后对相应的文档(被修改影响的)进行必要的修改
存在的问题:受时间限制,软件维护缺乏合适的计划、设计、影响分析和回归测试;软件系统的可维护性会下降
(2)迭代维护方法
过程:系统维护从分析现有系统的需求、设计、编码和测试文档开始,进而修改受影响的高级说明文档,再将这种修改应用到所有的系统文档;进化过程的每一步都是根据对现有系统的分析而对系统进行再设计的
特点:文档可以随着代码的改变而进行更新
在没有相应的各种软件文档的情况下:
(3)软件逆向工程
针对缺乏良好的设计结构和编码风格的软件系统
(4)软件再工程
(1)目前有一些可以参考的过程模型,不同维护模型对维护阶段的划分不同,但有3个核心活动集:对现有系统的理解、对拟定变更产生影响的评估、回归测试
(2)IEEE维护过程
问题的标识与分类:提出修改要求时,分析问题的原因和性质,给问题分配维护类别、优先级和唯一标识
问题的需求分析:分析程序,了解问题解决前后程序本身的变化和影响;
分为可行性分析(选择解决方法,评估影响和开销)和详细分析(定义修改的要求、执行测试策略和实施计划)两个层面;
问题维护设计:定义最终的修改形式,包括标识被影响的数据、确定受影响的软件模块、隔离不受影响的软件单元、分类软件模块的重要性等
问题维护实施:代码修改、单元测试、修改后与原来程序的整合、集成测试和回归测试、风险分析和审查
回归和系统测试:整个系统在此阶段都要进行测试,并且准备验收测试
接受测试:基于客户或者最终用户的规格书的最终测试
软件发布:提交完整的维护报告、以及维护后的各种文档,发布可安装和运行的修改后的系统版本
(3)ISO-12207维护过程模型
过程实施:开始于软件生命周期的初级阶段,维护计划与软件开发计划并行进行
为软件维护制定开发计划和程序,创建接收、记录和跟踪维护请求的流程,利用配置管理过程建立组织接口
问题以及修改分析:分析维护的要求,将问题进行归类-->确定占用的开发规模等
实施修改:申明修改的项目以及使用的开发过程
审查\验收维护:评价修改后系统的完整性
系统迁移:软件系统从一个环境迁移到另一个
软件退化:软件退出运行
(1)管理关注的是质量和生产效率——即收益与效率,管理包括五个分离的过程:制定计划、组织管理、人员编制、领导实施和管理措施
(2)维护计划的管理
(3)维护组织管理
维护管理员:评审维护申请、安排维护工作以及软件测试
维护人员:在维护管理员和系统管理员的指导下对软件进行修改
配置管理员:审查和修改软件配置-->得到及时更新并匹配新的软件系统
(4)维护流程管理
软件维护申请:一般由用户提出,填写详细的软件维护申请书:申请维护内容、优先级和希望实现的结果
维护工作流程:申请、分析维护-->实施维护过程(对整个过程有详细的记录)-->测试(多为集成测试)与评审
维护活动评价:考核软件代码的质量、度量维护活动过程
(1)软件可维护性:能够被理解、纠正软件系统中出现的错误和缺陷、为满足新的系统需求进行修改、扩充或者压缩的容易程度
可理解性:非程序设计和编码人员理解软件结构、功能、接口和内部处理过程的难易程度
可测试性
可修改性:容易修改的程度与设计原理和启发规则有关,遵循良好的设计原则(高内聚、低耦合)会使修改变得容易
可移植性:把程序从一种计算环境移植到另一种计算环境的难易程度;在早期进行需求分析和设计时就应该考虑;外部接口是最容易发生可移植性问题的地方
可重用性:软件环境和功能发生变化后,不做修改或者稍加改动就可以用于新环境
软件重用分为代码重用、设计重用、规范重用和概念重用
提高可重用性的方法:采用模块化的程序设计,建立标准统一的数据接口
效率:程序执行预定的功能而又不浪费机器资源的程度
可使用性:程序方便、使用以及易于使用的程度
(2)度量一个软件可维护性的常用方法:质量检查表、质量检测和质量标准
(3)度量软件可维护性的质量特性
可分析性、可修改性、稳定性(软件维护后发生故障的频率)、可测试性、依从性(度量软件中符合与维护性相关的标准的能力)
(1)建立明确的软件质量目标:不可能同时满足软件可维护性的7种质量特性,在质量特性上有所侧重
(2)使用先进的软件开发工具和技术
目前常用的软件开发方法:模块化开发方法、结构化程序设计方法、面向对象开发方法和面向构件的开发方法
(3)健全明晰的软件质量保证手段——质量审查
(4)选择容易维护的程序设计语言:高级语言的维护相对容易
(5)提供完整一致的技术文档
问题1:主要从软件逆向工程和再工程的角度去回答
问题2:可以从最后一部分提高软件可维护性的方法的角度,还可以结合第8部分,规范化管理软件维护过程
周日以来感觉自己状态不太好,每天超级困,一开始不知道怎么了,昨天看到桌子上的藿香正气胶囊,傻乎乎吃了两个,中午睡醒来之后好了很多,哈哈哈哈
今天开始准备返校需要的东西了,妈妈有点忙,他们很辛苦,就自己准备好所需要的东西吧
明天上午的课貌似要有小测验,早晨简单复习一下吧
今天还是大学室友的生日,想念和大家在一起的时候,每次准备小礼物比自己生日还要开心
快到期末啦,预计要忙碌起来啦,lhhhhh,加油喽
(附上可爱的一二照片吧,今天发现手机壳被自己摔了一道裂纹,超级心疼。。。)