代碼大全讀書分享(一)

一、軟件構(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.png

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ǔ)

2.png

而且問題定義應(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.png

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從零入門系列,更多干貨等你來哦?。?!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,898評(píng)論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評(píng)論 25 709
  • 回學(xué)校的輕軌上,隔著車窗向外俯瞰,人群往來車隊(duì)徘徊,隔著遙遠(yuǎn)的距離演繹著他們的故事。車速很快,男男女女車水馬龍?jiān)谕?..
    是金絲猴阿閱讀 475評(píng)論 0 0
  • 作者:七七 都不知道從什么時(shí)候開始我們當(dāng)中的有些人很自覺的選擇了以一種“蝸式前進(jìn)”的行為方式去應(yīng)付這個(gè)顏顏角角的...
    粥七閱讀 369評(píng)論 0 1
  • 一、高考試坐,深度與環(huán)境交流,讓人場合一。 熟悉進(jìn)教室的路線,慢慢走,慢慢感受,好似每天走過,很熟悉很熟悉;進(jìn)教室...
    芝蘭幽香閱讀 299評(píng)論 0 0

友情鏈接更多精彩內(nèi)容