如何写软件的需求和设计文档

编程快20年,写了一些的文档。

之前也一直在思考如何写文档,这个过程中,有几次提升。

一次是在华为,学习如何写设计文档。

另外就是写需求文档,这次的项目,以前需求写得也比较多,但都是有足够的思间来慢慢写,这次时间比较紧张,所以,思考如何写作需求。

==============================

开始之前,

我们还是先回下头,想想到底什么是软件。什么是硬件。

这是因为,许多公司,特别是中国现阶段,实际上大多数公司是硬件公司,然后去开发软件,然后用硬件的思维去写软件文档,各方都很别扭。

有的人,以为,用代码写出来的,就是软件,这有些片面。比如CPU也是代码写出来的,但它似乎是很硬的。

所以,有人说华为是家软件公司,理由是大家都在写代码,这有点让人哭笑不得。

===========================

这里,我来斗胆定义一下吧:与人打交道的,特别是人机界面相关的,就是软件。

另外,是状态相关的。

比如,windows的win32API,算不算软件?以前我以为是,现在我觉得不是,当然,也不能算是纯硬件,属于一种中间态吧,因为它不满足状态相关这件事。显然,我们人类是有记忆的,对吧。

列一下,软件两个必要条件:

1. 与人打交道,人机界面相关。

2. 状态相关的。

还有一个最好满足的条件:

3. 用来赢利的,不是给自己公司人使用的。或是管理自己的硬件设备产品的。

比如,华为的网管软件,其实不能算是软件。

================================

我们开始吧。

先从需求开始。

如上所述,需求的要点是从人开始。

也就是从使用者的角度来看。而不是从实现的角度来看。

设计文档,则是在需求明确的前提下,从设计的角度,来描述,如何实现的。

需求文档的输入是用户的述说,输出给项目经理,项目经理,进行全面的评估,比如,查看范围是否划的明确(这是最最重要的一点),能否实现,如果能实现,公司的资源,能否支撑,质量、进度、成本目标是否能够达成?

然后下达给技术经理,进行设计。

当然,不得不吐槽,中国的软件业乱七八糟,怎么干得都有,往往是项目经理,自己组织立项,自己组织写需求。

最后项目经理,需求经理,技术经理,还有产品经理各人一嘴毛,谁都想跨过自己的边界。唉,不扯这些了。

最后所有的人,都可以指责项目经理,唉,不做事不犯错,实际是因为边界。所以,下辈子,不当项目经理,要当给自己的公司当。

需求实际上,的确不应当由项目经理定,虽然他要参与需求的制订,但他不是写需求的人,他只是负责执行。

技术经理,负责实现的图纸。

产品经理,负责验收结果,也就是代表业主方。或者需求方。算是一个只在关键点有话语权的财主,可实际上,地主来干涉长工干活的事情,在中国很普遍,我说过无数次了:对于中国人来说,边界是个大难题,无数人,到死也没搞清楚边界,谁不想把别人的老婆变成自己的呢?当然,真变成了,也肯定是悲剧了。

吐槽也有好的一面,如果你真看明白上面的文字,你可能了解你的公司的问题在哪里。

有人总是在纯想技术,项目失败,实际上多数时候,70%以上吧,来自于组织的问题。

=======================================

如何写需求

1. 准备一下:写写前因后果,给系统起个名字,然后试图划清边界和规模。这个很难,但必须要做。

2. 分清角色。

3. 站在每个角色的视角,提出,有哪些需求。这一点,回顾一下上面的描述,就出来了,要站在人的角度,如果与人无关,就没有需求,交给实现方就可以了。比如,用户的需求,是把数据从A地传到B地,我们可以选装硬盘里用车拉过去,还是用TCP/IP协议传过去,用户是不在意的,这种情况,比如,“首先雇辆车,然后硬盘装车,诸如此类的”,就不要写了,这虽然也是与人打交道,但这人不是你的用户;如果把TCP/IP协议栈当作人,自然更离题了。

4. 然后是细化。每个动作的详细的描述,包括:输入(前置状态或允许条件等),输出,状态的改变

=========================

设计文档,

相对就更好写一些。

主要是层层分解。

每一层都要先描述出:

1. 自己在上一层的位置

2. 自己与同层的模块或系统或子系统之半的关联关系,这时,这些接口,已在上一层的接口描述中定义,只需要提一下即可。同层的模块间的流程,也不要写,因为在上层已写过。

