我们经常听到这样的话:

“设计文档没有用,是用来糊弄客户和管理层的文档”;
“用来写设计文档的时间,项目开发早就做完了”;
“项目紧张,没有时间做设计”;

这些言论,并不是正确的观念,根据项目的实际情况,开发设计团队可以约定设计文档的详细程度。
项目团队需要保障设计文档的完整性和一致性,在项目进度紧张的情况下,软件设计文档可以更初略一些;
在项目时间充裕的情况下,相关文档可以更为详尽。但是在项目开发过程中,需要软件设计开发团队对于设计文档有共同的理解。有利于程序的设计工作,以及对程序的修改和维护工作

设计文档的分类与作用
通常来说,作为软件项目,我们需要有这几类文档

1,需求说明文档。
2,功能设计文档。
3,系统架构说明书。
4,模块概要设计文档。
5,模块详细设计文档。

一般说来,需求分析属于软件定义方面 ;
而概要设计(功能涉及,系统架构)、详细设计(模块概要,模块详细)属于软件开发的阶段 ;

就像之前说到的,在软件团队中,对于以上的文档的要求是可以完全不同的,在简单项目中,可能所有类型的文档放在一个文档中进行说明;在复杂项目中,每一类文档可能都要写几个文档;而在最极端的情况下,可能每一类文档都能装订成几册。因此,在我们软件设计和开发人员心目中需要明确的是:文档并不是我们进行设计的目标,也不是我们设计过程中额外的工作。

软件设计文档是我们在软件设计开发过程中形成的,用来在软件设计开发团队内部以及与各干系人之间进行沟通的文档,这些文档记录了软件项目中的各种知识,方案的思路、以及各种决策意见。
下面我们就软件设计开发过程中必须要完成的工作进行梳理,而我们需要注意到,这些需要完成的工作,在不同的开发流程模型的指导下可能有不同的时间要求,而我们需要关注的是在这个阶段内需要完成的工作,以及这个阶段内我们需要沟通的人员。

需求分析
需求分析是我们进行任何一个软件项目设计开发过程中都必须要完成的工作。

这个工作通常与客户一起完成。在不同的项目中,这个“客户”可能来自真正的购买产品的用户,使用系统的用户,也有可能来自团队的某个人员,如产品经理等。软件设计开发团队的参与成员根据项目的不同规模,则参与的人员也有所不同。原则上,设计开发人员参与的时间点越早,对于需求的理解和把握会更好。这个阶段,通常需要软件架构师参与其中。从资源优化的角度来说,开发人员不必参与需求分析,但需要理解需求。

需求分析的结果通常我们需要使用需求说明文档来描述,目前主流的需求描述方法包括:用户例图。这些方式有所不同的侧重,其核心思想就是描述清楚用户的使用场景。但无论采取何种方式,进行需求的描述,需求说明需要明确以下几点:

  • 所需要开发的软件系统边界
  • 系统所有的相关及使用人员角色
  • 系统关键的使用场景
  • 系统规模、性能要求以及部署方式等非功能性需求

功能设计
功能设计与需求分析差不多同时在开展,在很多软件项目中,对于功能设计不是特别重视。但对于某些软件项目而言,这是一个相当重要的工作。对于主要是用户界面的软件项目来说,功能设计可以看作是画出原型界面,描述使用场景,获得用户认可的过程。而对于没有界面的软件项目来说,则功能设计与需求分析的区分更为模糊。

参与的人员与需求分析的参与人员类似,架构师更侧重于参与此类工作,并给与一些实现层面的判断和取舍。

功能设计需要明确的核心是:

  • 系统的行为

系统架构设计
系统架构设计是一个非常依赖于经验的设计过程。需要根据软件项目的特定功能需求和非功能性需求进行取舍,最终获得一个满足各方要求的系统架构。系统架构的不同,将很大程度上决定系统开发和维护是否能够较为容易的适应需求变化,以及适应业务规模扩张。

架构设计工作中,用户参与程度很低。软件开发团队中的需求人员参与程度很低,但团队中的所有核心设计和开发人员都应该参与其中,并达成一致意见。

架构设计的主要成果,是将系统的不同视图予以呈现,并使之落实到开发中:

  • 系统开发视图及技术路线选择
  • 系统逻辑视图
  • 系统部署视图
  • 系统模块视图
  • 系统的领域模型

在软件开发过程中,系统的架构不是一成不变的,随着设计人员和开发人员对于系统的理解不断深入,系统的架构也会发生演化。在软件项目中,架构设计是开发团队沟通的统一语言,设计文档必须要随着系统的变化进行更新,保障开发团队对于系统的理解和沟通的一致性。

模块/子系统概要设计
模块/子系统的概要设计,由架构师参与,核心设计和开发人员负责的方式进行。
在概要设计工作中,我们需要在架构确定的开发路线的指导下,完成模块功能实现的关键设计工作。在概要设计阶段,需要关注于模块的核心功能和难点进行设计。这个过程中更多推荐的采用UML来进行概要设计,需要进行:

  • 模块实现机制设计
  • 模块接口设计
  • 关键类设计
  • 画出时序图
  • 交互图等。

模块详细设计
在瀑布式开发模型中,模块的详细设计会要求比较严格,将所有类进行详细设计。据我所知,除了一些对于系统健壮性要求非常严格的软件项目,如国防项目,金融项目还要求有详细设计文档之外。其他的项目大多采用其他方式来处理这样的工作,如自动化测试等。

