8、 業(yè)務(wù)流程的可調(diào)整性
應(yīng)當(dāng)考慮客戶業(yè)務(wù)流程可能出現(xiàn)的變化,所以在系統(tǒng)構(gòu)架設(shè)計(jì)時(shí)要盡量排除業(yè)務(wù)流程的制約,即把流程中的各項(xiàng)業(yè)務(wù)結(jié)點(diǎn)工作作為獨(dú)立的對(duì)象,設(shè)計(jì)成獨(dú)立的模塊或組件,充分考慮他們與其他各種業(yè)務(wù)對(duì)象模塊或組件的接口,在流程之間通過(guò)業(yè)務(wù)對(duì)象模塊的相互調(diào)用實(shí)現(xiàn)各種業(yè)務(wù),這樣,在業(yè)務(wù)流程發(fā)生有限的變化時(shí)(每個(gè)業(yè)務(wù)模塊本身的業(yè)務(wù)邏輯沒(méi)有變的情況下),就能夠比較方便地修改系統(tǒng)程序模塊或組件間的調(diào)用關(guān)系而實(shí)現(xiàn)新的需求。如果這種調(diào)用關(guān)系被設(shè)計(jì)成存儲(chǔ)在配置庫(kù)的數(shù)據(jù)字典里,則連程序代碼都不用修改,只需修改數(shù)據(jù)字典里的模塊或組件調(diào)用規(guī)則即可。
9、 業(yè)務(wù)信息的可調(diào)整性
應(yīng)當(dāng)考慮客戶業(yè)務(wù)信息可能出現(xiàn)的變化,所以在系統(tǒng)構(gòu)架設(shè)計(jì)時(shí)必須盡可能減少因?yàn)闃I(yè)務(wù)信息的調(diào)整對(duì)于代碼模塊的影響范圍。
10、 使用方便性
使用方便性是不須提及的必然的需求,而使用方便性與系統(tǒng)構(gòu)架是密切相關(guān)的。WinCE(1.0)的失敗和后來(lái)改進(jìn)版本的成功就說(shuō)明了這個(gè)問(wèn)題。WinCE(1.0)有太多層次的視窗和菜單,而用戶則更喜歡簡(jiǎn)單的界面和快捷的操作。失敗了應(yīng)當(dāng)及時(shí)糾正,但最好不要等到失敗了再來(lái)糾正,這樣會(huì)浪費(fèi)巨大的財(cái)力物力,所以在系統(tǒng)構(gòu)架階段最好能將需要考慮的因素都考慮到。當(dāng)然使用方便性必須與系統(tǒng)安全性協(xié)調(diào)平衡統(tǒng)一,使用方便性也必須與業(yè)務(wù)流程的可調(diào)整性和業(yè)務(wù)信息的可調(diào)整性協(xié)調(diào)平衡統(tǒng)一!皾M足用戶的需求,便于用戶使用,同時(shí)又使得操作流程盡可能簡(jiǎn)單。這就是設(shè)計(jì)之本。”
11、構(gòu)架樣式的一致性
軟件系統(tǒng)的構(gòu)架樣式有些類似于建筑樣式(如中國(guó)式、哥特式、希臘復(fù)古式)。軟件構(gòu)架樣式可分為數(shù)據(jù)流構(gòu)架樣式、調(diào)用返回構(gòu)架樣式、獨(dú)立組件構(gòu)架樣式、以數(shù)據(jù)為中心的構(gòu)架樣式和虛擬機(jī)構(gòu)架樣式,每一種樣式還可以分為若干子樣式。構(gòu)架樣式的一致性并不是要求一個(gè)軟件系統(tǒng)只能采用一種樣式,就像建筑樣式可以是中西結(jié)合的,軟件系統(tǒng)也可以有異質(zhì)構(gòu)架樣式(分為局部異質(zhì)、層次異質(zhì)、并行異質(zhì)),即多種樣式的綜合,但這樣的綜合應(yīng)該考慮其某些方面的一致性和協(xié)調(diào)性。每一種樣式都有其使用的時(shí)機(jī),應(yīng)當(dāng)根據(jù)系統(tǒng)最強(qiáng)調(diào)的質(zhì)量屬性來(lái)選擇。
四、源代碼的組織結(jié)構(gòu)方面的考慮:
1、 開發(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)行,F(xiàn)在有越來(lái)越多的的軟件開發(fā)是在異地進(jìn)行,一個(gè)開發(fā)組的成員可能在不同城市甚至在不同國(guó)家,因此便于異地開發(fā)的人員分工與配置管理的源代碼組織結(jié)構(gòu)是非常必要的。
2)便于人員分工-開發(fā)工作的負(fù)載均衡
不僅僅是開發(fā)出來(lái)的軟件系統(tǒng)需要負(fù)載均衡,在開發(fā)過(guò)程中開發(fā)小組各成員之間工作任務(wù)的負(fù)載均衡也是非重要的。所謂工作任務(wù)的負(fù)載均衡就是通過(guò)合理的任務(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)要烤三塊肉片給饑腸轆轆急不可耐的一家三口。問(wè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ì)。