[转]测试的三重境界

测试的第一重境界:围着Bug转 “意 识决定行动,行动决定结果”是管理学中众所周知的名言。

  测试的第一重境界:围着Bug转

  “意 识决定行动,行动决定结果”是管理学中众所周知的名言。做测试的前几年,笔者并没有这个意识,也没有主动地去思考过这个问题,但随着一个个项目任务、一桩 桩事件的历练,慢慢感悟到这句话也适合对测试工作境界的理解。“心态决定命运”,“态度决定一切”,有很多名家学者都写过这方面的书籍,基本上已成了我们 不可否认的真理了,但是要真正应用在自己的工作生活中,恐怕就不那么简单了。诚然,测试工作,除了需要拥有过硬的测试技术外,还必须有正确的测试心态,也 正是这些心态意识左右着你的日常工作。不同的心态反映了不同的测试境界高度,最终体现出不同的结果。

  围着Bug转,是测试三重境界中的第一重。概括起来,它又可以分为三个阶段,第一,发现Bug;第二,定位Bug;第三,关闭Bug。这三个阶段对测试人员 的要求不仅在技术上需要逐层递进,在综合素质上也提出更高的要求。三个阶段之间环环相扣。直到Bug的生命周期结束。围着Bug转的三个阶段对测试人员的 要求及Bug被发现到关闭的生命周期示意图。如图2-1所示。

  图2-1 围着Bug转的三个进阶图

  谈到围着Bug转的的三个阶段,不禁想起中国近代著名学者王国维在《人间词话》中提到的人生的三重境界:

  “昨夜西风凋碧树,独上高楼,望尽天涯路”。

  “衣带渐宽终不悔,为伊消得人憔悴”。

  “众里寻他千百度,蓦然回首,那人却在灯火阑珊处”。

  细细思量,感觉它们之间亦有异曲同工之处。

  第一重“昨夜西风凋碧树,独上高楼,望尽天涯路”是说“古今之成大事业、大学问者,首先要树立明确的目标,即使长路漫漫,也下定决心将这条长路走下去。这是一个人在孤独之中寻找理想、寻找生命的落脚点的痛苦时刻”。围着Bug转的第一阶“发现Bug”,同样首先必须有明确清晰的目标,找Bug的过程是漫长的,反反复复、枯燥无味是工作的特点,但是为了达到目标“长路再漫漫,也得坚持走下去”,直到找到一堆堆的Bug。特别是对一些偶现的严重Bug,重现Bug的过程真如大海捞针,但是坚持就是胜利。笔者曾经在经历的一个项目中,花了近1个月的时间去重现与解决一个严重问题,最后在与开发人员的紧密合作下,终于找到问题的根源。

  第二重“衣带渐宽终不悔,为伊消得人憔悴”是说“执着的追求、忘我的奋斗,直至憔悴消瘦,连衣服都变得宽大,这一切努力都是为了心中的梦想”。对应软测中围着Bug转的第二阶“定位 Bug”。 这一阶段不仅在技术上提出了更高的要求,还要有刻苦钻研、穷追到底、不撞南墙不回头的执著精神,直到把问题的原因搞清楚才罢休。在国内目前的测试领域,大 部分公司这一步并没有要求测试人员来做,但是在国外,特别是一些知名的大公司,如在微软,几乎所有的测试人员都拥有深入调试程序的技能。它除了包含以最短 路径重现问题,还要分析问题的可能结果(例如分析Bug会影响到哪些模块),甚至给开发人员提出解决方案。显然,这一步要求测试人员要比开发人员具有更高的设计分析能力、代码调试能力、解决问题的能力。读者朋友,看到这里,对一些测试专业网上常看到的“测试人员是否要懂编程”这一问题已释然于怀了吧。

  第三重“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”。这一阶段是指经过不断磨炼,多次的失败,某一时刻忽然灵犀一点,领悟真谛,发现自己想要的东西原来就在自己的身边或领悟后的心里。在旁人看来,他的“蓦然回首”是如何偶然而幸运,但其背后的用功之勤、平时的积累之深,又岂是常人所能坚持,所能想象的呢?这时候,世俗目标是否已经达到已不再重要,重要的是灵魂的解放和心灵的归属。对应围着Bug转的第三阶“关闭Bug”,如果仅从字面理解,很简单,不就是开发解决了Bug,回归Bug,然后把Bug关闭。如果是这样,笔者认为这种观念仍属于第一阶。第三阶的关闭Bug,是指测试人员提交一个Bug后,要有主动意识推动开发人员解决问题,并协助他们解决,只有问题解决了,软件的质量才得以提高,测试人员的最终目的才能达到。提交的有些问题严格来说,它不属于Bug, 而是一种设计缺陷,此时测试人员该怎么办呢?需主动召集相关专家进行其影响面的风险分析,并跟进此问题的整个解决过程,如果风险点涉及其他专业的更改(如 嵌入式软件涉及硬件、机械等方面的知识),可能需要专门成立一个专项问题解决团队,以全面解决此问题,直到各专业方向的问题解决到位,回归验证完成,此 Bug方能关闭。站在Bug的生命周期角度分析,一个Bug由被发现的起点,走到被关闭的终点,才是一个合理的、完整的过程,如图2-2所示。但是要达到这一层,很可能有一大部分的工作已完全脱离了纯软件测试层面的工作,可是测试的最终目标不就是给用户一个高质量、信得过的产品吗?我们需要有这样的大气胸怀,才能把产品的测试工作做得更深远、更宽阔。

