软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试技术>>其他相关>>正文
追求代码质量: 通过测试分类实现敏捷构建一
文章出处:ibm 作者:Stelligent Incorporated 发布时间:2007-02-09
人人都认可开发人员测试的重要性,但为什么运行测试还是需要花费太多时间?本月,Andrew Glover 揭示了三种用来确保端到端系统健壮性的测试类型,随后展示了如何按类型来自动排序及运行测试。即使是使用当今大型测试套件,这样做也能显著地减少构建时间。

    如果这样说不会(令您)很痛苦的话,请设想您是一名任职于一家 2002 年早期创建的公司的开发人员。在金钱的驱动下,您和您的团队接到了一项任务,即使用最新且最强大的 Java™ API 构建一个大型的数据驱动的 Web 应用程序。您和公司管理层都坚定不疑地相信这就是最终将被称为敏捷过程 的东西。从第一天起,您就用 JUnit 构建测试,且把它作为 Ant 构建过程的一部分尽可能频繁地运行。还将设置一个定时任务在夜间运行构建。在接下来的某个时刻,有人会下载 CruiseControl,不断增长的测试套件会在每次签入时运行。

时至今日

    经过过去几年的努力,您的公司已经开发了一个庞大的代码库和一个同样庞大的 JUnit 测试套件。一切都很正常,直到大约一年前,测试套件包含了 2000 个测试,同时人们开始注意到运行构建过程用时超过三个小时。在此之前的几个月,由于 CI 服务器资源紧张,您在代码签入时通过 Continuous Integration(CI)停止运行单元测试,并将测试切换到夜间运行,这使得之后的早晨时间非常紧张,于是开发人员努力去弄清楚是什么出错以及为什么出错。

    这些天,似乎测试套件整晚极少超过一次运行,为什么会这样呢?因为它们费时太多!没人会仅仅为了弄明白系统是否运行良好而几个小时守在那里。此外,整个测试套件都是在晚上运行,不是吗?

    由于测试运行得太不频繁,它们常常充满了错误。因而,您和您的团队开始质疑单元测试的价值:如果它们对代码质量那么重要,那又为什么会让人这么头痛呢?你们的结论是:单元测试有其重要的作用,但必须要能用一种更为敏捷的方式运行它们。

尝试测试分类

    您所需要的是一个将构建转换到一种更为敏捷状态的策略。您需要这样一种解决方案,使一天当中运行测试的次数超过一次,并使测试套件恢复到要用三个小时才能完成构建之前的水平。

    为完整地恢复整个测试套件,在试图提出一个策略之前,很有必要弄清楚通用术语 “单元测试” 的含义。诸如 “我家有一个动物” 和 “我喜欢车” 这样的表述并不很具体,“我们编写单元测试” 也是一样。这年头,单元测试能代表一切。

    就拿之前有关动物和车的表述来说:它们导致了更多的疑问。例如,您家有哪种动物?是一只猫、一条蜥蜴还是一头熊?“我家有一头熊” 和 “我家有一只猫” 截然不同。同样,当和汽车销售员交谈时,只说 “我喜欢车” 没什么用处。您喜欢哪种车:赛车、卡车还是旅行车?任何一个答案都能带来截然不同的结果。

    同样,对于开发人员测试来说,按照类型 将测试分类也是很有用的。这样做能够实现更为精确的语言,并且能使您的团队以不同的频率运行不同的测试类型。为了避免运行所有 “单元测试” 所需的令人恐惧的三小时构建时间,分类是关键。

三种类型

    测试套件可以形象地分为三层,每一层代表一种不同的开发人员测试类型,该测试类型由其运行时间的长短决定。正如在图 1 中看到的那样,每一层都增加了总的构建时间,要么增加了运行时间,要么最终增加了编写时间。
图 1.测试分类的三个层次
测试分类的三个层次

    底层由运行时间最短的测试构成,可以想象的到,它们也最易于编写。这些测试占用的代码量也是最少的。顶层由更高级别的测试构成,这些测试占用了应用程序更大的部分。这些测试有一点难于编写,执行时间也要长得多。中间层是处于这两个极端中间的测试类型。

三种类型如下所示:

  • 单元测试
  • 组件测试
  • 系统测试

让我们分别来看一下。

改进代码质量

别错过 Andrew 的相关 讨论论坛,里面有关于代码语法、测试框架以及如何编写专注于质量的代码的帮助。

