最近开始觉得自己应该写些什么。分享和交流自己这么些年总结的所有经验、心得感悟和收获。也许没有用,也许也可以对其他的同行有点作用。
那么先从哪里讲起呢?
也许可以先从我从事的职业:测试开发说起。(哈哈,我是一名游戏行业的测试开发,以下仅仅是对这个领域自己的一点见解)
测试开发:顾名思义,一个懂开发的测试。本质是为了更好的测试。这是个人比较喜欢的定义。因为测试是它的灵魂,而开发只是测试的其中一个手段而已。
我很喜欢这个职业。因为它可以服务和接触到很多人,像开发、美术、策划、运营;只要你愿意,它可以透过对一个项目的各个工种的服务,从而更全面更系统的去了解一个项目是怎么研发的、怎么运转的。因而带来的另一个好处,它还可以训练自己从多维度来处理事情的。因为你会考虑到各个工种、甚至玩家和项目收益等各种情况,从而训练你不得不从多个维度去思考解决问题。
那么怎样才能作一个合格的测试开发呢?
个人认为最主要的几项基本素质是:
1、测试基础:掌握测试的理论和基础方法
2、程序基础:被测软件的运行环境的操作系统原理和知识、硬件知识,扎实的编程功底
3、良好的沟通能力
4、责任心、严谨的思维
5、求真,也就是好奇心(加分项,对你是否是个好的测试起着非常重要的影响作用)
那么针对每项基础应该学些什么?以下都是针对PC上c/c++类别的一点分享
*测试基础:
1)《软件测试的艺术》:这本书虽然很老,但是整体的脉络还在
2)《探索式软件测试》
3)《软件测试经验与教训》
*程序基础:
1)《代码大全》
2)《深入理解计算机系统》
3)《代码整洁之道》
7)《设计模式》
8)IDE,比如visual studio 20XX的调试技巧
之所以前两本必须读,在分析被测程序出现的问题,首先需要对先知道什么样的程序是好的程序,怎样写出来的程序是稳定高质量的好程序。《代码大全》的讲解,思路基本上是可以是适用于所有程序的。其实《编写无错c程序秘诀》,虽然讲的是c,但是思路也是可以一理通百理,也是可以借鉴的。只不过是不同语言,试用的库函数或用法不同罢了,但基本的思路是一样的。另外,必须对应用软件运行的环境,特别是操作系统有足够的了解,这样在编写和测试程序时,知道怎样可以更有效的利用和适配对应的操作系统,也更容易查找和判定问题所在。而《深入理解计算机系统》就是本不错的入门书籍。而后面几本书,只是为了更好的方便你理解被测程序的特性和内部原理。毕竟很多的程序猿们,可能因为各种原因会习惯是写出来,而不是深究,这也必然会导致各种隐患的埋入;而好的测试开发,自己首先就得是个合格的程序,才可能了解如何更好的测试被测的程序。所以自然,调试技巧也是必须掌握的。
同样的,因为你有程序的基础,你知道什么东西用手工测更合适,你也知道什么东西用代码测更合适,什么东西可能要借助于工具或者是自己去研发相关的工具
测试是需要知道自己的测试策略存在的边界和假设,以及被测程序的假设与边界的。想起一句话“认识你自己”。其实这句话同样适用于被测的程序,和自己所用的测试策略
*良好的沟通能力
沟通是门技术活。很多人觉得沟通很简单,但是只要稍稍想想自己平时和别人商量事情时,有多少时候,是别人同意给你做这件事情。就大概可以了解到我们自己的沟通能力如何啦。沟通其实会涉及到对心理学。作为测试人员,是需要学习沟通的一些常用技巧的(在写这段的时候,能感知其实自己是做的不好的)
另外,这里实际上还涉及到一点,对发现bug也是比较有利的:就是对应的开发同学其实是有自己的思维模式的特点,导致他写出来的bug是有他自己的性格特点,这个是需要琢磨和总结的
*责任心、严谨的思维
这两项对测试这个维度来说是非常重要的,责任心是你口碑和信誉度的基石,而严谨的思维则是实现良好口碑和信誉度的一个最重要的方法。因为没有责任心,他人是不放心交给你,认为经你手上的东西,既不能保质也不能保量。而如果没有严谨的思维,所测的结果也必然在品质上不会太好。
*求真,也就是好奇心
测试的本质,有个特性就是:求真。而求真,必然会需要质疑和挑战所了解的看似确定的东西。而要质疑和挑战,就必然需要实践。一旦实践,就很容易去伪存真,也就很容易发现被测程序以及设计者的思维体系的思维边界和bug。它是帮助发现更多bug的很好的利器。只是由于它和人的先天特质有关系。后天修炼有难度。因而个人认为是加分项。
总而言之,测试是个很好玩的事情,它在于探索、发现,了解、整合,乃至创造。当然这是我自身的经历和思维局限,所能看到的。也许有不对的地方,还请见谅。祝福所有在这条路上行走的测试同事们,愿大家越走越好!
**************************
后文:最近看james A.Whittaker的书,他写的自动化测试和手工测试各自擅长的方面,个人是非常赞同的。而且也比较有深度。特别我自己做过几年开发的事情和几年测试的工作后,读后感受尤为深刻。以下是记录他的原话,仅供参考。
“在这些争论当中,最简单的观点就是,自动化测试在回归测试和应用程序接口测试方面有优势,而手工测试在验证测试和图形用户界面测试方面更佳,可是我觉得这一观点转移了我们对真正问题的关注。”
“我认为,这个问题的本身与应用程序接口、图形用户界面、回归或者功能性测试无关。我们必须从不同的角度,参考业务逻辑代码或是基础结构代码,来看待我们编写的计算机代码。因为这才是手动测试和自动化测试的分水岭”
“业务逻辑代码规定了产品的结构标准,使得最终结果满足利益相关者或用户购买产品后锁期望得到的结果。它是一个能够使我们完成任务的规定。基础结构指标使得业务逻辑准则能够适用于它指定的环境。基础结构代码使业务逻辑多用户化、安全化、本地化等。它是一个平台粘合剂,让业务逻辑准则真正成为一个应用程序。”
“从直觉上来讲,手工测试能够更好地测试业务逻辑”“手工测试人员善于成为问题领域里的专家,他们能够利用目前已知的最强大的测试工具——他们的大脑——来存储非常复杂的业务逻辑”
“自动化测试,从另一个方面来说,擅长低级别的细节。自动化测试可以检测到崩溃、挂起、不正确的返回值、错误代码、突发异常、内存使用情况等”
“手工测试在寻找业务逻辑错误上优于自动化测试,而自动化测试在寻找基础结构性软件缺陷上胜过手工测试”
以谦卑的心感受,以感恩的心生活