在高质量软件项目中,需求工程的作用举足轻重。统计表明,软件缺陷一半以上的原因来自于需求分析中的问题。仅凭这个数字,就足以告诉我们提升需求开发水平是多么重要,这正是在软件项目中,我们需要对需求分析下功夫的最大原因。
所谓需求,就是构思未来的产品,说明产品应该是什么样的,定义开发的行动准则,并且定义产品的验收标准。
大部分在软件开发中遇到的问题,都是由于收集、编写、协商、修改产品需求过程中的手续和作法(方法)失误带来的。出现的问题包括:非正式信息的收集,未确定的或不明确的功能,未发现或未经沟通的假设,不完善的需求文档,以及突发的需求变更要求。这一切都告诉我们,必须深入地研究和建立良好的需求工程方法。
需求是站在用户的视角看问题,而设计是依据需求,站在设计人员的视角看问题。
这种视角的变化形成了分析与设计工作风格上有很大的不同。也就是说:需求专注于要做什么,而不是怎么做;设计专注于怎么做,但它的依据是需求。事实上这种工作风格的不同,本身也反映了企业降低机会成本的追求。
良好需求的特点
把所有的需求集成起来,就成为“需求规格说明”。从整体文档编写的角度上看,好的“需求规格说明”还应该具备如下特点:
完整性:不能遗漏任何必要的需求信息。注重用户的任务而不是系统的功能将有助于你避免不完整性。
一致性:一致性是指与其它软件需求或高层(系统,业务)需求不相矛盾。在开发前必须解决所有需求间的不一致部分。
可修改性:在必要时应维护与修订“需求规格说明”。这就要求每项需求要独立标出,并与别的需求区别开来。每项需求只应在“需求规格说明”中出现一次。这样更改时易于保持一致性。
可跟踪性:应能在每项软件需求与它的业务和设计元素、源代码、测试用例之间建立起准确的跟踪关系。
对于严肃的工程活动而言,良好的需求不但是必须的,也是项目成功的根本保障。
软件工程历经数十年的发展,已经形成了一些行之有效的标准,比较典型的是 GJB5000A,这个标准是目标驱动的。研究标准的意义是使我们的思考有是非、有依据,更可以让我们学会需求开发的途径,以及明确在需求开发中需要考虑哪些问题。
在 GJB 5000A 中,需求与整个工程过程的关系如下图所示。
要提升需求分析的水平关键之处在于:发现和纠正缺点要比处处做的好容易。因此我们需要直面现实中的问题,更深入的提炼出一些东西,去寻找解决问题的方法。凡事都有逻辑,我们需要理解一种体系和内在的逻辑关系,需要提炼出一套思想和方法论。