登录是用例吗?
这个问题是没有标准答案的,但是,不同情况下怎样得到最佳答案,有严肃的思考方法,只不过思考起来并不容易!
我们先来看一些定义:
系统用例:目标系统能够为执行者提供的、涉众可以接受的价值。
执行者:在目标系统外,与该系统发生功能性交互的其他系统。
涉众:目标系统影响其利益的人。
价值:涉众期望和系统承诺的平衡点。
(业务用例-把上面的“系统”替换成“组织”即可。)
如图1所示,就像演戏一样,演员(Actor)和目标系统在台上表演,观众(Stakeholder,涉众)在台下看。观众按照他们的地位高低排排坐。演员在台上该表演什么是由观众的口味决定的,先照顾前排的观众,如果有余力,再照顾后排的观众。
图1 演员(执行者,Actor)在台上表演,观众(涉众,Stakeholder)在台下看
用例比其他一些需求技能的思考要难,难就难在“价值”两个字上。
(1)
我们就从“经典”例子——ATM出发。
出现在各种书和文章中的ATM用例如图2,图2是正确的。
图2 正确的用例
(2)
我们把图2中的“取现金”换成“登录”,其他不变,得到的结果如图3。
图3 错误的用例
图3是错误的。因为储户对ATM的期望以及ATM的承诺不只是登录。
*当然,ATM不是人,不会“承诺”什么。“承诺”的意思是:如果ATM没做到这个地步,涉众就有理由骂ATM是废物。
(假设储户在ATM取现金是为了去买彩票,买彩票的目的当然是为了中大奖,那么把ATM的用例改成“中大奖”合适吗?违反了哪一条?)
可以用“叫卖”的方式来帮助思考:
如图4,ATM推销自己“来啊!我这里能登录啊!”,然后储户就说“哇,真棒,这正是我想要ATM提供的价值,好,我去用一用这个ATM”。
这不正常!
图4 ATM不能这样推销自己
其实储户巴不得不用登录,直接伸手进去拿钱多爽!只不过考虑到其他涉众的利益,在去往“取现金”目标的道路上,储户得经历一些“磨难”。
也可以像下面这样思考:
张三要出差,发现身上没现金,到ATM那里取现金,达到这个目的后,张三离开ATM忙别的去了。
客户给张三卡里转了5000元,电话请张三查收,张三到ATM那里看看自己的卡当前余额,达到这个目的后,张三离开ATM忙别的去了。
以上两个场景是正常的。“储户→取现金”、“储户→查余额”是ATM正确的用例。
而下面的场景就不正常:
************,张三到ATM那里登录,达到这个目的后,张三离开ATM忙别的去了。
*可能有人会提到,有的ATM在登录完毕后就出现张三要看的账户概要信息,这时“登录”算用例吗?仍然不是,张三期望达到的目标是"查询账户概要"(同理,他可能巴不得不用登录就能达到),用例名应该是这个。
(3)
那么,什么时候登录可以成为用例呢?
我们可以改变一下目标系统。
如果银行有新规定,为了防疫,储户要先经过一道门禁,验证身份并确认无疫情风险后,才能进入银行区域办各种业务。如果以门禁为研究对象,把图3的目标系统“ATM”换成“门禁”,得到的图5是正确的。
图5 正确的用例
储户没有期望门禁提供“取现金”的价值,门禁也没有承诺这样的价值,只承诺了“登录”(严格来说应该是“验证身份”)的价值。
(4)
我们再做一个改变。
图5的“储户→登录”用例,步骤可能如下:
1 储户提交指纹信息
2 系统计算储户的疫情风险
3 系统……
可以看到,“提交指纹信息”只是门禁的“储户→登录”用例的一个步骤。
但是,如果以门禁上的指纹扫描器为目标系统,“提交指纹信息”就可以成为一个用例。涉众对指纹扫描器的期望就是这样么多。涉众不会期望指纹扫描器能验证身份、判断疫情风险。指纹扫描器能做到的也就是这么多——能通过它提交指纹信息即可。
也就是说,把图5中的“门禁”改为“指纹扫描器”,“登录”换成“提交指纹信息”,得到的图6是正确的。
图6 正确的用例
在市场中,张华生产ATM,李萍生产门禁,我生产指纹扫描器卖给李萍的门禁当零件——我们都有光明的未来。
(5)
接下来,我们再对“储户”动一下手脚。
回到图2中ATM的例子,可能有人会“较真”:
什么,你说没有人会登录了就离开?我今晚下班就去ATM那里登录一下就走人给你看!
或者再极端一点,像下面这个“插卡就离开”的:
电视台节目主持人小崔经受着失眠的痛苦,经常精神恍惚。有一天晚上他在ATM取现金时,居然恍惚到把银行卡往ATM一插就走开了。回家之后,发现自己可能会丢钱,心里居然生出一种舒适感,过一会就安然入睡了。
小崔尝到这个甜头后,干脆睡不着时就跑到楼下的ATM插一张卡,然后立刻回家,酣然入睡。
在小崔看来,千金难买安稳觉,仅仅在ATM上插卡就离开,是“有价值”的。
请问:如果世界上确实有小崔这样的“储户”,那么插卡是ATM的用例吗?
仍然不是。虽然ATM无法阻止小崔这样用,但ATM并不“打算”面对小崔这样的“储户”这样来“卖”这样的价值。图2的“储户”说的是正常人理解的“储户”,不是小崔这样的。
同理,球迷在ATM上刻字“**永远争第一”、“**是冠军”,奥特曼拎起ATM当武器和怪兽搏斗……。这些“用法”都不是ATM的用例。
因此,图7是错的。
图7 错误的用例
当然,不排除有厂家看到“类小崔人群”的痛苦,在剖析背后的心理之后,制造出面向“类小崔人群”的助眠“ATM”。这已经是有别于普通ATM的另外一款产品了。
这时,图8就是正确的。
图8 正确的用例
(6)
我们继续换执行者。
假设将来银行推出一种服务,允许出行不便的残疾人派他所养的机器狗代替他去ATM那里取现金。(啥?这时代都机器狗了,还用现金啊?法律规定一定要用现金呗,不行吗?)
机器狗按照主人的预设指示到了ATM那里,在某个位置把身体接入ATM,敞开背部的盖子,传输账户信息和取款信息,ATM验证和记录信息后,释放钞票,掉入机器狗身体里。
这时,和ATM交互的是机器狗,不是残疾人储户。用例图如图9。
图9 机器狗在ATM取现金
如果在机器狗传递信息后,ATM验证通过,然后就停止服务。机器狗会不会不开心?不会!因为它是机器,无所谓开心不开心。
不开心的是储户。
之前几张图,储户亲自上台表演,是ATM的执行者,而且因为储户是人,所以储户也是ATM的涉众。
这一次,储户没有像前面几张图一样上台表演,不是ATM的执行者,但他依然是涉众,在台下密切关注着台上的表演。如果表演没有按照他的期望进行,他会感到失望,如图10。
图10 储户没有上台,但他依然是重要的涉众
(7)总结
以下文字摘自《软件方法》第5章:
用例之前的许多需求方法学,把需求定义为思考系统“做什么”,用例把需求提升到思考系统“卖什么”的高度。
这种思考是非常艰难的,因为它没有标准答案,只有最佳答案。要得到这个最佳答案,不能靠拍脑袋,必须揣摩涉众。如果建模人员总是习惯于从自己的角度想问题,那么让他思考“什么是系统应该提供的价值”有时甚至会让他痛苦到想要逃避,或者干脆用功能、特性等模糊不清的词语代替。
但是逃是逃不开的,生活中处处都需要这样的思考。
人们求职、求偶不就是要搞清楚“我”这个人肉系统应该卖给谁,卖什么服务的最佳答案吗?我会吃喝拉撒,你不愿意为此给我报酬;你想要长生不老,我又提供不了这么大的价值。要找到一个我能干好而且你又乐意买单的平衡点,确实很难。
例如,“程序员”这个人肉系统为它的老板提供的用例是什么?安装开发工具?编码?为公司赚钱?
答案是编码,这是老板对程序员的期望以及程序员可以提供的承诺的平衡点,或者说,这是程序员能卖、老板愿意买的价值。
程序员不能因为装了个Visual Studio就理直气壮向老板要报酬,老板不给就生气;程序员按要求编出了代码,老板就不能因为销售部门不给力或经济崩溃导致赚不到钱而责怪程序员。
正确和错误的用例如图5-14所示。
图5-14 程序员人肉系统的用例
程序员如果摆错了自己的位置,没有好好完成编码的本职工作,反倒是动不动向老板递上为公司赚大钱“万言书”,对公司的发展方向大放厥词,老板是不会喜欢的,因为他没有期望从程序员身上“购买”这个服务(用某知名企业领导人的话说就是:有精神病就送医院,没精神病就辞退)。
我们常说,做人要得体,就是要准确认清自己能提供且应该提供的“用例”。同样,要做一个“得体”的软件系统,用例思维是很有帮助的。
(8)其它参考
*《软件方法》第5章,以及第6章的ATM涉众利益部分,并把自测题做到全对。
*《软件方法》勘误:
http://umlchina.com/book/errata2ed.html
https://mp.weixin.qq.com/s/Xj9YoZzuR-4loMXwBubEag
*UMLChina建模竞赛题分卷自测(11套110题)
https://mp.weixin.qq.com/s/GDfIMgdZ8VWWmrNF-axmsw
*《CTO也糊涂的常用术语:功能模块、业务架构、用户需求、文档、过度设计……》关于“用户”这个词为什么不好的内容。