乐于分享
好东西不私藏

第5章 软件工程(上篇)| 5.1-5.3节知识点总结

第5章 软件工程(上篇)| 5.1-5.3节知识点总结

📚 第5章 软件工程(上篇)

📘 知识点精华总结(上篇:5.1-5.3节)

⭐ 软考超级重点章节 |系统集成项目管理工程师

📑 本篇目录

  • 5.1 软件工程定义
  • 5.2 软件需求
  • 5.3 软件设计

5.1 软件工程定义

🎯 软件工程的定义与目标⭐⭐⭐

软件工程定义:应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程。

目的:提高软件生产率、提高软件质量、降低软件成本。

IEEE定义:将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程及上述方法的研究。

Fritz Bauer定义:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。

💡 记忆口诀:"三高一低"——高生产率、高质量、高效率;低成本

🔧 软件工程的三个组成部分⭐⭐

组成部分
说明
方法
完成软件项目的技术手段,支持整个软件生命周期
工具
人们在开发软件的活动中智力和体力的扩展与延伸,自动或半自动地支持软件开发和管理
过程
贯穿于软件开发的各个环节,为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动

💡 记忆口诀:"工具支持过程,方法指导实践"

📊 软件危机的表现⭐⭐

1968年首次提出软件危机(Software Crisis)概念,具体表现为:

  • 软件开发进度难以预测
  • 软件开发成本难以控制
  • 软件功能难以满足用户期望
  • 软件质量无法保证
  • 软件难以维护
  • 软件缺少适当的文档资料

📝 历年真题示例:软件危机的表现不包括以下哪项?A. 进度难以预测   B. 成本难以控制   C. 文档资料完善   D. 质量无法保证答案:C(文档资料完善不是危机表现)

5.2 软件需求

🔑 核心概念:软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。根据IEEE标准,软件需求是指用户解决问题或达到目标所需要的条件或能力。

5.2.1 需求的层次

📚 需求的三层结构 ⭐⭐⭐⭐⭐⭐⭐⭐⭐

需求层次
描述
特点
业务需求
反映组织机构或用户对系统、产品高层次的目标要求
从总体上描述为什么要达到某种效果
用户需求
描述用户的具体目标,用户要求系统必须能完成的任务
体现某种系统产品将给用户带来的业务价值
系统需求
从系统的角度说明软件的需求
包括功能需求、非功能需求和设计约束

系统需求的细分:

  • 功能需求(行为需求):
    规定开发人员必须在系统中实现的软件功能
  • 非功能需求:
    描述系统展现给用户的行为和执行的操作,包括产品质量属性(易用性、可维护性、效率等)
  • 设计约束:
    对开发人员在软件产品设计和构造上的限制(如必须采用安全可靠的自主知识产权数据库系统)

💡 记忆口诀:"业务定方向,用户说任务,系统分三类(功能+非功能+约束)"

📝 历年真题示例:以下哪个不属于软件需求的常用层次?A. 业务需求   B. 用户需求   C. 数据需求   D. 系统需求答案:C(数据需求不属于标准的三层结构)

5.2.2 质量功能部署(QFD)

🎯 QFD的三类需求⭐⭐

质量功能部署(Quality Function Deployment, QFD)是一种将用户要求转化成软件需求的技术,其目的是最大限度地提升软件工程过程中用户的满意度。

需求类型
说明
实现效果
常规需求
用户认为系统应该做到的功能或性能
实现得越多,用户会越满意
期望需求
用户想当然认为系统应具备的功能或性能
如果不实现会让用户感到不满
意外需求 (兴奋需求)
用户要求范围外的功能或性能
实现会更高兴,不实现也不影响购买决策

💡 记忆口诀:"常规越多越满意,期望不做就不满,意外做了更高兴"

5.2.3 需求获取

🔍 需求获取的五种方法 ⭐⭐⭐⭐⭐⭐⭐⭐⭐

方法名称
说明
适用场景
用户访谈
直接与用户面对面交流
了解用户的真实想法和期望
问卷调查
通过问卷收集大量用户意见
用户数量多、分布广的情况
采样
从总体中抽取样本进行分析
用户群体庞大时
情节串联板
通过场景化的方式展示系统使用流程
理解用户的使用场景和工作流程
联合需求计划(JRP)
组织各相关方共同讨论确定需求
需要快速达成共识的项目

