目录
[4,结构化分析(SA)------ 需求分析阶段核心方法](#4,结构化分析(SA)—— 需求分析阶段核心方法)
[5, 结构化设计(SD)------ 设计阶段核心方法](#5, 结构化设计(SD)—— 设计阶段核心方法)
[3,McCabe 度量](#3,McCabe 度量)
软件工程三要素:方法,工具,过程
一,开发模式
| 模型 | 核心思想 | 关键特征 | 适用场景 |
|---|---|---|---|
| 瀑布模型 | 线性推进,一步到位 | 阶段清晰,文档驱动,变更成本高 | 需求明确、稳定、低风险的项目 |
| 原型模型 | 快速构建,验证需求 | 迭代快,用户参与度高,原型可抛弃或演化 | 需求不明确、模糊、创新的项目 |
| 增量模型 | 分块开发,分期交付 | 每次交付一个可用的功能子集 | 需要分阶段交付、快速上线的项目 |
| 螺旋模型 | 迭代开发,风险驱动(弥补瀑布+演化模型的不足) | 每轮迭代都包含风险分析 | 规模大、复杂度高、高风险的项目 |
二,软件设计和分析
1,SRS(软件需求规格说明书)
SRS 是需求分析阶段产出的正式文档
包含内容:
-
功能需求(系统能干什么)
-
非功能需求(性能、安全、易用、可靠性)
-
数据需求
-
接口需求
-
业务约束、运行环境、开发限制
2,软件设计的四大流程
-
概要设计(总体设计):划分系统模块、定义模块功能、模块间接口、整体架构设计。
-
详细设计:对每个模块内部设计:算法、数据结构、逻辑流程、伪代码、流程图。
-
接口设计:系统内部接口、外部对接接口、前后端接口、软硬件接口规范。
-
数据设计:数据库结构、表设计、数据字典、数据存储、数据流转设计。
核心:基于"自顶向下、逐步分解"的思想,将复杂系统拆解为简单模块,分为结构化分析(SA)和结构化设计(SD)两部分
4,结构化分析(SA)------ 需求分析阶段核心方法
(1)核心目标:明确系统的功能需求,梳理系统与外部的交互,产出规范的需求文档。
(2)常用工具:数据流图(DFD)、数据字典(DD)、判定表、判定树。
(3)核心要素
-
数据流图(DFD):描述系统中数据的流动、处理逻辑,由外部实体、处理、数据流、数据存储组成(下午题常考绘制/补充)。
-
数据字典(DD):定义DFD中所有数据项、数据流、数据存储的详细信息,是DFD的补充说明。
(4)三大核心建模:
-
功能建模 → 数据流图 DFD
-
数据建模 → 实体联系图 E-R 图
-
行为建模 → 状态转换图 (状态图)
(5)数据流图
-
四大核心元素:外部实体、加工、数据流、数据存储
-
DFD 分层:顶层→0 层→低层,父子图平衡
-
核心原则:
-
有入必有出:一个加工,不能只有输入、没有输出;也不能只有输出、没有输入。
-
逐层分解、自顶向下:顶层 → 0 层 → 低层,层层细化,分解到功能单一、简单为止。
-
禁止直接连通
- 外部实体 ⇄ 数据存储:不能直连,必须经过加工
- 数据存储 ⇄ 数据存储:不能直连,必须经过加工
- 外部实体 ⇄ 外部实体:不能直连,必须经过加工
-
5, 结构化设计(SD)------ 设计阶段核心方法
-
核心目标:将结构化分析的结果转化为系统的模块结构,遵循"高内聚、低耦合"原则。
-
分类:
-
概要设计:划分系统模块,确定模块间的接口和模块功能,产出模块结构图(层次图、HIPO图)。
-
详细设计:设计每个模块的内部逻辑、算法、数据结构,产出详细设计说明书(如流程图、伪代码)。
-
-
核心原则:高内聚、低耦合(与后续内聚耦合知识点呼应,必背)。
三,软件测试
1,测试级别
(1)单元测试
-
目的:验证模块内部逻辑、语法正确性,确保单个模块可正常运行。
-
责任人:开发人员(自测),避免模块内部出错影响整体系统。
(2)集成测试
-
目的:验证模块间通信、数据传递是否正常,接口是否兼容。
-
常用方法:自顶向下(从主模块开始,逐步集成底层模块)、自底向上(从底层模块开始,逐步集成到主模块)。
(3)系统测试
-
目的:验证系统整体功能、性能是否符合需求规格说明书。
-
测试内容:功能测试、性能测试、兼容性测试、安全性测试。
(4)验收测试
-
目的:用户确认系统是否满足实际使用需求,是否可正式交付。
-
分类:Alpha测试(开发环境,内部测试)、Beta测试(用户环境,公测)。
2,测试方法
(1)黑合测试:功能测试,不关注内部代码
(2)白盒测试:结构测试,关注内部代码逻辑
3,McCabe 度量
McCabe 度量 = 环路复杂度度量
用来衡量:程序逻辑复杂程度
(1)三种计算方法
| 方法 | 公式 | 适用场景 |
|---|---|---|
| 方法 1:区域数法 | 环路复杂度 = 流程图中的区域数(包括最外层的外部区域) | 有清晰流程图,一眼能数清区域 |
| 方法 2:边 - 节点公式 | 环路复杂度 = E - N + 2 (E = 边数,N = 节点数) |
流程图 / 程序图,能数清节点和边 |
| 方法 3:判定节点法 | 环路复杂度 = 判定节点数 + 1 (判定节点:出度≥2 的节点,比如 if/while/for/and/or 的条件) |
代码或流程图,能快速找出所有判断 |
(2)案列分析

- 方法 1(区域数法):数一下流程图里的封闭区域,一共 3 个内部区域,加上外部区域,总区域数 = 4。
- 方法 2(边 - 节点公式):节点数 N:开始、语句 1、判断 1、语句 2、判断 2、判断 3、语句 4、语句 3、语句 5、语句 6、结束 → 共 11 个节点边数 E:14 条边环路复杂度 = 14-11+2=4
- 方法 3(判定节点法):判定节点:判断 1、判断 2、判断 3,共 3 个判定节点 → 复杂度 = 3+1=4

判定节点数 = 3(判断 1、判断 2、判断 3)→ 复杂度 = 3+1=4
4,面向对象测试的 4 个核心层次
| 测试层次 | 核心测试对象 | 对应传统测试阶段 | 核心目标 |
|---|---|---|---|
| 方法层(方法测试) | 类中定义的单个方法 | 单元测试(函数级) | 测试每个方法的逻辑、输入输出是否正确 |
| 类层(类测试) | 单个类的整体(所有方法 + 属性) | 单元测试(模块级) | 测试类的实例化、方法间交互、状态变化是否正确 |
| 类簇层(模板 / 集成测试) | 一组协同工作的类簇(多个相关类) | 集成测试 | 测试类之间的调用、消息传递、依赖关系是否正确 |
| 系统层(系统测试) | 整个面向对象系统 | 系统测试 | 测试系统整体功能、性能、兼容性等 |
比如我们要做一个 "电商系统":
- 方法层测试 :测试
User类里的login()方法,输入正确 / 错误密码,看是否能正确登录 - 类层测试 :测试
User类的整体,比如创建用户、修改信息、登录、注销,看用户状态变化是否正确 - 模板 / 类簇层测试 :测试
User、Cart、Order这一组类的交互,比如用户登录后加购物车、下单,看类之间的调用是否正确 - 系统层测试:测试整个电商系统,从用户浏览商品、下单、支付到收货的完整流程
四、软件质量特性
1,软件质量六大特性
功能性,可靠性,易用性,效率,可维护,可移植性(功能可靠易用,效率高,好维护,能移植)