李 偉 龍 飛 孫續(xù)文
(海軍大連艦艇學(xué)院 大連 116018)
在艦用軟件研制的過程中,項目研制所耗費的成本是一個重要的指標(biāo)[1]。在世界范圍內(nèi),裝備費用增長和超支是一個普通現(xiàn)象,近年來,我國武器裝備軟件研制費也開始出現(xiàn)超支現(xiàn)象,軟件成本的測算和估計已然成為科研成本管理的一個重要問題[2]。
軟件項目的成本可以是時間成本,也可以是以經(jīng)費度量的經(jīng)濟(jì)成本,總之,不管在何種情況下,人們都希望以最小的成本完成既定的工作。在軟件成本控制技術(shù)方面,國內(nèi)外先后出現(xiàn)了Putnam、COCOMO、模糊控制理論等多種經(jīng)驗?zāi)P秃蜕逃密浖?,但由于以往艦用軟件研制過程中缺少基礎(chǔ)數(shù)據(jù)的積累,模型中的動態(tài)多變量取值較為困難[3]。同時,上述模型主要適用于市場竟?fàn)幊浞值南到y(tǒng)軟件和支撐軟件,而艦用軟件則因其應(yīng)用環(huán)境的特殊性而不能適用。
與一般項目相比,軍用軟件的研制有著其自身的特點。軟件開發(fā)是知識密集型的智力活動,同時也是自動化程度較低的勞動密集型活動,軟件開發(fā)具有自己的生命周期[4]。從現(xiàn)有的成本估算方式基本可分為兩大類:一是事后估算,二是事前估算。事后估算一般用于總結(jié)和后續(xù)計劃指導(dǎo)等方面,雖能做到精確但實際意義有限;事前估算是根據(jù)軟件所要實現(xiàn)的功能和所需耗費的必要資源對軟件整個生命周期所需成本進(jìn)行的初步測算,測算內(nèi)容包括所用人力、物力、耗費的資源、軟件實現(xiàn)的技術(shù)難度等[5],從估算所用的技術(shù)方案來看主要有兩大類,其特點和弊端分別為:
1)以相對簡單的分解技術(shù)對軟件生成產(chǎn)品和所需資源進(jìn)行測算[6]。主要思路是運用化整為零、分別研究的方法,把整個軟件工程分解為零散的功能點和技術(shù)模塊,分別細(xì)化研究工作量和相應(yīng)的必要成本。
弊端:軟件工程是前后關(guān)聯(lián)的有機(jī)整體,軟件生命首期中任一環(huán)節(jié)的工作要求和難度取決于前一環(huán)節(jié)的實現(xiàn)與評審情況,所以,在實際操作中很難進(jìn)行有效的細(xì)化分解,不易對特定環(huán)節(jié)的成本作出較為精確的預(yù)計。
2)使用自動估算工具或現(xiàn)成的經(jīng)驗?zāi)P瓦M(jìn)行測算[7]。主要假設(shè)為所有的軟件開發(fā)過程都大同小異,只要輸入項目特征數(shù)據(jù),項目所需成本便可一目了然。
弊端:抹殺了不同項目之間尤其是軍用軟件項目的個性特征。雖然也能大致獲得項目的成本信息,但不具備優(yōu)化選擇的功能,即不能從輸出結(jié)果獲知如何推進(jìn)項目的開發(fā)才能以最小的成本完成軟件的最終交付。
軟件研制的生命周期具有明顯的分段特征,從立項開始,經(jīng)過設(shè)計、實現(xiàn)、測試等環(huán)節(jié)逐一展開,任一特定的當(dāng)前狀態(tài)與特定的下一狀態(tài)之間的成本是可見的[8],滿足動態(tài)規(guī)劃的模型要求。同時,軟件生產(chǎn)過程又是無后效的,即下一階段的軟件生產(chǎn)成本完全取決于當(dāng)前階段的狀態(tài),而與此前的選擇無關(guān),當(dāng)前狀態(tài)與此前所有選擇的集中體現(xiàn)。
動態(tài)規(guī)劃是運籌學(xué)的一個重要分支,由美國學(xué)者貝爾曼創(chuàng)立,是解決多階段決策過程的一種理想最優(yōu)化方法[8]。它把一個多維決策問題轉(zhuǎn)化為多個一維決策問題,具有獨特的應(yīng)用優(yōu)勢。通過上述分析,軟件項目研制的成本控制問題完全可以看做一個多階段決策的動態(tài)規(guī)劃問題。
根據(jù)實際問題的需要和動態(tài)規(guī)劃模型要求,本文從以下五個方面對問題進(jìn)行描述。
根據(jù)艦用軟件研制周期特征把整個過程劃分為n個狀態(tài)和n-1個階段,例如,可以把某個軟件研制過程分為立項批準(zhǔn)、方案設(shè)計完成、軟件實現(xiàn)、系統(tǒng)測試完成和驗收完畢5個狀態(tài)和方案設(shè)計、軟件編碼、系統(tǒng)測試、驗收使用4個階段。
令sk為第k(k=n-1,n-2,…1)個階段開始時所處的位置,則sk即為狀態(tài)變量。一般來講,除了首尾2個狀態(tài)以外,其余狀態(tài)均有可能有多種選擇,狀態(tài)變量的集合即為此狀態(tài)所有可能的選擇,用Ak表示。
允許決策集合Dk(sk)即為在狀態(tài)sk時向下一狀態(tài)推進(jìn)時可以選擇的方案種數(shù),顯然,有Dk(sk)?Ak+1。決策變量xk(sk)表式在sk位置上時做出的最佳選擇,同時也成為下一階段的初始狀態(tài)。
因為狀態(tài)變量是離散的且是確定性的,故狀態(tài)轉(zhuǎn)移方程sk+1=xk(sk)。
設(shè)Vkn表示指標(biāo)函數(shù),則:
其中,dj(sj,sj+1)即為從sj到sj+1的成本估算值。每一個決策的成本測算方法不同,但在形式上都可以表式為代碼行數(shù)l、關(guān)鍵點個數(shù)p、技術(shù)難度系數(shù)d等的函數(shù),故定義
最優(yōu)指標(biāo)函數(shù)fk(sk)表式在第k階段處于sk位置上,采用最優(yōu)策略完成軟件研制所需的最小成本。
遞推方程為
假設(shè)在某項艦用軟件研制中,從立項批準(zhǔn)(A)開始,軟件設(shè)計有3種備選方案(B1、B2、B3)、軟件實現(xiàn)有2種備選方案(C1、C2),系統(tǒng)測試有3種備選方案(D1、D2、D3),最終到驗收使用(E)完成整個證明周期,任意兩個相鄰狀態(tài)之間的成本(單位:萬元)經(jīng)測算并標(biāo)于狀態(tài)之間的連線之上。根據(jù)上述假設(shè)畫出的動態(tài)規(guī)劃路線圖如圖1所示。
圖1 軟件成本控制的動態(tài)規(guī)劃路線示意圖
下面按照逆推法求解。
1)系統(tǒng)測試至驗收使用階段
當(dāng)k=4時,因s4可取D1、D2、D3三種狀態(tài),應(yīng)分別計算。
所以x4(D1)=E,最短路線為D1→E。
同理,f4(D2)=25,x4(D2)=E,成本最低路線為D2→E。
f4(D3)=256,x4(D3)=E,成本最低路線為D3→E。
2)軟件實現(xiàn)至系統(tǒng)測試階段
當(dāng)k=3時,因s3可取C1、C2兩種狀態(tài),應(yīng)分別計算。
所以x3(C1)=D2,成本最低路線為C1→D2;
同理,f3(C2)=min{121,157,807}=121,所以,x3(C2)=D1,成本最低路線為C2→D1。
3)軟件設(shè)計至軟件實現(xiàn)階段
當(dāng)k=2時,因s2可取B1、B2、B3三種狀態(tài),應(yīng)分別計算。
所以x2(B1)=C2,成本最低路線為B1→C1。
f2(B3)=min{235,242}=235,x2(B3)=C1,成本最低路線為B3→C1。
4)立項批準(zhǔn)至軟件設(shè)計階段
當(dāng)k=1時,s1只有A一種狀態(tài),故
所以x1(A)=B1,成本最低路線為A→B1。
綜上,反推可得到最低成本路線為A→B1→C2→D1→E,最經(jīng)濟(jì)的方案組合為第1種設(shè)計方案、第2種實現(xiàn)方案和第1種系統(tǒng)測試方案,經(jīng)濟(jì)成本為221萬元。
本方案對不同形式的成本具有普適意義。在本例中,軟件成本是以經(jīng)濟(jì)成本的形式進(jìn)行的演示,實際操作中,狀態(tài)之間的成本形式也完全可以是時間成本,比如以“人月”為單位的度量方式,其最終結(jié)果即為完成整個項目所需的最短時間。
基于動態(tài)規(guī)劃理論的成本控制模型從軟件研制的整個周期著眼,較好地反映了不同技術(shù)路線所對應(yīng)的研制成本,具有一定的優(yōu)選功能,可為決策機(jī)關(guān)或項目承制方在滿足軟件功能的前提下對經(jīng)濟(jì)成本或時間成本進(jìn)行優(yōu)化布局,提高軟件研制的效率。軟件成本控制是軟件項目管理的重要組成部分,開展相關(guān)研究對于形成正確的管理理念和提高軍費使用效率具有重要意義[10~12]。