1详细设计过程明确划分为两个阶段

第一个阶段是明确模块的需求,能够以详细的功能规格说明书的方式,明确模块的功能需求,重点考虑模块要处理哪些例外和异常情况,尽自己最大努力把情况想全

例如对本模块对外提供的接口要详细写清楚,各种输入参数情况下的行为是什么,以及返回什么值。对本模块要调用的外部接口,要写明白本模块要求的响应是什么,以及调用失败情况下的处理策略等。

此阶段同时要描述清楚本模块运行环境包括:与周围模块交互描述、对内存以及磁盘的要求等对外围环境的需求、模块部署方式(多机并发部署、还是单节点运行)等。注意此时只集中精力考虑需求,不要考虑如何实现。

第二阶段是设计中的实现阶段。此阶段要求必须包括有:关键问题与实现策略、主要静态类图设计和说明(主要类、主要方法说明)、线程结构说明(包含哪几类线程、每类线程个数、每类线程职责、每类线程会访问到的类和对象等,如果比较复杂则要说清楚为什么这些设计,设计目标是解决什么问题)、在线程结构基础上描述互斥策略以及线程间关系等、主要的处理活动图(个人推荐更多使用泳道图,能更直观看到对象之间的职责划分和交互过程)。如果类对象的状态比较多,则建议采用状态机图的方式描述清楚,并通过审查状态机变化来检查是否有情况没有处理。

2编码阶段建议采用三个步骤

n 先想清楚,并写出类和每个方法详细功能规格说明(可以先把类名和方法名写好,然后以注释的方式把类的职责、关键实现策略、以及每个方法的功能规格说明<重点是例外和异常情况的处理与返回值>)。

n 根据规格说明中列举情况,写出相应测试代码。

n 编写实现代码,并通过测试。

3编写模块功能规格说明书,重构代码

经过编码阶段之后,模块功能已经非常明确了,此时应该细致、清楚地编写模块功能规格说明书。原因如下:

1) 模块功能规格说明中描述的功能会比详细设计中更为细致和清楚。另外经过编码阶段,此时模块实现的功能可能与详细设计时考虑的模块功能在细节方面可能会有些变化。项目描述本模块的功能说明,可以方便自己和其他人日后进行系统维护工作。

2) 通过编写该功能规格说明可以弥补详细设计万一考虑不细情况下,一些例外和异常情况是否处没有处理或者处理不周到。

由于在详细设计阶段,设计出模块的类和对象构成以及运行机制还是有一些模糊,因此很可能存在某些例外、特别分布式情况下某些状态组合没有考虑到的情况发生。但是在编码阶段,由于一般只会关注当前类和当前的方法的实现,因此考虑问题一般比较局部。为此在完成整个模块编码后,所有细节都已经明确(特别是在写代码过程中会发现存在一些新的异常情况需要处理<详细设计时没考虑到>),此时必须再一次从整体来考虑模块运行起来后在处理逻辑是否有缺陷,这样能更早发现以前设计中缺陷,避免上线后才发现缺陷。此时重点考虑是否还有情况没有考虑到或者某些处理不到位。

很多BUG难以发现和定位原因是在不同类和对象之间的发生交互和联系后,组合排列后的情况非常多,从而想不到某些组合。这种BUG只有从整体考虑、考虑不同类和对象之间交互关联后才可能想到。

