[架构之路-194]-《软考-系统分析师》- 软件复用技术之软件产品线

news2024/11/25 10:57:00

目录

1. 思想来源:产品线

1.1 硬件产品线

1.2. 产品组合

2. 软件产品线

2.1 思想来源:

2.2 为什么使用软件产品线?

2.3 软件产品线是一种软件架构

2.4 软件产品线详解

2.5 软件产品线的双生命周期的模型

2.6 软件产品线建立方式 

2.7  软件产品线的组织结构

第3章 软件产品线不是什么


1. 思想来源:产品线

1.1 硬件产品线

产品线(Product Line) 是指一群相关的产品,这类产品可能功能相似,销售给同一顾客群,经过相同的销售途径,或者在同一价格范围内。 如果能够确定产品线的最佳长度,就能为企业带来最大的利润。

1.2. 产品组合

产品组合,通常由若干条产品线组成。

产品线,是指同类产品的系列。一条产品线就是一个产品类别,是由使用功能相同、能满足同类需求而规格、型号、花色等不同的若干个产品项目组成的。一个产品项目,则是指企业产品目录上开列的每一个产品。

产品组合的宽度,是指产品组合中包含的产品线的多少,包含的产品线越多,就越宽

产品组合的深度,是指每条产品线包含的产品项目的多少,包含的产品项目越多,产品线就越深;产品组合的关联度,是指各类产品线之间在最终用途、生产条件、销售渠道等方面相互关联的程度,不同的产品组合存在着不同的关联程度。

2. 软件产品线

2.1 思想来源:

硬件产品线

2.2 为什么使用软件产品线?

 一个公司的业务集聚在某个邻域,通常有经验的积累。那么就希望得到一个通用的方法论。

不需要每次开发类似的产品都要重零开始,而是将系统进行产品化,只要小修小改就可以满足新系统的需求。

而软件产品线就是由软件架构、邻域工程、特定领域架构(DSSA)相结合得到的行业解决方案。

 软件产品线是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足特定领域的特定需求。

软产品线是一个十分适合专业的开发组织的软件开发方法,能有效地提高软件生产率和质量,缩短开发时间,降低总开发成本。

如何提高生产的经济效益呢:

  • 首先每个产品都由来自公共资产库中的稳定的、可靠的、被反复验证过的、可复用的组件组成。
  • 然后按照预先定义的变化机制,如参数化或继承,对这些组件进行必要的裁剪,添加任何必须的新组件,根据一个产品线范围内的公共架构来组装这些组件。于是,构建一个产品(系统)主要工作是组装和繁衍,而不是创造;
  • 主要的活动是集成不是编程。每条软件产品线都有一个预先定义的指南或计划,用来定义确切的产品构建方法

2.3 软件产品线是一种软件架构

2.4 软件产品线详解

软件产品线是指具有一组可管理的公共特性的软件密集性系统的合集,这些系统满足特定的市场需求或任务需求,并且按预定义的方式从一个公共的核心资产集开发得到。

这个定义和任何产品线的传统定义相一致——满足特定市场或任务需求的、具有一组公共的、可管理特性的系统集合。但是它增加了一些内容,即在软件产品线中增加了系统开发方式上的一些限制。为什么,因为软件产品线的系统,需要按照指定方式进行公共资产集的开发,与独立开发、从零开始开发、随机开发等方式相比较,可以获得显著的生产经济效益。正是由此产生的经济效益,才使软件产品线更具吸引力。

软件产品线针对特定领域中的一系列具有公共特性的软件系统,试图通过对领域(commonality)共性和可变性(var iability)的把握构造一系列领域核心资产,从而使特定的软件产品可以在这些核心资产基础上按照预定义的方式快速、高效地构造出来。

