软件架构的基本需求是在满足功能属性的前提下,关注软件系统的质量属性 。在精准描述软件质量场景后,可通过对架构的评估决定架构策略以及架构评审。
一、软件系统质量属性
基于软件系统生命周期,将软件系统质量属性分为开发期质量属性和运行期质量属性。
1、开发期质量属性
易理解性:指设计被开发人员理解的难易程度
可扩展性:软件因适应新需求或需求变化而增加新功能的能力,也称灵活性
可重用性:指重用软件系统或某一部分的难易程度
可测试性:对软件测试以证明其满足需求规范的难易程度
可维护性:当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度
可移植性:将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度
2、运行期质量属性
性能:软件系统及时提供相应服务的能力,如速度、吞吐量和容量等
安全性:软件系统同时兼顾向合法用户提供服务,以及组织非授权使用的能力
可伸缩性:当用户数和数据量增加时,软件系统维持高服务质量的能力
互操作性:软件系统与其他系统交换数据和相互调用服务的难易程度
可靠性:软件系统在一定的时间内持续无故障运行的能力
可用性:系统在一定时间内正常工作的时间所占比例
鲁棒性:软件系统在非正常情况(用户进行非法操作、相关软硬件系统发生故障)下仍正常运行的能力,也称健壮性或容错性
二、面向架构评估的质量属性
1、相关属性介绍
性能:处理任务所需时间或单位时间内的处理量
可靠性:分为容错与健壮性。容错即出现错误后仍能保证系统争取运行,且自行修正错误;健壮性即错误不对系统产生影响,按既定程序忽略错误
可用性:正常运行的时间比例
安全性:系统向合法用户提供服务并阻止非法用户的能力
可修改性:分为可维护性、可扩展性、结构重组、可移植性。
功能性:需求的满足程度
可变性:总体架构可变
互操作性:通过可视化或接口方式提供更好的交互操作体验
2、提升或保证质量属性的应对措施
①提升可用性:
错误检测:心跳、Ping/Echo、异常。
错误恢复:表决、主动冗余、被动冗余、重新同步、内测、检查点/回滚。
错误避免:服务下线、事务、进程监控器。
②提升性能:
资源的需求:减少处理事件时对资源的占用、减少处理事件的数量、控制资源的使用。
资源管理:并发机制、增加资源。
资源仲裁:先来先服务、固定优先级、动态优先级、静态调度。
③提升可修改性:
局部化修改:高内聚低耦合、预测变更、使模块通用。
防止连锁反应:信息隐藏、维持现有接口、限制通信路径、使用中介。
推迟绑定时间:运行时注册、多态、配置文件。
④提升安全性:
抵抗攻击:用户身份验证、用户授权、维护数据机密性与完整性、限制暴露、限制访问。
检测攻击:入侵检测系统。
从攻击中恢复:恢复状态、识别攻击者
3、质量属性场景描述
质量属性场景是一种面向特定质量属性的需求,由刺激源、刺激、环境、制品、响应、响应度量组成。
(1)刺激源(Source):某个生成该刺激的实体(人、计算机系统或者任何其他刺激器)。
(2)刺激(Stimulus):指当刺激到达系统时需要考虑的条件。
(3)环境(Environment):指该刺激在某些条件内发生。当激励发生时,系统可能处于过载、
运行或者其他情况。
(4)制品(Artifact):某个制品被激励,可能是整个系统,也可能是系统的一部分。
(5)响应(Response):指在激励到达后所采取的行动。
(6)响应度量(Measurement):当响应发生时,应当能够以某种方式对其进行度量,以对需
求进行测试。