超越偶然质量:使用生成测试查找隐藏的错误

主要观点:自动化测试是现代软件开发的基石,传统基于示例的测试有缺陷,生成式测试更强大,能探索系统未知问题。
关键信息

  • 传统基于示例测试依赖枚举示例,易遗漏未预见场景,生成式测试从定义系统不变量属性出发,通过随机输入尝试打破属性,探索问题空间找隐藏 bug。
  • 以加法方法为例,传统测试仅验证所选示例,生成式测试通过定义加法基本性质,用随机输入扫描问题空间找到不满足性质的例子,如浮点数加法的关联性质在某些二进制表示的数上不成立。
  • 生成式测试在真实世界的会议 API 应用中,能发现各种层的 bug,如在表现层发现服务器返回无效 JSON、5xx 错误等问题,在数据库层发现 SQL 查询计算会议重叠的 bug,在多用户多动作的组合问题中也能找到复杂 bug。
  • 生成式测试虽有运行时间长、非确定性、学习曲线高等缺点,但能克服人类基于示例测试的认知偏差,帮助程序员找到系统的未知未知,避免意外质量问题。
    重要细节
  • 不同系统的不变量示例,如 API 端点不返回堆栈跟踪、银行应用账户转账不改变银行总金额等。
  • 生成式测试的三步过程:给定属性(不变量)、生成变化输入、找到不满足属性的最小输入。
  • 如在会议应用中,通过生成式测试确保一人不能同时参加两个会议,发现各种输入条件下的边界情况。
  • 生成式测试在不同层的具体测试代码及发现的各种 bug 案例,如在表现层的 JSON 解析异常、数据库层的 SQL 查询 bug 等。
  • 生成式测试与基于示例测试的对比,包括成本、非重现性、学习曲线等方面的差异。
阅读 21
0 条评论