本书将当前流行的敏捷开发方法融入到了Java语言的实践中,给了您学习并掌握Java5.0、面向对象方法的机会,同时您还将学习测试驱动开发方法。作者很好地将三者融合在一起,全力教读者如何使用Java5.0开发专业的软件。 \r\n 本书语言浅显易懂,颇有趣味,覆盖了上述三方面的内容,准确地展示了如何将Java和TDD进行有效的整合;帮助开发者在整个软件生命周期中使用这些方法,以适应现代软件行业对高开发速度和高准确性的要求,对于希望使用Java 5.0作为开发工具的开发者而言,本书是一本很好的入门书籍。 \r\n 从市场来看,现在的软件业竞争非常激烈,软件的业务需求变化快,经常会出现变更,传统的软件开发方法已经很难适应这种快速变化,在这种高速变化的情况下,显得捉襟见肘;而融合了敏捷方法的Java可以从某些方面应对这种变化,这使得本书成为Java5.0学习者一本优秀的参考书。
关于作者\r\n前言\r\n致谢\r\n引言\r\n“敏捷”综述\r\n搭建环境\r\n第1章 起步\r\n 测试\r\n 设计\r\n 一个简单的测试\r\n JUnit\r\n 增加一个测试\r\n 创建Student对象\r\n 创建Student类\r\n 构造函数\r\n 局部变量\r\n 从方法返回一个值\r\n 断言\r\n 实例变量\r\n 总结这个测试\r\n 重构\r\n this\r\n private\r\n 命名约定\r\n 空白区域\r\n 练习\r\n第2章 Java基础\r\n第3章 字符串和包\r\n第4章 类方法和类变量\r\n第5章 接口和多态\r\n第6章 继承\r\n第7章 遗留元素\r\n第8章 异常和日志\r\n第9章 Map和相等性\r\n第10章 数学\r\n第11章 IO(输入/输出)\r\n第12章 反射及其他高级主题\r\n第13章 多线程\r\n第14章 范型\r\n第15章 断言与注解\r\n附加课Ⅰ Swing,第一部分\r\n附加课Ⅱ Swing,第二部分\r\n附加课Ⅲ Java的杂项\r\n附录A 敏捷Java的术语表\r\n附录B Java操作符的优先规则\r\n附录C IDEA入门\r\nAgile Java References\r\n索引
译者序
测试驱动开发是极限编程(Extreme Programming)的重要特点,它以持续测试来推动代码的开发,既简化了代码,又保证了软件质量。测试驱动开发起源于XP方法中提倡的测试优先实践。测试优先实践重视单元测试,强调程序员除了编写代码,还应该编写单元测试代码。在开发的顺序上,它改变了以往先编写代码,后编写测试的过程,而是采用先编写测试,后编写代码来满足测试的方法。这种方法在实践中能够起到非常好的效果,使得测试工作不仅仅是单纯的测试,而且成为设计的一部分。
测试驱动开发是近年来“敏捷革命”中最热的话题之一。但是,市面上鲜见与此相关的有深度的、和Java开发紧密结合的作品。本书的出版填补了这一空白,能够满足众多Java程序员的需要。本书的特点是:
一本结合Java、描述测试驱动开发方法的非常实用的指南:真实的问题,真实的解决方案,真实的代码
本书包含了一个完整的用Java编写并使用JUnit、Ant等工具的软件项目
本书适合每一位对测试驱动开发方法感兴趣的Java开发人员和项目经理
快乐工作的基础就是对自己有信心,对自己的工作成果有信心。测试驱动开发提供的测试集可以作为您信心的源泉。相信您在阅读本书后,也一定会为这种敏捷的开发过程所感染,喜欢上Java,喜欢上测试驱动开发的技术。
非常荣幸能有机会和孙勇先生合作,翻译这本书。由于本人才疏学浅,翻译中难免存在错误,衷心的欢迎读者指正。特别要感谢聂涛先生和魏泉先生。他们对本书的初译进行了非常细致的技术审阅。我从中学到了很多,没有聂涛先生和魏泉先生的艰苦工作,就不会有本书现在的翻译质量。为了保持原书的风采,本书的封面、版式、字体等各方面均维持原书的风格。关于本书中文版的文字或技术问题,您可以发送email到:
javatdd@gmail.com
最后,要感谢我的父母,还有我的妻子吕玫,他(她)们的支持永远是我继续向前的动力。
涂波
2006年4月于北京
Jeff Langr有着超过二十年的开发经验。现在,他通过自己的公司——Langr Software Solution(www.LangrSoft.com)提供软件开发、设计,以及敏捷过程方面的咨询。Langr在Object Mento为Uncle Bob Martin了作过两年。Larigr是Essential,Java Style(Prentice Hall PTR,1999)的作者,并且在Software Development、C/C++Users Journal,以及其他各种在线杂志和门户上发表了很多关于Java和TDD的文章。
前言
Jeff Langr从敏捷Java的角度,写了一本非常有趣的Java书籍:利用测试驱动开发的技术来雕琢代码。本书的目的是教会初学者如何使用Java语言,以及他和我都知道的最佳的开发方法——测试驱动开发(Test-Driven Development,简称TDD)。TDD承诺可以带来巨大的潜在价值,Jeff已经证明了这一点。我非常荣幸为这本书作序,也非常荣幸向您推荐这本书。
敏捷Java不止对初学者很有用,对于有经验的程序员而言,这也是一本能够带给您新的内容,帮助提升Java语言水平的好书。我不打算说这是一本认证指南,或者和其它很多”Java大全”相类似的书。这不是本书的要点。敏捷Java的要点在于帮助您熟练掌握如何使用TDD。TDD对于您将来的学习和日常的工作,都会有很大的帮助。
本书以面向对象的概念和思想作为开始。如果您了解对象的概念,那将有助于阅读这本书。如果您不了解对象的概念,那就要在继续之前,去熟悉面向对象。接着,每前进一步,您都会使用测试驱动开发的技术。如果您没有用过TDD,可能在一开始的时候会觉得有些不适应。但是,如果您象我们一样,尝试了TDD,TDD就会成为您的开发工具箱中常用的工具。
如果您已经安装了Java和Junit,请继续。如果没有,请一定阅读“搭建环境”,在开始真正的例子之前,正确地配置您的环境。一旦能够正确编译和运行一个简单的Java程序,就意味着准备就绪了。
Jeff要求您敲入测试和例子代码,我也赞同Jeff的要求。TDD的原则是通过实践来学习,而不只是阅读。您需要形成自己的关于开发节奏的看法。此外,敲入编程书籍中的例子是最好的学习方法。
在“敏捷Java”一书中,Jeff帮助您构建两个应用。一个是学生信息系统,另一个是国际象棋。在阅读所有章节的过程中,Jeff向您介绍了Java的基础。或许更重要的是,您会接触到某些最重要的深入的知识,包括接口、多态、模拟对象、反射、多线程,以及泛型。
第十课是关于Java的数学特性,在这节课中,我发现了利用测试来学习语言和库的新特性的方法。很容易理解类似BigDecimal的内容,您可能会想:“我已经明白了。”也许,暂时您的确是明白了。但是,当把学到的知识变成测试的时候,两件事情发生了:第一,阅读会丢失一些信息,通过编写测试可以掌握这些遗漏的知识。第二,测试记录了我们的学习过程,以及在学习中的思考过程。因为我已经养成了保留测试用例的习惯,所以我可以参考它们,唤起我的记忆。我甚至常常把书籍的页码索引到某些测试,当我回过头来希望进一步深入的时候,这些测试提供了注解。
第十一课关于I/O,提供了一个我不太熟悉,但是非常好的例子。因为我在Java方面从事的工作比较少,而且我常用的语言中没有和嵌套类相对应的概念,但是Jeff提供了一个非常好的例子,帮助我很好的使用和测试嵌套类。
当我写这份前言的时候,我真的进入了这本书,因为Jeff把我带到了我从没有到过的地方。我喜欢那样。第十二课关于模拟对象,第一个例子是敏捷软件开发者经常会遇到的问题:针对一个定义良好,但是还没有实现的外部API,我们如何实现增量开发?Jeff向我们展示如何通过接口定义来实现增量开发——必要的时候,接口定义来自文档——然后构建一个表示您对API的理解的模拟对象。编写针对模拟对象的测试,通过这些测试我们可以确信:API和我们所期望的、最终得到的实际代码一样,可以正常工作。这又是一个优秀的方法。
Jeff是一个相当好的老师。Jeff要求我们思考和做练习。他知道如果您和我打算开始学习,那么就必须实践:我们必须做练习。书中每一章都有练习。他建议我们思考这些练习,并且完成和我们不熟悉的主题相关的练习。在键盘上敲入代码,让这些练习深入您的大脑,并且在完成这些有趣的例子的时候,参照Jeff的指导。您会非常满意所做的工作。
敏捷Java:利用测试驱动开发的技术来雕琢代码,至少可以带给您三个好处:学会可能此前并不了解的Java知识,即使您不是一个Java初学者。学会在多种情况下,如何应用测试驱动开发(某些情况下,您可能发现自己很难找到合适的方法)。最后,在掌握敏捷Java的技巧之后,您可以把这种颇有价值的技术放到自己的专业工具箱里。
我很喜欢这本书,而且发现它非常值得一读。希望您也会喜欢这本书!
Ron Jeffries
www.XProgramming.com
Pinckney, Michigan
November 2, 2004
无封面