随着信息技术的高速发展,信息化领域的应用范围逐步扩大,软件需求分析作为软件项目过程中的重要环节,也得到了越来越多的重视。
软件需求指项目中必须提供的功能或者遵守的条件,在实际开发过程中又可分为功能性需求和非功能性需求。功能性需求指项目中具体需要提供的功能和内容,非功能性需求指的是软件产品为满足用户业务需求而必须具有除功能需求以外的特性,如安全性、可靠性、可维护性等。本文重点介绍软件需求中的非功能性需求。
1、非功能性需求概述
非功能性需求(non-functional requirement NFR)也可称为软件开发的约束,是软件产品为满足用户业务需求而必须具有除功能需求以外的特性。它是影响系统的架构设计、决定软件项目成本的重要依据,是软件需求不可或缺的一部分。
非功能性需求是随着软件系统规模增大和复杂性增加这两个因素才逐渐成为软件工程师们的新着眼点和关注点。早期时候,用户方基于自身对软件技术的了解和对系统文件维护的方便性考虑,对系统有了诸如:开发平台、技术流派、关键实现等方面的要求,这些通常被称之为“设计约束”。从甲乙双方合同的角度,设计约束也是一种需求——一种“非功能”性的需求,后来,软件的质量问题越来越突出,描述软件质量目标的要求也成为非功能性需求的一部分。于是,目前业界关于软件的非功能性需求,通常包括:质量属性要求和约束性要求。
在软件开发过程中,明确非功能性需求的优势主要表现在:
1) 确保软件系统遵守法律和合规性规则;
2) 确保软件系统的可靠性、可用性和性能等;
3) 确保良好的用户体验和易用性;
4) 有助于软件系统的安全策略。
2、非功能性需求分类
1)性能需求
性能是系统或组件在给定的限制条件(如速度、精度或内存使用)内完成其指定功能的程度。性能表现是衡量软件质量的重要指标,在需求分析和系统设计阶段就必须充分考虑性能因素。性能指标主要包括响应时间、并发数、资源使用率等。简单地说,性能需求体现了系统如何“多快好省”地实现客户的功能需求。
2)界面需求
界面主要描述了对产品外观的期望、情绪和风格。这些需求规定了产品界面想要达到的目标,它和详细的界面设计还是有区别的,体现的是客户的直观感受。界面需求还包括对控件进行规范和对控件的使用范围进行一个规定等方面的内容。可以考虑借用一个原型来描述。
3)易用性
易用性是一种以使用者为中心的概念,易用性的重点在于让产品的设计能够符合使用者的习惯和需求,能让用户在使用该产品功能时,花费最少的时间发挥最大的效能。
4)安全性
安全性指产品消除潜在风险的能力和对风险的承受能力。包括保密性、可靠性和完整性三个子特性。保密性指数据不能被授权用户以外的任何人访问的能力。可靠性指授权用户可以不受阻止的访问数据、与其它软件的兼容的能力和产品的强壮度。完整性指按预期目标完成任务的能力。
一般分为程序安全、系统安全、数据安全。程序安全指开发的程序是否是安全的,程序上有没有安全的漏洞,例如Web开发中服务器代码没有对输入的参数进行验证,从而导致客户端机器人轻易的获取数据。系统安全指系统整体的安全,例如安全的粒度,未经授权的用户是否可以轻易的访问非法的数据等。数据安全是对数据的保护,数据库中数据有没有做审核,用户之间是否会共享数据等。
5)系统完整性
系统完整性指为完成业务需求和系统正常运行本身要求而必须具有的功能,这些功能往往是用户不能提出的。典型的功能有:联机帮助、数据管理、用户管理、软件发布管理、在线升级等等。
并不是所有的系统都必须包括以上所有的功能,而是可以根据产品的使用环境和企业的产品发展决策进行挑选。例如,在线升级、软件发布管理适用于具有因特网或内网环境的软件产品;而数据管理对于产生数据存储的产品则是必须的,设计人员不应假设用户同时是一个合格的DBA,而且系统所产生信息的分布、关系,也不是DBA所应该了解的内容。因此,完整的系统应该包括数据备份、恢复、日志管理、垃圾数据清除等基本功能,哪怕这些功能的核心只是一条语句或命令。用户管理功能是另一项必不可少的功能,它定义哪些用户可以以什么样的功能使用系统。好的用户管理功能不仅可以有效控制用户对系统的使用,使系统处于一个安全、负载合理的运行状况,还能提高系统的应用适应性。
6)可移植性
可移植性指从系统某一环境转移到另一环境下的难易程度,良好的可移植性可以提高软件的生命周期,具体包括适应性、易安装性、遵循性、可替换性、易部署等。可移植性与运行平台的软硬件环境相关,可移植性要求选择正确的开发工具、平台来支持,同时也与一些功能性的需求相关,如全球语言支持等。
7)可维护性
系统的可维护性是衡量一个系统的可修复性和可改进性的难易程度。所谓可修复性是指在系统发生故障后能够排除(或抑制)故障予以修复,并返回到原来正常运行状态的可能性;可改进性则是系统具有接受对现有功能的改进,增加新功能的可能性。
8)可扩展性
可扩展性指的是当系统达到瓶颈的时候怎样在不修改代码的情况下提供系统的负载能力,扩展一般分为Scale UP(纵向扩展)和Scale Out(横向扩展)。一般情况下会综合运用UP和OUT。例如,增加服务器的性能来提高系统的处理能力,但是任何计算机都会有一定的瓶颈,当增加服务器性能不能达到提高系统性能的时候,我们需要考虑横向的扩展服务器,也即Scale Out。在Scale Out时一般需要我们的系统是状态无关的,即Stateless。
9)可靠性
可靠性指软件在异常情况下或在被非法、非常规使用时维持自身功能的能力。主要体现在容错和健壮性这两个方面。
容错指软件发生故障时仍保持正常运行的能力。它保证软件能在异常情况下正常运行,并在内部完成故障的修复工作。修复完成后,软件需要继续或从头开始执行异常位置的操作。
健壮性是保护软件不受非正常使用方式或非法输入影响的能力。具备该能力后,不论怎样的使用方式,软件都能准确迁移至系统定义的状态。
3、非功能性需求的常见描述示例
非功能性需求之所以经常被忽略,是因为它们不易被发现,发现后不易表达、实现以及测试,下面列出一些常见的非功能性需求描述示例。
1)性能需求
● 响应时间:在95%的情况下,一般时段响应时间不超过1.5秒,高峰时段不超过4秒;在网络畅通时,电子地图刷新时间不超过10秒;
● 并发数:系统可以同时满足10,000个用户请求;
● 资源使用率:CPU占用率<=50%,内存占用率<=50%。
2)界面需求
对于一个银行系统的界面,80%的用户能够在第一次看见该产品的5秒内,意识到这是一个xx银行的软件。
3)易用性
● 在引入该产品的3个月内,60%的用户应该可以在45秒内用它来完成转账的任务,失败率控制在万分之一以内;
● 80%的用户在接受一个2小时的系统介绍培训后,可以在5分钟之内成功预订房间。
4)安全性
● 严格权限访问控制,用户在经过身份认证后,只能访问其权限范围内的数据,只能进行其权限范围内的操作;
● 提供运行日志管理及安全审计功能,可追踪系统的历史使用情况;
● 能经受来自互联网的一般性恶意攻击。如病毒(包括木马)攻击、口令猜测攻击、黑客入侵等;
● 至少99%的攻击需要在10秒内检测到。
5)系统的完整性
该系统包括数据备份、恢复、日志管理、垃圾数据清除等基本功能。
6)可移植性
软件是便携式的,从一个操作系统移动到其他操作系统不会产生任何问题。
7)可扩展性
● 可实现负载均衡,日后若信息量较大,系统可相应增加服务器实现扩展;
● 由于系统模块之间的低耦合性,在增加新功能模块时,对于旧的功能模块影响不大。
8)可维护性
● 从接到修改请求后,对于普通修改应在1~2天内完成;
● 对于评估后为重大需求或设计修改应在1周内完成;
● 90%的BUG修改时间不超过1个工作日,其他不超过2个工作日。
9)可靠性
● 分布式系统在发生通信异常时会先暂时切断连接,等问题修复完成后再重新连接,恢复软件的运行;
● 系统缺陷率每1,000小时最多发生1次故障;
● 因软件系统的失效而造成无法完成业务的概率要小于5‰。
4、小结
通过上述内容可以了解到非功能性需求的常见内容,非功能性需求关注的是软件系统的质量属性,需要根据这些特性来评估软件系统,因此非功能性需求对整个系统而言是至关重要的。(本文版权归北京中基数联科技有限公司所有,未经授权不得转载。)
参考文献
[1] 张宏升. 软件架构的非功能性需求指标和区域化支持[J]. 电脑知识与技术, 2011, (9):2085-2086,2089.
[2] 袁培森.何金陵.韦磊.电力信息系统非功能性需求管理研究[J].启明星辰,2013.
以上就是软件造价评估公司中基数联为您带来的“软件需求分析——非功能性需求”所有内容,更多软件开发成本估算知识敬请关注中基数联!