精华内容
下载资源
问答
  • 软件工程设计概念与体系结构设计

    千次阅读 2020-04-15 11:46:39
    软件工程第四次作业 11.1 当你编写程序时是否会设计软件?软件设计和编码有什么不同? 我在编写程序是并不会设计软件,编写程序和设计软件是不同的概念。当软件质量被确定好时才会设计软件。在设计软件的时候,首要...

    软件工程第四次作业

    11.1 当你编写程序时是否会设计软件?软件设计和编码有什么不同?

    • 我在编写程序是并不会设计软件,编写程序和设计软件是不同的概念。当软件质量被确定好时才会设计软件。在设计软件的时候,首要需求必须是被分析和被具体指定了。
    • 在软件设计的过程中,设计工程是设计软件的概念之一。在开始软件设计时,需求应该被分析和建模。这个模型能够保证质量和在编码生成时能够进行改进。
    • 在一个软件工程的内容中,首先需要的是改进项目的模型,而并不是项目本身。

    软件设计和编码的不同

    • 首先非常明确的是,软件设计不是编码,编码也不是软件设计。他们是项目不同组件所产生的。
    • 设计是用来解决问题的逻辑的描述。
    • 编码是实现设计的语言规范,他是运行在电脑上并提供预期结果的

    11.17 简要描述设计模型的四个元素。

    1. 数据设计元素

      • 在数据设计元素中,创建了在高抽象级上表示的数据模型和信息模型。数据结构通常是软件设计的重要部分。在数据设计元素中可以存放类图,分析包,CRC模型,协作图,数据流图,控制流图,处理过程说明等。

      • 在体系结构级,数据设计关注文件或数据库,在构件级,数据设计考虑实现局部数据对象所需的数据结构

    2. 体系结构设计元素

      • 软件的体系结构设计等效于房屋的平面图。软件体系结构设计元素提供了整个软件的整体视图。

      • 体系结构模型从以下三个来源导出:1. 关于将要构建的软件的应用域信息。 2. 特定的需求模型元素,如数据流图或分析类,现有问题中他们的关系和协作。 3. 可获得的体系结构风格和模式

      • 体系结构设计元素通常被描述成一组相互联系的子系统,且常常从需求模型的分析包中派生出来。

    3. 接口设计元素

      • 软件的接口相当于一组房屋的门,窗和外部设施的详细绘图。软件接口设计元素描述了信息如何流入和流出系统,以及被定义为体系结构一部分的构件之间是如何通信的。

      • 接口设计有三个重要元素:1. 用户界面(User Interface) 2. 和其他系统、设备、网络、信息生成者或使用者的外部接口。3. 各种设计构件之间的内部接口。能够使软件进行外部通信,还能使软件体系结构中的构件之间进行内部的通信和协作。这些接口设计元素能够使软件进行外部通信,还能使软件体系结构中的构件之间进行内部通信和协作。

      • UI设计使软件工程中的主要活动,包含美学元素,人机工程元素,技术元素等。

      • 外部接口设计需要发送和接收信息实体的确定信息

      • 内部接口设计和构件级设计紧密相关。

    4. 构建级设计元素

      • 软件的构件级设计相当于一个房屋中的每个房间的一组详图(规格说明)软件的构件级设计完整地描述了每个软件构件的内部细节。为此,构件级设计为所有局部数据对象定义数据结构,为所有在构件内发生的处理定义算法细节,并定义允许访问所有构件操作的接口。
      • 在面向对象的软件工程中,使用UML图表现的一个构件。能够反应整个构件图的整体规划。

    12.2 举出2-3个例子,说明12.3.1节中提到的每一种体系结构风格的应用。

    1. 以数据为中心的体系结构:

      数据存储位于这种体系结构的中心,其他构件会经常访问该数据存储,并对存储中的数据进行更新,增加,删除,或者修改。

      例子:

      图书目录查询系统:这里涉及到许多数据的管理,数据库的构建,存储等

      线上购书系统: 购书记录也是需要不断对数据进行访问删除存储。

      剪贴板:剪贴板是一个用来进行短时间的数据存储,并在文档/应用之间进行数据传递和交换的软件程序

    2. 数据流体系结构:

      当输入数据经过一系列计算构件和操作构件的变换形成输出数据时,可以应用这种体系结构。

      例子:

      工程软件: 这里涉及到许多构件的前后关系,要经过一系列计算构件

      科学软件

      Unix 的Shell程序

    3. 调用和返回体系结构:

      这种体系结构风格能设计出一个相对易于修改和扩展的程序结构。

      例子:

      任何I-O-P 申请。

      C语言或C++语言中所用到的使用函数时的结构

    4. 面向对象体系结构

      系统的构件封装了数据和必须用于控制该数据的操作,构件间通过信息传递进行通信与合作

      例子:

      所有面向对象的程序,C++,Java中的面向对象的程序的内容

      基于GUI的应用程序,用来显示画面

    5. 层次体系结构

      层次体系结构中定义了一系列不同的层次,每个层次各自完成操作,这些操作逐渐接近机器的指令集。

      例子:

      客户端服务器软件一般来说都是分层的

      一些应用功能要从底层操作系统分离的应用程序。

    12.7 使用本章描述的设计方法开发PHTRS的软件体系结构。

    PHTRS系统是城市公共工程部门开发路面坑洼跟踪和修补系统。

    PHTRS采用的是以数据为中心的体系结构。数据中心是包含有坑洼信息,报告信息,修补信息的数据库。

    体系结构基本上分为4个层次:

    1. 用户界面层:是由网站和在用户桌面上的用户界面程序组成的。市民通过网站去登录并且报告一个坑洼信息。施工人员会用软件登录数据库并去生成工作顺序和损失报告。工程承包商用相同的软件去根据修补信息,比如修补员工的基本信息,特长,材料使用,修补时长等数据来更新坑洼情况。

    2. 业务层:业务层是业务逻辑存在的地方。它包括业务组件,所有业务实体和定义了管理业务工作流的规则。

    3. 数据访问层:这一层提供了更多的清晰性和数据安全性。数据只能够被类中定义的去访问数据库,并进行增删改。

    4. 最后是数据库。 是设计中的最后一层

    展开全文
  • 软件工程》第6章体系结构设计

    千次阅读 2020-06-02 09:33:24
    体系结构设计关注理解一个软件系统应当如何组织,以及设计该系统的整体结构。体系结构设计是设计和需求工程之间的关键性衔接环节,因为它会确定组成一个系统的主要结构构件以及它们之间的关系。体系结构设计过程的...

        体系结构设计关注理解一个软件系统应当如何组织,以及设计该系统的整体结构。体系结构设计是设计和需求工程之间的关键性衔接环节,因为它会确定组成一个系统的主要结构构件以及它们之间的关系。体系结构设计过程的输出是一个体系结构模型,该模型描述系统如何被组织为一组相互通信的构件。

        在敏捷过程中,得到广泛认同的一点是,一个敏捷开发过程的早期阶段应该关注设计一个整体的系统体系结构。体系结构的增量开发通常都不会成功。根据变化重构构件通常相对容易。然而,重构体系结构却很昂贵,因为可能需要修改大部分系统构件以使它们能够适应体系结构的变化。

        在实践中,需求工程过程和体系结构设计过程之间存在显著的重叠。理想情况下,系统规格说明不应当包含任何设计信息。然而,这个设想是不现实的;因此,作为需求工程过程的一部分,要提出一个抽象的系统体系结构,其中将一组组的系统功能或特征与大规模的构件或子系统关联起来。

        可以在两个抽象层次上设计软件体系结构,分别称为小体系结构和大体系结构。

        1.小体系结构关注单个程序的体系结构。在这个层次上,我们关注单个的程序是如何被分解为构件的。

        2.大体系结构关注包括其他系统、程序和程序构件的复杂企业系统体系结构。这些企业系统可以分布在不同的计算机上,这些计算机可以由不同的公司拥有和管理。

        软件体系结构很重要,因为它会影响一个系统的性能、健壮性、分布性和可维护性。明确地设计并描述软件体系结构有以下3个好处:

        1.利益相关者交流。体系结构是一种可以作为许多不同利益相关者讨论的焦点的系统的高层表示。

        2.系统分析。在系统开发早期阶段明确系统的体系结构要求进行一些分析。

        3.大范围复用。体系结构模型是关于系统如何组织以及构件如何互操作的一个紧凑、可管理的描述。

        系统体系结构经常使用简单的框图进行非正式的建模。可以使用UML的构造型和构件图进行绘制,其中每一个方框表示一个构件。方框中的方框表示该构件被分解子构件。箭头表示数据和控制信号按照箭头的方向从一个构件传到另一个构件。

        程序的体系结构模型有如下两种不同的使用方式:

        1.作为一种鼓励对系统设计进行讨论的方式。一个系统的高层体系结构视图对于与系统利益相关者进行交流以及项目计划都很有用,利益相关者可以接受这种表示并理解系统的抽象视图。体系结构模型识别出了要开发的关键构件,从而使管理者可以开始分配人员规划这些系统的开发。

        2.作为一种文档化已经设计好的体系结构的方式。目的是产生一个显示系统中不同的构件、它们的接口以及连接关系的完整的系统模型,这样一种详细的体系结构描述使得对系统的理解和演化可以更容易。

        对于很多项目,框图是唯一的体系结构描述。理想情况下,如果要详细描述一个系统的体系结构,最好能使用一种更严格的软件体系结构描述的方法。显然,一个更加详细和完整的描述意味着对体系结构构件之间关系误解的可能性会降低,然而其相应的成本就会大大增加,在实践中无法判断待开发的系统使用严格定义体系结构的方法是否合算。

    §6.1体系结构设计决策

        体系结构设计是一个创造性的过程,在这个过程中你会设计一个满足系统功能性和非功能性需求的系统组织结构。具体的体系结构设计过程取决于所开发的系统的类型、系统架构师的背景和经验,以及系统的特定需求,因此也并不存在公式化、形式化的体系结构设计过程。

        在体系结构设计过程中,系统架构师必须做出一系列深刻影响系统及其开发过程的结构决策:

        1.是否存在一个通用的应用体系结构可以用作所设计的系统的模板?

        2.系统将如何分布到各个硬件核或处理器上?

        3.可以使用什么体系结构模式或风格?

        4.用来组织系统的基本方法是什么?

        5.用什么样的策略来控制系统中的构件的运行?

        6.系统中的结构构件将如何分解为子构件?

        7.什么样的体系结构组织是实现系统的非功能性需求的最佳选择?

        8.系统的体系结构应当如何文档化?

        虽然每个软件系统都是独特的,但是同一个应用领域中的系统经常具有相似的、反映领域的基本概念的体系结构。当设计一个系统体系结构时,你必须确定你的系统和更广阔的应用类型有什么共性,确定来自这些应用体系结构中的知识有多少可以复用。

        对于嵌入式系统以及针对个人电脑和移动设备设计的应用,不需要为系统设计一个分布式体系结构。然而,大多数大型系统是分布式系统,其中系统软件分布在许多不同的计算机上。

        一个软件系统的体系结构可以基于特定的体系结构模式或风格。体系结构模式捕捉了一个在不同的软件系统中使用的体系结构的本质特性。在进行体系结构设计时,应当了解通用的模式、这些模式的适用场合、它们的优势和弱点。

        由于非功能性系统特性和软件体系结构的密切关系,体系结构风格和结构的选择应当根据系统的非功能性需求来确定。

       1.性能。如果性能是一个关键性需求,那么体系结构设计应当将关键性操作局部化到少量的构件中,尽量让这些构件部署在同一台计算机上而不要分布在网络上。

       2.信息安全。如果信息安全是一个关键性需求,那么应该使用一种层次化的体系结构组织,把最关键的资产放在最内层进行保护,并对这些层应用高级的信息安全确认。

       3.安全性。如果安全性是一个关键性需求,那么体系结构设计应该让安全性相关的操作集中在单个构件或少量构件中。

       4.可用性。如果可用性是一个关键性需求,那么体系结构设计应该包含冗余的构件以便在不停止系统的情况下可以更换或更新构件。

       5.可维护性。如果可维护性是一个关键性需求,那么系统体系结构设计应当使用容易改变的细粒度、自包含的构件。

       显然,上面这些体系结构之间存在潜在的冲突,在具体的系统体系结构设计时就必须要进行权衡折中:有时可以通过在系统的不同部分使用不同的体系结构模式或风格来实现权衡。

        评价一个体系结构很难,因为真正的体系结构评判标准是,系统在使用时能够在多大程度上满足它的功能性和非功能性需求。

    §6.2体系结构视图

       此外,体系结构模型也可以用于设计的文档化,这样,体系结构可以作为更加详细的系统设计以及实现的基础。在单个图中表示出与一个系统的体系结构相关的所有信息是不可能的,因为一个图形化模型只能显示一个系统视图或视角。通常来说,需要从多个不同的视图来呈现软件体系结构。

        1.逻辑视图。这个视图将系统中的关键抽象显示为对象或对象类。

        2.进程视图。这个视图显示系统在运行时如何通过相互交互的进程来构成。

        3.开发视图。这个视图显示软件如何面向开发任务进行分解;也就是说,该视图显示了软件如何分解为由单个开发者或开发团队实现的构件。

        4.物理视图。这个视图显示系统硬件以及软件构件如何分布在系统中的处理器上。

        在实践中,一个系统体系结构的概念视图几乎总是在设计过程中开发。这些概念视图用于向利益相关者解释系统体系结构以及告知体系结构设计决策。在设计过程中,其他一些视图也可以在讨论系统的不同方面的时候进行开发,但是一般都不需要从所有的视角出发开发一个完整的描述。

        当使用UML描述一个软件系统的体系结构时,通常都是以一种非正式的方式进行应用的。而另有一些人提出,应使用更加专业化的体系结构描述语言(Architectural Description Language, ADL)来描述系统体系结构。体系结构描述语言的基本元素是构件和连接器,并且包含面向结构良好的体系结构的规则和指南。然而,由于体系结构描述语言是专家语言,领域和应用专家感觉很难理解和使用体系结构描述语言。

        与之对比的是敏捷方法的使用者,他们认为详细的设计文档通常都是没有用的,即开发这种文档是浪费时间。

    §6.3体系结构模式

        将模式作为一种表示、分享、复用软件系统相关知识的思想已经在软件工程中的一系列领域中得到了采用。

        体系结构模式是在20世纪90年代提出的,最初被称为“体系结构风格”。可以将体系结构模式理解为对好的实践的一种风格化、抽象化的描述,这些实践已经在不同的系统和环境中进行了尝试和测试。因此,一个体系结构模式应当描述一种已经在此前的系统中得到成功应用的系统的组织。它应当包含何时适合以及何时不适合使用该模式,还应包含关于该模式的优缺点的详细描述等信息。

    【例】模型—视图—控制器(MVC)模式

    名称 MVC(模型—视图—控制器)
    描述 将呈现和交互从系统数据中分离出来。系统被组织为3个相互交互的逻辑构件。模型(Model)构件管理系统数据以及相关的对这些数据的操作。视图(View)构件定义并管理数据呈现给用户的方式。控制器(Controller)构件管理用户界面(例如按键、鼠标点击等)并将这些交互传递给视图和模型。
    例子 显示了一个使用MVC模式进行组织的基于Web的应用系统的体系结构
    何时使用 当存在多种查看数据以及数据交互的方式时使用。也可在未来关于数据的交互和呈现的需求未知时使用
    优点 允许数据独立于它的呈现方式进行变更,反之亦然。支持以不同的方式呈现同样的数据,在某一呈现方式中进行的修改可以在所有呈现方式中显示
    缺点

    当数据模型和交互比较简单时,可能包含额外的代码以及代码复杂性

    这是该体系结构模式的“型”

        上表和上图所示是模型—视图—控制器的体系结构模式。该模式是许多基于Web的系统中交互管理的基础,并且得到了大多数语言框架的支持。这种风格化的描述包括一个模式名称、一段简要描述、一个图形化模型,以及一个使用了这种模式的系统的例子。(见下图)其中还应当包含关于该模式应该在何种情况下使用以及模式的优缺点的信息。

    这是该体系结构模式的“值”

        6.3.1分层体系结构

        分离和独立性的思想是体系结构设计的基础,因为这可以使变更被局部化。分层体系结构模式是另一种实现分离和独立性的方式。系统功能被组织为多个分离的层次,每个层次只依赖于紧邻的下一层所提供的设施和服务。

        这一分层的方法支持系统的增量开发。一个层次开发好之后,该层次所提供的一些服务可以提供给用户。该体系结构也是可变化和可前移的。如果接口不变,那么一个功能进行了扩展的新层可以在不影响系统的其他部分的情况下取代一个已有的层。而且,当一个层次的接口发生变化或者增加了新的设施时,只有相邻的层次受到影响。由于分层的系统将机器的依赖局部化了,这使提供一个应用系统的多平台实现变得更容易了。只需将与机器有依赖关系的层重新实现,便可以适应不同的操作系统或数据库的设施。

    分层体系结构
    名称 多层体系结构
    描述 将系统组织为多个层次,每个层次与一些相关的功能相联系。每个层次向其上的一层提供服务,因此那些最低层次表示很可能在整个系统中使用的核心服务
    例子 一个数字化学习系统的分层模型支持学校中所有科目的学习
    何时使用 当在已有系统之上构建新的设施时使用;当开发涉及多个团队,每个团队负责一个层次上的功能时使用;当存在多个层次上的信息安全需求时使用
    优点 只要接口保持不变,允许对整个层进行替换。可以在每个层次上提供冗余设施以增加系统的可依赖性
    缺点 在实践中,将各层之间干净地分离经常很难做到,较高层次上的层可能不得不与较低层次上的层直接交互,而不是通过紧邻着的下一层。性能可能是一个问题,因为当一个服务请求在各个层次上进行处理时需要经过多层的解析

        6.3.2知识库体系结构

        知识库模式,则描述了一组相互交互的构件如何共享数据。大多数使用大量数据的系统都是围绕一个共享数据库或知识库组成的。因此,这个模型适合于数据由一个构件生成同时由另一个构件使用的应用。

    知识库模式
    名称 知识库
    描述 一个系统中的所有数据在所有系统构件都能访问的中心知识库中进行管理。构件相互之间并不直接交互,仅通过知识库进行交互
    例子 下图是一个集成开发环境(IDE)的例子,其中构件使用系统设计信息的知识库。每个软件工具生成的信息都会提供给其他工具使用
    何时使用 当系统生成大量需要长时间保存的信息时应当使用这个模式。还可以在数据驱动的系统中使用,这类系统中的知识库中增加新数据时会触发一个动作或工具
    优点 构件可以保持独立,它们不需要知道其他构件的存在;一个构件进行的修改可以被传播到所有构件;所有数据都可以一致地进行管理(例如同时进行备份),因为这些数据都位于一个地方
    缺点 知识库可能存在单点失效问题,因此知识库中的问题会影响整个系统;通过知识库组织所有的通信可能效率不高;将知识库分布到多台计算机上可能比较困难
    面向集成开发环境(IDE)的知识库体系结构

        围绕一个知识库组织工具是一个共享大量数据的有效方法。不需要显式地从一个构件向另一个构件传输数据。然而,构件必须围绕一个达成共识的知识库数据模型运转。这其中不可避免地要对每个工具的特定需要进行权衡,而且如果一个新构件与数据模型不相符,那么就可能很难甚至无法集成了。在实践中,可能很难将知识库分布到多台不同的机器上。虽然有可能实现一个逻辑上的集中知识库的分布式部署,这其中会涉及维护数据的多份拷贝。保证这些拷贝的一致性以及及时更新给系统增加了更多的额外负担。

        6.3.3客户-服务器体系结构

        知识库模式关注系统的静态结构,没有显示系统的运行时组织。【例】客户-服务器模式,描述了一种常用的分布式系统运行时的组织方式。一个遵循客户-服务器模式的系统被组织为一组服务和相关联的服务器,以及访问并使用服务的客户端。该模型的主要构件包括以下这些:

        1.一组向其他构件提供服务的服务器。服务器的例子包括:提供打印服务的打印服务器,提供文件管理服务的文件服务器,提供编程语言编译服务的编译服务器。服务器是软件构件,多个服务器可能运行在同一台计算机上。

        2.一组调用服务器提供的服务的客户端。通常会有一个客户端程序的多个实例并行运行在多台计算机上。

        3.一个允许客户端访问这些服务的网络。客户-服务器系统通常实现为分布式系统,使用互联网协议连接。

    客户-服务器模式
    名称 客户-服务器
    描述 在客户-服务器体系结构中,系统被呈现为一组服务,其中每个服务都由一个独立的服务器提供。客户端是这些服务的用户,通过访问服务器来利用这些服务
    例子 下图是一个组织成客户-服务器系统的电影和视频/DVD库的例子
    何时使用 当一个共享数据库中的数据必须从一系列不同的位置进行访问时使用。因为服务器可以复制,因此也可以在一个系统的负载多变的情况下使用
    优点 这种模型的主要优点是服务器可以分布在网络上。通用的功能(例如一个打印服务)可以向所有客户端开放使用,不需要由所有服务实现
    缺点 每个服务都存在单点失效问题,因此容易受到拒绝服务攻击或服务器失效的影响;性能可能不可预测,因为这取决于网络以及系统;如果服务器属于不同的组织,那么还可能会出现管理问题

        客户-服务器体系结构通常被认为是分布式系统体系结构,但是运行在不同的服务器上的独立服务的逻辑模型可以被实现在单台计算机上。这里的一个重要优势仍然是分离和独立性。服务和服务器可以在不影响系统的其他部分的情况下被修改。

        客户端可能必须知道可用的服务器以及它们所提供的服务的名称。然而,服务器不需要知道客户端的身份或者有多少客户端正在访问它们的服务。客户端通过使用请求-应答协议的远程过程调用访问一个服务器提供的服务,其中客户端向一个服务器发出请求,并且一直等待直到收到来自服务器的应答。

        下图是一个基于客户-服务器模型的系统的例子,这是一个提供电影和照片库的多用户、基于Web的系统。

    一个电影库的客户—服务器体系结构

        客户-服务器模型最重要的优势在于它是一个分布式体系结构。带有很多分布式处理器的网络化系统可以获得有效的使用。很容易增加一个新的服务器并将其与系统的剩余部分相集成,或者在不影响系统其他部分的情况下透明地升级服务器。

        6.3.4管道和过滤器体系结构

        这是一个通用体系结构的模型,其中功能性的变换处理输入并产生输出。数据从一个构件流动到另一个构件,在流经这个序列时进行变换。每个处理步骤被实现为一个变换。输入数据流经这些变换直到被转换为输出。这些变换可以串行或并行执行。每个变换可以一项项地处理数据,也可以在单个批次中一次性处理。

    管道和过滤器模式
    名称 管道和过滤器
    描述 系统中的数据处理通过组织,每个处理构件(过滤器)可以分离开来并执行一种数据转换。数据从一个构件流动(就像在管道中一样)到另一个构件进行处理
    例子 下图是一个用于处理发货单的管道和过滤器系统的例子
    何时使用 在数据处理应用(无论是批处理还是基于事务)中得到了广泛应用,这类应用中输入在多个分离的阶段中进行处理,并最终生成相关的输出
    优点 容易理解并且支持变换的复用;这种工作流风格与许多业务过程的结构相匹配;通过增加变换来进行演化是非常直观的;可以被实现为一个顺序系统或一个并发系统
    缺点 针对数据转换的格式必须在相互通信的多个变换之间达成一致;每个变换必须解析它的输入,并将输出转换成所约定的形式,增加了系统的负担,同时可能意味着无法复用使用不兼容的数据结构的体系结构构件
    一个管道和过滤器体系结构的例子

        【例】一个管道和过滤器体系结构的例子

        管道和过滤器最适合于用户交互很少的批处理系统和嵌入式系统。交互式系统很难使用管道和过滤器模型实现,因为管道和过滤器模型需要处理数据流。虽然简单的文本输入和输出可以用这种方式建模,但是对于图形化的用户界面、更复杂的输入/输出格式以及基于事件的控制策略,很难将这些实现为一种符合管道和过滤器模型的顺序流。

    §6.4应用体系结构

        应用系统的目的是满足一个企业或者一个组织的需要。所有的企业都有很多共性:它们都需要雇人、开发货单、保存账户等。同属一个行业的企业使用通用的行业特定的应用。因此,与通用的企业功能一样,所有的电话公司都需要系统来连接呼叫和计费、管理他们的网络、向客户发出账单。因此,这些企业使用的应用系统同样有很多共性。

        这些共性促使人们去开发描述特定类型软件系统的结构合组织的软件体系结构。应用体系结构封装了一类系统的主要特性。应用体系结构可以在开发系统时重新实现,应用体系结构复用是隐式的。这一点在广泛使用的企业资源规划(Enterprise Resource Planning, ERP)系统以及可配置的成品应用系统中可以看到。这些系统有一个标准的体系结构以及相关的构件。这些构件可以通过配置和适应性调整来创建一个特定的企业应用。

        一个软件设计者可以通过以下这些不同的方式使用应用体系结构模型:

        1.作为体系结构设计过程的起点。如果你不熟悉你正在开发的应用类型,你可以将你的初始设计建立在一个通用的应用体系结构基础上。

        2.作为一个设计检查表。如果你已经为一个应用系统开发了一个体系结构设计,那么你可以将它与通用的应用体系结构相比较,检查你的设计是否与通用体系结构相一致。

        3.作为组织开发团队工作的一种方式。应用体系结构识别出了系统体系结构中稳定的结构特征,而且这些结构单元很多时候可以并行开发。

        4.作为评价构件复用的一种方式。如果你有一些可复用的构件,可以将它们与通用结构相比较,以确定应用体系结构中是否有与之相当的构件。

        5.作为谈论应用时的一种词汇表。如果你正在讨论一个特定的应用或者试图比较不同的应用,那么你可以使用通用体系结构中所识别的概念来讨论这些应用。

        存在许多类型的应用系统,有时候它们可能看上去很不一样。然而,表面上不一样的应用可能有很多共性,因此可以共享一个抽象应用体系结构。

    【例】

        1.事务处理应用。事务处理应用是以数据库为中心的应用,处理用户的信息请求并且更新数据库中的信息。

        2.语言处理系统。语言处理系统中用户的意图用形式化语言来表达。

        6.4.1事务处理系统

        事务处理系统被设计用于处理用户获取数据库中信息的请求或者更新数据库的请求。从技术上看,一个数据库事务包含一个操作序列并且该序列作为整体处理。一个事物中的所有操作必须在数据库修改被持久化之前完成。这保证了一个事务中失败的操作不会导致数据库中的不一致。

        从用户的角度看,一个事务是任何满足一个目标的内聚的操作序列。如果用户事务不需要对数据库进行修改,那么不一定要将其作为一个技术上的数据库事务。

        事务处理系统通常是交互式系统,其中发出的异步的服务请求。下图描述了事务处理应用的概念体系结构。首先,用户通过一个输入/输出处理构件向系统发出请求。该请求由一些应用特定的逻辑进行处理。一个事务被创建并传递给事务管理器(通常嵌入在数据库管理系统中)。事务管理器在保证事务被正确完成后,再通知应用处理已完成。

    事务处理应用的结构

        可将事务处理系统组织为含有负责输入、处理、输出的系统构件的“管道和过滤器”体系结构。

        6.4.2信息系统

        所有包含与一个共享数据库交互的系统都可以认为是基于事务的信息系统。一个信息系统允许对一个很大的信息库的受控访问。信息系统几乎都是基于Web的系统,其中用户界面在一个Web浏览器中实现。

        下图展示了一个非常通用的信息系统模型。系统使用层次化的方法进行建模,其中最顶层支持用户界面,最底层是系统数据库。用户通信层处理来自用户界面的所有输入和输出,信息检索包括特定应用的数据库访问和更新逻辑。这个模型中的各个层可以直接映射到一个分布式基于互联网的系统中的服务器上。

    分层的信息系统体系结构

        可以通过识别支持用户通信以及信息检索和访问的构件,向这个模型的每一层都增加了一些细节。信息和资源管理系统有时候也是事务处理系统。这些系统中的服务器通常反映了上图所示的4层通用模型。这些系统经常实现为带有多层客户端/服务器体系结构的分布式系统。

        1.Web服务器负责所有的用户通信,并带有使用Web浏览器实现的用户界面。

        2.应用服务器负责实现特定应用逻辑以及信息存储和检索请求。

        3.数据库服务器将信息移动到数据库,从数据库中获取数据,同时处理事务管理

        使用多个服务器可以实现高吞吐量,使每分钟处理完成千上万的事务成为可能。随着请求量的增长,每个层次都可以增加服务器以应对所需要的额外处理能力。

        6.4.3语言处理系统

        语言处理系统将一种语言翻译为该语言的另一种表示方式,对于编程语言还可以执行所产生的代码。编译器将一种编程语言翻译为机器代码。其他语言处理系统可以将XML数据描述为数据库查询命令或者另一种XML表示形式。自然语言处理系统可以将一种自然语言翻译为另一种语言。

        一个面向编程语言的语言处理系统体系结构如下图所示。源语言指令定义了要执行的程序,一个翻译器将这些转换为面向抽象机器的指令。这些指令接着被另一个构件解析,该构件取出执行指令并且使用来自环境的数据执行这些指令。该过程的输出是解析输入数据中的指令的结果。

        对于许多编译器,解析器是处理机器指令的系统硬件,而抽象机器是真实的处理器。然而,对于动态类型语言,解析器是一个软件构件。

        作为更通用的编程环境的一部分的编程语言编译器具有一个通用体系结构,其中包括以下这些构件:

        1.一个词法分析器,读入输入语言标记符号,并将其砖混为一种内部形式。

        2.一个符号表,包含与所翻译的文本中使用的实体(变量、类名、对象名等)名称相关的信息。

        3.一个语法分析器,检查所翻译的语言的语法。它使用该语言所定义的语法,并且构造一个语法树。

        4.语法树,这是所编译的程序的一种内部表示结构。

        5.语义分析器,使用来自语法树的信息以及符号表来检查输入语言文本的语义正确性。

        6.代码生成器,遍历语法树并且生成抽象的机器代码。

        还可以包含其他对语法树进行分析和转换以提高效率并从所生成的机器代码中消除冗余的构件。在其他类型的语言处理系统中,还有一些附加的构件,例如字典。系统的输出是对输入文本的翻译。

        【例】下图描述了一个语言处理系统如何作为一个集成的编程支持工具集的一部分。

        其他体系结构模式也可以用于语言处理系统。编译器的实现可以将知识库模型和管道过滤器模型结合起来使用。在一个编译器体系结构中,符号表是一个共享数据的知识库。词法、语法和语义分析阶段以顺序化的方式进行组织,并且通过共享的符号表进行通信。

        这一语言编译的管道和过滤模型在批处理环境中很有效,其中程序的编译和执行都不需要与用户交互。然而,当一个编辑器与其他语言处理工具相集成时,该模型就没那么有效了。在这种情况下,更好的办法是围绕一个知识库来组织系统。

    展开全文
  • 软件工程---6.体系结构设计

    千次阅读 2019-12-11 09:16:50
    体系结构模型是什么? 体系结构模型,该模型描述系统如何被组织为一组相互通信的构件 体系结构分类 **小体系结构关注单个程序的体系结构。**在这个层次上,我们关注单个的程序是如何补分解为构件的。 大体系结构...

    体系结构模型是什么?

    体系结构模型,该模型描述系统如何被组织为一组相互通信的构件

    体系结构分类

    1. 小体系结构关注单个程序的体系结构。在这个层次上,我们关注单个的程序是如何补分解为构件的。
    2. 大体系结构关注包括其他系统、程序和程序构件的复杂企业系统体系结构。

    非功能性需求影响最大

    对体系结构有显著影响的需求”的研究中确认了这一点, 他们发现非功能性需求对于系统体系结构的影响最大

    体系结构视图

    在这里插入图片描述

    1. 逻辑视图。这个视图将系统中的关键抽象显示为对象或对象类。应该可以将系统需求与这个逻辑视图中的实体联系起来。
    2. 进程视图。这个视图显示系统在运行时如何通过相互交互的进程来构成。该视图对于做出关于非功能性系统特性(例如性能、可用性)的判断很有用。
    3. 开发视图。这个视图显示软件如何面向开发任务进行分解;也就是说,该视图显示了软件如何分解为由单个开发者或开发团队实现的构件。该视图对于软件开发管理者和程序员都很有用。
    4. 物理视图。这个视图显示系统硬件以及软件构件如何分布在系统中的处理器上。该视图对于规划系统部署方案的系统工程师很有用
    5. 概念视图。Hofmeister等人( Hofmeister,Nord, and Soni 2000 )提出使用相似的视图,但向其中增加了一个概念视图。这个视图是一种系统的抽象视图,可以作为将高层需求分解为更详细的规格说明的基础,帮助工程师确定可以复用的构件,以及表示一个产品线(在第15章中介绍)而不是单个系统。图6-1描述了一个打包机器人的体系结构,可以作为一个概念系统视图的例子。

    体系结构模型

    在这里插入图片描述

    分层体系结构

    分离和独立性的思想是体系结构设计的基础,因为这可以使变更被局部化。
    在这里插入图片描述

    1. 层是指一组提供相关服务的子系统,多半是通过使用其它层的服务来实现本层的功能。
    2. 封闭体系结构:每一层只能访问其相邻的下一层(如OSI 7层模型)
    3. 开放体系结构:每一层可以访问比其低的层次(JavaSwing)

    知识库体系结构

    在这里插入图片描述

    客户—服务器体系结构

    在这里插入图片描述

    管道—过滤器体系结构

    在这里插入图片描述

    子系统分解

    分解原则

    1. 耦合与内聚
    2. 封闭性与开放性

    耦合

    耦合:两个子系统之间的依赖程度,如果是松耦合关系,那么对一个子系统进行改变则对另外一个子系统影响不大

    内聚

    内聚

    1. 描述子系统内部各实现类之间的依赖程度,如果一个子系统中含有许多相互关联的类并且执行类似的操作,那么就是高内聚,反之就是低内聚。
    2. 我们总是希望系统是高内聚,低耦合。

    封闭性

    如果一个子系统能独立的被其他子系统所使用,我们说这个子系统具有封闭性

    开放性

    如果一个子系统对外提供的服务能够被方便扩充,我们说这个子系统具有开放性

    展开全文
  • 软件体系结构设计-1

    千次阅读 2019-02-19 17:55:16
    软件体系结构设计-1声明引言教材成绩设计工具案例 声明 《软件体系结构设计》课程笔记 授课老师 周立新 引言 教材 设计模式 黑皮书 **软件构架实践 第三版 ** 参考 软件构架编档 Paul Clelments 软件体系结构 M....

    软件体系结构与设计-1

    声明

    《软件体系结构与设计》课程笔记
    授课老师 周立新

    引言

    教材

    设计模式 黑皮书
    **软件构架实践 第三版 **
    参考
    软件构架编档 Paul Clelments
    软件体系结构 M. Shaw and David Garlon
    面向模式的软件体系结构 卷1
    BS架构用什么改造的?

    成绩

    分组作业(1个)50 设计模式笔试(6次课)20 期末笔试30

    设计工具

    Rational Software Architect
    AcmeStudio
    下次课装好

    案例

    大型项目开发需要软件架构能力

    展开全文
  • 软件工程知识体系结构

    千次阅读 2008-10-02 17:17:00
    最近看了csdn上的《四十年软件工程故事》一文,受益匪浅,觉得有必要梳理一下软件工程的知识体系结构,以便更有针对性的学习、工作。 目前认识到软件工程包括如下内容:过程:规范、管理开发流程。瀑布(Waterfall...
  • 软件工程】认识软件体系结构

    千次阅读 2013-06-17 22:35:54
     软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组组合连接起来。这一定义注重...
  • 软件设计体系结构

    千次阅读 2017-04-06 10:44:04
    学习归纳了关于软件设计体系结构方面的知识,设计模式由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人组(Gang of Four,Gof)在20世纪90年代从建筑设计领域引入到软件设计领域,他们写出了该领域...
  • 软件体系结构基础

    千次阅读 2020-12-27 12:57:33
    体系结构的模式选择设计模式做阐述,风格选择典型的三种体系结构风格做阐述,框架选择MVC、J2EE、PCMEF与PCBMER框架做阐述,同时也对特定领域的软件体系结构的类属模型、参考模型,分布式系统结构的多处理机结构、...
  • 软件体系结构设计实验一

    千次阅读 2017-09-15 10:30:00
    实验报告 课程软件体系结构设计 实验名称 软件设计的网络环境第 页 专业 软件工程 班级1班 学号130242014017姓名 ...1.复习软件工程的重要概念,熟悉软件体系结构与软件设计技术的基础概念与内容。 2.通过Inter...
  • 软件体系结构设计心得体会

    千次阅读 2016-06-04 23:53:00
    当我认为有些问题可以通过编程解决的时候,那就不能只放眼于具体的代码实现阶段,而是需要用一个类似于软件构架师的思维和角度去仔细思考和斟酌如何才能设计出一个体系结构相对合理,存储方式比较简洁的产品项目。...
  • 软件体系结构

    千次阅读 2014-10-30 20:28:50
    软件体系结构笔记 L1.pdf 课程简介源起... 现状系统分析员遇到的困境解决之道 基于软件体系结构的开发 示意图软件体系结构的生命周期 体系结构的非形式化描述 通常使用自然语言描述概念和...
  • 第四章 软件结构设计 软件设计从概念上分为结构设计和详细设计两个阶段。 结构设计又称总体设计,主要任务是制订系统实施方案和设计规范并合理确定软件系统的整体模块结构及接口关系。 详细设计又称模块设计,主要...
  • 开始复习《软件体系结构》,虽然为了考试要背诵的内容比较多,但是从软件工程到软件测试,我发现这样的课程,总可以增强自己的理解能力,更重要的是对于“软件工程”的认识。天气炎热,能静下心来复习也是一件美好的...
  • 软件体系结构期末考试总结

    千次阅读 多人点赞 2019-12-30 23:19:35
    对了我们的教材是《软件工程体系结构原理、方法与实践(第2版)》张友生 编著的 第一章 1. 软件危机的表现: 软件成本日益增长。开发进度难以控制。软件质量差。软件维护困难 2. 软件危机的原因: 用户需求不明确。...
  • 软件体系结构风格介绍

    千次阅读 2020-02-18 12:46:38
    文章目录软件体系结构风格介绍(一)管道和过滤器风格(二)数据抽象与面向对象风格(三)基于事件的隐式调用风格(四)层次系统风格(五)仓库风格(六)C2风格(七)基于层次消息总线的架构风格 软件体系结构风格...
  • 软件体系结构描述

    千次阅读 2017-09-21 10:34:10
    软件体系结构描述语言 2、软件体系结构描述框架标准 (1)IEEE P1471 (2)Rational3、ADL与其他语言的比较 构造能力:ADL能够使用较小的独立体系结构元素来建造大型软件系统; 抽象能力:ADL使得软件体系结构...
  • 软件体系结构课程

    千次阅读 2012-11-20 17:00:52
    1.4软件体系结构设计的基本原则   1.1 软件体系结构的基本概念 软件体系结构是软件工程的重要研究领域,软件体系结构并没有统一的定义。 90年代开始,很多专家学者对软件体系结构引起广泛关注,综合软件体系...
  • 面向对象体系结构风格的KWIC关键词索引系统 java实现
  • 软件体系结构复习指南

    千次阅读 2018-01-17 21:09:04
    软件工程定义集合 二软件工程常识集合 三软件工程理念集合 四软件工程定律集合 五软件工程法则集合 六软件工程最佳实践集合 七软件工程英文知识点索引 前言 作为一个热心学长(好的其实是要凑这个月的4篇文章...
  • 软件体系结构建模

    千次阅读 2017-09-19 08:48:06
    软件体系结构建模的种类: ◎ 结构模型 ◎ 框架模型 ◎ 动态模型 ◎ 过程模型 ◎ 功能模型 4+1模型 : 逻辑视图 进程视图 物理视图 开发视图 场景视图 逻辑视图和开发视图描述系统的静态结构,而进程视图和...
  • 软件工程-系统结构设计

    千次阅读 2019-11-04 23:00:52
    分为变换分析设计和事务分析设计。...实际问题也许不完全属于变换型或事务型的,很可能是两者的结合,因此我们要学会变换分析技术和事务分析技术联合使用,从而导出符合系统逻辑模型的系统初始结构图。 ...
  • 软件系统的体系结构经历了主机终端模式、客户机/服务器(C/S)模式、浏览器/服务器(B/S)和多层分布式结构。  主机/终端结构:  早期计算机系统多是单机系统,多个用户是通过联网终端来访问的,没有网络的概念...
  • 软件体系结构复习

    千次阅读 2017-06-27 14:54:07
    第一章 软件危机的表现: 1、软件成本日益增长 ...人们面临的不光是技术问题,更重要的是管理问题,引入软件工程,标准化、流程化。 要提高软件开发效率,提高软件产品质量,必须采用工程化的开发方法与
  • 动态软件体系结构

    千次阅读 2017-10-31 21:46:13
    软件体系结构的动态性 交互式动态性 结构化动态性 体系结构动态性 动态软件体系结构的研究 模拟和描述体系结构动态更新 体系结构动态更新的执行 基于构件的动态系统结构模型 – 概述 基于构件的动态...
  • 软件体系结构的认识

    千次阅读 2014-06-10 16:26:51
    一 . 软件体系结构(架构)  软件体系结构的定义 ...比如, ANSI/IEEE 610.12-1990软件工程标准词汇对于体系结构定义是“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,105
精华内容 36,442
关键字:

软件工程体系结构设计