【IT168 技术文章】
需求分析的重要性,笔者相信已经深入人心。如何做好需求调研,大家说起来也已经一套一套了。笔者这里从另一个层面来谈谈需求分析,即如何来判断你需求是否可以过关。笔者试图通过三个问题,来检验你需求分析的质量是否可以站得住脚。
问题一:需求是否已经考虑到了所有的应用场景?
CIO在需求调研时,务必要根据企业的实际情况来进行需求的描述。也就是说,在需求报告中,不要只简单的描述用户所需要达到的结果,而是还要定义清楚实际的应用场景,而且要全面。因为往往不同的应用场景会导致不同的解决方案。
如CIO通过调查发现,员工需要根据销售订单来对物料进行追踪。也就是说,员工希望能够在系统中看到,某帐销售订单是否已经下了采购订单;采购订单上的预计交期是多少;现在到料的情况如何,等等。
这个需求描述是否够详细了呢?笔者以前认为,这已经非常的详细。因为我把我们需要什么样的结果都一一列举出来。但是,随着几年CIO工作下来,现在再回头看看,才发现这个需求描述很难过关。因为其虽然描述了我们所需要达到的目标,但是,他没有反应出企业的实际应用场景。笔者认为,在这个需求描述中,我们至少还需要说明如下问题。
一是当企业正常下采购订单,即从销售订单生成采购订单,然后再从采购订单生成收货单。在这种应用场景下,那么该如何来收集统计这一连串的信息。因为他们彼此之间是前后有关联的,实现起来比较方便。
二是若企业存在手工下订单的情况,该如何来显示这个关联特性。如企业在维护采购订单的时候,因为不小心把某张采购订单删除了;后来又手工补了一张采购订单。此时,手工补的采购订单与销售订单就会失去联系。根据销售订单就无法追踪到这种采购订单的信息。CIO在收集需求的时候,也要把这种情况反馈给软件实施顾问或者程序员,让其能够预先找到措施来应对这个问题。其实,只需要在采购订单单头设立一个字段。当用户手工开立采购订单的时候,去关联销售订单即可。实现起来很发现。但是,若CIO不把这个企业会实际碰到的情况告诉给他人的话,则他们就不会寻找可行的解决方案。那么当企业实际遇到这个问题时,企业就束手无策了。
三是是否会存在不下采购订单的情况。如可能某个物料有库存,所以系统在考虑物料需求计划的时候,就没有考虑到这个物料。所以,在生成采购订单的时候,当然也不会把这个物料考虑进去。此时,就会引发另外一个问题。因为根据上面的需求描述,这个需求是按照销售订单、采购订单、物料收货单这个链条下去的。若没有采购订单的话,这个中间的链条就断裂了。那么当用户去查询的时候,就会有这个疑问:为什么没有这个物料呢?是否是采购忘记下采购订单了呢?不少企业出于安全生产的需要,往往会备有安全库存。当安全库存没有降低到采购点的话,则就不会发采购订单。CIO在需求分析的时候,若没有把这个应用情景描述出来,则这个需求分析仍然是不健全的。到时候程序开发人员设计的解决方案,仍然不能够涵盖企业所有的应用场景。
所以,除非CIO能够拍拍胸脯自信的说,所有已知的应用场景都已经在需求描述中一一列举出来。否则的话,笔者劝各位CIO,还是暂时不要把这份需求报告拿出来丢人现眼为好。
问题二:需求描述会给其它人带来歧义吗?
若CIO收集的需求描述,给不同的人看会有不同的结论,那么这个需求描述就不会有多大的实用价值。或者说,这些需求分析还是不要做的好。因为此时别人若按照你的需求描述去编写解决方案,那么反而是在做无用功。
那该如何减少这个需求描述所带来的歧义呢?笔者认为,各位CIO,可以借鉴以下的做法。
一是尽量从用户的角度来考虑问题。当我们从用户那边把需求收集过来,然后需要利用自己的语言来对问题进行描述。若在这个描述的过程中,CIO站在自己的角度去思考,则往往会引起一些不必要的歧义。笔者认为,CIO在整理需求的时候,最好能够站在用户的角度去思考问题。同时,需求整理好后,最好能够把自己整理的需求再让用户去确认一遍。让他们审核一下,看看书面需求分析与他们的想法是否有出入。
二是在需求描述中,最好能够配有实际案例。有时候,有些需求确实很难描述清楚。或者因为语言组织的不好,以及文化、工作背景的不同,不同的人看需求报告确实会产生不同的理解。为此,笔者认为,最好能够在需求中配上具体的案例。通过案例描述来把需求认识的歧义降至到最低。如当CIO描述“销售订单来对物料进行追踪”这个需求时,可以配上具体的案例。例如企业有一张销售订单,分别生成四张采购订单,需要购买A、B、C、D四个物料。其中,A物料因为仓库中有库存,所以采购没有下采购订单。而第二张采购订单因为采购人员操作不小心删除了,其后来手工补了一张采购订单。C物料一半用库存,一半采购。D物料后来利用其他物料来代替。把企业用户碰到的实际情况一一利用案例描述出来。如此的话,无论是谁,看到这个案例也就明白了需求中具体描述了什么内容。很明显,通过这个案例描述可以在很大程度上消除CIO与程序员或者外部实施顾问认识上的分歧。
所以,笔者建议,CIO在巴自己的需求报告拿给别人看的时候,先要扪心自问,看看这份需求报告会不会十个人看得出十个不同的结果。若不幸真的是如此的话,那么CIO就应该想出一些可行的措施,把这个歧义降低到最低。
问题三:是否详细定义了可靠性?
在考虑需求分析报告是否可以过关的时候,还需要考虑一个问题,就是要衡量一下这个需求的可靠性问题。如这个需求执行过程中会不会失败,以及失败会否给其他业务带来什么样的不利后果。同时,当失败时系统以何种形式来告知管理员这个失败的结果,等等。
如仍然是上面这个需求。现在在根据销售订单生成采购订单的时候,由于一些原因可能销售订单无法按物料清单展开而正确生成采购订单。如可能系统中某个物料有库存,所以某个物料就没有发生采购;又如可能某个原材料没有定义供应商,所以系统无法为这个供应商生成采购订单等等。
CIO在需求分析的时候,应该预见这些情况可能会发生。那么,CIO就需要从程序的可靠性出发,想出一些应对的措施。如因为有库存而没有下采购订单,这是属于正常的作业。但是,此时系统应该以某种形式来告知用户这种情况。如在生成采购单的时候通过日志信息记录等等都是可以的。而因为没有定义供应商而导致采购订单无法下达,此时,就需要系统通过非常明显的方式告知企业用户因为什么什么原因而导致采购订单无法下达。总之,当因为一些意外情况,导致某个流程被意外中断时,无论是合法的还是不合法的,系统都要能过以明文的形式告知用户。否则的话,根据这个需求开发的解决方案的可靠性就会受到质疑。
同时,这个提示信息业要尽量的让人看的明白。如笔者发现有些系统在设计上确实也考虑到了这个可靠性问题,但是他们没有更进一步,让用户头疼不已。如因为没有供应商而导致无法正常生成采购订单的时候,系统只提示“采购订单无法生成”。即没有告诉用户因为什么原因导致采购订单无法生成;同时也没有告诉用户哪些原材料无法生成采购订单。如此的话,用户就需要从头开始去查找错误的原因。其实,到底为什么无法生成采购订单的原因,在后台程序判断中都会有所体现。只需要用户把判断的参数,如某个编号的零件供应商ID为空等等信息反馈到前台。那么系统管理人员凭借这条信息就可以非常容易的定位错误信息。并在最短时间内把问题解决掉。
所以笔者认为,CIO在做需求分析的时候,除了要做好具体的需求描述之外,最好还要从这个可靠性出发,考虑发生意外事故时所需要传递的故障信息、错误检测以及恢复策略等等。并且,这些信息要能够帮助用户迅速定位并且解决问题。即要反映出问题发生的原因而不能够只是结果。