软件架构设计之质量属性浅析

news/2024/6/20 18:18:39/文章来源:https://blog.csdn.net/m290345792/article/details/139221297

在这里插入图片描述

引言

在数字化浪潮席卷而来的今天,软件已经渗透到我们生活的方方面面,从手机APP到大型企业级系统,无一不彰显着软件技术的魅力。然而,在这背后,软件架构设计作为软件开发的基石,其质量属性的重要性不言而喻。今天,我们就来一起探索软件架构设计中的质量属性,揭开其神秘面纱。

在这里插入图片描述

质量属性定义

ATAM(Architecture Tradeoff Analysis Method)软件系统质量属性主要涉及到系统在不同生命周期阶段所展现出的特性,这些属性通常被分为开发期质量属性和运行期质量属性两大类。

质量属性概念

软件系统质量是软件满足需求和标准的能力。根据GB/T 16260.1定义,软件质量影响因素可划分为六个维度特性:功能性、可靠性、易用性、效率、维护性和可移植性。
简单来说,质量属性是指软件系统在满足功能需求的同时,还需满足一系列非功能性的质量要求。这些要求包括但不限于性能、可靠性、安全性、易用性、可维护性等。这些质量属性不仅关系到软件的使用体验,更直接关系到软件的生命周期和成本效益。

软件质量属性是描述系统满足利益相关者需求的可测量或可测试的属性,分为开发期和运行期质量属性。

开发期质量属性

开发期质量属性主要指在软件开发阶段所关注的质量属性,主要包含以下几个方面:

  1. 易理解性(Understandability)

    • 定义:指设计被开发人员理解的难易程度。
    • 重要性:良好的易理解性可以提高开发效率,减少错误和返工。
  2. 可扩展性(Scalability)

    • 定义:软件因适应新需求或需求变化而增加新功能的能力,也称为灵活性。
    • 重要性:可扩展性好的系统能够轻松应对业务增长和变化,降低维护成本。
  3. 可重用性(Reusability)

    • 定义:指重用软件系统或某一部分的难易程度。
    • 重要性:可重用性可以减少开发工作量,提高代码质量和系统稳定性。
  4. 可测试性(Testability)

    • 定义:对软件测试以证明其满足需求规范的难易程度。
    • 重要性:良好的可测试性可以确保软件质量,降低发布风险。
  5. 可维护性(Maintainability)

    • 定义:当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度。
    • 重要性:可维护性高的系统可以降低维护成本,提高系统的长期价值。
  6. 可移植性(Portability)

    • 定义:将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。
    • 重要性:可移植性好的系统能够适应不同的硬件、操作系统和网络环境,提高系统的灵活性和适应性。

运行期质量属性

运行期质量属性主要指在软件运行阶段所关注的质量属性,主要包含以下几个方面:

  1. 性能(Performance)

    • 定义:软件系统及时提供相应服务的能力,如速度、吞吐量和容量等的要求。
    • 量化指标:QPS(每秒处理请求数)、TPS(每秒处理事务数)、响应时间等。
  2. 安全性(Security)

    • 定义:指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。
    • 重要性:安全性是软件系统的基本要求之一,关乎用户数据和系统资产的安全。
  3. 可伸缩性(Elasticity)

    • 定义:指当用户数和数据量增加时,软件系统维持高服务质量的能力。
    • 实现方式:通过增加服务器、负载均衡等方式提高系统处理能力。
  4. 互操作性(Interoperability)

    • 定义:指本软件系统与其他系统交换数据和相互调用服务的难易程度。
    • 重要性:良好的互操作性可以促进系统之间的集成和协作,提高整体效率。
  5. 可靠性(Reliability)

    • 定义:软件系统在一定的时间内持续无故障运行的能力。
    • 量化指标:MTTF(平均失效等待时间)、MTBF(平均失效间隔时间)等。
  6. 可用性(Availability)

    • 定义:指系统在一定时间内正常工作的时间所占的比例。
    • 量化指标:常用X个9指标进行量化,如“5个9”表示全年系统不可用时间只有5分钟。
  7. 鲁棒性(Robustness)

    • 定义:是指软件系统在非正常情况(如用户进行了非法操作、相关的软硬件系统发生了故障等)下仍能够正常运行的能力,也称健壮性或容错性。
    • 重要性:鲁棒性好的系统能够应对各种异常情况,保证系统的稳定性和可用性。

