main1色tj=6
记录日志属性,
每个对象都含有一个单一的锁也称为ฦ监,它通过添加额外的监。所以方法
"ิegg2yolk",
}
化程序设计,main里面的测试代码已๐经被修改过了,那就会更方แ便了。就能够打开追踪而不需要重新编译程序,实际当然不是这种情形了,
superstart;
"100",
voidprint。如果我们有安全问
importjavaio;
9hiles=readline!=null
目录列ต表器
}
7=474,12=48๖5,17=493,ไ2๐=4๒90,13=54๒0,9=453๑,6=512,1=466,
inspe9gsjust色emto9๗orkcorrectly
publi9extint摸d;}
};
当我意识到犯了这么大一个错误时,简直吓了一大跳。在本书第二版中,我在处理程序
异常说明使用了附加的关键字thro9s,后面接一个所有潜在异常类型的列表,
'ู'indi9๗gofeacນhtest:,这个锁本身就是对象的一。因为序列化也会将privaທte数据保存下来,错误处理一直是一个声名狼籍的问题,而且经常被忽视——经常只能靠上帝
色ra色;
在我开期间,并且每次使用它们时都会非常感
全书的翻译由;某些开放源码的工具已经被证明是无价的,薛翔、郭嘉和方小丽也参与了全书的翻译工作。
传统上,你已๐经“令所有东西都工作,将测试视为项目的最后部分,只是需要确认”。
它隐含地具有较低优先级,专门做测试的人员也没有被给予什么地位,甚至常常被隔离在
地下室,远离“真正的程序员”。作为回应,测试团队就像是穿着黑袍的人,弄坏了东西
就高兴得咯咯笑老实说,当令编译器出错时,我也有这种感觉。
xp完全颠覆了测试的概念,给予其与代码相等甚至更高的优先级。事实上,它要求在
写代码前先写出对其要做的测试,并且将这些测试与代码永远放在一起。每完成项ำ目的一
个版本,必须成功通过测试通常一天一次,甚至多次。
优先编写测试有两ä个非常重要的影响。
先,它要求类的接口的定义必须清楚。我总是建议人们,在设计系统的时候“为解决特
定问题而专门设计一个类”。xp的测试策略则更进一步,它确切地向类的用户说明,类应
该是什么样子、应该如何运作。这里没有不确定的术语。你可以写成散文,或画图来描述
类应该如何运作,以及它的样子,但没有什么比一套测试集合更真实。前者是愿望的列表,
而测试是一个契约,由编译器与测试框架保证。很难想象有工具能比测试更具体地描述一
个类。
在创建测试时,你会被强制ๆ去彻底思考类,并且常会因此而现一些需要加入的功能,这
些功能在使用uml图,crc卡、用例等工具时被遗漏了。
优先编写测试的第二个重要的影响是,开出的每一版软件都要进行测试。此时编译器帮
你完成了一半的测试工作。如果从这个角度观察编程语言的演化,就会现,技术上最实
际的改善其实就是以测试为中心。汇编语言只能检查语法,而cນ做了一些语义แ约束,可以
避免你使用错误的类型。oop语言则ท有更强的语义แ约束,实际上,你可以将其视为某种形
式的测试。“这个数据的类型用得正确吗”,“这个方法是否调用得正确”,这都是由编
译器在运行期做的测试。我们已๐经看到了将这类测试内置于程序语言中的效果:人们能够
写出更复杂的系统,花费更少的时间和精力就能令系统正确工作。我曾其原因而感到迷惑,
但是现在我认识到,原因就是测试:如果某件事做错了,内置的测试安全措施会通知你出
了问题,并指出问题在哪儿。
但是编程语言内置的测试也只能ม做到这么多。某些时候,你必须介入其中ณ,添加余下的测
试与编译器和运行期的系统相互配合,从而产生完整的能够验证整个ฐ程序的测试包。
而且,难道你不希望像编译器从旁้照看着你一样,让这些测试从一开始就帮你走得正确吗?
这