软件系统属性
软件系统的属性可以从多个角度来理解和分类,包括功能性、性能、维护性、可移植性、可靠性、安全性等。
功能性(Functionality):
正确性(Correctness):软件执行其指定功能的能力
适应性(Suitability):软件满足特定任务和用户需求的能力
互操作性(Interoperability):软件与其他系统或组件协同工作的能力
性能(Performance):
效率(Efficiency):软件在使用资源方面的表现,包括响应时间和吞吐量
可扩展性(Scalability):软件在需求增加时,处理更大工作负载的能力
可靠性(Reliability):
可用性(Availability):系统在预期时间内正常运行的能力
容错性(Fault Tolerance):软件在发生故障时继续运行的能力
恢复性(Recoverability):软件在出现故障后恢复正常运行的能力
可维护性(Maintainability):
可理解性(Understandability):软件的设计和实现容易理解的程度
可修改性(Modifiability):软件在不影响其他部分功能的前提下,进行修改的难易程度
可测试性(Testability):软件支持测试的容易程度
可移植性(Portability):
适应性(Adaptability):软件在不同环境中运行的能力
易安装性(Installability):软件在安装过程的难易程度
一致性(Conformance):软件符合标准和规范的程度
安全性(Security):
保密性(Confidentiality):保护数据不被未授权访问的能力
完整性(Integrity):防止数据未授权修改或破坏的能力
可用性(Availability):确保系统服务不被拒绝使用的能力
认证性(Authenticity):确保数据和用户身份真实可靠的能力
用户体验(Usability)
易学性(Learnability):用户学习使用系统的难易程度
易用性(Ease of Use):用户在实际使用中感受到的便捷程度
满意度(Satisfaction):用户对系统使用体验的满意程度
这些属性共同定义了软件系统的质量和性能,使软件开发和评估过程中需要重点考虑的因素。根据具体项目的需求,某些属性可能比其他属性更为重要。
软件系统属性
软件系统属性可以分为功能属性和质量属性
功能属性:是指软件系统实现特定功能的能力,包括正确性、适应性和互操作性等
质量属性:软件质量属性是系统的可测量或者可测试的属性,用来描述系统满足利益相关者需求的程度。质量属性是衡量软件系统质量的重要指标,通常包括以下几个方面:
性能(Performance):系统在资源利用效率、响应时间和吞吐量等方面的表现
可靠性(Reliability):系统在规定条件下和规定时间内运行的能力,包括可用性、容错性和恢复性
可维护性(Maintainability):系统的设计和实现容易理解、修改和测试
可移植性(Protability):系统在不同环境中运行的适应性和安装难易程度
安全性(Security):系统保护数据和防止未授权访问的能力
用户体验(Usability):用户在学习、使用和满意度方面的体验
软件架构的重点
软件架构的基本需求是在满足质量属性场景后,就需要对系统架构进行评估。软件系统架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。
质量属性分类
基于软件系统的生命周期,可以将质量属性分为开发期质量属性和运行期质量属性两个部分
开发期质量属性:主要关注系统在开发过程中的表现,如可维护性、可测试性等
运行期质量属性:主要关注系统在运行过程中的表现,如性能、可靠性、安全性等
开发期质量属性
开发期质量属性主要指在软件开发阶段所关注的质量属性。这个阶段的关注人群主要是开发者。开发期质量属性包括以下六个方面:
易理解性(Understandability)
指被开发人员理解的难易程度。易理解的设计可以加快开发进度,减少沟通成本
可扩展性(Scalability)
软件因适应新需求而增加新功能的能力,也称为灵活性。良好的可扩展性使得系统能够平滑应对业务需求的变化
可重用性(Reusability)
指重用软件系统或某一部分功能的难易程度。
可测试性(Testability)
对软件进行测试以证明其满足需求规范的难易程度。
可维护性(Maintainability)
当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度。
可移植性(Portability)
将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。
运行期质量属性
运行期质量属性主要指在软件运行阶段所关注的质量属性。这个阶段关注的人群主要是用户。运行期质量属性包括以下七个方面
性能(Performance)
性能是指软件系统及时提供相应服务的能力
安全性(Security)
指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力
可伸缩性(Scalability)
指当用户数和数据量增加时,软件系统维护高服务质量的能力
互操作性(Interoperability)
指软件系统与其他系统交换数据和相互调用服务的难易程度
可靠性(Reliability)
软件系统在一定时间内持续无故障运行的能力
可用性(Availability)
指系统在一定时间内正常工作的时间锁占的比例。
鲁棒性(Robustness)
指软件系统在非正常情况下仍然能够正常运行的能力,也称健壮性或容错性
面向架构评估的质量属性
性能(Performance)
定义:指系统的响应能力,即要经过多长时间才能对某个事件做出相应,或者在某段时间内系统所能处理的时间的个数。
设计策略
优先级队列:优先处理重要任务以提高整体性能
增加计算资源:增加服务器、CPU、内存等硬件资源以提升处理能力
减少计算开销:优化算法和代码、提高效率
引入并发机制:使用多线程或多进程能力,提高并发处理能力
采用资源调度:动态分配和调度资源,避免浪费
可靠性(Reliability)
定义:系统在一段时间内保持正常运行而不发生故障的能力。它强调了系统的稳定性和可靠性,通常通过衡量系统在一段时间内发生故障的概率来评估。可靠性指标包括MTTF(平均无故障时间,指设备或系统的平均无故障运行时间)、MTBF(平均故障间隔时间,指两次故障之间的平均时间)、MTTR(平均故障修复时间,指故障发生到故障修复完成的平均时间。用于衡量系统可用性和可靠性。MTTR越短,标识系统修复故障的能力越强,系统的可用性和可靠性越高)。MTBF=MTTF+MTTR。
在修复时间可以忽略的情况下,MTBF=MTTF+MTTR。因此MTTF和MTBF几乎相等
设计策略
心跳:通过定期发送信号检测系统是否正常运行
Ping/Echo:使用Ping命令检测系统的连通性
冗余:增加系统冗余设计,确保单点故障不会导致系统停机
选举:在分布式系统中,选举主节点以确保系统的正常运行
可用性(Availability)
系统在需要的时候可供使用的能力,即系统处于可操作状态的时间比例。可用性通常通过计算系统在一定时间内可操作的百分比来评估。
设计策略
心跳:定期检测系统组件的健康状态
Ping/Echo:确保系统的网络连通性
冗余:通过增加备份服务器和数据冗余,提高系统的可用性
选举:使用主从切换确保系统在故障后迅速恢复
可靠性和可用性的区别:
可靠性:强调系统不发生故障。
可用性:强调系统在需要时可供使用。
安全性(Security)
系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。如保密性、完整性、不可抵赖性、可控性。
设计策略
入侵检测:检测和防御系统收到的非法访问和攻击
用户认证:确认用户身份,防止未授权的用户访问系统
用户授权:控制用户权限,确保用户只能访问其被授权的资源
追踪审计:记录用户操作日志,以便追踪和审计用户活动
可修改性(Modifiability)
能够快速地以较高的性能价格比对系统进行变更的能力。
设计策略
接口-实现分离:将接口与实现分开,使得更改实现时不影响接口
抽象:使用抽象层次来隔离变化
信息隐藏:隐藏内部细节,减少变更对其他部分的影响
功能性(Functionality)
系统所能完成所期望的工作的能力。
设计策略
功能分解:将系统功能分解成独立的模块或服务
明确接口:定义清晰的接口,使功能模块可以协同工作
一致性检查:确保所有模块在功能实现上的一致性和完整性
可变性、可扩展性(Variability/Scalability)
体系结构经扩充变更而成为新体系结构的能力。
设计策略
模块化设计:通过模块化设计来支持扩展和变化
插件架构:使用插件机制来增加或替换功能
配置管理:使用配置文件来管理和应用不同的设置和扩展
互操作性(Interoperability)
作为系统组成部分的软件不是独立存在的,经常与其他系统或自身环境相互作用。为了支持互操作性,软件体系结构必须为外部可视功能特性和数据结构提供精心设计的软件入口
设计策略
标准化接口
数据格式标准化
兼容性测试
易用性(Usability)
关注软件系统的用户界面和交互设计,以确保用户能够轻松、高效地使用系统。
设计策略
用户研究
界面设计
用户测试
交互设计