【新版系统架构】系统架构设计师教程全篇知识点提炼

第一章-绪论

架构的定义:

1、架构体现在组件中的一个系统的基本组织、彼此的关系和环境的关系及指导它的设计和发展的原则
2、系统是组织起来完成某一特定功能或一组功能的组件集
3、环境或者上下文决定了对这个系统的开发、运作、政策以及会对系统造成其他影响的环境和设置
4、任务是由一个或多个利益相关者通过系统达到一些目标的一个用途或操作

架构设计的作用:

1、解决相对复杂的需求分析问题
2、解决非功能属性在系统占据重要位置的设计问题
3、解决生命周期长、扩展性需求高的系统整体结构问题
4、解决系统基于组件需要的集成问题
5、解决业务流程再造难的问题

典型架构分类

1、分层架构(Layered Architecture):最常见的软件架构、事实上的标准架构,最常见分层:表现层(Presentation Layer)、业务层(Business Layer)、持久层(Persistence Layer)、数据库(Database Layer)
2、事件驱动架构:通过事件进行通信的软件架构,分成4个部分:事件队列,分发器、事件通道、事件处理器
3、微核架构:又称为插件架构,指软件的内核相对较小,主要功能和业务逻辑都通过插件实现
4、微服务架构:是服务导向架构,每个服务是一个独立的部署单元,这些单元都是分布式的,互相解耦,通过远程通行协议联系,分成三种模式:RESTful API模式、RESTful 应用模式、集中消息模式
5、云架构:主要解决扩展性和并发的问题,最容易扩展的架构,分成两部分:处理单元、虚拟中间件

架构常用建模方法

根据建模侧重点不同,可以讲软件架构模型分成:结构模型、框架模型、动态模型、过程模型

架构设计师应具备的专业素质

1、掌握业务领域的知识
2、掌握技术知识
3、掌握设计技能
4、具备编程技能
5、具备沟通能力
6、具备决策能力
7、知道组织策略
8、应是谈判专家

架构设计师的知识结构

1、战略规划能力
2、业务流程建模能力
3、信息数据架构能力
4、技术架构设计和实现能力
5、应用系统架构的解决和实现能力
6、基础IT知识及基础设施、资源调配的能力
7、信息安全技术支持与管理保障能力
8、IT审计、治理与基本需求的分析和获取能力
9、面向软件系统可靠性与系统生命周期的质量保障服务能力
10、对新技术与新概念的理解、掌握和分析能力

如何衡量一名优秀的架构设计师

1、作为一名技术领导者
2、作为开发人员
3、作为系统综合者
4、具备企业级思维
5、具备战略技术专家的权衡思维与战术思维
6、具备良好的沟通能力

第二章-计算机系统基础知识

计算机硬件

1、处理器:CISC(复杂指令集)、RISC(精简指令集)
2、存储器:按照与处理器的物理距离:片上缓存、片外缓存、主存、外存
3、总线:按照总线在计算机中的位置划分:内总线、系统总线、外部总线,也有并行总线、串行总线
4、接口:指同一计算机不同功能层之间的通信规则
5、外部设备:也称为外围设备,常见的包括:所有的输入输出设备、部分存储设备

计算机软件

通常分为:系统软件和应用软件

操作系统

操作系统的特征:并发性、共享性、虚拟性、不确定性
操作系统的分类:批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统、微型计算机操作系统、嵌入式操作系统

数据库

数据库的分类:按照存储体系分,关系型数据库、键值数据库、列存储数据库、文档数据库、搜索引擎数据库

大型数据库管理系统的特点
1、基于网络环境的数据库管理系统。可以用于C/S结构的数据库应用系统,也可以用于B/S结构的数据库应用系统
2、支持大规模的应用。
3、提供的自动锁功能使得并发用户可以安全而高效的访问数据
4、可以保证系统的高度安全性
5、提供方便而灵活的数据备份和恢复方法及设备镜像功能,还可以利用操作系统提供容错功能,确保设计良好的应用中的数据在发生意外的情况下可以最大限度地被恢复
6、提供多种维护数据完整性的手段
7、提供了方便易用的分布式处理功能

文件系统

文件的类型:
1、按文件的性质和用途分类:系统文件、库文件、和用户文件
2、按信息保存期限分类:临时文件、档案文件和永久文件
3、按文件的保护方式分类:只读文件、读/写文件、可执行文件和不保护文件
4、UNIX系统将文件分为普通文件、目录文件和设备文件(特殊文件)

常用的文件类型:FAT、VFAT、NTFS、Ext2、HPFS

文件的逻辑结构:
1、有结构的记录式文件,由一个以上的记录构成的文件
2、无结构的流式文件,由一串顺序字符流构成的文件

文件的物理结构:
1、连续结构,也叫顺序结构
2、链接结构
3、索引结构
4、多个物理块的索引表

网络协议

常用的协议:LAN、WAN、无线网协议和移动网协议,互联网使用TCP/IP协议簇

中间件

中间件分类:
1、通信处理(消息)中间件
2、事务处理(交易)中间件
3、数据存取管理中间件
4、Web服务器中间件
5、安全中间件
6、跨平台和架构的中间件
7、专用平台中间件

软件构件

构件又称为组件,是一个自包容、可复用的程序集。
1、软件构件的组装模型
2、商用构件标准规范:CORBA、J2EE、DNA 2000

应用软件

1、通用软件
2、专用软件

嵌入式系统及软件

嵌入式系统的组成:嵌入式处理器、相关支撑硬件、嵌入式操作系统、支撑软件、应用软件组成

嵌入式系统的特点:专用性强、技术融合、软硬一体软件为主、比通用计算机资源少、程序代码固化在非易失存储器中、需专门开发工具和环境、体积小价格低工艺先进等、对安全性和可靠性的要求高

嵌入式系统分类:实时系统、安全悠关系统

嵌入式系统的最大特点:系统的运行和开发在不同环境中进行

从现代嵌入式系统分:硬件层、抽象层、操作系统层、中间件层、应用层

嵌入式软件的主要特点:可裁剪性、可配置性、强实时性、安全性、可靠性、高确定性

计算机网络

计算机网络的功能:数据通信、资源共享、管理集中化、实现分布式处理、负荷均衡

网络有关指标:
1、性能指标(速率、带宽、吞吐量、时延、往返时间、利用率)
2、非性能指标(费用、质量、标准化、可靠性、可扩展性、可升级性、易管理性、可维护性)

信道容量:信道的最大传输速率

C = B ∗ log ⁡ 2 ( 1 + S N ) C=B*\log_2(1+\dfrac{S}{N}) C=Blog2(1+NS)
C 代表信道容量,单位是b/s
B代表信号带宽,单位是Hz
S代表信号平均功率,单位是W
N代表噪声平均功率,单位是W
S/N代表信噪比,单位是dB(分贝)
提升信道容量可以使用比较大的带宽,降低信噪比;也可以使用比较小的带宽,升高信噪比

发信机进行的信号处理包括信源编码、信道编码、交织、脉冲成形和调制
收信机进行的信号处理包括解调、采样判决、去交织、信道翻译码、信源译码
1、信源编码:将模拟信号进行模数转换,再进行压缩编码(去除冗余信息),最后形成数字信号
2、信道编码:信道编码通过增加冗余信息以便在接收端进行检错和纠错,解决信道、噪声和干扰导致的误码问题,一般只能纠正零星的错误,对于连续的误码无能为力
3、交织:为了解决连续误码的问题
4、脉冲成形:为了减小带宽需求,将发送数据转换成合适的波形
5、调制:将信息承载到满足信号要求的高频载波信号的过程

复用技术:指在一条信道上同时传输多路数据的技术
多址技术:指在一条线上同时传输多个用户数据的技术

5G通信:
1、基于OFDM优化的波形和多址接入
2、实现可扩展的OFDM间隔参数配置
3、OFDM加窗提高多路传输效率
4、灵活框架设计
5、大规模MIMO
6、毫米波
7、频谱共享
8、先进的信道编码设计

网络按照网络的覆盖区域和通信介质等特征来分:局域网(LAN)、无线局域网(WLAN)、城域网(MAN)、广域网(WAN)和移动通信网

局域网:
1、网络拓扑(星状结构、树状结构、总线结构、环形结构、网状结构)
2、以太网技术(以太网帧结构、最小帧长、最大传输距离、流量控制)

无线局域网:
1、WLAN标准(802.11n新标准,可达200Mb/s以上)
2、WLAN拓扑结构(点对点型、HUB型、完全分布型)

广域网:
1、广域网相关技术(同步光网络、数字数据网、帧中继、异步传输技术)
2、广域网特点(主要提供面向数据通信的服务、覆盖范围广、通信距离远、没有固定的拓扑结构、由电信部门或公司组件,有偿提供)
3、广域网分类(公共传输网络、专用传输网络、无线传输网络)

城域网:通常分为,核心层、汇聚层、接入层

网络设备:集线器、中继器、网桥、交换机、路由器、防火墙等

OSI网络体系结构(从下往上):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

在这里插入图片描述
交换机功能:
1、集线功能,提供大量可供线缆连接的端口达到部署星状拓扑网络的目的
2、中继功能,在转发帧时重新产生不失真的电信号
3、桥接功能,在内置的端口上使用相同的转发和过滤逻辑
4、隔离冲突域功能,将部署好的局域网分为多个冲突域,而每个冲突域都有自己独立的带宽,以提高交换机整体带宽利用效率

