模块设计与实现经验总结(二 )
2016-07-22 13:52
363 查看
[b]1详细设计过程明确划分为两个阶段[/b]
第一个阶段是明确模块的需求,能够以[b]详细的功能规格说明书的方式[/b],明确模块的功能需求,重点考虑模块要处理[b]哪些例外和异常情况[/b],尽自己最大努力把[b]情况想全[/b]。例如对本模块对外提供的接口要详细写清楚,各种输入参数情况下的行为是什么,以及返回什么值。对本模块要调用的外部接口,要写明白本模块要求的响应是什么,以及调用失败情况下的处理策略等。
此阶段同时要描述清楚本模块[b]运行环境[/b]包括:与周围模块交互描述、对内存以及磁盘的要求等对外围环境的需求、模块部署方式(多机并发部署、还是单节点运行)等。注意此时只集中精力考虑需求,不要考虑如何实现。
第二阶段是设计中的实现阶段。此阶段要求必须包括有:关键问题与实现策略、主要静态类图设计和说明(主要类、主要方法说明)、线程结构说明(包含哪几类线程、每类线程个数、每类线程职责、每类线程会访问到的类和对象等,如果比较复杂则要说清楚为什么这些设计,设计目标是解决什么问题)、在线程结构基础上描述互斥策略以及线程间关系等、主要的处理活动图(个人推荐更多使用泳道图,能更直观看到对象之间的职责划分和交互过程)。如果类对象的状态比较多,则建议采用状态机图的方式描述清楚,并通过审查状态机变化来检查是否有情况没有处理。
[b]2编码阶段建议采用三个步骤[/b]
n 先想清楚,并写出类和每个方法详细功能规格说明(可以先把类名和方法名写好,然后以注释的方式把类的职责、关键实现策略、以及每个方法的功能规格说明<[b]重点是例外和异常情况的处理与返回值[/b]>)。n 根据规格说明中列举情况,写出相应测试代码。
n 编写实现代码,并通过测试。
[b]3编写模块功能规格说明书,重构代码[/b]
经过编码阶段之后,模块功能已经非常明确了,此时应该细致、清楚地编写模块功能规格说明书。原因如下:1) 模块功能规格说明中描述的功能会比详细设计中更为细致和清楚。另外经过编码阶段,此时模块实现的功能可能与详细设计时考虑的模块功能在细节方面可能会有些变化。项目描述本模块的功能说明,可以方便自己和其他人日后进行系统维护工作。
2) 通过编写该功能规格说明可以弥补详细设计万一考虑不细情况下,一些例外和异常情况是否处没有处理或者处理不周到。
由于在详细设计阶段,设计出模块的类和对象构成以及运行机制还是有一些模糊,因此很可能存在某些例外、特别分布式情况下某些状态组合没有考虑到的情况发生。但是在编码阶段,由于一般只会关注当前类和当前的方法的实现,因此考虑问题一般比较局部。为此在完成整个模块编码后,所有细节都已经明确(特别是在写代码过程中会发现存在一些新的异常情况需要处理<详细设计时没考虑到>),此时必须再一次从整体来考虑模块运行起来后在处理逻辑是否有缺陷,这样能更早发现以前设计中缺陷,避免上线后才发现缺陷。此时重点考虑是否还有情况没有考虑到或者某些处理不到位。
[b]很多BUG难以发现和定位原因是在不同类和对象之间的发生交互和联系后,组合排列后的情况非常多,从而想不到某些组合。这种BUG只有从整体考虑、考虑不同类和对象之间交互关联后才可能想到。[/b]
相关文章推荐
- maven使用经验集
- 一步一步跟我学易语言之第二个易程序菜单设计
- 样式表CSS布局经验
- 路由器之基本维护经验
- ASP编码必备的8条原则
- 基于逻辑运算的简单权限系统(原理,设计,实现) VBS 版
- XML指南——XML编码
- C#中设计、使用Fluent API
- C#中字符串编码处理
- ExtJS中文乱码之GBK格式编码解决方案及代码
- 程序员趣味读物 谈谈Unicode编码
- 文本文件编码方式区别
- 学习C和C++的9点经验总结
- C语言安全编码之数值中的sizeof操作符
- C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)
- 基于逻辑运算的简单权限系统(原理,设计,实现) VBS 版
- VC中BASE64编码和解码使用详解
- 计算机中的字符串编码、乱码、BOM等问题详解
- 非常不错的MySQL优化的8条经验
- Base64编码解码原理及C#编程实例