怪论:东北公司用用例做需求,反映了东北互联网落后?

潘加宇

有位同学给我发了一张截图:

因为无知而发表的各种奇谈怪论见得多了,但“东北软件公司用例用得多,侧面反映了东北互联网落后”这样的论调还是第一次见到,而且这是一个开班授课的“老师”,有必要针对这个图片好好说一下。


一、原型是个什么东西

图片中提到Axure,这是一款原型工具,说明这位“老师”是很推崇原型的。

实际上,这种现象我在《软件方法》第6章已经写了,许多需求岗位的人员并没有掌握相关的需求技能,“原型”往往是他们唯一能想到的东西。

图1 《软件方法》第6章截图

原型不是需求,只是用来和某类涉众沟通的需求视图。这类涉众和系统直接交互,需求人员可以通过原型和涉众交流他的那一部分工作。

从平时的工作和生活经验我们可以知道,和系统有直接交互的涉众(也就是所谓的人类Actor——“用户”),有很大的概率是地位比较低的涉众。你想想,整天和电脑、手机打交道,搞得颈椎腰椎毛病一大堆的人,多半不是什么大人物,而是打工仔、屌丝居多。

用原型和一线工作人员交流还可以,和大领导也用原型交流?——“领导,我们打算做这些功能,我一个一个演示给你看,第一个,点这里,这里,第二十个,点这里,这里……”,领导关心这些吗?

这样做带来的风险是只关注所谓的“用户”,而忽略了在台下、在幕后看戏的地位更重要的其他涉众。

对于早期某些针对个人的、很“单纯”的互联网系统,有可能重要的涉众只有“用户”,那么风险小一些,但随着互联网的成熟,互联网系统已经变成了一个一个的行业系统,涉众也越来越复杂,只关注“用户”是远远不够的。

另外,原型里面画什么?不掌握相应的业务建模和需求技能,也只能拍脑袋瞎碰壁,不会因为你用了Axure,原型的内容就会从天上掉下来。

最后,系统的界面(接口)不只有平面图形,还有字符界面,声音界面、远程调用接口等,甚至有的系统都不不需要直接和人交互的,这些类型的系统难道就不用做需求了?

关于为什么原型不能取代需求,更多内容可以看我写的这篇文章:

[答疑]同事认为写需求规约不如画界面直接,https://mp.weixin.qq.com/s/wuPH2jmzuVaCElmPSgVtFQ


二、用例规约是更好的PRD

图片中提到“并辅助PRD”,看来“大饼老师”也知道需要一个PRD(Product Requirements Document,产品需求文档)。

用例规约就相当于PRD,它是以用例为核心来组织需求内容的需求规约,有了用例规约,就不需要其他的需求文档了,因为需求该表达的内容都已经在用例规约里面,而且比起以前的需求清单等表达方式,其内容组织更加合理。

用例的需求组织方式是分级的,从用例到路径、步骤、约束,需求的稳定性越来越低。这样,不同稳定级别的需求就分开了。

图2 用例规约的组织方式

这样,碰到“需求变更”就不用人心惶惶了。平时遇到的大部分“需求变更”发生在补充约束级别,例如输入会员信息时加个微信字段(字段列表变了)、调整结账时的打折规则(业务规则变了)。


三、用例比原型、PRD“老”吗?

在图片中,“大饼老师”说“老一辈”用用例,侧面反映落后,互联网用原型和PRD,隐含的意思是原型和PRD是“新”的,用例是“老”的。

其实原型和PRD比用例要“老”得多。

过去制造业中的各种木模,不就是产品原型吗?产品经理、产品需求文档等称呼在软件业出现之前就已经在使用(网络有人说起源于P&G(宝洁),但没有找到更确切的证据)。

从什么时候开始在软件业中使用,虽然也很难找到真正的起源,但可以看看找到的一些资料:

1984年出版的书:Application Prototyping: A Requirements Definition Strategy for the 80's(应用原型:八十年代的需求定义策略),介绍如图3。虽然无法获得书中的内容,但从分类是计算机来看,书中说的原型指的是软件原型。

图3 来自Amazon.com的“Application Prototyping: A Requirements Definition Strategy for the 80's”介绍页面

1989年出版的书“The Digital Guide To Software Development”(软件开发的数字指南),介绍及书内页如图4,书中提到了产品经理、PRD。

图5 “The Digital Guide To Software Development”书中内容

用例(Use Case)作为一个需求用语是Ivar Jacobson 1987年提出来的,1992年才写在书里。

图6 “Object-Oriented Software Engineering: A Use Case Driven Approach”书籍封面


四、“新”的就比“老”的好吗?

姑且不论谁“新”谁“老”,“新”的就比“老”的好吗?

人们对事物的认识会不断深入,所以,已有的知识有的会被继承,有的会被淘汰。

但是要注意,之所以某些知识会被淘汰,是因为人们针对这方面的知识有了更深刻的认识,而不是因为法律规定这个知识只有"**年使用权",到时间就要强行作废。几百年前的数学、物理知识,大部分我们今天不还在继续学习和使用吗?

如果了解前人已有的成果,站在前人的肩膀上创新,得到的“新”确实超越了之前的成果,那么这个“新”是有价值的——否则,有很大概率是“伪创新”。