路由协议:内部网关协议(IGP)和外部网关协议(EGP)

网络工程:网络建设工程可分为网络规划、网络设计、网络实施三个环节

计算机语言

计算机语言主要由一套指令组成,而这种指令一般包括表达式、流程控制和集合三大部分内容。
表达式包含变量、常量、字面量和运算符。
流程控制包括分支、循环、函数和异常。
集合包含字符串、数组、散列表等数据结构

计算机语言的分类
1、机器语言(一种二进制代码,一条指令包含:操作码、操作数的地址、操作结果的存储地址、下条指令的地址)
2、汇编语言(有3种语句:指令语句、伪指令语句、宏指令语句)
3、高级语言(C、C++、Java)
4、建模语言(UML-UML提供了13种图:类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、部署图、组合结构图、包图、交互概览图、计时图),(5种视图:用例视图、逻辑视图、进程视图、实现视图、部署视图)
5、形式化语言

软件生命周期:可行性分析、需求分析、体系结构设计、详细设计、编码和测试发布

多媒体

媒体可分为:
1、感觉媒体:如视、听觉、触觉等
2、表示媒体:如图像、声音、视频等
3、表现媒体:如键盘、鼠标、扫描仪、显示器等
4、传输媒体:如电缆、光缆等

多媒体的重要特征:
1、多维化
2、集成性
3、交互性
4、实时性

多媒体系统的组成:
1、多媒体硬件:计算机主要配置和外部设备以及各种外部设备的控制接口
2、多媒体软件:多媒体驱动软件、多媒体操作系统、多媒体数据处理软件、多媒体创作工具软件和多媒体应用软件等

系统工程

系统工程师运用系统方法,对系统进行规划、研究、设计、制造、试验和适用的组织管理技术

系统工程方法的特点:整体性、综合性、协调性、科学性、实践性

系统工程流程的7个一般生命周期阶段:
1、探索性研究阶段
2、概念阶段
3、开发阶段
4、生产阶段(目的是生产系统并进行检验和验证)
5、使用阶段(目的是运行系统以满足用户需求)
6、保障阶段(目的是提供持续的系统能力)
7、退役阶段(目的是存储、归档或退出系统)

系统性能

性能指标:
1、计算机的性能指标:时钟频率(主频)、运算速度、运算精度、内存的存储容量、存储器的存取周期、数据处理速率(PDR)、吞吐率、各种响应时间、各种利用率、RASIS特性(可靠性、可用性、可维护性、完整性、安全性)、平均故障响应时间、兼容性、可扩充性和性能价格比
2、路由器的性能指标
3、交换机的性能指标
4、网络的性能指标
5、操作系统的性能指标
6、数据库管理系统的性能指标
7、Web服务器的性能指标

性能指标计算:方法由定义法、公式法、程序检测法、仪器检测法

第三章-信息系统基础知识

信息系统概述

信息系统的5个基本功能:输入、存储、处理、输出和控制

信息系统的发展:
诺兰模型:初始阶段、传播阶段、控制阶段、集成阶段、数据管理阶段、成熟阶段

信息系统的分类:
传统的信息系统分为:业务(数据)处理系统、管理信息系统(MIS)、决策支持系统(DSS)、专家系统(ES)、办公自动化系统(OAS)等5类

信息系统的生命周期:
1、产生阶段
2、开发阶段(总体规划、系统分析、系统设计、系统实施、系统验收阶段)
3、运行阶段
4、消亡阶段

信息系统建设原则:
1、高层管理人员介入原则
2、用户参与开发原则
3、自顶向下规划原则
4、工程化原则(创新性原则、整体性原则、发展性原则、经济性原则)

信息系统开发方法:

  • 结构化方法
    特点:开发目标清晰化、工作阶段程式化、开发文档规范化、设计方法结构化
  • 原型法
  • 面向对象法
  • 面向服务的方法

业务处理系统(TPS)的功能:
对企业管理中日常事务所发生的数据进行输入、处理和输出
TPS的数据处理周期由以下5个阶段构成:数据输入、数据处理、数据库的维护、文件报表的生成和查询处理

管理信息系统(MIS):
在TPS基础上引进大量管理方法对企业整体信息进行处理,并利用信息进行预测、控制、计划、辅助企业全面管理的信息系统
管理信息系统由四大部件组成:信息源、信息处理器、信息用户、信息管理者

决策支持系统(DSS)
功能:
1、用来整理和提供本系统与决策问题有关的各种数据
2、能及时收集和提供有关各项活动的反馈信息,包括系统内核与系统相关的信息
3、要尽可能地收集、存储和及时提供与决策有关的外部信息
4、对各种与决策有关的模型具有存储和管理的能力
5、提供对常用的数学方法、统计方法和运筹方法的存储和管理
6、能兑各种数据、模型、方法进行有效管理,为用户提供查找、变更、增加、擅长的等操作功能
7、运用所提供的模型和方法对数据进行加工,并得出有效支持决策的信息
8、具有人-机对话接口和图形加工、输出功能
9、应支持分布式使用方法,提供有效的传输功能,以保证分散在不同地点的用户能共享系统所提供的模型、方法和可共享的数据

特点:
1、面向决策者,系统在开发中遵循的需求和操作是设计系统的依据和原则
2、支持对半结构化问题的决策
3、辅助决策者,支持决策者
4、体现决策过程的动态性
5、提倡交互式处理

组成:
1、数据的重组和确认
2、数据字典的建立
3、数据挖掘和智能体
4、模型建立

专家系统(ES)
特点:
1、超越时间限制
2、操作成本低廉
3、易于传递与赋值
4、处理手段一致
5、善于克服难题
6、适用特定领域

组成:
1、知识库
2、综合数据库
3、推理机
4、知识获取
5、解释程序
6、人机接口

办公自动化系统(OAS)
功能:
1、事务处理
2、信息管理
3、辅助决策

组成:
1、计算设备
2、办公设备
3、数据通信及网络设备
4、软件系统

企业资源规划(ERP)
基本模块:
1、生产预测
2、销售管理(计划)
3、经营计划(生产计划大纲)
4、主生产计划
5、物料需求计划
6、能力需求计划
7、车间作业计划
8、采购与库存管理
9、质量与设备管理
10、财务管理
11、ERP有关扩展应用模块

企业信息化方法:
1、业务流程重构方法
2、核心业务应用方法
3、信息系统建设方法
4、主题数据库方法
5、资源管理方法
6、人力资源投资方法

第四章-信息安全技术基础知识

信息安全基础知识

一、信息安全5要素:机密性、完整性、可用性、可控性、可审查性

二、信息安全范围包括:设备安全、数据安全、内容安全、行为安全

  • 设备安全:是信息系统安全的首要问题,是信息系统安全的物质基础,包括3个方面:设备的稳定性、设备的可靠性、设备的可用性
  • 数据安全:采取措施确保数据免受未授权的泄露,篡改和毁坏,包括3个方面:数据的秘密性、数据的完整性、数据的可用性
  • 内容安全:是信息安全在政治、法律、道德层次上的要求,包括:信息内容在政治上是健康的、符合国家的法律法规、符合中华民族优良的道德规范
  • 行为安全:是指最终通过行为提供给用户,确保信息系统的行为安全,才能最终确保系统的信息安全,特性为:行为的秘密性、行为的完整性、行为的可控性

三、信息存储安全:信息使用的安全(如用户的标识与验证、用户存取权限限制、安全问题跟踪等)、系统安全监控、计算机病毒防治、数据的加密和防治非法的攻击等
1、信息使用的安全

  • 用户的标识与验证:基于人的物理特征的识别(签名识别法、指纹、语音),用户所拥有的特殊安全物品的识别(智能IC卡、磁条卡)
  • 用户存取权限限制:隔离控制法、限制权限法

2、系统安全监控
3、计算机病毒防治

四、网络安全
1、网络安全漏洞(物理安全性、软件安全漏洞、不兼容使用安全漏洞、选择合适的安全哲理)
2、网络安全威胁(非授权访问、信息泄露或丢失、破坏数据完整性、拒绝服务攻击)
3、安全措施的目标(访问控制、认证、完整性、审计、保密)

信息安全系统的组成框架

框架通常由技术体系、组织机构、管理体系共同构建
1、技术体系涉及:基础安全设备、计算机网络安全、操作系统安全、数据库安全、终端设备安全等
2、组织机构体系:由机构、岗位和人事机构三个模块构成一个体系
3、管理体系:是信息系统安全的灵魂,由法律管理、制度管理和培训管理组成

信息加解密技术

对称密钥加密算法:加密密钥和解密密钥是相同的,DES、IDEA、AES
非对称密钥加密算法:加密密钥和解密密钥不相同,RSA
公钥加密,私钥解密,可实现保密通信;私钥加密,公钥解密可实现数字签名

密钥管理技术

公钥加密体制的密钥管理:公开发布、公用目录、公钥证书

访问控制及数字签名技术

访问控制的基本模型:主体、客体、控制策略
访问控制的实现技术:访问控制矩阵、访问控制表、能力表、授权关系表

