The Art of Software Testing by Glenford Myers

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

《软件测试的艺术》是Glenford J. Myers、Tom Badgett和Corey Sandler合著的一本关于测试和软件工程的书籍,是我最喜欢的之一。在本文中,我将概述这本书,并强调我认为最有趣的观点和引用。

这本书有三个版本。第一版出版于1979年,那时我还太年轻无法欣赏它。第二版于2004年出版——我在2007年首次阅读了它。第三版是在两年前的2012年出版的。我也购买了这个版本,并像第一次阅读一样阅读了它。尽管这本书已经有些年头了,而且一些内容已经过时,但它仍然是软件测试领域中最受欢迎的书籍之一。

首先,让我们筛选出不值得阅读的内容(据我个人观点)。

书中共有十一章,但你可以轻松地略过其中九章。这是因为这些章节讨论的概念在书中的其他地方已经以更丰富的细节或更高抽象级别进行了讨论。

例如,第三章包含了一个十一页的清单,供代码审查人员使用,以查找编程错误。这份清单肯定不全面,并且无法与 Steve McConnell 的《代码大全》(Code Complete)相媲美。我相信,二十年前这份清单可能具有重要价值,但现在已经过时了。

第五章讨论了单元测试的基本原则和策略。然而,这个讨论对于一个简短的25页摘要来说不够抽象,也不够详细。同样,二十年前这些信息可能有一定价值。现在,Steven Freeman 和 Nat Pryce 的《以测试为导向的面向对象软件开发》(Growing Object-Oriented Software, Guided by Tests)是这个主题的更好的资料来源。

此外,还有关于可用性测试、调试、Web应用测试和移动应用测试的文章。在这些主题上,我们面临同样的问题——它们不够抽象,并且已经过时,与当前软件测试的问题无关。我建议读者简要浏览这些主题以了解背景信息,但不要过多深入阅读。

这本书中最重要且有价值的部分是第二章。它充满了无价的引用,同时也非常实用。例如,在第6页上:

在第2章中,迈尔斯博士讨论了测试心理学以及关于测试目标的一个非常常见且关键的误解。他声称普遍认为软件测试的目标是“展示程序以正确的方式执行其预期功能”(第5页)。测试人员被雇佣来检查软件是否按预期工作。然后,他们向管理层报告所有测试是否成功通过以及是否可以将程序交付给最终用户。

这是Myers博士在第二页上所说的,我可以谦虚地证实,在我迄今所在的所有软件团队中,几乎每个人,包括测试人员、项目经理和程序员,都持有这种观点。他们都认为“测试是证明错误不存在的过程”(第5页)。

然而,“这些定义是颠倒的”(第6页)。测试的心理学应被视为相反的。有两句引文支持这一理论,我觉得它们构成了整本书的核心。

第一句引文在第6页上定义了软件测试的目标:

第二个目标在下一页上进一步完善了第一个目标。

Myers博士在每一章中都回到这两个思想。他一再强调我们应该改变我们对测试的基本心理,以改变我们的测试结果。我们应该专注于破坏软件而不是确认它的工作。因为测试是一个“虐待性的过程”(第6页),是一个“破坏性的过程”(第8页)。

如果你仔细阅读第二章并真正理解其中的基本思想,它可能会改变你的整个生活。这一章应该成为每个测试人员的新约。

在第2章中,Myers博士还提到,无论多么简单,一个程序都包含无限数量的错误。他说“你无法测试一个程序以确保它是无错误的”(第10页),并且“在一个程序中找到所有错误是不切实际的,通常是不可能的”(第8页)。

此外,在第6章的结尾,他做出了重要的观察(第135页):

问题很明显。由于任何程序都包含无限的错误,无论我们测试多长时间,都不可能找出所有错误。那么我们什么时候停止测试呢?我们为我们的测试人员设定什么目标?更重要的是,我们什么时候支付他们,支付多少(对我来说,这个问题很重要,因为我只与承包商合作,需要确定可衡量和可实现的目标)?

莫尔斯博士给出的答案非常出色(第136页):

然后他继续讨论如何准确估计这个“预定义数量”。我觉得这个想法非常有趣。我甚至在过去几年的几个项目中都应用了这个想法。它有效。然而,它也可能给团队带来严重的心理问题。大多数人对“测试直到找到所需数量的错误”这个目标简直感到愤怒。最常见的反应是“如果再没有错误怎么办?”

然而,在几次争吵之后,团队最终开始欣赏这个概念并逐渐习惯了它。因此,我可以谦卑地确认迈尔斯博士在他的建议中是正确的。你可以根据预定义的错误数量来成功计划测试。

我认为这本书是软件测试领域的基础写作。这主要归功于书中的第二章。事实上,只有三页文字构建了整本书的基础。它们是其他两百页的骨架。

不幸的是,自1979年以来,这个骨架并没有成为软件测试行业的支柱。我们大多数人仍在违背这些原则努力工作。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-17 at 16:06

sixnines availability badge   GitHub stars