软件体系结构14问?

1、什么是软件体系结构?

软件体系结构 = 构件+连接件+约束。关于对构件的理解参见讨论题二。

连接件是一类特殊的构件,是将构件连接在一起的软件构造体。而约束是指按照什么标准或要求将构件连接起来。三者的关系可以表述为:按照系统的性能约束或者功能约束,用连接件将构件组装成软件系统。

学习重点:理解构件。完成大作业的核心工作:寻找和确定拟开发系统的构件。

从领域需求到系统功能、再到系统结构,经历了两次转化。在开发过程中,就要将需求集合转化为功能集合,再转化为系统的构件集合,然后实施系统开发。

软件体系结构的作用犹如建筑工程中的“施工图纸”,或者称之为“蓝图”。没有图纸,不能开工。同样地,没有软件体系结构,就无法构造复杂的软件系统。由此可见,软件体系结构的重要性。

2、如何理解构件?

软件体系结构三要素之一的构件,按照书中的定义,构件是可预制、可重用的软件构造体,可以是模块、子系统甚至系统,犹如建筑中的预制板、预制粱、隔离墙等预先在工厂中做好的、可以用在一些建筑中的构造体。可预制,就是事先做好的;可重用,就是可以在不同的系统中使用。例如登录/注册模块可以在很多软件系统中使用,电子商务中的客户、商品和订单模块就是该领域软件体系结构中的构件。同样地,在每一个应用领域中使用的软件系统,都存在若干构件。
所以,理解构件就要记住它的两大特征:事先做好的,可以重复使用的。软件开发历经几十年的实践,已经到了采用“搭积木”的方式构造软件系统的阶段。这些或大或小的“软件积木”(Building blocks),其中有些就是构件。面向服务的体系结构(SOA)中的服务组件架构(Service Component Architecture, SCA)就是采用搭积木的方式构建软件系统。

3、怎样理解概念视图中的“概念”?

在体系结构图示方法中概念视图具有基础作用,是在对领域需求的准确理解基础上产生的。它不是对将要开发系统的具体模块的命名,而是将需求集合转化为功能集合的一种抽象表示。如果说顶级用例图界定了软件系统的主要功能,概念视图具有同样的作用。

在课程学习和后面的大作业中,概念视图都是重点,也是难点。后面在讲到用例驱动的体系结构设计时,还会谈及如何将用例图转化成概念视图的问题。

要得到概念视图中的概念,即构件和连接件的命名,务必对领域需求有完整准确的把握,然后将需求适当归并,对应到一个功能集合,由此可以抽象出准确的概念构件来(包含连接件,因为连接件是一类特殊的构件)。
如果概念视图不准确,后面的模块视图、执行视图和代码视图就都会出问题。可见,体系结构中的概念视图,其重要性如同UML中的顶级用例图。

4、如何将概念视图转换到模块视图?

概念视图是一个体系领域活动的抽象的体现,略去了细节。由中心视镜的例子看出模块视图就是对应的将概念视图分层,将具有相同功能的模块划分为同一层,建立模块视图,约束模块之间的使用关系,从而对体系的功能更好的在模块视图中进行进一步的具体实现。最后将概念视图中的关系转化为模块视图中各个层之间的关系。

5、模型是什么?为什么说PIM至关重要?

模型有多种,如数学模型、物理模型、建筑模型等等。模型具有基础性、可参照、可重用的特点。模型是对某个事物高度抽象的结果。在软件开发中,对领域活动深入分析后,利用面向对象方法可以建立该领域的软件模型,随后在具体的系统开发中就可以利用此模型。特别是非常复杂的软件系统开发,获取领域模型是第一步。然后可以扩展思考,看能否将该模型跨领域应用,产生更高层次的模型。

所谓PIM,是指与开发平台无关的模型,这样的模型因为与具体的软件开发技术无关,因此具有很高的可重用性,以及可扩展性,即由该模型向各种具体的PSM转换,甚至向其它领域的PIM转换。当然,在具体的软件开发实践中,也有“逆流而上”的,即从具体的PSM向上抽象,或者叫泛化,得到PIM。

6、领域驱动的含义是什么?其中的产品线结构有什么特点?