软件产品线工程主要包括领域工程、应用系统工程和产品线管理三个方面。其中,领域工程是其中的核心部分,它是领域核心资产(包括领域模型、领域体系结构、领域构件等)的生产阶段;应用系统工程面向特定应用需求,在领域核心资产的基础上面向特定应用需求实现应用系统的定制和开发;而产品线管理则从技术和组织两个方面为软件产品线的建立和长期发展提供管理支持。

如何提高生产的经济效益呢,首先每个产品都由来自公共资产库中的组件组成,然后按照预先定义的变化机制,如参数化或继承,对这些组件进行必要的裁剪,添加任何必须的新组件,根据一个产品线范围内的公共架构来组装这些组件。于是,构建一个产品(系统)主要工作是组装和繁衍,而不是创造;主要的活动是集成而不是编程。每条软件产品线都有一个预先定义的指南或计划,用来定义确切的产品构建方法。

2.5 软件产品线的双生命周期的模型


        和DSSA一样。首先现有系统的需求进行分析,哪些需求是整个行业都可能需要涉及的。将此类需求输入邻域工程。得到了邻域工程的模型。在开发新系统时,分析哪些需求时邻域工程中包含的,将已存在的需求、涉及、实现直接从邻域工程获取。对于有差异的,再进行单独的开发。因此,邻域工程做行业间的共性的东西,应用系统负责实现用户的特有需求。

        软件产品线工程主要包括领域工程、应用系统工程和产品线管理三个方面。

        其中,领域工程是其中的核心部分,它是领域核心资产(包括领域模型、领域体系结构、领域构件等)的生产阶段;

        应用系统工程面向特定应用需求,在领域核心资产的基础上面向特定应用需求实现应用系统的定制和开发;

        而产品线管理则从技术和组织两个方面为软件产品线的建立和长期发展提供管理支持。

2.6 软件产品线建立方式 

 软件产品线的建立方式主要用两种:

一个是演化方式,在迭代中不断完善;

另一种是革命式,直接将目标一步到位地实现。

除此之外,可以基于现有产品,在现有产品中进行改进。而全新产品线指的是,不在旧产品中做修改,直接开发新的产品,当然可以参考旧产品的经验教训。

2.7  软件产品线的组织结构

软件产品线的组织结构有三种类型:

设立独立的核心资源小组
不设立独立的核心资源小组

动态的组织结构

大多数公司的组织结构都是设立独立的核心资源小组,比如分为模型组、应用组、架构组等。而想要将一个系统进行产品化,主要取决于以下因素

对邻域具备长期和深厚的经验
一个用于构件产品的好的核心资源库
好的产品架构
能够对软件资源、人员组织,过程文档很好的管理。
 

第3章 软件产品线不是什么

有很多种方法初看起来和软件产品线似乎很类似。因此,您可能要问:“软件产品线不就是X的一个新名称吗。”尽管我们很想让您能在以前的知识和经验基础之上有新的发展,但是我们更想从一开始就不要令你错误地把软件产品线等同于一些它们所不是的东西。

描述“它不是什么”往往和描述“它们是什么”一样有意义。

在谈及软件产品线时,我们不是指上下文中所提及的任何一种情况。

误区一:偶然的小粒度重用

重用,作为降低开发成本,提高质量的软件策略已经不是新方法,软件产品线肯定涉及到重用,事实上是最高级别的重用

那么区别何在呢,以前的重用主要是指相对较小的代码块的重用,也就是小粒度重用。有些机构已经建成了包含算法、模式、对象和组件的可重用库。软件开发人员写的任何东西几乎都要放到库里,然后鼓励(有时是要求)其他开发人员使用库里所提供的东西而不是创建自己的版本。不幸的是在很多情况下,查找这些小模块以及将其集成到一个系统中所花费的时间比重新开发他们更长。文档,倘若有的话,可以说明模块创建的情况,却不能说明如何对模块进行集成或进行适应性的修改。小粒度的重用的成功依赖于软件工程师是否喜欢使用库里的内容、库中的内容对工程师需要的适应性,以及能够成功将库中内容进行改写并集成到系统的其他部分。如果这些条件都满足,则采取重用,但它具有偶然性,并非总能发生。

