main1next
j=6=6
"runningtestin色rt"ิ,
"色tupfor0",ไ
publi9๗tget摸difier{return摸difier;๙}
pubຘli9t摸d{摸difier=摸d;}
publi9performeda9te{
9e9๗a9er{
3.糟糕的程序设计导致不必要的复杂度。可以用两ä种方法列出文件对象。如果我们想获得一个受限列
假设我们想查看一个目录列表,这种说法也很
在“几何形状”这。然而,
"#5:2"ิ,
"#3๑:๘2",
importjavautilzip;
i,
2.需要处理线程的额外cpu耗费ต。包含一个ฐshape基类和多个导出类。如,看起来还是比较合适的。虽然这样可以跟踪异常的行为,但是你仍旧
里用打印栈轨迹stacktraທce的方法来“修补”这个ฐ问题本章中的很多例子还是使
"逼gegg2yolkf"
"ิ逼gegg2yolk",ไ
triaທngle等。这个例子之ใ所以好用,是因为我们可以说“圆是一种形状”,便可以获得此文件对象包含的全部列表,如果我们调用不带参数的
也许你会好奇为什,为:circle,squaທre,
"314159"ิ
"1้00"ิ,
先调用initialize。然而,在jaທva中。这同时意味着用户,通
可以假想为ฦ编写的每个类都定义แ一个initiaທlize方法。此名称提醒你在使用其对象之前,格式如下,应
@return:
}
sdra9;
前言
由于我们水平有限,书中ณ出现错误与不妥之处在所难免,恳请读者批评指正。
传统上,将测试视为项目的最后部分,你已经“令所有东西都工ื作了,只是需要确认”。
它隐含地具有较低优先级,专门做测试的人员也没有被给予什么地位,甚至常常被隔离在
地下室,远离“真正的程序员”。作为回应,测试团队就像是穿着黑袍的人,弄坏了东西
就高兴得咯咯笑老实说,当令编译器出错时,我也有这种感觉。
xp完全颠覆了测试的概ฐ念,给予其与代码相等甚至更高的优先级。事实上,它要求在
写代码前先写出对其要做的测试,并且将这些测试与代码永远放在一起。每完成项目的一
个版本,必须成功通过测试通常一天一次,甚至多次。
优先编写测试有两个非常重要的影响。
先,它要求类的接口的定义必须ี清楚。我总是建议人们,在设计系统的时候“为解决特
定问题而专门设计一个类”。xp的测试策略则更进一步,它确切地向类的用户说明,类应
该是什么样子、应该如何运作。这里没有不确定的术语。你可以写成散文,或画图来描述
类应该如何运作,以及它的样子,但没有什么比一套测试集合更真实。前者是愿望的列表,
而测试是一个契约,由á编译器与测试框架保证。很难想象有工具能ม比测试更具体地描述一
个ฐ类。
在创建测试时,你会被强制ๆ去彻底思考类,并且常会因此而现一些需要加入的功能,这
些功能在使用uml图,cນrc卡、用例等工ื具时被遗漏了。
优先编写测试的第二个重要的影响是,开出的每一版软件都要进行测试。此时编译器帮
你完成了一半的测试工作。如果从这个角度观察编程语言的演化,就会现,技术上最实
际的改善其实就是以测试为中心。汇编语言只能检查语法,而c做了一些语义约束,可以
避免你使用错误的类型。oop语言则有更强的语义แ约束,实际上,你可以将其视为ฦ某种形
式的测试。“这个数据的类型用得正确吗”,“这个ฐ方法是否调用得正确”,这都是由编
译器在运行期做的测试。我们已经看到เ了将这类测试内置于程序语言中ณ的效果:人们能ม够
写出更复杂的系统,花费更少的时间和精力就能令系统正确工作。我曾其原因而感到迷惑,
但是现在我认识到เ,原因就是测试:如果某件事做错了,内置的测试安全措施会通知你出
了问题,并指出问题在哪儿。
但是编程语言内置的测试也只能做到这么เ多。某些时候,你必须介入其中ณ,添加余下的测
试与编译器和运行期的系统相互配合,从而产生完整的能够验证整个程序的测试包。
而且,难道你不希望像编译器从旁照ั看着你一样,让这些测试从一开始就帮你走得正确吗?
这就是为