本次很荣幸的由我来写一篇稿子。

  在做软件测试工程师的这几年,收获了不少,对软件测试这一职业的理解也随着工作经验有这更加深入的了解,在这里写一篇关于“软件测试”的小文,发表一下我个人的一些拙见,供大家探讨学习之用。


  软件测试

  什么是软件测试?其实现在很多人对软件测试这一职业不是很了解,不知到底什么是软件测试。

  关于软件测试的定义有很多种,我个人觉的比较符合的是:“使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。由于现在软件发展的十分迅速,软件的复杂度也越来越高,所以软件测试现在也变的原来越重要,软件测试贯穿于整个软件生命周期,软件测试并不局限于程序测试,它还包括对相关的需求、文档的测试,也包括一些多样化的回归测试、压力测试、性能测试等。

  关于软件测试理论知识在很多书中都有详细的描写,这里不摘抄了。但是根据我的经验,想要做好软件测试,深入了解软件测试的理论知识是必不可少的,很多很多实际遇到的问题,都是由于对软件测试的理论知识的不了解造成的。

  测试心理

  做好一名软件测试人员,调整好心理是必须的。

  (1)“创造者”与“破坏者”

  在心理上,软件开发和测试大的区别在于前者是“创造者”而后者是“破坏者”。

  对于“创造者”而言,在心理上是不会对自己“创造”出来的产品进行破坏,像每个人都会很爱惜自己的手工作品。而对于“破坏者”,心理上应该是属于乐于看到自己测试的系统“崩塌”的场面,像拿着别人的手工作品摔砸扔来证明那个手工不行一样。

  又如在实际应用中,开发人员会说:“这个功能我测过好几遍了,没有问题了”,但测试软件却还是能在这个功能里挑出很多的问题,原因在于,开发人员测试时,心理上的关注点放在了“证明这个功能点可行”上,往往会无意识的绕过一些可能会引起问题的操作;而测试人员的关注点放在了“使这个功能点不行”上,会尝试各种可能造成问题的操作。所以“破坏者”需要利用你所有可知的测试策略与方法,对软件进行不同程度的“破坏”,检查各种状况下,软件的处理方式与系统的能力。

  (2)“第三方视角”&“好奇心”

  以第三方的眼光看软件产品是测试人员与开发人员在进行测试时大的区别。除了“第三方的视角”,测试人员在心理上还要时常保持“好奇心”,随着测试的深入,测试人员应不满足于现有的测试成果,“好奇心”会让我想知道每次点击操作背后系统正在做些什么,驱使我去找程序员问个究竟或者看他们的代码是怎么写的,看看能否进一步优化系统;“好奇心”会让我想弄清楚究竟多少用户同时操作,系统会崩溃,能否应付系统上线后的正常使用;“好奇心”会驱使我在想用户如果来使用软件的时候会如何操作,会遇到什么样的问题,会不会觉得繁琐。有了“好奇心”,才能让系统在上线前做了更加完备的测试。

  (3)“兴趣”

   “兴趣”也是关键,做过软件测试工作的人知道,软件测试有时候是一个很繁琐枯燥的工作。比如测试一个表单填写提交的功能,需要使用不同数据进行填写并提交,所以非常有可能出现的情况是,这一星期,每天8小时的工作是坐在电脑前,不停的做着“填写表单并提交”这样的简单机械时劳动,这时,“兴趣”是能让我摆脱枯燥的方法。兴趣是好的老师,如果对测试工作真正感兴趣的,会不断地研究测试相关的理论知识、技能技巧、工具等。如上面说的“提交表单”测试,你可以把它当成一种挑战,目标是搞垮它,这时,可以尝试各种各样测试方法:尝试不同的填写数字、在填数字的地方写英文、在写英文的地方写中文、将必填处留空提交、在填写框中复制上一篇10W字的文章、上传附件处上传各式各样的格式文件、上传50MB以上的图片文件、使用QTP反复快速操作、使用QTP Object对象方法篡改页面控件属性提交、使用Loadrunner模拟大量用户同时提交、提交的时候拔掉网线、用Sniffer或HttpWatch抓包进行观察等等,有太多的方法可以尝试,再使出浑身解数后,发现不知不觉中,已对表单的各种场景进行了模拟测试,提交了大量表单,时间也觉得一个星期都不够了呢。用一个比喻来说的话,如James A. Whittaker的《How to Break Software》说的,“像小时候我们拿上一个小玩具,可能是一个陀螺,甚至是一个拖把,我们也会玩上半天也不会感到厌烦。我们会变着花样来玩它,我们扮演各种角色,把它当成道具,玩得不亦乐乎。现在的测试工作是什么,测试的对象有时候是个玩具,只不过有些看起来过于严肃而已。如果我们能把软件当成玩具来玩,那么我们可能不会那么快认为测试已经可以停止了。因为还有那么多有趣的玩法还没尝试。如果实在是玩腻了,还大可以把玩具狠狠地甩在地上,用脚踩几下,看它有什么反应。这也是一种测试方法!你是在进行破坏性测试!把你的小脚踏车一边又一边地从斜坡上冲下来,每次装上不同重量的东西,看装上哪一种东西会快。哈哈,原来你是在做压力测试!”

  PS:经常有初入软件测试的人发邮件给我问,说做软件测试是如此的枯燥无味,而且很难在一个软件中找到更多的BUG了,或是开始抱怨回归测试的无聊时,我都会告诉他,你还没找到软件测试的“兴趣”。非常有幸的,我发现了“它”,它让我工作到现在仍能在软件测试中找到无限的乐趣与挑战,也是它,迫使我学习更多的知识。


  测试方法

  测试的方法太多了,不是我一篇小文能够全部概括的,在这里,我说一些基础的测试方法。

  如测试一个登录界面。有用户名和密码框,确定和重置按钮。用户名和密码长度要求为6-12位。

  (1)冒烟测试

  我们测试的时候,先需要使用正确的账号登录一遍,这叫“冒烟测试”,“冒烟测试”的作用是判断一个功能模块的基本功能是否实现,如果“冒烟测试”能通过,则继续进行深入的测试,如果不过,则不继续进行测试。

  冒烟测试是测试的第一步,当发现软件连基本的功能都无法实现的时候,应立即终止测试,交于开发处理问题,而不是继续测试,放慢了整体研发速度。

  (2)边界值& 等价类

  当“冒烟测试”过了,则可以进一步进行测试了。这里需要用到“边界值”和“等价类”的测试思想。何为“边界值”?边界值的概念是输入稍高于其边界值及稍低于其边界值的一种测试方法。往往会在边界值的地方发生错误或与需求文档要求的不符合。如例子中,假设限定用户名长度只能为6-12位,则我们需要分别对长度为5位、6位、7位、11位、12位、13位这6种长度进行测试,这是“边界值”法。何为“等价类”?等价类是一种数学上的概念,在这里是将一个测试点划分为多种类的集合,如:还是长度只能为6-12位的问题,使用等价类的方法可以划分为三类:1是小于6位的情况,2是6-12位的情况,3是大于12位的情况。测试的时候,需要在这三类情况中各举出一套测试数据进行测试。这是“等价类”。

  从概念上来看,边界值和等价类的方法很好理解,这是软件测试中,基础的测试方法,但能真正活用于测试项目中的的确不多。从不少的来信中看到,其实还是有很多很多的测试人员不知道这两种测试方法,更不用说活用。但如电影中厉害的大招往往是基础的招式,小说中厉害的人往往只是扫地僧,烹饪中能看出能力的往往是炒蛋炒饭一样。看一个测试人员的基础和能力,看他写的测试用例知道了。能活用与简单的测试方法,才是有效高效的测试。

  (3)错误猜想

  猜,这也是一种测试方法,这也是用的多的一种测试方法。当然,不是胡猜,而是有依据的猜。往往经验丰富的测试人员能“猜”到更多有可能产生问题的情况,写出更加有效的测试用例。刚刚的登录例子,可以“猜”在能正常登陆的账号前或后加个空格,看看是否能正常登录;可以“猜”输入空的用户名和密码进行登录的情况;可以“猜”在登录框中粘贴进大于保存用户名变量类型的字符个数;可以“猜”在注册一些带有奇怪字符或是超出字库范围的文字后能否正常登录;可以“猜”登录瞬间关掉页面检查Sever上Session是否释放等等,能猜的内容很多很多,随着经验的增长和对系统越发的熟悉,会“猜”到更多测试方案。

  (4)场景法

  这也是在平时用的比较多的方法,定义不同的场景,进行有规律的测试。主要用于检查流程等,可使用在有较多分支流程中进行测试。

  (5)失败测试

  纯粹为了破坏而设计和执行的测试用例称为失败测试。可考察系统超出需求范围时的行为。

  测试方法太多太多,这里不一一阐述了,但是上面5种,是用的基础也是用的多的方法。


  测试用例

  测试用例的重要性不用多了,能规范化测试,记录所有可能出现的问题,随着对测试用例的扩充,能越来越达到完备的测试。关于测试用例,我想说的是两点,“预期结果”与“测试数据”。

  (1)预期结果

  测试用例中必须要写的中,重要的一项是预期结果,我在指导一些网友写的测试用例的时候,发现这点很难有做的很好的。往往刚接触测试的人员会在预期结果一栏中写入诸如“登录正确”、“提交失败”等这样简单的预期结果。殊不知这样的写法和没写是差不多的,因为当另一个测试人员进行测试的时候,完全不知道“登录正确”时的表现形式,应写明页面上显示了些什么,那个角落会有什么样的显示,数据是否真正写到了数据库中而“提交失败”需写明失败提示到底是什么,是否有弹出框,是有错误图标等等的详细内容。

  在预期结果中不要出现如“查看弹出框中内容是否有图片”这样的有两层意思的句子,即不要出现“是否”。因为这样的书写,在别人看来是“查看弹出框中内容是有图片”是预期结果还是“查看弹出框中内容没有图片”是预期结果,这个看来只有写这条测试用例的人自己知道了。