当前课程知识点:软件工程 >  第11章 软件系统设计 >  11.1 软件体系结构概念 >  讲授视频

返回《软件工程》慕课在线视频课程列表

讲授视频在线视频

下一节:讲授视频

返回《软件工程》慕课在线视频列表

讲授视频课程教案、知识点、字幕

随着软件技术

和应用的不断发展

软件系统的规模越来越大

其复杂度也越来越高

在这种情况下

代码级别的软件复用

已经远远不能满足

大型软件开发的要求

面对日益复杂的软件系统的

设计与构造

软件工程师

需要考虑的关键问题是

对整个系统的结构和行为

进行抽象

一方面是寻求更好的方法

使系统的整体设计更容易理解

另一方面

是寻求构造大型复杂软件

系统的有效方法

实现系统级的复用

我们在前面

做过一个性能分析的实验

这个实验要求编写一个程序

用于统计一个文本文件中

每个英文单词出现的频率

并输出词频最高的100个单词

大家在编写这个程序的时候

重点会考虑哪些部分的设计

对于这个程序的设计

我们主要是考虑

选择合适的分词方法和查询算法

建立可以实现

快速查找的数据结构

还会涉及到

外部存储文件或数据库的构造

在代码构造时

可以调用已有的Python代码库

也就是说

编写小规模的程序

主要关注的是算法的选择

数据结构的设计

和数据库的构造

如果是开发一个

Web信息检索系统

又会关注哪些方面

这个系统要对发布在

Web上的信息资源

进行搜集 整理和组织

形成一个信息资源索引库

并通过检索界面

把最符合用户要求的网站

或者是网页提供给用户

显然

这个系统

比前面的词频统计程序

要复杂得多

无法简单地用数据结构和算法

来进行描述和设计

我们现在对整个系统的结构

和行为进行抽象

一般网页信息检索的过程

大概是这样

系统先要从网上抓取网页

然后对网页信息进行处理

建立索引数据库

在用户进行查询的时候

根据输入的查询关键字

在索引数据库中进行搜索

并对搜索结果进行处理和排序

最后返回一系列

与用户查询相关的网页信息

这样整个系统

就可以抽象成三个部分

网页搜集 预处理

和检索服务

对应上面的过程

整个系统

可以划分成三个功能模块

信息采集模块

实现网页搜集功能

标引处理模块

实现预处理功能

信息检索模块

实现检索服务的功能

除了模块分解之外

我们还要考虑

使用什么策略

来实现非功能需求的目标

比如说

可以采用分布式的文件系统

和计算框架

提高大规模网页搜集

和检索的效率等等

从上面的事例可以看出

对于大规模的复杂系统来说

对系统的全局结构设计和规划

变得比算法的选择

和数据结构的设计

明显要重要得多

在工程领域

体系结构设计

被广泛地应用于

处理复杂系统的设计问题

比如说大型的客机

在整体上

被划分成机翼 机身 尾翼

起落装置和动力装置等

不同的组成部分

它的总体结构

也要根据技术的要求

和使用环境

来确定飞机的外形 总体布局

发动机选型等

机体的设计

还要满足强度 刚度 疲劳

损伤容限

一些安全性的要求

体系结构这个词

起源于建筑学

它是从系统的宏观层面上

描绘出整个建筑的结构

把一个复杂的建筑体

拆分成一些基本的建筑模块

并通过这些基本的模块

进行有机地组合

形成整个建筑

建筑的体系结构设计

要满足坚固 适用

赏心悦目的要求

具体包括以下方面

第一

有哪些基本的建筑单元

比如说

砖 瓦 梁 柱 屋顶

外墙 门窗等

第二

如何把这些基本单元进行组合

形成整体的建筑

第三

建筑单元怎么搭配才比较合理

比如说外形是否美观

符合承重和受力的要求等

第四

不同类型的建筑

有什么典型的结构

比如说

欧洲古典风格

和中国园林风格

就是两种不同的建筑类型

第五

如何快速

节省地进行建造和施工

第六

对于建造完成的建筑

怎么样才能适当地修改

第七

怎么才能保证单元的修改

不会影响整个建筑的质量

软件体系结构

已经在软件工程领域

获得了广泛应用

它包括构成系统的

设计元素的描述

设计元素之间的交互

设计元素的组合模式

以及在这些模式中的约束

软件体系结构

主要包含五个方面的内容

第一是构件

它代表着一组基本的构成要素

第二是连接件

也就是

这些要素之间的连接关系

第三是约束

它是作用于这些要素

或者连接关系上的一些限制条件

第四是质量

它是系统的质量属性

像性能 可扩展性 可修改性

可重用性 安全性等

第五是物理分布

它代表着这些要素连接之后

形成的拓扑结构

描述了软件到硬件的影射

简单地说

软件体系结构由构件+连接件

+约束组成

它提供了

在更宏观的结构层次上

来理解系统层面问题的一个骨架

它主要关注于

把一个复杂系统

从整体到部分的

一个最高层次的划分

对于设计模块的一个功能定义

以及如何把这些模块

组合成为一个完整的系统

系统的分解

要满足设计目标的要求

反映开发中

具有重要影响的设计决策

从而保证系统的质量要求

在软件体系结构的概念中

构件是具有某种功能的

可复用的软件结构单元

它们表示系统中