ATAM软件系统质量属性涵盖了从开发到运行全生命周期的多个方面,这些属性共同构成了软件系统质量的全面评价体系。

在这里插入图片描述

质量属性场景描述的作用

用途主要在于帮助架构师、开发人员和其他利益相关者深入理解系统如何满足特定的质量属性需求。这些场景描述在ATAM评估过程中起到了关键作用。

主要体现在以下几个方面:

  1. 明确需求:质量属性场景描述有助于明确和细化系统的质量属性需求。通过具体描述刺激源、刺激、环境、制品、响应和响应度量,可以确保所有利益相关者都对系统的期望行为有清晰的认识。

  2. 分析影响:通过质量属性场景,可以分析架构如何响应各种条件和刺激。这有助于识别可能的问题点、瓶颈或弱点,并在架构设计时采取相应的改进措施。

  3. 指导设计:质量属性场景描述可以作为架构设计的指导原则。架构师可以根据这些场景来评估不同设计选项的优缺点,并选择最符合质量属性需求的方案。

  4. 验证架构:在架构开发完成后,可以使用质量属性场景来验证架构是否满足预期的质量属性需求。通过模拟或实际运行这些场景,可以测试架构的响应行为和性能指标,并据此进行必要的调整和优化。

  5. 促进沟通:质量属性场景描述有助于促进不同利益相关者之间的有效沟通。通过共同讨论和分析这些场景,可以确保所有相关方都对系统的期望行为有共同的理解,并减少误解和冲突。

  6. 风险评估:通过对不同质量属性场景的分析,可以评估系统中存在的潜在风险,如性能瓶颈、安全隐患或可扩展性问题等。这有助于在架构设计时采取预防措施,降低系统失败的风险。

  7. 支持决策:在架构评估和决策过程中,质量属性场景描述提供了具体的分析依据。通过比较不同设计选项在不同场景下的表现,可以做出更明智的决策,选择最适合系统需求的架构方案。
    在这里插入图片描述

主要的质量属性

ATAM(Architecture Tradeoff Analysis Method)软件系统架构评估主要关注质量属性,旨在帮助团队在架构设计时理解和评估系统如何满足各种质量属性需求。在ATAM中,质量属性通常被分为几个关键类别,这些类别描述了系统在不同方面的表现。

以下是ATAM中常见的一些质量属性类别:

1. 性能(Performance)

  • 系统响应请求的速度。
  • 吞吐量(系统处理请求的能力)。
  • 资源利用(如CPU、内存和磁盘I/O)。

2. 可用性(Availability)

  • 系统持续提供服务的能力。
  • 故障恢复时间。
  • 系统维护导致的停机时间。

3. 可靠性(Reliability)

  • 系统在特定时间内无故障运行的能力。
  • 平均故障间隔时间(MTBF)。
  • 平均修复时间(MTTR)。

4. 安全性(Security)

  • 系统保护数据和资源免受未经授权访问、使用、修改或破坏的能力。
  • 认证和授权机制。
  • 数据加密和完整性保护。

5. 可维护性(Maintainability)

  • 诊断和修复故障的难易程度。
  • 修改或增强现有功能的难易程度。
  • 文档完备性和准确性。

6. 可扩展性(Scalability)

  • 系统应对增长的能力,如用户数量、数据量或交易量的增长。
  • 垂直扩展(提升硬件性能)和水平扩展(添加更多硬件)。

7. 可移植性(Portability)

  • 系统在不同硬件、操作系统或网络环境中的迁移能力。
  • 跨平台兼容性。

8. 互操作性(Interoperability)

  • 系统与其他系统交换数据和相互调用服务的能力。
  • 标准和协议的支持。

在ATAM评估过程中,团队会首先识别关键的质量属性需求,然后分析架构如何支持这些需求。这通常涉及到识别架构中的关键组件和交互,并评估它们如何影响质量属性。通过模拟和场景分析,团队可以预测系统在不同条件下的行为,并识别可能的问题和改进点。最终,ATAM将帮助团队在架构设计中做出明智的权衡,以确保系统能够满足关键的质量属性需求。
在这里插入图片描述

质量属性场景描述

ATAM(Architecture Tradeoff Analysis Method)质量属性场景描述是为了明确表达软件系统中某个特定质量属性的需求和行为。

