在系統(tǒng)架構(gòu)設(shè)計(jì)方面,源代碼是不可忽視的組成部分。中培偉業(yè)《詳細(xì)設(shè)計(jì)與系統(tǒng)架構(gòu)》培訓(xùn)專家賈老師指出,系統(tǒng)架構(gòu)中的設(shè)計(jì)源代碼組織結(jié)構(gòu)在設(shè)計(jì)過程中有很多需要注意的問題。
賈老師指出,在系統(tǒng)架構(gòu)源代碼組織結(jié)構(gòu)方面,我們有以下幾個(gè)方面的問題需要注意:
一、 開發(fā)可管理性
便于人員分工(模塊獨(dú)立性、開發(fā)工作的負(fù)載均衡、進(jìn)度安排優(yōu)化、預(yù)防人員流動(dòng)對(duì)開發(fā)的影響:一個(gè)好的構(gòu)架同時(shí)應(yīng)有助于減少項(xiàng)目組的壓力和緊張,提高軟件開發(fā)效率)、利于配置管理、大小的合理性、適度復(fù)雜性;
1)便于人員分工-模塊獨(dú)立性、層次性
模塊獨(dú)立性、層次性是為了保證項(xiàng)目開發(fā)成員工作之間的相對(duì)獨(dú)立性,模塊聯(lián)結(jié)方式應(yīng)該是縱向而不是橫向, 模塊之間應(yīng)該是樹狀結(jié)構(gòu)而不是網(wǎng)狀結(jié)構(gòu)或交叉結(jié)構(gòu),這樣就可以把開發(fā)人員之間的通信、模塊開發(fā)制約關(guān)系減到最少。同時(shí)模塊獨(dú)立性也比較利于配置管理工作的進(jìn)行。現(xiàn)在有越來越多的的軟件開發(fā)是在異地進(jìn)行,一個(gè)開發(fā)組的成員可能在不同城市甚至在不同國(guó)家,因此便于異地開發(fā)的人員分工與配置管理的源代碼組織結(jié)構(gòu)是非常必要的。
2)便于人員分工-開發(fā)工作的負(fù)載均衡
不僅僅是開發(fā)出來的軟件系統(tǒng)需要負(fù)載均衡,在開發(fā)過程中開發(fā)小組各成員之間工作任務(wù)的負(fù)載均衡也是非重要的。所謂工作任務(wù)的負(fù)載均衡就是通過合理的任務(wù)劃分按照開發(fā)人員特點(diǎn)進(jìn)行分配任務(wù),盡量讓項(xiàng)目組中的每個(gè)人每段時(shí)間都有用武之地。這就需要在構(gòu)架設(shè)計(jì)時(shí)應(yīng)當(dāng)充分考慮項(xiàng)目組手頭的人力資源,在實(shí)現(xiàn)客戶需求的基礎(chǔ)上實(shí)現(xiàn)開發(fā)工作的負(fù)載均衡,以提高整體開發(fā)效率。
3)便于人員分工-進(jìn)度安排優(yōu)化;
進(jìn)度安排優(yōu)化的前提是模塊獨(dú)立性并搞清楚模塊開發(fā)的先后制約關(guān)系。利用工作分解結(jié)構(gòu)對(duì)所有程序編碼工作進(jìn)行分解,得到每一項(xiàng)工作的輸入、輸出、所需資源、持續(xù)時(shí)間、前期應(yīng)完成的工作、完成后可以進(jìn)行的工作。然后預(yù)估各模塊需要時(shí)間,分析各模塊的并行與串行(順序制約),繪制出網(wǎng)絡(luò)圖,找出影響整體進(jìn)度的關(guān)鍵模塊,算出關(guān)鍵路徑,最后對(duì)網(wǎng)絡(luò)圖進(jìn)行調(diào)整,以使進(jìn)度安排最優(yōu)化。
有個(gè)家喻戶曉的智力題叫烤肉片策略:約翰遜家戶外有一個(gè)可以同時(shí)烤兩塊肉片的烤肉架,烤每塊肉片的每一面需要10分鐘,現(xiàn)要烤三塊肉片給饑腸轆轆急不可耐的一家三口。問題是怎樣才能在最短的時(shí)間內(nèi)烤完三片肉。一般的做法花20分鐘先烤完前兩片,再花20分鐘烤完第三片。有一種更好的方法可以節(jié)省10分鐘,大家想想。
4)便于人員分工-預(yù)防員工人員流動(dòng)對(duì)開發(fā)的影響
人員流動(dòng)在軟件行業(yè)是司空見慣的事情,已經(jīng)是一個(gè)常見的風(fēng)險(xiǎn)。作為對(duì)這一風(fēng)險(xiǎn)的有效的防范對(duì)策之一,可以在構(gòu)架設(shè)計(jì)中考慮到并預(yù)防員工人員流動(dòng)對(duì)開發(fā)的影響。主要的思路還是在模塊的獨(dú)立性上(追求高內(nèi)聚低耦合),組件化是目前流行的趨勢(shì)。
5)利于配置管理(獨(dú)立性、層次性)
利于配置管理與利于人員分工有一定的聯(lián)系。除了邏輯上的模塊組件要利于人員分工外,物理上的源代碼層次結(jié)構(gòu)、目錄結(jié)構(gòu)、各模塊所處源代碼文件的部署也應(yīng)當(dāng)利于人員分工和配置管理。(盡管現(xiàn)在配置管理工具有較強(qiáng)大的功能,但一個(gè)清楚的源碼分割和模塊分割是非常有好處的)。
6)大小的合理性與適度復(fù)雜性
大小的合理性與適度復(fù)雜性可以使開發(fā)工作的負(fù)載均衡,便于進(jìn)度的安排,也可以使系統(tǒng)在運(yùn)行時(shí)減少不必要的內(nèi)存資源浪費(fèi)。對(duì)于代碼的可閱讀性和系統(tǒng)的可維護(hù)性也有一定的好處。另外,過大的模塊常常是系統(tǒng)分解不充分,而過小的模塊有可能降低模塊的獨(dú)立性,造成系統(tǒng)接口的復(fù)雜。
二、 可維護(hù)性
便于在系統(tǒng)出現(xiàn)故障時(shí)及時(shí)方便地找到產(chǎn)生故障的原因和源代碼位置,并能方便地進(jìn)行局部修改、切割;(可維護(hù)性與運(yùn)行可管理性不同)
三、 可擴(kuò)充性:系統(tǒng)方案的升級(jí)、擴(kuò)容、擴(kuò)充性能
系統(tǒng)在建成后會(huì)有一段很長(zhǎng)的運(yùn)行周期,在該周期內(nèi),應(yīng)用在不斷增加,應(yīng)用的層次在不斷升級(jí),因此采用的構(gòu)架設(shè)計(jì)等方案因充分考慮升級(jí)、擴(kuò)容、擴(kuò)充的可行性和便利
四、 可移植性
不同客戶端、應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)管理系統(tǒng):如果潛在的客戶使用的客戶端可能使用不同的操作系統(tǒng)或?yàn)g覽器,其可移植性必須考慮客戶端程序的可移植性,或盡量不使業(yè)務(wù)邏輯放在客戶端;數(shù)據(jù)處理的業(yè)務(wù)邏輯放在數(shù)據(jù)庫(kù)管理系統(tǒng)中會(huì)有較好的性能,但如果客戶群中不能確定使用的是同一種數(shù)據(jù)庫(kù)管理系統(tǒng),則業(yè)務(wù)邏輯就不能數(shù)據(jù)庫(kù)管理系統(tǒng)中;
達(dá)到可移植性一定要注重標(biāo)準(zhǔn)化和開放性:只有廣泛采用遵循國(guó)際標(biāo)準(zhǔn),開發(fā)出開放性強(qiáng)的產(chǎn)品,才可以保證各種類型的系統(tǒng)的充分互聯(lián),從而使產(chǎn)品更具有市場(chǎng)競(jìng)爭(zhēng)力,也為未來的系統(tǒng)移植和升級(jí)擴(kuò)展提供了基礎(chǔ)。
五、 需求的符合性
從源代碼的組織結(jié)構(gòu)看需求的符合型主要考慮針對(duì)用戶需求可能的變化的軟件代碼及構(gòu)架的最小冗余(同時(shí)又要使得系統(tǒng)具有一定的可擴(kuò)展性)。