非功能性需求 1) 什么是非功能性需求 非功能性需求是这样一种需求,它解决“如何使这个系统能在实际环境中运行”
2) 重要吗
在设计解决方案的过程中满足功能性需求当然是很重要的
但是,如果没有考虑非功能性需求,那么这个解决方案则很难取得实效,因为用户可能难以甚至无法使用系统的功能
很多非功能需求一般会在底层的基础技术平台去仔细设计和实现
3) 非功能性需求要考虑那些方面 非功能性的特性一般有这些: 可靠性 只显示系统可以做某些事情是不够的
如果一个系统不能可靠地运行(例如,在加载时,或者在系统故障时,等等),则它就不能满足客户的需要
有一些问题应该自问一下: * 即使硬件出现故障,系统也可以可靠运行吗
* 复制和故障转移方案是什么
* 需要手动干预,还是系统可以自动进行故障转移
* 实现可靠性会对性能造成负面影响吗
* 实现可靠性的成本有多高
可靠性需要考虑的一些具体方面是: 安全性:假设攻击者就在外面
如何知道系统用户就是他们所声称的,并只让他们访问经过授权的功能
如何保护我的系统不受攻击
考虑到网络攻击、机器攻击,甚至从您自己的系统内部发起的攻击
事务性:如何设计系统来保存工作单元的 ACID 属性
如果在设计中涉及多个独立的子系统(Web 服务和 SOA 就是这种情况),则这一点就显得特别重要
不要假设始终可以进行两阶段提交 (two phase commit)
可用性 如果用户不能够从他们可用的渠道(例如 Web)方便地访问您的产品,那么它的好处何在呢
这有时是作为功能性的一部分一起考虑(或者应该在理想的环境下)的,但是常常被忽视,以致于整个项目处于危险之中
这里需要考虑的一些问题是: * 您是否为用户带来不适当的负担(例如,需要特殊的浏览器版本)
* 系统是否根据模型-视图-控制器 (Model-View-Controller) 体系结构