关键要素

  1. 刺激源(Source)

    • 定义:触发场景发生的实体或条件。
    • 示例:用户尝试访问网站、外部系统发送数据请求等。
  2. 刺激(Stimulus)

    • 定义:刺激源产生的具体行为或事件。
    • 示例:用户输入了错误的密码、外部系统发送了大量的并发请求。
  3. 环境(Environment)

    • 定义:刺激发生时的上下文或条件。
    • 示例:网络延迟较高、系统处于高负载状态。
  4. 制品(Artifact)

    • 定义:受刺激影响的系统部分或组件。
    • 示例:登录模块、数据库服务器、负载均衡器等。
  5. 响应(Response)

    • 定义:系统对刺激的响应行为。
    • 示例:系统拒绝用户登录、启动负载均衡策略、返回错误信息等。
  6. 响应度量(Response Measurement)

    • 定义:用于量化评估系统响应效果的指标或参数。
    • 示例:登录失败次数、响应时间、吞吐量、系统资源利用率等。

小结

一个清晰的质量属性场景描述应该包含以下结构:

  • 场景编号或名称:唯一标识该场景。
  • 刺激源:明确触发场景发生的实体或条件。
  • 刺激:详细描述刺激源产生的具体行为或事件。
  • 环境:说明刺激发生时的上下文或条件。
  • 制品:指出受刺激影响的系统部分或组件。
  • 响应:描述系统对刺激的响应行为。
  • 响应度量:提供用于量化评估系统响应效果的指标或参数。

示例场景

例如,一个关于“系统登录功能”的可用性质量属性场景描述可能如下:

  • 场景名称:系统登录功能在高并发环境下的可用性
  • 刺激源:大量用户同时尝试登录系统
  • 刺激:系统接收到大量并发登录请求
  • 环境:网络状况良好,但系统处于高负载状态
  • 制品:登录模块、数据库服务器
  • 响应:系统能够正常处理并发请求,快速验证用户身份并返回结果
  • 响应度量:登录成功率、平均响应时间、系统资源利用率(如CPU、内存)等。

在这里插入图片描述

总结

软件架构设计中的质量属性是软件开发过程中不可或缺的一环。作为架构师,我们需要充分理解并关注这些质量属性,通过合理的设计和技术手段来确保软件系统的质量和稳定性。只有这样,我们才能打造出真正优秀、可靠、安全的软件系统,为用户带来更好的使用体验和价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ldbm.cn/p/430333.html

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算属性与监听属性

【 1 】计算属性 计算属性大致就是这样 # 1 计算属性是基于它们的依赖进行缓存的# 2 计算属性只有在它的相关依赖发生改变时才会重新求值# 3 计算属性就像Python中的property,可以把方法/函数伪装成属性 # 计算属性本质上是一个函数,它们可以通过 get…

行为设计模式之状态模式

文章目录 概述定义结构图 2.代码示例小结 概述 定义 状态模式(state pattern)的定义: 允许一个对象在其内部状态改变时改变它的行为。 对象看起来似乎修改了它的类。 状态模式就是用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题.。状态模式将一个对象的状态…

git拉取项目前需要操作哪些?

