测试基本理论

1.软件测试流程

需求分析:测试团队分析需求与功能点,明确测试范围与优先级,输出测试需求清单。

测试计划:明确测试范围,人员,资源,时间节点,风险等。

测试设计:编写测试用例,准备测试数据,搭建测试环境。

测试执行:执行测试用例,记录测试结果,提交bug。

缺陷跟踪:跟踪缺陷修复情况,回归测试已修复缺陷。

测试总结与报告:汇总测试数据,评估质量,编写测试报告。

2.测试类型

测试类型可以从功能性测试和非功能性测试划分:

功能性测试:单元测试,集成测试,系统测试,验收测试,回归测试,冒烟测试。

      • 单元测试:针对最小的代码单元测试,可以是某个函数或某个方法。
      • 集成测试:多个模块组合后交互的接口测试。
      • 系统测试:整个系统的全规格测试。
      • 验收测试:用户或产品经理对产品是否符合规格做的最后的测试。
      • 回归测试:对已修复的缺陷进行测试。
      • 冒烟测试:快速测试系统的核心功能。

非功能测试可分为性能测试,压力测试,兼容性测试,可用性测试,安全性测试等等。

      • 性能测试:测试系统的响应时间,并发能力,吞吐量等。
      • 压力测试:在高负载的情况下运行系统,测试系统的稳定性和恢复性。
      • 兼容测试:测试系统在不同部署环境下是否正常运行。
      • 可用性测试:测试系统是否人机交互友好,是否易于使用。
      • 安全测试:测试系统是否存在安全漏洞。

同时也可以按照执行方式划分:

      • 功能测试:测试人员手动执行测试用例。
      • 自动化测试:通过编写脚本,测试UI,接口等。
      • 静态测试:不运行程序,通过代码审查,文档审查等方式测试。
      • 动态测试:运行程序测试。

3.测试用例设计方法

黑盒测试:

1.等价类划分

将所有输入分为有效等价类和无效等价类。

比如18~100岁,他的有效等价类就是18~100的数值,无效等价类就是小于18,大于100。

2.边界值分析

将边界附近容易出错的边界值重点测试,分别是边界上,边界外,边界内。

比如18~100岁,就是17,18,19,99,100,101。

3.判定表法

逻辑条件复杂时,列出所有条件组合以及对应动作。

比如查询条件,分为地区,时间,排序,以及搜索内容,就需要列一个2^4=16的16行5列的判定表。是否选择地区,是否选择时间,是否排序,是否输入内容,这四者的所有组合,并给出他们的预期结果。

4.状态迁徙法

当系统在不同的状态中切换,需要测试他的状态扭转是否正确。

比如下单业务会生成一个订单,点击下单后订单状态为创建未支付,支付后就是支付完成待发货,发货后就是待收货,收货后就是待签收,签收后就是待评价,依次评估状态是否扭转成功。

5.因果图法

同样面对复制判断条件时,可以列出所有因,以及对应的果,根据他们之间的规则设计测试用例。

比如登录校验功能,因就可以由用户名已输入,密码已输入,验证码正确,果就可以是允许登录,用户名或密码为空,验证码错误。通过与或非这些逻辑运算对因进行组合,再对应出果。

6.错误推测法

基于经验推测可能发生的错误。

比如一个搜索框,可以是乱码,表情,空白,超长数据,0,null等

7.场景法

模拟用户操作系统的一系列功能步骤。也可以是业务流。

比如某个电商系统,就是注册-登录-加购-下单-支付-签收-评价。

白盒测试:

语句覆盖:所有语句都至少执行一次。

判定覆盖:所有if/else/while/for等判定分支都至少执行一次。

条件覆盖:每个判断条件(原子条件)的True和False都取过。

路径覆盖:所有可能的执行路径都执行一次。

判定-条件覆盖:每个判定条件都去一次True和False,每个原子条件都取一次True和False。

条件组合覆盖:判定条件中的原子判定之间的组合全部枚举一次。

4.测试用例

标准结构就是:用例编号,用例名称,用例优先级,前置条件,测试步骤,输入数据,预期结果,实际结果,测试时间,测试人员。

1.用例编号:用于标注该用例唯一ID。

2.用例名称:用简单的语言描述用例的目的。

3.优先级:执行测试用例的优先级。

4.前置条件:执行该用例前需要达到的条件。

5.输入数据:测试用到的数据。

6.测试步骤:测试该用例应该执行的步骤。

7.预期结果:测试的正确结果。

8.实际结果:测试用例执行后实际的结果。

9.测试时间:记录测试的时间。

10.测试人员:记录执行该测试用例的人员。

5. 缺陷生命周期

1.新建:测试人员发现bug,在缺陷管理工具新建缺陷。

2.已分配:测试人员将缺陷指定给开发人员修复。一般由测试主管或者项目负责人指派。

3.打开:开发人员打开缺陷,并着手解决。

4.已修复:开发人员修复缺陷后,通知测试人员已修复。

5.待回归:测试人员等待回归测试,判定是否已修复。

