- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单元测试应用 测试用例的设计 测试的主要目的 逐步建立,不断加强并再次确认我们对于代码的信心:即代码正确并高效地实现了功能。 使测试漂亮的三种方法 测试因简单而漂亮 测试因揭示出使代码更优雅,更可维护和更易测试的方法而漂亮 测试因其深度和广度而漂亮 讨厌的二分查找 需要一个简单、易描述,并能通过几行代码就能实现的例子。同时,这个例子还必须足够生动,拥有一些有趣的挑战测试的特性。最理想的情况是这个例子要有一个悠久的总是被实现出许多 bug的历史,从而显出对彻底测试的迫切需要。最后但并非最不重要的一点:如果这个例子本身也被认为是漂亮的代码那就再好不过了。 二分查找 二分查找是一个简单而又高效的算法(但我们即将看到,要正确实现它也是有点难度的),这个算法用来确定一个预先排好顺序的数组 x[0..n-1]中是否含有某个目标元素 t。如果数组包含 t,程序返回它在数组中的位置,否则返回-1。 算法 在一个包含 t的数组内,二分查找通过对范围的跟综来解决问题。开始时,范围就是整个数组。通过将范围中间的元素与 t比较并丢弃一半范围,范围就被缩小。这个过程一直持续,直到在 t被发现,或者那个能够包含 t 的范围已成为空。 bug 第一个二分查找算法早在 1946 年就被发表,但第一个没有 bug的二分查找算法却是在 12年后才被发表出来。 最让人惊讶的是,Jon Bentley 正式发表的并被证明过的算法,也就是被实现或改编过成千上万次的那个,最终还是有问题的,问题发生在数组足够大,而且实现算法的语言采用固定精度算术运算的时候。 java public static int buggyBinarySearch(int[] a, int target) { int low = 0; int high = a.length - 1; while (low = high) { int mid = (low + high) / 2; int midVal = a[mid]; if (midVal target) low = mid + 1; else if (midVal target) high = mid - 1; else return mid; } return -1; } fix int mid = low + ((high - low) / 2); int mid = (low + high) 1; 教训 二分查找算法的思想是多么的简单,而这么多年又有多少人的多少智力花在它上面,这就充分说明了即使是最简单的代码也需要测试,而且需要很多。 这个 bug给我上的最重要的一课就是要懂得谦逊:哪怕是最简单的一段代码,要写正确也并非易事,更别提我们现实世界中的系统:它们跑在大段大段的复杂代码上。 看上去正确 public static int binarySearch(int[] a, int target) { int low = 0; int high = a.length - 1; while (low = high) { int mid = (low + high) 1; int midVal = a[mid]; if (midVal target) low = mid + 1; else if (midVal target) high = mid - 1; else return mid; } return -1; } 测试 仍可能有问题。或许不是 bug,但至少是可以而且应该被修改的地方。 这些修改可以使代码不仅更加健壮,而且可读性,可维护性和可测试性都比原来更好。 否可以通过测试来发现一些有趣的和意想不到的改善它的机会。 XUnit 一个框架,使我们可以对程序员们真正在其中编写测试抱有希望。这个框架必须使用人们熟悉的工具,这样大家就不用学习很多新东西;必须保证编写一个新的测试所需的工作量降至最低;还必须能够消除重复劳动。 测试策略(或者说测试组) 从冒烟测试开始; 增加边界值测试; 继续其他各种彻底的、全覆盖类型的测试; 最后,添加一些性能测试。 冒烟测试 用来确保代码在最
您可能关注的文档
最近下载
- 2025年台湾AI行销趋势报告(繁体版)-Kolr.docx VIP
- 湖北办公楼监控及电子围栏系统施工组织设计.doc VIP
- 围栏(施工组织设计围栏(施工组织设计).doc VIP
- 2024年台湾YouTube年度社群内容趋势报告(繁体版)-Kolr.pptx VIP
- 诺尔起重设备(中国)有限公司RTG&RMG中国福建招商局漳州开发区363105.pdf VIP
- 小区沥青道路设计做法.doc VIP
- 2025年台湾AI行销趋势报告(繁体版)-Kolr.pdf VIP
- 防雷安全知识试题及答案.doc VIP
- 智能体协议:MCP、A2A、ANP-智能体互联网的黎明之前.docx
- 国有企业收购合同协议.docx VIP
文档评论(0)