如何解决怪异盒子模型
作为软件工程师,我们的任务是为客户的业务问题创建解决方案。 作为复杂的系统,有时会不可避免地在设计或实施中出现缺陷。 有时,缺陷会通过使用第三方软件来蔓延,这会使问题更加难以查找。 每个错误都有一个讲述的故事,有关寻找最令人费解,最具挑战性,烦人和耗时的错误的故事有时可能与您生活很长时间。
您设法解决的最奇怪的错误是什么?
Mine早在几年前,当时我们就为医疗保健行业的客户开发一个未开发的Java EE软件项目。 随着Alpha发布周期的临近,我正在新创建的服务器环境中部署新版本,并且在测试过程中我们发现了隔离软件功能中的错误。 最初,我认为新环境设置存在问题,但过了一会儿我才意识到该错误似乎与新版本的构建方式有关。 在开发阶段,我们一直使用Oracle JDeveloper IDE来构建软件,但后来转向使用Sun Java JDK和Apache Ant。 因此,当时我想-毕竟这是Java EE-这是一个包装问题。 我仔细比较了工作包和已损坏的发行包,但未发现任何重大差异。 尽管重现很麻烦,但是幸运的是,该问题还是可以重现的,因此我开始通过远程调试对其进行跟踪。 一段时间后,我注意到该软件正在执行一个奇怪的代码路径,我无法完全解释。
我对这个奇怪的行为感到困惑,我对如何继续进行故障排除并没有一个清晰的主意,但是我决定在比较正常版本和损坏版本中的已编译字节码时大胆尝试。 这是我第一次查看反汇编的Java字节码,这使分析有些慢,而且更加有趣,但是幸运的是,在远程调试会话中,我已经能够确定一些可能的bug位置。 在盯着已分解的字节码一会儿之后,最初看起来无害的一部分代码开始令人怀疑:在工作版本的一个类中存在一个mutator方法,但在损坏的类中却没有。 事实证明,使用Oracle JDeveloper构建代码时,它会自动为子类生成一个mutator方法,而该方法恰好覆盖了一个有问题的超类mutator方法。 在破碎的版本中,没有生成这样的mutator方法,从而导致越野车超类mutator方法得以执行。
这个故事发生在多年前,尽管如今我做了很多不同的事情,包括使用不同的技术,设计方法,单元测试,测试自动化,构建方法和工具等,但对我来说,这是那些更令人难忘的错误之一挤压会议。
您有一个有趣的Bug狩猎故事可以分享吗?
翻译自: https://www.javacodegeeks.com/2015/04/whats-the-strangest-bug-youve-squashed.html
如何解决怪异盒子模型