欢迎来到天天文库
浏览记录
ID:30952262
大小:90.70 KB
页数:8页
时间:2019-01-04
《追求代码质量(8)-通过测试分类实现敏捷构建-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、追求代码质量(8):通过测试分类实现敏捷构建-编程开发技术追求代码质量(8):通过测试分类实现敏捷构建原文出处:IBM中国如果这样说不会(令您)很痛苦的话,请设想您是一名任职于一家2002年早期创建的公司的开发人员。在金钱的驱动下,您和您的团队接到了一项任务,即使用最新且最强大的Java?API构建一个大型的数据驱动的Web应用程序。您和公司管理层都坚定不疑地相信这就是最终将被称为魏虑过禅的东西。从第一天起,您就用J5it构建测试,且把它作为Ant构建过程的一部分尽可能频繁地运行。述将设置一个定时任务在夜间运行构建。在接下来的某个时刻,冇人会下载Cruise
2、Control,不断增2的测试套件会在每次签入时运行。经过过去几年的努力,您的公司已经开发了一个庞大的代码库和一个同样庞大的JUnit测试套件。一切都很正常,直到大约一年前,测试套件包含了2000个测试,同时人们开始注意到运行构建过程用时超过三个小时。在此Z前的几个月,由于C1服务器资源紧张,您在代码签入时通过ContinuousIntegration(CI)停止运行单元测试,并将测试切换到夜间运行,这使得Z后的早晨时间非常紧张,丁是开发人员努力去弄清楚是什么出错以及为什么出错。这些天,似乎测试套件整晚极少超过一次运行,为什么会这样呢?因为它们费时太多!没人
3、会仅仅为了弄明口系统是否运行良好而几个小时守在那里。此外,整个测试套件都是在晚上运行,不是吗?由于测试运行得太不频繁,它们常常充满了错误。因而,您和您的团队开始质疑单元测试的价值:如果它们对代码质量那么重要,那又为什么会让人这么头痛呢?你们的结论是:单元测试冇其重要的作用,但必须要能用一种更为敏捷的方式运行它们。尝试测试分类您所需要的是一个将构建转换到一种更为敏捷状态的策略。您需要这样一种解决方案,使一天当中运行测试的次数超过一次,并使测试套件恢复到要用三个小时才能完成构建2丽的水平。为完整地恢复整个测试套件,在试图提出一个策略Z前,很冇必要弄清楚通用术语“
4、单元测试”的含义。诸如“我家有一个动物”和“我喜欢车”这样的表述并不很具体,“我们编写单元测试”也是一样。这年头,单元测试能代表一切。就拿Z前冇关动物和车的表述来说:它们导致了更多的疑问。例如,您家冇哪种动物?是一只猫、一条蜥蜴还是一头熊?“我家有一头熊”和“我家有一只猫”截然不同。同样,当和汽车销售员交谈吋,只说“我喜欢车”没什么用处。您喜欢哪种车:赛车、卡车还是旅行车?任何一个答案都能带来截然不同的结果。同样,对于开发人员测试来说,按照类型?将测试分类也是很有用的。这样做能够实现更为精确的语言,并且能使您的团队以不同的频率运行不同的测试类型。为了避免运行
5、所有“单元测试”所需的令人恐惧的三小时构建时间,分类是关键。三种类型测试套件可以形象地分为三层,每一层代表一种不同的开发人员测试类型,该测试类型由其运行时间的长短决定。正如在图1中看到的那样,每一层都增加了总的构建吋间,要么增加了运行吋间,要么最终增加了编写吋间。图1・测试分类的三个层次①壬一uouno①x山SystemtestsUnittests底层出运行时间最短的测试构成,可以想象的到,它们也最易于编写。这些测试占用的代码量也是最少的。顶层由更高级别的测试构成,这些测试占用了应用程序更大的部分。这些测试有一点难于编写,执行时间也要长得多。屮间层是处于这两
6、个极端中间的测试类型。三种类型如下所示:•单元测试•组件测试•系统测试让我们分别来看一下。1.单元测试单元测试傷/魏?验证一个或多个对象。单元测试不处理数据库、文件系统或任何可能延长测试运行时间的内容;因而,从第一天就可以编写单元测试。事实上,这也正是JUnit设计的确切目的所在。单元测试的隔离概念有无数的模拟对彖库作后盾,这些库便利了将一个特定的对象从其外部依赖项屮隔离出来。而且,单元测试能够在真正要测试的代码前编写一一曲此冇了瀏试犹尢必?的概念。单元测试通常易于编写,因为它们并不依靠于架构的依赖项,且通常运行得很快。缺点是,独立的单元测试只能覆盖稍显有限
7、的代码。单元测试的重大价值在于:它们使开发人员能够在尽可能低的层面上保证对象的可靠性。曲于单元测试运行得如此之快且如此易于编写,代码库中应包含许多单元测试,并且应该尽可能多地运行它们。在执行构建时,应该经常?运行它们,不管是在机器上,述是在C1环境的上下文屮(这意味着,代码一经签入SCM环境,就要运行单元测试)。1.组件测试组件测试验证多个相互作用的对象,但它突破了隔离的概念。由于组件测试处理一个架构的多个层次,所以它们经常用于处理数据库、文件系统、网络元索等。同样,提前编写组件测试有点难,所以将其包含至一个真止的测试优先/测试驱动的场景中是很大的挑战。编写
8、组件测试要花更长的时间,因为它们比单元测试所涉及的东
此文档下载收益归作者所有