【软考中级:软件评测师】软件工程核心知识点全梳理

发布于:2025-06-26 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、软件工程基础体系

软件工程是系统性构建软件的工程学科,核心围绕**“开发流程→设计原则→持续迭代”** 形成技术闭环,涵盖以下模块:

1. 软件工程三要素:方法·工具·过程

软件工程的实施依赖“方法-工具-过程”的协同支撑,共同定义开发的技术路径:

  • 方法:指导开发的技术体系(如结构化分析、面向对象设计等方法论);
  • 工具:自动化辅助开发的载体(如IDE、Git、Jira等);
  • 过程:定义开发各阶段的流程与规范(如瀑布模型、敏捷开发等)。
2. 软件生存周期:阶段划分与核心任务

软件从立项到退役的全生命周期,需经历6大核心阶段(线性递进关系),明确各阶段目标与交付物:

  1. 可行性分析与项目开发计划:评估技术、经济、时间可行性,输出开发计划;
  2. 需求分析:梳理用户需求,输出《需求规格说明书》;
  3. 概要设计:搭建系统架构,划分模块及接口;
  4. 详细设计:细化模块内部逻辑(如算法、数据结构);
  5. 编码:将设计转化为可执行代码;
  6. 测试和维护:验证软件质量,修复缺陷并迭代优化。
3. 模块设计:内聚与耦合的设计原则

模块是软件的基本组成单元,内聚(模块内部聚合度)耦合(模块间依赖度) 是衡量设计质量的核心指标,直接影响软件可维护性与扩展性。

(1)模块内聚:从低到高的7级分类

内聚描述模块内部元素的关联紧密程度,等级越高,模块独立性与复用性越强:

  1. 偶然内聚:模块内动作无逻辑关联,仅物理上聚合;
  2. 逻辑内聚:模块内动作逻辑相似,但功能用途无关;
  3. 时间内聚:模块内动作需在同一时间执行(如初始化操作);
  4. 过程内聚:模块内动作按特定顺序执行(无数据依赖);
  5. 通信内聚:模块内动作共享同一数据或输出;
  6. 顺序内聚:前一动作输出是后一动作输入(数据强关联);
  7. 功能内聚:模块内动作协同完成单一功能,各部分缺一不可。
(2)模块耦合:从低到高的7级分类

耦合描述模块间的依赖程度,等级越低,模块间干扰越小:

  1. 非直接耦合:模块无直接关联,通过主模块控制调用;
  2. 数据耦合:模块间通过参数传递简单数据;
  3. 标记耦合:模块间传递数据结构的子结构(非简单变量);
  4. 控制耦合:模块间传递控制信息(如开关量、标志位);
  5. 外部耦合:模块依赖同一全局数据(非参数传递);
  6. 公共耦合:模块间共享公共数据区域;
  7. 内容耦合:模块需访问另一模块内部信息(强依赖,需避免)。
4. 软件维护的四种类型:迭代与优化逻辑

软件交付后需持续维护,按目标分为四类,覆盖“缺陷修复→环境适配→功能增强→风险预控”全场景:

  1. 正确性维护:修复交付后发现的缺陷(如逻辑错误、安全漏洞);
  2. 适应性维护:使软件适配环境变化(如系统升级、政策法规调整);
  3. 完善性维护:增强软件功能或性能(如响应用户新需求、优化性能);
  4. 预防性维护:提前修复潜在缺陷(在问题爆发前主动优化,降低未来风险)。

二、软件开发方法体系

聚焦“结构化”与“面向对象”两大开发方法,解析其技术定位与实践逻辑。

1. 结构化开发方法:数据流驱动的传统范式

结构化开发方法是面向数据流的经典软件工程方法,以“数据流”为核心串联需求分析与系统设计,核心包含两大模块:

(1)结构化开发方法本质
  • 核心逻辑:以数据流为中心,通过“数据输入→加工→输出”的线性流程,拆解复杂系统的开发过程;
  • 方法论特征:属于“传统软件工程”范畴,强调流程化、标准化的开发步骤。
(2)结构化分析(SA):自顶向下的系统拆解

SA是结构化开发的核心分析手段,遵循 “自顶向下,逐层分解” 原则,最终输出四类核心产物:

SA 输出产物 核心定义与作用
分层数据流图(DFD) 系统逻辑模型的可视化工具,描述“输入数据流→加工→输出数据流”的转化过程;
组成元素:数据流、加工、数据存储、外部实体
数据字典(DD) 定义系统数据的元信息,包含4类条目:数据流条目、数据项条目、数据存储条目、基本加工条目
小说明(加工逻辑) 详细描述DFD中“加工”环节的业务规则与操作逻辑
补充材料 辅助说明系统边界、非功能需求等额外信息
2. 面向对象开发方法:对象与模型驱动的创新范式

面向对象开发方法以**“对象(数据+行为封装)”** 为核心,通过UML建模实现系统的静态结构与动态行为表达,覆盖四大维度:

(1)UML:统一建模语言

