讪crocomputerApplications Vol. 25, , 2009 学习园地微型电脑应用2009年第25卷第1期文章编号1007-757X(2009)1-0061-04软件架构中的非功能需求张千二良摘要:软件系统架构设计中,非功能需求不仅是架构师知识结构中的重要组成部分之一,也扮演了重要的角色,甚至会直接决定架构的组成。非功能需求主要分为质量属性与约束,且来自于多方。质量属性、约束和功能需求之间能相互作用,并最终在架构设计中体现。关键词z软件架构;非功能需求(NfR);质量属性;约束中图分类号文献标识码AO 引言Requirement, NFR)确定了衡量的尺度,用于对系统运行的判断,而不是具体的系统行为。软件的发展与进步离不开其幕后众多的编程人员、测试可以这样理解,非功能需求是指软件产品为满足用户业员、文档撰写员,需求分析师,系统工程师等等。与他们的务需求(即功能需求)而必须具有且除功能需求以外的特性。努力密不可分的,还有软件架构师(SoftwareArchitect)。简单的举一个例子。比如我们需要设计一款手机。那么,在IT界,软件架构师,是丰富轿件项目经验及具有广这个于机必须要满足的功能需求就包括打电话、发短信、手博而精钻技术知识的象征。机上网等等。但是,在设计的过程中,我们也同样不能忽略软件架构师在软件工程的生命周期中,起着承上启下的的是:它是否易用(是否要仔细阅读说明书才可以使用);关键作用。一名好的软件架构师的知识结构中,需要具备系它的性能(储存空间大小、电池寿命长短、待机时间长短);统开发全过程的经验,对于IT建设生命周期各个环节有深它的外观(美观、时尚、大方,能否抓住消费者的心理)。入了解,包括:系统/模块逻辑设计、物理设计、代码开发、这些不能忽略的内容便构成了非功能需求。于机的特性类似项目管理、测试、发布、运行维护等:需要深入掌握一到两软件的非功能需求,虽然与其功能不直接相关,但是都会左种主流技术平台上开发系统的方法:了解多种应用系统的结右消费者的选购。也解释了为什么苹果公司的iPhone产品构:了解架构设计领域的主要理论、流派、框架。另外,在会大获成功!业务知识领域中,架构师也要十分清楚并深入了解系统建设软件工程与建筑工程非常类似,软件系统的需求种类也的业务需求:了解系统的非功能需求和运行维护需求:了解不少,如图2。既然有非功能需求,便有功能需求。功能需企业IT公共设施、网络环境、外部系统。求是我们比较熟悉的一类需求。功能需求描述要开发的软件图l中列举了架构师的基本知识结构。其中,涉及到了系统应该做什么,它可以包括为用户提供哪些服务,也可以非功能需求。顾名思义,此需求乃软件功能需求以外的需求。包括本系统为其他系统提供哪些服务。用u非功能需求"来概括之,便是它难以全面概括的事实。图2软件需求的主要类型非功能需求中分为质量属性和约束。约束需求规定了开发软件系统时必须遵守的限制条件。例如,要采用什么操作系统,要采用哪种开发技术,是否需要与遗留的老系统进行互操作等等。当然,还要考虑软件用户所在的行业中必须遵守的法律法规、政策方针和行业标准、企业标准。图1架构师知识结构质量属性作为非功能需求的一个分支,同样包含众多内容。例如性能、安全性、易用性、可靠性等等。众多属性如1 非功能需求概念何分类的问题,在1977年时McCa11等人提出了一个方案。如图3所示,将软件质量的属性分类为"产品修改","产品在系统工程和需求工程中,非功能需求CNon-functiona1作者简介:张仁良,上海杉达学院计算机学院,上海交通大学软件学院,工程硕士研究生,上海200030 61
Mcr啊。mputerApplications Vol. 25、,2009学习园地微型也插在周2009年第25卷第1期改型"和"产品操作",其中包含了相对应的质量属性。图,如图4。功能需求质量屠性约束银组amp~ J 开发级矗l 严晶撞作正酣用靠自耀眼胳膊!图4软件需求空间分割图、非功能需求同样来自于各个级别。譬如,组织级会希望图3McCall等人提出的软件质量属性的分类模型软件系统要保证安全性和可靠性:用户级会更关心易用性和事实上,这样的分类模型存在着一个缺点,即关注了产执行速度:而开发级会重视软件模块可重用性和系统的可移品的本身,fE!忽略了软件产品在开发过程中所存在的非功能植性等等。需求调研团队与架构师不能忽视任何一方的任何需求。例如,软件开发中的代码可重用性,代码的易理解性一类的需求。等等。不少的非功能需求会来自于开发者与升级维护人员(开鉴于此,非功能需求中的质量属性也可以从如此的角度发级)。软件的可扩展性、可重用性、可移植性、易理解性进行分类运行期质量属性"和"开发期质量属性"。运行期和易测试性等非功能需求都属于u软件开发期质量属性",他质量属性是软件系统在运行期间,最终用户可以直接感受到们都将深刻影响开发者和升级维护者的工作。例如,一个模的一类属性:开发期质量属性包含和软件开发、维护和移植块众多,却预计一年交付的软件系统,若架构师与开发人员这三类活动相关的所有质量属性。不考虑其可重用性,则不免会做许多重复劳动,情况严重的则会影响到系统按时的交付。3 非功能需求的来源另外一部分非功能需求来自于客户组织(组织级)。架构师必须仔细考虑客户提出的各方约束:上线时间的要求、有人把需求喻为软件开发的起跑线,需求工程是否顺利预算限制,还有客户所在领域行业的业务规则和业务限制。和成功,能够为软件的最终成功奠定扎实的基础。例如,客户需要的系统将用于小型饮食店的管理,预算有限,调研完成的需求可能与相关领域紧密结合,则需要了解那么就不直在制定架构时采用价格昂贵的中间件。这些领域背景:需求可能来自于多方,则需要征求和总结各当然,非功能需求也同样可能来自于用户。例如,股票种想法和意见等等。交易系统中,客户会对性能和安全性格外关心。他们希望自例如某银行系统的需求中,不仅涉及到了金融行业的相己的交易是快速的,交易过程中若出现长时间没有响应将难关背景知识,而且需求的干系人也来自各方z企业的老板、以接受:同时,他们也要求自己在互联网上的交易是安全的。分支机构的经理、分支机构的柜员、各级机构的信贷员、运维中心的系统管理员、A1M机柜管理员和众多银行客户。3 各类需求与架构设计的关系每类人都会对系统有自己的想法和见解,有自己的需求。这些提出的需求也会各有特点。例如企业的老板希望通功能需求是重要的,它们包含了几乎所有用户所要求实过软件系统统计营收,加强管理,提高银行效率;而分支机现的业务逻辑。当然,非功能需求也同样是决定架构成功与构的柜员关心的是能否按照要求正确简便地做相应的操作否的关键因素。软件客户不能严格区分什么是功能需求,什等等。提出者的需求各式各样,基本是由于他们所处的职位么是非功能需求。的不同。在软件系统开发的整个生命周期中,归纳起来可以事实上,非功能需求中的质量属性与约束是一个复杂的分为三个级别:组织级(项目的主要干系人,企事业单位的问题。而且,可能在非功能需求中的某一条或几条可能就将领导等)、用户级(系统软件的最终主要用户)、开发级(开左右架构风格的选择。发团队中的各类软件工程师,运维中心的维护工程师)。他(1)功能需求影响架构,架构必须要适应功能需求。们均将影响各个层次上的需求。但是功能需求不会决定架构,是否基于接口编程还是硬编码可以根据图2的分类方法,将软件的需求细分到功能需实现功能,是否要分层等等问题都不是功能需求所能单独确求和非功能需求,其中非功能需求包含了质量属性和约束。定的。再考虑需求提出的不同级别,可以得到软件需求空间分割(2)质量属性会从根本上影响架构。例如,非常强调.62
B但crocomputerApplications Vol. 25, , 2009 学习园地微型电脑雇用2009王军第25卷第1期性能的系统软件会在算法实现上F足功夫,而左右在架构设运行期的质量属性计中是否避免了性能的损失。(1)性能。性能是指软件系统及时提供相应服务的能(3)至于约束,它或作为架构设计的限制条件,或转力。具体而言,性能包括速度、吞吐量和持续高速性这三方变为功能需求,或转换为质量属性。比如必须使用Linux面的要求:平台"就是限制条件:又如,客户提出银行的利率必须与吞吐量通过单位时间处理的交易数来度量:速度往往通国家统一",则变成了系统利率可配置的功能需求:再如,过平均相应时间来度量:而持续高速是指保持高速处理速度客户说"要受国家金融机构审查",则可转变成质量属性中的的能力。提高系统的整体性能需要依赖硬件与软件。硬件中安全性与易理解性。图5即说明了功能需求、质量属性和架包括处理器的速度,硬件系统总线的速度,RAM的速度,构与架构之间的关系。硬盘读写的速度,网络连接的速度等等。提升软件的性能则包含了算法的优化,文件系统读写的优化,数据库的整体优…转?…变…化等等。架构师则还要考虑是否要采取集群和分布的策略等:转变等。系统整体性能的提高是多个方面的。如果不能在各种性能因素间找到平衡,则会在某些环节出现瓶颈(Bo创eneck), 从而降低了系统整体的性能。例如,某门户网站随着访问量的激增,购买了更大的网络带宽,并替换上了转速更快的硬盘,然而并没有考虑数据库操作语旬的优化。实际的效果虽然能有改善,但系统的速度还是被数据库拖了后腿。(2)安全性。指软件系统同时兼顾向合法用户提供服图5各类需求与架构之间的关系务,又阻止非授权使用功能的能力。考虑软件系统安全通常的流程先要分析潜在会有哪些4 非功能需求的主要内容威胁:制定威胁的列表,评估它们并设定优先级:针对威胁进行分类:根据威胁选择安全的技术:最后设计对应的安全客户要功能,客户也要质量。比较功能需求与非功能需服务。求,相对而言,客户比较擅长提出功能需求。这是他们所熟在进行安全性方面的架构设计时,我们通常可以考虑采悉了解的业务领域内的知识范畴,而且往往经过大量的实践用成熟的安全系统(第三方硬件/软件);以"小人之心"度输操作。入的数据,从入口处要进行严格检查:要认识到,外部系统然而对于非功能需求却非如此,不可能对于每个客户都总是不安全的,并在设计时减少外部接口;对用户或者角色要求他们了解和掌握需求工程,但是,诸如软件性能,或者进行最小授权,不要让授权泛滥:缺省状态下也要使用安全是软件的易用性等等。所以在需求制作的过程中,要给予他模式,例如论坛系统,即使用户还没有登录,就分配其Guest们足够的引导。架构师必须清楚地认识:为客户而设计,不1(游客)身份,以便今后统一管理:从STRIDE方面进行仅要满足客户要求的功能,也要达到客户所期望的质量。思考:最后要在管理上保护好系统,例如制定相关的规章制在本文M非功能需求概念"中讲到,可将非功能需求分为度,对服务器所在的机房进行严格的管理。u运行期质量属性"和u开发期质量属性"。(3)易用性。指软件系统易于使用的程度。运行期的质量属性2软件系统开发完之后,用户是否能较为容易地理解其界·性能(Performance面从而快速上手,掌握其操作以完成工作,并学习系统中所·安全性(Security)包含的其它的辅助的功能,提高工作效率。·易用性(Usability)例如,我们要为小学生用户开发→款产品,以帮助他们·可用性(Availability) 削铅笔。那么,专用刀片就没有卷笔刀来得好,它将专用的·可伸缩性(Sca1ability) 刀片隐藏在塑料的模子里面,方便学生使用,并同时保证了·互操作性(Interoperability) 安全。·可靠性(Reliability) (4)可用性。可用性与易用性不相同。可用性指系统·健壮性(Robustness)长时间无故障运行的能力。开发期的质量属性z许多重要的系统,例如银行系统、金融系统、交易系统,·易理解性(Understandability都对软件和硬件有相当高的要求,特别是它们的可用性,基·可扩展性(Extensibility) 本上要达到每年%的可用性。·可重用性(Reusability) (5)可伸缩性。指当用户增加时,软件系统维持高服·可测试性(Testability) 务质量的能力。·可维护性(Maintainability) 例如,当业务量比较小的情况下,软件系统运行在一台·可移植性(Portability) .63
B但crocomputerApplications Vol. 25, , 2009 学习园地微型也尉应用2009年第25卷第1期服务器上面。当业务高峰期时,可以通过增加服务器或者在(6)可移植性。将软件系统从一个运行环境转移到另单台服务器上增加软件系统的个数来提高性能,而无需对软-个不同的运行环境的难易程度。件系统本身进行编程级的修改。非功能的需求还要包括"约束"。但是来自于用户的约束(6)互操作性。指本软件系统与其他系统交换数据和多种多样,难以归纳。一些主要的方面是(1)国家政策法相互调用服务的难易程度。规;(2)相关领域的行业规范;(3)客户其它的特别需求(重不同的计算机系统、网络、操作系统和应用程序一起工要干系人的喜好与习性也是需要的考虑的方面〉。作并共享信息,这样的例子己不少见。互操作性分为不同的对于非功能需求描述的困难在于很难像功能性需求那级别,这是因为两个系统连接并共享信息,不能简单地认为样,可以通过结构化和量化的词语来描述清楚,在描述这类用户也能从自己的应用程序中访问这些信息。例如,一台需求时候我们经常采用软件性能要好,查询要在多少时间内UNIX工作站能用TCPIIP通信协议与→台NovellNetWar巳出结果,软件健壮性要好等较模糊的描述词语。这类描述词服务器相连。但是,UNIX工作站的用户除非使用兼容的文语都是脱离了软件的执行环境,人和相关的场景的描述,因件协议,否则不能访问服务器上的文件。在这个例子中,加此信息很难体现到软件架构设计和具体的实现中。我们在架载到NetWare文件服务器上的NovellNetWare NFS将允许构设计中关注的安全,系统开发框架,并发和性能,异常日UNIX用户和NetWare客户一样以一种集成化无缝的方式访志等不是凭空产生出来的,而是来源于我们对非功能性需求问文件及其它的网络资源。的分析。(7)可靠性。软件系统在一定时间内无故障运行的能对于非功能需求的描述,在描述过程中必须要强调到力。人,业务场景,环境等各方面的内容。强调的目的就是要说可靠性试验中常常是几种方法是周而复始地循环,并且明非功能需求不是无限度的,任何一项非功能需求的实现往一个循环比一个循环产品的可靠性水平向上增长,另外可靠往会付出更大的研发人力成本和硬件网络成本。比如我们在性试验除通过系统试验外,还应根据具体情况通过气候环境描述一个表单的模糊查询功能的时候,如果简单的描述为所试验、机械环境试验和人为正常使用等各方面的试验来暴露有查询都要在多少秒内完成,那么这种需求将很难得到满产品生产的薄弱环节,进行综合的科学分析,做相应的改进,足。使得产品在设计研制阶段对其固有可靠性有进→步的提高。然而,非功能需求却着实在架构的制定过程中具有可观(8)健壮性。也称容错性。是指软件系统在以下情况的影响力。它是架构师不能忽视的重点和难点。仍能够正常运行的能力:用户进行了非法操作:相连的软硬川STRIDE:指的是"标识欺骗"(SpoofmgIdentity), "篡件发生了故障,以及其它非正常情况。改数据"CTampering wi世1data), "可否认性"(Reputability), 对于规范要求以外的输入,可能是由于用户的操作不"信息泄露,(Information Disclosure), "拒绝服务"CDenialof 当,也可能由于是黑客的攻击。能够判断出这个输入不符合Service), "特权升级"(Elevation ofPrivilege),每个安全性规范要求,并能有合理的处理方式,便是体现健壮性的有效威胁类型的首字母组成的缩写。途径。开发期的质量属性参考文献(1)易理解性。是指系统设计能被开发人员理解的难易程度。[1] Roger . Software Engineering-A Practitioner’s (2)可扩展性。为适应新需求或者需求变化,为软件Approach[ Z ]. McGraw Hill,2006 增加功能的能力。有些时候,称之为灵活性。[2] Karl EWiegers.软件需求(第二版)庐呵.北京,清华大学出(3)可重用性。重用软件系统或其中一部分的能力的版社,2004.难易程度。[3] S皿anneRober1son掌握需求过程[1呵北京人民邮电出(4)可测试性。对软件测试以证明其满足需求规约的版社,2003难易程度。在实际的项目中,主要指进行单元测试等难易程[4]溢豆软件架构设计[闸北京电电子工业出版社,2007‘度。[5]康凯,刘沛春.软件架构师讲座[Z]国家信息产业部计算(5)可维护性。修改Bug,增加功能,提高质量属性。机技术中心,2007-12为了达到以上三种目的之一,而定位修改点并实施修改的难[6] Wikipedia[EB/Oq htψ//en w汰ipediaorg/w业山.Jon-Functi易程度。onal_R equirements (收稿日期:2008-11-01) 喃喃喃喃喃喃~~~~~~~~~~~~~~~~~~~~~~~~~~~~喃喃喃欢迎广大读者订阅《微型电脑应用》期刊.64.