需求分析与功能设计 案例分析

注:本实例绝非虚构,针对初级开发者,改变程序员=打字的困境

需求分析

背景:证书打印功能,能够打印3份证书:正本(机构名称、住所)、副本第一页(编号、发证机关)、副本第二页(机构名称、法人)

  1. 第一次需求描述:需要个能够打印证书的功能
  2. 第二次需求变更:经营范围固定为某段文字,不能修改,自动生成证书编号
  3. 第三次需求变更:需要在证书打印功能中增加打印记录功能,要求1天完成
  4. 第四次需求变更:打印第一页时填写的内容,能够在第二页复用,要求尽快完成
  5. 第五次需求变更:增删改查打印内容,之后根据填写的打印内容打印证书,并能导出打印内容列表(作为绩效)

问题总结:

  1. 每次都是听客户两句话就要求开发完成功能,未深入挖掘需求
  2. 第五次需求完成时间比第三次需求要求时间晚2周,而每次要求都是紧急,导致无法全面规划功能设计
  3. 第五次需求完全覆盖第四次需求,浪费开发资源

解决方法:

  1. 充分与客户沟通,深入分析客户需要,完善需求。参阅 写出一份有意义的需求文档
  2. 尽量争取合适的开发时间

功能设计

在需求挖掘不够充分,描述不清时,开发人员有责任通过自己的主观分析来引导需求完善

此次分析,依据:第三次需求变更

明确目地

第三次需求变更,可以设想出两种不同的目的:

  1. 客户是希望知道谁在什么时候打印了什么,打印了多少次
  2. 证书需要每年更换,第二次打印希望能够复用上一次的打印数据

不同的目地有不同的设计思路

目的一:关注于什么人什么时间打印了什么;此时要注意:打印错误如何标记; 目的二:关注于如何减少用户的工作量;此时要注意:是否可以结合 机构档案、机构年审功能 来处理 证书打印功能;

本案例,目的一与目的二不冲突。完全可以同时实现,但功能实现的时间要求有限,同时也没必要完成客户不需要的功能,所以选择哪个方向,应继续与客户沟通。

错误的方向,走的越远,错的越远。

设计分析

背景:选定实现第一个目的

第一次设计

打印记录表结构:机构名称、住所、编号、发证机关、机构名称、法人、打印时间、打印人

功能:没点击一次打印,增加一条打印记录

缺点:3个不同的打印,能够填充的字段不同,记录看起来总是不完整的。

第二次设计

表机构修改为:打印人、打印内容、打印时间

功能修正:将所有的打印数据整合为一个字段-打印内容

第三次设计

表结构修改为:机构名称、打印人、打印内容、打印时间

功能修正:将机构名称独立出来,作为数据整合的基准,比如:要查看某个机构的所有打印记录

缺点:实际上3份打印内容,才算一次完整的打印记录,现在的设计无法体现这个概念

总结

iphone发布前,进行过无数次的设计修正,那可是世界顶级的设计师,而我们每次写代码前都是不加思索,错误百出,为何不在开工前先想好呢?无论你是什么等级的工程师,请在编码前,将自己的设计思路推翻两次以上

代码组织

此次分析并不涉及代码组织的分析,为了突出代码组织的重要性,在这里再次说明请在编码前,将自己的代码组织思路推翻两次以上

案例:材料管理是我们公司最有技术能力的人独立完成的项目,此人熟知各种技术、能够解决各种疑难杂症,但是这个项目却久经维护,依然破烂不堪,让人头痛。代码是需要组织的,不是拼凑起来就管用。能够驾驭万行代码才是真技术