数字签名:
A向B发送签名消息P:
1、B可以验证消息P确实来源于A
2、A以后不能否认发送过P
3、B不能编造或改变消息P

信息安全的抗攻击技术

一、密钥生成需要考虑的因素:增大密钥空间、选择强钥、密钥的随机性

二、拒绝服务攻击与防御
1、传统拒绝服务攻击的分类:
消耗资源、破坏或更改配置信息、物理破坏或改变网络部件、利用服务程序中的处理错误使服务失效

2、分布式拒绝服务攻击DDoS
被DDoS攻击后的现象:

  • 被攻击主机有大量等待的TCP连接
  • 大量到达的数据分组并不是网站服务连接的一部分,往往指向机器的任意端口
  • 网络中充斥着大量无用的数据包,源地址为假
  • 制造高流量的无用数据造成网络拥塞,使受害主机无法正常和外界通信
  • 利用受害主机提供的服务和传输协议上的缺陷,反复发出服务请求,使受害主机无法及时处理所有正常的请求
  • 严重时会造成死机

3、拒绝服务攻击的防御方法

  • 加强对数据包的特征识别
  • 设置防火墙监视本地主机端口的使用情况
  • 对通信数据量进行统计也可获得有关攻击系统的位置和数量信息
  • 尽可能的修正已经发现的问题和系统漏洞

4、欺骗攻击与防御

  • ARP欺骗(固化ARP表、使用ARP服务器、双向绑定、ARP防护软件)
  • DNS欺骗(被动监听检测、虚假报文探测、交叉检查查询)
  • IP欺骗(删除UNIX中de/etc/hosts.equiv、$HOME/.rhosts、修改/etc/inetd.conf,使RPC机制无法应用、设置防火墙过滤来自外部而信源地址是内部IP的报文)

5、端口扫描

三、系统漏洞扫描
1、基于网络的漏洞扫描
2、基于主机的漏洞扫描(优点:扫描的漏洞数量多、集中化管理、网络流量负载小)

信息安全的保障体系与评估方法

一、计算机信息系统安全保护等级
1、用户自主保护等级
2、系统审计保护级
3、安全标记保护级
4、结构化保护级
5、访问验证保护级

二、安全风险管理
在风险评估实施前,应考虑内容:
1、确定风险评估的范围
2、确定风险评估的目标
3、建立适当的组织结构
4、建立系统性的风险评估方法
5、获得最高管理者对风险评估策划的批准

风险计算过程如下:
1、对信息资产进行识别,并对资产赋值
2、对威胁进行分析,并对威胁发生的可能性赋值
3、识别信息资产的脆弱性,并对弱点的严重程度赋值
4、根据威胁和脆弱性计算安全事件发生的可能性
5、结合信息资产的重要性和发生安全事件的可能性,计算信息资产的风险值

第五章-软件工程基础知识

软件工程

一、软件过程模型
1、瀑布模型
在这里插入图片描述
特点:前一个阶段工作的输出结果,是后一个阶段工作的输入
缺点:

  • 软件需求的完整性、正确性等很难确定,甚至是不可能和不现实的;
  • 瀑布模型是一个严格串行化的过程模型,使得用户和软件项目负责人要相当长的时间才能得到一个看得见的软件系统。如果出现与用户期望不一致,或需求变更,将会带来重大的损失;
  • 瀑布模型的基本原则是在每个阶段一次性地完全解决该阶段的工作,不会出现遗漏、错误等情况,而实际上这是不现实或不可能的。

2、原型化模型
又称为快速原型
在这里插入图片描述
原型模型主要阶段:

  • 原型开发阶段:根据用户提出的软件系统的定义,快速开发一个原型,该原型包含目标系统的关键问题和反映目标系统的大致面貌,展示目标系统的全部或部分功能、性能等
  • 目标软件开发阶段

原型模型后续,按照原型的作用不同,分抛弃型原型和演化型原型

3、螺旋模型
是在快速原型的基础上扩展而成,这种模型把整个软件开发流程分成多个阶段,每个阶段都有4个部分组成,适用于大型软件开发

  • 目标设定:需求分析,需求确认,开发计划,生命周期计划
  • 风险分析
  • 开发和有效性验证
  • 评审

二、敏捷模型
1、敏捷方法
特点:适应性和预设性(使用反馈机制对不可预测的过程进行控制)、面向人而非面向过程(提倡面对面交流)
核心思想:适应性非预测型、以人为本,非以过程为本、迭代增量的开发过程
主要的敏捷方法:

  • 极限编程:轻量、严谨,软件项目入手:加强交流、从简单做起、寻求反馈、实事求是
  • 水晶系列方法:提倡“机动性的”方法
  • Scrum:侧重于项目管理,包括了一系列实践和预定义角色过程的骨架(是一种流程、计划、模式、用于有效率的开发软件)
  • 特征驱动开发方法:FDD是一个迭代的开发模型,3个要素(人、过程、技术),5个核心过程(开发整体对象模型、构造特征列表、计划特征开发、特征设计、特征构建)

三、统一过程模型(RUP)
RUP是一种重量级过程,一个二维的软件开发模型,有9个核心工作流:

  • 业务建模:理解待开发系统所在的机构及其商业运作,确保所有参与人员对待开发系统所在的机构有共同的认识,评估待开发系统对所在机构的影响
  • 需求:定义系统功能及用户界面,使客户知道系统的功能,使开发人员理解系统的需求,为项目预算及计划提供基础
  • 分析与设计:把需求分析的结果转换为分析与设计模型
  • 实现:把设计模型转换为实现结果,对开发的代码做单元测试,将不同实现人员开发的模块集成为可执行系统
  • 测试:检查各子系统之间的交互、集成。验证所有需求是否均被正确实现,对发现的软件质量上的缺陷进行归档,对软件质量提出改进建议
  • 部署:打包、分发、安装软件,升级旧系统,培训用户及销售人员,并提供技术支持
  • 配置与变更管理:跟踪并维护系统开发过程中产生的所有制品的完整性和一致性
  • 项目管理:为软件开发项目提供计划、人员分配、执行、监控等方面的指导,为风险管理提供框架
  • 环境:为软件开发机构提供软件开发环境,即提供过程管理和工具的支持

RUP划分软件开发生命周期,每个循环生成产品的一个新版本,每个循环由4个连续的阶段,每个阶段完成确定的任务,4个阶段:

  • 初始阶段:定义最终产品视图和业务模型,并确定系统范围
  • 细化阶段:设计及确定系统的体系结构,制定工作计划及资源要求
  • 构造阶段:构造产品并继续演进需求、体系结构、计划直至产品提交
  • 移交阶段:把产品提交给用户使用

RUP核心概念:

  • 角色:描述某个人或一个小组的行为和职责
  • 活动:是一个有明确目的的独立工作单元
  • 制品:制品是活动生成、创建或修改的一段信息
  • 工作流:工作流描述了一个有意义的连续的活动序列,每个工作流产品一些有价值的产品,并显示了角色之间的关系

RUP的特点:以体系结构为中心、迭代和增量的软件开发过程

  • 用例驱动,需求分析、设计、实现和测试等活动都是用例驱动的
  • 以体系结构为中心:软件的体系结构是一个多维的结构,会采用多个视图来描述软件体系结构,“4+1”视图
    在这里插入图片描述
  • 迭代与增量:把整个项目开发分为多个迭代过程,每次迭代都是在已完成部分的基础上,每次增加一些新功能实现。
    好处:
    1、在软件开发的早期就可以对关键的、影响大的风险进行处理
    2、可以提出一个软件体系结构来指导开发
    3、可以更好地处理不可避免的需求变更
    4、可以较早得到一个可运行的系统,鼓舞团队的士气,增强项目成功的信心
    5、为开发人员提供一个能更有效工作的开发过程

四、软件能力成熟度模型
5个成熟度等级:

  • Level 1 初始级:
    过程随意混乱,能产出产品和服务,但经常超出预算与成本
  • Level 2 已管理级:
    确保策划、文档化、执行、监督和控制项目级的过程,需要为过程建立明确的目标,实现成本、进度和质量目标等
  • Level 3 已定义级
    根据自身特殊情况定义适合的标准流程,将这套管理体系和流程制度化,同时进行项目积累,企业资产的收集
  • Level 4 量化管理级
    建立产品质量、服务质量以及过程性能的定量目标
  • Level 5 优化级
    通过增量式的与创新式的过程与技术改进,不断地改进过程性能

需求工程

软件需求3个层次:

  • 业务需求:反映了组织机构或客户对系统、产品高层次的目标要求
  • 用户需求:描述了用户使用产品必须要完成的任务,是用户对该软件产品的期望,
  • 功能需求:定义了开发人员必须实现的软件功能

需求工程是指应用已证实有效的原理、方法,通过合适的工具和记号,系统地描述待开发系统及其特征和相关约束。需求工程覆盖了体系结构设计之前的各项开发活动,主要包括分析客户要求、对未来系统的各项功能性及非功能性需求进行规格说明,目标是:确定客户需求,定义设想中系统的所有外部特征。

