测试优先编程思想

Test-First Programming

什么是软件测试?

  • The process of checking the quality, functionality, and perfomance of a sofware product before launching. 1

  • The act of examing the artifacts and the behavior of the software under test by vertification and validation. 2

  • The process checks whether the actual software matches the expected requirements and ensures the software is bug-free.3

  • 软件测试是一项调查,旨在为利益相关者提供有关产品或服务质量的信息。

测试能提高软件正确率,但是不能使正确率达到100%!

软件测试的特征

软件测试的目的:破坏、证错、负能量。尽快的发现程序中的错误。

再好的测试也不能证明系统中没有错误。

优秀的测试:

  1. 能及时发现错误
  2. 简洁高效
  3. 最佳特性
  4. 既不简单也不复杂
    test

测试的层次

  • 单元测试:对软件的单元或组件进行测试,验证它们是否按照设计运作。
  • 集成测试:将多个小的单元一起测试,验证不同单元之间的交互是否故障。
  • 系统测试:对完整的集成系统进行测试,验证系统是否符合规定要求。
  • 验收测试:对系统的可接受性进行测试,验证系统是否符合业务要求,以及是否能够被验收。

测试方法

1. Static Testing & Dynamic Testing

  • 静态测试通常是隐式的,使用编程工具或文本编辑器检查代码结构、语法和数据流的静态分析。
  • 动态测试发生在程序运行时,通常在程序没有完全运行的过程中,检查部分组件。

测试通常用于发现错误,而Debug用于找出错误的根源。

2. White-Box Testing & Black-Box Testing

  • 白盒测试是对程序内部结构的测试。
  • 黑盒测试是对程序外在表现的测试。
序号黑盒测试白盒测试
1不关心内部代码结构关心内部代码结构
2又被成为数据驱动测试又被称为结构测试
3面向使用者、测试者、开发者面向测试者与开发者
4只能通过试错实现可以更好地测试数据域与内部边界
5一般用于集成测试和系统测试一般在单元测试阶段完成
6可以检测规范要求的缺失无法检测规范要求功能的缺失

软件测试的难点

  • 软件行为在离散输入空间中差异巨大:
    • 大多数正确,小部分出错
    • bug的出现不符合特定概率分布
  • 无统计规律可循。

测试用例

1. 什么是测试用例?

  • test case = test input + excution condition + expected result

  • 测试用例是对程序的一个提问,是为了验证程序是否满足某种特定需求的样板。

2. 什么是一个好的测试用例?

  • 最可能发现错误
  • 不重复、不冗余
  • 最有效
  • 既不简单也不复杂

3. 编写测试用例的方法

基于等价类划分编写测试用例:将函数的输入域划分为等价类,从等价类中导出测试用例。

假设:相似的输入将会展示相似的行为,因此从每个等价类中选择一个代表即可。从而大幅度减少测试用例的范围。

大量的错误发生在输入域的边界而非中央,边界分析方法是对等价类划分的补充。

  • 程序员经常犯大小差1的错误。
  • 某些边界值是特殊情况,需要特殊处理。
  • 程序的行为在某些边界处发生突变。

测试驱动开发(TDD)

  • Process:

    1. 写出程序的spec。

    2. 写出符合spec的测试用例。

    3. 写/改代码,执行测试。(重复第三步直到测试通过)。

  • 先写测试可以大幅度提高写代码的效率。

编码效率

  • 写测试用例可以加强对spec的理解。

代码覆盖度

概念:在测试中,源代码被测试的比例。

基本的覆盖率准则:

  • 函数覆盖率:程序中被调用函数的比例。
  • 语句覆盖率:程序中执行的语句的比例。
  • 分支覆盖率:程序中执行的分支语句的比例。
  • 条件覆盖率:程序中被取过真假值的布尔子表达式。

实际中,根据预先设定的覆盖度标准,逐步增加测试用例的数量,直到覆盖度达到标准。

自动测试&回归测试

1. 自动测试

意义:手工测试代价太高,使用自动化测试可以提高测试效率。

方法:使用自动化测试框架(Junit),自动调用函数、自动判定结果、自动计算覆盖度。

只是自动执行测试用例,而不是自动生成测试用例。
自动测试流程

2. 回归测试

  • 一旦程序被修改,重新执行以前的所有测试。

  • 一旦发现bug,要马上重写一个可重现改bug的测试用例,并将其加入测试库。

Reference


  1. Katalon (2023) What is software testing? definition, types, and Tools, katalon.com. Available at: https://katalon.com/resources-center/blog/software-testing (Accessed: 25 March 2024). ↩︎

  2. Software testing (2024a) Wikipedia. Available at: https://en.wikipedia.org/wiki/Software_testing (Accessed: 25 March 2024). ↩︎

  3. GfG (2024) What is software testing?, GeeksforGeeks. Available at: https://www.geeksforgeeks.org/software-testing-basics/ (Accessed: 25 March 2024). ↩︎

  • 76
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沅筱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值