领域驱动的体系结构设计具有鲜明的领域特征,例如系统软件中的Windows操作系统,从早期的Win95、Win 98、Win2000,到后面的WindowsXP、win7、Win10,已经演变为网络操作系统,而且有企业版、家庭版等适应不同需求的类型,但是操作系统的核心架构和对应的核心功能没有变,只是随着外部需求的变化逐渐增加一些构件,如用户界面的图形化构件、网络安全构件等。领域驱动的体系结构设计,就是要得到该领域软件体系架构的参考模型,该模型具有可参照、可扩展、可重用的特点,便于在该领域中开发软件系统,而且可以随领域活动或者需求变化而变化。

产品线结构是DSSA的一种特例,是针对领域中某一类产品的软件开发,除了具有上面提到的一些特点,它还具有一些与该类产品相关的一些专用构件。如高校教学管理软件除了具有一般管理信息系统软件的基础功能外,还具有体现高校教学活动的若干构件,它们是所有高校都要使用的,具有一定的应用范围。

通俗的回答:
领域驱动的含义:
1.领域:就是用户应用软件的主题区域。比如“机票预订”,“确认收支”等。
2.驱动:就是试图让我们的思路更顺畅,场景的切换更平滑。
3.那么领域驱动结合在一起,被称为领域驱动设计,简称: DDD,DDD是一-种以领域为核心的设计和开发理念。
4.DDD就是用来应对领域的复杂性,主要为了应对软件的复杂性。
产品线结构特点:
1.要了解产品线结构的特点,首先先了解一下产品线结构是什么:可以说它就是在一个公共的软件资集合上建立来的,共享同一个特性集合的系统集合。
2.软件产品线的开发有4个技术特点:过程驱动、特定领域、技术支持和架构为中心。

7、如何将用例图转化成概念视图?

用例图是用来描述领域活动的,显示出一些角色、一些活动以及角色和活动之间的联系。顶级用例图界定了将要开发的软件系统的功能边界,甚至从中可以确定主要的子系统、主要的实体类,它们是领域业务逻辑和业务流程的抽象描述和可视化表达。因此,在准确的顶级用例图基础上,可以寻求得到体系结构的概念视图。首先,看哪些活动是基础的、核心的,它们对应的软件构造块必将是要重用的(需要持久保存的实体类,登陆/注册模块,用户界面设计模块,核心功能模块等);然后,考察它们是否可以预制,即事先做好的,然后可以应用到该领域的很多软件系统中,满足这两点的软件模块就是构件;接着,从用例图的联系中抽取连接件,联系可以是角色和活动的联系,也可以是活动之间的联系,要认真推敲,因为连接件是一类特殊的构件,也要满足可预制、可重用的要求;最后按照概念视图的规范表示画出。
通俗的说:
首先用例图是指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图,它是系统的蓝图。用例图呈现了一些参与者,一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。而概念视图主要是整个系统的抽象结构表述,我们需要通过用例图进行分析,找出功能模块,并通过用例图找出用例与用例、用例与活动之间的联系,最后根据功能模块把找到的功能和联系进行整合,依靠概念视图的画法将其画出。

8、三种体系结构设计方法之间有怎样的联系?

模型驱动、领域驱动和用例驱动,三种设计方法均来自对领域活动业务逻辑和业务流程的准确把握,只是解决问题的路径和侧重点不同。用例驱动从用例入手,用例来自领域活动的主要场景,开发者要关注场景中的人、物和事,直观、可操作性强;模型驱动抽象程度较高,针对复杂的领域问题,不会直接就能够得到模型,可能需要将其拆分成若干个子问题,然后分别求解,再将子模型组合成一个总体模型;至于领域驱动,则从领域或其中更窄的产品线入手,应用范围明确,针对性强,领域特征明显。用例驱动和领域驱动的最终结果都要得到模型,相关领域软件系统的开发最终都会转化为模型驱动。
三种设计方法运用软件技术可以优化领域的业务流程,提高工作效率和质量。需要注意的是,某些模型是跨领域的,即带有普遍性,如数据是分散的,但是监控是集中的一类应用(如医院的中央病房监控系统、城市交通管理系统、港口调度指挥系统等等)。还有Rosa的早餐预订系统,经过泛化后可以用于一类应用—标准化需求与多样化需求的协调和平衡。所以,模型驱动的设计方法是本课程学习的核心和重点,特别是掌握某些具有普遍应用意义的模型对软件开发有益。

