欢迎来到天天文库
浏览记录
ID:37732736
大小:107.00 KB
页数:12页
时间:2019-05-29
《利用Ant和JUnit进行增量开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、利用Ant和JUnit进行增量开发作者:MalcolmG.Davis 软件开发习惯中一个细微更改都可能会对软件质量产生巨大改进。将单元测试合并到开发过程中,然后从长远角度来看它可以节省多少时间和精力。本文通过使用代码样本说明了单元测试的种种好处,特别是使用Ant和JUnit带来的各种方便。测试是大型开发过程中的基本原则之一。在任何职业中,验证都是一个重要部分。医生要通过验血来确诊。波音公司在研制777的过程中对飞机的每个组件都进行了精心测试。为什么软件开发就应该例外呢?以前,由于在应用程序中将GUI和商业逻辑紧密联系在一起,这就限制了创建自动测试的能力。当我们学会通过抽象层将商业逻辑
2、从界面中分离出来时,各个单独代码模块的自动测试就替代了通过GUI进行的手工测试。现在,集成开发环境(IDE)能在您输入代码的同时显示错误,对于在类中快速查找方法具有智能探测功能,可以利用语法结构生成彩色代码,而且具有许多其它功能。因此,在编译更改过的代码之前,您已经全盘考虑了将构建的类,但您是否考虑过这样的修改会破坏某些功能呢?每个开发者都碰到过更改“臭虫”。代码修改过程可能会引入“臭虫”,而如果通过用户界面手工测试代码的话,在编译完成之前是不会发现它的。然后,您就要花费几天的时间追踪由更改所引起的错误。最近在我做的一个项目中,当我把后端数据库由Informix更改到Oracle时就
3、遇到了这种情况。大部分更改都十分顺利,但由于数据库层或使用数据库层的系统缺少单元测试,从而导致将大量时间花费在尝试解决更改“臭虫”上。我花了两天的时间查到别人代码中的一个数据库语法更改。(当然,那个人仍是我的朋友。)尽管测试有许多好处,但一般的程序员对测试都不太感兴趣,开始时我也没有。您听到过多少次“它编译了,所以它一定能用”这种言论?但“我思,故我在”这种原则并不适用于高质量软件。要鼓励程序员测试他们的代码,过程必须简单无痛。本文从某人学习用Java语言编程时所写的一个简单的类开始。然后,我会告诉您我是如何为这个类编写单元测试,以及在编写完它以后又是如何将单元测试添加到构建过程中的
4、。最后,我们将看到将“臭虫”引入代码时发生的情况。从一个典型类开始第一个典型的Java程序一般都包含一个打印"HelloWorld"的main()。在清单1中,我创建了一个HelloWorld对象的实例并调用sayHello()方法,该方法会打印这句习惯说法。清单1.我的第一个Java应用程序"Helloworld"/**HelloWorld.java*Myfirstjavaprogram*/classHelloWorld{/***Print"HelloWorld"*/voidsayHello(){System.out.println("HelloWorld");}/***Test*
5、/publicstaticvoidmain(String[]args){HelloWorldworld=newHelloWorld();world.sayHello();}}main()方法是我的测试。哦噢!我将代码、文档、测试和样本代码包含在了一个模块中。保佑Java!但随着程序越变越大,这种开发方法很快就开始显现出了缺陷:混乱类接口越大,main()就越大。类可能仅仅因为正常的测试而变得非常庞大。代码膨胀由于加入了测试,所以产品代码比所需要的要大。但我不想交付测试,而只想交付产品。测试不可靠既然main()是代码的一部分,main()就对其他开发者通过类接口无法访问的私有成员和方
6、法享有访问权。出于这个原因,这种测试方法很容易出错。很难自动测试要进行自动测试,我仍然必须创建另一程序来将参数传递给main()。类开发对我来说,类开发是从编写main()方法开始的。我在编写main()的时候就定义类和类的用法,然后实现接口。它的一些明显的缺陷也开始显现出来。一个缺陷是我传递给main()来执行测试的参数个数。其次,main()本身在进行调用子方法、设置代码等操作时变得很混乱。有时main()会比类实现的其余部分还要大。更简单的过程我原来的做法有一些很明显的缺陷。因此,让我们看看有什么别的方法可以使问题简化。我仍然通过接口设计代码并给出应用示例,正如原来的main(
7、)一样。不同的是我将代码放到了另一个单独的类中,而这个类恰好是我的“单元测试”。这种技术有以下几点好处:设计类的一种机制因为是通过接口进行开发,所以不太可能利用类的内部功能。但因为我是目标类的开发者,我有到其内部工作的“窗口”,所以测试并不是个真正的黑箱。仅凭这一点就足够推断出需要开发者本人在编写目标类的同时负责测试的开发,而不是由其他任何人代劳。类用法的示例通过将示例从实现中分离出来,开发者可以更快地提高速度,而且再不用在源代码上纠缠不清。这种分离还有助
此文档下载收益归作者所有