论文部分内容阅读
摘要:随着计算机科学技术的发展,越来越多的人把关注的目光投入到了计算机软件领域,而软件构架中的非功能需求凭借其在软件设计过程中的重要地位更是得到了开发人员的重视。该文以非功能需求作为研究对象进行分析,从软件架构的概念谈起,阐述了非功能需求的发展历程,并详细介绍了非功能需求的常见指标,最后提出非功能需求的区域化支持这一概念。
关键词:非功能需求;软件架构;区域化支持
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)09-2085-02
The Non-functional Needs of Software Architecture and the Definition of Locale Support
ZHANG Hong-sheng
(Department of Public Courses, Xi’an Fan-yi University, Xi’an 710105, China)
Abstract: With the development of computer technology, more people focus on the computer software field. However, the non-functional needs of software architecture, which have been playing a significant role in the process of software design, draw the attention of software developers. This paper is devoted to the non-functional needs of software architecture and concludes with the definition of locale support. It first presents the definition of non-functional needs, and then dates the development of them. After providing a detailed introduction of the major indexes of non-functional needs, it puts forward the definition of locale support.
Key words: non-functional needs; software architecture; locale support
軟件架构(software architecture)也称之为软件体系结构,它是一系列相关的抽象模式,用于指导软件系统各方面的设计。它是一个软件系统的草图,描述的对象是直接构成该软件系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通信。软件系统架构设计中的非功能需求不仅是架构师知识结构中的重要组成部分之一,也扮演了重要的角色,甚至会直接决定架构的组成。
非功能性需求是随着软件系统的规模成长和复杂性增加这两个因素才逐渐成为软件工程师们的新着眼点和关注点的,早期的时候,甲方处于自身对软件技术的了解和自身对系统文件维护的方便性考虑等,对系统有了诸如:开发平台、技术流派、关键实现等等方面的要求,这被称之为“设计约束”。从甲乙双方合同的角度,设计约束也是一种需求——一种“非功能”性的需求,后来,软件的质量问题越来越突出,描述软件质量目标的要求也成为非功能性需求的一部分。于是,目前业界关于软件的非功能需求,一般就包括:质量属性要求和约束性要求。
其实,非功能性需求是常常被轻视,甚至被忽视的。原因是它们不易被发现,发现后不易表达、实现以及测试。经管如此,软件架构也必须考虑非功能性需求,非功能性需求是一个软件是否优雅的重要体现。资深架构师与非资深架构师的主要区别就在于对软件非功能性的处理。软件架构的主要体现也在于非功能性需求方面。非功能性需求还涉及到架构设计中的性能,异常,日志,安全,可扩展性,稳定性等一系列问题。关注非功能性需求才会真正考虑架构中关键技术的选择,选择的准则就是满足非功能性需求,同时考虑设计开发的高效性。
1 非功能性需求的常见指标
1.1 什么是非功能性需求
非功能需求是产品必须具备的品质或者它将事情做到了多好,它们可以让产品有吸引力、易于使用、快速、可靠或者安全。通常并不改变产品的功能,功能性需求是让产品工作的需求,非功能需求是为工作赋予特征的需求。所以说,功能性需求和非功能性需求是相辅相成密不可分的。非功能性需求经常被忽略,因为它们不易被发现,发现后不易表达、实现以及测试。其实我们很多时候都将非功能需求不自觉的融入到了功能需求中。软件产品的非功能性需求包括系统的性能、可靠性、兼容性、可维护性、配置、界面、安全性、可扩充性和对技术和对业务的适应性等。
1.2 什么是非功能性需求的常见指标
所谓非功能性需求,是指软件产品为满足用户业务需求而必须具有且除功能需求以外的特性。其主要指标为:
1)观感需求(界面需求)
主要描述了对产品外观的期望、情绪和风格。这些需求规定了外观想要达到的目标,它和详细的界面设计还是有区别的,体现的是客户的感觉。作为web服务的一种的网银服务,应该相当重视观感需求,比如网站应该看起来很专业、很有权威性、显的很高贵、很精美等。界面需求还包括对控件进行规范和对控件的使用范围进行一个规定等方面的内容。可以考虑借用一个原型来描述。
2)易用性需求与可执行需求
易用性会使产品提高符合用户习惯的能力以及其对使用的期望。它会对用户使用产品的生产效率、错误率以及用户对新产品的接收程度产生很大的影响。
可执行需求是指产品可以在给定的时间或者特定的精确度来执行某些任务,或者在一段时间内的极端状态值。在考虑执行需求时,可以从完成任务的速度、结果的精确度、容量、允许值的范围、单位时间内完成的任务数、资源的使用效率、两次故障间的平均无故障时间、连续不停机时间等方面入手。它还应该包括对风险的控制内容。
3)安全性需求
安全性指产品消除潜在风险的能力和对风险的承受能力。包含、保密性、可靠性和完整性三个子特性。保密性指的是数据不能被授权用户以外的任何人访问的能力。可靠性指的是授权用户可以不受阻止的访问数据、与其它软件的兼容的能力和产品的强壮度。完整性指的是安预期目标完成任务的能力。
一般分为程序安全、系统安全、数据安全。程序安全是指开发的程序是否是安全的,程序上有没有安全的漏洞,例如Web开发中服务器代码没有对输入的参数进行验证,从而导致客户端机器人轻易的获取数据。系统安全指的是系统整体的安全,例如安全的粒度,未经授权的用户是否可以轻易的访问非法的数据等。数据的安全是对数据的保护,数据库中数据有没有做审核,用户之间是否会共享数据等。
4)系统的完整性需求
指为完成业务需求和系统正常运行本身要求而必须具有的功能,这些功能往往是用户不能提出的。典型的功能有:联机帮助、数据管理、用户管理、软件发布管理、在线升级,等等。
并不是所有的系统都必须包括以上所有的功能,而是可以根据产品的使用环境和企业的产品发展决策进行挑选。例如,在线升级、软件发布管理适用于具有因特网或内网环境的软件产品;而数据管理对于产生数据存储的产品则是必须的,设计人员不应假设用户同时是一个合格的DBA,而且系统所产生信息的分布、关系,也不是DBA所应该了解的内容。因此,完整的系统应该包括数据备份、恢复、日志管理、垃圾数据清除等基本功能,哪怕这些功能的核心只是一条语句或命令。用户管理功能是另一项必不可少的功能,它定义哪些用户可以以什么样的功能使用系统。好的用户管理功能不仅可以有效控制用户对系统的使用,使系统处于一个安全、负载合理的运行状况,还能提高系统的应用适应性。
5)系统的可扩充性与可维护性
这里指的是当系统达到瓶颈的时候怎样在不修改代码的情况下提供系统的负载能力,扩展一般分为Scale UP和Scale Out。一般情况下会综合运用UP和OUT。例如,增加服务器的性能来提高系统的处理能力,但是任何计算机都会有一定的瓶颈,当增加服务器性能不能达到提高系统性能的时候,我们需要考虑横向的扩展服务器,也即Scale Out。在Scale Out时一般需要我们的系统是状态无关的,即Stateless。
当技术变化或业务变化时,不可避免将带来系统的改变——不仅要进行设计实现的修改,甚至要进行产品定义的修改。好的软件设计应在系统构架上考虑能以尽量少的代价适应这种变化。常用的技术方法有面向对象的分析与设计以及设计模式。
通过认识以上非功能性需求的常见指标,非功能需求的重要性主要程度要看项目具体情况而定,比如对于一个嵌入式系统软件运行开销非常重要,如果是实时系统,响应时间就很关键,如果是联机交易系统可靠性、安全性、性能都很重要。然而笔者认为在非功能性需求中还有应注意它的区域化支持。
2 非功能性需求中的区域化支持
2.1 什么是区域化支持
区域化支持是指软件产品的适应性也就是产品的匹配性及兼容性,同时区域化支持也表现在不同区域的用户对产品的接受能力。
2.2 区域化支持的作用
区域化支持是提高软件产品的质量和推广软件产品应用的有效手段,当软件产品的适应性越来越高时,区域化支持在技术上能更有效地表现产品的可配置能力,从而提高质量,使得软件产品更为稳定。当用户对软件产品的接受越来越容易时,不同区域的用户对产品的应用会有同一感,更能有效的展现软件产品的人性化,进而使得软件产品容易进入不同区域。非功能性需求的区域化支持,在技术上关键是应该将任务划分成合适的组件并将它们恰当地组织起来,当运行条件发生变化时,这样我们不仅能降低其复杂性而且更加易于维护。在人们的需求和接受能力上,区域化支持又是测试产品是否能有效地应用,为我们后期维护与改进提供了珍贵的市场信息。
2.3 如何实现区域化支持
从区域化支持这一概念出发,我们只要做到软件产品具有好的适应性也就是不同情况下的应变能力;同时了解不同区域的用户的需求即对产品的接受能力,就可以实现区域化支持的非功能性需求。
软件产品要有好的适应性其实就是软件产品要具有一种应变能力。这种应变能力即适应性,强调的是在不进行系统设计的修改的前提下对技术与应用需求的适应能力。软件产品的适应性通常表现为产品的可配置能力。好的产品设计可能要考虑到运行条件的变化,包括技术条件(网络条件、硬件条件、软件系统平台条件等)的变化和应用方式的变化,如在具体应用中界面的变化、功能的剪裁、不同用户的职责分配和组合等。
不同区域的用户对软件产品的接受能力是不同的,这是一类特殊的需求,由于人的习惯、宗教、语言、禁忌或偏见,可能会导致产品不被接收。因此我们需要了解用户的特殊需求,从而实现软件产品大面积的需求,使得软件产品有效地应用于各个领域,进一步体现软件产品的价值。
3 总结
软件架构中的非功能需求是多样的、不定的, 然而其本质是相对固定的。我们应从非功能需求的根本出发, 正确认识 “质量属性要求和约束性要求”。现阶段软件架构中非功能需求的思想较新,还不成熟。这一思想要得到重视而不被忽视,就必须在多个方面深入地研究其思想和相关技术,并使研究成果能够应用于实践,并在实践中检验和发展。这一点对于从事软件设计开发的实践者是极其重要的。
参考文献:
[1] 杨秀杰,段立娜.基于模式设计软件架构的研究[J].计算机与信息技术,2007(32).
[2] 姜滨.深入理解软件架构[J].甘肅科技纵横,2007,36(4).
关键词:非功能需求;软件架构;区域化支持
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)09-2085-02
The Non-functional Needs of Software Architecture and the Definition of Locale Support
ZHANG Hong-sheng
(Department of Public Courses, Xi’an Fan-yi University, Xi’an 710105, China)
Abstract: With the development of computer technology, more people focus on the computer software field. However, the non-functional needs of software architecture, which have been playing a significant role in the process of software design, draw the attention of software developers. This paper is devoted to the non-functional needs of software architecture and concludes with the definition of locale support. It first presents the definition of non-functional needs, and then dates the development of them. After providing a detailed introduction of the major indexes of non-functional needs, it puts forward the definition of locale support.
Key words: non-functional needs; software architecture; locale support
軟件架构(software architecture)也称之为软件体系结构,它是一系列相关的抽象模式,用于指导软件系统各方面的设计。它是一个软件系统的草图,描述的对象是直接构成该软件系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通信。软件系统架构设计中的非功能需求不仅是架构师知识结构中的重要组成部分之一,也扮演了重要的角色,甚至会直接决定架构的组成。
非功能性需求是随着软件系统的规模成长和复杂性增加这两个因素才逐渐成为软件工程师们的新着眼点和关注点的,早期的时候,甲方处于自身对软件技术的了解和自身对系统文件维护的方便性考虑等,对系统有了诸如:开发平台、技术流派、关键实现等等方面的要求,这被称之为“设计约束”。从甲乙双方合同的角度,设计约束也是一种需求——一种“非功能”性的需求,后来,软件的质量问题越来越突出,描述软件质量目标的要求也成为非功能性需求的一部分。于是,目前业界关于软件的非功能需求,一般就包括:质量属性要求和约束性要求。
其实,非功能性需求是常常被轻视,甚至被忽视的。原因是它们不易被发现,发现后不易表达、实现以及测试。经管如此,软件架构也必须考虑非功能性需求,非功能性需求是一个软件是否优雅的重要体现。资深架构师与非资深架构师的主要区别就在于对软件非功能性的处理。软件架构的主要体现也在于非功能性需求方面。非功能性需求还涉及到架构设计中的性能,异常,日志,安全,可扩展性,稳定性等一系列问题。关注非功能性需求才会真正考虑架构中关键技术的选择,选择的准则就是满足非功能性需求,同时考虑设计开发的高效性。
1 非功能性需求的常见指标
1.1 什么是非功能性需求
非功能需求是产品必须具备的品质或者它将事情做到了多好,它们可以让产品有吸引力、易于使用、快速、可靠或者安全。通常并不改变产品的功能,功能性需求是让产品工作的需求,非功能需求是为工作赋予特征的需求。所以说,功能性需求和非功能性需求是相辅相成密不可分的。非功能性需求经常被忽略,因为它们不易被发现,发现后不易表达、实现以及测试。其实我们很多时候都将非功能需求不自觉的融入到了功能需求中。软件产品的非功能性需求包括系统的性能、可靠性、兼容性、可维护性、配置、界面、安全性、可扩充性和对技术和对业务的适应性等。
1.2 什么是非功能性需求的常见指标
所谓非功能性需求,是指软件产品为满足用户业务需求而必须具有且除功能需求以外的特性。其主要指标为:
1)观感需求(界面需求)
主要描述了对产品外观的期望、情绪和风格。这些需求规定了外观想要达到的目标,它和详细的界面设计还是有区别的,体现的是客户的感觉。作为web服务的一种的网银服务,应该相当重视观感需求,比如网站应该看起来很专业、很有权威性、显的很高贵、很精美等。界面需求还包括对控件进行规范和对控件的使用范围进行一个规定等方面的内容。可以考虑借用一个原型来描述。
2)易用性需求与可执行需求
易用性会使产品提高符合用户习惯的能力以及其对使用的期望。它会对用户使用产品的生产效率、错误率以及用户对新产品的接收程度产生很大的影响。
可执行需求是指产品可以在给定的时间或者特定的精确度来执行某些任务,或者在一段时间内的极端状态值。在考虑执行需求时,可以从完成任务的速度、结果的精确度、容量、允许值的范围、单位时间内完成的任务数、资源的使用效率、两次故障间的平均无故障时间、连续不停机时间等方面入手。它还应该包括对风险的控制内容。
3)安全性需求
安全性指产品消除潜在风险的能力和对风险的承受能力。包含、保密性、可靠性和完整性三个子特性。保密性指的是数据不能被授权用户以外的任何人访问的能力。可靠性指的是授权用户可以不受阻止的访问数据、与其它软件的兼容的能力和产品的强壮度。完整性指的是安预期目标完成任务的能力。
一般分为程序安全、系统安全、数据安全。程序安全是指开发的程序是否是安全的,程序上有没有安全的漏洞,例如Web开发中服务器代码没有对输入的参数进行验证,从而导致客户端机器人轻易的获取数据。系统安全指的是系统整体的安全,例如安全的粒度,未经授权的用户是否可以轻易的访问非法的数据等。数据的安全是对数据的保护,数据库中数据有没有做审核,用户之间是否会共享数据等。
4)系统的完整性需求
指为完成业务需求和系统正常运行本身要求而必须具有的功能,这些功能往往是用户不能提出的。典型的功能有:联机帮助、数据管理、用户管理、软件发布管理、在线升级,等等。
并不是所有的系统都必须包括以上所有的功能,而是可以根据产品的使用环境和企业的产品发展决策进行挑选。例如,在线升级、软件发布管理适用于具有因特网或内网环境的软件产品;而数据管理对于产生数据存储的产品则是必须的,设计人员不应假设用户同时是一个合格的DBA,而且系统所产生信息的分布、关系,也不是DBA所应该了解的内容。因此,完整的系统应该包括数据备份、恢复、日志管理、垃圾数据清除等基本功能,哪怕这些功能的核心只是一条语句或命令。用户管理功能是另一项必不可少的功能,它定义哪些用户可以以什么样的功能使用系统。好的用户管理功能不仅可以有效控制用户对系统的使用,使系统处于一个安全、负载合理的运行状况,还能提高系统的应用适应性。
5)系统的可扩充性与可维护性
这里指的是当系统达到瓶颈的时候怎样在不修改代码的情况下提供系统的负载能力,扩展一般分为Scale UP和Scale Out。一般情况下会综合运用UP和OUT。例如,增加服务器的性能来提高系统的处理能力,但是任何计算机都会有一定的瓶颈,当增加服务器性能不能达到提高系统性能的时候,我们需要考虑横向的扩展服务器,也即Scale Out。在Scale Out时一般需要我们的系统是状态无关的,即Stateless。
当技术变化或业务变化时,不可避免将带来系统的改变——不仅要进行设计实现的修改,甚至要进行产品定义的修改。好的软件设计应在系统构架上考虑能以尽量少的代价适应这种变化。常用的技术方法有面向对象的分析与设计以及设计模式。
通过认识以上非功能性需求的常见指标,非功能需求的重要性主要程度要看项目具体情况而定,比如对于一个嵌入式系统软件运行开销非常重要,如果是实时系统,响应时间就很关键,如果是联机交易系统可靠性、安全性、性能都很重要。然而笔者认为在非功能性需求中还有应注意它的区域化支持。
2 非功能性需求中的区域化支持
2.1 什么是区域化支持
区域化支持是指软件产品的适应性也就是产品的匹配性及兼容性,同时区域化支持也表现在不同区域的用户对产品的接受能力。
2.2 区域化支持的作用
区域化支持是提高软件产品的质量和推广软件产品应用的有效手段,当软件产品的适应性越来越高时,区域化支持在技术上能更有效地表现产品的可配置能力,从而提高质量,使得软件产品更为稳定。当用户对软件产品的接受越来越容易时,不同区域的用户对产品的应用会有同一感,更能有效的展现软件产品的人性化,进而使得软件产品容易进入不同区域。非功能性需求的区域化支持,在技术上关键是应该将任务划分成合适的组件并将它们恰当地组织起来,当运行条件发生变化时,这样我们不仅能降低其复杂性而且更加易于维护。在人们的需求和接受能力上,区域化支持又是测试产品是否能有效地应用,为我们后期维护与改进提供了珍贵的市场信息。
2.3 如何实现区域化支持
从区域化支持这一概念出发,我们只要做到软件产品具有好的适应性也就是不同情况下的应变能力;同时了解不同区域的用户的需求即对产品的接受能力,就可以实现区域化支持的非功能性需求。
软件产品要有好的适应性其实就是软件产品要具有一种应变能力。这种应变能力即适应性,强调的是在不进行系统设计的修改的前提下对技术与应用需求的适应能力。软件产品的适应性通常表现为产品的可配置能力。好的产品设计可能要考虑到运行条件的变化,包括技术条件(网络条件、硬件条件、软件系统平台条件等)的变化和应用方式的变化,如在具体应用中界面的变化、功能的剪裁、不同用户的职责分配和组合等。
不同区域的用户对软件产品的接受能力是不同的,这是一类特殊的需求,由于人的习惯、宗教、语言、禁忌或偏见,可能会导致产品不被接收。因此我们需要了解用户的特殊需求,从而实现软件产品大面积的需求,使得软件产品有效地应用于各个领域,进一步体现软件产品的价值。
3 总结
软件架构中的非功能需求是多样的、不定的, 然而其本质是相对固定的。我们应从非功能需求的根本出发, 正确认识 “质量属性要求和约束性要求”。现阶段软件架构中非功能需求的思想较新,还不成熟。这一思想要得到重视而不被忽视,就必须在多个方面深入地研究其思想和相关技术,并使研究成果能够应用于实践,并在实践中检验和发展。这一点对于从事软件设计开发的实践者是极其重要的。
参考文献:
[1] 杨秀杰,段立娜.基于模式设计软件架构的研究[J].计算机与信息技术,2007(32).
[2] 姜滨.深入理解软件架构[J].甘肅科技纵横,2007,36(4).