用代码复杂度分析风险

发表于:2013-4-23 10:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:shadowwalker    来源:51Testing软件测试博客

  一些测试技术,比如边界值分析和结对测试,可以有效的帮助我们在尽量少的增加风险的同时,减少测试用例的数目。然而常见的问题在于产品的缺陷并不是 平均分布在代码里面的。在一些典型的软件项目中,总有一些组件比其他组件存在更多的缺陷,软件测试一个非常必要的环节就是预测那个项目区域存在更多的缺 陷,并有针对行的投入测试力量。

  1、风险行业

  基于风险的测试就是基于缓解产品中潜在风险的测试方法。该方法倾向于把可用的测试资源集中在最需要的区域。无法做到“面面俱到”的测试,我们就需要基于一系列的标准,有选择地集中投入测试力量。

  基于风险测试的方法是尝试归类出部分产品组建拥有更普及的用户场景,从而投入更多的测试力量。但这种测试方法的风险依赖于对测试重点的精确选择,从而忽略了一个事实,还是有用户会使用那些20%以为的功能和代码的。

  对最有可能产生缺陷的产品部分编写更多的测试用例是基于风险测试的另一种应用。

  2、复杂问题

  我们用一种寻找高复杂度代码的方法来预测缺陷出现的地方,代码审查。

  作粗略的代码审查时评感觉和主观衡量代码复杂度有时就足够了。

  最简单的代码复杂度测量方式可能是代码行数(LOC),行数越多,复杂度就越高。但是判断行数,没有统一的标准,个人有个人判断的方法,我倾向于只计算语句(C语言为例,只计入以分号结束的行)。你只需挑选你喜欢的即可以。

  3、测试回路复杂度

  所谓回路也就是程序中选择和判断的语句。回路复杂度度量方法,即辨别函数中线性独立路径(或判断)数目的度量方法。一个没有包含条件判断操作(比如条件语句,循环等)的函数在整个程序中只有一条线性独立的路径。

  计算McCabe复杂度=边-节点+2,还有一个最简单的方法:将条件(判断)语句的数量加1.

  3.1 Halstead度量

  Halstead度量是一套完全不同的复杂度度量,基于程序中语法要素以下4个度量:

  ● 独特算子的数量(n1)

  ● 独特算域的数据(n2)

  ● 所有算子出现的总数(N1)

  ● 所有算域出现的总数(N2)

  代码长度值=N1+N2;难度度量=(n1/2)*(N2/n2);

void HalsteadSample(int value)
{
    if (value != 0)
       {
           if (value < 0 )
               value + = 1;
            else
              {
                  if (value == 99)
                    value = 0;
                   else
                    value - = 1;
              }
    }
}

  算子    数量        算域              数量
  !=       1        value               6
  <        1          0                 3
  +=       1          1                 2
  ==       1         999                1
  =        3
  -=       1

  总计:n1=6,N1=8,n2=4,N2=12

  函数长度量=(N1+N2)=18,难度系数(n1/2)*(N2/n2))=9

  运用这种度量只要是用来标识可能需要返工或是额外分析的代码

21/212>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • sehnsucht1986
    2013-8-15 10:24:40

    Halstead度量中,例子的函数长度量 = (N1+N2)= 18,应该是20。
    而且,请问难度系数有标准吗?例子的难度系数为9,是个什么等级?

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号