UML是面向对象开发的标准化建模工具,其词汇表由三类构造块组成:事务(系统核心元素)、关系(元素间关联规则)、图(可视化载体),是需求分析与设计的“通用语言”。

(2)静态建模:刻画系统结构

静态建模聚焦“系统组件的静态关系”,核心产出物为4类UML图:

  • 类图:描述类(属性+方法)及类间关系(关联、继承、依赖);
  • 对象图:类图的实例化快照,展示某一时刻对象的状态与交互;
  • 构建图:描述软件物理组件(如Jar包、DLL)的部署与依赖;
  • 配置图:描述硬件节点与软件组件的映射关系(如服务器→服务进程)。
(3)动态建模:刻画行为交互

动态建模聚焦“系统组件的动态行为”,核心产出物为5类UML图:

  • 用例图:描述用户与系统的交互场景(需求层面);
  • 状态图:描述对象生命周期内的状态转移(如订单从“创建”到“完成”);
  • 活动图:描述业务流程的步骤与分支(如审批流程的并行/串行逻辑);
  • 顺序图:按时间顺序展示对象间的消息交互(如电商下单的时序流程);
  • 协作图:按空间结构展示对象间的协作关系(侧重角色与连接)。
(4)用例的委托扩展:包含与扩展

用例间的复用与扩展通过**“包含”** 和 “扩展” 两种方式实现:

  • 包含(Include):基础用例强制依赖分解用例(如“下单”必须包含“验证支付信息”);
  • 扩展(Extend):基础用例可选扩展分支用例(如“酒店预订”可扩展“特殊需求申请”)。
3. 两种方法的技术定位与互补性
  • 结构化开发:适合数据流清晰、业务逻辑线性的系统(如传统MIS系统),优势是流程可控、文档完备;
  • 面向对象开发:适合业务复杂度高、需求易变的系统(如互联网中台、工业物联网),优势是模块化、可维护性强;
  • 互补实践:现代软件工程常“结构化做需求分解,面向对象做设计实现”,通过方法论融合提升开发效率。

三、软件过程与项目管理

聚焦“过程管理(规范开发流程)”与“项目管理(保障交付质量)”,是软件工程落地的关键支撑。

1. 软件过程管理:标准化开发的“指南针”

软件过程管理聚焦“如何规范软件组织的开发流程”,核心覆盖 CMM(能力成熟度模型)UP(统一过程模型) 两大框架。

(1)CMM:软件能力成熟度模型

CMM 是对软件组织进化阶段的描述,将软件过程改进划分为 5个成熟度级别,体现组织从“无序开发”到“持续优化”的进阶:

成熟度级别 核心特征
初始级 过程无序,依赖个人能力
可重复级 基础流程固化,可重复成功经验
已定义级 全流程标准化,文档化管理
已管理级 过程量化可控,数据驱动改进
优化级 持续迭代优化,主动预防风险
(2)UP:统一过程模型

UP 是“用例和风险驱动、以架构为中心、迭代增量式”的开发过程,由 UML 方法/工具支撑,典型代表为 RUP(Rational Unified Process)。其定义 4个技术阶段+制品,覆盖项目全生命周期:

技术阶段 核心输出
起始阶段 确定项目愿景与可行性
精化阶段 构建架构原型,明确需求边界
构建阶段 大规模开发与测试,交付可运行版本
移交阶段 产品部署、用户培训与验收
2. 软件项目管理:落地交付的“脚手架”

软件项目管理聚焦“如何保障项目按时、按质、按预算完成”,核心覆盖 生命周期、里程碑、项目估算、进度管理 四大维度。

(1)项目管理与软件生命周期

软件项目需经历 “立项→开发→运维→消亡” 四个阶段,各阶段目标明确且环环相扣:

  • 立项:论证项目价值,确定资源与范围;
  • 开发:需求分析、设计、编码、测试的全流程实现;
  • 运维:上线后持续迭代、故障修复与性能优化;
  • 消亡:产品退役或重构,完成资产归档与交接。
(2)里程碑:项目节点的“锚点”

里程碑是持续时间为0的任务,用于标记项目关键节点(如“需求评审通过”“架构原型交付”),是进度跟踪与风险预警的核心参考点。

(3)项目估算:成本与规模的“计算器”

项目估算是制定开发计划的基础,核心围绕人力、费用、代码规模展开:

  • 开发费用公式

    • 基于人力:开发费用 = 人月数 × 每人月代价
    • 基于代码:开发费用 = 源代码行数 × 每行平均费用

    在这里插入图片描述

(4)进度管理:时间维度的“指挥官”

进度管理通过工具与方法保障项目节奏,核心覆盖 甘特图pert图/网络图/活动图 两类工具:

  • 甘特图:以“时间轴+任务条”可视化进度,但无法体现任务间的制约关系(如任务A必须在任务B完成后启动),适合简单项目的进度跟踪。
  • pert图/网络图/活动图:通过“节点(任务)+箭头(依赖)”描述任务逻辑,核心关注 关键路径松弛时间
    • 关键路径:项目中持续时间最长的路径,直接决定项目完工工期;
    • 松弛时间:在不影响关键路径的前提下,任务可延迟启动的最大时间窗口(公式:松弛时间 = 包含该任务的最长路径 - 关键路径时长)。

