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