💡 记忆口诀:"访谈问卷采样,情节串联JRP"

⚠️ 易错点提醒:需求获取是开发方、用户之间为定义新系统而进行的交流。如果双方所理解的领域内在系统分析、设计过程出现问题,通常在开发过程的后期才会被发现,将会使整个系统交付延迟,或行上线后系统无法或难以使用,最终导致项目失败。

5.2.4 需求分析

🔬 结构化分析方法(SA)⭐⭐⭐⭐⭐⭐⭐⭐

结构化分析(Structured Analysis, SA)方法给出一组帮助系统分析人员产生功能规约的原理与技术,其建立模型的核心是数据字典

三个层次的模型:

模型类型
表示工具
作用
数据模型
实体关系图(E-R图)
描述实体、属性及实体之间的关系
功能模型
数据流图(DFD)
从数据传递和加工的角度描述系统功能
行为模型(状态模型)
状态转换图(STD)
描述系统的状态和引起状态转换的事件

📊 数据流图(DFD)的基本元素⭐⭐⭐⭐

DFD由以下4种基本元素组成:

元素
符号
说明
数据流
→ 箭头
描述数据的流向,箭头上标注信息说明或数据项
处理/加工
□ 矩形框
表示对数据进行的加工和转换
数据存储
= 双横线
表示用数据库形式或文件形式存储的数据
外部项
◇ 圆角框/平行四边形
也称为数据源或数据终点,描述系统数据的提供者或使用者

💡 记忆口诀:"外处理存储流"——外部项→处理→数据存储→数据流

📖 数据字典的内容⭐⭐⭐

数据字典(Data Dictionary)是对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流图中的各个元素做出详细的说明。

数据字典主要包括以下部分:

  • 数据项:
    不可再分的数据单元,描述包括名称、含义、别名、类型、长度、取值
    范围等
  • 数据结构:
    反映数据之间的组合关系
  • 数据流:
    数据结构在系统内传输的路径
  • 数据存储:
    数据结构停留或保存的地方
  • 处理过程:
    只需要描述说明性信息,包括输入、输出和处理简要说明

🔄 面向对象分析方法(OOA)⭐⭐⭐

面向对象的分析(Object-Oriented Analysis, OOA)方法能正确认识其中的事物及它们之间的关系,找出描述问题域和系统功能所需的类和对象,定义它们的属性和职责。

OOA模型的组成:

  • 5个层次:
    主题层、对象类层、结构层、属性层、服务层
  • 5个活动:
    标识对象类、标识结构、定义主题、定义属性、定义服务

OOA的基本原则:抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制、行为分析

两种对象类结构:

  • 分类结构:
    一般与特殊的关系(继承关系)
  • 组装结构:
    整体与部分的关系(聚合关系)

💡 记忆口诀:"五层五活动,九大原则记心间"

5.2.5 需求规格说明书(SRS)

📋 SRS的主要内容 ⭐⭐⭐⭐⭐⭐⭐⭐

软件需求规格说明书(Software Requirement Specification, SRS)是在需求分析阶段主要要完成的文档,是软件需求分析的最终结果。

根据国家标准《计算机软件文档编制规范》(GB/T 8567),SRS应该包括:

  1. 范围:
    适用的系统和软件的完整标识、用途、一般特性等
  2. 引用文件:
    SRS中引用的所有文档
  3. 需求:
    SRS的主体部分,详细描述软件需求
    • 所需的状态和方式
    • 需求概述
    • 需求规格
    • 软件配置项能力需求
    • 外部接口需求、内部接口需求
    • 适应性需求、保密性和私密性需求
    • 环境需求、计算机资源需求
    • 软件质量因素、设计和实现约束
    • 数据、操作、故障处理等
  4. 合格性规定:
    定义合格性的方法(演示、测试、分析、审查等)
  5. 需求可追踪性:
    双向可追踪性
  6. 尚未解决的问题
  7. 注解:
    背景信息、词汇表、原理等
  8. 附录:
    便于维护的独立编排信息