在软件产品线方法中,重用是有计划的、能够实现的和强制的(机会主义的对立面)。

资产库包括从一开始就花费大量成本进行开发的各类产品——即需求、领域建模、软件架构、性能模型、测试用例和组件所有资产都为重用而设计,并且为了能重用与多个系统进行了优化。软件产品线的重用是全面的、有计划的、有经济效益的。

误区二:利用重用的单系统开发

您正在开发一个新的系统,它与您以前做过的系统很相似。您可以借助于以前的工作,做一些必要的修改、增加一些内容,形成新的产品。那么您所做的就是所谓的“克隆并拥有”。毫无疑问,您充分利用了以前的工作并取得经济效益;您已经重用了另一个系统的一部分,但是您有两个完全不同的系统,而不是从同一库中构建起两个系统。您需要像维护两个完全分离的实体那样维护这两个系统,这又是一个特别的重用。

这种方法软件产品线方法有两点主要区别。首先,软件产品线重用的资产是明确为重用而设计的。其次,产品线被视为一个整体,而不是可以区别对待和维护的多个产品。在成熟的产品线组织中,多个产品的概念已经消失。每个产品是核心资产的一个简单定制,只有核心资产才被认真的设计并随时间演进,只有核心资产才是组织的杰出智力财产

大平台,小产品中的大平台,就是软件产品线概念的体现!!!

误区三:仅仅基于组件的开发

软件产品线依赖于基于组件开发的形式,涉及到的要素很多。基于组件开发的典型定义是指从内部库或是市场选择组件来构建产品。尽管软件产品线中的产品确实是由组件组成的,但这些组件都是由产品线架构指定的,且按预定义的方式组装,如在组件中采用内置变体机制,以便将其用于指定的产品。该定义来自于架构和生产计划,而不是标准的基于组件的开发。

在产品线中,组件通常是在资产库中进行演进和维护的。而在基于组件的开发中,若有任何变化,一般都是通过编写代码来完成,其变化部分通常都是分别维护的。单独的基于组件的开发常常缺乏技术和组织管理方面的支持,而这点对软件产品的成功非常重要。

误区四:仅有一个可配置的架构

设计参考架构面向对象框架是为了能重用于多个系统,并且必须可以重新配置。重用架构的各种结构是个很好的方法,因为架构对任何系统而言都至关重要,而且构建代价较高。产品线架构的设计必须支持产品线中个产品间的不同(变化),因此它必须是可配置的。但是,即便产品线架构很重要,也只是产品线资产库中的一项资产。

误区五:单个产品的发布和版本

组织要定期发布新产品和退出产品的新版本,每个新版本的发布一般都是通过使用以前版本的架构、组件、测试计划和其他要素来构建。

为什么软件产品线有所不同呢,首先,在产品线中同时存在多个产品,每个产品都有其自己的发布和版本周期。因此,必须在更广的上下文环境中考虑单个产品的演进——也就是说,产品线是作为一个整体来演进的。其次,在单个产品的上下文环境中,产品一旦被更新,通常不可逆——即认为早期产品生产中的任何东西都不再有价值。但是在产品线中,产品的早期版本仍被认为具有市场潜力,并很容易地作为产品家族中的一个可生存成员保留下来:毕竟它如同其他产品的其他版本一样,是核心资产的一个实例。

误区六:仅有一套技术标准

许多组织建立一套标准来限制软件工程师选择集成到系统中的组件的种类和来源。他们审查架构和评审设计以确保遵循了这些标准。例如,开发人员能够从两种确定的数据库和两种确定的网页浏览器中进行选择,但是必须使用一种指定的中间件或电子数据表产品(需要时)。技术标准可提高协同能力,降低商业组件的维护和支持费用。一个正在推行产品线的组织可能也拥有这样的技术标准,产品线架构和组件都需要遵循这些标准,但是这些标准仅仅是输入到软件产品线中的约束条件

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

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

