前言
这个部分放一些牛客上算法以外的题
软件测试
软件测试主要包括单元测试、集成测试、确认测试和系统测试
语句覆盖:选择足够的测试用例,使程序中的每条语句至少执行一次。所谓足够的指的是越少越好
风险曝光度(riskexposure)= 错误出现率(风险出现率)x 错误造成损失(风险损失)
CPI(Clock Cycles per instruction):每条指令的平均时钟周期个数,在相同时钟周期下,CPI 越小程序速度越快。但一个程序在一台机器上 CPI 小也不一定对所有程序都在这台机器上运行的快,CPI 的大小和程序本身有关,不同程序在不同机器上可能有不同的运行速度。
QPS(每秒查询率):衡量服务器处理能力的性能指标,主要用于后端服务性能评估
性能测试工具:jmeter(幂等测试(重复提交))
提升测试效率缩短测试周期的有效手段:选择风险最大的场景进行测试覆盖
等价类划分
https://zhuanlan.zhihu.com/p/30576534277
等价类划分是一种将输入数据划分为若干等价类的测试方法。每个等价类中的输入数据在测试中具有相同的行为,因此只需从每个等价类中选择一个代表性数据进行测试即可。
有效等价类:符合输入条件的数据集合。
无效等价类:不符合输入条件的数据集合。
边界值分析
边界值分析是一种专注于输入范围边界值的测试方法。由于边界值往往是错误的高发区,因此测试边界值能够有效发现潜在缺陷。
- 边界值:输入范围的最小值、最大值以及边界附近的值。
- 边界值测试:测试边界值及其相邻值(如最小值-1、最小值、最大值、最大值+1)。
集成测试方式
https://www.cnblogs.com/cocomue/p/4474098.html
自顶向下
从主控模块开始,沿着程序控制层次向下移动,逐渐把各模块组合起来
- 对主控模块进行测试,用桩模块替代被主控模块调用的子模块
- 根据选定的策略(深度/广度),每次用一个实际模块代换一个桩模块
- 进行集成测试
- 为了保证加入的模块没有引进新的错误,根据需要进行回归测试。2-4循环。
自底向上
从软件结构最底层的模块开始组装和测试
- 把底层模块组合成实现某个特定子功能的族
- 编写测试驱动程序,协调测试数据的输入输出
- 对该子功能族进行测试
- 去掉测试驱动程序,自底向上移动,把子功能组合成更大的子功能族。2-4循环
还有结合这两种的三明治测试
前端性能指标
首字节加载时间(TTFB, Time To First Byte):反映了从浏览器发起请求到接收到第一个字节的时间,是衡量网络请求性能的重要指标。
DomReady时间:指DOM树构建完成的时间点,表示页面可以进行DOM操作的最早时机,是前端性能优化的重要参考。
页面完全加载时间(Page Load Time):指从开始请求到页面所有资源都加载完成的总时间,全面反映了用户等待页面加载的体验。
界面元素测试
- 文本内容
- 布局样式
- 不同设备和屏幕尺寸下的显示效果
软件可靠性
- 容错性:指软件在发生故障或违反接口规范的情况下,仍然能够保持规定性能水平的能力
- 成熟性:指在正常使用情况下,软件避免由软件缺陷导致故障的能力
- 易恢复性:指在发生故障时,软件能够恢复受影响的数据并重建期望的系统状态的能力
- 可靠性依从性:指软件产品遵守与可靠性相关的标准、约定或法规的能力
测试模型
https://www.cnblogs.com/luodatou/p/5462837.html
V型:
W型:
H型:
测试驱动开发 TDD
原理:在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码
基本思路:通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。
目的:不仅仅是测试软件,测试工作保证代码质量仅仅是其中一部分,而且是在开发过程中帮助客户和程序员去除模棱两可的需求
TDD 首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。
覆盖标准
- 语句覆盖:最基本的覆盖标准,只要求每条语句至少执行一次。覆盖率最低
- 判定覆盖:要求判定结果的每个可能取值(真/假)都至少执行一次。比语句覆盖严格,但仍不够充分
- 条件覆盖:要求判定中每个条件的可能取值都至少执行一次。但无法保证所有组合都被测试到
- 条件组合覆盖:要求判定中所有条件的各种可能组合都要执行到。比如对于条件
a && b
,需要测试(真,真)(真,假)(假,真)(假,假)
四种组合。这种覆盖最为全面和严格。