软件设计师备考笔记【day2】-软件工程

目录

一,开发模式

二,软件设计和分析

1,SRS(软件需求规格说明书)

2,软件设计的四大流程

[4,结构化分析(SA)------ 需求分析阶段核心方法](#4,结构化分析(SA)—— 需求分析阶段核心方法)

[5, 结构化设计(SD)------ 设计阶段核心方法](#5, 结构化设计(SD)—— 设计阶段核心方法)

三,软件测试

1,测试级别

2,测试方法

[3,McCabe 度量](#3,McCabe 度量)

(1)三种计算方法

(2)案列分析

四、软件质量特性

1,软件质量六大特性


软件工程三要素:方法,工具,过程

一,开发模式

模型 核心思想 关键特征 适用场景
瀑布模型 线性推进,一步到位 阶段清晰,文档驱动,变更成本高 需求明确、稳定、低风险的项目
原型模型 快速构建,验证需求 迭代快,用户参与度高,原型可抛弃或演化 需求不明确、模糊、创新的项目
增量模型 分块开发,分期交付 每次交付一个可用的功能子集 需要分阶段交付、快速上线的项目
螺旋模型 迭代开发,风险驱动(弥补瀑布+演化模型的不足) 每轮迭代都包含风险分析 规模大、复杂度高、高风险的项目

二,软件设计和分析

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类的整体,比如创建用户、修改信息、登录、注销,看用户状态变化是否正确
  • 模板 / 类簇层测试 :测试UserCartOrder这一组类的交互,比如用户登录后加购物车、下单,看类之间的调用是否正确
  • 系统层测试:测试整个电商系统,从用户浏览商品、下单、支付到收货的完整流程

四、软件质量特性

1,软件质量六大特性

功能性,可靠性,易用性,效率,可维护,可移植性(功能可靠易用,效率高,好维护,能移植

相关推荐
深蓝海拓2 小时前
Qt的HSL色彩系统
笔记·python·qt·学习
風清掦2 小时前
【江科大STM32学习笔记-11】SPI通信协议 - 11.2 硬件SPI读写W25Q64
笔记·stm32·单片机·嵌入式硬件·学习
sulikey2 小时前
个人Linux操作系统学习笔记1 - Linux权限与工具
linux·笔记·学习
Oll Correct10 小时前
实验二十一:验证OSPF可以划分区域
网络·笔记
pluviophile_s17 小时前
第18讲:⾃定义类型:结构体
c语言·笔记
Wyc7240918 小时前
软考笔记放大发
笔记
SHARK_pssm20 小时前
【数据结构——顺序表】
c语言·数据结构·经验分享·笔记
智者知已应修善业20 小时前
【51单片机ADC-MAX1241/ADC0832驱动】2023-6-6
c++·经验分享·笔记·算法·51单片机
Aliex_git20 小时前
Nuxt 学习笔记(一)
前端·笔记·学习