相关文章

Kali E:Unable to locate package错误解决

默认的新装的kali 可能都会遇到这个安装报错E: Unable to locate package httrack问题,今天我记录下彻底解决过程和效果。 Command httrack not found, but can be installed with: apt install httrack Do you want to install it? (N/y)y apt install httrack Re…

介绍动作识别数据集:“NTU RGB+D”数据集和“NTU RGB+D 120”数据集

动作识别数据集:“NTU RGBD”数据集和“NTU RGBD 120”数据集 (还包括AUTH UAV手势数据集:NTU 4级) 本页介绍两个数据集:“NTU RGBD”和“NTU RGBD 120”。 “NTU RGBD”包含60个动作类和56,880个视频样本…

傅里叶分析的历史背景

目录 1. Fourier级数(三角级数)的历史背景 2. 圆和复平面 3. Fourier的大胆猜想 1. Fourier级数(三角级数)的历史背景 自古以来,圆形一直是(现在仍然是)最简单的抽象理解形状。您只需要一个中心点和一个半径就可以了。圆上的所有点与圆心的距离都是固定…

无监督域适应 (UDA)(1)

一、定义 1、无监督域自适应 Unsupervised domain adaptation 经典机器学习假设训练集和测试集来自相同的分布。 然而,这个假设在现实世界的应用程序中可能并不总是成立,例如,数据来源不同。 这种情况下,域分布之间会存在差异…

进阶自定义类型——结构体,枚举,联合

本章重点: 1.结构体 1.1 结构体类型的声明 1.2 结构的自引用 1.3 结构体变量的定义和初始化 1.4 结构体内存对齐 1.5 结构体传参 1.6 结构体实现位段(位段的填充&可移植性) 2.枚举 2.1 枚举类型的定义 2.2 枚举的优点 2.3 枚举的使用 3.联合 3.1 联合类…

年月日计算器——操作符重载的应用(含完整代码,简洁)

前言&#xff1a;大家好&#xff0c;这里是YY&#xff1b;此篇博客主要是操作符重载的应用&#xff1b;包含【流插入&#xff0c;流提取】【>,<,>,<,】【&#xff0c;-&#xff0c;&#xff0c;-】【前置&#xff0c;后置&#xff0c;前置--&#xff0c;后置--】 P…

Goby 漏洞更新 | Weblogic Commons Collections 序列化代码执行漏洞(CVE-2015-4852)

漏洞名称&#xff1a;Weblogic Commons Collections 序列化代码执行漏洞&#xff08;CVE-2015-4852&#xff09; English Name&#xff1a;Weblogic Commons Collections serialization code execution vulnerability (CVE-2015-4852) CVSS core: 7.5 影响资产数&#xff1a…

Docker ELK 监控日志(附yml)

目录 一 安装docker-commpose 二 编写yml文件 2.1 docker配置文件 2.2 filebeat配置文件 2.3 kibana配置文件 三 运行启动 四 打开kibana 一 安装docker-commpose 可以看我之前的docker文章 二 编写yml文件 2.1 docker配置文件 使用的7.17.9版本 &#xff0c;请保…

linux 下 ps、sort、top 命令详解

1、 ps命令 作用&#xff1a;查看系统进程&#xff0c;比如正在运行的进程有哪些&#xff0c;什么时候开始运行的&#xff0c;哪个用户运行的&#xff0c;占用了多少资源。 参数&#xff1a; -e 显示所有进程 -f 显示所有字段&#xff08;UID&#xff0c;PPIP&#xff0c;C…

Redis学习——单机版安装

目录 1.解压 2.安装gcc 3.执行make命令 4.复制redis的配置文件到默认安装目录下 5.修改redis.conf文件 6.启动redis服务与客户端 7.查看redis进行是否启动 8.关闭redis服务 9.redis性能测试 注意&#xff1a;安装redis前要安装jdk。 1.解压 [rootlxm148 install]# t…