接下来结合案例对围着Bug转的三个阶段分别进行介绍。

  图2-2 Bug 生命周期曲线闭环图

  测试的第二重境界:站在Bug之上

  测试的价值仅仅是发现Bug吗?通过“站在Bug之上”测试第二重境界的介绍,希望能帮助读者正确理解测试的真正价值是什么,在实际工作中如何操作以体现 这些价值。不同的理念,将会牵引着测试人员朝不同的方向迈进,“站在Bug之上”可以拓宽测试人员的视野,找到更多可以充分体现测试价值的测试链,让测试 人员为项目的成功做出更大的贡献,从而带来更宽范围的测试成功。

  测试的价值不仅仅是发现Bug

  一提到测试,大家马上会想到Bug。测试仅仅就是为了发现Bug吗?这是值得我们思考的问题。

  从软件测试最基本的定义出发,早在1979年J. Myers在《软件测试的艺术》一书中提到:

  1、软件测试的目的就是尽早发现Bug。

  2、一个成功的测试就是发现了至今为止尚未发现的Bug的测试。

  总之,测试就是为了发现Bug,测试所做的工作无一不是围绕Bug而展开,如图2-8所示。测试发现Bug越多,测试人员越自豪,越有成就感,这个观点已几乎根深蒂固地扎在了我们的心里,测试除了发现Bug真没其他事情可做吗?

  图2-3已发现Bug为核心的测试机制

  发现了很多Bug,测试人员高兴了,但老板肯定是不高兴的。很明显的道理,为了解决这些Bug,他必须付出更多的成本,包括开发人员与测试人员的工资,更 严重的还可能影响产品交付市场的时间。商场如战场,时间就是金钱,时间能给产品带来更多的市场空间,为企业赢得更多的利润。理解这些商业知识能帮助我们做 正确的事,并且正确地做事。认识到这一点后,相信测试朋友就不会再为某个Bug还没有解决,版本却上市而耿耿于怀了。测试人员应该跳出仅发现Bug就沾沾 自喜的圈子,看到项目整体,站在公司的角度想测试可以做什么。只有项目成功了,公司才能获得利润,最终达到员工与公司双赢的目标。

  质量、成本、时间是项目管理的三要素。它们像三足鼎立,稳如泰山,即质量好、成本低、工期短,这样的项目当然是项目经理求之不得的。但它们又是矛盾地存在 着,形象地看,它们犹如一个等边三角形,如图2-4所示。对其中的任何一个元素处理不当,三元素的三角关系就会变得不稳定,将给项目的成功带来风险。

  图2-4 测试与项目管理要素关系图

  软件测试团队是整个项目团队大家庭中的成员之一,在软件质量上把关,要尽可能早、尽可能多地发现Bug。这也是软件测试成立的根本,是质量上能给项目做出 贡献的地方。那么在成本与时间的控制上,测试可以做些什么,要如何做呢?也就是前面提到的测试如何配合项目的成功做正确的事,并且正确地做事。

  小贴士:

  1、做正确的事与正确地做事

  2、做正确的事出发点是企业利益最大化,而不是站在个人和小团体的立场去做事,也不是怕承担责任,把事推给别人。要求我们在众多的可能性中选择,辨别出什么是正确的,什么是最直接、最可行的做事方式和方法,把企业效益最大化作为办事的标准。

  3、正确地做事,是驱动具体做事的人员如何按照领导的意见去做事,而不去考虑是否符合企业效益最大化的原则。

  对于测试,做正确的事就是站在用户的角度,进行常用功能(模块)重点测试,而避免非常用功能的过度测试,浪费成本,包括人力与时间的投入。正确地做事,就是采用合理、全面的测试方法验证软件是否符合用户需求,不想当然地通过用户根本不可能用到的非法操作或后门进行验证。下面讲述关于软件测试的2-8原则,通过此2-8原则,可以使软件测试在项目的成本与时间的应用上做到效益最大化。

  举个大家在日常生活中常遇到的例子,如经常看到广告上说,现在的手机软件的功能如何强大,如何丰富,但每一功能用户使用的频度都一样吗?回答是否定的。这 就有了在软件测试范围侧重点上存在的2-8原则,即要把80%的精力放在测试20%的重点功能上。从用户角度出发,这是值得的,也是需要这样做的。

 首先,分析在我们的软件系统中,哪些功能对用户来说是核心且重要的功能,然后安排合适的测试工程师负责这些模块。设计出的测试方案、用例进行重点评审,测 试执行过程重点跟踪。每一次软件版本发布时,即使没有更改此部分的代码,也对它们进行回归测试(这种回归需讲究策略与方法),因为它们太重要了,不允许有错误。

  下面是软件测试2-8原则的详细内容。

  1.80%的错误是由20%的模块引起的

  简单、容易的模块或功能是很少引入过多Bug的,而对于存在复杂逻辑的一些关键模块往往会引起系统80%的错误。只有关键模块稳定了,整个系统才可能真正的健壮和稳定。

  这个原则对于测试来说就是站在用户角度(而不是研发实现的角度),正确地选择重要功能模块作为测试的重点,不偏离方向。

  2.80%的测试成本花在20%的软件模块中

  设计测试用例时,常会用日产多少条用例来衡量工程师的工作。用例的多少与需求量有关,而影响软件架构设计的需求描述往往是比较少的。在这种情况下,设计测 试用例时特别需要结合软件的概要设计、详细设计一起考虑。如果用例设计人员为了达到用例的数量,通过大量复制用例,修改个别字眼,而没有真正去设计高效的 测试用例,那么用如此低效甚至更多的用例数量来对待复杂的20%的核心模块,在测试执行过程中必将导致一部分关键Bug找不出来。

  3.80%的测试时间花在20%的软件模块中

  对于复杂的模块,前期的测试设计和思考可能会耗费大量时间,而产出的用例量可能并不大。对于复杂的系统,特别是对于全新系统,必须舍得投入充足的时间来优先考虑设计,前期方案、用例设计的时间越短,后期的风险越大。

  在项目进展到一定阶段后,增加人力并不一定能解决缩短时间的问题。例如,如果复杂且核心模块在项目的后期才开始执行测试,由于Bug较多,而项目又需要短 时间把版本稳定下来,通常的做法是加人。然而加入的新兵需要一段时间的熟悉期,必要时还需要老兵来带,这本身又会影响到老兵的工作。另外一些性能测试、自动化测试工作也只有等版本稳定后才会有更好的效果。

  测试的第三重境界:挑战零缺陷

  孔子说“人无远虑,必有近忧”,用在软件测试上,是什么意思呢?可以这样理解,如果我们不从发生问题的根源上解决问题,认为测试仅仅是找Bug,千方百计找Bug,觉得Bug总是找不完,意识中就会陷入“永无天日”的状态。然而,有小部分测试人员还真希望软件存在多一些问题(唯恐天下不乱),这样可以多提交Bug,认为业绩比没有提交多少Bug肯定要好。无独有偶,有小部分开发人员也把自己犯下的程序错误视为理所当然,甚至还有个别人会戏虐地说“软件如果没有Bug的话,测试人员不就失业了”。这好像在唱一出双簧戏。软件开发的整个过程中,Bug是理所当然要存在的,是这样吗?软件工程中软件危机的根源问题只能通过找到Bug的手段来控制吗?

  实际上,我们都很清楚,任何一个Bug的产生都是有来源的,来源包括需求的设计、软件的设计(含代码的编写)等。相对于前端的设计,测试是事后的验证,是一种“堵”漏洞的措施。然而,在实际工作中,时间与成本并不允许我们去堵住所有的Bug。日本质量大师田口玄一说得好“质量是设计出来的,而不是测试出来的”。如果我们能变被动为主动,在设计之前,就做好设计的防患措施,为设计高质量的软件打下坚实的基础,这便是本节打算向读者介绍的测试的第三重境界:挑战零缺陷。

  1、缺陷的防与堵

  几乎在每次面试测试工程师时,笔者都会问一个这样的问题:“你所负责测试过的模块,是否存在漏测的情况”,几乎每个应聘者都回答说“有”。面对复杂的软件,纷繁复杂的运行环境,在有限时间内进行的测试活动,做到真正的零Bug是 不可能的,也是不现实的。但这些都不是理由,所有的测试活动是有目的的商业活动,每个公司有自己测试通过的一套标准或原则。虽然漏测不可避免,但并不是说 漏测是一种正常现象或应该的现象,出现的漏测问题如果超出公司所能接受的原则,就属于不正常的现象,很有必要进行漏测分析。进行漏测分析活动(需要特别注 意的是它绝不是对漏测人员的批斗会),它的主要目的是通过分析过去的教训,找出问题的根源,分析测试中哪个环节工作存在缺失,以拿出规避的可操作的措施出来。

