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

软件架构复用

1.软件架构复用的定义及分类

         软件产品线指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需要,是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库进行管理、复用、集成新的系统核心资产库括软件架构及其可剪裁的元素,更广泛地,它还包括设计方案及其文档、用户手册、项目管理的历史记录(如预算和进度)、软件测试计划和测试用例。复用核心资产(特别是软件架构),更进一步采用产品线将会惊人地提高生产效率、降低生产成本和缩短上市时间。

        软件复用是指系统化的软件开发过程:开发一组基本的软件构造模块,以覆盖不同的需求/体系结构之间的相似性,从而提高系统开发的效率、质量和性能。软件复用是一种系统化的软件开发过程,通过识别、开发、分类、获取和修改软件实体,以便在不同的软件开发过程中重复的使用它们。

        软件架构复用的类型包括机会复用系统复用。机会复用是指开发过程中,只要发现有可复用的资产,就对其进行复用。系统复用是指在开发之前,就要进行规划,以决定哪些需要复用。 

2.软件架构复用的原因

         软件架构复用可以减少开发工作、减少开发时间以及降低开发成本,提高生产力。不仅如此,它还可以提高产品质量使其具有更好的互操作性。同时,软件架构复用会使产品维护变得更加简单。

3.软件架构复用的对象及形式

         基于产品间共性的“软件”产品线代表了软件工程中一个创新的、不断发展的概念。软件产品线的本质是在生产产品家族时,以一种规范的、策略性的方法复用资产。可复用的资产非常广,包括以下几个方面。

        (1)需求。许多需求与早期开发的系统相同或部分相同,如网上银行交易与银行柜面交易。

        (2)架构设计。原系统在架构设计方面花费了大量的时间与精力,系统成功验证了架构的合理性,如果新产品能复用已有的架构,将会取得很好的效益。

        (3)元素。元素复用不只是简单的代码复用,它旨在捕获并复用设计中的可取之处,避免(不要重复)设计失败的地方。

        (4)建模与分析。分类分析方法(如性能分析)及各类方案模型(如容错方案、负载均衡方案)都可以在产品中得到复用。

        (5)测试。采用产品线可积累大量的测试资源,即在考虑测试时不是以项目为单位,而是以产品线为单位。这样整个测试环境都可以得到复用,如测试用例、测试数据、测试工具,甚至测试计划、过程、沟通渠道都可以得到复用。

        (6)项目规划。利用经验对项目的成本、预算、进度及开发小组的安排等进行预测,既不必每次都建立工作分解结构。

        (7)过程、方法和工具。有了产品线这面旗帜,企业就可以建立产品线级的工作流程、规范、标准、方法和工具环境,供产品线中所有产品复用。如编码标准就是一例。

        (8)人员。以产品线来培训的人员,适应于整个系列的各个产品的开发。

        (9)样本系统。将已部署(投产)的产品作为高质量的演示原型和工程设计原型。

        (10)缺陷消除。产品线开发中积累的缺陷消除活动,可使新系统受益,特别是整个产品家族中的性能、可靠性等问题的一次性解决,能取得很高的回报。同时也使得开发人员和客户心中有“底”。

        一般形式的复用主要包括函数的复用,库的复用(比如在C、C++语言中),以及在面向对象开发中的类、接口和包的复用。

4.软件架构复用的基本过程

        复用的基本过程主要包括3个阶段:首先构造/获取可复用的软件资产,其次管理这些资产,最后针对特定的需求,从这些资产中选择可复用的部分,以开发满足需求的应用系统(见图1)。

 

 图1 软件架构复用的基本过程

        (1)复用的前提:获得可复用的软件资产

        首先需要构造恰当的、可复用的资产,并且这些资产必须是可靠的、可被广泛使用的、易于理解和修改的。 

        (2)管理可复用资产

        该阶段最重要的是构件库(Component Library),由于对可复用构件进行存储和管理,它是支持软件复用的必要设施。 构件库中必须有足量的可复用构件才有意义。构件库应提供的主要功能包括构件的存储、管理、检索以及库的浏览和维护等,以及支持使用者有效地、准确地发现所需的可复用构件。

        在这个过程中,存在两个关键问题:一是构件分类,构件分类是指将数量众多的构件按照某种特定方式组织起来;二是构件检索,构件检索是指给定几个查询需求,能够快速准确地找到相关构件。

        (3)使用可复用资产 

        在最后阶段,通过获取需求,检索复用资产库,获取可复用资产,并定制这些可复用资产:修改、扩展、配置等,最后将它们组装与集成,形成最终系统。 

