软件方法(上):业务建模和需求(第2版)
上QQ阅读APP看书,第一时间看更新

1.2 利润=需求-设计

利润=收入-成本。不管出售什么,要获得利润,需要两个条件:

(1)要卖出好价钱;

(2)成本要低。

妙就妙在,价格和成本之间没有固定的计算公式,这正是创新的动力之源。放到软件业上,我也炮制了一个公式:

利润=需求-设计

在软件开发中,需求工作致力于解决“提升销售”的问题,设计工作致力于解决“降低成本”的问题,二者不能相互取代。能低成本生产某个系统,不一定能保证它好卖。系统好卖,如果生产成本太高,最终还是赚不了多少钱。

如果需求和设计不分,利润就会缩水。从需求直接映射设计,会得到大量重复代码;如果从设计出发来定义需求,会得到一堆假的“需求”。

拿自古以来就有的一个系统“人体”来举例。人体的功能(能做什么)是走路、跑步、跳跃、举重、投掷、游泳……但是设计人体的结构时,不能从需求直接映射到设计,得到“走路子系统”“跑步子系统”“跳跃子系统”……人体的“子系统”是“呼吸子系统”“消化子系统”“循环子系统”“神经子系统”……“子系统”不是从需求直接映射出来的,需要设计人员的想象力——本例子的设计人员就是造物主了。同样,也不能从设计推导出需求:因为人有心肝脾肺肾,所以人的用例是“心管理”“肝管理”(见图1-1)。

图1-1 人体的需求和设计

水店老板要雇一个民工送水(即租用一个人脑系统),他只要求这个民工能跑能扛就行,管他体内构造是心肝脾肺肾还是一块电路板;民工找工作也要从市场的需要来找,而不是从自己的内部器官出发来找——“老板,我有心脏管理功能,你请我吧!”

很多时候我们说“本系统分为八大子系统……”,其实说的是“本系统的功能需求分为八大需求包……”需求包是基于涉众视角对系统功能分包而得到的,子系统是基于内部视角根据系统部件的耦合和内聚情况切割而得到的。

需求和设计的区别简要列举如图1-2所示,在后面的章节中再慢慢阐述这些区别。

图1-2 需求和设计的区别

高焕堂在他的书《Use Case入门与实例》中说过:用例是收益面,对象是成本面。本书基于他的思想做了扩展。