我给很多互联网公司的同学上过课,当讨论系统的愿景时问“凭什么你觉得人家会来用你的系统”,有的同学就说“因为我们的产品是新的!”

拜托!客户的时间和金钱是有限的,大脑每天被各种事情挤得满满当当,不会因为你这个东西 “新”就扑上去用,这个“新”东西必须表现出比现有的东西在某个方面给他带来更多好处才行。

何况,很多时候号称“创新”的东西,只是开发者自己没做过,觉得“新”而已,在客户看来并无新意。这样的同学,说你幼稚都是侮辱小朋友啊。

用例比起其他的需求方法要好一点,不是因为“新”也不是因为“老”。

用例的改进在于,把对需求的思考从“系统做什么”提升到“系统卖什么”的高度,强迫需求人员去思考“系统可以卖的价值”。

以ATM为例,“储户→登录”不是它的用例。

ATM不能这么叫卖:“来啊来啊!我这里能登录啊!”,然后储户就说“哇,真棒,这正是我想要ATM提供的服务,好,我去用一用”。

或者这样想,正常情况下观察不到这样的场景:你和储户在聊天,储户突然说“等一下,我去ATM那里登录一下”,然后登录完了就回来继续和你聊天。

而“储户→取现金”是合适的用例。

把上面的“登录”换成“取现金”,叫卖“来啊来啊!我这里能取现金啊!”、“等一下,我去ATM那里取点现金”,回来继续聊天,答案是不一样的。

图7 ATM的用例

还是ATM,下面这个思考要更难一点:

主持人小崔经受着失眠的痛苦,经常精神恍惚。有一天晚上他在ATM取现金时,居然恍惚到刚登录完毕就走开了。回家之后,发现自己可能会丢钱,心里居然生出一种舒适感,过一会就安然入睡了。小崔尝到这个甜头后,干脆睡不着时就跑到楼下ATM登录一把,回家后果然酣然入睡。在小崔看来,千金难买安稳觉,这样做是划算的。

请问:如果世界上确实有小崔这样的人,那么“登录”是ATM的用例吗?

仍然不是。因为把ATM摆在大街上的初衷不是让小崔这样的人这么用的——它根本没打算这样“卖”给小崔,即使小崔想“买”。同理,球迷喝醉了可能在ATM上刻字“国安是冠军”,奥特曼一着急可能会搬起ATM来砸怪兽,这些“用法”也不是ATM的用例。

如果有球迷找到厂家说“我挺喜欢在你们家ATM上面刻字的,我提点意见,希望你们家ATM能改进一下,让我刻字的时候省力一些,刻字的空间大一些。”,厂家会置之不理。

不过,不排除有的企业看到“类小崔人群”的痛苦,分析背后的心理后,制造出面向“类小崔人群”的仿ATM助眠专用设备,这个和面向大众的ATM是不同的产品了。

这种“买卖平衡点”思考是非常艰难的,可谓是人生难题。你想想,人本身就是一个人肉智能系统。人的一生不就是一直在思考“我”这个人肉系统应该卖给谁,卖什么服务的最佳答案吗?我会吃喝拉撒,但是没人愿意为此给我报酬;有人找我维护世界和平,我又提供不了这么大的价值。那什么是我能干好,而且有人乐意买单的最佳答案呢?有的人一辈子都没有找到。

图8 电影《功夫》截图

正是因为如此艰难,很多人在思考“什么是系统应该提供的价值”时甚至会痛苦到想要逃避,或者干脆放弃,用功能、特性等模糊不清的词语代替。


五、最后也是最大的问题-正确无用的废话

问:怎么把大象关到冰箱里?

答:第一步,把冰箱门打开;第二步,把大象装进去;第三步,把冰箱门带上。

图9 小品《钟点工》截图

好像回答了问题,对吧?可是第一步和第三步是小朋友都知道的、已经解决的问题,真正要花心思解决的就是第二步。这个回答是一个正确无用的废话。

图片中说“最终清晰、生动、精准的表达需求”,问题是这个“清晰、生动、精准”的内容怎么来的?从天上掉下来的?最难的地方当作不存在一样,这就是正确无用的废话。

很多年前,有一位网络名人,北京大学计算机科学博士说过一段话:

关于软件工程,我并不看重。我更相信人对代码的控制能力,正常人对于正常复杂程度的代码,控制几十万行代码应该是可以的;如果软件总体上有很好的结构设计,模块之间有稳定、合理的接口,那么,仅仅依靠人的脑袋,加上良好的编程习惯,即使面对大型的软件,应该也能控制。

问题来了——“很好的结构设计,模块之间有稳定、合理的接口”、“良好的编程习惯”怎么来的?从天上掉下来的?这不正是软件工程研究的学问吗?上面这段话就是正确无用的废话。

软件工程更接近于经济学而不是计算机科学。如果不具备市场竞争的意识,不要说计算机科学博士,就算是院士,针对软件工程发表的言论都有可能是错得离谱的。

类似的废话还有:

买彩票很简单,买中奖最有可能中奖的号码就行了——怎么判断哪个号码最有可能?

炒股很简单,看清涨跌趋势来买卖就行了——怎么看清趋势?

一些敏捷宣传“软件开发的关键是人!”——“人”怎么来的,从天上掉下来的?

weixinpanjiayu2.jpg