大型軟件項(xiàng)目需要很多人的能力合作,花費(fèi)一年或數(shù)年的時(shí)間才能完成。為了提高工作效率,保證工作質(zhì)量,軟件開發(fā)人員的組織、分工與管理是一項(xiàng)十分重要和復(fù)雜的工作,它直接影響到軟件項(xiàng)目的成功與失敗。首先,由于軟件開以人員的個(gè)人素質(zhì)與差異很大,因此對軟件開發(fā)人員的選擇、分工十分關(guān)鍵。1970年,Sackman對12名程序員用兩個(gè)不同的程序進(jìn)行試驗(yàn),結(jié)論是:程序排錯(cuò)、調(diào)試時(shí)間差別為18:1;程序編制時(shí)間差別為15:1;程序長度慶功別為6:1;程序運(yùn)行時(shí)間差別為13:1。近年來,隨著軟件開發(fā)方法的提高、工具的改善,上述差異可能會(huì)減小,但軟件人員的合理選擇及分工,充分發(fā)揮每個(gè)人的特長和經(jīng)驗(yàn)顯然是十分重要的。其次,因?yàn)檐浖a(chǎn)品不易理解、不易維護(hù),因此軟件人員的組織方式十分關(guān)鍵。一個(gè)重要的原則是,軟件開發(fā)人員的組織結(jié)構(gòu)與軟件項(xiàng)目開發(fā)模式和軟件產(chǎn)品的結(jié)構(gòu)相對應(yīng),這樣可以達(dá)到軟件開發(fā)的方法、工具、與人的統(tǒng)一,從而降低管理系統(tǒng)的復(fù)雜性,有利于軟件開發(fā)過程的管理與質(zhì)量控制。按樹形結(jié)構(gòu)組織軟件開發(fā)人員是一個(gè)比較成功的經(jīng)驗(yàn)。樹的根是軟件項(xiàng)目經(jīng)理和項(xiàng)目總的技術(shù)負(fù)責(zé)人。理想的情況是項(xiàng)目經(jīng)理和技術(shù)負(fù)責(zé)人由一個(gè)人或一個(gè)小組擔(dān)任。樹的結(jié)點(diǎn)是程序員小組,為了減少系統(tǒng)的復(fù)雜性、便于項(xiàng)目管理,樹的結(jié)點(diǎn)每層不要超過7個(gè),在此基礎(chǔ)上盡量降低樹的層數(shù)。程序員小組的人數(shù)應(yīng)視任務(wù)的大小和完成任務(wù)的時(shí)間機(jī)時(shí)定,一般是2~5人。為降低系統(tǒng)開發(fā)過程的復(fù)雜性,程序員小組之間,小組內(nèi)程序員之間的任務(wù)界面必須清楚并盡量簡化。
按“主程序員”組織軟件開發(fā)小組是一條比較成功的經(jīng)驗(yàn)?!爸鞒绦騿T”應(yīng)該是“超級程序員”。其他成員,包括程序員、后備工程師等,是主程序員的助手。主程序員負(fù)責(zé)規(guī)劃、協(xié)調(diào)和審查小組的全部技術(shù)活動(dòng)。程序員負(fù)責(zé)軟件的分析和開發(fā)。后備工程師是主程序員的助手,必要時(shí)能代替主程序員領(lǐng)導(dǎo)小組的工作并保持工作的連續(xù)性。軟件開發(fā)小組還可以根據(jù)任務(wù)需要配備有關(guān)專業(yè)人員,如數(shù)據(jù)庫設(shè)計(jì)人員、遠(yuǎn)程通信和協(xié)調(diào),提高了工作效率。這種形式的成敗主要取決于程序員的技術(shù)和管理水平。除了按主程序員負(fù)責(zé)的程序員小組組織開發(fā)人員外,還可以按“無我程序設(shè)計(jì)”建立軟件民主開發(fā)小組。這各組織形式強(qiáng)調(diào)組內(nèi)成員人人平等,組內(nèi)問題均由集體討論決定。這種組織形式有利于集思廣益、互相取長補(bǔ)短,但工作效率比較低。
軟件項(xiàng)目或軟件開以小組可以配置若干個(gè)秘書、軟件工具員、測試員、編輯和律師等到。秘書負(fù)責(zé)維護(hù)和軟件配置中的文檔、源代碼、數(shù)據(jù)及所依附的各種磁介質(zhì);規(guī)范并收集軟件開發(fā)過程中的數(shù)據(jù);規(guī)范并收集可重用軟件,對它們分類并提供檢索機(jī)制;協(xié)助軟件開發(fā)小組準(zhǔn)備文檔,對項(xiàng)目中的各種參數(shù),如代碼行、成本、工作進(jìn)度等,進(jìn)行估算;參與小組的管理、協(xié)調(diào)和軟件配置的評估。大型軟件項(xiàng)目需專門配置一個(gè)或幾個(gè)配置管理人員,專門負(fù)責(zé)軟件項(xiàng)目的程序、文檔和數(shù)據(jù)的各種版本控制,保證軟件系統(tǒng)的一致性與完整性。軟件開發(fā)小組內(nèi)部和小組之間經(jīng)常交流情況和信息,以便減少誤解,刪除軟件中的個(gè)人特征,提高軟件的質(zhì)量.
軟件項(xiàng)目的開發(fā)實(shí)踐表明,軟件開發(fā)各個(gè)階段所需要的技術(shù)人員類型、層次和數(shù)量是不同的。軟件項(xiàng)目的計(jì)劃與分析階段只需要少數(shù)人,主要是系統(tǒng)分析員、從事軟件系統(tǒng)論證和概要設(shè)計(jì)的軟件高級工程師和項(xiàng)目高級管理人員。概要設(shè)計(jì)時(shí)要增加一部分高級程序員,詳細(xì)設(shè)計(jì)時(shí),要增加軟件工程師和程序員,在編碼和測試階段還要增加程序員、軟件測試員。在此過程中軟件開發(fā)管理人員和各類專門人員逐漸增加,到測試階段結(jié)束時(shí),軟件項(xiàng)目開發(fā)人員的數(shù)量達(dá)到頂峰。軟件運(yùn)行初期,參加軟件維護(hù)的人員比較多,過早解散軟件開發(fā)人員會(huì)給軟件維護(hù)帶來意想不到的困難。軟件運(yùn)行一段時(shí)間以后,由于軟件開發(fā)人員參與糾錯(cuò)性維護(hù),軟件出錯(cuò)率會(huì)很快衰竭,這時(shí)軟件開發(fā)人員也就可以逐步撤出。如果系統(tǒng)不做適應(yīng)性或完善性維護(hù),需要留守的維護(hù)人員就不多了。上述人力資源安排類似下所示Rayleigh-Norden曲線。根據(jù)Putnam得出的軟件項(xiàng)目開發(fā)工作量與開發(fā)時(shí)間的四次方成反比的結(jié)論,得出軟件開發(fā)的人員-時(shí)間折衷定律:在時(shí)間允許的情況下,適當(dāng)減少人員會(huì)提高工作效率,降低軟件開發(fā)成本。F.Brooks從大量的軟件開發(fā)實(shí)踐中發(fā)現(xiàn):“向一個(gè)已經(jīng)延期的軟件項(xiàng)目追加開發(fā)人員,可能使項(xiàng)目完成的更晚?!边@從另一個(gè)角度說明軟件開發(fā)寧可時(shí)間長一點(diǎn),人員少一點(diǎn)。這樣可以大大減少人員之間的通信開銷,工作效率會(huì)更高些。
由此可見,在軟件開發(fā)過程中,人員的選擇、分配和組織是涉及軟件開發(fā)效率、軟件開發(fā)進(jìn)度、軟件開發(fā)過程管理和軟件產(chǎn)品質(zhì)量的重大問題,必須引起項(xiàng)目負(fù)責(zé)人的高度重視。