软件开发的非功能性需求

您所在的位置:网站首页 软件的功能分析 软件开发的非功能性需求

软件开发的非功能性需求

2024-07-10 09:11| 来源: 网络整理| 查看: 265

The functional requirement is describing the behavior of the system as it relates to the system's functionality.

软件功能性需求是描述一个系统的行为,与系统的功能性相关.

The non-functional requirement elaborates a performance characteristic of the system.

软件非功能性需求是详细描述了一个系统的性能特点.

功能需求是指提供了什么服务,实现了什么功能。

 系统必须做什么?与系统设计相关,必须描述出来系统的必要的行为,

这些行为来自于用户和公司规则,必须包含系统的简要说明,系统的总结,系统的理论,这些信息用来帮助读者知道为什么这些需求被用到,

并且追踪系统的开发过程。

非功能性需求

系统应该做成什么样 与系统架构相关

非功能需求是指效果怎么样,性质怎么样。

举个例子:

软件主页有一个按钮,点进去就是历史记录.---功能需求.

软件使用的内存不超过10Mb.-------非功能需求.

非功能性需求一般是隐性的,容易被菜鸟程序员,设计师们忽略。非功能性需求不同于功能性需求,它在不同的网站,软件上,拥有一定的共性,就例如 提到的海量文件存储的问题上,淘宝,腾讯,google都遇到了一样的问题,研发了类似的解决方案(TFS,TFS和GFS)。 非功能性需求的分类方法较多,并没有业界通行和一致的标准,但是大多数殊途同归,名称/叫法以及分类方法上可能略有差异,但是其含义和指向一般是趋向一致的,我简单介绍一下我一般较多采用的分类:

性能/容量:性能和容量比较利于理解,包括像需要支持的用户的数量啊(尤其是峰值的并发用户数量),用户能够接受的响应时间啊,数据规模啊(例如提到的百万级的惊人数据规模,上亿的文件存储啦等等。百万级的数据支撑,还是有一些商业数据库产品可以支持的,TPC-C/TPC-D以及新一代的业界性能测试标准中还有千万级数据规模的测试项目,也有数据库厂商报名参加的,当然,对于淘宝这样的业务模式和实际情况/要求来说,性价比和实用性可能确实就比较低了)可靠性/可用性/可复原性: 可靠性之与在规定的一段时间和条件下软件维持其功能服务以及性能水平的能力有关的一组属性(可用性是另外一种说法)。例如说我们要求系统7x24小时运行,全年持续运行故障停运时间累计不能超过10小时等等,都属于这方面的要求。 可复原性与在是发生错误和故障后重建其性能水平并恢复直接受影响数据的能力。例如支付宝需要保证如果在交易提交失败以后,需要保证回滚,不能这头银行的钱没有付成功,那头却显示付款成功或者反之这头银行扣款了,那头在改变交易状态的时候缺因为冗塞或者其他原因导致交易还是未付款状态。可维护性/可管理性:包括系统在无人工干预条件下的稳定性,自排错能力,可测试性都属于这个范畴。故障的可排查能力,系统的修正,升级,备份,恢复机制以及方便与否,都属于这个范畴。这通常会极大决定系统的运行维护成本及维护难度。安全:包括传输加密,存储加密,可破解性,以及各种未被授权的用户行为如何防范和控制,都是安全范畴,这里的安全不单针对外部普通用户,也针对内部不同级别的权限用户的的控制。小到如何防范和处理用户在输入框里输入特殊字符来获得设计者未曾预料的结果,大到防范外部黑客和内部内鬼。安全很多时候不单依赖技术实现,同时非常依赖相应的制度和审计。易用性:好吧,这个话题现在最热了,这可能是非功能性需求中现在唯一被高亮出来,被各种人等都关注,都拿出来说事的一个领域了。易用性设计现在已经上升到了一个新的高度,叫做人机体验,UE设计,虽然现在UE到底是划分在功能性需求还是非功能性需求上,尚有一些争议,但是主流观点(包括我自己)都认为,这是非功能性需求的一个典型部分。数据一致性:包括数据的编码和语言,冗余数据的一致性要求(含时间要求)等等。例如为了性能的考虑,数据库整体设计未采用巴斯克范式,而采用了第二或者第三范式的要求来设计,一些信息(例如用户注册信息),可能同时存在于系统的多个地方(例如多个表中),当发生注册信息变更时,如何保证多处地方记录的信息都被修改,以及这个全部修改的时限要求是多少等等都是这个范畴的内容。系统/环境 条件及限制:现有的软硬件条件,平台的条件,网络的条件都属于这个范畴。典型的例如很多移动互联网产品,必须要考虑移动网络的带宽条件,终端运算性能和能力,以及其移动网络稳定性等等。

事实上,从我的经验来看,一般来说,很多软件项目及产品,其在非功能性需求上的成本,难度和工作量,是要超过功能性需求的。在特定的软件领域,例如网站(尤其是淘宝,facebook这样海量用户规模的网站),金融(银行证券),电信领域,其非功能性需求实现的重要性,工作量,技术难度要远远远远大于功能性需求的实现。 而且,功能性的需求的实现,其实在大多数情况下,更依赖于业务的高手(或者好的产品经理)而不是技术的高手,而非功能性需求的实现,恰恰是挑战技术高手的重要课题。 一个最典型的极限非功能性需求的例子就是电信的计费系统,其实基本功能很简单,获取通话时长,按照费率公式算个钱出来,但是放到海量的用户,实时的计费要求中来看,这是一个极具技术挑战的活。 还有一个经典的案例是,中国某地方性银行(注意仅仅是地方性的银行),想要引入一个柜面服务的系统,找到了新家坡的一个厂商,他们在东南亚银行业有很多案例,而且功能设计非常完善合理和先进。但是这家地方性银行引入这个系统以后,2周之内发行了几十万张信用卡,这系统就顶不住崩溃了。这就是典型的功能性需求实现完美,但是非功能性缺陷的例子。 从我的经验来看,一般来说,非功能性需求中,性能/容量,以及安全的要求,一般是技术挑战最多,内涵最丰富,成本最高,最值得关注的领域,当然,现在易用性(UE)也是一个极度收到重视的领域。 有志于架构师取向的IT技术人员,非功需求实现的领域,是一个必须关注,必须熟悉的领域。 而本问题最大的根源在于,只看到了网站功能性需求的部分,而没有注意到非功的部分,对于非专业的IT技术人员来说,这很正常,但是对于IT技术人员来说,是需要认真关注的必修课。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3