qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

软件测试是抽样的活动

我想你一定听过很多人说, 测试应该要涵盖所有状况, 或是抱怨未甚么连简单的东西都没有测试到, 或者测试为什么需要这么多时间....
  这是因为他们对测试这个活动的本质有点误解, 他们不知道软件测试是sampling的活动. 即然是取样, 自然不会涵盖所有状况; 有可能你选样不好, 导致某些状况漏掉; 或者是随着你取样的多寡, 自然需要花的时间也就不同.
  这时候你会问, 为什么软件测试是sampling的活动?
  这个问题的答案是, 因为可以测试的组合是无限多种, 你不可能有无限的时间去做测试, 因此你必须挑选一些有代表性的来测试, 希望他能够涵盖大部分的状况, 让你投资较小的资源, 得到最大的效益.
  这时候你又问到, 为什么测试的组合是无限多种呢?
  这是我们试想有一个程序, 当你按空格键时, 会显示图案在屏幕上, 按其他按键则不会显示任何东西.
  当你使用黑箱测试的方法, 也就是在不知道程序内容状况下测试, 你会如何进行一个完整的测试?
  把所有按键都按一次, 看看是否照预期的结果运作. 这样就好了吗?
  程序设计师若是设定连按八次return键也出现同样的效果, 你怎么会知道呢? 若是要防止这样的事情, 你要试多少种组合才能发现? 答案可能无限次.
  你会说不可能有能写这样的程序, 那你说微软复活节彩蛋的程序是怎么出来的? 那些银行后门程序又是怎么来的?
  那你会说如果可以做白箱测试就可以避免这样的状况. 是吗? 事实上是不可能的
  第一, 通常程序的行数都是很庞大的, 第二, 即使程序不长, 但是程序读入的data, 它的值域是很庞大的, 若是32 bits的 integer, 范围是2147483647~-2147483648(大约是这样, 我没有记太清楚), 你如何确保每个数字进去都正确, 而且你可能是不只一个data. 所以二者组合起来, 应该也是一个天文数字吧!!
  所以到这里你可以知道要测试的状况是无限的, 你不可能有完整测试. 因此你必须要sampling.
  我想可以从测试方法中, 来印证测试真的是sampling. 你知道为什么会有statement coverage, branch coverage 或是decision coverage吗?
  当初科学家在想有这么多组合, 那要怎么挑选test case呢? 那找会经所有statements的test cases, 这样会把所有 statement都测过. 可是后来有人想, 即使测过所有statements, 还是会漏掉一些branch不会经过, 所以这样的取样不够好, 因此改成取样会经过所有branch的test cases. 可是后来又想经过所有branch, 还是不足, 因为有些decision 不会包含.
  因此你会发现到, 每种测试方法都是在取样, 只是取样方法不同, 严谨度不同, 因此会有不同种类或数量的test case出来.
  看到这里, 你会知道测试是测不完的, 因为组合真的太多了. 我们可以做的, 是加强取样的能力. 不过要小心的是, 不要选太多没有价值也就是没有代表性的test cases, 那不会有什么帮助的.

posted on 2014-11-18 09:46 顺其自然EVO 阅读(193) 评论(0)  编辑  收藏 所属分类: 测试学习专栏


只有注册用户登录后才能发表评论。


网站导航:
 
<2014年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