💻
QMMMS的笔记
博客
  • QMMMS的笔记
  • agent
    • MCP的背景、原理和开发
    • Agent 历史与背景
    • Agentic Workflows
    • 环境检查与基础工具
    • Tool Call
    • 工具与运行时的值
    • temp
    • 处理 Tool Call error
    • trick
  • algorithm
    • 线性结构
    • 二叉树
    • 图
    • 查找
    • 排序
    • 动态规划
    • 优化方法
    • 数学
    • 迁移至Java
  • computer_composition
    • 系统总线
    • 存储器
    • 输入输出系统
    • 计算机的运算方法
    • 指令系统
    • 补充
  • computer_network
    • 引入
    • 应用层
    • 传输层
    • 网络层(数据平面)
    • 网络层(控制平面)
    • 链路层
    • 常见问答
    • 实验
  • database
    • SQL实战
    • 关系代数
    • 数据库设计
    • 规范化
    • 数据库基本概念
    • 查询原理
    • 数据库恢复技术
    • 并发控制
  • dev_tools
    • Git
    • Nginx
    • Spring
    • LangChain
    • PyTorch Cheat Sheet
    • MyBatis
    • MySQL Cheat Sheet
    • MySQL 补充
    • Redis
    • Docker
    • RocketMQ
    • Chrome
  • linux
    • Linux基础命令与使用
    • 文件与权限
    • 文件与目录操作
    • 权限属性高级
    • 命令与文件的查找
    • 文件压缩和打包
    • vim编辑器
    • shell变量
    • 命令补充
    • 数据流重定向
    • 管道命令
    • shell脚本
    • 用户管理
    • 用户间交流
    • 计划任务
    • 进程管理
    • 软件管理
    • 认识系统服务
    • 运维常用命令
    • 常用命令
  • llm
    • 大规模语言模型概述
    • 分布式训练概述
    • 有监督微调概述
    • 强化学习与LLM
    • LLM评估概述
    • 大模型应用
    • 理解大模型
    • 量化
    • 预训练
    • 上下文学习
  • machine_learning
    • 引入
    • 大致正确学习
    • 一致收敛
    • 偏差还是过拟合?
    • 可学习的充要条件
    • 非均匀可学习性
    • 计算复杂性
  • mathematics
    • 概率与统计基础
    • 线性代数基础
  • operating_system
    • 操作系统基本概念
    • 进程和线程
    • 同步,互斥与死锁
    • 内存管理
    • 文件系统
    • I/O系统
    • 保护与安全
    • 《现代操作系统》
  • statistical_learning
    • 统计学习引入
    • 线性回归
    • 分类
    • 重抽样方法
    • 线性模型选择与正则化
    • 非线性模型
    • 基于树的方法
    • 支持向量机
    • 无指导学习
    • 马尔科夫链和蒙托卡罗方法简明理解
    • R语言速查
  • deep_learning
    • basic_concepts
      • 逻辑回归与损失函数
      • 神经网络
      • 正则化、预处理、权重初始化
      • 优化算法
      • 机器学习策略
      • 复习:从计算机视觉的角度
      • 卷积神经网络
      • 深度卷积网络示例
      • 计算机视觉任务
      • 循环神经网络
      • 自然语言处理任务
      • 注意力
      • Transformers 家族
      • 显卡扫盲
      • 强化学习概述
    • semi-supervise
      • 半监督学习简介
      • Consistency Regularization
      • Proxy-label Methods
      • Holistic Methods
      • Generative Models
      • Graph-Based SSL
      • Self-Supervision for SSL
      • Other SSL methods
  • programming
    • cpp
      • STL
      • C++基础
      • 内存管理
      • 面向对象
    • java
      • 环境和介绍
      • 注释
      • String
      • 面向对象思想
      • Object
      • 包
      • 访问权限修饰符
      • 初始化块
      • 接口
      • 内部类
      • 注解
      • 枚举
      • 集合框架
      • List
      • Map
      • 泛型
      • 迭代
      • IO与流
      • 序列化
      • 异常
      • Lambda
      • Stream流
      • Socket
      • 缓冲
      • 命名规范
      • 拆箱装箱
      • 值传递
      • 深拷贝
      • 反射
      • JVM
      • 并发编程基础
    • python
      • 并发编程
      • 环境管理
  • software_engineering
    • basic_concepts
      • 系统分析与设计概述
      • 规划
      • 需求分析与原型设计
      • 项目管理
      • 建模
      • 数据库设计
      • 架构
      • 配置管理
      • 测试管理
      • 安全
      • 编码原则
      • 微服务
      • 补充内容
    • software_testing
      • CMMI基础
      • PPQA与SQA
      • 软件测试基础
      • 黑盒测试
      • 白盒测试
      • 集成测试
      • 系统测试
      • 测开面试补充
由 GitBook 提供支持
在本页
  • 单元测试
  • 自动化功能测试
  • 性能测试
  • 探索测试
  • 兼容性测试
  • 代码检查
  • 代码重复
  • 代码风格
  • 圈复杂度
在GitHub上编辑
  1. software_engineering
  2. basic_concepts