需求活动的阶段:需求获取、需求分析、形成需求规格(需求文档化)、需求确认与验证、需求管理。
需求管理活动在形成需求文档初稿时就开始。
强调内容如下:
1、控制对需求基线的变动
2、保持项目计划与需求一致
3、控制单个需求和需求文档的版本情况
4、管理需求和联系链,或管理单个需求和其他项目可交付产品之间的依赖关系
5、跟踪基线中的需求状态
在这里插入图片描述
一、需求获取
需求获取参考步骤:
1、开发高层的业务模型
2、定义项目范围和高层需求
3、识别用户角色和用户代表
4、确定目标系统的业务工作流
5、需求整理与总结(功能需求、性能需求、可靠性需求、安全保密需求、用户界面需求、资源使用需求、软件成本消耗与开发进度需求等)

需求获取方法:
1、用户面谈
2、需求专题讨论会(优点:协助建立一支高效的团队,围绕项目成功的目标、所有的风险承担人都畅所欲言、促进风险承担人和开发团队之间达成共识、揭露和解决那些妨碍项目成功的行政问题、能够很快地产生初步的系统定义、可以有效地解决不同涉众之间的需求冲突)
3、问卷调查
4、现场观察
5、原型化方法
6、头脑风暴法

二、需求变更
需求变更管理过程:
1、问题分析和变更描述
2、变更分析和成本计算
3、变更实现

常见的需求变更策略:
1、所有需求变更必须遵循变更控制过程
2、对于获得批准的变更,不应该做设计和实现工作
3、变更应该由项目变更控制委员会决定实现哪些变更
4、项目风险承担者应该能够了解变更的内容
5、绝不能充项目配置库中删除或者修改变更请求的原始文档
6、每一个集成的需求变更必须能跟踪到一个经核准的变更请求,以保持水平可追踪性

变更控制委员会做出决策的过程及操作步骤:
1、制定决策
2、交流情况
3、重新协商约定

三、需求追踪
需求跟踪提供了由需求到产品实现整个过程范围的明确查阅能力,目的是建立与维护“需求-设计-编程-测试”之间的一致性,确保所有的工作成果符合用户需求。

需求跟踪的两个方式:
1、正向跟踪(产品需求规格说明书)
2、逆向跟踪

系统分析与设计

一、结构化方法
结构化分析:给我一组帮助系统分析人员产生功能规约的原理与技术
步骤:
1、分析业务情况,做出反映当前物理模型的数据流图(DFD)
2、推导出等价的逻辑模型DFD
3、设计新的逻辑系统,生成数据字典和基元描述
4、建立人机接口,提出可供选择的目标系统物理模型的DFD
5、确定各种方案的成本和风险等级,据此对各种方案进行分析
6、选择一种方案
7、建立完整的需求规约
在这里插入图片描述
在这里插入图片描述

结构化设计:面向数据流的设计方法

结构化编程:采用自顶向下、逐步求精的设计方法,各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口和一个出口

数据库设计:内容包括,需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护

二、面向对象方法
以用例驱动的、以体系结构为中心的、迭代的和渐增式的开发过程,主要包括需求分析、系统分析、系统设计和系统实现

面向对象分析方法(OOA)
面向对象分析:
OOA原则:抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制、行为分析
基本步骤:确定对象和类、确定结构、确定主题、确定属性、确定方法

面向对象设计(OOD):
OOD中,类可以分为:实体类、控制类、边界类

面向对象编程(OOP):
基本特点:封装、继承、多态

数据持久化和数据库:
一般会引入持久层,专注于实现数据持久化,将数据使用者和数据实体相关联,实现了数据处理层内部的业务逻辑和数据逻辑的解耦

软件测试

一、测试方法
以测试过程中程序执行状态为依据可分为静态测试(ST)和动态测试(DT)
以具体实现算法细节和系统内部结构的相关情况为根据可分为黑盒测试、白盒测试和灰盒测试
从程序执行的方式来分类,人工测试和自动化测试

二、测试阶段
1、单元测试
2、集成测试
3、系统测试(功能测试、性能测试、验收测试、压力测试等)

净室软件工程(CSE)

净室工程,通过第一次正确地书写代码增量,并在测试前验证它们的正确性,来避免对成本很高的错误消除过程的依赖

理论基础:函数理论和抽样理论

技术手段:统计过程控制下的增量式开发、基于函数的规范与设计、正确性验证、统计测试和软件认证

基于构件的软件工程(CBSE)

CBSE是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径
用于CBSE的构件具备的特征:可组装性、可部署性、文档化、独立性、标准化

CBSE过程的主要活动:
1、系统需求概览
2、识别候选构件
3、根据发现的构件修改需求
4、体系结构设计
5、构件定制与适配
6、组装构件,创建系统

构件组装:顺序组装、层次组装、叠加组装

软件项目管理

一、软件进度管理
工作分解结构(WBS)
在这里插入图片描述
WBS的要求:
1、WBS的工作包是可控和可管理的,不能过于复杂
2、任务分解也不能过细,一般原则WBS的树形结构不超过6层
3、每个工作包要有一个交付成果
4、每个任务必须明确定义的完成标准
5、WBS必须有利于责任分配

任务活动图
工作分解后,得到一组活动任务,对每个活动进行定义,并确定活动之间关系,也就是活动执行的前后顺序,根据活动顺序就可以得到对应的任务活动图。

二、软件配置管理
核心内容是版本控制和变更控制

三、软件质量管理
从管理角度,将影响软件质量的因素分为:产品运行、产品修改、产品转移
在这里插入图片描述

四、软件风险管理
主要目标是预防风险,在软件项目风险管理中,要辨识风险,评估出现的概念和产生的影响,建立一个规划来管理风险

第六章-数据库设计基础知识

数据库基本概念

数据库的基础结构是数据模型,数据模型的三要素是数据结构、数据操作和数据的约束条件

数据库三级模式:视图层、逻辑层、物理层

在这里插入图片描述

  • 视图层:最高层次的抽象,描述整个数据库的某个部分的数据
  • 逻辑层:比物理层更高一层的抽象,描述数据库中存储的数据以及这些数据间存在的关系
  • 物理层:最底层次的抽象,描述数据在存储器中是如何存储的。

从数据库管理系统的角度分:外模式、概念模式、内模式

  • 概念模式:数据库中全部数据的逻辑结构和特征的描述,反映数据库的结构和联系
  • 外模式:也称用户模式或子模式,是用户与数据库系统的接口,是用户需要使用的部分数据的描述
  • 内模式:也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型,索引,文件的组织方式,以及数据控制方面的细节

关系数据库

一、关系数据库的基本术语

  • 属性:描述事务的特征,如姓名、学号等
  • 域:每个属性的取值范围对应一个值的集合,称为该属性的域,如学号的域是6位整型数
  • 目或度:目或度指的是一个关系中属性的个数
  • 候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,则称该属性或属性组为候选码
  • 主码:也称主键,若一个关系有多个候选码,则选定其中一个作为住码
  • 主属性:包含在任何候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性
  • 外码:如果关系模式R中的属性或属性组不是该关系的码,但它是其他关系的码,那么该属性集对关系模式R而言是外码
  • 全码:关系模型的所有属性组是这个关系模式的候选码,称为全码
  • 笛卡尔积

关系模式主属性上加实下划线,表示主码属性;关系模式属性上加虚下划线,表示外码属性

二、关系运算

在这里插入图片描述

1NF:关系模式R的每个属性值都是不可分的原子值
2NF:消除非主属性对码(候选键)的部分依赖
3NF:消除非主属性对码的传递依赖
BCNF:消除主属性对码的传递依赖
4NF:属性间不允许有非平凡且非函数依赖的多值依赖

如果考虑函数依赖,关系模式最高规范是BCNF,如果考虑多值依赖,最高规范是4NF

数据库设计

一、数据库设计步骤
1、用户需求分析,使用一定的辅助工具对应用对象的功能、性能、限制等进行科学分析
2、概念结构设计,是对信息的分析和定义,如视图模型化、视图分析和汇总,理想工具是E-R图
3、逻辑结构设计,将抽象的概念模型转化为与选用的DBMS产品所支持的数据模型相符合的逻辑模型,是物理结构设计的基础,包括模式初始设计、子模式设计、应用程序设计、模式评价以及模式求精
4、物理结构设计,是逻辑模型在计算机中的具体实现
5、数据库实施阶段
6、数据库运行和维护阶段

二、数据需求分析
需求分析阶段的任务:综合各个用户的应用需求,对现实世界要处理的对象(组织、部门和企业等)进行详细调查,在了解现行系统的概况,确定新系统功能的过程中,收集支持系统目标的基础数据及处理方法

三、概念结构设计
E-R图对需求分析阶段得到的数据进行分类、聚集和概括,确定实体、属性和联系,设计工作步骤包括:选择局部应用、逐一设计分E-R图、E-R图合并

四、逻辑结构设计
概念结构设计的基础上进行数据模型设计,比如层次模型、网状模型和关系模型。该阶段主要工作包括确定数据模型、将E-R图转换为指定的数据模型、确定完整性约束和确定用户视图

E-R图的联系:一对一,一对多,多对多(必须新增联系)

五、物理设计
主要工作步骤:确定数据分布、存储结构和访问方式

六、数据库实施
在计算机上建立实际的数据库结构,数据加载,进行试运行和评价的过程

七、数据库运行维护
主要内容包括对数据库性能的监测和改善、故障恢复、数据库的重组和重构

应用程序与数据库的交互