1. 单元测试

    单元测试隔离地 验证一个或多个对象。单元测试不处理数据库、文件系统或任何可能延长测试运行时间的内容;因而,从第一天就可以编写单元测试。事实上,这也正是 JUnit 设计的确切目的所在。单元测试的隔离概念有无数的模拟对象库作后盾,这些库便利了将一个特定的对象从其外部依赖项中隔离出来。而且,单元测试能够在真正要测试的代码前编写 —— 由此有了测试优先开发 的概念。

    单元测试通常易于编写,因为它们并不依靠于架构的依赖项,且通常运行得很快。缺点是,独立的单元测试只能覆盖稍显有限的代码。单元测试的重大价值在于:它们使开发人员能够在尽可能低的层面上保证对象的可靠性。

    由于单元测试运行得如此之快且如此易于编写,代码库中应包含许多单元测试,并且应该尽可能多地运行它们。在执行构建时,应该经常 运行它们,不管是在机器上,还是在 CI 环境的上下文中(这意味着,代码一经签入 SCM 环境,就要运行单元测试)。

下一页


站内搜索
相关文章
◎解析测试工程师职业发展瓶颈三
◎解析测试工程师职业发展瓶颈二
◎解析测试工程师职业发展瓶颈一
◎试点项目的特点及处理方式
◎软件评测师考试经验分享
◎如何评价测试人员的工作绩效?
◎测试经理的能力要求
◎管理一个测试组织涉及到的相关概念
◎各种类型的软件的测试应该是相通的
◎MP3芯片方案
◎accessibility test的拓宽思维
◎测试人员如何获得高薪?
◎从企业问题来了解软件测试人员的作用
◎关于测试工作考核
◎测试就是不断的总结与创新
◎测试员的职责
◎从十大经典故事中学管理
◎优秀测试人员所具备的素质
◎一位软件测试工程师的工作总结
◎测试工作的未来
◎软件测试工程师的素质
◎模糊测试
◎做软件测试至少要有四种能力
◎面向对象的系统测试
◎我的SP心得
◎如何编制成功的测试计划
◎用vbs新建文件夹的方法
◎浅谈软件测试之技巧
◎微软公司是如何测试的
◎软件人员,做什么才好?
◎提高测试覆盖度
◎我从沙龙看测试界
◎软件测试职业发展的各个阶段
◎追求代码质量: 可重复的系统测试
◎软件项目测试管理经验谈
◎软件测试过程和流程区别
◎面试问题积累-新手注意
◎测试员的职责
◎软件质量保证的最佳实践之一:Code review和Case review
◎16个月的工作感想
◎如何增加面试成功的胜算
◎《测试之道》第四篇——胡马大宛名
◎《测试之道》第三篇——吴钩霜雪明
◎《测试之道》第二篇——大道如一,过犹不及
◎《测试之道》第一篇——道可道
◎软件测试方向杂谈
◎程序员实用测试技巧(1)
◎测试小技巧之文档编写
◎软件测试的起源与发展
◎优秀测试工程师应该具有的基本素质
热门文章
◎软件测试工程师面试问题选登
◎一个初级测试工程师的工作总结
◎软件测试常用术语表
◎测试人员面试三步曲
◎DOS命令大全
◎什么样的测试人员是好的测试人员
◎软件测试基本方法
◎好的测试工程师应具备的素质
◎软件测试工程师面试题
◎软件测试入门书籍(2)
◎面试官最爱问的问题背后真相
◎我在软件公司成长的三年
◎应届毕业生少走弯路的十条忠告
◎有关软件测试的术语定义集锦
◎微软的软件测试方法(一)
◎软件测试步骤
◎全景记录:软件测试工程师的一天
◎我的测试经历(1)
◎漫谈软件测试工程师的角色定位
◎谈谈对测试职业的看法
◎测试需要掌握什么
◎软件测试员自身素质培养
◎测试小技巧集锦之一黑盒测试
◎近10年最强的50本计算机图书,您读过几本?
◎软件测试人员职业发展助手
◎测试要点总结
◎如何制定成功的测试计划
◎什么是ERP,通俗版解释
◎测试的主要评测方法(1)
◎软件产品测试标准
◎测试经验交流
◎微软的软件测试方法(二)
◎编写优秀Bug报告的艺术
◎软件测试及其支持工具
◎从程序员到测试工程师
◎软件测试应遵循的八条原则
◎个人职业生涯规划发展
◎你适合做测试吗?
◎测试版本大全
◎网管和黑客都必须知道的命令
◎测试人员的挑战
◎我的测试经历(2)
◎Alpha和Beta测试简介
◎QA活动的理解与实施
◎浮躁的国内测试界—2006年测试人员招聘感悟
◎想编写出优秀技术文档,先学学这四招
◎网络最经典命令行
◎软件测试的误区
◎我的测试经历(3)
◎软件测试的心理学问题

Google提供的广告