一、軟件構(gòu)建的概念
1.1 軟件構(gòu)建的活動(dòng)相關(guān)定義
構(gòu)建(Construction),通常在我們生活理解中,第一印象可能就是房屋的構(gòu)建?;蛘哂掷缧∨笥汛罘e木的那種過程也可稱為構(gòu)建。故構(gòu)建的通常指的是建設(shè)的過程。而軟件構(gòu)建的也就是軟件開發(fā)的過程。而軟件開發(fā),在《代碼大全》這種書,作者總結(jié)了11個(gè)構(gòu)建過程中涉及到活動(dòng)。
- 1).定義問題
- 2).需求分析
- 3).規(guī)劃構(gòu)建
- 4).軟件架構(gòu)
- 5).詳細(xì)設(shè)計(jì)
- 6).編碼與調(diào)試
- 7).單元測試
- 8).繼承測試
- 9).集成
- 10).系統(tǒng)測試
- 11).保障維護(hù)
而作者通過下面一張圖,闡述了本書的側(cè)重的范圍:詳細(xì)設(shè)計(jì)、編碼與調(diào)試、單元測試這幾塊。

1.2 軟件構(gòu)建為什么重要
- 1).構(gòu)建活動(dòng)是軟件開發(fā)的主要組成部分
構(gòu)建活動(dòng)在整個(gè)軟件開發(fā)活動(dòng)總時(shí)間中所占比例一般在30%至80%之間,所以必然會(huì)影響項(xiàng)目的成敗
- 2).構(gòu)建活動(dòng)是軟件開發(fā)中的核心活動(dòng)
- 3).把精力集中于構(gòu)建活動(dòng),可以大大提高程序員的生產(chǎn)率
- 4).構(gòu)建產(chǎn)物-源代碼往往是對(duì)軟件的唯一精確描述
在很多項(xiàng)目中,程序員可以得到的唯一文檔就是源代碼本身。需求規(guī)格書和設(shè)計(jì)文檔可能會(huì)過時(shí),但是源代碼是最新的。因此,源代碼就必須具有盡可能的高的質(zhì)量。
- 5).構(gòu)建活動(dòng)是唯一一項(xiàng)確保會(huì)完成的工作
二、使用隱喻的方式理解軟件構(gòu)建
軟件開發(fā)相對(duì)于其他學(xué)科而言,還是一門很年輕的學(xué)科,它還沒有完全成熟到擁有一套標(biāo)準(zhǔn)隱喻的程序,因此必然存在許多或者相互補(bǔ)充,或者相互抵制的隱喻,某些隱喻相對(duì)好些,而另一些比較糟糕,你對(duì)隱喻有多理解,也就決定了你對(duì)軟件開發(fā)有多理解
2.1 常見的隱喻
- 1).寫作代碼
在很多項(xiàng)目中,程序員可以得到的唯一文檔就是源代碼本身。需求規(guī)格書和設(shè)計(jì)文檔可能會(huì)過時(shí),但是源代碼是最新的。因此,源代碼就必須具有盡可能的高的質(zhì)量。
- 2).培植系統(tǒng)
將創(chuàng)造軟件想象成類似播種和耕種的情形。你一次設(shè)計(jì)的系統(tǒng)的一小部分、寫出一段代碼、做一點(diǎn)測試,并將成果一點(diǎn)點(diǎn)添加到整個(gè)系統(tǒng)
- 3).系統(tǒng)生長
先做出軟件系統(tǒng)的一個(gè)盡可能簡單,但能運(yùn)行的版本。后期你再一次一次增加你得功能。目前互聯(lián)網(wǎng)的公司的產(chǎn)品大都使用此方式進(jìn)行開發(fā),因?yàn)榍捌谕度氤杀颈容^低,如果失敗了,可以迅速改變策略方向。如果成功了,可以進(jìn)行圍繞核心依次展開拓展開發(fā)。
- 4).建造軟件
與系統(tǒng)生長概念相通,但是它提供了更詳細(xì)的指導(dǎo)。比如前期詳盡的調(diào)研,準(zhǔn)備,軟件規(guī)劃等等。比如要構(gòu)建大型信息化系統(tǒng)。應(yīng)該使用此模式
三、軟件構(gòu)建的前期準(zhǔn)備
3.1 前期準(zhǔn)備的重要性
使用高質(zhì)量的實(shí)踐方法是那些能夠創(chuàng)造高質(zhì)量軟件的程序員的共性。這些高質(zhì)量的實(shí)踐方法在項(xiàng)目的初期、中期、末期都強(qiáng)調(diào)質(zhì)量。
構(gòu)建活動(dòng)是軟件項(xiàng)目的中間階段,在你開始構(gòu)建的時(shí)候,項(xiàng)目前期工作已經(jīng)或多或少為這個(gè)項(xiàng)目的成功或失敗打下了基礎(chǔ)。然而,在構(gòu)建的過程中,你至少應(yīng)該能夠辨明當(dāng)時(shí)的形式如何,如果你看到失敗的烏云已經(jīng)出現(xiàn)在地平線上時(shí)。就退回到項(xiàng)目的前期工作。
3.2 前期準(zhǔn)備適用于現(xiàn)代軟件項(xiàng)目嗎?
在20世紀(jì)70年代開始至今的業(yè)界數(shù)據(jù)顯示,如果在開始構(gòu)建活動(dòng)之前認(rèn)真地進(jìn)行適當(dāng)?shù)臏?zhǔn)備活動(dòng),那項(xiàng)目將會(huì)運(yùn)行的很好。(作者的調(diào)研總結(jié)結(jié)論)
3.3 問題定義的先決條件
在構(gòu)建軟件之前,首先要滿足的是一項(xiàng)先決條件,對(duì)這個(gè)系統(tǒng)要解決的問題做出清楚地陳訴。這時(shí)候稱為:產(chǎn)品設(shè)想、設(shè)想陳述、任務(wù)陳述或者說產(chǎn)品定義。但是本書,將它稱為“問題定義”
如下圖,問題定義為后面的軟件開發(fā)奠定了堅(jiān)實(shí)的基礎(chǔ)