库函数级别访问接口:数据库提供的最底层的高级程序语言访问数据接口,如OCI
嵌入SQL访问接口:嵌入式SQL是一种将SQL语句直接写入某些高级程序语言
通用数据接口标准:ODBC(开放数据库连接)解决异构数据库间数据共享
ORM访问接口:对象关系映射(ORM)用于实现面向对象编程语言里不同类型系统数据之间的转换,ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象与关系数据库相互映射,解决数据库与程序之间的异构性

NoSQL 数据库

NoSQL数据库分类:

  • 列式存储数据库:按数据库记录的列来组织和存储数据,数据库中每个表由一组页链的集合组成,每条页链对应表中的一个存储列,产品有:Cassandra、HBase等
  • 键值对存储数据库:典型数据结构为数组链表,产品有Redis等
  • 文档型数据库:该类型的数据模型是版本化的文档,半结构化的文档以特定的格式化存储,在处理网页等复杂数据时,比传统键值数据库的查询效率高,产品有CouchDB、MongoDB等
  • 图数据库:使用灵活的图模型,能够扩展到多个服务器上,产品有Neo4J、InfoGrid等

NoSQL 特点:易扩展、大数据量,高性能、灵活的数据模型、高可用

第七章-系统架构设计基础知识

软件架构(SA)概念

一、软件架构设计与生命周期

  1. 需求分析阶段
  2. 设计阶段,SA研究包括:SA模型的描述(3个层次:基本概念、体系结构描述语言、多视图表示),SA模型的设计与分析方法,SA设计经验的总结与复用
  3. 实现阶段
  4. 构件组装阶段
  5. 部署阶段
  6. 后开发阶段(动态软件体系结构,体系结构恢复和重建)

二、软件架构的重要性

  1. 架构设计能够满足系统的品质
  2. 架构设计使受益人达成一致的目标
  3. 架构设计能够支持计划编制过程
  4. 架构设计对系统开发的指导性
  5. 架构设计能够有效地管理复杂性
  6. 架构设计为复用奠定了基础
  7. 架构设计能够降低维护费用
  8. 架构设计能够支持冲突分析

基于架构的软件开发方法

基于体系结构的软件设计(ABSD)方法,是由体系结构驱动的,即由构成体系结构的商业、质量和功能需求的组合驱动的。有3个基础:功能的分解、通过选择体系结构风格来实现质量和商业需求、软件模板的使用。

ABSD 是一个自顶向下,递归细化的方法。

一、开发模型
ABSD模型把整个基于体系结构的软件过程划分为体系结构需求、设计、文档化、复审、实现和演化6个子过程。

体系结构需求过程
在这里插入图片描述

二、体系结构设计
在这里插入图片描述

三、体系结构文档化
文档是在系统演化的每一个阶段,系统设计与开发人员的通信媒介,是为验证体系结构设计和提炼或修改这些设计(必要时)所执行预先分析的基础。

体系结构文档化过程的主要输出结果:体系结构规格说明、测试体系结构需求的质量设计说明书

四、体系结构复审
复审的目的是标识潜在的风险,及早发现体系结构设计中的缺陷和错误

五、体系结构实现
在这里插入图片描述

六、体系结构的演化
在这里插入图片描述

软件架构风格

  • 架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效的组织成一个完整的系统
  • 架构风格定义了用于描述系统的术语表和一组指导构建系统的规则
五大架构风格 子风格
数据流风格 批处理、管道-过滤器
调用/返回风格 主程序/子程序、面向对象、层次结构
独立构件风格 进程通信、事件驱动系统(隐式调用)
虚拟机风格 解释器、规则系统
仓库风格 数据库系统、黑板系统、超文本系统

数据流风格

在这里插入图片描述
前一步的处理结果是后一步的输入内容【数据驱动】
在这里插入图片描述

优点 缺点 实例
1、松耦合【高内聚-低耦合】
2、良好的重用性、可维护性
3、可扩展性【标准接口适配】
4、良好的隐蔽性
5、支持并行
1、交互性较差
2、复杂性较高
3、性能较差(每个过滤器都需要解析和合成数据)
传统编译器
网络报文处理

调用/返回风格

在这里插入图片描述
这应该很好理解,程序里用的是最多的了。

子风格:
在这里插入图片描述

特别讲解下子风格分层架构风格:在这里插入图片描述

独立构件风格

独立构件风格包括:进程通信和事件系统风格

在这里插入图片描述

优点 缺点 特点
1、松耦合
2、良好的重用性、可修改性和可扩展性
1、构件放弃了对系统计算的控制。一个构件触发一个事件时,不能确定其他构件是否会响应。即使知道了事件注册哪些构件,也不能保证这些过程被调用的顺序
2、数据交换的问题
3、过程的语义必须依赖被触发事件的上下文约束
系统由若干子系统构成且成为一个整体;系统由统一的目标;子系统有主从之分;每一个子系统有自己的事件收集和处理机制

虚拟机风格

在这里插入图片描述
在这里插入图片描述

仓库风格

比如数据库、数据中台等
在这里插入图片描述

其他

闭环控制风格

在这里插入图片描述

  • 适用于嵌入式系统,用于解决简单闭环控制问题
  • 经典应用:空调温控、定速巡航

C2风格

在这里插入图片描述
C2架构基本规则:

  • 构件和连接件都有一个顶部和一个底部
  • 构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连
  • 一个连接件可以喝任意数目的其他构件和连接件连接
  • 当两个连接件直接连接时,必须由其中一个的底部到另一个的顶部

软件架构复用

软件架构复用包括机会复用和系统复用。

可复用的资产包括:需求、架构设计、元素、建模与分析、测试、项目规划、过程方法和工具、人员、样品系统、缺陷消除

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

特定领域软件体系结构(DSSA)

DSSA的必备特征如下:

  1. 一个严格定义的问题域和问题解域
  2. 具有普遍性,使其可以用于领域中某个特定应用的开发
  3. 对整个领域的构件组织模型的恰当抽象
  4. 具备该领域固定的、电信的开发过程中可重用元素

从功能覆盖的范围角度:

  1. 垂直域:定义一个特定的系统族,包含整个系统族内的多个系统,结果是在该领域中可作为系统的可行解决方案的一个通用软件体系结构
  2. 水平域:定义了在多个系统和多个系统族中功能区域的共有部分,在子系统级上涵盖多个系统族的特定部分功能

一、DSSA基本活动

  1. 领域分析:获得领域模型
  2. 领域设计:获得DSSA
  3. 领域实现:依据领域模型和DSSA开发和组织可重用信息

二、参与DSSA的人员
领域专家、领域分析人员、领域设计人员、领域实现人员

二、DSSA建立过程
建立过程分为5个阶段:

  1. 定义领域范围
  2. 定于领域特定的元素
  3. 定义领域特定的设计和实现需求约束
  4. 定义领域模型和体系结构
  5. 产生、搜集可重用的产品单元

在这里插入图片描述

第八章-系统质量属性与架构评估

软件系统质量属性

软件系统质量属性是一个系统的可测量或者可测试的属性,用来描述系统满足利益相关者需求的程度。

从管理角度,可将影响软件质量的主要因素划分为:功能性、可靠性、易用性、效率、维护性和可移植性
功能性:适合性、准确性、互操作性、依从性、安全性
可靠性:容错性、易恢复性、成熟性
易用性:易学性、易理解性、易操作性
效率:资源特性、时间特性
维护性:可测试性、可修改性、稳定性、易分析性
可移植性:适用性、易安装性、一致性、可替换性

可以将软件系统的质量属性分为开发期质量属性和运行期质量属性。
开发期关注的质量属性:易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性
运行期关注的质量属性:性能、安全性、可伸缩性、和操作性、可靠性、可用性、鲁棒性

一、面向架构评估的质量属性
架构评估过程中,评估人员说关注的是系统的质量属性,包括:

  • 性能:指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段事件内系统所能处理的事件个数
  • 可靠性(容错、健壮性):指软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的能力,用平均失效等待时间(MTTF)、平均失效间隔时间(MTBF)来衡量。
  • 可用性:指系统能够正常运行的时间比例,用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示
  • 安全性:指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力
  • 可修改性(可维护性、可扩展性、结构重组、可移植性):指能够快速地以较高的性价比对系统进行变更的能力
  • 功能性:指系统能完成所期望的工作的能力
  • 可变性:指架构经扩充或变更而成为新架构的能力
  • 互操作性:不是独立存在的,通常与其他系统或自身环境相互作用

二、质量属性场景
质量属性场景主要关注:可用性、可修改性、性能、可测试性、易用性、安全性

  • 可用性:关注系统故障发生的频率、出现故障时发生的情况、允许系统有多长是正常运行、什么时候可以安全地出现故障、如何防止故障的发生、发生故障时要求进行哪种通知
  • 可修改性:关注系统在改变功能、质量属性时需要付出的成本和难度,可修改性质量属性场景可能发生在系统设计、编译、构建、运行等多种情况和环境下
  • 性能:主要关注系统的响应速度,可以通过效率、响应时间、吞吐量、负载来客观评价性能的好坏
  • 可测试性:主要关注系统测试过程中的效率,发现系统缺陷或故障的难易程度
  • 易用性:主要关注用户在使用系统时的容易程度,包括系统的学习曲线、完成操作的效率、对系统使用过程的满意程度
  • 安全性:主要关注系统在安全性方面的要素,衡量系统在向合法用户提供服务的同时,阻止非授权用户使用的能力