相关文章:

软件架构复用

1.软件架构复用的定义及分类 软件产品线是指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需要,是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库进行管理、复用、集成新的系统。核心…...

【初阶数据结构】——leetcode:160. 相交链表

文章目录 1. 题目介绍2. 思路1:暴力求解算法思想代码实现 3. 思路2:快慢指针算法思想代码实现 1. 题目介绍 链接: link 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&…...

【Go】goroutine并发常见的变量覆盖案例

越过山丘 遇见六十岁的我 拄着一根白手杖 在听鸟儿歌唱 我问他幸福与否 他笑着摆了摆手 在他身边围绕着一群 当年流放归来的朋友 他说你不必挽留 爱是一个人的等候 等到房顶开出了花 这里就是天下 总有人幸福白头 总有人哭着分手 无论相遇还是不相遇 都是献给岁月的序曲 …...

基于SSM+Jsp+Mysql的快递管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…...

如何动态往Spring容器注册/移除bean?

几个关键点需要知道 本文不谈原理,直接上实战。 几个关键点:如何拿到Spring上下文来创建bean或移除bean?如何准备构建bean所需的BeanDefinition? 第一问:可注入bean工厂org.springframework.beans.factory.support.…...

C语言交换二进制位的奇数偶数位

基本思路 我们要先把想要交换的数的二进制位给写出来假如交换13的二进制位,13的二进制位是 0000 0000 0000 0000 0000 0000 0000 1101然后写出偶数位的二进制数(偶数位是1的) 1010 1010 1010 1010 1010 1010 1010 1010然后写出奇数位的二进…...

爬虫实战三、PyCharm搭建Scrapy开发调试环境

#一、环境准备 Python开发环境以及Scrapy框架安装,参考:爬虫实战一、Scrapy开发环境(Win10Anaconda)搭建 PyCharm安装和破解,参考:爬虫实战二、2019年PyCharm安装(激活到2100年) …...

