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 测试工具&…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