系统架构评估

系统架构评估的方法通常分为3类:基于调查问卷或检查表的方式、基于场景的方式、基于度量的方式

一、系统架构评估方法
SAAM(软件架构分析方法)方法:包括5个步骤,场景开发、架构描述、单个场景评估、场景交互和总体评估

ATAM(架构权衡分析法)方法:采用效率树对质量属性进行分类和优先级排序,其关注的质量属性:性能、安全性、可修改性和可用性

CBAM方法:在ATAM结束时开始,使用了ATAM评估的结果

其他评估方法:SAEM方法、SAABNet方法、SACMM方法、SASAM方法、ALRRA方法、AHP方法

二、ATAM 方法架构评估实践

其工作分为4个基本阶段:演示、调查和分析、测试和报告ATAM
在这里插入图片描述

第九章-软件可靠性基础知识

软件可靠性基本概念

软件可靠性是软件产品在规定的条件下和规定的时间区间内完成规定功能的能力

失效严重程度是对用户具有相同影响的失效集合

可靠性测试是对软件产品的可靠性进行调查、分析和评价的一种手段,其目的可以归纳为:

  1. 发现软件系统在需求、设计、编码、测试和实施等方面的各种缺陷
  2. 为软件的使用和维护提供可靠性数据
  3. 确认软件是否达到可靠性的定量要求

软件可靠性建模

软件可靠性模型是为预计或估算软件的可靠性所建立的可靠性框图和数学模型,建立可靠性模型是为了将复杂系统的可靠性逐级分解为简单系统的可靠性,以便于定量预计、分配、估算和评价复杂系统的可靠性。

从技术角度看,影响软件可靠性的主要因素如下:

  1. 运行剖面(环境),软件可靠性的定义是相对运行环境而言的,不同环境,可靠性表现不一样
  2. 软件规模
  3. 软件内部结构
  4. 软件的开发方法和开发环境
  5. 软件的可靠性投入

软件可靠性建模方法
一般由以下几部分组成:模型假设、性能度量、参数估计方法、数据要求

好的软件可靠性模型具有的特性:基于可靠的假设、简单、计算一些有用的量、给出为了失效行为的好的映射、可广泛应用

软件可靠性分类:种子法模型、失效率类模型、曲线拟合类模型、可靠性增长模型、程序结构分析模型、输入域分类模型、执行路径分析方法模型、非齐次泊松过程模型、马尔可夫过程模型、贝叶斯分析模型

软件可靠性管理
软件可靠性管理的内容包括软件工程各个阶段的可靠性活动的目标、计划、进度、任何和修正措施等

软件可靠性设计

保障软件可靠性最有效、最经济、最重要的手段是在软件设计阶段采取措施进行可靠性控制。

软件可靠性设计技术主要有:容错技术、检错设计、降低复杂度设计等技术

软件可靠性设计要遵循的原则:

  1. 必须在软件的总体设计框架中使用,并且不能与其他设计原则相冲突
  2. 在满足提高软件质量要求的前提下,以提高和保障软件可靠性为最终目标
  3. 应确定软件的可靠性目标,不能无限扩大化,并且排在功能度、用户需求和开发费用之后考虑

容错设计技术
主要有恢复块设计、N版本程序设计、冗余设计

检错技术
检错技术实现代价低于容错技术和冗余技术,缺点是不能自动解决故障,出现故障后如果不进行人工干预,将导致软件系统不能正常运行

降低复杂度设计
软件复杂性分为模块复杂性和结构复杂性

系统配置技术
主要有双机热备技术、服务器集群技术

软件可靠性评价

软件可靠性评价是指选用或建立合适的可靠性数学模型,运用统计技术和其他手段,对软件可靠性测试和系统运行期间收集的软件失效数据进行处理,并评估和预测软件可靠性的过程,该过程包含:选择可靠性模型、收集可靠性数据、可靠性评估和预测

第十章-软件架构的演化和维护

软件架构演化和定义的关系

架构演化的重要性:

  1. 软件架构作为软件系统的骨架支撑着整个系统,是软件系统具备诸多好的特性的重要保障
  2. 软件架构作为软件蓝图为人们宏观管控软件系统的整体复杂性和变化性提供了一条有效途径,而且基于软件架构进行的软件检测和修改成本相对较低

软件架构的演化可以更好地保证软件演化的一致性和正确性,明显降低软件演化成本,使得软件系统演化更加便捷,有3方面原因:

  1. 对系统的软件架构进行的形式化、可视化表示提高了软件的可构造性,便于软件演化
  2. 软件架构设计方案涵盖的整体结构信息、配置信息、约束信息等有助于开发人员充分考虑未来可能出现的演化问题、演化情况和演化环境
  3. 架构设计时对系统组件之间的耦合描述有助于软件系统的动态调整

面向对象软件架构演化过程

对象演化、消息演化、复合片段演化、约束演化

软件架构演化方式的分类

3种典型的分类方法:

  1. 按照软件架构的实现方式和实施粒度分类:基于过程和函数的演化、面向对象的演化、基于组件的演化和基于架构的演化
  2. 按照研究方法分类:第一类对演化的支持,第二类版本和工程的管理工具,第三类架构变换的形式方法,第四类架构演化的成本收益分析
  3. 按照软件架构的演化过程是否处于系统运行时期分:静态演化和动态演化

软件架构演化时期:设计时演化、运行前演化、有限制运行时演化、运行时演化

软件架构演化原则

演化成本控制原则、进度可控原则、风险可控原则、主体维持原则、系统总体结构优化原则、平滑演化原则、目标一致原则、模块独立演化原则、影响可控原则、复杂性可控原则、有利于重构原则、有利于重用原则、设计原则遵从性原则、适应新技术原则、环境适应性原则、标准依从性原则、质量向好原则、适应新需求原则

软件架构演化评估方法

根据演化过程是否已知可将评估过程分为:演化过程已知的评估、演化过程未知的评估

大型网站架构演化实例

第一阶段:单体架构
第二阶段:垂直架构(应用、数据分离)
第三阶段:缓存改善网站性能
第四阶段:使用服务集群改善网站并发处理能力
第五阶段:数据库读写分离
第六阶段:使用反向代理和CDN加速网站响应
第七阶段:使用分布式文件系统和分布式数据库系统
第八阶段:使用NoSQL和搜索引擎
第九阶段:业务拆分
第十阶段:分布式服务

软件架构维护

软件架构维护与演化密不可分,维护需要对软件架构的演化过程进行追踪和控制,以保障软件架构的演化过程能够满足需求,软件架构维护过程设计架构知识管理、架构修改管理、架构版本管理等

第十一章-未来信息综合技术

人工智能技术

关键技术有:自然语言处理(NLP)、计算机视觉、知识图谱、人机交互(HCI)、虚拟现实或增强现实、机器学习

机器人分类:操作机器人、程序机器人、示教再现机器人、智能机器人、综合机器人

按照行业应用分:工业机器人、服务机器人、特殊领域机器人

边缘计算

边缘计算的业务本质:云计算在数据中心之外汇聚节点的延伸和演进,包括云边缘、边缘云、云化网关

边缘计算的特点:

  1. 联接性,是边缘计算的基础,所联接物理对象的多样性及应用场景的多样性,需要边缘计算具备丰富的联接功能
  2. 数据第一入口
  3. 约束性,对防电磁、防尘、功耗等恶劣工作条件和运行环境有较高要求
  4. 分布性,支持分布式计算与存储、实现分布式资源的动态调度与统一管理、分布式智能和分布式安全等能力

边云协同:
云端擅长全局性、非实时、长周期的大数据处理与分析,能够在长周期维护、业务决策支撑等领域发挥优势
边缘计算更适用局部性、实时、短周期数据的处理与分析,能更好地支撑本地业务的实时智能化决策与执行

边云协同的能力与内涵涉及Laas、PaaS、SaaS各层面的全面协同,主要包括六种协同:资源协同、数据协同、智能协同、应用管理协同、业务管理协同、服务协同

  1. 资源协同:提供计算、存储、网络、虚拟化等基础设施资源、具有本地资源调度管理能力,同时可与云端协同,接受并执行云端资源调度管理策略,包括边缘节点的设备管理、资源管理以及网络连接管理
  2. 数据协同:边缘节点主要负责现场/终端数据的采集,按照规则或数据模型对数据进行初步处理与分析,并将处理结果以及相关数据上传给云端;云端提供海量数据的存储、分析与价值挖掘。
  3. 智能协同:边缘节点按照AI模型执行推理,实现分布式智能,云端开展AI的集中式模型训练,并将模型下发边缘节点
  4. 应用管理协同:边缘节点提供应用部署与运行环境,并对本节点多个应用的生命周期进行管理调度,云端主要提供应用开发、测试环境、以及应用的生命周期管理能力
  5. 业务管理协同:边缘节点提供模块化,微服务化的应用/数字孪生/网络等应用实例,云端主要提供按照客户需求实现应用/数字孪生/网络等的业务编排能力
  6. 服务协同:边缘节点按照云端策略实现部分ECSaaS服务,通过ECSaaS与云端SaaS的协同实现面向客户的按需SaaS服务,云端主要提供SaaS服务在云端和边缘节点的服务分布策略,以及云端承担的SaaS服务能力

