新书连载20|关于测试的理念–《软件测试策略》
点击蓝字
关注我们
第十六章 测试策略应用
16.2.3 测试中其他形式的 AI
与大语言模型相比,机器学习是一种更基础的人工智能方法。在机器学习中,算法基于大量数据做出预测。一个有监督机器学习算法可通过学习多年的订单数据,以预测未来的订单情况,帮助我们了解需要生产多少产品以保持稳定供货。然而,在面对未曾见过的“黑天鹅”事件时,这类预测就会失效。
此外,无监督机器学习可以通过观察大量数据自动总结规律。例如,把一百万副扑克牌的牌型和输赢结果交给算法,在没有提前告诉规则的情况下,算法可以逐渐推断出游戏的胜负规则。
机器学习在测试中的一个实际应用是:当界面对象位置发生变化时自动推测新的定位符,通过图像识别确认对象是否仍然正确显示,如果确认页面对象显示符合预期,就能自动更新代码中的定位符。更复杂的应用则包括欺诈检测、复杂物流优化等。
16.2.4 AI 测试的核心观点
在我们的语境下,AI 的价值在于能够以非线性的方式解决问题,提出一些我们自己可能想不到的答案。换句话说,与传统软件只会执行预先编写的算法不同,AI 能够基于数据生成或改进算法。如今的算法在处理自然语言方面已经有了显著提升,能够理解接近口语化的输入,并给出相应的回答。需要强调的是,计算机并不是真正在“思考”,它只是模拟人类的思维过程。
在当前阶段,我们可以利用 AI 工具来加快重复性代码和常见解决方案的生成。如果希望借助 AI 获取新的测试思路,建议的做法是:先完成基础的测试设计,再让 AI 做额外的补充,例如不同类型的测试场景、特殊条件或特殊字符等。需要注意的是,现阶段 AI 生成的内容仍然缺乏可靠性。你可以把它想象成一个赶在截止日期前交作业的大一学生,往往只是把文字拼凑成看似合理的答案。这类工具的确能帮助提升效率,但在使用时必须保持谨慎。
16.3 关于测试的理念
杰拉尔德 · M · 温伯格(Gerald M. Weinberg)习惯用一些简洁、精辟的语句来总结核心观点。我们虽然不能和温伯格相提并论,但我们也尝试用类似的风格表达测试理念。以下是我们整理的一些内容:
● 顾问策略(The consultant’s gambit):由于受公司文化的影响,内部人员往往忽视一些显而易见的问题,而外部顾问却能轻易发现。
● 文档化测试原则(The maxim of documented testing):每个由人工执行的、预先设计好的、有文档记录的测试,除验证产生期望结果外,还隐含着不发生其他异常的预期。
● 第一推论(The first corollary):隐含的“不出现其他异常”的预期尤其难以实现自动化验证。
● 第二推论(The second corollary):如果尝试借助自动化工具来验证“不出现其他异常”这个隐含的预期,很可能会产生大量假错误。
● 测试自动化原则(The maxim of test automation):即使一个测试可以被自动化,当第二次运行时,就不再是测试自动化,而是变更检测。
● 例外情况(The exception):对于高容量测试或者基于模型测试,自动化测试是有额外意义的,这些测试不属于普通的变更检测,而是验证系统行为的正确性。但此类测试必须依赖某种自动化“先知”来判断结果是否正确。例如,一种常用方法是将软件的前一个版本作为“先知”。
● 理想组合策略(The magic formula):组合开发者编写的单元测试、可自动化的验收检查以及人工探索性测试,能形成一个相对完备的测试体系。
● Dijkstra 猜想(The Dijkstra conjecture):测试只能证明 bug 存在,永远不能证明其不存在!
● Heusser 命题(The Heusser proposition):那些能够承担技术上看似不可能完成的任务,却仍设法解决问题的测试人员,往往能够创造巨大的价值。
● 自动化成本谬误(The automation cost fallacy):自动化测试并不意味着低成本、轻松实现或立刻见效。即使当前的测试代码本身没有问题,但随着系统的迭代,测试代码也需要不断维护和更新,从而增加了额外成本。采用成熟的UI 设计和清晰的组件分离,有助于降低这些维护成本。
● 测试自动化规则 [The rule of (traditional,pre-defined) test automation] :即便某些组织声称已实现“100% 测试自动化”,他们发现的大多数缺陷并非通过自动化回归测试发现,而是由人工在执行其他测试活动时发现的。
● 各种问题的根源(The other source of all kinds of evil):人类与计算机在擅长解决的问题上存在根本差异,天真地认为计算机能够完全替代人类,是软件交付中许多问题的根源。
● 自动化决策困境(The automation decision dilemma):工具要么检查所有可能的错误,但这样往往会产生假错误;要么只检查特定内容,但又可能忽略其他异常。要实现真正准确的测试,就需要事先知道哪些变化是错误的、哪些是正确的,而这在实践中非常困难。
● 自动化延迟(Automation delay):当自动化测试失败时,需要进行检查、修正并重新运行,这会导致额外的时间延迟。
● 复杂性困境(The complexity conundrum):越难设置和执行的测试越容易被跳过,而这些未被实现的自动化测试往往更有可能发现潜在缺陷。
● 四种基本美德(The four cardinal virtues):包括正义、智慧、节制以及勇气。
除了上面关于测试的内容外,我们还尝试整理了关于文档的一些思考:
● 文档困境(The documentation dilemma):
如果不记录文档,团队的经验、测试方法和操作流程可能无法被保留或有效传递;但如果盲目书写,又可能增加无效工作量和维护负担。
● 第一条推论(The first corollary):如果文档写了却无人阅读,就会徒增工作量和浪费资源。
● 第二条推论(The second corollary):即便文档有人阅读,每条记录都带来维护成本。随着系统和流程变化,文档需要不断更新,否则会过时失效。
● 第三条推论(The third corollary):如果文档写得过于详尽,反而会让人难以判断哪些信息最重要,写得过于全面会增加理解难度。
16.4 本章回顾
本书凝聚了我们对如何开展软件测试的核心理念。这些理念源自近 50 年的实践经验、200 余场播客的深度访谈,以及无数会议和网络中的交流。通过这些工作,我们试图提供一种全面综合的测试和质量视角,同时提供分析自身工作、制订策略、评估和改进的方法和工具。我们的目标是把可操作的工具和方法交到你的手中,让你在实际测试中能够用得上。
关于软件测试这一工作,我们觉得有必要再说几句。
在 Excelon,我们有时会聘请咨询顾问来和我们一起进行实际的测试工作,他们都是在各种会议上受到尊敬的专家。然而,他们常常会露出一种不屑的表情,仿佛做测试工作是一件低人一等的事情。诚然,培训、咨询和教学能够帮助团队更快积累测试能力和经验,但测试工作本身的价值也是值得尊重的。
我们从不认为测试是一项低人一等的工作。我们热爱测试,并愿意投入更多时间和精力在测试中。必须承认,写这本书很不容易,甚至可能是我们迄今为止最艰难的职业挑战。但在经历了数十年的实践后,我们仍觉得自己只是刚刚起步。
在电影《星际旅行 6:未来之城》的结尾,柯克船长被命令退休,但他却选择再次驾驶他的飞船出发,命令领航员驶向“右边第二颗星,然后一直向前直到天明”。这句话借用了《彼得 · 潘》中的台词,暗示着柯克拒绝长大的男孩精神,同时也道出了他在探索之旅中的乐趣所在。
让我们一同享受软件测试之旅。一起向更远的地方进发。
本书作者:许祥 杨定佳 金鑫
… …
点击阅读原文,查看独家连载
如果有小伙伴
想要分享技术、出版图书
欢迎进入公众号后台
发送“出书”联系我们~

夜雨聆风