📝 历年真题示例:以下哪个不属于软件需求规格说明书的内容?A. 业务功能   B. 交互界面   C. 应用系统性能   D. 算法的详细过程答案:D(算法的详细过程属于详细设计阶段的内容)

✅ 需求验证⭐⭐⭐

需求验证(需求确认)的活动摘要确定的内容包括:

  • SRS正确地描述了预期的、满足项目干系人需求的系统行为和特征
  • SRS中的软件需求是从系统需求、业务规格和其他来源中正确推导而来的
  • 需求是完整的和高质量的
  • 需求的表示在所有地方都是一致的
  • 需求为继续进行系统设计、实现和测试提供了足够的基础

验证方法:需求评审(技术评审)+ 需求测试

5.2.6 需求变更

🔄 变更控制过程 ⭐⭐⭐⭐⭐⭐⭐⭐

变更控制的步骤:

步骤
说明
① 问题分析和变更描述
提出变更提议后,检查有效性,产生明确的需求变更提议
② 变更分析和成本计算
影响分析和评估,包括修改需求文档、设计、实现等工作成本
③ 变更实现
确定执行后,按开发过程模型执行相应变更

常见的需求变更策略:

  • 所有需求变更必须遵循变更控制过程
  • 对于未获得批准的变更,不应该做设计和实现工作
  • 应该由项目变更控制委员会(CCB)决定实现哪些变更
  • 项目风险承担者应该能够了解变更的内容
  • 绝不能从项目配置库中删除或修改变更请求的原始文档
  • 每一个集成的需求变更必须能跟踪到一个经核准的变更请求

💡 记忆口诀:"分析描述→成本计算→变更实现"三步走

🏛️ 变更控制委员会(CCB)⭐⭐⭐

变更控制委员会(Change Control Board, CCB)是项目所有者权益代表,负责裁定接受哪些变更。

CCB的特点:

  • CCB是决策机构,不是作业机构
  • 通常CCB的工作是通过评审手段来决定项目是否能变更
  • CCB不提出变更方案

CCB可能包括的代表:产品或计划管理部门、项目管理部门、开发部门、测试或质量保证部门、市场部或客户代表、用户文档编制部门、技术支持部门、桌面或用户服务支持部门、配置管理部门

⚠️ 易错点提醒:CCB是决策机构而非执行机构!它只负责评审和决策,不负责具体的变更实施工作。

5.2.7 需求跟踪

🔗 需求跟踪矩阵(RTM)⭐⭐⭐⭐⭐⭐

需求跟踪包括编制每个需求与系统元素之间的联系文档,这些元素包括其他需求、体系结构、其他设计部件、源代码模块、测试、帮助文件和文档等。

需求跟踪的两种方式:

跟踪方式
说明
正向跟踪
检查SRS中的每个需求是否都能在后继工作成果中找到对应点
逆向跟踪
检查设计文档、代码、测试用例等工作成果是否都能在SRS中找到出处

正向跟踪和逆向跟踪合称为"双向跟踪"。不论采用何种跟踪方式,都要建立和维护需求跟踪矩阵(表格)

💡 记忆口诀:"正向查需求是否落地,逆向查工作是否有据"

5.3 软件设计

🔑 核心概念:软件设计的目的是绘制软件的蓝图,权衡和比较各种技术和实施方法的利弊,合理分配各种资源,构建新的详细设计方案和相关模型,指导软件实施工作的顺利开展。需求阶段解决"做什么"的问题,软件设计阶段解决"怎么做"的问题。

5.3.1 结构化设计

🏗️ 结构化设计(SD)概述⭐⭐⭐

结构化设计(Structured Design, SD)是一种面向数据流的方法,其目的在于确定软件结构。SD是一个自顶向下、逐层分解、逐步求精和模块化的过程。

两个阶段:

  • 概要设计(总体结构设计):
    确定软件系统的结构,进行模块划分,确定每个模块的功能、接口和调
    用关系,形成软件的模块结构图(系统结构图)
  • 详细设计:
    为每个模块设计实现的细节,包括输入/输出设计、处理流程设计、数据
    存储设计、用户界面设计、安全性和可靠性设计等