数字孪生

数字孪生关键技术:建模、仿真、基于数据融合的数字线程

云计算

自上而下具有 软件即服务(SaaS)、平台即服务(PaaS)、基础设施即服务(IaaS)

在灵活性方面,依次增强,SaaS -> PaaS -> IaaS
方便性方面,依次增强,IaaS -> PaaS -> SaaS

云计算部署模式:公有云,社区云,私有云、混合云

第十二章-信息系统架构设计理论和实践

信息系统架构的定义

信息系统架构的定义:

  1. 架构是对系统的抽象,通过描述元素、元素的外部可见属性及元素之间的关系来反映这种抽象
  2. 架构由多个结构组成,结构是从功能角度来描述元素之间的关系的,具体的结构传达了架构某方面的信息
  3. 任何软件都存在架构,但不一定有对该架构的具体表达文档
  4. 元素及其行为的集合构成架构的内容,两个方面进行抽象:在静态方面,关注系统的大粒度(宏观)总体结构,在动态方面,关注系统内关键行为的共同特征
  5. 架构具有基础性,通常涉及解决各类关键重复问题的通用方案(复用性),以及系统设计中影响深远的各项重要决策
  6. 架构隐含“决策”,即架构是由架构设计师根据关键的功能和非功能性需求(质量属性及项目相关的约束)进行设计与决策的结果

信息系统架构分类

  1. 信息系统物理结构(集中式结构、分布式结构)
  2. 信息系统逻辑结构(横向综合、纵向综合、纵横综合)

信息系统常用4种架构模型

  1. 单机应用模式
  2. 客户机/服务器模式(两层C/S、三层C/S与B/S结构、多层CS结构、MVC)
  3. 面向服务架构(SOA)模式(面向服务架构、Web Service、面向服务架构的本质)
  4. 企业数据交换总线

企业信息系统的总体框架
信息系统架构(ISA),具有多维度、分层次、高度集成化的模型

信息系统体系结构总体框架由:战略系统、业务系统、应用系统、信息基础设施

信息系统架构设计方法

TOGAF是一种开放式企业架构框架标准,基于一个迭代的过程模型,支持最佳实践和一套可重用的现有架构资产,它可以让设计、评估、并建立组织的正确架构。

该框架通过以下四个目标帮助企业组织和解决所有关键业务需求:

  1. 确保从关键利益相关方到团队成员的所有用户都使用相同的语言,有助于每个人以相同的方式理解框架,内容和目标,并让整个企业在同一页面上打破任何沟通障碍
  2. 避免被“锁定”到企业架构的专有解决方案,只要该公司内部使用TOGAF而不是用于商业目的,该框架就是免费
  3. 节省时间和金钱,更有效地利用资源
  4. 实现可观的投资回报(ROI)

TOGAF 包括六个组件:

  1. 架构开发方法,是TOGAF的核心,描述了TOGAF架构开发方法(ADM),即一种开发企业架构的分步方法
  2. ADM指南 和技术,包含一系列可用于应用ADM的指南和技术
  3. 架构内容框架,这部分描述了TOGAF内容框架,包括架构工件的结构化元模型、可重用架构构件块(ABB)的使用以及典型架构可交付成果的概述
  4. 企业连续体和工具,讨论分类法和工具,用于对企业内部架构活动的输出进行分类和存储
  5. TOGAF参考模型,提供了两个架构参考模型,即TOGAF技术参考模型(TRM)和集成信息基础设施参考模型(III-RM)
  6. 架构能力框架,讨论在企业内建立和运营架构实践所需的组织,流程,技能,角色和职责

框架核心思想:模块化架构、内容框架、扩展指南、架构风格

ADM架构开发方法的全生命周期模型
在这里插入图片描述
各阶段主要活动:

  • 准备阶段:为实施成功的企业架构项目做好准备,包括定义组织机构、特定的架构框架、架构原则和工具
  • 需求管理:完成需求的识别、保管和交付,相关联的ADM阶段则按优先级顺序对需求进行处理,TOGAF项目的每个阶段,都是建立在业务需求之上并且需要对需求进行确认
  • A 架构愿景:设置TOGAF项目的范围、约束和期望,创建架构愿景包括:定义利益相关者,确认业务上下文环境,创建架构工作说明书,取得上级批准
  • B 业务架构,C信息系统架构,D技术架构:从业务、信息系统和技术三个层面进行架构开发,在每一个层面分别完成以下活动:开发基线架构描述、开发目标架构描述、执行差距分析
  • E 机会和解决方案:进行初步实施规划,并确认在前面阶段中确定的各种构建块的交付物形式,确定主要实施项目、对项目分组并纳入过度架构、决定途径(制造/购买/重用、外包、商用、开源)、评估优先顺序、识别相依性
  • F 迁移规划:对阶段E确定的项目进行绩效分析和风险评估,制定一个详细的实施和迁移计划
  • G 实施治理:定义实施项目的架构限制:提供实施项目的架构监督、发布实施项目的架构合同、监测实施项目以确保符合架构要求
  • 架构变更管理:提供持续监测和变更管理的流程,以确保架构可以响应企业的需求并且将架构对于 业务的价值最大化

信息化特征
易用性、健壮性、(平台化、灵活性、拓展性)、安全性、(门户化、整合性)、移动性

信息系统的生命周期:系统规划、系统分析、系统设计、系统实施、系统运行和维护
在这里插入图片描述
信息化工厂总体规划方法论:主要是关键成功因素法、战略目标集转化法、企业系统规划法、其他还有企业信息分析与集成技术、产出/方法分析、投资回收法、征费法、零线预算法、阶石法

第十三章-层次式架构设计理论与实践

层次式体系结构

软件体系结构贯穿于软件研发的整个生命周期内,具有重要的影响,从以下三方面来进行考察:

  1. 利益相关人员之间的交流,包括程序员在内的绝大多数系统的利益相关人员都借助软件体系结构来作为相互沟通的基础
  2. 系统设计的前期决策
  3. 可传递的系统级抽象

分层架构大部分会分成表现层(展示层)、中间层(业务层)、数据访问层(持久层)和数据层

表现层框架设计

表现层设计模式:MVC模式、MVP模式、MVVM模式

中间层架构设计

业务逻辑组件分为接口和实现类两个部分

数据访问层设计

数据访问模式:在线访问、DataAccess Object、Data Transfer Object(DTO)、离线数据模式、对象/关系映射

物联网层次架构设计

物联网层次分为:
底层用来感知数据的感知层,利用传感器、二维码、RFID等设备获取物体的信息
第二层是数据传输处理的网络层,即通过各种传感网络与互联网的融合,将对象当前的信息实时准确地传递出去
第三层是与行业需求结合的应用层,即通过智能计算、云计算等将对象进行智能化控制

第十四章-云原生架构设计理论与实践

云原生架构

从技术角度,云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点

云原生代码通常包括:业务代码、三方软件、处理非功能特性的代码

云原生架构原则
服务化原则、弹性原则、可观测原则、韧性原则、所有过程自动化原则、零信任原则、架构持续演进原则

主要架构模式

  1. 服务化架构模式(微服务、小服务)
  2. Mesh 化架构模式
  3. Serverless模式(适用于事件驱动的数据计算任务、计算时间短的请求/响应应用、没有复杂相互调用的长周期任务)
  4. 存储计算分离模式
  5. 分布式事务模式
  6. 可观测架构
  7. 事件驱动架构

第十五章-面向服务架构设计理论与实践

面向服务的体系结构(SOA)

  • 从应用角度:SOA是一种应用框架,并将他们划分为单独的业务功能和流程,即所谓的服务
  • 从软件基本原理:SOA是一种组件模型,将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来

SOA 与微服务的区别:

  1. 微服务相比于SOA更加精细,微服务更多地以独立的进程方式存在,相互之间并无影响
  2. 微服务提供的接口方式更加通用化
  3. 微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下跟适合

SOA的参考架构

从服务为中心的视角看,企业集成架构可划分为:业务逻辑服务、控制服务、连接服务、业务创新和优化服务、开发服务、IT服务管理

SOA 主要协议和规范

  • UDDI协议:统一描述、发现和集成协议,定义它们怎么在互联网上相互作用,并在一个全球的注册体系架构中共享信息
  • WSDL规范:Web服务描述语言,是一个用来描述Web服务和说明如何与Web服务通信的XML语言
  • SOAP协议:是在分散或分布式的环境中交换信息的简单协议,是一个基于XML的协议,包括SOAP封装、SOAP编码规则、SOAP RPC表示、SOAP绑定
  • REST规范

SOA设计的标准要求

文档标准化、通信协议标准、应用程序统一登记与集成、服务质量

SOA 设计模式:服务注册表模式、ESB模式

微服务模式

参加的微服务设计模式:聚合器微服务设计模式、代理微服务设计模式、链式微服务设计模式、分支微服务设计模式、数据共享微服务设计模式、异步消息传递微服务设计模式等

微服务架构带来的主要问题:

  1. 微服务架构分布式特点带来的复杂性
  2. 微服务架构的分区数据库体系,不同服务拥有不同数据库

