| 网站首页 | 测试时代论坛 | Blog技术社区 | 软件测试技术 | 自动测试技术 | 软件质量保证 | 资料下载中心 |
     | 业界新闻 | 软件测试活动 | 软件测试培训 | 软件测试服务 | 软件测试期刊 | 测试时代工作室 | Segue工具专区 |
您现在的位置: 软件测试时代 >> 软件测试技术 >> 用例设计 >> 文章正文 用户登录 新用户注册
测试用例设计中的NP难题           ★★★ 【字体:
测试用例设计中的NP难题
作者:未知    文章来源:《软件测试实践》    点击数:    更新时间:2007-3-26    
 如何划分测试空间才能以尽量少的子集来覆盖整个测试空间属于测试用例设计的优化问题。从数学上来讲,这实际上是一个NP完全性问题。下面就来讲解为什么最少测试用例数问题是一个NP完全性问题。

  要说明这个问题,首先需要建立求解最小测试用例数的数学模型。

  假设在测试空间里有n个可测数据组成的集合记为D = {d1,…dn},假设测试空间里有m个可能的缺陷,把m个缺陷个缺陷集合记为B = {b1,…bm}。对于每个可测数据,都可能揭示出缺陷集合B中的若干个可能的错误,也就是说对每个可测数据能揭示的缺陷集合是B的一个子集,分别记这些子集为e1,…en ,(ei ∈B, 1≤ i ≤ n)。

  由于测试空间里的任一缺陷都是由可测数据来引起的,因此对于任一缺陷bk∈B(1≤ k ≤ n),必然存在一个可测数据di∈D(1≤ i ≤ n)可以揭示出这个缺陷,也就是说存在集合ei ( 1≤ i ≤ n),使得bk ∈ei。

  最少的测试用例数问题是找出最少个数的测试用例,使用这些测试用例能将缺陷集合中的缺陷全部揭示出来。实际上就是要找出若干个子集ei(1≤ i ≤ n),使得这些子集的成员可以覆盖集合B的所有成员。

  这样就建立起了最少测试用例数的数学模型,它属于数学中的集合覆盖问题,是一个典型的NP完全性问题。目前还找不到精确的多项式算法来解决这个问题,只能设计一些近似算法来对这个问题进行求解,后面讲的测试用例设计方法其实都是对这个问题的一种近似求解算法。

  如果要了解集合覆盖问题的近似求解数学算法,可以参考Thomas H. Cormen等著的《算法导论》一书的35.3节,里面有详细的讲解。

  《算法导论》一书里也举了一个集合覆盖问题的另外一个实际例子:假设X表示解决某一问题所需要的各种技巧的集合,另外有一个给定的可用来解决该问题的人的集合,也就是说对于技巧集合种的每种技巧,至少有一人掌握该种技巧。现在的问题是如何选取最少数量的人组成一个委员会,使得技巧集合中的任一技巧,委员会里至少有一位委员掌握该种技巧。将这个例子对比最少测试用例数问题的数学模型,会发现这是同一个问题。

  虽然最少测试用例数是一个NP完全性问题,但在实际情况中,大多数情况下测试用例数并不是太多,得到精确解的可能性还是很大的,只有那些比较复杂的有组合关系的情况下,用例数可能会存在一定的冗余。

文章录入:seanhe    责任编辑:seanhe 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    功能测试用例的书写方式
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)