当前位置: 首页 > news >正文

软考高级架构 - 10.5 软件架构演化评估方法

10.4 软件架构演化原则总结

        本节提出了18条架构演化的核心原则,并为每条原则设计了简单而有效的度量方法,用于从系统整体层面提供实用信息,帮助评估和指导架构演化。

  1. 演化成本控制:成本小于重新开发成本,经济高效。
  2. 进度可控:演化任务按计划时间完成。
  3. 风险可控:控制演化过程中的各种风险。
  4. 主体维持:演化稳定增长,不影响系统主体行为。
  5. 结构优化:演化后整体结构更合理、更高效。
  6. 平滑演化:保持演化速率稳定,避免剧烈变化。
  7. 目标一致:阶段性和最终目标保持一致。
  8. 模块独立演化:模块修改互不干扰或影响范围小。
  9. 影响可控:变更对系统的影响范围可预测。
  10. 复杂性可控:限制复杂性增长,确保系统易维护。
  11. 有利于重构:演化后更便于代码和架构重构。
  12. 有利于重用:提升或维持架构的可重用性。
  13. 设计原则遵从:演化符合既定设计原则。
  14. 适应新技术:减少技术依赖,适应多平台。
  15. 环境适应性:支持新硬件和软件环境。
  16. 标准依从性:遵循国际、国家或行业标准。
  17. 质量向好:提升系统的质量属性,如可靠性。
  18. 适应新需求:增强架构应对新需求的能力。

10.5 软件架构演化评估方法

根据演化过程是否已知,软件架构演化评估分为:

  1. 演化过程已知的评估:通过对演化前后的架构进行度量和比较,评估演化对架构质量属性的影响。
  2. 演化过程未知的评估:针对未知的演化轨迹,通常通过大规模数据分析或模型预测方法进行评估(未详述)。

10.5.1 演化过程已知的评估

        基于度量的架构演化评估方法,通过细化演化过程和指标计算,能够清晰地分析架构内部结构的变化如何影响外部质量属性,保障软件架构在演化中的可靠性和可维护性。

评估流程

        对演化前后架构版本进行度量,原子演化操作。然后计算相邻版本间的架构质量属性距离,最后得出最初版本和最终版本的质量属性距离。综合分析架构演化过程中的质量属性变化,评估架构质量。

架构质量属性度量
  • 可靠性:单一实数值,表示架构的潜在风险率。
  • 可维护性:包括:圈复杂度 (CCN)、扇入/扇出度 (Fan-in/Fan-out)、模块间耦合度、模块的响应性、紧内聚度、松内聚度
架构质量属性距离计算
  1. 可维护性距离:归一化笛卡尔距离公式: 距离值越大,表示版本间可维护性差异越大。

  2. 可靠性距离:简化的归一化公式,表示两个版本在可靠性上的差异。

  3. 非相邻版本的架构质量属性距离

架构演化评估的意义
  1. 架构修改影响分析

    • 分类不同类型的原子演化操作。
    • 分析内部逻辑结构或交互过程对外部质量属性的影响。
    • 研究架构版本间距离与质量属性差异的关联。
  2. 监控演化过程

    • 绘制架构质量属性变化曲线。
    • 持续监测质量属性的变化趋势,确保健康演化。
  3. 分析关键演化过程

    • 确定架构质量变化的关键节点。
    • 识别逻辑依赖或交互过程的重大变化,有助于维护和故障定位。

10.5.2 演化过程未知的评估

        当软件架构的演化过程未知时,我们无法直接跟踪每一步的变化,需通过 逆向推测 的方法,根据架构演化前后的度量结果分析架构的变化及其对质量属性的影响。

        通过验证演化是否达成预期目标,可以保障架构健康地持续演化,同时发现和修复潜在问题。

评估流程
  1. 架构度量:分别对 演化前架构演化后架构 进行质量属性度量,得到度量结果。

  2. 计算质量属性距离:根据度量结果,计算演化前后架构的 质量属性距离,分析两者之间的差异。

  3. 推测架构演化操作:根据质量属性距离的变化,逆向推测可能发生的 架构演化操作集合,并确定操作的作用位置和对象

  4. 分析驱动因素:例如平台移植、提高性能、修复代码错误。

  5. 验证预期目标

        不符合预期:可能存在未解决的问题或引入新问题,需进一步演化修复。

        符合预期:说明演化完成了预期任务,如可维护性提高、可靠性增强。

评估应用
  1. 演化操作验证:确定演化是否达到了改善架构的目标。

  2. 问题定位与优化:识别演化过程中可能引入的质量问题

  3. 支持持续演化:分析架构演化中的缺陷,支持下一轮的合理演化。

http://www.lryc.cn/news/502986.html

相关文章:

  • 半导体制造全流程
  • 国科大网络协议安全期末
  • ES动态索引——日志es索引数据按月份存储
  • NLP论文速读(ICML 2024)|面相对齐大语言模型的迁移和合并奖励模型方法
  • 蓝桥杯我来了
  • Vue3+TypeScript+AntVX6实现Web组态(从技术层面与实现层面进行分析)内含实际案例教学
  • 【LeetCode】每日一题 2024_12_13 K 次乘运算后的最终数组 I(暴力)
  • Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比
  • 深度学习day4|用pytorch实现猴痘病识别
  • 批量导出工作簿中高清图片-Excel易用宝
  • 外观模式的理解和实践
  • linux离线安装部署redis
  • 网管平台(基础篇):路由器的介绍与管理
  • 数据结构——跳表
  • 活动预告 |【Part2】Microsoft Azure 在线技术公开课:基础知识
  • PyCharm如何导入库( 包 )
  • 【DevOps基础篇】SCM(Source Code Management)
  • DDS—RTPS一致性测试案例分析
  • 【深度学习入门】深度学习介绍
  • 数值分析—非线性方程的数值解
  • LDR6500应用:C转DP线材双向投屏开启全新体验
  • 路径规划之启发式算法之十六:和声搜索算法(Harmony Search, HS)
  • Redis - 实战之 全局 ID 生成器 RedisIdWorker
  • matlab 连接远程服务器
  • 在服务器自主选择GPU使用
  • 【设计模式】享元模式(Flyweight Pattern)
  • 题目 1688: 数据结构-字符串插入
  • 28.攻防世界PHP2
  • QML QT6 WebEngineView 、Echarts使用和数据交互
  • SpringBoot 整合 Mail 轻松实现邮件自动推送