论非功能性需求对企业应用架构设计的影响
张紫诺
(石家庄铁道大学,河北 石家庄 050000)
摘 要:软件架构要求软件满足功能属性的前提下,重点关注软件的非功能性需求。如果事先缺乏很好的非功能性需求定义,会导致软件产品在运行的稳定性、安全性等方面受到很大的影响,降低软件价值。本文以听歌软件为例,论述了非功能需求对系统架构设计的影响。并详细说明在项目实施过程中如何通过架构设计来满足非功能需求。
关键词:非功能性需求;架构设计;听歌软件
中图分类号: 文献标识码:A 文章编号:
On the impact of non-functional requirements on the design of enterprise application architecture
Zhang Zinuo
(Shijiazhuang Tiedao University ,Shijiazhuang 05000,China)
Abstract:Software architecture requires the software to meet the functional attributes, focusing on the non-functional requirements of the software. If there is a lack of a good definition of non-functional requirements in advance, it will lead to a great impact on the stability and security of the software product, reducing the value of the software. Taking the listening software as an example, this article discusses the impact of non-functional requirements on system architecture design. It also details how non-functional requirements can be met through architectural design during project implementation.
Key words:non-functional requirements; architecture design; listening software
近年来,人们在进行需求分析时,逐渐意识到仅仅完成软件的功能性需求并不能设计出健壮的、稳定的、易维护的系统,而非功能性需求可以弥补这些不足,影响着产品是否能够持续稳定并高效的提供服务。
1 非功能性需求概述
软件架构的设计主要就是围绕满足功能需求和非功能需求。功能需求是计算、操作数据等活动,规定了软件产品要做什么事情来满足业务,也就是“做什么”;非功能需求是描述产品要做到的程度,相当于修饰产品的形容词。实际上,不同的公司和产品在功能性需求都能够基本满足用户需求时,非功能性需求在产品之间的竞争更加激烈。
非功能性需求,是指软件产品为满足用户业务需求而必须具有且除功能需求以外的特性,包括安全性、可靠性、性能和可维护性等方面的需求。软件产品非功能性定义不仅决定产品的质量,还在很大程度上影响产品的功能需求定义。而所谓的非功能要求就是软件的各种质量属性。即软件需要在满足功能属性的前提下,重点关注软件的质量属性。质量属性是影响质量的相关因素,是对质量的描述。它可以很好地度量和评价一个软件的质量是否满足要求。
2 非功能性需求重要性
非功能性需求往往影响整个系统用户体验,在资源、时间有限的情况下,由于功能性需求是人们普遍关注的,所以很多情况下是优先满足功能性需求,从而忽略了非功能性需求,这样就会导致后面软件稳定性差、扩展困难、不易使用等问题。比如系统经常出现宕机的情况、点击按钮等很长时间才能反馈、系统难以扩展等,从而使软件本身的价值大打折扣。
如果事先对非功能性需求进行定义,加大对非功能需求的满足,那么软件产品在后期运行的稳定性、易用性、安全性等方面都会有较大的提高,从而满足客户需求,提高软件的价值。事实上,在特定的软件领域的项目及产品,其在非功能性需求上的成本,难度和工作量,是要超过功能性需求的。
3 基于听歌软件分析如何满足非功能需求
3.1 性能设计
性能是指系统响应能力,包括速度、吞吐量和持续高速性三方面的要求。性能与时间有关,事件发生时,要求系统必须快速地做出响应。用户对于性能的追求是永无止境的,当用户发出一个请求后就希望快速地得到反馈。对于听音乐软件来说,如何快速的读取这些音频文件对于用户收听书籍的性能好坏有着至关重要的作用。
我们可以通过增加可用资源的方式。在设计服务器的时候,可以单独使用一台安装固态硬盘的快速服务器,把一些用户经常访问的热门音频放在上面。手机客户端首先访问快速音频服务器,如果没有,则访问普通音频服务器。这样可以减少系统响应时间。此外可以根据不同的数据特点设计不同数据库来提高性能。比如用户频繁对数据库的操作,可以选择可持久化的数据库,减少读取次数;用户操作软件的日志信息可以放在非关系型数据库,供公司进行用户画像分析。
3.2 可用性设计
可用性是指系统能正常运行的时间比。可用性会遇到系统错误,恶意攻击,高负载等问题的影响。对于可用性,主要关注的问题包括:如何检测系统故障,系统故障发生的频度,出现故障时会发生什么情况,允许系统有多长时间非正常运行,什么时候可以安全地出现故障,如何防止故障的发生以及发生故障时要求进行哪种通知。对可用性需求在架构设计中可选的方案有心跳、Ping/Echo、冗余、进程监视器。
听歌系统要求能在24小时内一直稳定运行,在设计听歌软件的时候,要保证其可用性。随着听书用户的人数不断的增长,客户端向服务端发送的请求也越来越多,如果只有一台应用服务器来接受来自很多客户端的请求,一旦资源耗尽,发生宕机的可能性很大,这是不能允许的。在设计软件的时候,可以考虑部署一台负载均衡服务器,把请求合理的分配到多台应用服务器上去,达到资源的合理分配。具体设计时,可以部署一台反向代理服务器作为接受客户端请求的统—访问接口点,根据业务量的多少来设置集群服务器的个数,起到负载均衡的效果。
高可用的数据是指任何形况下数据可靠存储,不会丢失。一旦数据库服务器发生宕机,数据就会丢失而不可恢复,对于系统的可靠性而言,数据备份尤其变得异常重要。所以在设计数据库的时候,可以进行冗余设计。设计多个从数据库,分别部署在不同的服务器上,但是数据是同步的。这样就拥有了多个副本,当主数据库服务器宕机的时候,马上切换到其中一台正常运行的从数据库服务器去,提高了整个系统的可靠性。
3.3 安全性设计
安全性是指软件系统可向合法用户提供服务,以及阻止非授权使用服务的能力。包含保密性、可靠性和完整性三个子特性。保密性指的是数据不能被授权用户以外的任何人访问的能力。可靠性指的是授权用户可以不受阻止的访问数据、与其它软件的兼容的能力和产品的强壮度。完整性指的是安预期目标完成任务的能力。
在手机客户端往服务端发送请求的时候, 对于一些很敏感的数据进行加密, 可以提高访问的安全性。对安全性需求在架构设计中可选的方案有用户认证,用户授权,追踪审计,限制访问。当手机用户要输入密码进行验证时,可以在客户端对密码进行SM3加密,从而防止链接被盗额密码被盗的情况。此外在手机进行支付等与金额有关的操作时,可以用https建立安全信息通道和服务端进行交互。在使用https时,要先申请一个ca证书,而且是付费的,客户端访问安装有CA证书的服务器时,通过信任该证书,也就信任了该服务器。
4 结语
实践证明在架构设计中通过对非功能性需求的满足,可以保证系统在质量属性和约束条件上满足用户的需求,使开发出的软件有着更高的质量和价值。而在进行非功能性需求分析时,重要的是将精力放在那些至关重要的因素上,包括:观感需求、易用性需求与可执行需求、安全性需求、完整性需求、可扩充性与可维护性等。在满足功能需求的前提下,最大程度增强软件的非功能性需求,对软件的长久性发展有重要意义。通过具体实践也更加体会到系统架构设计的重要性。