ubuntu卷积神经网络——图片数据集的制作以及制作好的数据集的使用

首先我事先准备好五分类的图片放在对应的文件夹&#xff0c;图片资源在我的gitee文件夹中链接如下&#xff1a;文件管理: 用于存各种数据https://gitee.com/xiaoxiaotai/file-management.git 里面有imgs目录和npy目录&#xff0c;imgs就是存放5分类的图片的目录&#xff0c;里面…

Lesson14 高级IO

前言 IO 等待 数据拷贝,比如read/recv,write/send只要在单位事件里,让等的比重减低,IO的效率就越高 五种IO模型 钓鱼小案例 阻塞式 阻塞式: 张三拿着一根鱼竿,一直在岸边钓鱼,期间一直盯着鱼竿,等待鱼上钩 非阻塞式轮询式 非阻塞式轮询式: 李四拿着一根鱼竿,在岸边钓鱼,期…

Weblogic RCE合集

文章目录 CVE-2023-21839(T3/IIOP JNDI注入)前言漏洞简单分析漏洞复现防护措施 CVE-2020-2551(RMI-IIOP RCE)漏洞简单分析漏洞复现防护措施 CVE-2017-3506(wls-wsat组件XMLDecoder反序列化漏洞)漏洞简单分析漏洞复现防护措施 CVE-2020-14882&CVE-2020-14883漏洞简单分析 CV…

2023.05.11 c高级 day3

编写一个名为myfirstshell.sh的脚本&#xff0c;它包括以下内容。 包含一段注释&#xff0c;列出您的姓名、脚本的名称和编写这个脚本的目的和当前用户说“hello 用户名”显示您的机器名 hostname显示上一级目录中的所有文件的列表显示变量PATH和HOME的值显示磁盘使用情况用id命…

算法修炼之练气篇——练气十五层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

来领略一下带头双向循环链表的风采吧

&#x1f349; 博客主页&#xff1a;阿博历练记 &#x1f4d6;文章专栏&#xff1a;数据结构与算法 &#x1f68d;代码仓库&#xff1a;阿博编程日记 &#x1f339;欢迎关注&#xff1a;欢迎友友们点赞收藏关注哦 文章目录 &#x1f344;前言&#x1f37c;双向循环链表&#x1…

Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

事件函数的使用依托于Qt的事件机制&#xff0c;一个来自于外部事件的传递机制模型如下所示 信号槽虽然好用&#xff0c;但是无法包含所有的情况&#xff0c;事件函数可以起到对信号槽无法覆盖的一些时机进行补充&#xff0c;事件函数的使用无需连接。 常用的事件函数如下所示。…

设计模式5—抽象工厂模式

5.抽象工厂模式 概念 抽象工厂模式&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定他们具体的类。抽象工厂又称为Kit模式&#xff0c;属于对象创建型模式。 抽象工厂可以将统一产品族的单独工厂封装起来&#xff0c;在正常使用中&#xff0c…

计算机网络笔记——网络层、传输层、应用层(方老师408课程)(持续更新)

文章目录 前言网络层网络层提供的两种服务网际协议——IP虚拟互联网络IP数据报格式逐一理解整体理解IP数据报分片与长度精算 IP地址IP地址概述分类的IP地址——ABCDE分类IP的子网划分不分类的IP地址——CIDRIP地址总结 IP分组的转发网际控制报文协议——ICMP下一代网络协议——…

我用 ChatGPT 干的 18 件事!【人工智能中文站创始人:mydear麦田访谈】

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT 你确定你可以使用ChatGPT吗&#xff1f; 今天我整理了18种ChatGPT的使用方法&#xff0c;让大家看看你可以使用哪些。 1.语法修正 2.文本翻译 3.语言转换 4.代码解释 5.修复代码错误 6.作为百科…