非功能需求是衡量软件能否良好运行的定性指标。因此,非功能需求也是非常重要的。但是在实际收集需求信息时,开发人员往往注重于功能性需求,而容易忽略非功能需求。这是因为非功能需求很难定义,也很含糊,如可靠性、易使用性、用户界面友好等。软件系统应具备什么样的可靠性?易使用应达到什么程度?什么样的用户界面才算是友好的?这些问题由于缺乏定量指标,因此很难根据这些需求来评价软件系统,这也是开发出来的软件系统与用户所需的软件系统之间存在差异的主要原因。对软件系统的非功能需求有很多,此处仅列举一些用户所关心的非功能需求。可靠性:指在给定的时间内以及规定的环境条件下,软件系统能完成所要求功能的概率。其定量指标通常用平均无故障时间和平均修复时间来衡量。可扩充性:指软件系统能方便和容易地增加新功能,通常用增加新功能时所需工作量的大小来衡量。安全性:主要涉及防止非法访问系统功能,防止数据丢失,防止病毒入侵和防止私人数据进入系统等。例如身份验证、用户权限、访问控制等都是与安全性相关的具体需求。互操作性:指软件系统与其他系统交换数据和服务的难易程度。健壮性:指软件系统或是组成部分遇到非法输入数据以及在异常情况和非法操作下,软件系统能继续运行的程度。易使用性:指用户学习和使用软件系统功能的简易程度,也包括对系统的输出结果易于理解的程度。可维护性:指在软件系统中发现并纠正一个故障或进行一次更改的简易程度。可维护性取决于理解、更改和测试软件的简易程度。可移植性:指把一个软件系统从一个运行环境移植到另一个运行环境所花费的工作量的度量。
可重用性:指组成软件系统中的某个部件除了在最初开发的系统中能使用外,还可以在其他应用系统中使用的程度。以上是在实际开发中用户可能提出的一些非功能需求。当然,随着软件系统的目标和应用领域的不同,用户提出的非功能需求可能是上述的一部分,也可能超出上述的需求。在收集需求信息时,必须根据用户对系统的期望来确定非功能需求。如果能定量地确定非功能需求,将有助于清晰地理解用户的期望,有助于开发人员提出较合理的解决方案。然而,大多数用户并不可能提出具体的和量化的非功能需求,以及回答诸如“软件系统应该具备什么样的可靠性”或“互操作性是否重要”等这些问题。因此,开发人员在收集非功能需求信息时,要注意使用一些方法,例如:1)将不同用户类代表提出的可能很重要的非功能需求进行综合,并根据其中的每个需求设计出许多方法,然后根据用户的回答,使这些需求更明确化。2)开发人员与用户一起对每一个非功能需求制定可测试和可验证的具体标准。如果这些需求缺乏评价标准的话,就无法说明开发出的软件系统是否已满足这些需求。3)设计与非功能需求相冲突的假设示例,利用反例来提示用户。
相关资源:《软件需求白皮书》(经典版)