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详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
Qt/C++学习系列之列表使用记录
Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件,同步使用QTableWidgetItem进行单元格的设置,最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...