模块设计与实现经验总结(二 )相关推荐

  1. 模块设计与实现经验总结(三)

    3  模块详细设计指南与规范 模块详细设计要完成两个方面工作:一是明确模块的功能需求和非功能需求.二是设计如何完成和实现模块的功能需求,包括类结构.线程结构设计等.本节根据后台模块特点,描述了两部分工 ...

  2. 电商产品设计:后台营销功能模块设计-拼团活动(二)

    营销手段是电商中灵魂所在,今天要讲解的是"拼团"这一模式.我们熟知的拼多多就是在流量红利已经触底的情况下,以拼团这种模式杀出一条血路.现在我们一起来看一下拼团所涉及的逻辑关系及其作 ...

  3. 模块设计与实现经验总结(一)

    作者:  朱赛凡   杨雷 当开始进行模块开发时,系统负责人会给模块开发负责人描述模块功能与要求,但是此时模块功能与需求一般是比较粗线条和不完备的,例如很多细粒度异常情况处理需求一般系统负责人可能会考 ...

  4. 模块设计与实现经验总结(四)

    4  代码编程指南与过程规范 强烈建议采用测试驱动的模式来完成代码编程.测试驱动开发中编写测试代码目的是利用测试代码来描述和确认类的功能规格,然后编写实现代码来实现测试代码规定的功能规格并利用测试来验 ...

  5. PX4模块设计之二:uORB消息代理

    PX4模块设计之二:uORB消息代理 1. uORB模块接口 1.1. uORB服务接口 1.2. uORB消息注册/去注册接口 1.3. uORB消息发布接口 1.4. uORB消息订阅/去订阅接口 ...

  6. STOpen硬件设计4-周边模块设计二(CAN+RS485+UART+IO扩展等)

    本章继续设计剩余的模块,完成一个基本系统的设计工作,然后就可以开始软件工作了: 一个调试UART,一个输出UART UART的设计相对比较简单,把RX,TX直接连接到需要输出的插座就可以.在本项目设计 ...

  7. PX4模块设计之二十六:BatteryStatus模块

    PX4模块设计之二十六:BatteryStatus模块 1. BatteryStatus模块简介 2. 模块入口函数 2.1 主入口battery_status_main 2.2 自定义子命令cust ...

  8. BetaFlight模块设计之二十:CMS菜单模块分析

    BetaFlight模块设计之二十:CMS菜单模块分析 CMS菜单模块 CMS菜单按键控制 CMS菜单Elements CMS_Menu OSD_Etnry Element类型 可调Element类型 ...

  9. BetaFlight模块设计之二:SERIAL任务分析

    BetaFlight模块设计之二:SERIAL任务分析 SERIAL任务 1.总体情况 2.主要函数分析 2.1 taskHandleSerial任务 2.2 命令行处理函数cliProcess 2. ...

最新文章

  1. OpenCV 笔记(08)— 二维点、三维点、基于 Mat 的 std::vector 等常用数据结构的定义和输出
  2. 【spring】spring JDBC开发 、 将创建表生成sql语句的方法
  3. 区块链——配置和使用geth
  4. python网络爬虫抓取图片
  5. 自动生成web服务器日志解析规则
  6. 【转】[完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分
  7. ubuntn 16.04 安装fabric 1.0
  8. VGA接口一根针折了
  9. Facebook账户 “ 解封、防封、养号 ” 知识要点
  10. 从有序数组中找出某个数出现的次数
  11. Adobe Flash Player30.0.0.113离线安装包
  12. icem网格划分如何给内部面网格,ICEM CFD处理混合网格划分中低质量的问题
  13. PC 显示屏 D-SUB DVI 切换
  14. Tomcat6 无法登陆Tomcat Manager
  15. 蛋白组学搜库分析软件 MaxQuant使用教程
  16. iPhone所有手机型号屏幕尺寸及H5的CSS适配
  17. ipv4 pxe 联想start_PC开机出现Start pxe over ipv4解决办法 PC重启后显示start pxe over IPv4...
  18. 11行Python代码制作聊天机器人
  19. python 音频数据归一化
  20. 渲染管线----通俗易懂向面试官介绍

热门文章

  1. 一节更比六节强,特斯拉或将推出可续航100万英里的电池
  2. sgu220sgu221
  3. Angular5 Angular6类型“ObservableResponse”上不存在属性“map”
  4. 【unity基础_Day14】Unity2D、灯光粒子系统
  5. 微服务架构的分布式事务解决方案(3)--常规MQ队列消息的处理流流程和特点(基于可靠消息的最终一致性)
  6. 在线编程练习实践网站
  7. HTC G7 相机故障,自己动手维修详细步骤
  8. matlab 奇异值求逆,你好,请问matlab对奇异矩阵求逆你有好的方法吗?
  9. GD32F470系列-CAN配置(500K,90%采样点)
  10. Top10Servlet