1.输入 $ ssh-keygen -t rsa -C "秘钥说明" 按enter键 2.出现 ssh/id_rsa:(输入也可以不输入也可以) 然后按enter键 3.出现empty for no passphrase:(输入也可以不输入也可以) 然后按enter键 4.出现same passphrase again: (输入也可以不输入也…

数据库技术基础

数据库技术基础 导航 文章目录 数据库技术基础导航一、基础概念数据库系统数据库管理系统DBMS分类数据库技术的发展数据库体系结构 二、数据模型数据模型基本概念 三、数据库的控制功能事务概述SOL中事务定义语句日志文件故障种类两个操作Undo/Redo事务故障的恢复系统故障的恢…

RT-DETR算法改进【NO.1】借鉴CVPR2024中的StarNet网络StarBlock改进算法

前 言 YOLO算法改进的路有点拥挤,尝试选择其他的baseline作为算法研究,可能会更加好发一些文章。后面将陆续介绍RT-DETR算法改进的方法思路。 很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解…

电子围栏(地理围栏)设计逻辑

做完整的项目时需要考虑安全问题,判断车辆在不该出现的位置出现时自动刹车。 只能说可以有吧。 地理围栏的概念 自动驾驶地理围栏是指在自动驾驶系统中定义的一种虚拟边界,用于限制车辆的运行范围。地理围栏可以通过全球定位系统(GPS&#…

CRMEB开源商城系统:全开源、高灵活性的电商解决方案

一、引言 随着电子商务的飞速发展,越来越多的企业和个人开始关注如何快速搭建一个稳定、高效且功能丰富的在线商城系统。在这样的背景下,CRMEB开源商城系统应运而生,凭借其前后端分离的架构、丰富的功能模块以及易用性,成为了众多…

国产PS插件新选择;StartAI平替中的佼佼者!

前言 在设计的世界里,每一个细节都至关重要。设计师们常常面临时间紧迫、创意受限、工具复杂等挑战。Photoshop虽强大,但繁琐的操作和高昂的成本往往令人望而却步。今天我就为大家介绍一款PSAI插件——StartAI,一款专为Photoshop设计的国产A…

pod容器基础概念

一 Pod基础概念: ①Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个 Pod代表着集群中运行的一个进程。一个pod包含一个或多个容器。如:应用容器/业务容器(淘 宝、京东、拼多多后台&#xff…

gitlab将本地文件项目上传至gitlab服务

打开gitlab网页界面,登陆管理员账号 (测试服务器安装的gitlab,浏览器输入ip或配置的gitlab地址) 创建新项目 使用gitlab创建项目 创建一个新项目(忽略分组) (忽略分组) 在创建工…

计算机操作系统体系结构

我是荔园微风,作为一名在IT界整整25年的老兵,今天给大家讲讲操作系统。 当今的操作系统趋向于越来越复杂,因为它们提供许多服务,并支持各种硬件和软件资源(请参见“操作系统思想:尽量保持简单”&#xff0…

快解析动态域名解析,实现外网访问内网数据库

今天跟大家分享一下如何借助快解析动态域名解析,在两种特定网络环境下,实现外网访问内网mysql数据库。 第1种网络环境:路由器分配的是动态公网IP,且有路由器登录管理权限。如何实现外网访问内网mysql数据库? 针对这种…

C++学习---string模拟实现(2)

1.随机插入一个字符串 (1)insert函数插入一个字符的方法我们在之前的模拟实现里面已经搞过了,那个里面要注意的是这个全体向后挪动的循环过程,这个里面我们要实现的是插入字符串的模拟实现; (2&#xff0…

【Spring-01】BeanFactory和ApplicationContext

【Spring-01】BeanFactory和ApplicationContext 1. 容器接口1.1 什么是 BeanFactory1.2 BeanFactory 能做什么? 1. 容器接口 以 SpringBoot 的启动类为例: /*** BeanFactory 与 ApplicationContext的区别*/ SpringBootApplication public class Spring…

【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用

大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言随机查询语…

Rohm公司参展欧洲PCI盛会

​德国历史悠久的文化名城纽伦堡,即将迎来一场科技盛宴——欧洲PCI展览会。在这个为期三天的盛会中(6月11日至13日),Rohm公司将以璀璨之姿,特别聚焦宽带隙(WBG)设备的璀璨光芒。 此次&#xff0…

AWS安全性身份和合规性之Identity and Access Management(IAM)

通过AWS Identity and Access Management(IAM),您可以指定谁或什么能够访问AWS中的服务和资源、集中管理精细权限,并分析访问权限以优化跨AWS的权限。 比如一家软件开发公司需要在AWS上创建多个开发人员账户,并对其进…

Kibana创建ElasticSearch 用户角色

文章目录 1, ES 权限参考2, 某应用的管理员权限:可以open/close/delete/cat/read/write 索引3, 某应用的读写权限:可以cat/read/write 索引 (不能删除索引或数据)4, 某应用的只读权限 1, ES 权限参考 https://www.elastic.co/gui…

5,串口编程---实现简单的用串口发送接收数据

单片机通过串口向PC机发送数据 PC机通过串口接收单片机发过来的数据 1.UART和USART的区别: USART支持同步通信方式,可以通过外部时钟信号进行同步传输,而UART仅支持异步通信方式 本开发板STM32F103ZET6有5个串口,用串口1作调试串口,因为串…

K8S中Prometheus+Grafana监控

1.介绍 phometheus:当前一套非常流行的开源监控和报警系统。 运行原理:通过HTTP协议周期性抓取被监控组件的状态。输出被监控组件信息的HTTP接口称为exporter。 常用组件大部分都有exporter可以直接使用,比如haproxy,nginx,Mysql,Linux系统信…