《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-04-软件架构演化原则

文章目录

  • 1. 演化成本控制原则
  • 2. 进度可控原则
  • 3. 风险可控原则
  • 4. 主体维持原则
  • 5. 系统总体结构优化原则
  • 6. 平滑演化原则
  • 7. 目标一致原则
  • 8. 模块独立演化原则
  • 9. 影响可控原则
  • 10. 复杂性可控原则
  • 11. 有利于重构原则
  • 12. 有利于重用原则
  • 13. 设计原则遵从性原则
  • 14. 适应新技术原则
  • 15. 环境适应性原则
  • 16. 标准依从性原则
  • 17. 质量向好原则
  • 18. 适应新需求原则

1. 演化成本控制原则

  • Evolution Cost Control (ECC)原则
  • 解释:
    • 演化成本要控制在预期的范围之内
    • 即,演化成本要明显小于重新开发成本
  • 用途:
    • 判断架构演化的成本是否在可控范围内
    • 用户是否可接受
  • 度量方案: CoE << CoRD

说明:

  • CoE:演化成本
  • CoRD:为重新开发成本

2. 进度可控原则

  • Schedule Control 原则
  • 解释:
    • 架构演化要在预期时间内完成
    • 即,时间成本可控
  • 用途:
    • 根据该原则规划每个演化过程的任务量
    • 体现一种迭代、递增的演化思想
  • 度量方案: ttask=|Ttask-T’task|] (对照书上确认公式

    说明:

    • Ttask:某个演化任务的实际完成时间
    • T’task:预期完成时间
    • ttask:二者时间差(该值越小越好)

3. 风险可控原则

  • Risk Control 原则
  • 解释:架构演化过程中的经济风险、时间风险、人力风险、技术风险、环境风险等必须在可控范围内。
  • 用途:于判断架构演化过程中各种风险是否易于控制
  • 度量方案:分别检验

说明:时间风险、经济风险、人力风险、技术风险应不存在

4. 主体维持原则

  • 解释:软件系统的演化过程中,应尽量保持软件主体结构和核心功能的稳定性和连贯性。

教材原文的解释:对称稳定增长 (the Average Incremental Growth,AIG) 原则所有其他因素必须与软件演化协调,开发人员、销售人员、用户必须熟悉软件演化的内容,从而达到令人满意的演化。因此,软件演化的平均增量的增长须保持平稳,保证软件系统主体行为稳定。

  • 用途:判断架构演化是否导致系统主体行为不稳定
  • 度量方案:AIG=主体规模的变更量/主体的规模

说明:根据度量动态变更信息(类型、总量、范围)来计算

5. 系统总体结构优化原则

  • Optimization of Whole Structure 原则
  • 解释:架构演化要遵循系统总体结构优化原则,使得演化之后的软件系统整体结构(布局)更加合理
  • 途:判断系统整体结构是否合理,是否最优。
  • 度量方案:检查系统的整体可靠性和性能指标

6. 平滑演化原则

  • Invariant Work Rate(IWR)原则

  • 解释:在软件系统的生命周期里,软件的演化速率趋于稳定

    如,相邻版本的更新率相对固定

  • 用途:用于判断是否存在剧烈架构演化

  • 度量方案:IWR=变更总量/项目规模

说明:根据度量动态变更信息(类型、总量、范围等)来计算

7. 目标一致原则

  • Objective Conformance 原则
  • 解释:架构演化的阶段目标和最终目标要一致
  • 用途:
    • 判断每个演化过程是否达到阶段目标
    • 所有演化过程结束是否能达到最终目标
  • 度量方案: otask=|Otask-O’task|

说明:

  • Otask:阶段目标的实际达成情况
  • O’task:预期目标
  • Otask:二者的差(越小越好)

8. 模块独立演化原则

  • 或称为修改局部化原则 (Local Change)
  • 解释:软件中各模块自身的演化最好相互独立,或者至少保证对其他模块的影响比较小或影响范围比较小
  • 用途:判断每个模块自身的演化是否相互独立
  • 度量方案:检查模块的修改是否是局部的

说明:可以通过计算修改的影响范围来进行度量。

9. 影响可控原则

  • Impact Limitation 原则
  • 解释:软件中一个模块如果发生变更,其给其他模块带来的影响要在可控范围内,也就是影响范围可预测
  • 用途:用于判断是否存在对某个模块的修改导致大量其他修改的情况
  • 度量方案:检查影响的范围是否可控

10. 复杂性可控原则

  • Complexity Controllability 原则
  • 解释:架构演化必须保障软件的复杂性在可控范围内
  • 用途:用于判断演化之后的架构是否易维护、易扩展、易分析、易测试等
  • 度量方案: CC < 某个阈值

11. 有利于重构原则

  • Useful for Refactoring 原则
  • 解释:架构演化要遵循有利于重构原则,使得演化之后的软件架构更便于重构。
  • 原则用途:用于判断架构易重构性是否得到提高
  • 度量方案:检查系统的复杂度指标

说明:系统越复杂越不容易重构

12. 有利于重用原则

  • Useful for Reuse 原则
  • 解释:架构演化最好能维持甚至提高整体架构的可重用性
  • 用途:判断整体架构可重用性是否遭到破坏
  • 度量方案:检查模块自身的内聚度、模块之间的耦合度

说明:模块的内聚度越高,该模块与其他模块之间的耦合度越低,越容易重用

13. 设计原则遵从性原则

  • Design Principles Conformance 原则
  • 解释:架构演化最好不能与架构设计原则冲突。
  • 用途:判断架构设计原则是否遭到破坏
  • 度量方案: RCP=ICDP//DP| (对照书上确认公式

说明:

  • CDP:冲突的设计原则集合
  • DP:总的设计原则集合
  • RCP越小越好

14. 适应新技术原则

  • Technology Independence 原则
  • 解释:软件要独立于特定的技术手段,这样才能够让软件运行于不同平台
  • 用途:判断架构演化是否存在对某种技术依赖过强的情况
  • 度量方案: TI=1-DDT

说明:

  • DDT:依赖的技术集合用到的技术合集
  • 根据演化系统对关键技术的依赖程度进行度量

15. 环境适应性原则

  • Platform Adaptability 原则
  • 解释:架构演化后的软件版本能够比较容易适应新的硬件环境与软件环境
  • 用途:用于判断架构在不同环境下是否仍然可使用,或者容易进行环境配置
  • 度量方案:硬件/软件兼容性

16. 标准依从性原则

  • Standard Conformance 原则
  • 解释:架构演化不会违背相关质量标准

如:国际标准、国家标准、行业标准、企业标准等

  • 原则用途:用于判断架构演化是否具有规范性,是否有章可循
  • 度量方案:需要人工判定

17. 质量向好原则

  • Quality Improvement 原则
  • 解释:通过演化使得所关注的某个质量指标或某些质量指标的综合效果变得更好或者更满意
  • 用途:用于判断架构演化是否导致某些质量指标变得很差
  • 度量方案:(对照书上确认公式

说明:演化之后的质量 (EQI) 比原来的质量 (SQ) 要好。

18. 适应新需求原则

  • New Requirement Adaptability 原则
  • 解释:
    • 架构演化要很容易适应新的需求变更
    • 架构演化不能降低原有架构适应新需求的能力
    • 架构演化最好可以提高适应新需求的能力
  • 用途:用于判断演化之后的架构是否降低了架构适应新需求的能力
  • 度量方案: RNR=|ANR//NR|

说明:

  • ANR:适应的新需求集合
  • NR:实际新需求集合
  • RNR:以上二者比较的比较, 越小越好

在这里插入图片描述

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

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

相关文章

Django 4.x 智能分页get_elided_page_range

Django智能分页 分页效果 第1页的效果 第10页的效果 带输入框的效果 主要函数 # 参数解释 # number: 当前页码&#xff0c;默认&#xff1a;1 # on_each_side&#xff1a;当前页码前后显示几页&#xff0c;默认&#xff1a;3 # on_ends&#xff1a;首尾固定显示几页&#…

LWIP+TCP客户端

一、TCP API函数 其中tcp_poll()函数的第三个参数表示隔几秒调用一次这个周期性函数 二、修改服务器的IP 三、TCP客户端编程思路 申请套接字绑定服务器IP和端口号等待客户端连接 进入连接回调函数在连接回调函数中 配置一些回调函数&#xff0c;如接收回调函数&#xff0c;周期…

牛客 | 字符金字塔

请打印输出一个字符金字塔&#xff0c;字符金字塔的特征请参考样例 #include <stdio.h> #include <string.h> using namespace std; int main() {char c;scanf("%c", &c);for (int i 1; i < (c - 64); i)//第一个循环决定了有多少行{//c:67 第三…

每日两题 / 138. 随机链表的复制 148. 排序链表(LeetCode热题100)

138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 用哈希表记录原链表中的节点是否被复制过 遍历原链表并通过哈希表维护新链表 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;rand…

Java | Leetcode Java题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m matrix.length, n matrix[0].length;int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 low;int x matrix[mid / n][m…

人工神经网络初步

大家好&#xff0c;这里是七七&#xff0c;由于各种比赛的缘故&#xff0c;使用了很多人工神经网络模型。但是很多的原理都不是很明白&#xff0c;就导致了不能灵活地运用┭┮﹏┭┮。为此&#xff0c;去看了些人工神经网络原理书&#xff0c;写下此专题。 在进入正文之前要先…

指针再学习笔记

概念 示例 类型 示例 作用 注意&#xff1a;有些内存地址可能系统不会允许任意访问 运算 示例 空指针

ue引擎游戏开发笔记(34)——建立射击映射,并添加特效

1.需求分析&#xff1a; 准备处理射击系统&#xff0c;首先角色需要能射击&#xff0c;有反馈&#xff0c;先建立角色与控制器之间的映射&#xff0c;并添加简单特效&#xff0c;证明映射已经建立。 2.操作实现&#xff1a; 1.首先常规建立映射流程&#xff0c;具体可参考笔记…

《挑战100个产品拆解:抖音》

抖音&#xff0c;作为当今社交媒体领域的明星产品&#xff0c;其背后的产品思维一直备受关注。在这篇文章中&#xff0c;我们将深入拆解抖音的产品思维&#xff0c;揭示其成功的秘密。 产品定位 1.产品是什么样的用户&#xff1a; 年轻人和青少年是抖音的主要用户群体。抖音…

VMware与CentOS的安装

VMware与CentOS的安装 第一章 VMware安装第二章 CentOS上网虚拟机网络IP修改地址配置修改主机名和hosts文件修改主机名称配置Linux克隆机主机名称映射hosts文件&#xff0c;打开/etc/hosts 安装Xshell7和Xftp7 第一章 VMware安装 VMware Workstation Pro 安装包 …

洗地机什么牌子最好?618高性价比家用洗地机品牌

随着科技的发展&#xff0c;智能智能清洁家电越来越受到消费者的欢迎。洗地机作为其中的佼佼者&#xff0c;已经成为许多家庭清洁的好帮手。然而&#xff0c;面对满目琳琅的洗地机品牌型号&#xff0c;究竟哪一款机型适合家用呢&#xff0c;正好618也临近了&#xff0c;又有哪些…

【每日刷题】Day33

【每日刷题】Day33 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 2. 445. 两数相加 II - 力扣&#xff08;…

牛客网刷题 | BC79 小乐乐求和

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 小乐乐最近接触了求…

鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位

时间概念太重要了&#xff0c;在鸿蒙内核又是如何管理和使用时间的呢? 时间管理以系统时钟 g_sysClock 为基础&#xff0c;给应用程序提供所有和时间有关的服务。 用户以秒、毫秒为单位计时.操作系统以Tick为单位计时&#xff0c;这个认识很重要. 每秒的tick大小很大程度上决…

Linux:进程等待 进程替换

Linux&#xff1a;进程等待 & 进程替换 进程等待wait接口statuswaitpid接口 进程替换exec系列接口 当一个进程死亡后&#xff0c;会变成僵尸进程&#xff0c;此时进程的PCB被保留&#xff0c;等待父进程将该PCB回收。那么父进程要如何回收这个僵尸进程的PCB呢&#xff1f;父…

js实现json数据可编辑

背景 项目中有低代码平台&#xff0c;由于历史脏数据和非同步编辑的问题&#xff0c;偶尔会出现数据错乱的问题&#xff0c;希望有一个快捷的方式修改数据 之前在用Formily的时候有注意到designable/react 里面的json数据编辑功能非常不错如果能应用到项目里就完美了 design…

【数据结构】二叉树知识点详解

树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合有一个特殊的结点&#xff0c;称为根结点&#xff0c;根节点没有前驱结点除根节点外&#xff0c;其余结点被分成M(M>0)个互不相交的集合T1、T2、…

【贪心算法】单源最短路径Python实现

文章目录 [toc]问题描述Dijkstra算法Dijkstra算法的正确性贪心选择性质最优子结构性质 Dijkstra算法应用示例Python实现时间复杂性 问题描述 给定一个带权有向图 G ( V , E ) G (V , E) G(V,E)&#xff0c;其中每条边的权是非负实数&#xff0c;给定 V V V中的一个顶点&…

【busybox记录】【shell指令】expand

目录 内容来源&#xff1a; 【GUN】【expand】指令介绍 【busybox】【expand】指令介绍 【linux】【expand】指令介绍 使用示例&#xff1a; 把制表符转化为空格 - 默认输出 把制表符转化为空格 - 修改制表符转空格的个数 把制表符转化为空格 - 修改制表符转空格的个数…

四川易点慧电子商务抖音小店:潜力无限的新零售风口

在当今数字化浪潮中&#xff0c;电子商务已经成为推动经济发展的重要引擎。四川易点慧电子商务有限公司凭借其敏锐的市场洞察力和创新精神&#xff0c;成功在抖音小店这一新兴平台上开辟出一片新天地。本文将探讨四川易点慧电子商务抖音小店的潜力及其在新零售领域的影响力。 一…