25.架构和软件产品线
文章目录
- 25 Architecture and Software Product Lines架构和软件产品线
- 25.1 An Example of Product Line Variability 产品线可变性的一个例子
- 25.2 What Makes a Software Product Line Work? 软件产品线的工作原理是什么?
- 25.3 Product Line Scope 产品线范围
- 25.4 The Quality Attribute of Variability 可变性的质量属性
- 25.5 The Role of a Product Line Architecture 产品线架构的作用
- 25.6 Variation Mechanisms 差异化机制
- 25.7 Evaluating a Product Line Architecture 评估产品线架构
- 25.8 Key Software Product Line Issues 关键软件产品线问题
- 25.9 Summary 小结
- 25.10 For Further Reading 进一步阅读
- 25.11 Discussion Questions 问题讨论
25 Architecture and Software Product Lines架构和软件产品线
Coming together is a beginning. Keeping together is progress. Working together is success.
—Henry Ford
软件架构通常是由高级人才进行的重大时间和精力投入。 因此,很自然地希望通过在多个系统之间重用架构来最大化此投资的回报。
在实践中有很多方式发生这种情况。 我们在第13章中讨论的模式是朝这个方向迈出的一大步。 使用模式会重用一整套架构决策(尽管不是完整的架构)。 严格来说,每次对系统进行更改时,您都在重用其架构(或者您不必更改其架构的任何部分)。
本章展示了在一系列相关系统中重用软件架构(以及许多其他资产)的另一种方法,以及这样做的好处。 许多软件生产组织倾向于生产彼此相似的系统或产品。 这是在这些类似产品之间重用架构的机会。 这些软件产品线简化了一系列类似系统的新成员的创建。
事实证明,这种重用带来了很多好处,包括降低了建造成本,提高了质量并大大缩短了上市时间。 这就是软件产品线方法进行系统构建的诱惑。
软件工程学院将软件产品线定义为“一组软件密集型系统,它们共享一组共同的、受管的功能,这些功能可以满足特定细分市场或任务的特定需求,并且是通过使用一组通用的核心资产开发而成的。 规定的方式。”
愿景是基于共同的体系结构和构成该架构的软件元素,提供一组可重复使用的资产(称为核心资产)。 核心资产还包括设计及其文档,用户手册,项目管理工件(例如预算和进度表),软件测试计划和测试用例等。
产品线方法之所以行之有效,是因为核心资产是专门为支持同一系列产品的多个成员而构建的。 因此,与为组织产品组合中的每个新产品或系统重新发明这些软件资产相比,重新使用它们更快,更便宜。 核心资产(包括架构)通常设计有内置的变更点,这些地方可以以预先计划的方式快速定制它们。
核心资产到位后,系统构建就成为
- 访问核心资产库中的适当资产
- 行使变化点以根据要构建的系统的要求对其进行配置
- 组装该系统
在理想情况下,这可以自动完成。 如果根本需要为单个产品开发的其他软件,则占全部软件的一小部分。 集成和测试取代了设计和编码成为主要活动。
产品线在制造业中并不是什么新鲜事物。 许多历史学家将这一概念追溯到伊利·惠特尼(Eli Whitney)在1800年代初使用可互换零件制造步枪的过程中,但也存在较早的例子。 如今,制造业中有数百个示例:想想通用汽车、丰田、波音、空中客车、戴尔,甚至麦当劳等公司的产品,以及每个公司生产的类似产品组合。 每个公司都以不同的方式利用共性。 例如,波音公司同时开发了757和767,这两架完全不同的飞机的零件清单重叠了大约60%。
成功的软件产品线所带来的成本、上市时间和生产率的提高令人叹为观止。 考虑:
- 诺基亚将软件产品线方法归功于其灵活性,使其每年可以将十几部手机推向市场,而不是以前可以管理的三款左右,而这些功能都具有前所未有的功能。
- 康明斯公司能够将生产柴油机软件所需的时间从大约一年减少到大约一周。
- 与在软件产品线工程出现之前制造的软件相比,惠普使用四分之一的员工,三分之一的时间来构建产品,缺陷的数量则为原来的二十五分之一。
- 德意志银行估计,通过将全球交易和结算软件构建为产品线,每年可节省400万美元。
- 飞利浦报告称,通过采用产品线方法,可以减少高端电视产品组合中的故障。 产品多样性曾经是其架构师关注的三大问题之一。 现在,它甚至根本没有列出关注点; 产品线方法已使软件开发脱离了关键路径-软件不再确定产品的交付日期。
- 美国国家侦察局报告说,凭借其委托的卫星地面控制系统产品线,第一款产品要求开发人员的预期数量为预期数量的10%,而缺陷数量则为预期数量的十分之一。
- 在飞利浦的医疗系统产品线中,软件产品线方法已将软件缺陷和上市时间减少了一半以上。
创建成功的产品线取决于涉及软件工程,技术管理和组织管理的协调战略。 因为这是一本有关软件架构的书,所以我们专注于软件产品线的架构方面,但是为了使组织成功创建产品线,所有方面都必须协同工作。
黑暗中可能有光明
软件产品线范例是一种强大的方法,可以利用对架构(和其他核心资产)的投资进入一系列相关系统,从而看到上市时间,质量和生产率的数量级改进。 这些结果是可能的,并且已经在许多不同领域的大小公司证明了。 效果是真实的。 此外,来自许多来源和公司的数据以惊人的一致性证实,要使投资获得回报,组织仅需要构建三种产品。 这是我们期望在产品线中拥有的最低数量。
但是其他结果也是可能的,并且在尝试采用这种方法时不会出现惊人的崩溃和烧毁。 与任何技术一样,产品线实践也需要对其采用进行认真考虑,并且必须考虑公司的历史,状况和文化。 可能导致产品线故障的因素包括:
- 缺乏冠军,缺乏足够的控制权和可见度
- 管理层未能提供持续和坚定的支持
- 中层管理人员不愿放弃对项目的专制控制
- 无法清楚地确定采用产品线方法的业务目标
- 在遇到困难的第一个迹象时放弃方法
- 未能对方法进行适当的培训,并且未能充分解释或证明变更的合理性
- 在管理架构的变更点时缺乏纪律性
- 对产品线的范围过宽或过窄
- 缺乏产品线工具来帮助管理和执行变化点
幸运的是,有一些克服这些因素的策略。 一个好的策略是启动一个小而引人注目的试点项目,以证明软件产品线的定量收益。 怀疑论者开展业务时,那些愿意尝试新事物的人可以配备飞行员。 它可以解决流程问题,明确角色和职责,并通常在解决方案过渡到更广泛的环境之前解决错误。
—PCC
25.1 An Example of Product Line Variability 产品线可变性的一个例子
[TODO]
25.2 What Makes a Software Product Line Work? 软件产品线的工作原理是什么?
[TODO]
25.3 Product Line Scope 产品线范围
[TODO]
25.4 The Quality Attribute of Variability 可变性的质量属性
[TODO]
25.5 The Role of a Product Line Architecture 产品线架构的作用
[TODO]
25.6 Variation Mechanisms 差异化机制
[TODO]
25.7 Evaluating a Product Line Architecture 评估产品线架构
[TODO]
25.8 Key Software Product Line Issues 关键软件产品线问题
[TODO]
25.9 Summary 小结
[TODO]
25.10 For Further Reading 进一步阅读
[TODO]
25.11 Discussion Questions 问题讨论
[TODO]
相关文章:
25.架构和软件产品线
文章目录25 Architecture and Software Product Lines架构和软件产品线25.1 An Example of Product Line Variability 产品线可变性的一个例子25.2 What Makes a Software Product Line Work? 软件产品线的工作原理是什么?25.3 Product Line Scope 产品线范围25.4 …...
Seata-server 源码学习(一)
Seata源码学习引入 学习了Seata的应用以后,我们从这开始要开始分析Seata的源码相关内容 源码下载 官方地址:https://seata.io/zh-cn/blog/download.html 通过idea打开seata-1.4.2版本的源码 回顾AT模式 其实在之前的应用课程中,我们已经用…...
2023新华为OD机试题 - 斗地主(JavaScript)
斗地主 题目 斗地主起源于湖北十堰房县, 据传是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的, 如今已风靡整个中国,并流行于互联网上 牌型: 单顺,又称顺子,最少5张牌,最多12张牌(3...A),不能有2, 也不能有大小王,不计花色 例如:3-4-5-7-8,7-8-9-1…...
素数相关(结合回文数,合数)线性筛素数(欧拉筛法)Euler【算法模板笔记】
一、朴素筛法(埃拉托斯特尼筛法)Eratosthenes 筛法(埃拉托斯特尼筛法,简称埃氏筛法)时间复杂度是O(nloglogn)不常用,被欧拉筛代替,略二、线性筛素数(欧拉筛法)简介线性筛…...
1.7配置OSPF手动汇总
实验7:配置OSPF手动汇总 实验目的实现OSPF路由汇总的配置阐明OSPF引入的外部路由时进行路由汇总的方法实验拓扑配置OSPF手动汇总实验拓扑如图1-17所示。 图1-17 配置OSPF手动汇总 实验步骤配置IP地址,配置OSPF(和实验6一致,此处略)在…...
多线程下载工具axel的安装和使用
多线程下载工具axel的安装和使用 Axel是一个轻量级下载程序,它和其他加速器一样,对同一个文件建立多个连接,每个连接下载单独的文件片段以更快地完成下载。 Axel 支持 HTTP、HTTPS、FTP 和 FTPS 协议。它也可以使用多个镜像站点下载单个文件…...
大数据专业职业前景如何
大数据专业毕业生未来的岗位选择空间比较大,有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位,在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类…...
拉格朗日乘数法在原材料选择问题上的具体应用
问题需求: 输入待制作的材料:(材料长,材料数量) 分别为(5401,124)、(200,135)、(1350,45), 输入原材料长度最大值6500,最小值3500&…...
零信任-腾讯零信任iOA介绍(4)
腾讯零信任介绍 腾讯零信任是一种信息安全架构,旨在通过限制对计算设备、数据和应用程序的访问来保护敏感信息。腾讯零信任的主要思想是,任何计算设备、数据或应用程序都不应被自动信任,并需要经过授权后才能访问敏感信息。 腾讯零信任的…...
标准的maven依赖包应该包含哪些东西?
背景在阅读源码的时候,发现有一些maven依赖包里面没有包含pom文件,一些maven依赖包包含,而且除此之外还有一些细微的差异。今天就来聊一下关于一个标准的依赖包应该是什么样子的。一个标准的Maven依赖包通常包含以下文件:Java类文…...
网络安全-Nmap
网络安全-Nmap Nmap-号称诸神之眼 这个呢就是用来扫描网络端口的 Namp的工作原理很像一个雷达 做任何攻击之前,得先知道怎么去找破绽,而不是钢铁洪流,那个是不叫渗透了,叫硬钢。 咋用呢? 很简单 直接 nmap 后面跟网址…...
【物联网】mqtt初体验
文章目录安装EMQXjava集成添加依赖mqtt配置参数发布组件订阅组件测试接口接口测试最近在了解物联网云平台方面的知识,解除了mqtt协议,只看书籍难免有些枯燥,所以直接试验一下,便于巩固理论知识。 broker服务器操作系统:…...
2023年阿里云活动有哪些实例规格的云服务器?如何选择这些实例规格
2023年阿里云活动有哪些实例规格的云服务器?新手用户通过阿里云活动选购阿里云服务器的时候实例规格应该怎么选,因为同配置的云服务器往往有多种不同是规格的云服务器可供选择,而且不同实例规格的云服务器之间价格差别还比较大,因…...
深入理解 Handler(java 层 + native 层)
文章目录回顾线程消息队列时怎样实现的消息是怎么传递的?Handle 的延迟消息是怎么处理的?IdleHandler 的原理主线程进入了 Looper 循环为什么没有 ANR?消息屏障是什么?回顾 之前学习过Handler相关的基础知识,今天再学…...
初步认识操作系统(Operator System)
操作系统一,冯诺依曼体系结构内存的重要作用二,操作系统的概念三,设计操作系统的目的三,操作系统在计算机体系中的定位四,操作系统是如何进行管理的一,冯诺依曼体系结构 在众多计算机相关的书籍中ÿ…...
Android—HTTPS部署自签名证书
一、生成自签名私有证书单向认证(只需要服务端证书) 生成server_ks.jks服务端密钥配置到服务端生成server.cer服务端证书配置到客户端 双向认证(还需要客户端证书,和信任证书) 生成client_ks.jks客户端密钥配置到客户…...
java基于springboot+vue微信小程序的学生健康管理
任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于Java语言、微信小程序技术设计并实现了学生健康管理小程序。系统主要包括系统首页、个人中心、学生管理、健康档案管理、体检报告管理、健康评估管…...
金三银四丨黑蛋老师带你剖析-漏洞岗
作者丨黑蛋病毒岗之前我们简单看了看二进制逆向岗位和漏洞岗,今天我们来看一看病毒岗位,就单纯看二进制病毒岗位和漏洞岗位,其所需要的基础知识是差不多的,在Windows平台上,无非就是汇编,C语言,…...
pinia实战 购物车(自定义插件实现pinia持久化)
目录 一、实例 二、需求 三. 代码解析 shop.vue shop.ts 四、持久化插件 插件介绍 持久化实现思路 一、实例 二、需求 单选全选功能,并且可以互相联动 小计功能 总计功能 商品加减,数量为零时不能在减 三. 代码解析 shop.vue 1.获取shop模块实…...
idea使用本地代码远程调试线上运行代码---linux环境
场景: 之前介绍过windows环境上,用idea进行远程调试那么在linux环境下实战一下 环境: linux 测试应用:使用docker部署的platform-multiappcenter-base-app-1.0.0-SNAPSHOT.jar 应用 测试应用端口:19001 测试工具&…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