2012年认证杯SPSSPRO杯数学建模C题(第一阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现: 从 1984 年的美国洛杉矶奥运会开始,奥运会就不在成为一个“非卖品”,它在向观众诠释更高更快更强的体育精神的同时,也在攫取着巨大的商业价值&#…...

【Next.js】连接 MongoDB 实现基本的接口

【Next.js】连接 MongoDB 实现基本的接口 什么是 MongoDB MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解…...

中值滤波算法与SSE2指令集并行优化

中值滤波算法是经典图像处理中极为常见的操作,一般我们通过调用OpenCV或者是Matlab直接进行使用,以至于有种它本来就很容易实现且速度很快的错觉。近来用到中值滤波算法,因为不想用到OpenCV库或者Matlab而对其实现研究了一番,才发现其中有很多值得注意的细节。下面我们结合…...

2012年认证杯SPSSPRO杯数学建模B题(第二阶段)节能减排全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 节能减排、抑制全球气候变暖 B题 白屋顶计划 原题再现: 第二阶段问题   虽然环境学家对地球环境温度的改变有许多种不同观点,但大多数科学家可以达成一个基本的共识:近年来人类的活动,尤指二氧…...

NOI - OpenJudge - 2.5基本算法之搜索 - 2753:走迷宫 - 超级无敌详细题解(含多个不同算法AC代码)

点赞关注吧~ 2753:走迷宫 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最…...

什么是Redis数据一致性?如何解决?

在系统中缓存最常用的策略是:服务端需要同时维护DB和cache,并且是以DB的结果为准–Cache-Aside Pattern(缓存分离模式、旁路缓存) 读数据 单纯的读数据是不会产生数据不一致,只有并发下读和写才会存在数据不一致。 写…...

【办公软件】开发常用网站

文章目录 一、开发社区二、开发学习三、视图工具四、开发工具五、前端web开发工具六、开发接口官网 备用产看。 https://www.webhub123.com https://www.webhub123.com/#/home/detail?projectHashid59183272&ownerUserid22053727 java全栈只是体系:https://www…...

车道线检测_Canny算子边缘检测_1

Canny算子边缘检测(原理) Canny算子边缘检测是一种经典的图像处理算法,由John F. Canny于1986年提出,用于精确、可靠地检测数字图像中的边缘特征。该算法设计时考虑了三个关键目标:低错误率(即尽可能多地检…...

kubadm部署kubernetes

什么是kubernetes Kubernetes是一款应用于集群的,容器自动部署、扩展和管理的开源平台,提供了一种以容器为中心的基础架构。利用kubernetes,你可以快速高效地响应客户如下请求: 应用程序的动态、精准部署应用程序的动态扩展无缝推…...

Sqlite插入单引号和双引号,防止sql注入

1. 方法1 sqlite3_mprintf替换sprintf,%q替换%s. 1.1. 举例 修改前代码 //修改前, hello123写入失败char sql[1000]char* sql sprintf("UPDATE table SET name %s WHERE name_id %d","hello123", 1);rc sqlite3_exec(db, sql, NULL, NULL, &err…...

代码随想录算法训练营第二十九天(回溯5)|491. 非递减子序列、46. 全排列、47. 全排列 II(JAVA)

文章目录 491. 非递减子序列解题思路源码 46. 全排列解题思路源码 47. 全排列 II解题思路源码 总结 491. 非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 …...

【CANN训练营笔记】AscendCL图片分类应用(C++实现)

样例介绍 基于PyTorch框架的ResNet50模型,对*.jpg图片分类,输出各图片所属分类的编号、名称。 环境介绍 华为云AI1s CPU:Intel Xeon Gold 6278C CPU 2.60GHz 内存:8G NPU:Ascend 310 环境准备 下载驱动 wget ht…...

从头开发一个RISC-V的操作系统(二)RISC-V 指令集架构介绍

文章目录 前提ISA的基本介绍ISA是什么CISC vs RISCISA的宽度 RISC-V指令集RISC-V ISA的命名规范模块化的ISA通用寄存器Hart特权级别内存管理与保护异常和中断 目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提…...

uniapp/设置桌面角标/发送系统通知/动态修改桌面应用图标/展示3d模型/仿淘宝二楼

uniapp的安卓apk图标角标设置消息数量 1、主要方法: 设置角标: plus.runtime.setBadgeNumber(999) 清除角标: //plus.runtime.setBadgeNumber(0)//没有效果 plus.runtime.setBadgeNumber(-1) //有效果 2、使用在具体的生命周期 1、打开app获取…...

【Java八股学习】Redis高可用 思维导图

说明 文章内容通过学习小林Coding内的优质文章后整理而来,整理成思维导图的方式是为了帮助自己理解、记忆和复习。如若侵权请联系删除,再次对小林Coding内的优质文章表示感谢。参考文章如下: 主从复制是怎么实现的?为什么要有哨…...

C++万物起源:类与对象(三)拷贝构造、赋值重载

目录 一、拷贝构造函数 1.1拷贝构造函数的概念与特征 1.2拷贝构造的实现 1.3默认构造函数 1.4拷贝构造函数典型调用场景 二、赋值运算符重载 2.1赋值运算符重载的格式 一、拷贝构造函数 1.1拷贝构造函数的概念与特征 在c语言语法中,我们可以将一个变量赋值给…...

JavaScript构造函数(new构造js对象与原型链prototype)

构造函数详解 铺垫:面向对象编程一、构造函数是什么?二、构造函数的作用?三、构造函数的执行过程?四、构造函数的返回值?五、构造函数为什么要用new关键字调用?六、构造函数的实例成员和静态成员&#xff1…...

【WPF应用31】WPF基本控件-ListView的详解与示例

WPF(Windows Presentation Foundation)是.NET框架的一个组成部分,它用于构建桌面应用程序的用户界面。ListView是WPF中一个非常强大的数据展示控件,它可以用来显示一系列的项,类似于Windows资源管理器中的文件列表。Li…...

【动态】江西省小型水库安全监测能力提升试点项目通过验收

近日,由北京国信华源科技有限公司和长江勘测规划设计研究有限责任公司联合承建的江西省小型水库安全监测能力提升试点项目圆满通过验收。 在项目业主单位的组织下,省项目部、特邀专家、县水利局二级项目部以及项目设计、监理、承建等单位的代表组成验收工…...

前视声呐目标识别定位(九)-声呐驱动

前视声呐目标识别定位(一)-基础知识 前视声呐目标识别定位(二)-目标识别定位模块 前视声呐目标识别定位(三)-部署至机器人 前视声呐目标识别定位(四)-代码解析之启动识别模块 …...

【详解】Windows系统安装Nginx及简单使用

【详解】Windows系统安装Nginx及简单使用 一、Nginx是什么? “Nginx 是一款轻量级的 HTTP 服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的 IO 性能,时常用于服务端的反向代理和负载均衡。”Nginx 是一款 http 服…...

WebGPU vs. WebGL:前端图形技术的进化与数字孪生的崭新前景

在现代互联网时代,图形渲染在网页应用和数字孪生的开发中起着至关重要的作用。WebGL和WebGPU是两种前端图形技术,它们在处理图形和计算密集型任务时发挥着关键作用。本文将深入研究这两种技术,探讨它们的区别、WebGPU的优势,以及它…...

即刻体验 | 使用 Flutter 3.19 更高效地开发

我们已隆重推出全新的 Flutter 版本——Flutter 3.19。此版本引入了专为 Gemini 设计的新 Dart SDK、一个能让开发者对 Widget 动画实现精细化控制的全新 Widget,Impeller 更新带来的渲染性能提升、有助于实现深层链接的工具和对 Windows Arm64 的支持,以…...

简述建立一个网站模板步骤/百度站长app

CentOS的yum源中没有git,只能自己编译安装,现在记录下编译安装的内容,留给自己备忘。 确保已安装了依赖的包 yum install curl yum install curl-devel yum install zlib-devel yum install openssl-devel yum install perl yum install cpio…...

建设德育网站的意义/广告推广系统

转载于:https://blog.51cto.com/ceshi/167991...

惠州网站建设如何/百度官方首页

一,IOC容器初始化入口 Spring的容器的启动方式有很多种,上篇博文中有做过分析,Spring容器的初始化根本还是ApplicationContext的实例化过程,表现形式的多样化决定了容器不同的初始化方式,但是方式差异性主要还是体现在…...

iis7配置网站404页面/seo优化查询

也许你也遇到了这样的一个很无语的问题,明明都输入了正确了可还是会报错,看到上面的图重复试了三五次开始怀疑人生了。。。。 然后事实上,正常的Crossref网站注册页面是这样的。。。 这下知道是什么原因了吧。。。。。。 对,没错…...

网站设计方案/想要导航页面推广app

6月24日,是CVPR 2022 最后一天了,全世界计算机视觉领域的大佬们齐聚一堂,翱翔在知识的海洋。一片祥和之下,突然发生了一件可以惊呼“厚礼蟹”的大事:有人举报CVPR Oral(口头报告,比较好的论文才…...

团队网站模板/盐城seo排名

从MySQL binlog得到你要的SQL。根据不同设置,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。 用途 数据回滚 主从切换后数据不一致的修复 从binlog生成标准SQL,带来的衍生功能 安装 $ git clone https://github.com/danfengcao/binlog2sql.git …...