软考高级系统架构设计师-第11章 系统架构设计
【本章学习建议】
根据考试大纲,本章不仅考查系统架构设计师单选题,预计考12分左右,而且案例分析和论文写作也是必考,对应第二版教材第7章,属于重点学习的章节。
软考高级系统架构设计师VIP课程
https://edu.csdn.net/course/detail/40283
11.1 软件架构概念
11.1.1 软件架构的定义
软件架构(Software Architecture,SA):一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。(从需求分析到软件设计之间的过渡过程)
架构并非可运行软件。确切地说,它是一种表达,使软件工程师能够:
(1)分析设计在满足所规定的需求方面的有效性;
(2)在设计变更相对容易的阶段,考虑体系结构可能的选择方案;
(3)降低与软件构造相关联的风险。
软件架构设计包括提出架构模型,产生架构设计和进行设计评审等活动,是一个迭代的过程。
架构设计主要关注软件构件的结构、属性和交互作用,并通过多种视图全面描述特定系统的架构。
软件架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性。研究软件架构的根本目的是解决好软件的复用、质量和维护问题。
软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
11.1.2 软件架构设计与生命周期
1. 需求分析阶段
需求分析和SA设计面临的是不同的对象:一个是问题空间;另一个是解空间。从软件需求模型向SA模型的转换主要关注两个问题:如何根据需求模型构建SA模型。如何保证模型转换的可追踪性。
2. 设计阶段
设计阶段是SA研究关注的最早和最多的阶段,这一阶段的SA研究主要包括:SA模型的描述、SA模型的设计与分析方法,以及对SA设计经验的总结与复用等。有关SA模型描述的研究分为3个层次:SA的基本概念(构件和连接子)、体系结构描述语言ADL、SA模型的多视图表示。
SA模型的多视图表示从不同的视角描述特定系统的体系结构,从而得到多个视图,并将这些视图组织起来以描述整体的SA模型。多视图体现了关注点分离SOC的思想。典型的多视图的方案包括4+1模型(逻辑视图、进程视图、开发视图、物理视图,加上统一的场景)。Philippe Kruchten在1995年提出了一个“4+1”的视图模型。“4+1”视图模型从5个不同的视角包括逻辑视图、进程视图、开发视图、物理视图和统一的场景来描述软件架构。每一个视图只关心系统的一个侧面,5个视图结合在一起才能反映系统的软件架构的全部内容。
软件架构设计的4+1视图:
逻辑视图:也称设计视图,主要描述系统的功能需求。
进程视图:也称过程视图,主要关注一些非功能性的需求,例如系统的性能和可用性。进程视图强调并发性、分布性、系统集成性和容错能力,以及逻辑视图中的主要抽象的进程结构。
开发视图:也称实现视图,侧重于软件模块的组织和管理。
物理视图:主要描述如何把软件映射到硬件上,通常要考虑到解决系统拓扑结构、系统安装、通信等问题。
统一的场景:可以看作是那些重要系统活动的抽象,它使4个视图有机地联系起来,从某种意义上说,场景是最重要的需求抽象。在开发架构时,它可以帮助设计者找到架构的构件以及它们之间的作用关系。逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。对于不同的软件系统来说,侧重的角度也有所不同。例如,对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统,而对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。
3. 实现阶段
最初SA研究往往只关注较高层次的系统设计、描述和验证。为了有效实现SA设计向实现的转换,实现阶段的体系结构研究表现在以下几个方面。
(1)研究基于SA的开发过程支持,如项目组织结构、配置管理等。
(2)寻求从SA向实现过渡的途径,如将程序设计语言元素引入SA阶段、模型映射、构件组装、复用中间件平台等。
(3)研究基于SA的测试技术。
4. 构件组装阶段
在SA设计模型的指导下,可复用构件的组装可以在较高层次上实现系统,并能够提高系统实现的效率。在构件组装的过程中,SA设计模型起到了系统蓝图的作用。研究内容包括如下两个方面。
(1)如何支持可复用构件的互联,即对SA设计模型中规约的连接子的实现提供支持。
(2)在组装过程中,如何检测并消除体系结构失配问题。
在构件组装阶段的失配问题主要包括:由构件引起的失配、由连接子引起的失配、由于系统成分对全局体系结构的假设存在冲突引起的失配等。
5. 部署阶段
SA对软件部署作用如下:
(1)提供高层的体系结构视图来描述部署阶段的软硬件模型。
(2)基于SA模型可以分析部署方案的质量属性,从而选择合理的部署方案。
6. 后开发阶段
后开发阶段是指软件部署安装之后的阶段。这一阶段的SA研究主要围绕维护、演化、复用等方面来进行。典型的研究方向包括动态软件体系结构、体系结构恢复与重建等。
(1)动态软件体系结构。现实中的软件具有动态性,体系结构会在运行时发生改变。运行时变化包括两类:软件内部执行所导致的体系结构改变;软件系统外部的请求对软件进行的重配置。动态软件体系结构包括两个部分的研究:体系结构设计阶段的支持、运行时刻基础设施的支持。
(2)体系结构恢复与重建。对于现有系统在开发时候没有考虑SA的情况,从这些系统中恢复或重构体系结构。从已有的系统中获取体系结构的重建方法分为4类:手工体系结构重建、工具支持的手工重建、通过查询语言来自动建立聚集、使用其他技术(如数据挖掘等)。
构件(补充)
构件是面向软件体系架构的可复用软件模块。构件(Component)是可复用的软件组成成份,可被用来构造其他软件。它可以是被封装的对象类、功能模块、软件框架(Framework)、中间件等。
构件是一个独立可交付的功能单元,外界通过接口访问其提供的服务。
构件由一组通常需要同时部署的原子构件组成。一个原子构件是一个模块和一组资源。原子构件是部署、版本控制和替换的基本单位。原子构件通常成组地部署,但是它也能够被单独部署。
构件和原子构件之间的区别在于,大多数原子构件永远都不会被单独部署,尽管它们可以被单独部署。相反,大多数原子构件都属于一个构件家族,一次部署往往涉及整个家族。
模块:是不带单独资源的原子构件,是一组类和可能的非面向对象的结构体,比如过程或者函数。
构件的特性:
(1)独立部署单元,具有原子性,是不可拆分的;
(2)作为第三方的组装单元;
(3)没有外部的可见状态。
一个构件可以包含多个类元素,但是一个类元素只能属于一个构件。将一个类拆分进行部署通常没什么意义。
对象的特性:
(1)一个实例单元,具有唯一的标志。
(2)可能具有状态,此状态外部可见。
(3)封装了自己的状态和行为。
构件接口:
接口标准化是对接口中消息的格式、模式和协议的标准化。它不是要将接口格式化为参数化操作的集合,而是关注输入输出的消息的标准化,它强调当机器在网络中互连时,标准的消息模式、格式、协议的重要性。
面向构件的编程(COP):
关注于如何支持建立面向构件的解决方案。面向构件的编程需要下列基本的支持:
--多态性(可替代性);
--模块封装性(高层次信息的隐藏);
--后期的绑定和装载(部署独立性);
--安全性(类型和模块安全性)。
构件技术就是利用某种编程手段,将一些人们所关心的,但又不便于让最终用户去直接操作的细节进行了封装,同时对各种业务逻辑规则进行了实现,用于处理用户的内部操作细节。目前,国际上常用的构件标准主要有三大流派:
·EJB(Enterprise Java Bean)规范由Sun公司制定,有三种类型的EJB,分别是会话Bean(Session Bean)、实体Bean(Entity Bean)和消息驱动Bean(Message-driven Bean)。EJB实现应用中关键的业务逻辑,创建基于构件的企业级应用程序。
·COM、DCOM、COM+:组件对象模型,COM是微软公司的。DCOM是COM的进一步扩展,具有位置独立性和语言无关性。COM+并不是COM的新版本,是COM的新发展或是更高层次的应用。
·COBRA标准,是由OMG制定的一种面向对象分布式应用程序体系规范。主要分为三个层次:对象请求代理、公共对象服务和公共设施。最底层是对象请求代理ORB,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是分布对象系统中的“软总线”;在ORB之上定义了很多公共对象服务,可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种各样的服务;最上层的公共设施则定义了组件框架,提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则。
11.2 基于架构的软件开发方法
11.2.1 概述
基于架构的软件设计(Architecture-Based Software Design,ABSD)方法是由架构驱动,即由构成架构的商业、质量和功能需求的组合驱动架构设计。它强调采用视角和视图来描述软件架构,采用用例和质量属性场景来描述需求。进一步来说,用例描述的是功能需求,质量属性场景描述的是质量需求(或侧重于非功能需求)。
使用ABSD方法,设计活动可以从项目总体功能框架明确就开始,这意味着需求获取和分析还没有完成,就开始了软件设计。
ABSD方法有三个基础。第一个基础是功能的分解,使用已有的基于模块的内聚和耦合技术;第二个基础是通过选择架构风格来实现质量和商业需求;第三个基础是软件模板的使用,软件模板利用了一些软件系统的结构。
ABSD方法是递归的,且迭代的每一个步骤都是清晰定义的。因此,不管设计是否完成,架构总是清晰的,有助于降低架构设计的随意性。
11.2.2 概念和术语
1. 设计元素
ABSD方法是一个自顶向下,递归细化的方法,软件系统的体系结构通过该方法得到细化,直到能产生软件构件和类。
ABSD方法中使用的设计元素如下图所示。在最顶层,系统被分解为若干概念子系统和一个或若干个软件模板。在第2层,概念子系统又被分解成概念构件和一个或若干个附加软件模板。
2. 视角与视图
考虑体系结构时,要从不同的视角(Perspective)来观察对架构的描述,这需要软件设计师考虑体系结构的不同属性。例如,展示功能组织的静态视角能判断质量特性,展示并发行为的动态视角能判断系统行为特性,因此,选择的特定视角或视图(如逻辑视图、进程视图、实现视图和配置视图)可以全方位的考虑体系结构设计。使用逻辑视图来记录设计元素的功能和概念接口,设计元素的功能定义了它本身在系统中的角色,这些角色包括功能、性能等。
3. 用例和质量场景
用例己经成为推测系统在一个具体设置中的行为的重要技术,用例被用在很多不同的场合,用例是系统的一个给予用户一个结果值的功能点,用例用来捕获功能需求。
在使用用例捕获功能需求的同时,人们通过定义特定场景来捕获质量需求,并称这些场景为质量场景。
11.2.3 基于架构的开发模型
传统的软件开发过程是问题定义,需求分析,软件设计,实现,测试。ABSD把整个软件过程分成六个部分,架构需求,架构设计,架构文档化,架构复审,架构实现和架构演化六个步骤。
(1)架构需求:重在掌握标识构件的三步,如下图。架构需求一般来自3个方面,分别是系统的质量目标、系统的商业目标和系统开发人员的商业目标。
(2)架构设计:将需求阶段的标识构件映射成构件,进行分析,如下图。
(3)架构文档化:主要产出两种文档,即架构规格说明和测试架构需求的质量设计说明书。文档是至关重要的,是所有人员通信的手段,关系开发的成败。
(4)架构复审:由外部人员(独立于开发组织之外的人,如用户代表和领域专家等)参加的复审,复审架构能否满足需求、质量需求是否在设计中得到体现、构件的划分是否合理等。若复审不过,则返回架构设计阶段重新进行架构设计、文档化和复审。
(5)架构实现:用实体来显示出架构。实现构件,构件组装成系统,如下图。
(6)架构演化:对架构进行改变,按需求增删构件,使架构可复用,如下图。
11.2.4 体系结构的演化
体系结构演化是使用系统演化步骤去修改应用,以满足新的需求。主要包括以下6个步骤。
1.需求变化归类
首先必须对用户需求的变化进行归类,使变化的需求与已有构件对应。对找不到对应构件的变动,也要做好标记,在后续工作中,将创建新的构件,以对应这部分变化的需求。
2.制订体系结构演化计划
在改变原有结构之前,开发组织必须制订一个周密的体系结构演化计划,作为后续演化开发工作的指南。
3.修改、增加或删除构件
在演化计划的基础上,开发人员可根据在第1步得到的需求变动的归类情况,决定是否修改或删除存在的构件、增加新构件。最后,对修改和增加的构件进行功能性测试。
4.更新构件的相互作用
随着构件的增加、删除和修改,构件之间的控制流必须得到更新。
5.构件组装与测试
通过组装支持工具把这些构件的实现体组装起来,完成整个软件系统的连接与合成,形成新的体系结构。然后对组装后的系统整体功能和性能进行测试。
6.技术评审
对以上步骤进行确认,进行技术评审。评审组装后的体系结构是否反映需求变动、符合用户需求。如果不符合,则需要在第2到第6步之间进行迭代。
在原来系统上所做的所有修改必须集成到原来的体系结构中,完成一次演化过程。
11.3 软件架构风格
11.3.1 软件架构风格概述
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义一个系统家族,即一个体系结构定义、一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件架构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。
架构风格定义了用于描述系统的术语表和一组指导构建系统的规则。
软件架构设计的一个核心目标问题是能否达到架构级的软件复用。
11.3.2 数据流体系结构风格
数据流体系结构风格,面向数据流,按照一定的顺序从前向后执行程序,主要包括批处理风格和管道-过滤器风格。
1. 批处理体系结构风格
构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束后才能开始,数据必须是完整的,以整体的方式传递。构件是独立的应用程序,连接件是某种类型的媒介。
2. 管道-过滤器体系结构风格
每个过滤器(处理步骤)都有一组输入和输出,过滤器从管道(数据传输)中读取输入的数据流,经过内部处理,产生输出数据流并写入管道中。前一个过滤器的输出作为后一个过滤器的输入,前后数据流关联。构件就是过滤器,连接件就是管道。早期编译器就是采用的这种架构,要一步一步处理的,均可考虑此架构风格。
二者区别在于批处理前后构件不一定有关联,并且是作为整体传递,即必须前一个执行完才能执行下一个。管道-过滤器是前一个输出作为后一个输入,前面执行到部分可以开始下一个的执行。
典型实例:传统编译器、网络报文处理。
11.3.3 调用/返回体系结构风格
调用/返回风格是指在系统中采用了调用与返回机制。其主要思想是将一个复杂的大系统分解为若干子系统,以便降低复杂度,并且增加可修改性。构件之间存在互相调用的关系,一般是显式的调用,主要包括主程序/子程序风格、面向对象风格、层次型风格、客户端/服务器风格以及浏览器/服务器体系结构风格。
1. 主程序/子程序风格
采用单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,充当连接件的角色。
2. 面向对象体系结构风格
构件是对象,或者说是抽象数据类型的实例,连接件是对象间交互的方式。对象是通过函数和过程的调用来交互的。
3. 层次型体系结构风格
构件组成一个层次结构,连接件通过决定层间如何交互的协议来定义。每一层为上层提供服务,并作为下层的客户,只对与自己相邻的层可见。修改某一层,最多影响其相邻的两层(通常只能影响上层)。
·层次型结构优点:
(1)支持基于可增加抽象层的设计,允许将一个复杂问题分解成一个增量步骤序列的实现。
(2)不同的层次处于不同的抽象级别,越靠近底层,抽象级别越高。
(3)每一层最多只影响两层,为软件复用提供了强大的支持。
·层次型结构缺点:
(1)并不是每个系统都可以很容易地划分为分层的模式。
(2)很难找到一个合适的、正确的层次抽象方法。
4. 客户端/服务器体系结构风格
C/S(客户端/服务器)软件体系结构是基于资源不对等,且为实现共享而提出的。两层C/S体系结构有3个主要组成部分:数据库服务器、客户应用程序和网络。服务器(后台)负责数据管理,客户机(前台)完成与用户的交互任务,称为“胖客户机,瘦服务器”。
与两层C/S结构相比,三层C/S结构增加了一个应用服务器。整个应用逻辑驻留在应用服务器上,只有表示层存在于客户机上,故称为“瘦客户机”。应用功能分为表示层、功能层和数据层三层。表示层是应用的用户接口部分,通常使用图形用户界面;功能层是应用的主体,实现具体的业务处理逻辑;数据层是数据库管理系统。以上三层逻辑上独立。表示层在客户机上,功能层在应用服务器上,数据层在数据库服务器上。
5. 浏览器/服务器体系结构风格
B/S架构是三层C/S架构的变种,将客户端变为用户客户端上的浏览器,将应用服务器变为网络上的WEB服务器,又称为零客户端架构。其三层结构为:浏览器、Web服务器和数据库服务器。虽然不用开发客户端,但有很多缺点:
·对动态页面的支持能力较弱,没有集成有效的数据库处理功能;
·安全性难以控制;
·在数据查询等响应速度上,要远远低于C/S架构;
·数据提交一般以页面为单位,数据的动态交互性不强,不利于OLTP应用。
11.3.4 以数据为中心的体系结构风格
以数据为中心的体系结构以数据为中心,所有的操作都是围绕建立的数据中心进行的,主要包括仓库体系结构风格和黑板体系结构风格。
1. 仓库体系结构风格
仓库(Repository)是存储和维护数据的中心场所。仓库架构风格由中央数据结构(说明当前数据状态)和一组独立构件(对中央数据进行操作)组成。连接件是仓库与独立构件之间的交互。
2. 黑板体系结构风格
包括知识源、黑板和控制三部分。知识源包括若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,修改黑板;黑板是一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介;知识源响应是通过黑板状态的变化来控制的。黑板架构风格适用于解决复杂的非结构化的问题,能在求解过程中综合运用多种不同知识源,使得问题的表达、组织和求解变得比较容易,如信号处理、问题规划和编译器优化等。
11.3.5 虚拟机体系结构风格
虚拟机体系结构风格的基本思想是人为构建一个运行环境,在这个环境之上,可以解析与运行自定义的一些语言,这样来增加架构的灵活性。自定义了一套规则供使用者使用,使用者基于这个规则来开发构件,能够跨平台适配,主要包括解释器风格和规则系统风格。
1. 解释器体系结构风格
通常包括一个完成解释工作的解释引擎、一个包含将被解释的代码的存储区、一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行的进度的数据结构。具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,缺点是执行效率低。典型的例子是专家系统。
2. 规则系统体系结构风格
基于规则的系统包括规则集、规则解释器、规则/数据选择器及工作内存,一般用在人工智能领域和决策支持系统DSS中。
11.3.6 独立构件体系结构风格
独立构件体系结构风格主要强调构件之间是互相独立的,不存在显式的调用关系,而是通过某个事件触发、异步的方式来执行,以降低耦合度,提升灵活性。主要包括进程通信和事件系统风格(隐式调用)。
1. 进程通信体系结构风格
构件是独立的进程,连接件是消息传递。构件通常是命名过程,消息传递的方式可以是点对点、异步或同步方式,以及远程过程(方法)调用等。
2. 事件系统体系结构风格
基于事件的隐式调用风格。构件不直接调用一个过程,而是触发或广播一个或多个事件。构件中的过程在一个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一个模块中的过程调用。这种风格中的构件是匿名的过程,它们之间交互的连接件往往是以过程之间的隐式调用来实现的。
主要优点是为软件复用提供了强大的支持,为构件的维护和演化带来了方便;缺点是构件放弃了对系统计算的控制。
C2体系结构风格(补充)
C2体系结构风格可以概括为,通过连接件绑定在一起按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:
(1)系统中的构件和连接件都有一个顶部和一个底部;
(2)构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
(3)一个连接件可以和任意数目的其他构件和连接件连接;
(4)当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
11.4 软件架构复用
1. 软件架构复用的定义及分类
软件架构复用是系统化的软件开发过程:开发一组基本的软件构件模块,以覆盖不同的需求/体系结构之间的相似性,提高系统开发的效率、质量和性能。
软件架构复用的类型包括机会复用和系统复用。机会复用是指开发过程中,只要发现有可复用的资产,就对其进行复用。系统复用是指在开发之前,就要进行规划,以决定哪些需要复用。
2. 软件架构复用的原因
减少开发工作、减少开发时间、降低开发成本、提高生产力、提高产品质量,更好的互操作性,使产品维护变得更加简单。
3. 软件架构复用的对象及形式
可复用的资产包括:需求、架构设计、元素、建模与分析、测试、项目规划、过程方法和工具、人员、样本系统、缺陷消除。
一般形式的复用包括:函数的复用、库的复用、面向对象开发中的类、接口和包的复用。
4. 软件架构复用的基本过程
(1)构造/获取可复用的软件资产(复用的前提)。首先需要构造恰当的、可复用的资产,并且这些资产必须是可靠的、可被广泛使用的、易于理解和修改的。
(2)管理可复用资产。该阶段最重要的是:构件库(Component Library),其对可复用构件进行存储和管理,是支持软件复用的必要设施。构件库应提供的主要功能包括构件的存储、管理、检索以及库的浏览与维护等,以及支持使用者有效地、准确地发现所需的可复用构件。
(3)使用可复用资产。在最后阶段,通过获取需求,检索复用资产库,获取可复用资产,并定制这些可复用资产:修改、扩展、配置等,最后将它们组装与集成,形成最终系统。
11.5 特定领域软件体系结构
11.5.1 DSSA的定义
DSSA(Domain Specific Software Architecture,DSSA)就是在一个特定应用领域中为一组应用提供组织结构参考的标准软件体系结构,即用于某一类特定领域的标准软件构件的集合。
DSSA就是一个特定的问题领域中支持一组应用的领域模型、参考需求、参考架构等组成的开发基础,其目标就是支持在一个特定领域中多个应用的生成。
从功能覆盖的范围的角度有两种理解DSSA中领域的含义的方式。
(1)垂直域:定义了一个特定的系统族,包含整个系统族内的多个系统,结果是在该领域中可作为系统的可行解决方案的一个通用软件体系结构。即在一个特定领域中的通用软件架构。
(2)水平域:定义了在多个系统和多个系统族中功能区城的共有部分。在子系统级上涵盖多个系统族的特定部分功能。(如购物和教育都有收费系统,收费系统即是水平域)。
11.5.2 DSSA的基本活动
1. 领域分析
这个阶段的主要目标是获得领域模型(领域需求)。识别信息源,即整个领域工程过程中信息的来源,可能的信息源包括现存系统、技术文献、问题域和系统开发的专家、用户调查和市场分析、领域演化的历史记录等,在此基础上就可以分析领域中系统的需求,确定哪些需求是领域中的系统广泛共享的,从而建立领域模型。
2. 领域设计
这个阶段的主要目标是获得DSSA。DSSA描述在领域模型中表示的需求的解决方案,它不是单个系统的表示,而是能够适应领域中多个系统的需求的一个高层次的设计。建立了领域模型之后,就可以派生出满足这些被建模的领域需求DSSA。
3. 领域实现
这个阶段的主要目标是依据领域模型和DSSA开发和组织可重用信息。这些可重用信息可能是从现有系统中提取得到,也可能需要通过新的开发得到。
11.5.3 参与DSSA的人员
参与DSSA的人员可以划分为4种角色:
(1)领域专家:包括该领域中系统的有经验的用户、从事该领域中系统的需求分析、设计、实现以及项目管理的有经验的软件工程师等。主要任务包括提供关于领域中系统的需求规约和实现的知识,帮助组织规范的、一致的领域字典,帮助选择样本系统作为领域工程的依据,复审领域模型、DSSA等领域工程产品等。
(2)领域分析人员:由具有知识工程背景的有经验的系统分析员来担任。主要任务包括控制整个领域分析过程,进行知识获取,将获取的知识组织到领域模型中。
(3)领域设计人员:由有经验的软件设计人员来担任。主要任务包括根据领域模型和现有系统开发出DSSA,并对DSSA的准确性和一致性进行验证。
(4)领域实现人员:由有经验的程序设计人员来担任。主要任务包括根据领域模型和DSSA,开发可重用的构件。
11.5.4 DSSA的建立过程
DSSA的建立过程分为5个阶段:
(1)定义领域范围:领域中的应用要满足用户一系列的需求。
(2)定义领域特定的元素:建立领域的字典,归纳领域中的术语,识别出领域中相同和不相同的元素。
(3)定义领域特定的设计和实现需求的约束:识别领域中的约束,记录这些约束对领域的设计和实现会造成什么后果。
(4)定义领域模型和架构:产生一般的架构,并描述其构件说明。
(5)产生、搜集可复用的产品单元:为DSSA增加复用构件,使其可用于新的应用系统。
DSSA的建立过程是并发的、递归的、反复的和螺旋型的。
DSSA的三层次系统模型:
·领域开发环境:领域架构师决定核心架构,产出参考结构、参考需求、架构、领域模型、开发工具。
·领域特定的应用开发环境:应用工程师根据具体环境来将核心架构实例化。
·应用执行环境:操作员实现实例化后的架构。
相关文章:
软考高级系统架构设计师-第11章 系统架构设计
【本章学习建议】 根据考试大纲,本章不仅考查系统架构设计师单选题,预计考12分左右,而且案例分析和论文写作也是必考,对应第二版教材第7章,属于重点学习的章节。 软考高级系统架构设计师VIP课程https://edu.csdn.net/…...
中和农信的“三农”服务密码:科技+标准化助力乡村振兴
作为中国农村市场最大的专注服务农村小微客户的“三农”综合服务机构,中和农信凭借多年积累的农村服务经验,成功从单一小额信贷机构转型为覆盖金融、生产、生活及生态服务的综合型“三农”服务平台。近期,中和农信在由中保保险资产登记交易系…...
【Redis】布隆过滤器应对缓存穿透的go调用实现
布隆过滤器 https://pkg.go.dev/github.com/bits-and-blooms/bloom/v3 作用: 判断一个元素是不是在集合中 工作原理: 一个位数组(bit array),初始全为0。多个哈希函数,运算输入,从而映射到位数…...
MyBatis-Plus笔记(下)
注解 tablename注解 - 描述:表名注解,标识实体类对应的表 - 使用位置:实体类 代码举例: TableName//可以不加,使用实体类的名字作为表名!忽略大小写 //BaseMapper->User实体类-》实体类名-》表名数据…...
【项目管理】第14章 项目沟通管理-- 知识点整理
项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 第6章 项目管理概论 4分第13章 项目资源管理 3-4分第7章 项目…...
3个关键数据解密:首航上市如何重构ebay电商新能源供应链?
3个关键数据解密:首航上市如何重构eBay电商新能源供应链? 在跨境电商圈,一个新玩家的崛起往往意味着新的格局变动。2024年,伴随一家名为“首航”的新能源企业在港股成功上市,整个eBay类目的供应链悄然掀起新一轮洗牌。…...
《华为云Node.js部署:从开发环境到生产上线的完整指南》
目录 引言第一步: 重置密码第二步:连接到服务器第三步:安装必要软件第四步:创建项目目录第五步:将代码上传到服务器1、安装 FileZilla2、打开FileZilla,连接到您的服务器:3、连接后,…...
【网络原理】TCP/IP协议五层模型
目录 一. 协议的分层 二. OSI七层网络协议 三. TCP/IP五层网络协议 四. 网络设备所在分层 五. 封装 六. 分用 七. 传输中的封装和分用 八. 数据单位术语 一. 协议的分层 常见的分层为两种OSI七层模型和TCP/IP五层模型 为什么要协议分层? 在网络通信中&…...
Asp.Net Core学习随笔
学习自BLBL杨中科老师 依赖注入(Dependency Injection) 依赖注入是实现控制反转(Inversion Of Control 即IOC)的一种方式(还有一种叫服务定位器的实现,但是不如依赖注入好用),软件开发中实现解耦常用的方式. 比如吃饭 1. 传统写法(没有DI,紧耦合&a…...
基于PHP的酒店网上订房系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 酒店服务是旅游行业的一个重要组成部分,它的作用已经从过去的单一的住宿、结算帐务向全面、高水平的服务型酒店转变。酒店的服务工作贯穿于整个酒店的市场营销、预定、入住、退房、结账等环节,酒店要提高整体工作水平,简化工作程序&…...
《MySQL从入门到精通》
文章目录 《MySQL从入门到精通》1. 基础-SQL通用语法及分类2. 基础-SQL-DDL-数据库操作3. 基础-SQL-DDL-表操作-创建&查询4. 基础-SQL-DDL-数据类型及案例4.1 数值类型4.2 字符串类型4.3 时间和日期类型 5. 基础-SQL-DDL-表操作-修改&删除5.1 DDL-表操作-修改5.2 DDL-表…...
MySQL聚合查询
聚合查询 group by...
生信初学者教程(三十四):文章的方法
文章目录 介绍数据收集和整理数据整合差异基因分析功能富集分析免疫浸润分析候选标记物识别诊断ROC曲线单细胞分析统计方法介绍 在数据分析进行的同时,我们可以逐步撰写方法部分,确保其与结果紧密相连。一旦结果部分完成,方法部分应根据结果的逻辑顺序进行分类和组织。在描…...
算力云平台部署—SadTalker的AI数字人视频
选择算力 部署选择 选择镜像 机器管理 控制台 通过平台工具进入服务器 认识管理系统 打开命令行 进入目录 stable-diffusion-webui# cd 增加执行权限 chmod x ./webui.sh 运行命令 bash ./webui.sh sudo apt install -y python3 python3-venv git 安装软件 Creating the …...
iPhone相册导出到电脑的完整指南
iPhone相册导出到电脑的完整指南 本文介绍通过数据线连接实现iPhone照片视频传输到电脑的标准操作方法,适用于需要备份移动设备影像资料的用户。 环境准备 使用原装Lightning或USB-C数据线连接设备与电脑需在电脑端安装设备管理工具(如克魔助手&#…...
【数据结构】励志大厂版·初阶(复习+刷题):复杂度
前引:从此篇文章开始,小编带给大家的是数据结构初阶的刷题讲解 ,此类文章将简略的包含相关知识,详细的思路拆分讲解,分析每一题的难点、易错点,看见题目如何分析,以上就是小编预备的内容&#x…...
Nginx底层架构(非常清晰)
目录 前言: 场景带入: HTTP服务器是什么? 反向代理是什么? 模块化网关能力: 1.配置能力: 2.单线程: 3.多worker进程 4.共享内存: 5.proxy cache 6.master进程 最后&…...
Golang|Channel 相关用法理解
文章目录 用 channel 作为并发小容器channel 的遍历channel 导致的死锁问题用 channel 传递信号用 channel 并行处理文件用channel 限制接口的并发请求量用 channel 限制协程的总数量 用 channel 作为并发小容器 注意这里的 ok 如果为 false,表示此时不仅channel为空…...
智能合约安全审计平台——以太坊虚拟机安全沙箱
目录 以太坊虚拟机安全沙箱 —— 理论、设计与实战1. 引言2. 理论背景与安全原理2.1 以太坊虚拟机(EVM)概述2.2 安全沙箱的基本概念2.3 安全证明与形式化验证3. 系统架构与模块设计3.1 模块功能说明3.2 模块之间的数据流与安全性4. 安全性与密码学考量4.1 密码学保障在沙箱中…...
趣说区块链隐私智能合约Shielder 实现原理
目录 核心理念 Deposit Withdraw Shielder 是 Aleph Zero 上的智能合约,它利用 zk-SNARK 技术实现隐私支付以及与 DeFi 的隐私交互。这与常规区块链的完全透明性形成鲜明对比,常规区块链允许追踪单个用户与链上合约以及其他用户的所有交互。Shielder 通过使第三方链观察者…...
TCPIP详解 卷1协议 五 Internet协议
5.1——Internet协议 IP是TCP/IP协议族中的核心协议。所有TCP、UDP、ICMP和IGMP数据都通过IP数据报传输。IP 提供了一种尽力而为、无连接的数据报交付服务。“尽力而为”的含义是不保证 IP 数据报能成功到达目的地。任何可靠性必须由上层(例如TCP)提供。…...
基于Oracle ADG通过dblink创建物化视图同步数据到目标库
基于Oracle ADG通过dblink创建物化视图同步数据到目标库 环境说明:源端环境Oracle ADG一主一备,版本11.2.0.4,目标端版本11.2.0.4,测试通过dblink方式在目标库创建物化视图同步ADG备库的数据。 PROD --> STANDBY – > TAR…...
openGauss新特性 | 自动参数化执行计划缓存
目录 自动化参数执行计划缓存简介 SQL参数化及约束条件 一般常量参数化示例 总结 自动化参数执行计划缓存简介 执行计划缓存用于减少执行计划的生成次数。openGauss数据库会缓存之前生成的执行计划,以便在下次执行该SQL时直接使用,可…...
qt中的正则表达式
问题: 1.在文本中把dog替换成cat,但可能会把dog1替换成cat1,如果原本不想替换dog1,就会出现问题 2文本中想获取某种以.txt为结尾的多有文本,普通的不能使用 3如果需要找到在不同的系统中寻找换行符,可以…...
开源项目 | 17款云原生安全相关的扫描和平台类开源工具
“ 随着云计算技术的不断发展,越来越多的企业开始将应用程序和数据存储到云上。然而,云安全问题也随之而来,因此,开源云原生安全工具的需求也越来越大。在本文中,我们将介绍一些流行的开源云原生安全工具,以…...
力扣面试150题—旋转图像和矩阵置零
Day21 题目描述 思路 矩阵转置 在将列反转 1 2 3 4 5 6 7 8 9 转置 1 4 7 2 5 8 3 6 9 反转 7 4 1 8 5 2 9 6 3 class Solution {public void rotate(int[][] matrix) { //分为两步 矩阵转置,将列倒序 int x0; int nmatrix.length; //转…...
ScholarCopilot:“学术副驾驶“
这里写目录标题 引言:学术写作的痛点与 AI 的曙光ScholarCopilot 的核心武器库:智能生成与精准引用智能文本生成:不止于“下一句”智能引用管理:让引用恰到好处 揭秘背后机制:检索与生成的动态协同快速上手:…...
Node.js项目开启多进程的2种方案
当node项目只部署一个单进程单实例时,遇到异常发生后程序会崩溃,此时杀掉进程在重启单这段时间会导致服务不能正常使用,这显然会影响用户体验。 所以需要以多进程的模式去部署应用,这样当某一个进程发生异常重启时,此时有其他请求被接受后,其他进程依旧可以对外提供服务…...
论文导读 | 基于GPU的子图匹配算法
摘要 大规模图上的子图匹配在社交网络挖掘,生物信息学,知识图谱等领域具有关键作用。近年来随着以GPU为代表的新硬件的发展,研究人员开始尝试在GPU上实现这一NP难的任务。GPU提供了大量的计算单元和高速的显存带宽,可以显著提升算…...
中天科技旗下的中天智能装备有限公司,在立库方面有哪些优势?
中天科技旗下的中天智能装备有限公司在立库方面优势显著,主要体现在产品与方案、技术研发、项目经验和服务质量管控等多个维度,能够为客户提供全方位、高品质的立库相关服务。 产品与解决方案优势 多种立库解决方案:提供托盘式立库、料箱式立…...
HTML5+CSS前端开发【保姆级教学】+超链接标签
一、引入: Hello!,各位编程猿们!一个页面可以跳转到其他页面,去访问其他资源,使得我们的文档更加的灵动,那我们如何实现不同页面的跳转呢?本期主要介绍超链接标签 那么什么是超链接…...
【游戏安全】文本校验类风险
文本风险定义: 在游戏中除了动画,声音参与和玩家的交互之外,游戏中的文本也属于和玩家交互中一项重要的元素。由玩家操作触发任何不同于游戏自身逻辑设定,进而破坏游戏平衡的文本内容都可以称之为文本类风险漏洞。(这个定义自己瞎写的…) 文本风险危害(漏洞举例): …...
快速排序及其应用
快速排序及其应用 标准写法改成稳定版本求第k小值O(n)做法快排的另一种写法 标准写法 #include <bits/stdc.h>using namespace std;using ll long long;int a[] {8, 5, 18, 11, 7, 2, 21, 15, 3, 8};void quickSort(int l, int r) {if (l > r) return ; // 元素个数…...
南柯电子|新能源汽车EMC电磁兼容性测试整改:突破行业规范之路
随着新能源汽车产业的蓬勃发展,车辆电子化、智能化程度不断提高,电磁兼容性(EMC)问题日益凸显。作为衡量汽车电子系统稳定性的关键指标,EMC性能不仅影响车辆功能安全,更关乎道路交通的整体安全性。 一、EM…...
LabVIEW 程序持续优化
LabVIEW 以其独特的图形化编程方式,在工业自动化、测试测量、数据分析等众多领域发挥着关键作用。为了让 LabVIEW 程序始终保持高效、稳定,并契合不断变化的实际需求,持续改进必不可少。下面将从多个关键维度,为大家细致地介绍通用…...
裂缝检测数据集,支持yolo,coco json,pasical voc xml,darknet格式的标注,1673张原始训练集图片,正确识别率99.4%
数据集详情: 裂缝检测数据集,支持yolo,coco json,pasical voc xml,darknet格式的标注,1673张原始训练集图片,正确识别率99.4% 2394总图像 数据集分割 训练集占比 70% 1673图片 有效集20% 477图片 测试集...
Webrtc让浏览器实现无服务器中转的安全私密聊天
私密聊天平台的应用介绍 在当今数字时代,隐私和安全成为人们日益关注的焦点。许多人发现,他们的聊天记录、个人信息甚至行为习惯都可能被第三方平台记录、分析甚至滥用。无论是出于保护个人隐私的需要,还是希望实现真正的点对点直接通信&…...
数据结构-限定性线性表 - 栈与队列
栈和队列是数据结构中非常重要的两种限定性线性表,它们在实际应用中有着广泛的用途。这篇文章将深入讲解栈和队列的概念、抽象数据类型、实现方式、应用场景以及性能分析,并通过代码示例帮助大家更好地理解和实践。 一、栈的概念与抽象数据类型 1.1 栈…...
接口的集成测试步骤
一、集成测试是什么 接口的集成测试是指在软件开发过程中,将各个模块或组件按照设计要求组合在一起,并测试它们之间的接口是否能够正确交互和协同工作的过程。集成测试是软件开发中的一个重要阶段,通常在单元测试之后进行,目的…...
Python 实现的运筹优化系统数学建模详解(多目标规划模型)
一、引言 在数学建模的广阔领域中,多目标规划模型占据着极为重要的地位。它致力于在复杂的实际场景里,同时优化多个相互冲突的目标,寻求一组决策变量,让多个目标函数在满足特定约束条件下达到某种平衡。这种模型广泛应用于生产调度…...
AJAX原理与XMLHttpRequest
目录 一、XMLHttpRequest使用步骤 基本语法 步骤 1:创建 XHR 对象 步骤 2:调用 open() 方法 步骤 3:监听 loadend 事件 步骤 4:调用 send() 方法 二、完整示例 1. GET 请求(带查询参数) 2. POST 请…...
css中的3d使用:深入理解 CSS Perspective 与 Transform-Style
在前端开发的奇妙世界中,CSS 不仅负责页面的布局和样式,还能赋予元素生动的动态效果。要实现引人入胜的 3D 变换,perspective 和 transform-style 这两个属性扮演着至关重要的角色。本文将带您深入了解这两个属性,揭开它们如何协同…...
在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener)
在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener),它可以帮助你实时观察测试过程中活跃线程数(并发用户数)的变化趋势,从而分析系统的并发处理能力和负载情况。 1. Active Threads Over Time 的作用 实时监控并发用户数:显示测试过程中活跃线程…...
未来七轴机器人会占据主流?深度解析具身智能方向当前六轴机器人和七轴机器人的区别,七轴力控机器人发展会加快吗?
六轴机器人和七轴机器人在设计、功能和应用场景上存在明显区别。六轴机器人是工业机器人的传统架构,而七轴机器人则在多自由度和灵活性方面进行了增强。 本文将在理解这两者的区别以及为何六轴机器人仍然是市场主流,从多个方面进行深入解读六轴和七轴区…...
spark-SOL简介
Spark-SQL简介 一.Spark-SQL是什么 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块 二.Hive and SparkSQL SparkSQL 的前身是 Shark,Shark是给熟悉 RDBMS 但又不理解 MapReduce 的技术人员提供的快速上手的工具 …...
【今日三题】经此一役小红所向无敌(模拟) / 连续子数组最大和(动态规划) / 非对称之美(贪心)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 经此一役小红所向无敌(模拟)连续子数组最大和(动态规划)非对称之美(贪心) 经此一役小红所向无敌(模拟) 经此一役小红所向无…...
MYSQL MVCC详解
这里写自定义目录标题 **一、MVCC 解决的核心问题****二、MVCC 的核心实现机制****1. 隐藏字段与版本链****2. Undo Log****3. ReadView(一致性视图)** **三、MVCC 的可见性判断过程****四、不同隔离级别下的 MVCC 行为****五、MVCC 的优缺点****六、示例…...
Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化
一、软件介绍 文末提供源码和程序下载学习 Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化。Trinity 提供性能分析和 XAI 工具,非常适合深度学习系统或其他执行复杂分类或解码的模型。 二、软件作用和特征 Trinity 通过结合具有超维感知能力的不同交…...
用 Deepseek 写的uniapp血型遗传查询工具
引言 在现代社会中,了解血型遗传规律对于优生优育、医疗健康等方面都有重要意义。本文将介绍如何使用Uniapp开发一个跨平台的血型遗传查询工具,帮助用户预测孩子可能的血型。 一、血型遗传基础知识 人类的ABO血型系统由三个等位基因决定:I…...
展示数据可视化的魅力,如何通过图表、动画等形式让数据说话
在当今信息爆炸的时代,数据的量级和复杂性不断增加。如何从海量数据中提取有价值的信息,并将其有效地传达给用户,成为了一个重要的课题。数据可视化作为一种将复杂数据转化为直观图形、图表和动画的技术,能够帮助用户快速理解数据…...