综上所述,软件设计文档作为软件开发团队的沟通、理解、知识共享的手段,具有非常重要的意义。而根据软件团队的规模,对于文档上承载的信息详细程度可以有不同程度的要求。我们软件团队对于如何使用设计文档有一个统一的理解,并坚持更新设计文档,这就是软件设计的最佳实践!

软件设计文档如何编写,设计文档内容都包括什么相关推荐

  1. 电商无线页面设计手机移动端的设计模板

    因为在手机端设计中,横向的构图空间狭小.拓展性很弱,而竖向构图则更灵活,可塑性更强,也更符合我们的浏览习惯.这类一屏一个制作单位的形式比较适合详情页的制作. 如何做好手机端设计? 1.竖屏构图 一屏. ...

  2. java编码规范文档 下载_软件项目实训及课程设计指导——制定待开发项目中各种文档的规范...

    软件项目实训及课程设计指导--制定待开发项目中各种形式文档的规范 1.制定对课程设计项目开发过程中的规范性要求 (1)从"形式"到"内容"两个方面控制和要求开发 ...

  3. 软件设计交流系统-用户手册与帮助文档

    用户手册与帮助文档 1        引言 1.1    编写目的 本文档为指导用户如何使用软件设计交流系统而编写,为用户详细介绍本软件产品,并给出清晰明确的操作指导. 1.2    背景 ² 软件名 ...

  4. 基于Java毕业设计游戏论坛设计源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计游戏论坛设计源码+系统+mysql+lw文档+部署软件 基于Java毕业设计游戏论坛设计源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  5. 问卷调查系统的设计与实现【源码:文档:教程】

    Goddess-Questionnaire女神问卷 各位大神若有项目问题可进群有小伙伴解答 女神问卷演示视频(问卷部分):https://v.youku.com/v_show/id_XNDI3Mjc5 ...

  6. mysql课程设计实习指导书_MYSQL课程设计实习指导书【精品文档系列】.pdf

    MYSQL课程设计指导书 一.课程设计题目 教务管理系统设计 二.课程设计的目的和意义 教务管理系统是学校管理信息系统建设的重要组成部分, 是提高教学管理的质量和效果的关键环节. 教学教务信息处理的电 ...

  7. CTO也糊涂的常用术语:功能模块、业务架构、用户需求、文档、过度设计……[20210217更新]

    潘加宇 [初稿写于2018/5/30,最近更新2021/2/17] 功能模块.业务架构.需求分析.用户需求.系统分析.功能设计.详细设计.文档.业务.技术--很多被随口使用的名词,其实是含糊甚至错误的 ...

  8. 【游戏设计系列】关于游戏设计文档

    如何编写设计文档 设计文档的分类 迷你型设计(mini design) 定义:一周左右完成的设计,一个完整却简单的游戏描述 要求 任何一团队成员能够摘录与阅读 读者能够了解游戏设计者的设计意图 读者能 ...

  9. java计算机毕业设计校园爱心公益平台设计与实现MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计校园爱心公益平台设计与实现MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计校园爱心公益平台设计与实现MyBatis+系统+LW文档+源码+调试部署 本源码技 ...

最新文章

  1. 一个女生不主动联系你还有机会吗?
  2. 【CentOS】EOF使用
  3. Shallow and retained sizes
  4. ArcGIS中实现将圆16等分
  5. mysql already closed._java.sql.SQLException: Already closed.
  6. jakarta ee_关于Jakarta EE软件包名称更改的思考
  7. Python基础班---第一部分(基础)---Python基础知识---第一个Python程序
  8. android v4包自动导入吧,android如何导入v4包的源码
  9. ajax之jsonp跨域请求
  10. Docker学习六:综合实践
  11. ReplacingMergeTree:实现Clickhouse数据更新
  12. 如何避免OOM 异常?
  13. AJAX ControlToolkit学习日志-AnimationExtender控件(3)
  14. numpy—np.info(function)
  15. 10_10_安卓加linux命令,Linux 新手必知必会的 10 条 Linux 基本命令
  16. PSCAD X4.6.2 免费下载
  17. VS自带工具:dumpbin的使用查看Lib,dll等
  18. 学了这么久的高并发编程,连Java中的并发原子类都不知道?这也太Low了吧
  19. 争对让望对思野葛对山栀注解_《笠翁对韵》四 支(4)
  20. 3月4日 与柳传志面对面(谁是这个时代的思想家)

热门文章

  1. 冲量在线亮相英特尔隐私计算研讨会,基于可信执行环境技术构建更安全的数据流通方案
  2. 特技摩托显示无法连接服务器,考验育碧服务器!《特技摩托:崛起》力推跨平台功能...
  3. Vulnhub靶场渗透测试系列DC-2(wpscan使用和git提权)
  4. VBox 下win10 不能调节分辨率问题
  5. Java 日志从入门到实战
  6. 计算机应用要求手速吗,激情燃烧岁月,键盘续写篇章——计算机应用技术专业成功举办第二届手速大赛...
  7. Go语言中Context使用技巧
  8. [bzoj4827][Hnoi2017]礼物_FFT
  9. python怎么往list中间加数据_python list怎么添加元素
  10. Adnroid GraphHopper 离线导航路网数据包制作