如何写出受技术欢迎的需求文档

栏目: 编程工具 · 发布时间: 6年前

内容简介:正如我们做出来的产品都希望受用户欢迎,开发和测试是需求文档的用户,产品经理也应该重视他们的想法和要求才能写得令人满意。“写需求文档”说专业点是把用户(或运营、客服等)的需求转化成技术部门的话语,因此了解技术术语是产品经理的基本素质。要做到需求文档受欢迎,了解术语是不够的。虽然不可能写得像开发人员写设计文档的一样专业,但产品经理如果能运用技术人员的思维多做些考虑,就能减少评审过程的反复沟通,那必然能收到大量好评。技术人员的思维同样是被工作环境和内容训练形成的,编程语言、架构设计、测试方法是最主要的因素。其中

正如我们做出来的产品都希望受用户欢迎,开发和测试是需求文档的用户,产品经理也应该重视他们的想法和要求才能写得令人满意。

“写需求文档”说专业点是把用户(或运营、客服等)的需求转化成技术部门的话语,因此了解技术术语是产品经理的基本素质。要做到需求文档受欢迎,了解术语是不够的。虽然不可能写得像开发人员写设计文档的一样专业,但产品经理如果能运用技术人员的思维多做些考虑,就能减少评审过程的反复沟通,那必然能收到大量好评。

技术人员的思维同样是被工作环境和内容训练形成的,编程语言、架构设计、测试方法是最主要的因素。其中,开发人员会有这些思维:

  1. 组件与模块。
  2. 流程与联系。
  3. 条件与时机。
  4. 类型与精度。

测试也会有独特的思维:

  1. 极端。
  2. 因果。
  3. 场景:一系列的组合条件。

另外,用户体验思维中的“层次分明、重点突出”,也非常有助于优化需求文档的视觉效果以提高阅读效率。

我们以每种思维作为章节来回答本文的问题。

开发思维:组件与模块

我们写文章都不是从头到尾就一段话的,会分段落、章节,这样能帮助做到条理清晰。代码的本质也是“文章”,组件和模块就像是段落和章节,他们会对应一个功能、界面或规则。为此,需求本身也应有拆分:产品有结构,功能有细分,界面分区块等。

产品结构图就像文章的目录,在做新项目的时候应该附上。它不仅帮助产品经理自己梳理子需求,也让整个项目组都清晰知道产品的构成,对开发、测试、UI设计师后续的工作都有指导作用。现在多数人会用思维导图来画,原因就是它的最大作用是理顺思路。

功能细分可以用“评论”功能来举例,它可分为:

  • 前置的登录注册等条件
  • 界面上评论区的功能(比如@他人,回复某楼层,引用回复,表情输入等)
  • 提交前的限制条件校验(比如字数、特殊字符)
  • 提交评论的过程
  • 评论的内容检验(比如涉黄、敏感信息)
  • 评论后的展示(比如引用回复、互相@)
  • 用户信息里的评论信息更新

如何做需求拆解是没有固定模式的,跟业务有紧密关系,一般的两个思路是流程和规则。

下图是界面分区块的示例(示例的意思是在原型和文档上这样命名,这不是原型图)

如何写出受技术欢迎的需求文档

分区块并进行命名的好处:

  • 利于文档描述,减少说明字数,加速阅读
  • 利于沟通。大家只要说一个名字,就知道是说哪个部分,不用对着界面说。如果整个产品每个区域的名字是唯一的,那么报bug的时候可能连操作路径和截图都不需要了。
  • 一般来说,开发写代码时也会用这些命名的(翻译成英语),他们会很感激产品经理帮他们想好了名字。

开发思维:流程与联系

需求是一个整体,拆分后的各部分必然仍有联系,他们的协作步骤即是流程。产品的交互设计在代码流程上是大致对应的,所以如果产品经理能把流程描述详尽的话,开发的工作差不多等于把这堆“中文”用编程语言翻译一遍而已。

如果流程足够复杂,就需要用图来表达。画图是描述复杂事物的基本技巧,不仅仅是需求文档的写作要求了,这里不展开讲。那么怎么才算复杂呢?一般简单的判断是:以最长的步骤路径为基准,如果超过30%的步骤有分支就应该画流程图。例如如果有7个步骤,有3个步骤是“是非选择”或“循环指向”,那就该画;只有2个步骤有分支就不用画,用文字说明白。延伸地讲,如果分支太多,需求本身可能就有问题了,应该从交互设计上去简化它,不应该给用户这么多可选择的东西而造成困扰。

一个实际的文字描述步骤例子:

  1. 进入“我”页面
  2. 是否已登录,是则继续,否则进入“登录”流程
  3. 点击“评论”区,进入评论页
  4. 如果评论数为空,显示占位图,否则显示评论列表
  5. 点击评论列表中的一条,进入帖子详情页,并且页面自动滚动到那条评论的位置
  6. 用户点右上角的“关闭”,跳回第4步,否则按“帖子详情页”的流程继续