6.已验证:验证成功已修复则标记为已修复。

7.关闭:缺陷流程正式结束。

8.拒绝:开发人员拒绝缺陷,一般是无法复现,不是缺陷等。

9.延期:因为开发进度紧急,或者该缺陷优先级低,亦或者缺陷有待进一步讨论解决,无法在当前版本更新。

10.重复:缺陷提交重复。

11.重新打开:缺陷修复后验证不通过,重新打开。

6. Bug等级与优先级

缺陷等级一般为:

1.致命:影响系统无法正常运行,系统启动报错,直接崩溃。

2.高:核心功能受到影响,比如手机验证码始终收不到,A 用户可以看到 B用户的信息等。

3.中:一般功能问题,不影响主流程,但是用户体验不好,比如搜索结果不准确,文本框长度校验不严格等。

4.低:轻微功能偏差,某些界面问题,排版错误,文本提示语错误,时间格式不统一。

5.建议:非缺陷,属于产品优化建议,比如 UI 不统一,交互不符合人机工学等。

优先级一般为:

1.最高:影响系统运行,应立即修复。

2.高:影响核心功能执行,尽快修复。

3.中:影响非核心功能运行,可适当延后。

4.低:可以延后处理的缺陷,一般在没有其他任务时修复。

7. 七大测试原则

1.无法穷尽测试:不可能测试所有可能发生的结果。

2.认为没有缺陷是一种谬误:即使系统没有任何异常错误,但是业务不满足用户需求,也是没有意义的。

3.测试依赖上下文:不同系统软件侧重点不同,金融侧重安全,游戏侧重用户体验。

4.缺陷聚集效应:缺陷一般呈现聚集出现,多数缺陷出现在少数地方。

5.尽早测试:测试应尽早介入开发流程,比如需求阶段的文档审查,越早发现缺陷,修复成本越低。

6.杀虫剂悖论:某一套测试用例在反复执行后发现缺陷越来越少,应该及时更新测试用例。

7.测试应该指出缺陷存在,而不是证明无缺陷:测试的目的是发现缺陷,而非证明系统无缺陷。

8. 测试模型理论

1.V 模型

V 模型强调测试先于编码开始,测试与开发并行。

需求分析->系统设计->详细设计->编码实现

验收测试->系统测试->集成测试->单元测试

2.W 模型

3.H 模型

H 模型将测试独立出来为一个过程,设定了测试准入点,当达到准入点条件后才可进行测试,同时测试对象抽象为一整个产品包,不局限于需求分析到实施的过程。

4.敏捷测试模型

将测试过程嵌入到敏捷迭代开发中,除了必要测试文件,其他文件都可以随着迭代开发不断更迭,拥抱变更。

5.测试金字塔

测试越靠近底层,执行越快,越稳定,应覆盖越多。

UI 测试为顶层应该避免过多 UI 自动化,功能测试为中间,单元测试为底层,最快速也最稳定。

9. 质量度量与覆盖率

常见的质量度量有:

缺陷密度:每千行代码中发现的缺陷数量,比如100w行代码有100个缺陷,缺陷密度就是10。

缺陷发现率:每周或每日发现的缺陷数,比如每日平均发现10个缺陷。

缺陷修复率:已修复数量/总缺陷数量。修复8个剩两就是80%。

回归缺陷率:修稿引入的bug的比率,比如修复了10个但是引入了两,就是20%。

测试用例通过率:测试用例通过的数量/总测试用例数量。

覆盖率:基于白盒测试的测试用例方法,编写了多少用例,和可以产生的用例数作比。比如条件覆盖率,一共有10个原子条件,应该是2^10个用例,但是只执行了一半,那就是50%。

10.面试常见问题

  • 测试用例设计方法有哪些?分别适用哪些场景?

边界值(数值范围),等价类(字段输入),因果图(复制业务逻辑),判定表(复杂规则),状态迁徙(流程状态切换),场景(用户业务流程),错误推测(没有详细需求文档)。

  • 如何衡量一个产品的测试质量?

回归缺陷率,缺陷密度,缺陷发现率,缺陷修复率,测试用例通过率,覆盖率等。

  • 遇到 Bug 不复现怎么办?

复现环境确认,复现步骤确认,日志/抓包分析,记录图片或视频,和开发沟通确认。

  • 怎么理解测试与开发的关系?

协作,互补,共同提升产品质量,开发从技术角度保障产品,测试从用户角度测试产品。

  • 你是如何评估一个功能是否测试充分的?

覆盖率,缺陷率,测试用例是否全面,测试用例执行结果分析等。

  • 如果开发不重视 Bug 怎么办?

及时沟通消除和开发之间的沟通障碍,避免错误理解,同时再次确定 Bug 级别和优先级从对系统危害角度分析,结合从用户角度分析 Bug 的危害,如果仍不重视,可以反馈给测试组长或产品经理,测试应该与开发保持良好沟通,消除偏见以及沟通障碍,沟通大于硬刚。

  • 你是如何做回归测试策略的?

