【转】自动化软件测试杂谈

转自:http://www.51testing.com/html/98/n-810298.html

写这篇日志其实是有感而发。刚刚偶然看到论坛上有位童鞋在询问非计算机专业的做自动化的话难不难,看内容貌似这位童鞋应该才参加测试没多久,觉得做黑盒手工技术含量低,不涉及代码,以后没发展前途云云。这样的话我听过很多,这不奇怪,这也是大部分测试同行的一个普遍的现象。确实,正如我上一篇博文《软件测试工程师的“三十六变”》所写的,自动化测试工程师/架构师是我们测试人员的发展方向之一,要想向技术方面发展的话,可以说是大多数测试人员的理想目标。但被大多数人所忽视的一点现实是,很多人可能都没有想过:以我现在对测试的理解,对测试技术的掌握,究竟达没达到学习自动化测试的条件。这个条件是什么呢?就是两个字:思想。有很多羡慕做自动化的人,也有很多人尤其是不懂技术的管理者将自动化看做是软件测试的银弹,造成了自动化测试确实很火,好像大家都在盲目地追求自动化的现象。其实自动化测试没有大家想得那么神秘,说白了,它就是利用工具以及工具能理解的程序代替人去完成测试,去通过比较执行的结果来判断测试是否通过。它的优势很明显,它不会烦,不会发脾气,随便多复杂的操作,反复执行成千上万遍,只要你的程序没有问题,都会毫无怨言地为你执行完毕,而且比人快得多得多;但劣势也非常明显,最大的缺点就是工具不会思考,它不像人一样会设计新事物,它也不会变通,它是由人设计出来的。所以在这里,重要的不是学习哪种工具,用哪种工具,重要的是你的测试思想,你对被测系统的思考,这是任何工具都不能代替的。如果你对测试没有系统的认识,你对被测系统没有自己的思考,你无法应用你所掌握的测试知识制定更好的测试策略,那么即使你对工具的使用滚瓜烂熟,对各种工具技巧倒背如流,那么你仍然只是一个会写script的测试人员罢了,你跟只会跑case,点按钮,按手机的人没有什么两样,因为你们都没有自己的思想。你想想,没有思想的人,能成长吗?

  那说了那么多,究竟我所认为的比较理想的学习自动化的过程是怎样的呢?还是拿我自己的实际经历来举例吧,本人从事软件测试的这么几年时间以来,回想自己当初急切地想进步,想掌握“高级”技术(这里指自动化)的心情,跟现在很多童鞋是一样的,所以我非常能够理解。我当初也迷茫过,也迫不及待地在网上到处搜索什么才是最热门的自动化测试工具,然后找本编程的书,学啊学,练啊练,就盼着能早日修成正果。结果却经常事与愿违,不是项目用不上,就是因为换了公司,如从web转到了嵌入式测试,我学的那些工具就只能是压箱底了,从而不得不又重新学习另一种工具,另一种语言。而且由于缺少了对测试的理解和认识,就算我辛苦地学会了这些工具的使用,我也无法设计出优良的case,无法发挥出工具真正的力量。慢慢地我明白了,其实我需要学习的不是如何使用这些工具,我真正需要学习的是软件测试的思想,包括软件测试整个知识体系,比如测试的流程,不同的测试类型,它们的目的和用途,不同的测试设计方法,以及和开发模型的关系。如何报告缺陷,如何管理缺陷,如何对测试结果进行分析,同时还有一些编程方面的能力(这也是为自动化做铺垫)。这些才是我做好软件测试的基础,它就是帮助你以后学习自动化,做好自动化所必需的第一步,也可以说是一个precondition,只有这个precondition达到了,你进入下一步,学习自动化才是自然而然的事,不然的话,你就会发现你的自动化发展之路终有一天会block,因为你的前置条件没有满足,就跟跑case是一样一样的,呵呵。如果再通俗点用古代那些武林高手学武功来打个比喻的话,对软件测试知识体系的理解,对测试基础知识的掌握就相当于学习内功心法,而那些工具只相当于是倚天剑屠龙刀,内力不深厚,就算是绝世武器在你手中都只能是一堆废铁而已,不能发挥任何作用。而现如今这个浮躁的社会,能够潜心修炼内功心法的人少之又少,所以才空有诸多童鞋在刚做了一年黑盒手工测试就开始埋怨测试如何如何技术含量低,如何如何没有发展前途的论调,实在是可悲。

  如果你觉得自己对软件测试已经有了足够的了解,满足了第一步的条件的话(这个标准请参照我上一段所说的我们真正需要学习的内容,这个时期通常按照经验值的话短的需要两年左右,多的三五年,看各人努力的水平),接下来第二步,就像小学升初中一样,我们就可以自然而然地进入自动化测试的学习了。这个时候你学习自动化你会觉得这个过程非常地自然,全然没有直接进入软件测试就开始学自动化测试的那种茫然感,为什么这么说呢?因为在你有了对软件测试足够的了解之后,你自然就会思考如何才能提高测试的效率,在你所在的项目里面,哪些环节可以用自动化工具来代替人,哪些测试类型可以使用工具来自动化,而哪些地方又不适合用自动化。进而再思考该用什么样的工具,然后又该如何使用这些工具。你会发现一切都是理所应当去思考的事,因为你已经对测试有足够的了解了,你站在了一定的高度去看整个过程,一目了然。再打个比喻,就好像你长大了,成熟了,就应该去找对象谈恋爱一样,你的心理和生理都需要恋爱了。对,就是这种感觉,你应该有这样的感觉,呵呵。

  再接下来又该做什么呢?当你使用自动化工具到了一定的程度,你具备了一定的自动化测试经验后,你就会深深地认同一句话:金无赤足,人无完人。对,当然工具也不例外。无论你选用什么样的工具,都会有它的不足。这个时候你就会再进一步地思考下面这些问题:这些工具的实现原理是什么?它是怎么工作的?它们应用了些什么样的框架?如果现成的工具不能满足项目的测试需求的话,我能不能利用这些测试框架以及自身对测试的理解,对工具进行改进,甚至是自己去写一些工具来满足这些没有被满足的需求?在这个时候,这些问题会自然地冒到你的脑子中,如果你思考了,并且去研究了,并最终尝试去实现了,不管最后有没有成功,你都会发现你看待问题的层次又高了一些,不用任何人去指点你,你都能够主动地思考工具的原理,并尝试去改进它,这难道不值得高兴吗?所谓“熟能生巧”,这就是真正的“巧”所在了。如果能够在这个层次去思考问题,去看待问题,我相信你再回头看看你曾经在没有项目需求的情况下纠结于去学习某种特定的工具是多么地不成熟,可以想象你当时的茫然溢于言表。而如今,在你具备这些经验和功力之后,就如经历了大风和大浪,你会有一种“得道”的感觉,这可能才是你真正掌握自动化测试精髓的时候。最后,你可能又会将你自己做的工具进一步抽象出来,给大家再分享你所改进甚至是发明的新的平台和框架,“独乐乐不如众乐乐”,影响他人而不是被他人所影响,大师都是这样想的,不是吗?

  其实说了这么多,总结起来只有一句话:学习自动化是一个水到渠成的过程,不需要你去拔苗助长。要知道,出来混总是要还的。并不只有编程才是艺术,测试也是门艺术,而且是很多人都看不懂的艺术。外行永远只能看热闹,只有内行才看得懂其中的门道。好了,痴人说梦般地说了这么多,在这个浮躁的社会,或许并不会有太多人在意我所写的这些,也绝对不会有太多人因此而改变对测试的看法,对自动化的看法。文笔虽然不好,本人能力也有限,只希望有不明白而又想明白的人能够得到一些灵感,我就感觉很满足了,呵呵。

没有更多推荐了,返回首页