Application Architecture Guide 2.0 (Chapter 7: Quality Attributes) Part 1
质量属性
目标
l 学习关键质量属性,以及这些属性是如何用于应用系统中的。
l 了解关键问题与决策以及这些质量属性在技术层面上的关联关系。
概述
质量属性是影响系统运行时性能、系统设计、和用户体验等诸多横切关注点,质量属性对一个软件系统的整体可用性、性能、可靠性、安全性等来说是非常重要的。一个系统的质量是以多个属性的组合之后来衡量的,而且一些属性往往互相“冲突”的,这就要求架构师能做出权衡。所以说一个系统的质量属性应该是诸多质量属性的组合和平衡。举例“性能”和“安全”往往就是有一定的互斥性,安全性要求越高,对系统的性能的影响就会越大,如果一个系统有极高安全性需求,那就不得不降低一些性能要求。对于不同的系统,对每一个质量属性需求的重要性和优先级也是不同的,例如,在线事务性系统(Line-of-business, LOB)它的对性能、可伸缩性、安全性和可用性的需求就比交互性(Interoperability)的需求重要性高很多,而对于一个富客户端系统,它的交互性的需求就比较重要。
如何使用本章
本章描述了在系统设计过程中需要考虑的质量属性。为了有效的利用本章,首先要明确上面的目标与概览,然后通过使用“质量属性是如何组织的”章节中的表格以了解这些质量属性是如何作为质量属性映射到应用系统中的。接下来在质量属性表中详细介绍了各个属性的含义。最后,了解每个质量属性的关键问题,针对每个问题您都必须作出相应的决策,关键技术会帮助您解决这些质量属性问题。尽管本章的质量属性介绍的篇幅有限,但是对于回答“当前采用的架构是否适合于应用系统”之类的问题,提供了一个良好的开端。
质量属性是如何组织的
质量属性的影响域范围非常广,这些影响可能会跨越应用系统的逻辑层甚至是物理层。有些属性与整个系统的设计产生关联,有的则会带来运行时、设计时或用户使用时的问题。通过下表能够了解这些属性会对哪些具体的场景造成影响。
分类 | 质量属性 |
系统质量(System Qualities) | 可支持性(Supportability) 可测试性(Testability) |
运行时质量(Run-Time Qualities) | 可用性(Availability) 协作性(Interoperability) 可维护性(Manageability) 性能(Performance) 可靠性(Reliability) 可伸缩性(Scalability) 安全性(Secruity) |
设计时质量(Design Qualities) | 可复用性(Reusability) 可扩展性(Extensibility) 易理解性(Understandability) 可维护性(Manageability) 概念一致性(Conceptual Integrity) |
用户质量(User Qualities) | 用户体验性/易用性(User Experience / Usability) |
质量属性表
下表中表述了本章涵盖的所有质量属性。通过下表了解每个质量属性对应用系统设计的重要意义。
质量属性 | 描述 |
可用性(Availability) | 持续可用性指系统长时间无故障运行的能力。通常根据整个系统的停机时间是否超过了预期的时间的百分比来衡量系统的可用性。影响系统可用性的因素主要有系统错误、基础设施问题、恶意攻击和系统负载等。 |
概念一致性(Conceptual Integrity) | 概念一致性定义了覆盖整个软件设计的一致性和条例性。它包括组件或模块的设计方法等,也包括诸如代码风格、变量命名等要素。 |
灵活性(Flexibility) | 灵活性是系统适应不同的环境及应对业务规则变化的能力。一个灵活的系统仅仅通过简单的修改就能够应对不同的用户与系统的需求。 |
协作性(Interoperability) | 协作性是指一个系统的各个组件间或者不用系统间的成功交换信息的能力。一个协作性好的系统应该能很容易的与其内部或者外部进行信息的交互和复用。 |
可维护性(Manageability) | 可维护性是指维护人员为修正软件系统出现的错误或者缺陷,以及为满足新的要求而添加、修改和完善软件系统功能的难易程度。提高可维护性是决定软件工程方法论所有步骤的关键目标, |
性能(Performance) | 性能是指软件系统及时提供相应服务的能力,具体而言包括速度、吞吐量和持续高速性等。速度往往通过平均相应时间来度量;吞吐量通过单位时间处理交易数来度量;而持续高速性是指保持告诉高速处理速度的能力。 |
可靠性(Reliability) | 可靠性是软件系统在一定时间内无故障运行的能力。 |
可复用性(Reusability) | 可服用性定义了软件系统、或子系统\或某一部分的可复用于其它应用系统或者场景的能力。 |
可伸缩性(Scalability) | 可伸缩性是指,当用户数量和数据量增加时,软件系统维护高服务质量的能力。例如,当业务量较小时,软件系统运行在一台服务器上,当业务量增加时,可以通过增加服务器或增加单服务器上所运行软件系统的个数来提高性能,而无需对软件系统本身进行代码重构级的变更。 |
安全性(Security) | 安全性指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。高安全性意味着“同时兼顾”,这是因为有些攻击的目的是使软件系统拒绝向合法用户提供服务,而不是非法访问。 |
可支持性(Supportability) | 可支持性是指运维人员、开发人员和用户理解和使用应用系统的难易程度,以及当系统出现故障后解决错误的及时性和难易程度。 |
可测试性(Testability) | 可测试性指的是测试软件组件或集成产品时查找缺陷的简易程度,在实际工作中通常指进行单元测试、回归测试、自动化测试等的难易程度。如果产品中包含复杂的算法和逻辑,或如果具有复杂的功能性的相互关系,那么对于可测试性的设计就很重要。如果经常更改产品,那么可测试性也是很重要的,因为将经常对产品进行回归测试来判断更改是否破坏了现有的功能性。 |
易用性(Usability) | 易用性描述的是许多组成“用户友好”的因素。易用性通常的考虑因素有:客户对系统的“第一印象”、易于本地化或全球化、为不同的用户提供了方便的访问公式、给用户提供好的体验性等。 |
To be continued …