🧩 模块的基本特性⭐⭐⭐

模块是实现功能的基本单位,具有3个基本属性

  • 功能:
    该模块"做什么"
  • 逻辑:
    描述模块内部"怎么做"
  • 状态:
    该模块使用时的环境和条件

模块的外部特性 vs 内部特性:

  • 外部特性:
    模块名、参数表、对程序乃至整个系统的影响
  • 内部特性:
    完成其功能的程序代码和仅供该模块内部使用的数据

对于模块的外部环境来说,只需要了解这个模块的外部特性就足够了,不必了解它的内部特性。

🔗 模块的耦合类型(7种)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

耦合表示模块之间联系的程度。耦合度从低到高排序(越好→越差):

耦合类型
描述
优劣
非直接耦合
两个模块之间没有直接关系,完全通过上级模块的控制和调用实现
最好
数据耦合
一组模块借助参数及传递简单数据
很好
标记耦合
一组模块通过参数传递记录等复杂信息(数据结构)
较好
控制耦合
模块之间传递的信息中包含控制模块内部逻辑的信息
中等
外部耦合
一组模块共用了一组输入信息,或者它们的输出需要整合以形成完整数据
较差
公共耦合
多个模块都访问一个公共数据环境(全局数据结构、共享通信区、内存公共覆盖区)
内容耦合
一个模块直接访问另一个模块的内部数据;或不通过正常入口转到另一个模块内部;或两个模块有一部分程序代码重叠;或一个模块有多个入口
最差

💡 记忆口诀(从好到差):"非数标控外公内"——非直接→数据→标记→控制→外部→公共→内容

📝 历年真题示例:以下哪种耦合类型是最差的?A. 数据耦合   B. 控制耦合   C. 公共耦合   D. 内容耦合答案:D(内容耦合是最差的耦合类型)

⚙️ 模块的内聚类型(7种)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

内聚表示模块内部各成分之间联系的紧密程度。内聚度从高到低排序(越好→越差):

内聚类型
描述
优劣
功能内聚
完成一个单一功能,各个部分协同工作,缺一不可
最好
顺序内聚
处理元素相关,而且必须顺序执行
很好
通信内聚
所有处理元素集中在一个数据结构的区域上
较好
过程内聚
处理元素相关,而且必须按特定的次序执行
中等
时间内聚
所包含的任务必须在同一时间间隔内执行
较差
逻辑内聚
完成逻辑上相关的一组任务
偶然内聚
完成一组没有关系或松散关系的任务
最差

设计原则:"高内聚、低耦合"——系统中各模块的内聚越高,则模块间的耦合就越低。

💡 记忆口诀(从好到差):"功顺通过时逻偶"——功能→顺序→通信→过程→时间→逻辑→偶然

⚠️ 易错点提醒:内聚是从高到低排序(功能内聚最好),耦合是从低到高排序(非直接耦合最好)。不要混淆两者的排序方向!

📐 详细设计的工具⭐⭐

详细设计的表示工具有图形工具表格工具语言工具三类:

1) 图形工具:

  • 业务流程图:
    描述管理系统内各单位、人员之间的业务关系、作业顺序和管理信息流向
  • 程序流程图(程序框图):
    使用最广泛的描述程序逻辑结构的工具
  • NS流程图(盒图/方框图):
    强制使用结构化构造的图示工具,功能域明确、不可能任意转移控制
  • PAD图(问题分析图):
    改进的图形描述方式,能够反映自顶向下的历史和过程

2) 表格工具:用一张表描述过程的细节,列出各种可能的操作和相应的条件

3) 语言工具:用高级语言描述过程的细节,如伪码或PDL(Program Design Language)

5.3.2 面向对象设计

🎨 面向对象设计(OOD)原则 ⭐⭐⭐⭐⭐⭐⭐⭐

面向对象设计(Object-Oriented Design, OOD)是OOA方法的延续,其基本思想包括抽象、封装和可扩展性(主要通过继承和多态实现)。

常用的OOD七大设计原则⭐⭐⭐⭐⭐:

