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

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 协议。它也可以使用多个镜像站点下载单个文件…...

大数据专业职业前景如何

大数据专业毕业生未来的岗位选择空间比较大,有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位,在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类&#xf…...

拉格朗日乘数法在原材料选择问题上的具体应用

问题需求: 输入待制作的材料:(材料长,材料数量) 分别为(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服务器操作系统&#xff1a…...

2023年阿里云活动有哪些实例规格的云服务器?如何选择这些实例规格

2023年阿里云活动有哪些实例规格的云服务器?新手用户通过阿里云活动选购阿里云服务器的时候实例规格应该怎么选,因为同配置的云服务器往往有多种不同是规格的云服务器可供选择,而且不同实例规格的云服务器之间价格差别还比较大,因…...

深入理解 Handler(java 层 + native 层)

文章目录回顾线程消息队列时怎样实现的消息是怎么传递的?Handle 的延迟消息是怎么处理的?IdleHandler 的原理主线程进入了 Looper 循环为什么没有 ANR?消息屏障是什么?回顾 之前学习过Handler相关的基础知识,今天再学…...

初步认识操作系统(Operator System)

操作系统一,冯诺依曼体系结构内存的重要作用二,操作系统的概念三,设计操作系统的目的三,操作系统在计算机体系中的定位四,操作系统是如何进行管理的一,冯诺依曼体系结构 在众多计算机相关的书籍中&#xff…...

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 测试工具&…...

Java 基础面试题——集合

目录1.Java 有哪些常用容器(集合)?2.Collection 和 Collections 有什么区别?3.List、Set、Map 之间的区别是什么?4.HashMap 的长度为什么是 2 的 N 次方?源码中是如何保证的?5.HashMap 和 Hasht…...

编程思想、方法论和架构模式的应用

概要编程思想是指在编写代码时所采用的基本思维方式和方法论。分类编程思想分类:面向对象编程(Object-Oriented Programming,简称OOP):把数据和对数据的操作封装在一起,通过类和对象的概念实现模块化、可重…...

Vue|事件处理

事件处理1. 事件使用1.1 事件绑定1.2 事件参数2. 事件修饰符2.1 阻止默认事件2.2 阻止事件冒泡2.3 事件只允许触发一次2.4 事件捕获2.5 操作当前元素2.6 行为立即执行无需等待回调3. 键盘事件4. 本章小结4.1 事件使用小结4.2 事件修饰符小结4.3 键盘事件小结1. 事件使用 1.1 事…...

css书写方式

目录标题一、css是什么?二、css的书写方式1、行内样式【不推荐使用,太固定】2、页面样式(又叫内联样式)3、外联样式【店家推荐】4、import与link标签的区别一、css是什么? css(cascade style sheet)是用来装饰和装扮页…...

Python网络爬虫 学习笔记(2)BeaufitulSoup库

文章目录BeautifulSoup库的基本介绍HTML标签的获取和相关属性HTML文档的遍历prettify()方法使用BeautifulSoup库对HTML文件进行内容查找信息的标记的相关概念(非重点)find_all()方法(重点)综合实例:爬取软科2022中国大…...

JavaScript------内建对象

一、解构赋值 1、数组的解构 1.1、解构赋值 const arr ["孙悟空", "猪八戒", "沙和尚"];let a, b, c;[a, b, c] arr; // 等同于 [a, b, c] ["孙悟空", "猪八戒", "沙和尚"] 1.2、声明同时解构 let [d, e…...

React + Redux 处理异步请求

redux 处理异步请求 方式一:在 componentDidmount 中直接进⾏请求,在将数据同步到 redux 创建 Store 仓库 import {createStore } from redux;const defaultState = {banners: [] }const reducer =...

揭秘涨薪50%经验:从功能测试到自动化测试,我是如何蜕变的?

本人在今年互联网大环境如此严峻的情况下,作为一个刚毕业不到一年的初级测试,赶在“金三银四”依然拿到了一些面试机会,并且成功拿下4家公司的offer,其中不乏互联网大厂,而且最高总包给到了接近double(无炫…...

【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能

【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能 【论文原文】:A New Local Transformation Module for Few-shot Segmentation 【作者信息】:Yuwei Yang, Fanman Meng, Hongliang Li, Qingbo Wu,Xiaolong Xu an…...

补充前端面试题(二)

#$set数据变化视图不更新问题, 当在项目中直接设置数组的某一项的值,或者直接设置对象的某个属性值,这个时候,你会发现页面并没有更新。这是因为 Object.defineProperty()限制,监听不到变化。解决方式:this.$set(你要改…...

外贸网站做多少钱的/seo优化一般优化哪些方面

MQTT 协议快速入门课程简介:MQTT 协议实例全解析MQTT 协议的最佳实践和反模式MQTT 协议的安全性实践AIIoT 项目实战本课程深入浅出地介绍了 MQTT 协议的各种特性,对每个协议特性都辅以具体代码进行讲解,并通过一个 IoTAI 项目实战来具体展现 …...

怎么样看网站用什么程序做的/百度模拟点击

extends与implements的区别与用法 在类的声明中,通过关键字extends来创建一个类的子类。一个类通过关键字implements声明自己使用一个或者多个接口。 extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法; implements 是实现多个接口, 接口的方…...

win2003 做网站服务器/百度知道一下

经常遇到下载的pdf文件没有目录书签的情况,特别是课程讲义这样的文件。试用了几款小软件之后,觉得JPdfBookmarks操作简单比较好用。下载链接如下:https://sourceforge.net/projects/jpdfbookmarks/​sourceforge.net直接解压使用,…...

新开传奇网站999新服网/网站搭建策略与方法

Proactor IO即,在读写IO完成后的通知。 Reactor模式,采用的非阻塞模式,但资源的读写操作仍然是同步的。 而Proactor模式在读写操作上是异步完成的,资源读写靠操作系统完成,而不是应用进程。操作系统完成读写后&#x…...

织梦统计网站访问量代码/百度用户服务中心电话

在Python中用示例解释和可视化range()函数我们将继续深入研究各种Python函数、模块和库的内部工作方式。在研究了enumerate()之后,我们现在来研究另一个重要的函数——range()。在本文中,我们将探讨range()的功能并突出研究它的用例——您将了解如何在Py…...

wordpress复制提醒/百度知道一下

游戏介绍FC冒险岛全关卡版是一款时下非常火爆的经典闯关游戏,有着很不错的玩法,是一代人的游戏回忆。FC冒险岛全关卡版游戏中玩家操控小人进行战斗,小心敌人攻击你的滑板,灵敏的躲闪,才能顺利通过。FC冒险岛全关卡版让…...