测试管理

  • 黑盒测试,也可以称为功能测试、数据驱动测试或基于规格说明的测试。 测试者不了解程 序的内部情况,不需具备程序内部知识,只知道程序的输入、输出和系统的功能,这是从 用户的角度针对软件界面、功能及外部结构进行测试,而不考虑程序内部逻辑结构。 包括功能划分 等价类划分 边界值分析 因果分析 错误推测

  • 白盒测试,也称结构测试、逻辑驱动测试或基于程序本身的测试。 测试程序的内部结构和 运作,而不是测试应用程序的功能。包括语句覆盖 逻辑覆盖 分支覆盖

  • 动态测试通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、 正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、分析 程序的输出结果。 包括功能测试,接口测试,覆盖率分析,性能分析,内存分析等

  • 静态测试是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、 接口等来检查程序的正确性。包括代码检查 程序结构分析 代码质量度量等

单元测试

  • 测试最小软件设计单元,确保模块编码正确

  • 单元测试检查特定一段代码的功能,做功能测试 l 在面向对象编程中,单元测试一般在类级别做检查

  • 单元测试由开发者自己编写,检查一些代码分支和边界值,保证功能独立运 行正常

自动化功能测试

  • 自动化功能测试是指使用特定的软件控制测试执行,比对实际结果和期望结果,完成功能测试

  • 可以自动录制功能测试脚本,也可以人工编写自动化测试脚本

  • 自动录制功能测试脚本过程就是将人在软件上的操作录制,并转换成自动化工具可以识别的脚本的过程

  • 自动化功能测试过程就是回放人对软件的操作的过程,并比对实际结果和期望结果,判定测试是否通过。测试过程中可以用截屏、输出日志等形式记录测试过程。

性能测试

  • 性能测试为系统增加工作负载,收集性能参数,测试响应性和稳定性,用来研究、测量、检查和验证可伸缩性、可靠性和资源消耗等。性能测试测试软件在系统中的运行性能,度量系统与预定义目标的差距。主要指标包括:业务用户量、响应时间、吞吐量;机器CPU、IO、内存等

  • 负载测试:通过逐步增加系统负载,确定在满足性能指标的情况下,系统所能承受的最大负载量。

  • 压力测试:通过逐步增加系统 负载,确定在什么负载条件下系统处于失效状态,以此来获得系统能提供的最大服务级别。

  • 容量测试:确定系统可处理的同时最大在线用户数,给系统增加超额的负载检查它是否能正确处理。

探索测试

  • 探索测试是在进行软件测试时,同时学习测试对象,探索开发更多不同种类的测试方法,改善测试流程的一种测试方法。

  • 区别于即兴测试(Ad hoc测试),探索测试是一个有思考和学习的测试过程。

  • 区别于传统软件测试严格地“先设计,后执行”,探索性测试强调测试设计和测试执行的同时性。

兼容性测试

软件兼容性测试是检查程序和硬件及其他软件之间的兼容性的测试

代码检查

代码检查分为静态分析和动态分析(本课程主要介绍静态分析)

  • 静态分析(Static Program Analysis):在不运行计算机程序的条件下, 进行程序分析的方法。大部分的静态程序分析的对象是针对特定版本的源代 码,也有些静态程序分析的对象是目标代码。

  • 动态分析(Dynamic Program Analysis):在运行计算机程序的条件下, 进行程序分析的方法。

静态分析常用技术:

  • 词法分析:从左至右一个字符一个字符的读入源程序,对构成源程序的字符 流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号 (Token) 流,生成相关符号列表。

  • 语法分析:判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树。

  • 抽象语法树分析:将程序组织成树形结构,树中相关节点代表了程序中的相 关代码。

  • 语义分析:对结构上正确的源程序进行上下文有关性质的审查。

  • 控制流分析:生成有向控制流图,用节点表示基本代码块,节点间的有向边 代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图, 表示函数间的嵌套关系。

  • 数据流分析:对控制流图进行遍历,记录变量的初始化点和引用点,保存切 片相关数据信息。

  • 污点分析:基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序 输入、识别代码表达缺陷的关键。

  • 无效代码分析:根据控制流图可分析孤立的节点部分为无效代码。

代码重复

代码重复 (duplicate code) 在程序设计中表示一段源代码在一个程 序,或者一个团体所维护的不同程序中重复出现,是不希望出现的现 象。为避免巧合,只有一定数量的代码完全相同才能判定为代码重复。

代码风格

代码风格 (Programming style) 即程序开发人员所编写源代码的书写风格, 良好代码风格的特点是使代码易读。 代码风格的要素包括(但不限于)以下几点: 名字的使用(驼峰式大小写、标识符命名约定、匈牙利命名法);表达式与语句;常量的使用;注释的使用;缩进代码的布局

圈复杂度

圈复杂度 (Cyclomatic complexity) 是一种代码复杂度的衡量标准。通常使用的计算公式是:

V(G)=e−n+2V(G) = e - n + 2V(G)=e−n+2
  • e 代表在控制流图中的边的数量(对应代码中顺序结构的部分)

  • n 代表在控制流图中的节点数量,包括起点和终点(1、所有终点只计算一次,即便有多个return或者throw;2、节点对应代码中的分支语句)

public String case1(int index, String string) {
    String returnString = null;
    if (index < 0) {
    	throw new IndexOutOfBoundsException("exception <0 ");
    }
    if (index == 1) {
        if (string.length() < 2) {
        	return string;
        }
        	returnString = "returnString1";
    } else if (index == 2) {
        if (string.length() < 5) {
        	return string;
        }
        	returnString = "returnString2";
    } else {
    	throw new IndexOutOfBoundsException("exception >2 ");
    }
    return returnString;
}

虽然图上的真正节点有12个,但是其中有5个节点为throw、return,这样的节点为end节点,只能记做一个。根据公式 V(G) = e - n + 2 = 12 - 8 + 2 = 6 。

上一页配置管理下一页安全

最后更新于10个月前