测试人员进行漏测分析时,免不了对问题进行追本溯源。软件是由开发人员设计出来的,所以漏测分析活动少不了开发人员在场,甚至有时还会涉及需求设计人员。关于漏测分析的追本溯源,这里有一个关于开发与测试之间的工作关系像修筑堤坝一样的有趣比喻,如图2?11所示。开发人员设计软件就像修筑一道堤坝,如果堤坝在结构上存在问题,当洪水冲击时,可能不只是局部的泄漏,而是直接的决堤,犹如软件的崩溃。高高的堤坝,难免会存在漏水的小洞,或渗水的小孔,就好像软件中存在的小Bug。越是在堤坝基部的漏水或渗水问题越难发现,解决的代价也越大。

  在设计时要把结构建牢,不存在漏洞当然更好,这是一种防范。如果超越防范界线,把设计带出的大洞小孔遗留到测试环节,它只好拿着各种放大镜(使用各种方法)来检测,以网罗各种深深浅浅、大大小小的问题,最后通过“打补丁”的方式,堵住堤坝上的“百孔千疮”。

  图2-5缺陷的防堵与堤坝的防堵形象理解示意图

  2、缺陷的防堵

  在对缺陷的防与堵方面,测试是发现问题的中间角色,告诉开发人员哪里漏水或渗水了。防与堵的工作是由建堤者来做的。当然,防是主动的,堵是被动的,主动变为被动后,中间经历了资源与时间的投入,诚然即使是同一个 Bug,它们的代价也是完全不一样的。这种堵越在后面,影响越大,代价也就越大,如图2-6所示(摘自《代码大全》)是一个根据缺陷出现的阶段来增加测试成本的例子。

  图2-6 根据缺陷的引入和检测时间,修正同一缺陷所需的平均成本

  如上图2-6所示为在需求阶段引入的一个缺陷。如果立即发现了此问题,修改成本只需要1美元,但如果在系统测试阶段发现它,修改成本就增加了10倍。更为严重的是,如果在版本发布后用户端发现了此问题,则需付出10倍以上甚至是100倍的代价。缺陷在系统中的时间越长,解决它的代价就越大,因为时间越长,开发与测试人员修改的成本就越高,还将影响大面积的用户端升级。

