用户输入测试(4)

上一篇 / 下一篇  2011-03-17 22:03:28

    在看见开发人员设置的默认值后,首要任务是把该默认值删除,留下一个空白的字段。(开发人员往往没有考虑到这种情况,因为他们把时间都花在如何设置默认值,却没有去想如果该数值没有怎么办。)接着就是试试在默认值附近的一些其他值。如果是一个数值字段,试试比默认值大1或小1的数。如果是一个字符串字段,试试修改默认字符串头部的几个字符,尾部的几个字符,加上几个字符或删除几个字符。还可以尝试一下使用和默认字符串具有相同长度但不同字符的字串等来看看结果。

  一个字段如果被预先设置好默认值,便和不含默认值的字段在程序处理时往往有很大的不同。测试人员如果愿意在这上面花费一些额外的时间,肯定会获得回报。

  使用输出来指导输入选择

  本章讲述的都是如何选择输入,至今为止我们已经讨论了如何根据输入值自身固有的属性(无论这些属性我们喜欢或是不喜欢)来进行输入选择。换句话说,一些属性(如类型、长度、大小、值等)很适宜作为测试输入对象。选择输入的另一种方法是考察它可能会(或者应该会)导致哪些输出结果。

  从很多方面来说,这和孩子试图说服父母让他去参加某个聚会的过程类似。孩子可能知道回答必定是两者之一,不是“同意”就是“不同意”,所以他肯定会使用一种让父母更有可能同意的方式来发问。比如,一种问法是“我可以参加那个激情四射的疯狂舞会吗?”另一种是“我有几个好朋友去乔伊家聚会,我可以和他们一起去吗?”前者听上去很糟糕。提问的方式在很大程度上决定了最后得到什么样的答案。

  这个概念也可以用于软件测试。具体来说就是先明确自己希望软件会产生什么样的反应,然后确定哪些输入会引发相应输出,然后在测试中使用这些输入值。

  很多测试人员的第一反应就是对任何一个功能,首先把其所有的主要输出结果罗列出来,然后确定哪些输入会引发这些输出。把输入和输出配对是最常用的一种手段,它可以保证所有有趣的场景都被测试过了。

  如果从抽象的角度而言,最高层的抽象就是把输出分为非法输出(illegal outupt)和合法输出(legal output)。前者的大部分都和我们前面描述的那些用于产生错误消息的技术相重复。出现重复是不可避免的,但是测试人员必须把精力主要放在生成各种各样的合法输出上,多多益善,这样可以保证新增的功能和场景都被测试到了。

  下面的这种测试方式要求测试人员积极主动地从输出结果来思考整个问题。测试人员首先确定他们希望程序产生什么样的输出结果,然后考察所有的用户场景,看看如何去生成期望的结果。还有一种测试方式相对而言比较被动一些,但有时它也非常有效,那就是先观察输出结果,然后再选择新的输入,并保证新的输出是重新计算后的结果,或者是确保新的输出结果和原先不同。

  当软件第一次针对输入产生某种响应时,通常是处于一种默认的情形,很多内部的变量和数据结构刚刚被初始化,输出结果第一次被生成。当输出结果被第二次生成时,很多变量的值还是上一次运行时被设定的值。这意味着第二次测试的情况和第一次的完全不同。第一次我们测试的是软件处于一个未被初始化的状态时如何产生输出,而第二次测试的则是当软件处于一个已被初始化的状态时如何产生输出的。这两个是不同的测试,如果其中一个测试通过了,而另一个失败了,这种情形也并不少见。

  还有一种从被动观察输出结果衍生出来的测试方法是寻找那些被保存起来的输出结果。这种输出值通常在被计算出来后会被显示在屏幕上,或者被存储在一个文件中以供程序未来再次读取。如果这些值是可以改变的,一定要试试去改动这些值或者改动它们的功能(大小和类型等),这样可以测试该值是否在原有的值上被重新生成了。测试人员对每一个功能都需要运行这样的测试。

  输入选择的复杂性只是测试人员在软件测试中最先遭遇的技术难题。不断地对软件进行输入后,软件内部的数据结构被持续更新,不同的内部变量值导致软件处于不同的状态,这就出现了软件状态的问题。下面就让我们来看看它是怎样让软件测试变得更复杂的。


TAG:

guchenggao的个人空间 引用 删除 guchenggao   /   2011-03-19 17:04:09
3
 

评分:0

我来说两句

日历

« 2024-05-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 15041
  • 日志数: 23
  • 建立时间: 2010-11-05
  • 更新时间: 2012-02-18

RSS订阅

Open Toolbar