9、如何选择恰当的设计模式或风格?

具体问题具体分析,对症下药才能药到病除。
很多领域的软件开发可以采用MVC模式,即常见的三层架构:应用层(或称之为视图层View),模型层(Model,业务逻辑层)和数据库层(扩展为基础设施层)。至于Controler 是控制各层之间的信息传递(命令信息和数据信息)。操作系统一般采用事件驱动的设计风格;不需要太多交互的应用如数据处理可采用管道-过滤器模式;而对资源占用有较多要求和条件的应用,仓库-黑板是一个不错的选项,因为其存储空间有限或者占用时间有限;还有一些层次结构明显、各层功能清晰的领域如行政管理、地域管理等,可采用分层风格的体系结构设计。当然,针对复杂的软件工程应用如智慧城市,要采用若干设计模式的组合,甚至研发出新的设计模式。

10、如何理解“按需服务,随需应变”的SOA理念?

用户需求是不断变化的,套用哲学语言就是“变化是永远不变的”。软件系统如何适应需求的变化?重新开发?不可行!修修补补,未必行。借鉴机械系统中零件的可装配、可互换,软件开发也希望实现可扩展、可重用、可维护。SOA就是这样演化而来,使系统开发朝着构件化、集成化发展。每个构件具有标准化的构成和外部接口,构件之间的联系可以随需求变化,即整个系统可以根据用户需求灵活组合,可装卸,可替换,或者说是通用构件+专用构件,前者构成服务总线或平台,后者挂接在上面实现专用功能。这种“按需服务,随需应变”的软件系统开发方式会使多方受益。不恰当地比喻,有点像“变形金刚”,根据需要可以“变成”想要的东西,但是构成它的基本零件集合没变。

11、用SCA如何构造SOA中的“A”?

按照SOA“按需服务,随需应变”的理念,开发者在实践中发展建立起SCA(服务组件架构)这一标准,即用可实现互操作的、标准化构成的组件构造软件系统,每一个组件封装了一个服务,大的组件是由一组小的组件构成。按照这种方式建造的软件系统,其整体架构具有了可重组、可装配的特点。

12、服务组合的具体规范是怎样实现的?

XML(可扩展标记语言)是一种可自定义、可描述任何事物、人与计算机均可读的语言,功能强大,应用范围广泛。
在SCA中用于表示组件(Component)和由组件构成的服务组合(Composite)。每一个服务组合由接口(Interface)、引用(Reference)、服务(Service)、包含(Inclusion)构成,均采用XM表示。一个系统由一系列组合构成。

13、为什么说SDO是一个通用的数据访问规范?

SDO(Service Data Object)是SOA中的另一个标准,也是SCA中一个特殊的组件,提供了一套与数据源无关的API。
利用SDO可以访问RDB、XMLDB、OODB等各种形式的数据库,保留数据访问和操作的历史记录。

14、软件体系结构将如何发展?

万物皆可互联,软件无处不在。伴随第四次工业革命逐步展开,以机械为核心的工业将向以软件为核心的工业转型。那么,软件体系结构会怎样发展呢?这里只是谈点个人看法。
1、超大型、超复杂的体系结构。如智慧城市中的软件系统,它不可能由一个单一的巨无霸系统构成,一定是通用软硬件基础设施+各行各业应用系统,其中包含众多的软件系统,具有层次结构;
2、虚实结合。CPS( 信息物理系统,第四次工业革命的产物)中 的虚拟现实交互系统(VRIS)是联系物理世界和信息世界的纽带,它会具有什么样的体系结构?
3、微服务架构。目前业界正在使用的技术,是SOA的演化产物,其构件的颗粒度更小,更容易实现功能调整,特别适合人机交互较多的应用领域。大家要关注它和它今后的发展。

你可能感兴趣的:(软件体系结构)