在上面的例子里,我们也看到,流程之间会产生联系。一个流程中的某些步骤可以关联到另一个流程。这些流程之间的联系,在开发设计中会体现为“模块间的依赖或调用关系”。作为产品经理无需理解前面双引号内词语的技术意义,但有一个很典型的场景能帮助大家认识它的作用:开发解决了一个bug后导致了别的bug;更经典的是,开发抱怨说这是因为产品的新需求没考虑到对原有功能的影响。

无论最终是否开发的责任,产品经理也应该去梳理各个需求之间的联系,包括界面、交互、功能的相互影响。最好是文档中有独立的章节列出需求间的关联。这不仅是帮助开发测试做好设计,也是为自己检查疏漏。拿一个普遍的需求“登录”来举例,产品经理应该列一下所有“不登录就不能访问的页面”。以后改动登录功能的时候,自己也可以一下子看清所有的影响范围。这个习惯最能防止“状态多层次级联”(如A影响B,B影响C)的情况下考虑不周。

开发思维:条件与时机

计算机是不会执行没描述过的操作的,即使是火热的人工智能,也是要经过训练才知道什么条件做什么操作。所以开发需要在代码中精确描述:

  1. 流程的入口场景,即这种“可能性”的触发时机。
  2. 流程内每个步骤的执行条件。

不同的条件会导致不同的结果,这对用户使用有重大影响,所以一定把所有的条件和可能性都列出来。一般来说,产品经理最大的疏漏是没考虑异常情况。其实无论过程怎样,最终反映在界面上只有4种结果:

  1. 加载中
  2. 数据正常,正常显示
  3. 无数据,数据为空
  4. 出错,包括超时

产品经理把这4种结果的界面都定义清楚,就能覆盖所有中间过程的情况。当然,最好还是能把中间过程的可能性都考虑周全,并针对不同的状况有更精细化的结果展示。

开发思维:类型与精度

这是编程语言(更确切来说是CPU计算原理)带来的思维。我们不去深究计算机知识,只需知道对我们的影响:要用数据来描述一个事物以便计算机能理解。这些数据分两大类型:数字与文本。其中数字还有这些考虑:

  • 整数还是浮点数,即是否带有小数部分
  • 浮点数保留多少位小数部分
  • 是否可能是负数
  • 最大绝对值是多少(数字越大,可能会需要更多内存和计算时间。做适当限制有利于提高性能)

这个思维(或者说限制)会影响所有需要用户输入交互的地方。如果原型图上不能明显看出以上的信息,产品经理应该有意识地在文档中补充。

测试思维:极端

极端的情况下容易出bug,这是最基本的测试思路。如果界面上有一个输入框,以下几个测试用例肯定会有:

  • 输入非常多的字符,看是否允许、是否合理显示
  • 输入不应该允许的数值,比如超出最大最小值,看能否允许、能否继续下一步
  • 输入不应该允许的文本类型,比如身份证号栏填入中文,看是否允许、能否继续下一步

下面几种测试手段,都会用到极端的思维:

  • 最低配置的设备上能否流畅运行
  • 在设备资源紧张(例如内存不足)的时候,程序还能否正常工作
  • 在最老旧的系统、浏览器版本上能否正常运行
  • 非常频繁地进行操作,程序还能否正常响应

依据这个思维,产品经理应该把这些东西都定义清楚:

  • 可交互界面的输入类型与范围
  • 目标运行环境的最低配置
  • 兼容性:系统版本、浏览器品牌与版本
  • 需要支撑多少用户同时在线、多少同时发生的流量
  • 要能应对什么程度的故障

测试思维:因果

开发思维中“条件与时机”注重的是“前提”,测试还会做反向思考和补充。除了关心“什么条件导致了这个结果”,还要思考“这个条件会导致哪些结果”,这也是开发写代码容易疏忽的。两个典型的问题是:登录后可以做什么,界面上有哪些变化。这种思维在所有岗位都是适用的,也很容易理解,对产品经理的意义就不细说了。

测试人员不仅用它来评审需求,找bug时要考虑是什么操作、事项、需求导致了bug以及这些东西的关联关系、影响范围等,从而进一步发现更多问题。

而且作为需求的实现者,技术人员都会有这个问题:为什么要这样做,做成了会有什么结果。产品经理是有责任回答这个问题的。其中,“为什么要这样做”要心里有数,在需求评审时被问到就要能回答。不能靠想,要有根据:

  • 用户调研
  • 统计数据分析
  • 市场调查
  • 竞品分析
  • 成功经验

还有“做成了的结果”应该把它以“目标”为第一章标题写到需求文档的前面。目标示例:

  • 解决用户购物流程中的不便
  • 给占比有27%的喜欢xxx用户增加一种选择,可以对xxx进行操作
  • 转化率至少有12%
  • 提升月活跃度10%(或到30%)
  • 提高广告月收入至300万

