说说我们刚做的这个收银系统吧,用户要求结账时,要打印小票,并自动打开钱箱。这是原始的需求。但是我们终把它做成了这样:打印机是外部设备,可以增删和配置;打印次数可配置;打印样式可配置;打印时,要判断打印机状态,非正常状态要给出各种提示(不一一列举);钱箱可以自动打开,也可以手动打开。另外还设定了许多功能配置:如禁用/启用全部打印机,禁用/启用某个打印机,是否打印订单小票,是否自动打开钱箱,是否显示错误提示信息等等(如图)。

  我们把这个固定的需求,拆分成可配置的,这样把这个需求可能的变更已经分析的差不多了。不论它怎么变化,我们的应对都会变得从容。在前2天部署的时候出现问题了,打印机是新买的,不只是什么原因,在打印多个换行之后,会失败,不能继续打印。这个问题是我们所料不及的,因为我们测的我们这里的所有打印机,都完美打印,而新买的也是同品牌,同型号的打印机。终分析出这个问题后,我们不用更改系统,只要修改一下小票样式配置,可以完美打印了。

  小票样式设定(图):

  硬件设置(图):

  单个打印机设置(图):

  功能设置(图):

  2、系统完成之后,客户再提新需求后,要分析这个需求的深层次含义,分析客户要的到底是什么。对于一些需求,如果适合于大部分客户,而且改动很少,可以完成,那么可以在下个升级版本中集成。而对于某些非功能性的需求,改动太大,或者基本的核心功能都需要更改的话,那么不要先去急着实现,而是放置起来,等待系统需要进行大的升级或者重构时,再考虑添加。而且要防止客户滥用提需求的权力,对于一些不合理的需求,还要去引导客户,让他们理解这个功能的不合理的地方,从而重新修改需求或者放弃。