【发布时间】:2015-06-09 08:36:17
【问题描述】:
我目前正在练习一个简单的程序,以了解从 Halstead 的软件科学推导各种指标所涉及的方程式。我确实相信我做对了,但我觉得我还没有注册所有的操作数和运算符,所以我可以从数学开始。
我正在使用的程序是:
/*01*/ // counts how many items in sArray[] are also in tArray[]
/*02*/ int matched(int sArray[], int tArray[], int sMax, int tMax)
/*03*/ {
/*04*/ int count, i, first, middle, last;
/*05*/
/*06*/ for (i = 0; i < sMax; ++i)
/*07*/ {
/*08*/ last = tMax - 1;
/*09*/ for (int first = 0; first <= last;)
/*10*/ {
/*11*/ middle = (first + last) / 2;
/*12*/ if (tArray[middle] == sArray[i])
/*13*/ {
/*14*/ count++;
/*15*/ break;
/*16*/ }
/*17*/ if (tArray[middle] < sArray[i])
/*18*/ {
/*19*/ first = middle + 1;
/*20*/ }
/*21*/ else
/*22*/ {
/*23*/ last = middle - 1;
/*24*/ }
/*25*/ }
/*26*/ }
/*27*/ return count;
/*28*/ }
我已经出来了
- n1 = 不同运算符的数量 = 10
- n2 = 不同操作数的数量 = 9
- N1 = 运营商总数 = 24
- N2 = 操作数总数 = 34
这些注释显示了找到的不同运算符和操作数:
运营商
= 赋值(第 6、8、9、11、19、23 行)= 6
++ 增量(第 6、14 行)= 2
- 减去(第 8、23 行)= 2
+ 加法(第 11、19 行)= 2
/ 除法(第 11 行)= 1
== 等于(第 12 行)= 1
[] 索引(第 2*2、12*2、17*2 = 6
break(第 15 行)= 1操作数
count (line 4, 14) = 2
i (line 4, 6*3, 12, 17) = 6
first (line 4, 9 *2, 11, 19) = 5
中间(第 4, 11, 12, 17, 19, 23 行)= 6
最后(第 4, 8, 9, 11, 23 行)= 5
sArray(行 2, 12, 17) = 3
tArray (第 2, 12, 17 行) = 3
sMax (第 2, 6 行) = 2
tMax(第 2、8 行)= 2
我错过了什么重要的事情吗?据我了解:
- 操作数是值
- 操作员操作和检查操作数
【问题讨论】:
-
请不要在代码 sn-ps 中输入行号。如果您想引起对特定行的注意,请输入例如对该行的评论。
-
@JoachimPileborg 在这个问题的上下文中,将行号链接到它下面的注释更合理。不期望读者执行代码,它是为了软件测试找到运算符和操作数的数量,所以对于这个问题,我觉得它有助于读者快速轻松地浏览它,无论是评论还是评论。我认为您没有完整阅读这个问题,这没有任何区别,
-
我不知道这些指标,但是前增量和后增量被认为是相同还是不同?两者都有。
-
我不确定我是否诚实,这就是我正在努力解决的细节问题。我想他们会是不同的
-
我很惊讶没有找到第三类:流量控制,比如
break和return。但是经过反思,我意识到return可能有一个操作数,所以我可以看到这里(和其他地方)使用的两个类别指的是指示做什么的元素和指定对象的元素。我会冒另一条评论的风险:一个被重写以提取一些常用代码行作为函数的程序,尽管功能相同,但与原始代码的度量标准不同?