而且問題定義應(yīng)該用客戶的語言來寫,而且應(yīng)該從客戶的角度來描述問題。通常不應(yīng)該用計(jì)算機(jī)的專業(yè)術(shù)語敘述。最好的解決方案未必是一個(gè)計(jì)算機(jī)程序。
3.4 需求的先決條件
1).要求一套明確的需求,這點(diǎn)很重要。因?yàn)槊鞔_的需求有助于確保是與用戶駕馭的功能,而不是程序員駕馭的功
能。因?yàn)槊鞔_的需求,免得你去猜測用戶想要什么功能。2).明確的需求有助于避免爭論,以免產(chǎn)生歧義。
3).明確的需求有助于減少開始編程開發(fā)之后的系統(tǒng)變更情況。如果你在編碼的過程中發(fā)現(xiàn)一個(gè)代碼上的錯(cuò)誤,你只需要修改幾行代碼,然后繼續(xù)工作。但是如果你在編碼的時(shí)候發(fā)現(xiàn)一個(gè)需求的錯(cuò)誤,那你就得改變?cè)O(shè)計(jì)。
4).穩(wěn)定的需求是軟件開發(fā)的圣杯。一旦需求穩(wěn)定,項(xiàng)目就能以有序的、可預(yù)測的、平穩(wěn)的方式,完成從架構(gòu)到設(shè)計(jì)到編碼到測試等一系列工作。
3.5 如何處理構(gòu)建期間的需求變更
1).確保每一個(gè)都知道需求變更的代價(jià)
2).建立一套變更控制程序
3).使用能適應(yīng)變更的開發(fā)方法
4).放棄這個(gè)項(xiàng)目
3.6 架構(gòu)的先決條件
軟件架構(gòu)是軟件設(shè)計(jì)的高層部分,用于支撐更細(xì)節(jié)的設(shè)計(jì)的框架。通常會(huì)有一份獨(dú)立的文檔描述架構(gòu)。
好的架構(gòu)使得構(gòu)建活動(dòng)變得更加容易。糟糕的架構(gòu)則使得構(gòu)建活動(dòng)幾乎寸步。

3.7 軟件架構(gòu)的典型
- 1).程序組織
- 2).主要類
- 3).數(shù)據(jù)設(shè)計(jì)
- 4).業(yè)務(wù)規(guī)則設(shè)計(jì)
- 5).用戶界面設(shè)計(jì)
- 6).資源管理
- 7).安全性
- 8).性能
- 9).可伸縮性
- 10).互用性
- 11).國際化/本地化
- 12).IO輸入輸出的性能考慮
- 13).錯(cuò)誤處理
- 14).容錯(cuò)性
- 15).架構(gòu)可行性
四、總結(jié)
這篇主要是前三章關(guān)于概念理論的總結(jié)與分享。代碼相關(guān)的在后面的篇幅進(jìn)行介紹。謝謝,大家可以關(guān)注我的個(gè)人微信公眾:Java從零入門系列,更多干貨等你來哦?。?!