3. 自己的内部构成,也就是模块分解。每模块功能简要描述。

4. 内部模块间关联关系和接口描述。

5. 子系统的主要流程,主要说明每个流程,各内部子模块之间的协作,主要是指信息流动,和各子系统的状态变化。也就是输入,动作,输出。

今天过来看,意外的是,还偶尔有同仁查看了本贴,这里稍稍补充一下(关于设计文档):

(1)相信7原则。我们大脑是7维的。所以,在同层,模块尽可能不要超过7个。如果超过,要重新平衡。当前,在设计文档的前期,大家会想得很全面,很可能模块超多。但最后阶段,每个模块都出来后,项目经理,一定要参与取舍。主要是舍。你的部下,大多把能想到的都想到了。但不要超过7个。有的模块可以是上层另一个单元的,有的,这次就不能实现。因为安,投,进,质,合,信,组(安全,成本,进度,质量,合同,信息,组织)。这些都 是项目经理的责任(组织不是),而设计和实现者不在乎这些。这点很难。但很重要。系统工程是很残酷和违背人性的,很客观。没办法。

(2)关于分层,最好不要向下超过三层。L0,L1,L2,类似总体设计,概要,详细。不要再向下细了。再向下的,让各个小组自己编写即可。作为一个个专题,项目内部控制,可以请你的PM帮你在日后走相对简单的流程入库 。不必体面在全局性文档中。因为那样,文档太长没法看了。而且很难过审。那些官老爷,你写得越多,越不好过,你的项目开工日期 就可能一直拖下去。恰到好处,宁少毋多。但一定要下探到小组级别(特别是小组的接口和接口人的位置)。以免日后项目失控。

  • 15
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
需求分析文档设计文档软件开发过程中非常重要的文档,它们用于明确软件系统的需求设计细节。下面是一些关于如何编需求分析文档设计文档的一般指导: 需求分析文档: 1. 引言:对项目进行简要介绍,包括项目的目标、范围和读者等信息。 2. 需求概述:对项目需求的总体概述,包括主要功能、非功能需求和用户角色等。 3. 详细需求描述:逐个详细描述各个功能需求,包括输入输出、处理逻辑、约束条件等。 4. 用例描述:使用用例图或用例表格来描述不同用户角色下的典型用户行为和系统响应。 5. 数据模型:描述系统中的数据实体、关系和属性,可以使用数据流图、ER图等工具。 6. 系统界面:描述系统的用户界面,包括界面布局、操作流程、界面元素等。 7. 约束条件:列出对系统设计和实现有限制的约束条件,如硬件平台、编程语言、性能要求等。 8. 非功能性需求:描述系统的性能、安全、可靠性、可维护性等非功能性要求。 9. 可行性分析:对项目的可行性进行评估,包括技术、经济和操作可行性等方面的分析和结论。 10. 附录:包括词汇表、缩词定义、参考文献等补充信息。 设计文档: 1. 引言:对设计文档的目的、范围和读者进行简要介绍。 2. 系统架构:描述系统的整体结构,包括模块划分、组件关系和接口定义等。 3. 模块设计:对系统中的各个模块进行详细设计,包括模块功能、接口定义和数据结构等。 4. 数据库设计:描述数据库的结构和关系,包括表结构、索引、约束和查询语句等。 5. 界面设计:详细描述系统的用户界面,包括界面布局、交互流程和界面元素等。 6. 算法设计:对系统中需要用到的算法进行详细说明,包括算法原理、流程图和伪代码等。 7. 安全设计:描述系统的安全性措施,包括身份验证、访问控制和数据加密等。 8. 性能设计:对系统的性能进行分析和优化设计,包括并发性、响应时间和资源消耗等方面。 9. 测试计划:描述系统的测试策略和测试用例,包括功能测试、性能测试和安全测试等。 10. 部署计划:描述系统的部署方案和发布计划,包括硬件需求软件安装和配置过程等。 11. 附录:包括词汇表、缩词定义、参考文献、图表和代码清单等补充信息。 需要根据具体项目的特点和要求来编需求分析文档设计文档,并且可以根据团队的实际情况进行调整和补充。这些文档应该清晰、准确地描述系统的需求设计,以便开发团队能够理解和实施。 希望以上信息能够对你编需求分析文档设计文档有所帮助。如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值