时间: 2024-08-10 14:58:09

[转]测试的三重境界的相关文章

三重境界

三重境界 “ 三重境界”来自王国维!词以境界为最上,有境界,则自成高格,在于体悟,在于神交. 先来看第一重境界:“昨夜西风凋碧树,独上高楼,望尽天涯路”.      西风刮得绿树都凋谢了,表示当前形势很是恶劣.之所以独上高楼,在于我们感觉到只有自己才能爬上高楼,而且此时处境艰难,此种艰难多来自于胸怀天下的责任和自我修为的不足.有了这层境界,说明我们已经具备普通人难以企及的眼界高度.居高临下看到远方,看到天尽头,看到别人看不到的地方.望尽天涯路,几许苍凉,更多的则是内心生出的豪气壮志,说明有了排除

王国维的人生三重境界

最近,总能听到一些人在故弄玄虚地与人讲些为人的道理,把 王国维 的三重境界抬出来唬人,似懂非懂地阐释其中的奥妙.乍一听还真是那么回事,但是当你真想跟他细做探讨的时候,发现很多人对王国维只知其名不知其人,对他的三重境界也是只知其言不知其出处. 其实,"三种境界"论出自晚清学者王国维的<人间词话>之二六,原文如下:"古今之成大事业.大学问者,必经过三种之境界.'昨夜西风凋碧树,独上高楼,望尽 天涯路 ',此第一境也:'衣带渐宽终不悔,为伊消得人憔悴',此第二境也:'众

