《Spring Boot 实战纪实》之如何攥写需求文档
目录
- 前言
- (思维篇)人人都是产品经理
- (技术篇) 码农的自我修养
- 5 Java基础
- 5.1 Java环境搭建
- 5.2 Java基本语法
- 5.3 Java流程控制
- 5.4 Java 集合
- 5.5 Java 类与对象
- 5.6 构造方法
- 5.7 封装,继承,多态
- 5.8 Java抽象/接口
- 5.9 Java常用类
- 5.10 Java异常处理
- 5.11 异常的定义及捕获
- 5.12 Java多线程/线程池
- 5.13 Java的反射机制
- 5.14 Java的23种设计模式
- 6 Spring框架
- 6.1 了解spring
- 6.2 Spring带给Java开发的便利
- 6.2 Spring ioc/aop
- 7 SpringMVC
- 7.1 了解springMVC
- 8 SpringBoot
- 8.1 MVC 模型
- 8.2 拦截器
- 8.3 过滤器
- 8.4 POJO
- 8.5 controller
- 9 MyBaits plus
- 8 Web基础
- html+css
- javascript
- bootstrap
- (实战篇) 打造自己的轮子
- 10 项目架构
- 11 网站母版构建
- 11.1 thymeleaf介绍
- 11.2 使用thymeleaf构建网站模板
- 12 首页
- 12.1 banner
- 12.2 轮播图
- 12.3 文章分页
- 12.4 编码实现
- 13 登录
- 13.1 功能点介绍
- 13.2 知识点
- 13.3 编码实现
- 14 注册
- 14.1 功能点介绍
- 14.2 知识点
- 14.3 编码实现
- 15 用户管理
- 10.1 功能点介绍
- 10.2 知识点
- 10.3 编码实现
- 16 权限控制
- 10.1 功能点介绍
- 10.2 知识点
- 10.3 编码实现
- 17 权限控制
- 11.1 功能点介绍
- 10.2 知识点
- 10.3 编码实现
- 总结
- 源码
- 参考
导航
- 永远考虑那个拥有更强写作能力的人
- 工欲善其事,必先利其器
- markdown
- 思维导图
- 流程图
- 换位思考
- 这个需求,「不做」
- 闭环
- 写作套路
- 铺垫
- 下定义
- 逻辑清晰
- 说人话
- 视角
- 版本延续性
- 结语
Reading makes a full man, conference a ready man, and writing an exact man.
永远考虑那个拥有更强写作能力的人
如果一个岗位有几个候选人,永远考虑那个拥有更强写作能力的人。无论这个人是设计师、程序员、市场或销售人员,写作能力总是可以带来回报的。有效、简洁的写作能带来有效、简洁的代码、设计、邮件、即时通讯等等。
写作带来:
更深度的思考,更认真的生活,更清晰的沟通,更有效的社交, 更强大的内心。
工欲善其事,必先利其器
君子生非异也,善假于物也
思想固然重要,但是善于借助工具表达自己的思想也很重要。这里介绍一些好用的写作方面的工具。
Markdown
根据百度百科-markdown,Markdown是一种轻量级标记语言,创始人为约翰·格鲁伯(英语:John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档。
Markdown是一种简单的格式化文本的方法,让排版变得简答,在任何设备上看起来都很棒。有道笔记,印象笔记,博客园,vscode,github,码云等都支持markdown语法。
相关教程

思维导图
对于某些需求涵盖功能点较多,后者分支较多场景,使用思维导图呈现更直观。比如,这是我整理的考试系统的前期需求的一个思维导图:

现在有很多工具都支持画思维导图:
流程图
程序员童鞋对流程图肯定不会陌生,常见程序流程图设计应该是信手拈来。针对复杂需求,有时候使用语言和文字难以描述清楚。这个时候,流程图该上场了。

流程图在整个需求的整理中的核心,他能将产品业务背后的逻辑展示出来。这个需要你对吃透需求,然后内化,加工,再输出。说句题外话,如果你参与了这个需求,一定要抠细节,流程越细化,越有助于成功的实现需求。。
这里推荐几个常用的流程图工具:
换位思考
接到需求之后,技术同学往往会先思考技术实现,然后陷入技术细节,这也是大多数技术人的通病。
在此前的文章《需求管理》中,我曾指出技术同学要放下傲慢和偏见,跳出技术思维。这对于需求的理解和整理至关重要。
跳出技术思维,然后换位思考,这有助于全方位,多角度的理解需求。一个功能可能由不同的角色人员使用,视角不同,需求不同。你需要像导演拍电影一样,针对不同角色,一个场景一个场景的拍摄,最终串联成一个完整的电影作品。
这个需求,「不做」
懂得拒绝是一门艺术。
技术人不是一个没有灵魂的代码工具。"这是需求爸爸提的,我没法拒绝","这是产品爸爸喊做的,不管我的事"。当出现问题的时候,我们经常听到技术同学这样说。
不合理的需求,对用户不友好的需求,低收益,高投入的需求,要敢于拒绝。当然,拒绝也是一门艺术,这就是与人沟通的艺术。如果经过深思熟虑,你能够给出比较合理的解释或者提出更有建设性的方案,我想这样才会更加容易让人接受。
闭环
闭环这个词,真是互联网领域的万金油。但是,笔者这里特指产品需求逻辑的闭环。
笔者曾经待过一个互联网教育创业公司。因为参与人很多都是TOB行业经验的人。大家都是知道,TOB公司的产品卖出去很多时候是线下的操作。比如,微软公司,我做操作系统一流,我赢家通吃。但是,TOC就不一定了,个体用户更加注重用户体验,比如曾经的电商百团大战的竞争,后面的共享单车的竞争,消费者可以直接用脚投票的。
我们做了一个课程官网,包括课程展示,订阅充值的官网。官网上线之后,市场同事也做了宣传,但是发现基本上没人注册,很多用户都是让我们帮忙注册。经过研究发现了原因:
- 因为集成Azure注册慢,登录页面,而且极不友好。 这导致用户放弃注册。
- 官网没有展示客服咨询电话,只有一个用户建议表单。无法实时联系客服。
这个案例,很典型。从市场到技术,我们做了很多工作,但是最终效果不理想。最大的愿意就是产品不闭环。用户想学习课程,但是登录和注册体验太差,这就已经挡住了大部分的用户。
写作套路
前面我们讲了很多坑和避坑策略,那要如何才能写好需求文档呢?
铺垫
根据百度百科-铺垫法。戏剧情节结构的一种手法。在戏剧的进展中,对于某些将要出现的关键性情节和起关键作用的人物,必须在事前有所准备、暗示;为情节的展开,为高潮的到来,酝酿气氛,作好准备,铺平道路。这种手法叫埋伏或伏笔。
其实可以简单理解为背景说明。在需求文档中,增加一定的背景表述,可以增强事物间的因果联系和完整性,不显突兀。
一般可以在你的需求前增加一个背景交代,

这样的好处是,其一,让之前没有参与的人有个背景认识;其二,为自己后续的观点(或者设计思路)提供可信依据,至少不知自己拍脑袋想出来的。
下定义
对于不同的业务,有时候会有一些专有名词,或者是你自己了说明某个事物而定义的名词。如果不做一些定义的解释,很难理解。比如,在设计IM聊天时候,可能会有一些定义,可以给出定义。

逻辑清晰
需求文档,不是日记,切记流水账。排版工整,重难点突出。逻辑清晰,富有层次感。
利用图表配合文字,有条不紊的表达出合理地逻辑。这样大家阅读起来,一目了然。
说人话
针对不同的人群一定要设计不同的话术
这里的人是指不同的受众。考虑到需求文档面向的对象较多,有技术,业务,测试等,需要抛弃过于专业的技术语言,比如不要出现技术设计的细节,尽量要用自然语言表达。
说句题外话,其实严格意义上,需求文档可能是要写两份,一类是给技术同学看的,一类是给非技术同学看的。对于前者,你当然可以用类似抽象的uml图或者直接给出伪代码来说明。
视角
子非鱼,安知鱼之乐
你以为的就是你以为的吗?很多时候,需求的来源并不单一,比如公司要做一个工单系统,这个工单系统的使用者几乎涵盖了公司的各个部门。按照"用户第一"的要求,我们需要考虑到不同业务方的诉求和用户习惯。
我们在做需求的时候,就要提前想到。否则,后面的设计一定会违背使用者的意图。前面,讲过的换位思考,或者多角色思考该排上用场了。
在文档中,如何体现呢?通常,可以按照不通视角来描述。这就是类似程序的switch...case...
切记站在上帝视角看待问题。
版本延续性
需求文档很少一次性就让各方满意的,或多或少都会有补充和调整。比较好的习惯是使用修订版本来记录。
修订历史是一个版本的可追溯源,对需求变更历程有一个清晰的认识。
新建默认为相应模块的首次使用,对于文档的修改以及增加的地方可加入超链接,同时在增加与修改的具体地方进行颜色标示或者其他标志来进行区分,方便其他人员进行查询。

结语
写好一个需求文档,让人觉得很专业有很多东西需要学习。这里笔者只根据个人多年的工作经验,抛砖引玉,欢迎大家怕批评和斧正。
《Spring Boot 实战纪实》之如何攥写需求文档的更多相关文章
- 《Spring Boot 实战纪实》之需求管理
目录 前言 (思维篇)人人都是产品经理 1.需求文档 1.1 需求管理 1.2 如何攥写需求文档 1.3 需求关键点文档 2 原型设计 2.1 缺失的逻辑 2.2 让想法跃然纸上 3 开发设计文档 3 ...
- 《Spring Boot 实战纪实》之前言
目录 前言 (思维篇)人人都是产品经理 1.需求文档 1.1 需求管理 1.2 如何攥写需求文档 1.3 需求关键点文档 2 原型设计 2.1 缺失的逻辑 2.2 让想法跃然纸上 3 开发设计文档 3 ...
- 《Spring Boot 实战纪实》之关键点文档
目录 前言 (思维篇)人人都是产品经理 1.需求文档 1.1 需求管理 1.2 如何攥写需求文档 1.3 需求关键点文档 2 原型设计 2.1 缺失的逻辑 2.2 让想法跃然纸上 3 开发设计文档 3 ...
- 《Spring Boot 实战纪实》缺失的逻辑
目录 前言 (思维篇)人人都是产品经理 1.需求文档 1.1 需求管理 1.2 如何攥写需求文档 1.3 需求关键点文档 2 原型设计 2.1 缺失的逻辑 2.2 让想法跃然纸上 3 开发设计文档 3 ...
- 《Spring Boot 实战纪实》之过滤器
导航 什么是过滤器 Spring的过滤器 Filter定义 过滤的对象 典型应用 过滤器的使用 Filter生命周期 过滤器链 自定义敏感词过滤器 新增自定义过滤器 添加 @WebFilter注解 添 ...
- spring boot / cloud (三) 集成springfox-swagger2构建在线API文档
spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 前言 不能同步更新API文档会有什么问题? 理想情况下,为所开发的服务编写接口文档,能提高与 ...
- Java | Spring Boot Swagger2 集成REST ful API 生成接口文档
Spring Boot Swagger2 集成REST ful API 生成接口文档 原文 简介 由于Spring Boot 的特性,用来开发 REST ful 变得非常容易,并且结合 Swagg ...
- Spring Boot 2.x基础教程:Swagger静态文档的生成
前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了.如果您还不熟悉这块,可以先阅读: Spring Boo ...
- Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据
一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二 ...
随机推荐
- 【论文阅读】An Empirical Study of Architectural Decay in Open-Source Software
2020-06-19这篇文章是我学习 软件架构与中间件 课程时分享的论文.可以说,这篇文章塑造了我基本的科研观,也养成了我如今看论文的习惯.感谢老师们,也感谢恒恒对我的帮助. 论文地址: https: ...
- RS485转以太网的概述和应用领域
如今随着物联网技术的不断发展,各种接口更新换代的速度非常的快,RS485转以太网的主要作用就是提供串口转TCP/IP网络接口的功能,它可以将RS232/485/422串口转换成TCP/IP网络接口,实 ...
- Java学习的第五天
1.值域转化的规则:值域小的类型可以自动转化成值域大的类型,值域大的类型可以强行转化成值域小的类型,但要注意精度,除了基本类型可以转换,引用类型之间也可以转换. 引用类型可以是类,借口,数组. 常见的 ...
- java中常见的六种线程池详解
之前我们介绍了线程池的四种拒绝策略,了解了线程池参数的含义,那么今天我们来聊聊Java 中常见的几种线程池,以及在jdk7 加入的 ForkJoin 新型线程池 首先我们列出Java 中的六种线程池如 ...
- 基于tensorflow的文本分类总结(数据集是复旦中文语料)
代码已上传到github:https://github.com/taishan1994/tensorflow-text-classification 往期精彩: 利用TfidfVectorizer进行 ...
- c++11-17 模板核心知识(一)—— 函数模板
1.1 定义函数模板 1.2 使用函数模板 1.3 两阶段翻译 Two-Phase Translation 1.3.1 模板的编译和链接问题 1.4 多模板参数 1.4.1 引入额外模板参数作为返回值 ...
- vscode 插件配置指北
Extension Manifest 就像 chrome 插件使用 manifest.json 来管理插件的配置一样,vscode 的插件也有一个 manifest,而且就叫 package.json ...
- Ubuntu17.10 React Native 环境搭建
React Native 环境搭建 环境:ubuntu17.10 安装依赖 必须安装的依赖有:Node.React Native 命令行工具以及 JDK 和 Andriod Studio. 安装nod ...
- 阅源-jdk8-FunctionalInterface注解
package java.lang; import java.lang.annotation.*; /** * An informative annotation type used to indic ...
- Ubuntu18.04上安装CUDA_10.1(nvidia-driver)和cuDNN_7.6.5
本文是在Ubuntu18.04.5服务器上安装CUDA_10.1(nvidia-driver455)和cuDNN_7.6.5, Ubuntu 18.04.5 CUDA_10.1 (nvidia-dri ...