如何写好一份软件开发设计文档

转载:

设计文档 - 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保正确完成工作最有用的工具,其目的是迫使你对设计展开缜密的思考,并收集他人的反馈,进而完善你的想法,同时在软件交付和交接的过程中,能让其他人更通俗易懂的了解之前的设计目的和思路


目录:

  • 一、什么是软件开发设计文档

  • 二、为什么要写软件开发设计文档

  • 三、写软件开发设计文档需要注意些什么

  • 四、怎么写好一份开发设计文档


一、什么是软件开发设计文档

  • 设计文档 - 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保正确完成工作最有用的工具

  • 一般来说,设计文档的生命周期有如下几个步骤:

  1. 创建并快速迭代 - 通过不断的思考论证和缜密思考,完善出第一版稳定的文档

  2. 评审(可能有多轮) - 头脑风暴,直面他人的疑问,收集他人的反馈和意见,完善文档

  3. 实现和迭代 - 在发现编码实现和设计有冲突或设计有缺陷时,及时调整更新文档

  4. 维护和学习 - 随着业务功能不断的变化,应该及时更新文档,以免误导后来接手或阅读的人

  • 不同的领域的设计文档要求不一样,这里主要介绍软件开发过程的设计文档(可能看起来比较偏后端),其组成部分可能会包含如下几部分:

  1. 概要 (时间、地点、人物、背景、方案、备选方案等任务的上下文)

  2. 表结构及其之间的关系(E-R 图:实体-联系图 Entity Relationship Diagram)

  3. 业务流程图、时序图(按照人操作的维度)

  4. 程序流程图、时序图(按照代码执行的维度)

  5. 接口约定(对外公开的方法、api 接口等)

  6. 其他(伪代码、类图、思维导图、泳道流程图,对安全、性能、边界情况、性价比的思考)

  7. 附注(附加的解释和说明、引用资料)

  8. 评审情况


二、为什么要写软件开发设计文档?

  • 磨刀不误砍柴工,设计文档是确保正确完成工作最有用的工具,且不应该让写设计文档成为大家工作的负担

  • 其目的是迫使你对设计展开缜密的思考,并收集他人的反馈,进而完善你的想法

  • 同时在软件交付和交接的过程中,能让其他人更通俗易懂的了解之前的设计目的和思路

  • 它是一种知识的沉淀和传承

  • 我们经常听到这样的话:”设计文档没有用,是用来糊弄客户和管理层的文档“,”用来写设计文档的时间,我的任务早就做完了“,”项目紧张,没有时间做设计“,这种说法是不正确的,对小的功能来说没毛病,但是大的复杂的任务时就很容易出现各种考虑不周、大量 BUG、甚至返工的情况,每个团队都应该根据自己的任务周期合理约定文档撰写的内容,什么情况该写什么


三、写软件开发设计文档需要注意些什么

  • 我参与过很多次设计评审,经常会发现如下问题:

  1. 文档工具不统一,不同的小组、部门存在差异,有些甚至不知道是什么格式的文件,无法打开

  2. 过度拷贝需求文档,缺少软件设计的内容,不像软件设计文档

  3. 排版混乱,设计文档未按照标准模板顺序,缺少清晰的目录结构

  4. 设计文档太多图片,有些质量很差,且缺失原始文件,比如 EA 工具做的缺乏 eapx 文件,会导致文档迭代需要全部重新绘图,久而久之更加不愿意去维护更新文档了

  5. 没有统一的文档版本管理工具,缺少追溯和统计管理的能力

  6. 数据库表结构设计样式杂乱不统一,字段无中文描述(毕竟母语不是英语),且基本没有考虑主键和索引设计

  7. 程序流程基本比较简单,缺少主线,无法描述核心算法及关键点 (例如,取款机如何取钱?有些仅仅描述了【插卡 -> 取钱 -> 取卡】是不够的,还应包含各种校验、事务、并发、缓存等处理)

  8. 类图缺乏体现类之间的关系,有的直接用英文函数名,缺乏描述

  9. 时序图大多只描述与数据库的交互,缺少业务流程和程序执行的时序图

  10. 不理解设计文档的意义,很简单的任务需求就不需要写设计文档了

  11. 缺少对安全、性能、边界情况、性价比的思考,考虑还不够全面,评审把关不严


  • 总结了几点需要注意的问题给大家参考参考:

  1. 文档撰写人:架构设计师或功能的开发者

  2. 明确文档面向的读者:是部门内部的开发者?伙伴实施人员?外部的开发者?

  3. 设计先行:设计文档在撰写应该是在编码之前,可以极大地避免后期出现返工的情况,也能提升开发效率

  4. 一图胜千言:尽可能地使用图文的方式表达清楚设计思路

  5. 统一的绘图工具:需要支持导入及导出,方便后续更新

  6. 统一的文档模板:为了防止出现千奇百怪的文档、排版不一致、难以阅读等的问题

  7. 确定承载的形式:可以从安全性(文档加密)、便于查看、版本管理等方面考虑,推荐内部的知识文档管理系统、类似 wiki \ git \ svn 的版本管理工具、内网微盘

  8. 好代码优于设计文档:有时候写出优雅的代码和注释更胜于写一篇设计文档

  9. 版本迭代:在软件功能迭代的过程中,可能经过几次迭代后功能和设计有了很大的变化,设计文档应该及时更新,以免给人传递错误的信息