主要的计算元素和数据存储

任何在系统运行中

承担一定功能

或者发挥一定作用的软件体

都可以看作是构件

像函数 模块 对象 类

文件 相关功能的集合等

构件作为一个封装的实体

只能通过它的接口

和外部环境进行交互

其内部的结构是被隐藏起来的

构件的功能

以服务的形式体现出来

并通过接口向外发布

进而产生与其他构件之间的关联

连接是构件之间

建立和维护行为关联

和信息传递的一个途径

它需要两个方面的支持

一个是连接发生和维持的机制

另一个是连接的协议

一般来说

基本的连接机制

包括过程调用 中断 I/O

事件 进程 线程 共享

同步 并发 消息 远程调用

动态连接 API等

协议是连接的规约

对于过程调用来说

可以是参数的个数和类型

参数排列次序等

对于消息传送来说

可以是消息的格式

除了连接实现的难易程度之外

同步或者异步

是影响连接实现的复杂因素之一

连接件表示构件之间的交互

并实现构件之间的连接

比如说

管道 过程调用 事件广播

客户机-服务器

数据库连接等

都是属于连接件

连接件也可以看作

是一类特殊的构件

它和一般的构件的区别在于

一般构件是软件功能设计

和实现的承载体

而连接件是负责完成构件之间

信息交换和行为联系的专用构件

好的开始是成功的一半

初期的总体设计

是决定软件产品成败的

一个关键因素

往往错误的设计决策

会造成灾难性的后果

在软件设计过程中

我们可以对一些

经过实现证明的体系结构

进行复用

从而提高设计的效率和可靠性

降低设计复杂度

另外

我们也可以把一些公共部分

抽象提取出来

形成公共类和工具类

为大规模开发提供基础和规范

体系结构的设计

要具备灵活性

在产品开发的演化过程中

可以很方便地增加新的功能

更好的适应用户需求的变化

由于体系结构

构件了一个相对小的简单的模型

这样就把复杂的问题简单化

使系统更加易于理解和实现

软件体系结构

突出体现了早期的设计决策

展现出系统满足需求的能力

软件系统规模

在迅速增大的同时

软件开发方法

也经历了一系列变化

软件体系结构

也从最初的一个模糊概念

发展成一个日趋成熟的技术

从20世纪70年代开始

出现了面向过程的开发方法

系统被划分成不同的子程序

子程序之间的调用关系

就构成了系统的结构

软件结构

成为开发的一个明确概念

到了80年代

面向对象方法逐渐兴起和成熟

系统被划分成不同的对象

并采用统一建模语言

来描述系统的结构

90年代开始

软件开发强调构件化技术

和体系结构技术

体系结构也成为软件工程领域的

一个研究热点

出现了体系结构风格 框架

和设计模式这样一些概念

2000年之后

面向服务的体系结构

成为面向对象模型的替代模型

它具备分布式 跨平台

互操作和松散耦合等

这样一些特点

致力于解决企业信息化过程中

不断变化的需求

和异构环境集成这样一些难题

在这个发展过程中

软件系统的基本模块

它的粒度越来越大

系统的结构越来越趋向分布

和开放

所解决的问题

也从技术本身

转向商务的过程

下面我们简单说明一下

体系结构风格 设计模式

和框架的概念

以及它们的区别

体系结构风格

描述了某一个特定应用领域中

系统组织的惯用模式

它反映了领域中

众多系统所共有的结构

和语义特性

比如说MVC就是一种

常见的体系结构风格

设计模式

是描述了软件系统设计过程中

常见问题的一些解决方案

一般是从大量的成功实践中

总结出来的

而且被广泛公认的一些实践

和知识

观察者模式

是一种常用的设计模式

它主要用于解决

事件处理的问题

软件框架是由开发人员定制的

应用系统的骨架

它是整个

或者部分系统的可重用的设计

一般由一组抽象的构件

和构件实例之间的交互方式组成

像Django就是一个

开放源代码的外部应用框架

是由python写成的

包括面向对象的映射器

基于正则表达式的URL分发器

视图系统和模板系统

这样一些核心的构件

关于框架和体系结构

体系结构是一种设计规约

而框架是一种具体实现

只不过它实现的

是应用领域的共性部分

是领域中最终应用的模板

体系结构的目的

是指导软件系统的开发

而框架的目的是设计的复用

确定了框架之后

软件体系结构也随之确定

对于同一种软件体系结构

比如说Web开发中的MVC

可以通过多种框架来实现

像前端有ANGULAR

BACKBONE

后端有python的django等框架

对于框架和设计模式而言

框架给出的

是整个应用的体系结构

而设计模式给出的

是单一设计问题的解决方案

比如说一个网络游戏

可以基于网易的Pomelo

框架开发

这是一个基于Node.js的高性能

分布式游戏服务器框架

在实现某个动画功能时

可能会使用观察者设计模式

来实现自动化的通知更新

从这个例子可以看出

设计模式的目的

是改善代码结构

提高程序的结构质量

框架强调的是设计的重用性

和系统的可扩展性

它的目的

是缩短开发周期

提高开发质量

我们在这一节课

介绍了软件体系结构的概念

作用和发展历史

并且解释了体系结构风格

设计模式和框架

这样几个常见术语

今天的课就讲到这里

谢谢大家

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲授视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。