无痛需求文档 Part.2

Part.2

这个系列的文章只谈需求文档,不是技术说明书。总是有人会把这两者弄混,我不知道标准的术语是怎样的,但是当我使用这些术语的时候我是这么理解的:

需求文档是用来从用户的角度来描述产品是如何运作的,它不关心你是如何实现的,在意的只是产品的特性。它指定的是程序内的各种功能和界面。

技术文档是用来描述程序的内在实现,讲的都是数据结构、数据库模型、编程语言和工具的选择和算法等。

当你全面地设计一个产品的时候,最重要事情就是弄好用户体验。界面都显示什么内容,内容如何运作,它们的作用是什么。之后你关心的是怎么从一个界面跳转到另外一个界面。当你还没决定产品做成什么样子的时候根本没必要讨论要使用什么编程语言。在这一系列文章里我只讨论需求文档。

我写了一个简短的需求文档样例来让你看看一个好的需求文档应该是什么样子的,在我们继续说下去之前,你先去看看这篇文档:链接

你看了没?

切,你才没看,现在去看:链接,然后再回来,之后我们可以继续谈谈一份好的需求文档里应该有的和不应该有的东西。我等你,谢谢

(耐心等待中...(作者好烦…))

嗯,很好。你回来了。

下面就是一些我会放在每篇文档里的东西。

一份免责声明。纯属自我防御,如果里面里面有段话写着:“这篇文档没有完成”,别人就不会跑到你办公室然后把你头咬掉(…)。随着时间流逝,当你的文档要完成的时候,你就可以把这段话改成:“以我的能力来讲,这篇文档是完成了,但是如果我忘了什么的话,请告诉我~”,同时也提醒我,每一篇需求文档都需要:

一个且只有一个作者。一些公司认为需求文档应该由一个团队来编写。如果你试过团队写作的话,你就会知道没有比这更糟糕的折磨了。你的需求文档应该只是归属由一个人编写。如果你有一个大项目,那么就把这个项目拆分成几个部分,然后每个部分由一个人单独编写。有些公司可能认为把一个人的名字写在文档上面太自我主义和不够团队合作。无稽之谈(作者继续激动)!人们应该拥有和负责他们编写的文档。如果文档里有了什么错误的话,文档里要有一个名字来负责修复文档里的错误。

使用场景。当你设计一个产品的时候,你需要在脑中有一些用户会如何使用你的产品的场景。否则你会设计出一个不适合现实世界使用的产品。从你产品的用户挑选,想象一个虚构的但是却很典型的用户以很典型的方式使用你的产品。这就是使用场景所要包含的内容。你的场景越生动逼真,你为你真实或者想象中的用户设计产品的工作就会完成的越好,这也是为什么我会在情景中加入很多虚构的细节。

非目标需求。当你和团队一起构建一个产品的时候,每个人都有他们心爱的特性,没了这特性他就活不了(…)。如果把这些特性都实现的话,会花费无限的时间和太多的钱。你必须开始挑选特性,最好的办法就是在文档中有一个“非目标需求”的部分,也就是那些我们不会做的事情。非目标需求可能是一个不要的特性,或者是一些更普遍的准则(比如“这个版本的性能不重要,只要能运行就行,慢点没关系,在下个版本再进行优化”)。这些非目标需求可能会引起一些争论,但是越早地理清这些问题越好。

总览。就像是你文档内容的总纲,它可以是一个简单的工作流或者是总体结构的讨论。大家都会阅读总览来对你的产品有个宏观感觉,之后那些细节才会更有说服力。

细节,细节,还是细节。终于来到细节这一步了。大部分人会跳过这部分,直到他们需要知道特定的细节。在需求文档里,细节是最重要的部分。你会发现在需求样例中,对于细节发狂的追求让我列出了登录界面的各种错误情况。如果邮箱不合法怎么办?如果密码是错误的怎么办?所有的这些情况都对应着真实的代码应该怎么写,更重要的事,这些情况都是一些人一定要做的决定。总有人要决定对于丢失的密码应该是怎样的策略。如果你不决定,那么就没办法写代码。需求文档需要列出这些你做出的决定。

未确定问题。在第一版的需求中留下一些未确定的问题是可以接受。在我写第一版初稿的时候,我总是会有一些不能确定的问题,不过我会标记出他们(使用一种特殊的格式,这样可以方便我搜索),之后在合适的情况下讨论下可能的选择。随着程序员们开始工作,所有的这些问题都要被逐一解决(你可以觉得让程序员先开始做一些简单的内容,然后你之后再解决这些未确定的问题是可以的。坏主意。因为在程序实现你的设计的时候,总会有更多的问题出现。到时候你解决新的问题的时间还不够,又怎么能解决之前的老问题?除此之外,你解决重大问题的方式很有可能会对实现功能的方式产生很大的影响)。

注释。当你在写一篇需求文档的时候,记住你有各种各样的观众:程序员,测试,UI等等。在你写文档时你可能会想到只对于其中某一类人有用的信息。比如说,对于程序员有用的描述技术实现的信息我会写成“程序员注释”,UI和测试都不会看这些内容,只有程序员会看。我的需求文档里经常包含各种“测试注释”,“UI注释”,“程序员注释”等等。

需求文档要活着。一些开发团队有一种“瀑布流”心态:我们把程序都设计好,写份文档,打印出来,甩程序员脸上,然后回家。对于这种情况,我只想说“呵呵呵呵呵呵呵呵呵!”。也就是为什么需求文档名声这么差,很多人跟我说过“需求文档根本就没用,因为压根就没人按上面的来,需求总是不及时更新并且永远不会反映到产品上”。不好意思,可能你们的需求是不及时更新并且反映到产品上。但是哥的需求文档是经常更新的好么(…)。在产品开发的过程中或者有新的决定的时候,我会持续的更新需求文档。需求文档总是反映出我们对于这个产品应该如何运作的理解的集合。只有在所有的代码都写完的时候,我们的需求文档才会被冻结。为了让别人更轻松点,我不会每天都重复发布文档,我会在服务器上放上一份最新的,这样大家就可以照着这个做东西。在一些里程碑的时候,我会把有修订标记的需求文档打印出来给他们看,这样大家就可以只看有修订的地方,而不用把整个文档再看一遍了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,028评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 当graph集群扩容时,数据会自动迁移达到rebalance的目的。具体的操作步骤如下: 假设1:旧的graph集...
    laiwei阅读 3,916评论 2 7
  • 沿着沙滩折返的允泺三人很快便遇见了正在玩沙滩排球的沐雨柔等人,令人意外的是,米菲这丫头竟然也参与其中,与南宫忧组队...
    考拉凶猛阅读 347评论 0 0
  • Espresso 自动化测试使用 Espresso是一个Android UI测试框架,由三部分组成 ViewMac...
    Mark_Liu阅读 4,298评论 4 12