软件架构---质量属性
软件属性包括功能属性与质量属性,在软件架构里,更加关注的是质量属性。质量是系统的属性,而功能是系统的目标。
既然将质量属性与功能区别开,也就是说质量属性是功能之外的东西,在软件架构里,我们寻求的是在满足功能属性的前提下,尽可能满足质量属性。很多时候,导致软件需要发生变更的往往不是系统功能需要变更,而是系统难以维护、扩展、被黑客破坏等
质量属性的定义:一个系统的用来描述系统满足利益相关者需求的程度的可测量或可测试的属性(A quality attribute (QA) is a measurable or testable property of a system that is used to indicate how well the system satisfies the needs of its stakeholders. )
质量属性亦被称为:
-
-
-
非功能性需求Non-Functional Requirements (NFRs)我的理解是与系统具体功能无关
-
跨职能约束Cross-Functional Constraints (CFCs)我的理解是一个系统质量属性将会约束多个系统功能
-
-
构架和质量属性之间的关系
- 质量属性不完全依赖于设计、实现和部署
易用性:
系统能否为用户提供取消操作?——这一类属于构架层次的问题
什么样的布局最直观?什么样的字体最清晰?——这属于详细设计的部分,不属于构架设计。
可修改性:
划分功能的方式——这属于架构层次的问题
模块中的编码技巧——非架构层次问题
系统性能:
组件间通讯数量、分配给每个组件的功能、资源共享的方式,等,这些都属于架构层次的问题
实现某功能采用的算法、如何编码这些算法,等,都会影响系统性能,但属于非构架层次的问题。
- 构架不能独自实现质量属性
构架为质量属性的实现打下了基础,但不关注实现细节的话,这个基础就失去了意义。
- 复杂系统中,不能孤立地实现质量属性,质量属性是互相关联的,往往不能兼顾
例如,为了可靠性,增加冗余处理器和进程,保证不会因单点故障使系统崩溃。但这样对安全性不利,系统会有更多的地方可能会遭到入侵
质量属性的来源:3类需求
功能需求
质量属性需求
约束
描述质量属性需求的6个部分
刺激stimulus:是到达系统的事件event
刺激源stimulus source:生成刺激的实体(计算机、人-可信或不可信)
响应response:刺激到达后采取的反应
响应度量response measure:对响应效果进行度量
环境:刺激发生时的各种条件
制品:可能是系统,或系统的一部分