假設(shè)更大的聚合也是可能的,但是我實(shí)在不想再考慮了!
每個(gè)用例的工作量
通過(guò)對(duì)每一層的額定的規(guī)模的工作量估計(jì),我們可以對(duì)每個(gè)用例的工作量有一些深入了解。使用 Estimate Professional? 工具 (基于 COCOMO 2 和 Putnam's SLIM 模型),將語(yǔ)言設(shè)置為 C++(其他成本驅(qū)動(dòng)因素設(shè)置為額定值),然后計(jì)算每一個(gè)示例系統(tǒng)類(lèi)型在每個(gè)額定規(guī)模點(diǎn)的工作量(假設(shè) 10 個(gè)外部用例),得到表 1。表中描述的 L1 和 L2 范圍考慮到了單個(gè)用例的復(fù)雜度――使用 COCOMO 的代碼復(fù)雜性矩陣通過(guò)類(lèi)比進(jìn)行估計(jì)。在 L2 層,我相信復(fù)雜性在被納入系統(tǒng)類(lèi)型的特征時(shí)復(fù)雜程度發(fā)生變化,因此一個(gè)更高層次的復(fù)雜命令和控制系統(tǒng)用例,將包含在一個(gè)較低的層次上復(fù)雜性的混合。在一個(gè)按照 log-log 比例的圖上繪制這些數(shù)據(jù),得到圖 2。
圖 2: 用例工作量規(guī)模圖
從中我們可以看到,150-350 小時(shí)/用例(10 2.17-10 2.54)這個(gè)原來(lái)的 Objectory 數(shù)字在 L1 層上很適合,例如,這些用例可以通過(guò)類(lèi)的協(xié)作來(lái)實(shí)現(xiàn)――因此存在一些理由來(lái)支持這個(gè)數(shù)字。然而,它不足以在分析中用來(lái)描述所有項(xiàng)目--我的一位同事曾在電子郵件與我交流時(shí)說(shuō):它太"片面" 了。
工作量估計(jì)
當(dāng)前的實(shí)際系統(tǒng)不能與這些槽(slot)一一匹配。所以,為了幫助了解應(yīng)該如何描述一個(gè)系統(tǒng),我們將使用從該方法種得出的模糊的界限并將它們繪制出來(lái):
圖 3: 每個(gè)層次的規(guī)模范圍
從圖 3 中,我們可以看到一個(gè)超過(guò) 2.2 萬(wàn) slocs 的系統(tǒng)可能是在第一層描述,用例的數(shù)量在 2 到 30 之間。在這個(gè)規(guī)模上,更高的用例數(shù)量表明用例的粒度太細(xì)了。
規(guī)模在 2.2 萬(wàn) 和 5.4 萬(wàn) slocs 之間的系統(tǒng),應(yīng)該使用一層用例和兩層用例的混合,用例的數(shù)量在 4(都在第二層)和 76 都在第一層)之間,正如上圖所表明的那樣,一般不會(huì)出現(xiàn)極限值。
規(guī)模在 5.4 萬(wàn)和 11 萬(wàn) slocs 之間的系統(tǒng),一個(gè)結(jié)構(gòu)好的系統(tǒng)完全在第二層進(jìn)行描述是可能的,用例的數(shù)量在 10 到 20 之間;混合起來(lái)可能是 L1/L2/L3(1 到 160 個(gè)用例,一般不會(huì)出現(xiàn)極限值)。
規(guī)模在 11 萬(wàn) 和 37 萬(wàn) slocs 之間的系統(tǒng),可能在第二層和第三層之間,用例的數(shù)量在 3(全部在第三層)到 66(全在部第二層)之間。
規(guī)模在 37 萬(wàn) 和 54 萬(wàn) slocs之間的系統(tǒng),如果完全在第三層進(jìn)行描述,那么用例的數(shù)量在 9 到 12之間;混合情況可能是 L2/L3/L4(1 到 100 個(gè)用例,一般不會(huì)出現(xiàn)極限值)。
規(guī)模在 54 萬(wàn) 和 260 萬(wàn) slocs 之間的系統(tǒng),可能在第三層和第四層之間,用例的數(shù)量在 2(全部在第四層)到 60(全部在第三層)之間。
規(guī)模超過(guò) 260 萬(wàn) slocs 的系統(tǒng),在第四層的用例數(shù)量應(yīng)該在 8 左右。
多少用例才是足夠的?
從一些經(jīng)驗(yàn)法則中可以得到一些有趣的觀察結(jié)果。有一個(gè)問(wèn)題經(jīng)常被問(wèn)及--多少用例是過(guò)量的呢?這個(gè)問(wèn)題實(shí)際上意味著在捕獲需求的過(guò)程中多少是過(guò)量。答案似乎是多于 70 個(gè),甚至對(duì)于大的系統(tǒng)來(lái)說(shuō),70 這個(gè)數(shù)字也表明對(duì)于設(shè)計(jì)來(lái)說(shuō)粒度太細(xì)了。在 5 到 40 之間是非常合適的,但是這只是數(shù)量,而并沒(méi)有考慮到層次,不能用來(lái)估計(jì)規(guī)模和工作量。這是初始的數(shù)量,對(duì)于特殊的層次是合適的。如果一個(gè)大型超級(jí)系統(tǒng)被分解為系統(tǒng),系統(tǒng)又被分解為子系統(tǒng),以此類(lèi)推,那么需要數(shù)以百計(jì)的用例。如果直到類(lèi)的層次達(dá)到后才開(kāi)發(fā)用例,那么終的數(shù)量可能是上百個(gè)甚至是上千個(gè)(對(duì)于一個(gè) 140 人-年的項(xiàng)目,或者對(duì)于每個(gè)用例有15個(gè)功能點(diǎn)這樣的項(xiàng)目來(lái)說(shuō)是 600 個(gè)用例)。然而,作為一個(gè)純粹的獨(dú)立于設(shè)計(jì)的用例分解來(lái)說(shuō),這并不會(huì)發(fā)生。這些用例起源于 Jacobson 97 中描述的過(guò)程,Jacobson 97 中系統(tǒng)層次上的用例被劃分為分配給子系統(tǒng)的行為,其中可以為子系統(tǒng)編寫(xiě)更低層次的用例(將其他子系統(tǒng)作為參與者)。
工作量估計(jì)的過(guò)程
如何進(jìn)行估計(jì)呢?這里有許多先決條件:如果不能理解問(wèn)題的領(lǐng)域、不了解系統(tǒng)的規(guī)模和系統(tǒng)構(gòu)架,以及在哪一階段進(jìn)行估計(jì),那么不能夠進(jìn)行基于用例的估計(jì)。
第一次粗略的估計(jì)可以根據(jù)專(zhuān)家的觀點(diǎn)或者更正式的采用 Wideband Delphi 技術(shù)(該技術(shù)是Rand 組織在 1948 年發(fā)明的,請(qǐng)參考Boehm 81 的描述)。這將使得評(píng)估者可以將系統(tǒng)在圖 3 所示的規(guī)模范圍中對(duì)號(hào)入卒。這種部署將提供用例數(shù)量的范圍,并且表明表達(dá)式的層次(L1, L1/L2 等等)。然后評(píng)估者必須基于對(duì)現(xiàn)有構(gòu)架知識(shí)和領(lǐng)域中的理解來(lái)決定這些用例是否適合某一層(是否毫不相關(guān)),或者是不同層次的混合(以事件流的方式來(lái)表達(dá))。