原则名称
核心思想
单一职责原则
一个类应该有且仅有一个引起它变化的原因
开闭原则
对扩展开放,对修改封闭
里氏替换原则
子类可以替换父类,但不能改变父类原有的功能
依赖倒置原则
要依赖抽象,而不是具体实现;针对接口编程
接口隔离原则
使用多个专门的接口比使用单一的总接口要好
组合重用原则
要尽量使用组合,而不是继承关系达到复用目的
迪米特原则(最少知识法则)
一个对象应当对其他对象有尽可能少的了解

💡 记忆口诀:"单开里依接组迪"——单一职责、开闭、里氏替换、依赖倒置、接口隔离、组合重用、迪米特

📦 OOD中的三种类⭐⭐⭐

类的类型
说明
特征
实体类
映射需求中的每个实体,保存需要存储在永久存储体中的信息
通常永久存在,一定有属性但不一定有操作
控制类
用于控制用例工作的类
通常没有属性但一定有方法,用例执行完毕后消亡
边界类
封装在用例内外流动的信息或数据流
可以既有属性也有方法

💡 记忆口诀:"实体存数据,控制管逻辑,边界做交互"

5.3.3 统一建模语言UML

🎭 UML的结构 ⭐⭐⭐⭐⭐⭐⭐⭐

统一建模语言(Unified Modeling Language, UML)是一种定义良好、易于表达、功能强大且普遍适用的建模语言。

UML的结构包括3个部分

部分
说明
构造块
事物(thing)、关系(relationship)、图(diagram)
规则
命名、可见性、完整性、执行
公共机制
规格说明(详细说明)、修饰、公共分类(划分)、扩展机制

🎨 UML中的事物(建模元素)⭐⭐⭐

事物类型
说明
包含内容
结构事物
模型中静态的部分,代表概念上或物理上的元素
类、接口、协作、用例、活动类、构件、节点(共7种)
行为事物
模型中的动态部分,代表时间和空间上的动作
交互(消息交换)、状态机(对象的状态)
分组事物
模型中的组织部分
包(Package)
注释事物
模型的解释部分
注解(Note)

🔗 UML中的四种关系 ⭐⭐⭐⭐⭐⭐⭐⭐

关系类型
说明
表示符号
依赖(Dependency)
两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义
-----> 虚线箭头
关联(Association)
一种对象和另一种对象有联系
——— 实线
泛化(Generalization)
一般元素和特殊元素之间的分类关系(继承关系)
▷—— 空心三角箭头
实现(Realization)
将不同的模型元素连接起来,一个类指定了由另一个类保证执行的契约
- - -▷ 虚线空心三角

💡 记忆口诀:"赖关联泛实"——依赖、关联、泛化、实现

📊 UML 2.0的14种图 ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

图的种类
说明
视图类型
类图(Class Diagram)
描述一组类、接口、协作和它们之间的关系
静态设计视图
对象图(Object Diagram)
描述一组对象及它们之间的关系,类图中事物的实例快照
静态设计视图/进程视图
构件图(Component Diagram)
描述封装的类及其接口、端口、内部结构
静态设计实现视图
组合结构图(Composite Structure Diagram)
描述类中的内部构造
-
用例图(Use Case Diagram)
描述用户与系统交互的简化表示形式
静态用例视图
顺序图(Sequence Diagram)
强调消息时间次序的交互图
动态视图
通信图(Communication Diagram)
强调收发消息的对象或参与者的结构组织
动态视图
定时图(Timing Diagram)
描述对象随时间变化的状态或值,强调实际时间
动态视图
状态图(State Diagram)
描述实体基于事件反应的动态行为
动态视图
活动图(Activity Diagram)
将进程或其他结构展示为计算内部一步步的控制流和数据流
动态视图
部署图(Deployment Diagram)
描述运行时的处理节点及在其中生存的构件的配置
静态部署视图
制品图(Artifact Diagram)
描述计算机中一个系统的物理结构(文件、数据库等)
-
包图(Package Diagram)
描述由模型本身分解而成的组织单元及它们之间的依赖关系
-
交互概览图(Interaction Overview Diagram)
活动图和顺序图的混合物
-

