写点什么

忘掉调试器吧,来使用“Saff Squeeze”

  • 2008-11-29
  • 本文字数:959 字

    阅读完需:约 3 分钟

XP、TDD 及 JUnit 的联合创始人 Kent Beck 谈到了他通过单元测试而不是调试器来跟踪到 JUnit 的新特性 JUnitMax 中一个缺陷。他使用了当前 JUnit 的主开发者 David Saff 向其展示的一个方法,该方法首先创建一个高层的单元测试,然后不断回归直至缺陷的根源处,这时的测试就会变得非常简洁明了。

Beck 通过一个比喻介绍了这个他称之为“ Saff Squeeze ”的方法,该比喻来自美式橄榄球中出现的“三明治”,在这里面带球的人会同时被两个人所击中,一个人击打其“高位”(肩膀附近),另一个人击打其“低位”(腰部或腿部)。他说“Saff Squeeze”与此类似,因为这种方法首先会编写一个失败的高层单元测试(“高位”),然后不断回归,用更加具体的单元测试进行替换(“低位”)直到某个单元测试能直接找出有问题的代码(也就是直到能“揪出”缺陷)。

Beck 对该方法的总结如下:

Saff Squeeze 是这样运作的:首先我们需要编写一个失败的测试,然后逐渐向底层深入直到无法再进行下去为止,这时你就会发现缺陷的本源了。下面是循环的过程: 1. 在测试中内联一个出错的方法。
2. 将一个(失败的)断言放到测试中已有的断言前。
3. 移除测试中新断言到原断言之间的部分。
4. 重复上述过程。

在一篇简短的文章中,Beck 讲解了上述过程,展示了不同阶段的测试代码,最后展示了一个“精简的”测试,该测试揭示出了实际的缺陷。

他将这种方式与传统的通过调试器来跟踪代码的方式进行了对比,总结如下:

这两种方式的一个主要差别在于进行调试后,我知道了缺陷在什么地方,但是在精简后,我还有一个针对该缺陷的最小单元测试。这个精简的测试是随着整个过程的进行自然而然产生出来的。

Beck 说他并没有将这种方式看作是对新代码 TDD 开发周期的一个补充或是改变,而是进行缺陷处理的一个工具:

它将成为识别并修复缺陷的方法的核心: 1. 通过一个系统级测试来重现缺陷。
2. Squeeze。
3. 让这两个测试都能通过。
4. 分析并排除缺陷的根源。

请阅读这篇文章来看看在一个实际的例子中这会是什么样子的,同时更多的了解Beck 对这种技术能力的看法并掌握Eclipse 的内联功能。

你觉得这种方式会将你从调试器中解脱出来么?你认为这种方法有风险么?你用什么办法来处理类似的事情呢,或者同时还采取不同的方式?如果有的话,欢迎大家的讨论。

查看英文原文: Forget Your Debugger, Use The “Saff Squeeze”

2008-11-29 22:54530
用户头像

发布了 88 篇内容, 共 264.0 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

Hadoop RPC简介

数新网络官方账号

大数据 hadoop hadoop rpc

中企出海 | 中建材、红狮、华润、华新都在做的事儿!

用友BIP

中企出海

如何选择最适合你的香港服务器服务?五大优势你不可不知

一只扑棱蛾子

香港服务器

1.从零开始学Windows批处理编程系列之基础介绍

全栈工程师修炼指南

编程 windows 批处理 运维学习之路

用友BIP,IoT在光伏行业的应用

用友BIP

物联网 智能制造

40 + 专家齐聚共谋数据未来,StarRocks Summit 2023 议程公布!更多精彩议题等你探索...

StarRocks

数据库 OLAP StarRocks

企业内部外网向内网传输文件如何实现高效安全?

镭速

内外网数据交换 内部外网隔离

Privatus for Mac(网页缓存清理) 6.6.2永久激活版

mac

苹果mac Windows软件 Privatus 网页缓存清理软件

行云创新加入深圳市人工智能行业协会

行云创新

AI编程 人工智能协会 行云创新加入人工智能协会 云原生+AI 云端IDE+大模型

大模型训练中的AI合成数据应用

百度开发者中心

大模型 人工智能「 LLM

企业通关必备,iPaaS应该这样搭建

RestCloud

应用集成 ipaas 应用与数据集成

百度AICA首席AI架构师培养计划第七期毕业,大模型深入产业见成果

飞桨PaddlePaddle

架构师 大模型 AICA

聊聊 Rust 变量,你学会了吗?

树上有只程序猿

rust

全球业务 | 用友废钢智能判级系统在日本成功通过验收

用友BIP

废钢智能判级

超2000个大模型应用,支持文心4.0!AI Studio星河大模型社区升级上新

飞桨PaddlePaddle

飞桨 AI Studio 星河社区 文心大模型4.0

ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑

汀丶人工智能

Elastic Search 搜索系统

权重修改与预训练模型的应用

百度开发者中心

人工智能 大模型

EasyDL平台的强大开发力量

百度开发者中心

大模型 #人工智能

苹果mac电脑矢量插画设计推荐 Illustrator 2024 补丁激活版中文

mac大玩家j

Mac软件 矢量设计 Mac软件矢量工具

独家特性 | 腾讯云大数据ES:一站式索引全托管,自治索引大揭秘!

腾讯云大数据

Hazelcast IMDG 概览

数新网络官方账号

数据库 #数据库

QCN9024 with IPQ4019|Wallys Dual Band Card DR9074E: Unleash the Power of Open Source Networking

wallyslilly

IPQ4019 QCN9074

多模态对比语言图像预训练CLIP:打破语言与视觉的界限

汀丶人工智能

人工智能 自然语言处理 计算机视觉 GPT 多模态大模型

Databend 开源周报第 117 期

Databend

可视化(Visual) SQL初探

数新网络官方账号

数据库 sql #数据库

HDFS架构介绍

数新网络官方账号

大数据 hdfs 架构-

用友BIP数智干部管理——数管干部 人才强企

用友BIP

数智干部管理

写出一个复杂的SQL步骤

程序员万金游

#数据库 #java #Mysql #SQL

如何选择安全又可靠的文件数据同步软件?

镭速

数据实时同步

忘掉调试器吧,来使用“Saff Squeeze”_Java_Mike Bria_InfoQ精选文章