《从0到1》之企业经营的三重境界

"从0到1"与"从1到n"的企业经营方式对比 _________从0到1_____|______从1到n________ 创新                        复制 质变                        量变 垂直                        水平 蓝海                        红海 垄断                        竞争 唯一                        第一

PHP解耦的三重境界(浅谈服务容器)

「七天自制PHP框架」已经开始连载,谢谢关注和支持!点击这里 阅读本文之前你需要掌握:PHP语法,面向对象 在完成整个软件项目开发的过程中,有时需要多人合作,有时也可以自己独立完成,不管是哪一种,随着代码量上升,写着写着就"失控"了,渐渐"丑陋接口,肮脏实现",项目维护成本和难度上升,到了难以维持的程度,只有重构或者重新开发. 第一重境界 假设场景:我们需要写一个处理类,能够同时操作会话,数据库和文件系统.我们或许会这么写. 境界特征:可以运行,但是严重耦合 1 2

android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)

大家都知道listview的格式是一定的 而数据源确是多重多样的 这时候 就需要一种适配器来把数据源转换成listview要显示的格式 baseAdapter就诞生了. listview和gridView的显示和缓存机制 如下图 大家都知道屏幕的大小是有限的 可是listview中的数据却可能很多 所以手机不能一下子展示所有的数据 它只会加载屏幕上显示的数据 . 如上图,当我们把屏幕往下滑动时 item1回收到recycler 而item8要显示在屏幕上 item8从recycler取出这样一个

软件亚博即服务体育的三重境界

软件亚博与生俱来就是体育一种独特的服务.我们见到的许多商业软件,其实是省略了针对企业的细密咨询活动的服务.SaaS服务其实是将原本贴心的服务更加产品化而已,它只能在一些通用的领域得到广泛应用,涉及到企业业务的核心的服务,由软件公司提供的SaaS是无法满足的. 那么,未来,或者说从现在开始,软件这样的服务,到底会有哪些趋势?会呈现出什么样的特征?对软件公司而言,或者是对于用户而言,它到底有什么样的变化? 软件须通透业务逻辑 任何一个企业的诞生和发展,都缘于初始的一个朴素理念,或者说是想法.概念.要

BaseAdapter获取View之三重境界

在BaseAdapter获取View之前,BaseAdapter需要与数据源相关联. 可以使用构造方法: private List<ItemBean> baseListItems; private LayoutInflater mInflate; //布局装载器 public MyBaseAdapter(Context context,List<ItemBean> listItems){ baseListItems = listItems; //将数据源与数据适配器关联 mInfl

测试三境界

境界一.覆盖正常的功能测试,测试实现正常的功能,好多测试人员兢兢业业得干活,埋头找bug,认为实现基本正常功能无误就万事大吉了,完成了测试的使命. 境界二.覆盖异常的情况.一个优秀的程序员的大部分时间应该是跟异常情况做处理,否则,代码上线因用户数量广泛以及使用情景各异会出现各种问题,同理,一个优秀的测试人员也应该是将异常情况覆盖进去 境界三.形成一种框架,反过来能够对产品设计作出指导与反馈,从而促进产品的优化与进步,这就是经验的魅力所在了.尤其是当一个公司的产品能力很弱,设计出来的需求文档逻辑不

PPT设计的四重境界(下)

接上文 第三重境界:看山还是山,看水还是水 山可延绵不绝,亦可独占一端,水可飞流直下,亦可细水长流,世间万象皆有本,唯信者可知一二 当一个人走了很多路,遇见了很多人,他自然会明白,其实这个世界还是蛮有趣的.世界上有很多奇怪的人,有很多奇怪的事,但是大多数人是不奇怪的,大多数事是可以按常理出牌的.所以,这时候看待周遭万物眼光不同了,这时候人变得比较成熟,看问题也比较客观,心态也比较随和. 第三重境界PPT制作示例 过了套用阶段的人在我看来都是比较成熟的PPT使用者了,PPT素材对于他们来说没有太大