四、设计模式与UML类图

设计模式提供“可复用的对象交互方案”,UML类图提供“可视化的结构与行为表达”,两者深度绑定,是架构解耦、系统扩展的核心技术抓手。

1. 23种设计模式分类与核心关键词

设计模式按“创建、结构、行为”三维度划分,覆盖系统解耦、复用、扩展等需求:

(1)创建型模式(5种):控制对象创建逻辑

聚焦“对象如何创建”,封装创建细节以提升灵活性:

模式 核心关键词 作用
抽象工厂模式 AbstractFactory 批量创建系列化产品
生成器模式 Builder 分步构建复杂对象
工厂方法模式 Factory Method(Product、Creator) 子类决定具体产品创建
原型模式 Prototype 基于原型克隆生成对象
单例模式 Singleton 全局唯一实例控制
(2)结构型模式(7种):组织类与对象的结构

通过“组合、代理、装饰”等方式优化类结构,实现解耦与扩展:

模式 核心关键词 作用
适配器模式 Adaptee、Adapter 转换接口适配不同组件
桥接模式 Abstraction、Implementor 分离抽象与实现,双向独立扩展
组合模式 Composite 树形结构统一管理整体与部分
装饰模式 Decorator 动态扩展对象职责(透明增强)
外观模式 Facade 封装子系统,提供统一访问入口
享元模式 Flyweight 共享细粒度对象,减少内存开销
代理模式 Proxy 控制对象访问(远程/保护代理等)
(3)行为型模式(11种):协调对象间交互

规范对象间通信与职责分配,提升系统行为的可维护性:

模式 核心关键词 作用
责任链模式 Handler 请求链式传递,解耦发送者与接收者
命令模式 Command 封装请求为对象,支持撤销/重做
解释器模式 Interpreter(AbstractExpression) 自定义语言的语法解析与执行
迭代器模式 Iterator 统一遍历集合(无需暴露内部结构)
中介者模式 Mediator 集中管理对象交互,减少组件间耦合
备忘录模式 Memento 捕获对象状态,支持回退(快照机制)
观察者模式 Observer 对象状态变化时,自动通知依赖者
状态模式 State 对象状态驱动行为变化(状态机封装)
策略模式 Strategy 算法族动态切换(如排序策略替换)
模板方法模式 Template Method(AbstractClass、ConcreteClass) 定义算法骨架,子类实现步骤
访问者模式 Visitor 分离数据结构与操作,支持灵活扩展操作
2. UML类图五大核心关系(语义+表示)

UML类图通过依赖、实现、泛化、关联、聚集五种关系,描述类/接口间的语义关联:

(1)依赖(Dependency)
  • 语义:两个事物间的弱关联,独立事物变化会影响依赖方语义(如类A调用类B的方法/属性)。
  • 表示:虚线 + 箭头(箭头指向被依赖的事物)。
(2)实现(Realization)
  • 语义:类元(如类与接口)间的契约关系,一个类元约定接口,另一个类元实现该契约。
  • 表示:虚线 + 空心箭头(箭头指向被实现的接口)。
(3)泛化(Generalization)
  • 语义:特殊与一般的继承关系(如子类继承父类),子类对象可替代父类对象。
  • 表示:实线 + 空心箭头(箭头指向父类或抽象类)。
(4)关联(Association)
  • 语义:对象间的结构化链接(如“用户”与“订单”的关联),可附加多重度(1对1、1对多等)。
  • 表示:实线 + 箭头(若省略箭头则为双向关联)。
(5)聚集(Aggregation)
  • 语义:特殊的关联,描述“整体 - 部分”关系(部分可独立于整体存在,如“电脑”与“键盘”)。
  • 表示:实线 + 空心菱形(菱形指向代表“整体”的类)。
3. 设计模式与UML关系的典型关联

部分设计模式的实现逻辑,直接映射UML关系的语义与表示:

(1)责任链模式(Chain of Responsibility)
  • UML体现:通过关联关系将多个处理对象连成链(如Handler类之间的关联),请求沿链传递直到被处理。
(2)适配器模式(Adapter)
  • UML体现:通过依赖/实现关系,让适配器类(Adapter)依赖被适配类(Adaptee),同时实现目标接口,完成接口转换。
(3)桥接模式(Bridge)
  • UML体现:通过关联关系分离抽象层(Abstraction)与实现层(Implementor),让两者可独立扩展(如抽象类关联实现接口)。
(4)装饰模式(Decorator)
  • UML体现:通过关联/聚集关系,让装饰类(Decorator)持有被装饰对象(Component),动态附加职责(如IO流的嵌套装饰)。

如果这篇考点拆解帮你理清了知识脉络,点击右上角「关注」,后续将输出更多软件测试技术干货


网站公告

今日签到

点亮在社区的每一天
去签到