作者:empty 页数:203 出版社:empty |
矛盾并不存在,在遇到矛盾的时候,请检查您的前提,您会发现前提中的某一部近来,无论是在业界还是在学术界,安全和健壮的软件系统设计已经成为时尚。确本书并没有把调试操作当作一个独立的行为,由一个没有参与初期开发工作的专门http://drjava.sourceforge.net书中的所有代码示例可以在作者的网站上获得:http://ww.cs.rice.edu/-eallen分必然发生了错误,——Ayn Rand, Atlas Shrugged保一个健壮的、安全的设计需要采取很多预防性措施——简单的设计方案、单元测试等。但是, 就算是最有效的预防措施也不能避免bug(故障) 。假如那样的话,快速而有效地诊断故障对软件的总成本有非常大的影响。本书介绍了一些有效诊断bug的措施, 并引入了一系列的bug模式——程序中已报告的bug和潜在bug之间重复出现的相互关系。通过研究这些模式, 我们对bug的发生可以做出快速反应。同样, 我们还可以设计一些办法来防止bug的发生。小组来执行。在现实世界中,大多数软件都是由编写它们的开发人员调试的。有关调试的有效方法只能在特定开发方式的上下文中讨论。读者将看到所使用的开发方法会对有效地调试软件造成很大的影响。
读者对象本书是为任何熟悉Java编程技术, 并希望更有效地预防、解释、交流或者修正bug的人员而编写的,包括业界、政府或者学术界的开发人员,以及研读计算机科学的学生。每类开发人员都具有各式各样丰富的调试技术,对于研读计算机科学的学生来说,在调试中使用到的技术和课程本身紧密相连。一些课程注重大规模的软件开发,这些课上的学生在早期会获得很多调试经验。另一些课程则注重计算机科学的理论知识,这些课上的学生会学到很多高级的理论知识,但是他们一旦真正投入到软件项目中,就会学到很多调试技术。在业界,很多公司试图通过雇用没有在软件开发方面受过正规教育的人,来缓解高级程序员的短缺问题,特别是那些在其他领域具有高级技术能力的程序员,这使得他们可以很快适应编程过程。但是,软件开发在许多方面和其他工程形式完全不同,一些编程技术在很长一段时间内都仍然晦涩难懂。其中一种就是如何有效地进行测试和调试,由于程序员的背景知识有很大差别,因此本书并不局限于具有任何特殊经验的程序员。本书只是假设读者拥有使用Java语言的工作经验。拥有面向对象设计模式的知识·Ⅱ·Java Bug模式详解对书中一些示例的理解很有帮助(当然不是必需的)。同样,具有软件开发极限编程方法的经验也有助于加深理解,但是文中也对涉及到调试的部分极限编程方法做了简单解释。总的来说,本书可适用于具有不同知识背景的程序员。结构
本书首先介绍“Java诊断”—-IBM developerWorks JavaZone为笔者开设的专栏一中讨论的bug模式概念。该专栏中的文章和其他一些有用资源可以在JavaZoneWeb站点上在线得到:http//wwwibm.com/developerworks/java本书中的大部分示例引自Dr Java并已经由Dr Java授权, Drava是一个开放源代码的Java开发环境, 由GNU通用公共许可证授权。在Rice大学, Dr Java是一个由笔者的博士生导师Robert Cartwright指导的极限编程技术项目。读者可以访问他的个人主页SourceForge, 了解关于Dr Java的更多信息:
第1章混乱环境下的灵活方法…
软件设计、实现和维护的趋势…
1.1.1
1.1.2传统软件工程技术的局限性…
1.1.3开放源代码的软件项目的可利用性…
1.1.4对于跨平台语言的需求…
在快节奏的社会中学习….
bug模式简述……
小结…
Bug、规范和实现方案…
bug的概念…
一体性规范…--
2.2.1C++
2.2.2 Python-
2.2.3ML…
2.2.4 Pascal---
规范的好处…
实现方案与规范的差异…
利用素材建立经济有效的规范--
2.5.1
2.5.2单元测试的缺陷…
小结…
调试和开发过程…
将调试当作科学试验…
3.1.1
3.1.2在设计上尽可能保持简单…
3.1.3结对编程…
3.1.4
3.1.5所有开发人员共享程序代码…
3.1.6对任何可能产生问题的代码进行测试.
将调试测试程序并入到单元测试集…
展望:面向测试的语言…
小结…
调试和测试过程…
可测试的设计模式…
4.1.1在模型中而不是视图中保管代码….
4.1.2使用静念类型检查发现错误.
4.1.3使用中介器封装跨越断层线的功能
4.1.4编写带有简短签名和默认参数的方法…
4.1.5
4.1.6通过接口定义程序外组件.
4.1.7优先编写测试程序…
Global Model接口…
小结…
科学的调试方法…
软件是永不磨损的机器.
5.1.1软件有多重…
5.1.2
Bug模式可以加快诊断bug的速度.
小结…
关于bug模式…
了解bug模式的重要性…
选择bug模式的原因…
如何组织bug模式…
Bug诊断的快速参考…
Rogue Tile模式…
Rogue Tile bug模式简述…
7.1.1症状…
7.1.2起因、解决方法和预防措施…
7.2提取代码的其他障碍…
对于稳定、安全系统的需求增加…
通过测试来排除规范错误…
逐步规范化、整合并发行软件…
及时的客户反馈…
使用不修改内存状态的存取器.
小异常引起大问题…
通用类型…
Java Bug模式详解
7.2.1
7.2.2面向方面的编程技术…
小结…
随处可见的空指针…
空指针异常不提供任何信息…
难以捉摸的空指针…
Dangling Composite模式--
Dangling Composite bug模式简述…
9.1.1症状…
9.1.2起因-
9.1.3解决方法和预防措施…
小结…
Null Flag模式…
Null Flag bug模式简述…
10.1.1症状…
10.1.2起因--
10.1.3解决方法和预防措施…
健壮性和诊断证据的缺乏…
10.2.1在更好的位置处理异常----
10.2.2处理老式代码……
小结…
Double Descent模式.
Double Descent bug模式简述…
11.1.1症状…
11.1.2起因-
11.1.3解决方法和预防措施…
11.1.4快速但不完善的修正方法…
11.1.5真正的修正方法…
小结…
Liar View模式…
Liar View bug模式简述…
12.1.1
症状-
12.1.2起因……
12.1.3解决方法和预防措施…
13.1.1症状-
13.1.2语法原因---
13.1.3语义原因…
13.1.4解决办法和预防措施.
Broken Dispatch bug简述…
14.1.1症状…
14.1.2起因-
14.1.3解决方法和预防措施…
15.1.1症状…
15.1.2起因--.
15.1.3解决方法和预防措施…
16.1.1症状…
16.1.2起因…
16.1.3解决方法和预防措施…
Fictitious Implementation bug模式简述…
17.1.1症状…
17.1.2起因----
17.13检测Fictitious Implementation-
17.1.4解决方法和预防措施…
12.2Liars并非仅出现在GUI程序…
12.3小结…
第13章Saboteur Data模式……
13.1Saboteur Data bug模式简述…
13.2小结…
第14章Broken Dispatch模式…
14.2小结…
第15章Impostor Type模式…
15.1Impostor Type bug模式简述…
15.2混合模式-
15.3小结…
第16章Split Cleaner模式…
16.1Split Cleaner bug模式简述…
16.2小结-
第17章Fictitious Implementation模式…
17.2小结…
Java Bug模式详解
Orphaned