锁定老帖子 主题:软件模块的可测量性
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-22
哦,你省了link几个字,我就先入为主理解错误了^^
不过那两个页面我都打不开:(( 你的公式在有嵌套的情况下是有点问题的. if ( case 1 case 2 )else( case 1 case 3 ) 可执行路径为4,逻辑分支数量是多少? 简单的查找if\case\for的个数不能得到可执行路径数 尤其是对于写的比较差的代码 |
|
返回顶楼 | |
发表时间:2006-09-22
嵌套与否, 执行路径的个数都等于 2 的 (逻辑分支的个数) 次方。
n = 逻辑分支的个数 执行路径的个数 = 2 ^ n 对于函数调用的关系也是如此。比如, f(){ g() { e() {} } } 这三个函数的复杂度(执行路径个数)是要相乘的。 f * g * e。 从这里我们就可以看出mockup的作用。 mockup的一个用途就是,可以假设被替换的模块的复杂度为 1。不用考虑mockup的执行路径个数。 那么复杂度就可以线性化, 假设g 和 e 都是注入进来的,可以mockup。那么复杂度可以是 f + g + e。 |
|
返回顶楼 | |
发表时间:2006-09-23
没有回答我提出的例子中的逻辑分芝和执行路径的个数啊?
另外,如果是从外部读入配置文件,从而实现分支处理,那又怎么检查呢? |
|
返回顶楼 | |
发表时间: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, 我里面没有设计到语言逻辑(动态的)复杂的度量,在我看来这是太复杂了,花的成本不一定有好的受益。(当然主要是自己能力不够)。我主要是从评价代码结构(静态的)的复杂度。 |
|
返回顶楼 | |