四、怎么写好一份开发设计文档

  • 用什么工具

1、推荐开源的绘图工具:https://www.draw.io/?lang=zh

官网截的图

2、word (设计文档模板,也可以使用 wiki \ confluence 这类团队工作空间管理工具)

3、xMind (画思维导图)

4、visio (画图工具,目前没发现有 mac 版的)

  • 如何写、如何画?

1、下一篇我将介绍如何用 draw.io 画图(时序图、流程图、类图、ER 图、架构图)

2、列举了一些参考资料:

▶ 流程图:http://www.woshipm.com/zhichang/2329530.html
▶ 时序图:http://www.woshipm.com/ucd/607593.html
▶ 类图:https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html
▶ 程序流程图 https://cn.vuejs.org/v2/guide/instance.html#生命周期图示

3、放一波预览图(样例,仅供参考):




业务设计图




http://www.taodudu.cc/news/show-6631205.html

相关文章:

  • Baxter学习笔记4-Baxter仿真篇
  • Baxter机器人相关配置
  • baxter实战2--安装baxter simulator
  • Baxter的应用(转载)---个人学习
  • MATLAB与Baxter机器人通信---网络环境配置篇
  • Baxter机器人学习笔记(官网篇)
  • Python学习笔记9-爬花瓣网指定图片,从此找图不用愁
  • Adobe Acrobat Pro将不清晰的pdf转换为文本清晰的pdf
  • Acrobat Pro DC 教程:如何在 PDF 中插入其他 PDF 文件?
  • fpdf fpdi 操作pdf文件 写入中文汉字
  • 【ChatPDF】让 ChatGPT 帮你读 PDF 文档
  • pdfGPT|无需阅读,让 PDF 和自己对话
  • 有关PDF
  • 【Life系列】挑战成功37公里的徒步毅行!
  • 驴之初体验-记休龙古道徒步之旅
  • 面向对象:杭州的下雪天,想带你去湖心亭看雪
  • 【IT背包客】CIO们的徽杭古道徒步记
  • 杭州成为女性房东占比最高的中国城市,紧随其后的是上海、成都
  • 杭州温暖
  • JSP企业电子投票系统(源代码+论文+开题报告+外文翻译+文献综述)
  • Java+MySQL校园网络超市系统的设计与实现 开题 论文
  • 【毕设】超市管理系统论文
  • 城市生活垃圾类毕业论文文献包含哪些?
  • 毕业设计 - 基于JSP的超市积分管理系统【源码 + 论文】
  • JSP基于网络超市商品销售管理系统的设计与实现(源代码+论文)
  • Jsp网上超市设计与实现(源代码+论文)
  • 1000句最常用英语口语(一)
  • 英语口语141之每日十句口语
  • 程序员学英语:口语999句之(001-333句)
  • 最简单日常口语-边睡边记英语口语1000句视频笔记

写好一份软件开发设计文档相关推荐

  1. 分享个“软件开发需求文档”

    ...... 由于内容太多,就不一一截图分享了,喜欢的小伙伴可直接在公众号后台回复:"软件开发需求文档"即可获取. 最后,我建立了各大城市的产品交流群,想进群小伙伴加微信:yw52 ...

  2. 软件开发项目文档模版

    这是一份软件开发项目的文档模版,编写给有需要的人. XX系统开发 开发团队: 组长: 组员: 备注:广州大学华软软件学院 目录 XX系统开发.............................. ...

  3. mysql数据库自动生成数据库开发设计文档

    1.输出表结果,表结构可自己通过代码调整,简单但是有时候很实用,可以节省大量的时间,主要思路: a 在java代码中,通过数据库查询语句获取所有表名和表名备注信息. b 通过表名获取某张表的所有字段说 ...

  4. 如何在家写出一份无懈可击的产品文档

    www.pmcaff.com 本文为作者 我是仔仔侠 于社区发布 困在家里,每天起床 - 开早会 - 开项目会议 - 刷牙洗脸 - 看文档邮件 - 开项目会议 - 循环往复直至睡觉,不胖都难... 每 ...

  5. 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?

    随着互联网技术的发展和智能手机的迅速普及,直播软件市场需求正在增长.那么直播平台的发展如何?在软件开发过程中应注意什么?直播软件开发需要做是准备工作有哪些? 1.直播软件开发方向: 一般而言,开发直播 ...

  6. 5分钟教你写出一份完美的PRD文档(附案例)

    PMCAFF(www.pmcaff.com):最大互联网产品社区,是百度,腾讯,阿里等产品经理的学习交流平台.定期出品深度产品观察,互联产品研究首选. 作者:PMCAFF会员杨一溪. 小提示:本文图片 ...

  7. 瀑布模型(waterfall model)一种线性的软件开发模型,文档驱动

    瀑布模型( waterfall model ): 又被称为经典生命周期(classic life cycle ),它提出了一个系统的.顺序的 软件开发方法. 瀑布模型是出现得比较早的软件开发模型. 在 ...

  8. 软件开发 接口文档

    接口文档没有固定的样式,只要把相关的信息显示出来就可以 例如: 接口名称 接口说明 接口地址 请求参数 返回参数 错误码(一般大批量的接口都使用统一的错误码来返回) 下面是本人使用过的接口文档样式 这 ...

  9. 软件开发方案设计文档ppt

    方案设计 方法 1.先确定目标,由目标反推需求,问题,再寻求解决方素, 2注意事项: 目标和需求要从实际出发,务于高户,要有实际应用价值, 注意汇报的对象:听取方案汇报的对象通常并不直接参与到开发过程 ...

最新文章

  1. 服膺守善 立德立言——院长王建民教授在清华大学软件学院2020届学生毕业典礼上的赠言...
  2. php 处理表单里面的 单双引号
  3. 多文件管理器 tablacus explorer 下载与安装
  4. 图解系列之JAVA执行过程
  5. java seqlist_java_实现链表以及链表的测试类
  6. 看图说话,FastJson 并没有那么流行!
  7. MyExcel 2.1.2 版本发布,重要 Bug 修复
  8. 仿ipad页面html5,用HTML5实现iPad应用无限平滑滚动
  9. Spring Security Web : FirewalledResponse 经过防火墙加强安全的响应
  10. 【2016——-编程语言排行以及优缺点分析】
  11. LeetCode 2409. 统计共同度过的日子数
  12. 电脑计算机无法运行怎么办,如果计算机在打开电源后仍无法运行,则该怎么办?计算机无法进入系统的原因[图形]...
  13. html蚊子背景色,室内养这10种植物超级驱蚊,再也不用担心家里被蚊子骚扰了!...
  14. Cadence Virtuoso IC617 Schematic的使用
  15. 根因分析-oracle数据库突发性能问题,谁来背这个锅
  16. 微信支付开发(只针对公众号里的h5支付JSAPI)
  17. JS 和 vue 时间倒计时(天、时、分、秒)
  18. 【视频】国产电子说唱金属核 彩色引擎乐队《无惧》后期制作/混音/母带处理作品 JeromeAlanChan(MZD Studio)
  19. python编码声明:是coding:utf-8还是coding=urf-8呢?
  20. 6S大气传输模型修改源码添加、自定义卫星光谱响应(以HJ-1B CCD为例)

热门文章

  1. CSS3中文手册,新特性速查
  2. 力扣周赛 第194场 5442. 避免洪水泛滥
  3. 小学生到底要不要学奥数 学奥数的利弊分析!
  4. 多个PDF文件或PDF数据流的合并
  5. ESP8266--驱动DS18B20
  6. libnl的基本使用(根据通用netlink family name获得通用netlink family id)
  7. 微信小程序蓝牙调试助手源码
  8. 计算机网络自顶向下方法课程实验二华为三层交换机路由器配置vlan单臂路由以及三层交换
  9. DRM系统的重要基石——EME、CDM、AES、CENC和密钥
  10. 《京东技术解密》读书笔记