以及优先级以及缺陷等级,先回归优先级高和缺陷等级高的,测试用例的选择,着重评估易出现缺陷的用例,利用自动化测试回归,以及按照版本更新,除了全量回归还可以选择性着重回归版本迭代内容。

  • 如何设计测试计划和测试方案?

测试计划包含了测试目标,测试范围,测试资源,测试人员,各测试时间点,风险以及应对。所以需要分析需求,明确测试的最终目标以及范围,避免过度或过少测试,再然后要明确测试所需资源,这些属于测试前置条件,没有安排到位无法开展工作,同时要分派好测试人员任务,再然后需要明确测试的各个时间点,每个时间点里程碑需要达到的目标,最后就是测试中可能出现的风险,需要评估可能出现的风险并给出解决方案。

测试方案则是具体的解决方法,不同阶段,不同模块,不同功能,采用何种测试方法和工具,同时要提供设计测试用例的思路与应该采用的方法,确定 Bug 管理流程,以及明确测试通过标准。

  • 给你一个电子秤怎么设计用例?

        1. 功能性测试

                基本称重功能:

                        用例:放置标准砝码(如1kg),验证显示值是否为1kg±误差范围。

                        用例:称重超出量程(如最大10kg,放11kg),验证是否提示"超载"或显示错误。

                单位切换:

                        用例:切换单位(kg/g/lb),验证显示值是否正确转换。

                清零/去皮功能:

                        用例:放置容器后按"去皮",再放物品,验证显示是否为净重。

                稳定性测试:

                        用例:多次称量同一物品,结果是否一致。

                边界值测试:

                        用例:称重接近量程极限(如9.99kg/10kg)。

        2. 非功能性测试

                环境适应性:

                        用例:在不同温度/湿度下称重,结果是否稳定。

                电源测试:

                        用例:电池低电量时是否提示,称重是否准确。

                耐久性测试:

                        用例:连续称重100次,检查按键/传感器是否正常。

        3. 异常场景

                干扰测试:

                        用例:称重时轻拍桌面,显示值是否快速恢复稳定。

                非法输入:

                        用例:放置非均匀物体(如半悬空),是否提示错误。

  • 如何定位 Bug?

                1. 重现Bug

                        确定Bug的可重现性

                        记录重现步骤和环境条件

                        尝试在不同环境下重现

                2. 日志分析

                        检查应用日志、系统日志和错误日志

                        查找错误堆栈跟踪

                        分析时间戳和事件序列

                3. 代码审查

                        检查相关代码段

                        使用版本控制查看最近变更

                        分析可能受影响的依赖关系

                4. 调试工具

                        使用调试器逐步执行代码

                        设置断点检查变量状态

                        使用性能分析工具

                5. 缩小范围

                        使用二分法隔离问题区域

                        构建最小可重现示例

                        排除外部因素干扰

  • 给你一个接口你会如何编写测试用例?

        1. 基础测试用例

**测试用例ID**: API_001
**描述**: 验证接口基本功能
**请求方法**: GET/POST/PUT/DELETE
**URL**: /api/resource
**请求头**: Content-Type: application/json
**请求体**: { "key": "value" }
**预期响应状态码**: 200
**预期响应体**: { "status": "success", "data": {...} }

        2. 参数验证测试

                必填参数缺失测试

                参数类型错误测试

                参数边界值测试

                参数组合测试

        3. 错误处理测试

                无效认证测试

                权限不足测试

                资源不存在测试

                服务器错误测试

        4. 性能测试

                响应时间测试

                并发请求测试

                负载测试

        5. 安全测试

                SQL注入测试

                XSS攻击测试

                CSRF防护测试

                敏感数据泄露测试

        6. 数据一致性测试

                数据库与响应数据一致性

                缓存一致性

                事务完整性

  • 一般在哪里学习测试?

        TesterHome (testerhome.com)

        51Testing软件测试网 (www.51testing.com)

  • 当项目进度紧张时,你会如何调整测试策略?

        (1)优先级调整(Risk-Based Testing)

                聚焦核心功能:优先测试业务核心流程和高风险模块(如支付、登录、数据存储等)。

                评估影响范围:与产品经理、开发人员沟通,确定哪些改动影响最大,优先覆盖相关测试用例。

        (2)自动化测试加速回归

                利用现有自动化用例:快速执行自动化回归测试,减少手动重复测试时间。

                补充关键自动化用例:如果时间允许,为新增核心功能补充自动化测试,提高后续回归效率。

        (3)优化测试执行方式

                并行测试:在不同环境/设备上同时执行测试,缩短测试周期。

                冒烟测试(Smoke Test):确保基本功能可用后,再深入测试。

        (4)调整测试深度

                减少非必要测试:如UI细节、极端边界情况(除非是核心功能)。

                探索性测试(Exploratory Testing):代替部分严格的用例测试,快速发现潜在问题。

        (5)团队协作优化

                提前介入(Shift Left):在开发阶段参与代码评审、接口测试,尽早发现问题。

                每日站会同步风险:及时向团队反馈测试进度和阻塞问题,调整开发优先级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值