第十六章-嵌入式系统架构设计理论与实践

第十七章-通信系统架构设计理论与实践

通信系统网络架构

局域网网络架构
单核心架构
在这里插入图片描述
单核心网的特点,

  1. 核心交换设备通常采用二层、三层及以上交换机,如采用三层以上交换机可划分成VLAN,VLAN内采用二层数据链路转发,VLAN之间采用三层路由转发
  2. 接入交换设备采用二层交换机,仅实现二层链路转发
  3. 核心交换设备和接入设备之间采用100M/GE/10GE等以太网连接
    优点:网络结构简单,可节省设备投资
    不足:网络地理范围受限,核心网交换设备存在单点故障,网络扩展能力有限,在网络设备较多的情况下,核心交换设备端口密度要求高

双核心架构:
双核心通常指核心交换设备通常采用三层及以上交换机
在这里插入图片描述
各VLAN之间访问通过两台核心交换设备来完成,仅核心交换设备具备路由功能,接入设备仅提供二层转发功能

环型架构:
环形局域网由多台核心交换设备连接成双RPR动态弹性分组环,构建网络的核心。
RPR具备自愈保护功能,具备MAC层50ms自愈时间能力,RPR利用空间重用技术,使得环上的带宽有效利用。
RPR组件大规模局域网,多环之间只能通过业务接口互通,不能实现网络直接互通
在这里插入图片描述
层次局域网架构:
层次局域网(多层局域网)由核心层交换设备、汇聚层交换设备和接入层交换设备,以及用户设备等组成。

广域网网络架构
单核心广域网:通常由一台核心路由设备和各局域网组成
双核心广域网:通常由两台核心路由设备和各局域网组成
环形广域网:通常采用三台以上核心路由器设备构成路由环路,用以连接各局域网
半冗余广域网:由多台核心路由设备连接各局域网而形成
对等子域广域网:通过将广域网的路由设备划分成两个独立的子域,每个子域路由设备采用半冗余方式互连
层次子域广域网:将大型广域网路由设备划分成多个较为独立的子域,每个子域内路由设备采用半冗余方式互连,每个子域之间存在层次关系,高层次子域连接多个低层次子域

存储网络架构

  1. 直连式存储(DAS),计算机通过I/O端口直接访问存储设备的方式
  2. 网络连接的存储(NAS),计算机通过分布式文件系统访问存储设备的方式
  3. 存储区域网络(SAN),计算机通过构建的独立存储网络访问存储设备的方式

常见NAS协议:公共Internet文件服务/服务器消息块,CIFS/SMB,网络文件系统(NFS)
常见SAN协议:光纤通道协议(FCP),Internet 小型计算机系统接口(iSCSI),以太网光纤通道(FCoE),基于光纤通道的非易失性内存标准(FC-NVMe)

NAS和SAN异同点:
都可以用于集中管理存储,并供多主机(服务器)共享存储,NAS通常基于以太网,SAN基于以太网或光纤通道,NAS注重易用性,易管理性、可扩展性和更低的总拥有成本(TCO),而SAN则注重高性能和低延迟

网络构建关键技术

IPv4 和 IPv6网络共存过渡技术:双协议栈、隧道技术(ISATAP隧道、6to4隧道、4over6隧道、6over4隧道)、地址翻译机制

网络安全

实施网络安全控制的相关技术:防火墙布设、VPN技术、访问控制技术、网络安全隔离、网络安全协议、网络安全审计

第十八章-安全架构设计理论与实践

信息安全体系架构设计

信息系统安全设计重点考虑:系统安全保障体系,信息安全体系架构
系统安全保障体系:

  1. 安全区域策略的确定,根据安全区域的划分,主管部门应制定针对性的安全策略
  2. 统一配置和管理防病毒系统,主管部门应当建立整体防御策略,以实现统一的配置和管理
  3. 网络安全管理,加强网络安全管理,制定有关规章制度

数据库完整性设计

数据库完整性设计原则:

  1. 根据数据库完整性约束的类型确定其实现的系统层次和方式,并提前考虑对系统性能的影响,一般情况下,静态约束应尽量包含在数据库模式中,动态约束由应用程序实现
  2. 实体完整性约束、引用完整性约束是关系数据库最重要的完整性约束,在不影响系统关键性能的前提下尽量应用
  3. 要慎用目前主流DBMS都支持的触发器功能,一方面由于触发器的性能开销较大,另一方面触发器的多级触发难以控制,容易发生错误
  4. 在需求分析阶段就必须制定完整性约束的命名规范,尽量使用有意义的英文单词、缩写词、表名、列名及下划线等组合
  5. 要根据业务规则对数据库完整性进行细致的测试,以尽早排除隐含的完整性约束间的冲突和对性能的影响
  6. 要有专职的数据库设计小组,自始至终负责数据库的分析、设计、测试、实施及早期维护
  7. 应采用合适的CASE工具来降低数据库设计各阶段的工作量

软件脆弱性

软件脆弱性包括的4个方面:

  1. 脆弱性是软件系统中隐藏的一个弱点,本身不会引起危害,但被利用后会产生严重的安全后果
  2. 在软件开发过程中,自觉或不自觉引入的逻辑错误是大多数脆弱性的根本来源
  3. 与具体的系统环境密切相关,系统环境任何差异都有可能导致不同的脆弱性问题
  4. 旧的脆弱性得到修补或纠正的同事可能引入新的脆弱性,因此脆弱性问题会长期存在

典型分类法:ISOS分类法、PA分类法、Landwehr分类法、Aslam分类法、Bishop分类法、IBM分类法

ISOS分类法:面向信息系统的安全和隐私方面分类,目的是帮助信息系统管理人员理解安全问题,并提高系统安全性提供相应信息
PA分类法:主要研究操作系统中与安全包含相关的缺陷
Landwehr分类法:基于缺陷的起因,引入的时间和分布的位置三个维度的分类,对于每个维度,可以更细致地多层次分类和描述
Aslam分类法:针对Unix操作系统中的安全保障,从软件生命周期的角度将其分为编码故障和突然故障两大类
Bishop分类法:针对信息安全领域的一种分类方法,描述一种针对Unix和网络相关脆弱性的分类方法
IBM分类法:以Landwehr分类法为分类框架的基础,以新出现的安全缺陷对其进行扩充和改造以适应现今脆弱性的变化
在这里插入图片描述

第十九章-大数据架构设计理论与实践

大数据处理系统架构

大数据处理系统面临挑战

  1. 如何利用信息技术等手段处理非结构化和半结构化数据
  2. 如何探索大数据复杂性、不确定性特征描述的刻画方法及大数据的系统建模
  3. 数据异构性与决策异构性的关系对大数据知识发现与管理决策的影响

大数据处理系统架构特征

  1. 鲁棒性和容错性
  2. 低延迟读取和更新能力
  3. 横向扩容
  4. 通用性
  5. 延展性
  6. 即席查询能力
  7. 最少维护能力
  8. 可调式性

Lambda架构

Lambda架构用于同时处理离线和实时数据,可容错,可扩展的分布式系统,具备强鲁棒性和低延迟和持续更新。

Lambda架构分为三层:批处理层、加速层、服务层

在这里插入图片描述
批处理层核心功能:存储数据集和生成Batch View
主数据集中数据必须具备以下三个属性:数据是原始的、数据是不可变的、数据永远是真实的

Lambda架构优缺点:
优点:容错性好,查询灵活度高,易伸缩、易扩展
缺点:全场景覆盖带来的编码开销,针对具体场景重新离线训练一遍益处不大,重新部署和迁移成本很高

Kappa架构

Kappa不同于Lambda同时计算和批计算并合并视图,其只会通过流计算一条的数据链路计算并产生视图。
Kappa架构原理:在Lambda上进行优化,删除Batch Layer架构,将数据通道以消息队列进行替代,依旧以流处理为主,数据在数据湖层面进行了存储,当需要进行离线分析或者再次计算时,将数据湖的数据再次经过消息队列重播一次即可。

在这里插入图片描述
从使用场景看,Kappa架构与Lambda架构的两点主要区别:

  1. Kappa 不是Lambda的替代架构,是其简化版本,Kappa放弃了对批处理的支持,更擅长业务本身为增量数据写入场景的分析需求,例如各种时序数据场景,天然存在时间窗口的概念,流式计算直接满足其实时计算和历史补偿任务需求
  2. Lambda直接支持批处理,更适合对历史数据分析查询的场景,比如数据分析师需要按任意条件组合对历史数据进行探索性的分析,并且有一定的实时性需求,期望尽快得到分析结果,批处理可以更直接高效地满足这些需求

Lambda架构和Kappa架构对比

对比内容 Lambda架构 Kappa架构
复杂度与开发、维护成本 需要维护两套系统(引擎),复杂度高、开发、维护成本高 只需要维护一套系统(引擎),复杂度低、开发、维护成本低
计算开销 需要一直运行批处理和实时计算,计算开销大 必要时进行全量计算,计算开销相对较小
实时性 满足实时性 满足实时性
历史数据处理能力 批式全量处理,吞吐量大,历史数据处理能力强 流式全量处理,吞吐量相对较低,历史数据处理能力相对较弱

猜你喜欢

转载自blog.csdn.net/weixin_40972073/article/details/131534841