版权归原作者所有,如有侵权,请联系我们

[科普中国]-非功能性需求

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

非功能性需求,是指软件产品为满足用户业务需求而必须具有且除功能需求以外的特性,包括安全性、可靠性、互操作性、健壮性等。

简介在需求分析时,功能性需求是人们普遍关注的,但也不能忽视非功能性需求的分析,因为它所涉及的方面比较广泛。正因为如此也就往往被人们所忽视。

非功能性需求也可称之为软件开发的“约束”,这主要是因为从最简单的到最复杂的软件系统,都有反映软件系统质量和特性的额外要求,它从各个角度对所考虑的可能采取的解决方案起约束和限制作用。软件的非功能性需求主要是软件系统的性能、可靠性、运行限制等多个方面。

对于不同的软件系统,其非功能性需求不可能完全相同。具体的内容要根据需要和可能由软件和工作环境等具体情况来确定。在进行非功能性需求分析时,重要的是将精力放在那些至关重要的因素上1。

非功能性需求是随着软件系统的规模成长和复杂性增加这两个因素才逐渐成为软件工程师们的新着眼点和关注点的,早期的时候,甲方处于自身对软件技术的了解和自身对系统文件维护的方便性考虑等,对系统有了诸如:开发平台、技术流派、关键实现等等方面的要求,这被称之为“设计约束”。从甲乙双方合同的角度,设计约束也是一种需求——一种“非功能”性的需求,后来,软件的质量问题越来越突出,描述软件质量目标的要求也成为非功能性需求的一部分。于是,目前业界关于软件的非功能需求,一般就包括:质量属性要求和约束性要求2。

主要内容作为功能需求的补充,非功能需求是指那些不直接与系统的具体功能相关的一类需求,但它们与系统的总体特性相关,如可靠性、响应时间、存储空间等。非功能需求定义了对系统提供的服务或功能的约束,包括时间约束、空间约束、开发过程约束及应遵循的标准等。它源于用户的限制,包括预算的约束、机构政策、与其他软硬件系统间的互操作,以及如安全规章、隐私权保护的立法等外部因素。

非功能需求不仅与软件系统本身有关,还与系统的开发过程有关。与开发过程相关的需求包括:对在软件过程中必须要使用的质量标准的描述、设计中必须使用的CASE工具集的描述以及软件过程所必须遵守的原则等。

按照非功能需求的起源,可将其分为3大类:产品需求、机构需求、外部需求。进而还可以细分。产品需求对产品的行为进行描述;机构需求描述用户与开发人员所在机构的政策和规定;外部需求范围比较广,包括系统的所有外部因素和开发过程3。

指标非功能需求其主要指标为:

1)观感需求(界面需求)

主要描述了对产品外观的期望、情绪和风格。这些需求规定了外观想要达到的目标,它和详细的界面设计还是有区别的,体现的是客户的感觉。界面需求还包括对控件进行规范和对控件的使用范围进行一个规定等方面的内容。可以考虑借用一个原型来描述。

2)易用性需求与可执行需求

易用性会使产品提高符合用户习惯的能力以及其对使用的期望。它会对用户使用产品的生产效率、错误率以及用户对新产品的接收程度产生很大的影响。

可执行需求是指产品可以在给定的时间或者特定的精确度来执行某些任务,或者在一段时间内的极端状态值。在考虑执行需求时,可以从完成任务的速度、结果的精确度、容量、允许值的范围、单位时间内完成的任务数、资源的使用效率、两次故障间的平均无故障时间、连续不停机时间等方面入手。它还应该包括对风险的控制内容。

3)安全性需求

安全性指产品消除潜在风险的能力和对风险的承受能力。包含、保密性、可靠性和完整性三个子特性。保密性指的是数据不能被授权用户以外的任何人访问的能力。可靠性指的是授权用户可以不受阻止的访问数据、与其它软件的兼容的能力和产品的强壮度。完整性指的是安预期目标完成任务的能力。

一般分为程序安全、系统安全、数据安全。程序安全是指开发的程序是否是安全的,程序上有没有安全的漏洞,例如Web开发中服务器代码没有对输入的参数进行验证,从而导致客户端机器人轻易的获取数据。系统安全指的是系统整体的安全,例如安全的粒度,未经授权的用户是否可以轻易的访问非法的数据等。数据的安全是对数据的保护,数据库中数据有没有做审核,用户之间是否会共享数据等。

4)系统的完整性需求

指为完成业务需求和系统正常运行本身要求而必须具有的功能,这些功能往往是用户不能提出的。典型的功能有:联机帮助、数据管理、用户管理、软件发布管理、在线升级,等等。

并不是所有的系统都必须包括以上所有的功能,而是可以根据产品的使用环境和企业的产品发展决策进行挑选。因此,完整的系统应该包括数据备份、恢复、日志管理、垃圾数据清除等基本功能,哪怕这些功能的核心只是一条语句或命令。用户管理功能是另一项必不可少的功能,它定义哪些用户可以以什么样的功能使用系统。好的用户管理功能不仅可以有效控制用户对系统的使用,使系统处于一个安全、负载合理的运行状况,还能提高系统的应用适应性。

5)系统的可扩充性与可维护性

这里指的是当系统达到瓶颈的时候怎样在不修改代码的情况下提供系统的负载能力,扩展一般分为Scale UP和Scale Out。一般情况下会综合运用UP和OUT。例如,增加服务器的性能来提高系统的处理能力,但是任何计算机都会有一定的瓶颈,当增加服务器性能不能达到提高系统性能的时候,我们需要考虑横向的扩展服务器,也即Scale Out。在Scale Out时一般需要我们的系统是状态无关的,即Stateless。

当技术变化或业务变化时,不可避免将带来系统的改变——不仅要进行设计实现的修改,甚至要进行产品定义的修改。好的软件设计应在系统构架上考虑能以尽量少的代价适应这种变化。常用的技术方法有面向对象的分析与设计以及设计模式。

通过认识以上非功能性需求的常见指标,非功能需求的重要性主要程度要看项目具体情况而定,比如对于一个嵌入式系统软件运行开销非常重要,如果是实时系统,响应时间就很关键,如果是联机交易系统可靠性、安全性、性能都很重要2。

检验非功能需求检验起来非常困难。这此非功能需求可能来自于系统的易用性、可恢复性和对用户输入的快速反映性能的要求,同时需求描述的不详细和不确定也会给开发者带来许多困难。虽然理论上非功能需求能够量化,通过一些可用来指定非功能性系统特性的度量的测试可使其验证更为客观,但在实际过程中,对需求描述进行量化是很困难的。这种困难性体现为客户没有能力把目标需求进行量化的同时,有些目标(如可维护性)本身也没有度量可供使用。因此,在需求文档中的目标陈述中,开发者应该明确用户对需求的优先顺序,同时也要让用户知道一些目标的模糊性和无法客观验证性。3

本词条内容贡献者为:

闫晓东 - 副教授 - 中央民族大学信息工程学院