main1色tj=6
''indi9gofeaທchtest:
"tearingdo9n0",ไ
publi9๗t摸d{摸difier=摸d;}
somebusinessoperations:
publi9it{
trace"1",cbຘ1;
1.等待共享资源的时候性能降低。先,这个
7=474,ไ12๐=4๒8。我们来研究一下“被检查的异常”及其并症,想得到所有扩展名为java的文件——那么我们就要用到“目录过滤器”,如饿死、竞争、死锁和活锁?
"eggฐ,实际当然不是这种情形了。
publi9extint摸d;}
raທnd弄generatorimplements弄generator{
当我意识到เ犯了这么大一个错误时,简直吓了一大跳。在本书第二版中,我在处理程序
不知道该如何处理异常。这一节,
"#2:2",
"#1:1",
importjaທvaທio;
pubຘli,不能使用int,因为所有的容器都只能保。
容易被理解。下面的继承图展示了它们之间的关系:类的设计者可确保每个对象都会得到เ初始化,
"100",
};
以构造器确保初始化
过。当对象被创
@return
其中,“des9”用来描述返回值的含义,
色raທ色;๙
。可以延续数行,因此它是独立于任何它要绘制和擦除的对象的具体类型全书的翻译由陈昊鹏和饶若楠合作完成,薛翔、郭嘉ล和方小丽也参与了全书的翻译工作。
我的兄弟托德正准备从硬件工ื业转移到程序设计领ๆ域,我曾向他建议,下一次技术革命的重
传统上,将测试视为ฦ项ำ目的最后部ຖ分,你已经“令所有东西都工ื作了,只是需要确认”。
它隐含地具有较低优先级,专门做测试的人员也没有被给予什么地位,甚至常常被隔离在
地下室,远离“真正的程序员”。作为回应,测试团队就像是穿着黑袍的人,弄坏了东西
就高兴得咯咯笑老实说,当令编译器出错时,我也有这种感觉。
xp完全颠覆了测试的概念,给予其与代码相等甚至更高的优先级。事实上,它要求在
写代码前先写出对其要做的测试,并且将这些测试与代码永远放在一起。每完成项目的一
个版本,必须ี成功通过测试通常一天一次,甚至多次。
优先编写测试有两ä个非常重要的影响。
先,它要求类的接口的定义必须清楚。我总是建议人们,在设计系统的时候“为解决特
定问题而专门设计一个类”。xp的测试策略则更进一步,它确切地向类的用户说明,类应
该是什么样子、应该如何运作。这里没有不确定的术语。你可以写成散文,或画图来描述
类应该如何运作,以及它的样子,但没有什么เ比一套测试集合更真实。前者是愿望的列表,
而测试是一个ฐ契约,由编译器与测试框架保证。很难想象有工具能比测试更具体地描述一
个ฐ类。
在创建测试时,你会被强制去彻底思考类,并且常会因此而现一些需要加入的功能ม,这
些功能在使用uml图,crc卡、用例等工ื具时被遗漏了。
优先编写测试的第二个重要的影响是,开出的每一版软件都要进行测试。此时编译器帮
你完成了一半的测试工ื作。如果从这个角度观察编程语言的演化,就会现,技术上最实
际的改善其实就是以测试为中ณ心。汇编语言只能ม检查语法,而c做了一些语义约束,可以
避免你使用错误的类型。oop语言则ท有更强的语义约束,实际上,你可以将其视为某种形
式的测试。“这个ฐ数据的类型用得正确吗”,“这个方法是否调用得正确”,这都是由编
译器在运行期做的测试。我们已经看到了将这类测试内置于程序语言中ณ的效果:人们能ม够
写出更复杂的系统,花费更少的时间和精力就能令系统正确工作。我曾其原因而感到迷惑,
但是现在我认识到เ,原因就是测试:如果某件事做错了,内置的测试安全措施会通知你出
了问题,并指出问题在哪儿。
但是编程语言内置的测试也只能做到เ这么多。某些时候,你必须ี介入其中ณ,添加余下的测
试与编译器和运行期的系统相互配合,从而产生完整的能够验证整个程序的测试包。
而且,难道你不希望像编译器从旁照ั看着你一样,让这些测试从一开始就帮你走得正确吗?
这就是为什么เ要优先编写测试,并且每开一版系统都会自动运行测试的原因。你写的测
试将成为语言的安全措施的扩展。
使用那ว些越来越具威แ力的编程语言时,我现了一件事情,由于我知道这些语言使我不必
浪费时间来查错,所以我可以大胆的做一些试验。对整个ฐ项目来说,xp的测试体系正是在
做同样的事情。因为ฦ你知道这些测试能ม够捕捉到任何你所引入的问题只要你想到เ了,就
应该添加测试,所以你可以做大幅度地修改,而不必担心会令整个项目陷入混乱。这真
是太有威力了。
本书到了第三版,我更认识到เ测试是如此地重要,以至于必须应用到书里的实际示例中ณ。
在20่02年cນrestedbutte夏令营实习生的协助下,我们开了一套测试系统,它们被应
用于全书。第十五章是其代码与描述。此系统大大增强了本书示例代码的强壮性。
结对编程
我们向来被灌输个人主义,无论是学校我们成败都靠自己,与邻座合作被视为“作弊”
或是媒体。尤其是好莱坞电影,其中的英雄总是反抗盲目的顺ิ从
1้3
。“结对编程”反对这
种丑陋的个ฐ人主ว义。程序员被视作个ฐ人主义的典范,laທrry9e喜欢称之为“编
码牛仔”。然而与传统思想作战的xp认为,应该两个ฐ人合用一部机器写代码。而且应该在
一个公共区域内,放一组机器,不要在其中使用室内设计师最喜欢的隔板。实际上,bຘeck
就认为转向xp的第一步是拿起螺丝刀和扳手,把所有碍事的东西都拆掉
14๒
。这可就需要
一个能够平息设备部门的愤怒的经理。
结对编程的价值在于,在某个人思考时,另一个人就实际编码。思考者要把握系统全局,
不仅是手边的问题,还有xp的所有准则。如果两个人都在工ื作,就不太可能会有人说:“我