黑盒測試是根據(jù)規(guī)格說明所規(guī)定的功能來設(shè)計(jì)測試用例,它不考慮程序中的內(nèi)部結(jié)構(gòu)和處理過程。常用的黑盒測試技術(shù)有等價(jià)類劃分、邊值分析、錯(cuò)誤猜測等。
1.等價(jià)類劃分
前面已經(jīng)講過,不能窮舉所有可能的輸入數(shù)據(jù)來進(jìn)行測試,所以只能選取少量有代表性的輸入數(shù)據(jù),來揭露盡可能多的程序錯(cuò)誤。這里首先要介紹一個(gè)有效的輸入數(shù)據(jù)和無效的輸入數(shù)據(jù)。有效的輸入數(shù)據(jù)是指符合規(guī)格說明要求的合理的輸入數(shù)據(jù),它主要用來檢驗(yàn)程序是否實(shí)現(xiàn)了規(guī)格說明中的功能。無效的輸入數(shù)據(jù)是指不符合規(guī)格說明要求的不合理或非法的輸入數(shù)據(jù),它主要用來檢驗(yàn)程序是否做了規(guī)格說明以外的事。如果把所有可能的輸入數(shù)據(jù)(有效的和無效的)劃分成若干個(gè)等價(jià)類,那么可以合理地做出假定:如果等價(jià)類中的一個(gè)輸入數(shù)據(jù)能檢測出一個(gè)錯(cuò)誤,那么等價(jià)類中的其他輸入數(shù)據(jù)也能檢測出同一個(gè)錯(cuò)誤;反之,如果一個(gè)輸入數(shù)據(jù)不能檢測出某個(gè)錯(cuò)誤,那么等價(jià)類中其他輸入數(shù)據(jù)也不能發(fā)現(xiàn)這一錯(cuò)誤(除非這個(gè)等價(jià)類的某個(gè)子集還屬于另一等價(jià)類)。等價(jià)類劃分方法首先把輸入數(shù)據(jù)劃分成若干個(gè)有效等價(jià)類和若干個(gè)無效等價(jià)類,然后設(shè)計(jì)測試用例覆蓋這些等價(jià)類。來源:www.examda.com
2.邊值分析
大量的實(shí)踐說明,程序中在處理邊界情況時(shí)出錯(cuò)的概率比較大,因此設(shè)計(jì)一些測試用例,使程序運(yùn)行在邊界情況附近,這樣揭露程序中錯(cuò)誤的可能性就更大。所謂邊界條件是指相對于輸入與輸出等價(jià)類直接在其邊界上,或稍高于其邊界,或稍低于其邊界的這些狀態(tài)條件。使用等價(jià)類劃分方法設(shè)計(jì)測試用例時(shí),原則上講,等價(jià)類中的任一輸入數(shù)據(jù)都可作為該等價(jià)類的代表用作測試用例。而邊值分析則是專門挑選那些位于邊界附近的值作為測試用例。由于邊值分析方法所設(shè)計(jì)的測試用例,更有可能發(fā)現(xiàn)程序中的錯(cuò)誤,因此經(jīng)常把邊值分析方法與其他設(shè)計(jì)測試用例方法結(jié)合起來使用。
3.錯(cuò)誤猜測
錯(cuò)誤猜測是一種憑直覺和經(jīng)驗(yàn)推測某些可能存在的錯(cuò)誤,從而針對這些可能存在的錯(cuò)誤設(shè)計(jì)測試用例的方法。這種方法沒有機(jī)械的執(zhí)行步驟,主要依靠直覺和經(jīng)驗(yàn)。
四、軟件維護(hù)
軟件維護(hù)階段覆蓋了從軟件交付使用到軟件被淘汰為止的整個(gè)時(shí)期,它是在軟件交付使用后,為了改正軟件中隱藏的錯(cuò)誤,或者為了使軟件適應(yīng)新的環(huán)境,或者為了擴(kuò)充和完善軟件的功能或性能而修改軟件的過程。一個(gè)軟件的開發(fā)時(shí)間可能需要一兩年,但它的使用時(shí)間可能要幾年或幾十年,而整個(gè)使用期都可能需要進(jìn)行軟件維護(hù),所以軟件維護(hù)的代價(jià)是很大的,而且維護(hù)的代價(jià)還在逐年上升,據(jù)1994年Software Engineering Encyclopedia記載,在整個(gè)軟件生存周期所花費(fèi)的代價(jià)中,20世紀(jì)80年代末用于軟件維護(hù)的代價(jià)約為75%到90年代初為90%。因此,如何提高軟件維護(hù)的效率、降低維護(hù)的代價(jià)成為十分重要的問題。
(一) 軟件維護(hù)的分類
根據(jù)引用軟件維護(hù)的原因,軟件維護(hù)通??煞殖筛恼跃S護(hù)、適應(yīng)性維護(hù)、完善性維護(hù)、預(yù)防性維護(hù)。
1.改正性維護(hù)
由于程序正確性證明尚未得到圓滿的解決,軟件測試又不可能找出程序中的所有錯(cuò)誤,因此,在交付使用的軟件中都可能隱藏著某些尚未被發(fā)現(xiàn)的錯(cuò)誤,而這些錯(cuò)誤在某種使用環(huán)境下會暴露出來。改正性維護(hù)就是在使用過程中發(fā)現(xiàn)了隱藏的錯(cuò)誤后,為了診斷和改正這些隱藏錯(cuò)誤而修改軟件的活動。
2.適應(yīng)性維護(hù)
由于計(jì)算機(jī)的發(fā)展非常迅速,新的機(jī)型、新的操作系統(tǒng)、新的軟件系統(tǒng)不斷地涌現(xiàn),為了適應(yīng)計(jì)算機(jī)的飛速發(fā)展,可能要更正在運(yùn)行的軟件的運(yùn)行環(huán)境,如新的機(jī)型、數(shù)據(jù)庫管理系統(tǒng)等。適應(yīng)性維護(hù)就是為了適應(yīng)變化了的環(huán)境而修改軟件的活動。
3.完善性維護(hù)
用戶在使用軟件的過程中,隨著業(yè)務(wù)的發(fā)展,常常希望擴(kuò)充原有軟件的功能,或者希望改進(jìn)原有的功能或性能,以滿足用戶的新要求,完善性維護(hù)就是為了擴(kuò)充或完善原有軟件的功能或性能而修改軟件的活動。
4.預(yù)防性維護(hù)
軟件維護(hù)活動主要是上述三類維護(hù),另有一類維護(hù)稱為預(yù)防性維護(hù),它是為了提高軟件的可維護(hù)性和可靠性,為未來的進(jìn)一步改進(jìn)打下基礎(chǔ)而修改軟件的活動。據(jù)有關(guān)資料統(tǒng)計(jì),在整個(gè)軟件維護(hù)活動中,改正性維護(hù)約占20%,適應(yīng)性維護(hù)約占25%,完善性維護(hù)約占50%以上,其他維護(hù)約占4%。
(二) 與軟件維護(hù)有關(guān)的問題
軟件維護(hù)人員通常不是該軟件的開發(fā)人員,這給軟件維護(hù)帶來很大的困難,特別是有些軟件在開發(fā)時(shí)沒有遵循軟件開發(fā)的準(zhǔn)則,沒有開發(fā)方法的支持,維護(hù)這樣的軟件就更困難。下面列舉一些與軟件維護(hù)有關(guān)的問題。
(1)要維護(hù)一個(gè)軟件,首先要理解它。而理解別人的程序通常是非常困難的,尤其是對軟件配置(指各種文檔)不齊的軟件,理解起來更為困難。
(2)需要維護(hù)的軟件往往缺少合格的文檔,或者文檔資料不齊,甚至沒有文檔。在軟件維護(hù)中,合格的文檔十分重要,它有助于理解被維護(hù)的軟件。合格的文檔不僅要完整正確地反映開發(fā)過程各階段的工作結(jié)果,而且應(yīng)該容易理解并應(yīng)程序源代碼一致。而錯(cuò)誤的文檔會把對程序的理解引入歧途。
(3)在軟件維護(hù)時(shí),不要指望得到原來開發(fā)該軟件的人員的幫助。開發(fā)人員開發(fā)完一個(gè)軟件后,往往去從事另一軟件的開發(fā),甚至已調(diào)離開發(fā)單位。即使原先的開發(fā)人員還在,也可能因?yàn)橄喔魰r(shí)間太久而遺忘了實(shí)現(xiàn)的細(xì)節(jié)。
(4)多數(shù)軟件在設(shè)計(jì)時(shí)沒有考慮今后的修改,給軟件的修改帶來困難,而且在修改軟件時(shí)容易帶來新的差錯(cuò)。對那些缺乏模塊獨(dú)立性和非結(jié)構(gòu)化的程序來說,更是如此。
(5)軟件維護(hù)通常不是一件吸引人的工作。從事維護(hù)工作常使維護(hù)人員感到缺乏成就感。這也嚴(yán)重影響維護(hù)工作。從而導(dǎo)致維護(hù)質(zhì)量的不高??梢钥闯觯鲜龅挠行﹩栴}都與被維護(hù)的質(zhì)量密切相關(guān),所以在開發(fā)軟件時(shí),要認(rèn)真寫好各類文檔,并且應(yīng)注意提高軟件的可維護(hù)性,這樣可在很大程序上緩解軟件維護(hù)的困難。
(三) 可維護(hù)性軟件可維護(hù)性是指理解、改正、改動、改進(jìn)軟件的難易程度。通常影響軟件可維護(hù)性的因素有可理解性、可測試性和可修改性。
1.可理解性
2.可測試性
可測試性是指測試和診斷軟件(主要指程序)中錯(cuò)誤的難易程度。測試主要是發(fā)現(xiàn)軟件中的錯(cuò)誤,而診斷錯(cuò)誤的性質(zhì)和出錯(cuò)的位置通常是調(diào)試的任務(wù)。提高軟件可測試性的措施有:書寫詳細(xì)正確的文檔,采用良好的程序結(jié)構(gòu),使用測試工具和調(diào)試工具,保存以前的測試過程和測試用例等等。
3.可修改性
可修改性是指修改軟件(主要指程序)的難易程度。在修改程序時(shí)經(jīng)常會發(fā)生這樣的情況:修改程序中某個(gè)錯(cuò)誤的同時(shí)又產(chǎn)生新的錯(cuò)誤(由程序的修改引起的),或者在程序中增加了某個(gè)功能的同時(shí),原先的某些功能不能正常執(zhí)行。這主要是因?yàn)槌绦蛑懈鞒煞种g存在著許多聯(lián)系,當(dāng)程序中某處修改時(shí),這個(gè)修改可能會影響到程序的其他部分。如果修改程序時(shí)稍有考慮不周,就會出現(xiàn)上述顧此失彼的情況。因此,如果一處修改所涉及到的范圍越少,發(fā)生上述情況的概率也越小,其可修改性也越好。在軟件設(shè)計(jì)中我們介紹的那些設(shè)計(jì)準(zhǔn)則都是影響可修改性的因素,如信息隱蔽原則、模塊獨(dú)立、模塊間聯(lián)系的低耦合高內(nèi)聚等等。
(四) 軟件維護(hù)活動流程
凡是需要軟件維護(hù),都應(yīng)有一個(gè)軟件維護(hù)的申請報(bào)告。改正性維護(hù)的申請報(bào)告應(yīng)完整地描述導(dǎo)致錯(cuò)誤的環(huán)境,包括輸入數(shù)據(jù)、錯(cuò)誤清單以及有關(guān)的材料。適應(yīng)性維護(hù)或完善性維護(hù)的申請報(bào)告應(yīng)提供一份簡短的需求說明書。維護(hù)申請書由維護(hù)管理員和系統(tǒng)管理員審批。并指明所需修改的性質(zhì),申請修改的優(yōu)先級,所需的工作量等。維護(hù)活動的第一步是確定維護(hù)的類型,若是改正性維護(hù),則要估計(jì)錯(cuò)誤的嚴(yán)重程度,對嚴(yán)重的錯(cuò)誤,則馬上分派人員執(zhí)行維護(hù)任務(wù);對不嚴(yán)重的錯(cuò)誤,則可將其暫時(shí)保存,在以后適當(dāng)時(shí)候再進(jìn)行改正。若是適應(yīng)性維護(hù)或完善性維護(hù),則要根據(jù)其優(yōu)先級來決定維護(hù)的先后次序,優(yōu)先級高的維護(hù)則馬上開始;優(yōu)先級低的可暫時(shí)保存,以便統(tǒng)籌安排。適應(yīng)性維護(hù)或完善性維護(hù)的過程相當(dāng)于一個(gè)小的開發(fā)過程,它同樣要經(jīng)歷需求分析、設(shè)計(jì)、編碼、測試等階段。不管是哪種維護(hù),有些工作是每種維護(hù)活動都必須做的,如在修改程序代碼的同時(shí)還要修改(如有必要)相應(yīng)的需求說明文檔、設(shè)計(jì)文檔等,還要進(jìn)行回歸測試和軟件配置復(fù)審等。
五、軟件管理
軟件工程項(xiàng)目高質(zhì)量高效率的完成與其他產(chǎn)品的工程項(xiàng)目一樣,不僅取決于所采用的技術(shù)、方法和工具,還決定于管理的好壞。兩者相輔相成,缺一不可。就目前軟件開發(fā)中的問題,更多的是管理問題。本節(jié)將集中討論與管理方面有關(guān)的問題。
(一) 確定工作范圍和資源
1.軟件工作范圍
軟件計(jì)劃的第一個(gè)任務(wù)就是確定軟件的工作范圍,即軟件的用途及對軟件的要求。其中主要包括軟件的功能、性能、接口和可靠性等四個(gè)方面。計(jì)劃人員必須使用管理人員和技術(shù)人員都能理解的無二義性的語言來描述工作范圍。對于軟件功能的要求,在某些情況下要進(jìn)行求精細(xì)化,以便能夠提供更多的細(xì)節(jié),因?yàn)槌杀竞瓦M(jìn)度的估算都與功能有關(guān)。軟件的性能包括處理時(shí)間的約束、存儲限制以及依賴于機(jī)器的某些特性。要同時(shí)考慮功能和性能,才能做出正確的估計(jì)。接口又可分為硬件、軟件和人三類:
(1)硬件指執(zhí)行該軟件的硬件,如中央處理機(jī)和外部設(shè)備,以及由該軟件控制的各種間接設(shè)備,如各種機(jī)器和顯示設(shè)備等;
(2)軟件指已有的而且必須與新開發(fā)軟件連接的軟件,如數(shù)據(jù)庫、子程序包和操作系統(tǒng)等;
(3)人指通過終端或輸入/輸出設(shè)備使用該軟件的操作人員。在這三種情況下,都要詳細(xì)地了解通過接口的信息傳遞。計(jì)劃人員還必須考慮各個(gè)接口的性質(zhì)及復(fù)雜程度,以確定對開發(fā)資源、成本和進(jìn)度的各種影響。
2.資源
(1)人員軟件危機(jī)中提出的最嚴(yán)重的問題是缺少有經(jīng)驗(yàn)的軟件人員,人是軟件開發(fā)的主要資源。這里所討論的不是小項(xiàng)目,而是大項(xiàng)目,1、2個(gè)人是干不了的。在大項(xiàng)目的軟件開發(fā)中,人員尤其重要。軟件工程各個(gè)階段對人員有不同的要求。開始時(shí)管理人員要用較多的精力,因?yàn)樽鳛楣芾砣藛T的決策,這時(shí)是很關(guān)鍵的,最后驗(yàn)收時(shí)也要投入較多的精力。高級技術(shù)人員同樣如此。初級技術(shù)人員前期工作不多,在詳細(xì)設(shè)計(jì)、編碼和早期測試中參與最多,單元測試時(shí)為高峰。
(2)硬件硬件也是一種軟件開發(fā)工具。硬件資源包括:
①宿主機(jī)宿主機(jī)是指在軟件開發(fā)階段使用的計(jì)算機(jī)和有關(guān)外部設(shè)備。對于一些專門的開發(fā)機(jī)構(gòu),為了能夠接受更多的用戶任務(wù),并能方便地使用多種類型的開發(fā)支持工具,常備有專門的開發(fā)系統(tǒng)。目前很多微機(jī)都設(shè)置有單獨(dú)的開發(fā)系統(tǒng),而且進(jìn)一步發(fā)展為專用的軟件開發(fā)環(huán)境,這一部分將在第9章討論。
②目標(biāo)機(jī)運(yùn)行所開發(fā)軟件的計(jì)算機(jī)叫目標(biāo)機(jī),其中也包括有關(guān)的外部設(shè)備,在很多情況下,宿主機(jī)與目標(biāo)機(jī)是統(tǒng)一的。
③其他硬件設(shè)備在進(jìn)行專用軟件的開發(fā)時(shí),有時(shí)需要某些特殊的硬件資源,如開發(fā)過程控制軟件時(shí)所需的A/D、D/A等專用設(shè)備。
(3)軟件和硬件一樣,也是一種軟件開發(fā)工具。軟件資源包括:
①支持軟件包括范圍廣泛的各種工具。最基礎(chǔ)的支持軟件是操作系統(tǒng)、編譯程序、數(shù)據(jù)庫、圖形包和網(wǎng)絡(luò)軟件等。它們是開發(fā)人員的必備工具。在軟件生存期的各階段還要有其它相應(yīng)的支持軟件:在需求分析階段,有需求分析和生成程序;在設(shè)計(jì)階段,有設(shè)計(jì)語言處理程序、流程圖/框圖生成程序和模擬程序;在編碼和單元測試階段,有動態(tài)調(diào)試程序、交叉匯編程序/編譯程序和宏處理程序;在測試階段,有測試驅(qū)動程序和測試結(jié)果分析程序等。恰當(dāng)?shù)厥褂弥С周浖?,可以大大地提高軟件開發(fā)的生產(chǎn)率和軟件的質(zhì)量。但是為了使支持軟件能夠在開發(fā)系統(tǒng)上運(yùn)行,需要很大的工作量和費(fèi)用,所以在考慮支持軟件時(shí),成本和效益兩者之間的關(guān)系是一個(gè)必須考慮的重要問題。
②實(shí)用軟件相當(dāng)于軟件庫,可以結(jié)合到新的系統(tǒng)中去,如各種標(biāo)準(zhǔn)子程序等。實(shí)用軟件現(xiàn)在應(yīng)該說是非常豐富的,這是重用技術(shù)的基礎(chǔ)。但重用技術(shù)的問題是如何選擇重用對象、分類、建庫,以及解決通用接口的機(jī)制問題,使其能適用于任一硬、軟件環(huán)境。實(shí)用軟件作為資源時(shí),計(jì)劃人員應(yīng)認(rèn)識到:如果現(xiàn)有軟件符合要求,那么利用實(shí)用軟件的費(fèi)用幾乎總是小于開發(fā)同等軟件所需的費(fèi)用;如果在與系統(tǒng)結(jié)合起來之前需要作某些修改,那就必須特別小心,因?yàn)樾薷默F(xiàn)有軟件所需費(fèi)用有時(shí)會大于開發(fā)同等軟件的費(fèi)用。一般在計(jì)劃階段,軟件資源常常被忽視,只有在開發(fā)階段才成為頭等大事。若能夠及時(shí)地確定對軟件資源的要求,則可以較好地對各種方案進(jìn)行技術(shù)評價(jià),并能盡早地獲得所需的方案。
(二)成本估算
為了使開發(fā)項(xiàng)目能夠在規(guī)定的時(shí)間內(nèi)完成,而且不超過預(yù)算,成本估算的管理控制是關(guān)鍵。計(jì)算機(jī)廣泛使用有35年,而高級語言應(yīng)用僅30年。費(fèi)用估算大約開始于50年代的第一個(gè)大型程序設(shè)計(jì),60年代估算過于樂觀,結(jié)果費(fèi)用大大超支,70年代以后,費(fèi)用估算才引起人們的普遍重視。由于影響軟件成本的因素太多(如人、技術(shù)、環(huán)境以及政治因素等),直到最近,軟件成本估算仍是一門很不成熟的技術(shù),國外已有的技術(shù)只能作為我們的借鑒。
1.成本估算方法
有兩種基本的估算方法:自頂向下和自底向上。自頂向下的方法是對整個(gè)項(xiàng)目的總開發(fā)時(shí)間和總工作量做出估算,然后把它們按階段、步驟和工作單元進(jìn)行分配。自底向上的方法則正好相反,分別估算各工作單元所需的工作量和開發(fā)時(shí)間,然后相加,就得出總的工作量和總的開發(fā)時(shí)間。兩種方法都要求采用某種方法做出估算。有許多現(xiàn)成的方法可以利用,大致可分為三類:
(1)專家估算法;
(2)類推估算法;
(3)算式估算法。
(1)專家估算法這種方法依靠一個(gè)或多個(gè)專家,對要求
的項(xiàng)目做出估計(jì),其精確性主要取決于兩點(diǎn),即專家對估算項(xiàng)目的定性參數(shù)的了解和他們的經(jīng)驗(yàn)。后者類似于類推估算法。來源:www.examda.com
(2)類推估算法自頂向下的方法中,類推估算法是將估算項(xiàng)目的總體參數(shù)與類似項(xiàng)目進(jìn)行直接相比得到結(jié)果。自底向上的方法中,類推是在兩個(gè)具有相似條件的工作單元之間進(jìn)行。
(3)算式估算法專家估算法和類推估算法的缺點(diǎn)在于,它們依靠帶有一定盲目性的和主觀的猜測對項(xiàng)目進(jìn)行估算。算式估算法則是企圖避免主觀因素的影響。用于估算的算式方法有兩種基本類型:(1)由理論導(dǎo)出;(2)由經(jīng)驗(yàn)得出。
2.成本估算模型
(1)IBM模型1977年Walston和Felix總結(jié)了IBM聯(lián)合系統(tǒng)分部(FSD)負(fù)責(zé)的60個(gè)項(xiàng)目的數(shù)據(jù)。其中源代碼從400到467000行,工作量從12到11758人-月,共使用29種不同語言和66種計(jì)算機(jī)。
(2)SLIM模型1979年前后,Putnam在軟件開發(fā)生存期雷利(Rayleigh)曲線模型的基礎(chǔ)上提出SLIM商業(yè)化的成本估算模型,SLIM基本估算算式為L=C k K 1/3 t 4/3d 其中:L和t d 分別表示可交付的源指令數(shù)和開發(fā)時(shí)間(單位以年計(jì));K是整個(gè)生存期內(nèi)人的工作量(單位以人一年計(jì)),可從總的開發(fā)工作量ED=0.4K求得;C k 是根據(jù)經(jīng)驗(yàn)數(shù)據(jù)確定的常數(shù),表示了開發(fā)技術(shù)的先進(jìn)性級別。如果軟件開發(fā)環(huán)境較差(沒有一定的開發(fā)方法,缺少文檔和評審或批處理方式),取C k =6500;正常的開發(fā)環(huán)境(有適當(dāng)?shù)拈_發(fā)方法,較好的文檔和評審,以及交互式的執(zhí)行方式),C k =10000;而一個(gè)較好的開發(fā)環(huán)境(自動工具和技術(shù)),則取C k =12500。交換上式,可得開發(fā)工作量算式 K=L 3 C 3k t 4d 可從美國或英國買到SLIM計(jì)算程序,它除了提供開發(fā)時(shí)間和成本估算外,還提供關(guān)于風(fēng)險(xiǎn)、可行性、估算CPU時(shí)間需求及項(xiàng)目計(jì)劃中其它有關(guān)信息。
(3)PRICE-S模型Freiman在1979年提出了另一個(gè)商業(yè)化的成本估算模型RCA PRICE-S。PRICE-S計(jì)算程序以一個(gè)未發(fā)表的啟發(fā)式算法為基礎(chǔ),將若干成本因素作為輸入,關(guān)鍵是生成源代碼或目標(biāo)代碼指令的數(shù)量,然后輸出成本和進(jìn)度估算,以及其它可供選擇的項(xiàng)目管理數(shù)據(jù)。另一個(gè)程序PRICE-SL可用于估算系統(tǒng)維護(hù)成本,根據(jù)若干個(gè)用戶提供的參數(shù),如軟件的期望壽命、發(fā)展和使用率等,PRICE-SL運(yùn)行時(shí)以PRICE-S的輸出作為它的輸入。
(4)COCOMO模型TRW開發(fā)的結(jié)構(gòu)性成本模型COCOMO(Constructive Cost Model)是最精確、最易于使用的成本估算方法之一,1981年Boehm在他的著作中進(jìn)行了詳盡的描述。
(5)Belley-Basili元模型這種模型提供了最適用于在給定的開發(fā)環(huán)境中,工作量估算方程的開發(fā)方法。結(jié)果類似于IBM和COCOMO模型。
(6)Schneider模型上述所有模型完全是經(jīng)驗(yàn)性的,1978年Schneider根據(jù)1977年Halstead的軟件科學(xué)理論推導(dǎo)出幾種估算方程,得到的工作量方程與冪定律算式形式相同。
3.代碼行的成本估算方法
這是一種自底向上的估算方法,即從模塊開始進(jìn)行估算,步驟如下:
(1)確定功能首先將功能反復(fù)分解,直到可以對為實(shí)現(xiàn)該功能所要求的源代碼行數(shù)做出可靠性的估算為止。對各子功能,根據(jù)經(jīng)驗(yàn)數(shù)據(jù)或?qū)嵺`經(jīng)驗(yàn),可以給出極好、正常和較差三種情況下的源代碼估算行數(shù)的期望值,分別用a、m、b表示。
(2)根據(jù)經(jīng)驗(yàn)數(shù)據(jù),確定各子功能的代碼行成本
(3)計(jì)算各子功能的成本和工作量,并計(jì)算任務(wù)的總成本(元)和總工作量(人-月)
(4)計(jì)算開發(fā)時(shí)間
(5)對結(jié)果進(jìn)行分析比較4.每項(xiàng)任務(wù)工作量的成本估算方法開發(fā)過程中,最常用的是每項(xiàng)任務(wù)工作量的成本估算方法。工作量可以用人-日、人-月或人-年的數(shù)量來表示。知道單位工作量的成本,就可得到估算成本。
下面仍以上節(jié)中的CAD軟件包為例,估算步驟如下:
(1)確定任務(wù) 即每個(gè)功能都必須經(jīng)過需求分析、設(shè)計(jì)、編碼和測試工作
(2)確定每項(xiàng)任務(wù)的工作量,對每項(xiàng)任務(wù)要估算它們所需要的人-月數(shù)。
(3)找出與各項(xiàng)任務(wù)的對應(yīng)的勞務(wù)費(fèi)數(shù)據(jù) 即每個(gè)單位工作量成本(元/人-月)。因?yàn)楦麟A段的勞務(wù)費(fèi)用不同,需求分析和概要設(shè)計(jì)階段需要較多的高級技術(shù)人員;而詳細(xì)設(shè)計(jì)、編碼和早期測試則要求較多的初級技術(shù)人員。而他們的工資是不相同的。
(4)計(jì)算 計(jì)算各個(gè)工作各個(gè)階段的成本和工作量,然后計(jì)算總成本和總工作量。
(5)分析比較 在整個(gè)開發(fā)工作量中,需求分析和設(shè)計(jì)用去了75人-月,約占全部分任務(wù)工作量的50%,說明了這項(xiàng)工作的重要性。勞務(wù)費(fèi)反映了勞動者的成本,其中包括管理費(fèi)。需求分析的勞務(wù)費(fèi)(5200元/人-月)比設(shè)計(jì)、編碼和單元測試都高,這也說明了這項(xiàng)工作的重要性。

