1.4 需求规格说明
软件需求规格说明亦称软件需求规约或功能规格说明,可以说是需求工程最终产生的结果。所谓需求规格说明是软件所应满足的全部需求,并可用文档的方式完整和精确地陈述这些需求。需求规格说明是项目相关人员对将要开发的软件系统所达成的共识,是进行系统设计、实现、测试和验收的基本依据,也是整个软件开发过程中最重要的文档[11]。需求规格说明同时代表了权限的移交点:客户对需求规格说明的说明内容拥有最终发言权,而开发人员则需根据软件需求规格说明实施软件系统的开发。因此,最终开发出的软件系统是否能真实、全面地满足客户的要求,取决于需求规格说明是否真实、完整和一致地反映客户的真正意图。
需求规格说明应精确地描述一个软件系统必须提供的功能和性能,以及所要考虑的约束条件与限制。因此,需求规格说明也可以说是集成了13节中所定义的所有软件需求,并使用某种描述语言如自然语言按照规定的书写格式编写的文档。关于需求规格说明的模板和具体内容,将在后面给予详细说明。
需求规格说明在软件系统开发中起着十分重要的作用,但要把用自然语言表达的需求完整无误地表达出来并不是一件容易的工作。因为各人的理解不同,即便是同一个人,他在不同的时间也可能产生不同的理解。因此,作为一个质量较高的需求规格说明,通常应满足如下的特征[12]。
完整性。每一项需求必须将所要实现的功能描述清楚,以便开发人员获得设计和实现这些功能所需的必要信息。
正确性。每一项需求都必须准确地陈述其要开发的功能。做出正确判断的参考是需求的来源,如用户或高层的系统需求规格说明。如果软件需求与对应的系统需求相抵触,则是不正确的。只有用户才能确定需求的正确性。这就是一定要有用户的积极参与的原因。
可行性。每一项需求都必须在已知系统和环境的权能和限制范围内是可以实施的。为避免不可能实现的需求,最好在获取需求(或收集需求)的过程中,始终有一位软件开发小组的成员与需求分析人员或考虑市场的人员在一起,由他负责检查技术的可行性。
必要性。每一项需求都应把客户真正需要的和最终系统所遵从的标准记录下来。“必要性”也可以理解为每项需求都是用来授权你编写文档的“根源”。要使每项需求都能回溯至某项客户的输入,如使用实例或别的来源。
划分优先级。给每项需求、特性或使用实例分配一个实施优先级,以指明它在特定产品中所占的分量。如果把所有的需求都看作同样重要,那么项目管理者在开发、节省预算或调度中就丧失了控制自由度。
无二义性。对所有需求说明都只能有一个明确统一的解释,由于自然语言极易导致二义性,所以尽量把每项需求用简洁明了的语言表达出来。避免二义性的有效方法包括对需求文档的正规审查,编写测试用例,开发原型以及设计特定的方案脚本。
可验证性。检查每项需求是否能通过设计测试用例或其他的验证方法。如用演示、检测等来确定产品是否确实按需求实现了。如果需求不可验证,则确定其实施是否正确就成为主观臆断,而非客观分析了。一份前后矛盾、不可行或有二义性的需求也是不可验证的。