💡 记忆口诀(14种图):"类对构组用,顺通定时状活,部制品包交"类图、对象图、构件图、组合结构图、用例图、顺序图、通信图、定时图、状态图、活动图、部署图、制品图、包图、交互概览图

📝 历年真题示例:以下哪种图属于UML 2.0的交互图?A. 类图   B. 顺序图   C. 状态图   D. 部署图答案:B(交互图包括:顺序图、通信图、定时图、交互概览图)

🖼️ UML的4+1视图 ⭐⭐⭐⭐⭐⭐⭐⭐

视图名称
说明
对应关系
逻辑视图(设计视图)
用系统静态结构和动态行为展示系统内部的功能如何实现
类、子系统、包、用例实现
进程视图
可执行线程和进程作为活动类的建模,描述并发与同步结构
逻辑视图的一次执行实例
实现视图(开发视图)
对组成基础系统的物理代码的文件和构件进行建模
代码文件、构件
部署视图
把构件部署到一组物理节点上,表示软件到硬件的映射和分布
物理节点、网络配置
+ 用例视图(场景视图)
最基本的需求分析模型,从外部角色的视角展示系统功能
用例、参与者

💡 记忆口诀:"逻辑进程实现部署,外加用例场景全" —— 4+1视图

5.3.4 设计模式

🏛️ 设计模式三大类23种模式 ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

设计模式是前人经验的总结,使人们可以方便地复用成功的软件设计。根据目的和用途不同,设计模式分为3大类

📦 一、创建型模式(5种)——主要用于创建对象

模式名称
说明
工厂方法模式(Factory Method)
定义一个创建对象的接口,让子类决定实例化哪一个类
抽象工厂模式(Abstract Factory)
创建一系列相关或相互依赖的对象接口
单例模式(Singleton)
确保一个类只有一个实例,并提供全局访问点
建造者模式(Builder)
将复杂对象的构建与其表示分离
原型模式(Prototype)
通过复制原型对象创建新对象

🔗 二、结构型模式(7种)——主要用于处理类或对象的组合

模式名称
说明
适配器模式(Adapter)
将一个类的接口转换成客户希望的另一个接口
桥接模式(Bridge)
将抽象部分与实现部分分离
组合模式(Composite)
将对象组合成树形结构以表示"部分-整体"层次结构
装饰器模式(Decorator)
动态地给对象添加额外的职责
外观模式(Facade)
为子系统中的一组接口提供一个统一的界面
享元模式(Flyweight)
运用共享技术有效地支持大量细粒度的对象
代理模式(Proxy)
为其他对象提供一种代理以控制对这个对象的访问

⚡ 三、行为型模式(11种)——主要用于描述类或对象的交互以及职责分配

模式名称
说明
解释器模式(Interpreter)
给定一种语言,定义它的文法表示
模板方法模式(Template Method)
定义算法骨架,将某些步骤延迟到子类
责任链模式(Chain of Responsibility)
将请求沿着链传递直到有对象处理它
命令模式(Command)
将请求封装成对象
迭代器模式(Iterator)
提供一种方法顺序访问聚合对象中的元素
中介者模式(Mediator)
用一个中介对象封装一系列对象的交互
备忘录模式(Memento)
捕获并恢复对象的内部状态
观察者模式(Observer)
定义对象间一对多的依赖关系
状态模式(State)
对象在其状态改变时改变其行为
策略模式(Strategy)
定义一系列算法,将每个算法封装起来
访问者模式(Visitor)
将算法与对象结构分离

💡 记忆口诀(23种模式):创建型(5):"工厂抽象单建原"——工厂方法、抽象工厂、单例、建造者、原型结构型(7):"适配桥组合装饰外观享元代理"——适配器、桥接、组合、装饰器、外观、享元、代理行为型(11):"解释模板责任命令迭代中介备忘观察状态策略访客"——11种模式

📝 历年真题示例:以下哪种设计模式属于创建型模式?A. 适配器模式   B. 单例模式   C. 观察者模式   D. 策略模式答案:B(单例模式属于创建型模式,A属结构型,C、D属行为型)

💡 适用于系统集成项目管理工程师考试复习 | 基于教材原文整理

⚠️ 本文档仅供学习参考,请结合官方教材使用