产品经理做需求时,应该先想好这些目标,需求是围绕这些目标来制定的。大家理解这个目标后,还能帮助产品经理想出更多更好的方案来达成。

测试思维:场景

“场景”在本文中意为多个条件共同作用的情况。下表表示的是两个条件(行为、身份)下的结果(权限)。

行为-身份-权限表 游客 普通会员 VIP会员
购物 不可以 可以 可以
看视频 可以 可以 可以
评论中发表情 不可以 不可以 可以

设想增加一个情况:已绑定微信的会员可以查看“朋友积分榜”。这就需要一个“行为-身份-微信绑定-权限表”。如果有更多条件,就不是一个表格能说明的了。合格的测试人员会把这些条件的所有交叉情况都测一遍,甚至在需求评审后就要做用例设计,把需求文档没覆盖的情况立刻指出来。

场景的本质是条件的排列组合,可以用数学公式计算出有多少可能性。产品经理不应该把这些情况推托给技术人员去想,因为最极端的情况是可能会发现某些场景无解,以致要推翻整个需求。到评审完才发现这些问题就晚了,耽误了太多人的时间。

当场景过于复杂,除了要说清楚规则外,还应该写出示例来帮助理解。

用户体验思维:层次分明、重点突出

产品经理或设计师做网页设计时通常会有这些原则:

  • 方便从上到下阅读,页面不会产生横向滚动条。
  • 描述一个宏观事物的图不会跨越两屏才看完整
  • 层次分明:标题比正文的颜色更深、字号更大、字形更粗。
  • 段落内部的重点词句(一般是超链接)要使用更显眼的颜色,字形可以使用粗体、斜体、下划线等。

无论需求文档是写Word还是用Axure导出网页给技术同事看,以上原则都是适用的:帮助提升阅读效率。

还有一个问题是表格的运用。表格能让人一下看到哪里有填东西哪里是空白,但并不方便人仔细阅读所有的内容。什么时候用表格或列表,这里总结两个简单规则:

  • 表格除表头外至少有3行3列,否则用列表。
  • 如果表格写不出精确的表头来,也就是每行是不同意义的,用列表。

最后就是,写需求用Word还是Axure或两者结合,都无所谓,关键是要把事项描述清楚并且方便查阅。

思维应用

上述思维的运用,最终是为了提高需求的完善程度,避免需求本身有bug。产品经理要去学习技术知识的话,应该是要总结出更多的思维,而不是真的要会写代码。以下按照界面和交互来总结一下技术思维的关注点。

界面组件上的应用:

  • 文本框
    • 过长如何显示:换行、显示省略号
    • 如果换行和省略号都不要,就要确定文案最大字数
    • 数字保留多少位小数,四舍五入还是去尾或进1
    • 数字的显示格式,例如加逗号或加单位
    • 时间的显示格式,例如是否显示分秒,日期间用中文还是横线连接
  • 输入框
    • 默认值
    • 占位符
    • 按下回车的行为
    • 自动补全的规则
    • 可输入类型:纯数字、文本(中文、外文、特殊字符),是否密码
    • 输入限制:文本长度、小数位数、取值范围、最大最小值、是否必填
  • 选择框
    • 默认状态
    • 单选还是多选
  • 下拉列表
    • 默认值
    • 实际值与显示值的对应关系:例如界面上显示100+,实际值是135
  • 按钮:点击后的行为
  • 弹框
    • 位置:屏幕中间或中下
    • 显隐动画:时长、方式
  • 表格
    • 排序规则
  • 开关
    • 默认状态
  • 轮播
    • 是否自动换页,间隔时间
    • 是否显示分页器(“点点”或页码),是否可点击分页器来换页
    • 是否可循环
    • 是否显示进度条
    • 是否增加每页边距,边距是多少
  • 图片
    • 缩放规则,例如固定宽度、高度随原比例
  • 层级:谁可以遮盖谁

交互上的应用:

  • 点击:反馈形式(例如变色)
  • 手势(例如右滑后退)
    • 距离
    • 速度
    • 方向
  • 界面切换
    • 动效:时长
    • 窗口、屏幕改变大小(横竖屏切换)的布局规则
    • 已输入的数据是否保留
  • 关联关系。例如选中后会立刻改变其它控件的状态

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件架构设计

软件架构设计

温昱 / 电子工业出版社 / 2012-7 / 39.00元

《软件架构设计:程序员向架构师转型必备(第2版)》围绕“软件架构设计”主题,从“程序员”成长的视角,深入浅出地讲述了架构师的修炼之道。从“基础篇”、到“设计过程篇”、到“模块划分专题”,《软件架构设计:程序员向架构师转型必备(第2版)》覆盖了架构设计的关键技能项,并且对于架构设计过程中可能出现的各种问题给与了解答。一起来看看 《软件架构设计》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具