今天说说可维护性,一般来说80%的代码都不是本人进行维护的。
影响可维护性的因素:
1)是否是同一个开发人员。
2)是否有一个很好的code base。
3)是否有完善的文档,文档是否同步。
4)代码是否有注释。
5)维护人员对业务领域是否了解。
软件维护主要工作:
1)修正缺陷。
如果不了解业务,首先要了解业务。分析缺陷产生的原因,找到应该修改的模块。了解类直接的关系。修正缺陷,测试。
2)满足新的需求
如果不了解业务,首先应该了解业务。然后分析新需求和系统的功能对比。设计如何增加新功能,分析如何接口老的功能。进行重构,编写测试。
3)重构,为了使以后代码更容易维护。
了解新老业务需求,绘制域模型,绘制整体流程图,找出系统涉及的角色,了解系统和其它外部系统的接口。
为了防止人的因素影响可维护性,要保证每一块业务始终有一个人熟悉。
关键部分,比如需求,架构设计,数据库设计,域模型,流程图最好文档化下来,并保持更新。
每次修改,应该记录修改人,修改时间,修改内容。应该文档化每次修改活动的细节。
其实,维护软件最头痛的是,随着时间的流逝,以前的关于系统的理解和记忆已经逐渐消失了。每次修改bug或增加新功能,要通过看文档,看代码来回忆当时开发系统时的场景。最终目的是使维护人员的头脑能够恢复到开发时的上下文。
可惜人脑不能录像,否则把当时人脑思考的过程记录下来。那么,是否可以记录一些当时的场景呢?
比如对关键讨论录像保存,用数码相机拍下白板上的讨论结果,以模块为主题组织这些资料,定期的更新它。除了我们写就的文档,这些片段其实都可以保存下来。
像文物和考古学家一样,我们在维护一个老系统,也是在考古,任何以前的蛛丝马迹都可能启发我们,使我们找回当时我们的上下文。
还有一个就是单元测试,非常重要,它像考古学家使用的探针。当时光荏苒,日月如梭,转眼到了几年后。只要你不色盲,你仍然可以凭借红条和绿条来唤起你的回忆。
养成随时记录的好习惯,可以参考我的这篇文章程序员的结构化思维方法——一个思维脑图模板
,
使用这样的模板,你可以随时记录你的思考过程,相当于把它序列化下来,我觉得非常有用。
对于一些常规的任务,比如部署注意事项(可能会修改配置文件,拷贝一些类),把这些整理成checklist,到时候不用动脑子,直接照着做就行了。
可扩展性是可维护性的技术基础。清晰的代码和文档也非常重要,换句话说,可理解性是可维护性的前提。如果你都不理解它,你怎么维护它呢。
下一篇文章,我说说可理解性,这个我认为是软件开发中的最重要的属性。
修改日志:
2009-02-12 : 增加单元测试,养成好的记录习惯以及checklist使用建议三点。
分享到:
相关推荐
完整英文版 IEC 60706-2:2006 Maintainability of equipment - Part 2:Maintainability requirements and studies during the design and development phase(设备的可维护性 - 第 2 部分:设计和开发阶段的可维护...
完整英文版 IEC 60706-3:2006 Maintainability of equipment - Part 3:Verification and collection, analysis and presentation of data (设备的可维护性-第3部分:数据的验证和收集、分析和呈现)。IEC 60706 ...
完整英文电子版 IEC 60300-3-10:2001 Dependability management - Part 3-10:Application guide - Maintainability (可靠性管理 - Part 3-10:应用指南 - 可维护性)。应用指南可用于实施涵盖产品启动、开发和...
完整英文版 IEC 60706-5:2007 Maintainability of equipment - Part 5:Testability and diagnostic testing (设备的可维护性 - 第 5 部分:可测试性和诊断测试)。本指南旨在为早期考虑设计和开发中的可测试性...
完整英文版 IEC 61703:2016 Mathematical expressions for reliability, availability, maintainability and maintenance support terms(可靠性、可用性、可维护性和维护支持术语的数学表达式)。IEC 61703:2016 ...
计算文件明智的平均可维护性和最小可维护性。正在安装 npm install ts-complex用法可维护性 const tscomplex = require('ts-complex');const path = './test.ts'; // Finding maintainability of this fileconst ...
Java显示原始码可维护性指标计算系统 该可维护性指标计算系统是用于提供有关可维护性指标值的信息的系统。 在该系统中,开发人员可以输入Java项目目录,该目录或子目录中包含Java源代码文件。 然后,系统将通过首先...
软件质量模型(中)华中科技大学可维护性 Maintainability灵活性可测试性 Testability产品运行产品移植产品修改可移植性可重用性可互操作性
Definition of Terms for Reliability and Maintainability
Maintainability Prediction
1. 可维护性(maintainability) 2. 可读性(readability) 3. 可扩展性(extensibility) 4. 灵活性(flexi
Handbook of Reliability, Availability, Maintainability and Safety in Engineering Design Rudolph Frederick Stapelberg Handbook of Reliability, Availability, Maintainability and Safety in Engineering ...
通常是系统的“ilities”功能,比如可扩展性(scalability)、互操作性(interoperability)、可维护性(maintainability)、移植性(portability)、性能和安全性都包括在此类。敏捷团队经常纠结于定义 非功能需求一般和...
通常地,在工程上常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性高可用性的实现的另一大关键就是的冗余策略,简言之就是对主机,网络设备,备份设备的多台备份(当然不只是...
java 源码剖析
This standard provides procedures and test methods for verification, demonstration, and evaluation of qualitative and quantitative maintainability requirements. It also provides for qualitative ...
可用性(Availability):任何给定的时刻都能及时工作 ...可维护性(Maintainability):发生故障的系统被恢复的难易程度 机密性:系统将信息只向授权用户公开 完整性:对系统资源的更改只能以授权方式进行
IEC Standard - Maintainability - 包含全部5份最新英文版文件.7z
该标准定义了系统的RAMS(reliability,availability,maintainability和safety),即可靠性,可用性,可维护性和安全性,并且规定了安全生命周期内各个阶段对RAMS的管理和要求.但是在该标准中,未定义RAMS的具体的定量目标....
不仅要考虑软件的功能性需求,还要考虑非功能性需求,比如软件的性能(Performance)、可扩展性(Scalability),系统的稳定性(Reliability)、部署(Deployment)和更新(Upgrade),可维护性(Maintainability),版本的管理...