软件测试作业5:计算下列代码片段的 Halstead 复杂度的11项内容
生活随笔
收集整理的這篇文章主要介紹了
软件测试作业5:计算下列代码片段的 Halstead 复杂度的11项内容
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
作業(yè)5
1、 計(jì)算下列代碼片段的 Halstead 復(fù)雜度的11項(xiàng)內(nèi)容:
if (month < 3) {month = month + 12;year = year - 1; } return dayray((int)(day + (month + 1) * 26/10 + year + year / 4 + 6 * (year/100) + year / 400) % 7);答:
- Halstead 復(fù)雜度根據(jù)程序源代碼中語句行的操作符和操作數(shù)的
數(shù)量計(jì)算程序復(fù)雜性。- 程序源代碼中操作符和操作數(shù)的量越大,程序難度就越大。
- 操作符統(tǒng)計(jì)范圍通常包括語言保留字、函數(shù)調(diào)用、運(yùn)算符,也可以包括有關(guān)的分隔符等。
- 操作數(shù)統(tǒng)計(jì)范圍可以是常量和變量等標(biāo)識(shí)符。
- 設(shè) n1 表示程序中不同的操作符個(gè)數(shù),n2 表示程序中不同的操作數(shù)個(gè)數(shù),N1 表示程序中出現(xiàn)的操作符總數(shù),N2 表示程序中出現(xiàn)的操作數(shù)總數(shù)。Halstead 復(fù)雜度的11項(xiàng)內(nèi)容有:
- Halstead 程序詞匯表長(zhǎng)度 Program vocabulary: n = n1 + n2.
- Halstead 程序長(zhǎng)度或簡(jiǎn)單長(zhǎng)度 Program length: N = N1 + N2.
- 注意到 N 定義為 Halstead 長(zhǎng)度,并非源代碼行數(shù)。
- 以 N^ 表示程序的預(yù)測(cè)長(zhǎng)度 Calculated program length:
- N^ = n1*log2(n1) + n2*log2(n2).
- Halstead 的重要結(jié)論之一是:程序的實(shí)際長(zhǎng)度 N 與預(yù)測(cè)長(zhǎng)度 N^ 非常接近,這表明即使程序還未編寫完也能預(yù)先估算出程序的實(shí)際長(zhǎng)度 N。
- 程序體積或容量 Volume: V = Nlog2(n),表明了程序在詞匯上的復(fù)雜性。
- 程序級(jí)別 Level: L^ = (2/n1) x (n2/N2),表明了一個(gè)程序的最緊湊形式的程序量與實(shí)際程序量之比,反映了程序的效率。
- 程序難度 Difficulty: D = 1/L^,表明了實(shí)現(xiàn)算法的困難程度。
- 編程工作量 Effort: E = V x D = V/L^ .
- 語言級(jí)別: L? = L^ x L^ x V .
- 編程時(shí)間 (hours): T^ = E/(S x f),這里 S = 60 x 60, f = 18 .
- 平均語句大小: N/語句數(shù)。
- 程序中的錯(cuò)誤數(shù)預(yù)測(cè)值: B = V/3000 = Nlog2(n)/3000.
首先列表統(tǒng)計(jì)操作符的種類和出現(xiàn)次數(shù):
| if | 1 |
| < | 1 |
| = | 2 |
| + | 7 |
| - | 1 |
| * | 2 |
| / | 4 |
| % | 1 |
| return(返回操作) | 1 |
| int(強(qiáng)制類型轉(zhuǎn)換操作) | 1 |
| dayray(函數(shù)調(diào)用操作) | 1 |
操作符一共有11種,n1 = 11,加起來共有22個(gè),N1 = 22。
然后列表統(tǒng)計(jì)操作數(shù)的種類和出現(xiàn)次數(shù):
| month | 4 |
| 3 | 1 |
| 12 | 1 |
| year | 6 |
| 1 | 2 |
| day | 1 |
| 26 | 1 |
| 10 | 1 |
| 4 | 1 |
| 6 | 1 |
| 100 | 1 |
| 400 | 1 |
| 7 | 1 |
操作數(shù)一共有13種,n2 = 13,加起來共有22個(gè),N2 = 22。
接著統(tǒng)計(jì)語句數(shù):
語句一共有4個(gè)。
最后計(jì)算Halstead復(fù)雜度的11項(xiàng)內(nèi)容:
- 程序詞匯表長(zhǎng)度 Program vocabulary: n = n1 + n2 = 11 + 13 = 24
- 程序長(zhǎng)度或簡(jiǎn)單長(zhǎng)度 Program length: N = N1 + N2 = 22 + 22 = 44
- 程序的預(yù)測(cè)長(zhǎng)度 Calculated program length: N^ = n1*log2(n1) + n2*log2(n2) = 11log2(11)+13log2(13) = 86.159
- 程序體積或容量 Volume: V = Nlog2(n) = 44log2(24) = 201.73835
- 程序級(jí)別 Level: L^ = (2/n1) x (n2/N2) = (2/11) x (13/22) = 0.1074
- 程序難度 Difficulty: D = 1/L^ = 1/0.1074 = 9.31099
- 編程工作量 Effort: E = V x D = V/L^ = 201.73835 * 9.31099 = 1878.38
- 語言級(jí)別: L? = L^ x L^ x V = 0.1074 * 0.1074 * 201.73835 = 2.327
- 編程時(shí)間 (hours): T^ = E/(S x f),這里 S = 60 x 60, f = 18,T^ = 1878.38/(3600 * 18) = 0.028987
- 平均語句大小: N/語句數(shù) = 44/4 = 11
- 程序中的錯(cuò)誤數(shù)預(yù)測(cè)值: B = V/3000 = Nlog2(n)/3000 = 201.73835/3000 = 0.067246
總結(jié)
以上是生活随笔為你收集整理的软件测试作业5:计算下列代码片段的 Halstead 复杂度的11项内容的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试作业4:测试要素
- 下一篇: 用Unity3D实现智能巡逻兵游戏