论坛首页 综合技术论坛

软件模块的可测量性

浏览 7699 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-09-22  
哦,你省了link几个字,我就先入为主理解错误了^^
不过那两个页面我都打不开:((

你的公式在有嵌套的情况下是有点问题的.
if (
  case 1
  case 2
)else(
  case 1
  case 3
)
可执行路径为4,逻辑分支数量是多少?

简单的查找if\case\for的个数不能得到可执行路径数
尤其是对于写的比较差的代码

0 请登录后投票
   发表时间:2006-09-22  
嵌套与否, 执行路径的个数都等于 2 的 (逻辑分支的个数) 次方。

n = 逻辑分支的个数
执行路径的个数 = 2 ^ n

对于函数调用的关系也是如此。比如,
f(){
  g() {
    e() {}
  }
}

这三个函数的复杂度(执行路径个数)是要相乘的。 f * g * e。

从这里我们就可以看出mockup的作用。
mockup的一个用途就是,可以假设被替换的模块的复杂度为 1。不用考虑mockup的执行路径个数。
那么复杂度就可以线性化, 假设g 和 e 都是注入进来的,可以mockup。那么复杂度可以是 f + g + e。
0 请登录后投票
   发表时间:2006-09-23  
没有回答我提出的例子中的逻辑分芝和执行路径的个数啊?

另外,如果是从外部读入配置文件,从而实现分支处理,那又怎么检查呢?
0 请登录后投票
   发表时间:2006-09-24  
buaawhl 写道
关于逻辑复杂度。楼主的帖子给出的Link不错,只是简单了些。

条件语句,循环语句都是逻辑分支语句。if else, switch case, for while都代表逻辑分支。
逻辑分支是针对可能执行路径而言的——某一块代码指令是否能够被执行。逻辑分支语句下面的子代码块,有可能被执行(1 – n次),也有可能不被执行(0次)。条件语句if else, switch case,下面的子代码块有可能被执行0次,或者1次;循环语句for while下面的子代码块有可能被执行0次,或者n次。

一个逻辑分支,就代表两条可能执行路径。可能执行路径数目的增长,相对于逻辑分支的个数来说,是指数增长。比如一个method有n个逻辑分支,那么可能执行路径数目就是2的n次方。
注意,if else和if一样,都是一个逻辑分支。所以我们不需要把else的个数计算在内。
同理,
if 
else if
else if
else
这段并列else if的代码里面包含了3个if, 那么有三个逻辑分支。
逻辑分支的个数 = if的个数 + (switch) case的个数 + for, while的个数。
我们只需要一个词语搜索计数工具,就可以查出一段代码包含的逻辑分支的个数。


buaawhl, 我里面没有设计到语言逻辑(动态的)复杂的度量,在我看来这是太复杂了,花的成本不一定有好的受益。(当然主要是自己能力不够)。我主要是从评价代码结构(静态的)的复杂度。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics