敏捷開發 二

2021-09-01 09:48:46 字數 2481 閱讀 4977

一、計畫

1、當你能夠度量你所說的,並且能夠用數字去表達它時,就表示你了解了它;若你不能度量它,不能用數字去表達它,

那麼說明你的知識就是匱乏的,不能令人滿意的。

2、過大或者過小的素材都是難以估算的。開發人員往往會低估那些大的素材而高估那些小的素材。任何過大的素材都

應該被分解成小一點的部分,任何過小素材都應該和其他小的素材合併。

3、迭代計畫,專案的週期過程,如下圖:

二、 重構

1、軟體設計的腐化

當軟體出現下面任何一種氣味時,就表明軟體正在腐化。

(1)僵化性(rigidity)

僵化性是指難以對軟體進行改動,即使是簡單的改動。如果單一的改動會導致有依賴關係的模組中的連鎖改動,

那麼設計就是僵化的。必須要改動的模組越多,設計就越僵化。

(2)脆弱性(fragility)

脆弱性是指,在進行乙個改動時,程式的許多地方就可能出現問題。常常是,出現新問題的地方與改動的地方並沒有概念

上的關聯。要修正這些問題就又會引出新的問題,從而使軟體開發團隊就像乙隻不停追逐自己尾巴的狗一樣。

(3)牢固性(immobility)

牢固性指很難解開系統的糾結,使之成為一些可在其他系統中重用的元件。設計中包含了對其他系統有用的部分,

但是要把這些部分從系統中分離出來需要的努力和風險是巨大的。

(4)粘滯性(viscosity)

做正確的事情比做錯誤的事情要困難。當面臨乙個改動時,開發人員常常會發現會有多種改動的方法。其中,

一些會保持設計;而另外一些會破壞設計(也就是生硬的手法)。當那些可以保持系統設計 的方法比那些

生硬手法更難應用時,就表明設計具有高的粘滯性。

(5)不必要的複雜性(needless complexity)

設計中包含有不具任何直接好處的基礎結構。如果設計中包含當前沒有用的組成部分,它就含有不必要的複雜性。

當開發人員**需求的變化,並在軟體中放置了處理潛在變化的**時,常常會出現這種情況。

(6)不必要的重複(needless repetition)

設計中包含有重複的結構,而該重複的結構本可以使用單一的抽象進行統一。複製(copy)和貼上(paste)也許是有用的文字編輯(text-editing)操作,但是它們卻是災難性的**編輯(code-editing)操作。當系統中有重複**時,

對系統進行改動會變得困難。在乙個重複的**體中發現的錯誤必須要在每個重複體中一一修正。不過,由於每個重複體

之間都有細微的差別,所以修正的方式也不總是相同的。

(7)晦澀性(opacity)

很難閱讀、理解,沒有很好地表現出意圖。晦澀性是指,**模組難以理解,當開發人員最初編寫乙個模組時,

**對於他們來說看起來也許是清晰的。這是由於他們使自己專注於**的編寫,並且他們對 於**非常熟識。

在熟識減退以後,他們或許會回過頭來再去看那個模組,並想知道他們為什麼會編寫出如此糟糕的**。

為了防止這種情況發生,開發人員必須要 站在**閱讀者的位置,共同努力對他們的**進行重構。

2、每乙個軟體模組都具有三項職責

第乙個職責是它執行起來所完成的功能。

第二個職責是它要應對變化,幾乎所有的模組在生命週期中都要變化,開發者有責任保證這種改變應該盡可能地簡單。

第三個職責是要和閱讀它的人進行溝通,對該模組不熟悉的開發人員應該能夠比較容易地閱讀並理解它。

3、重構就好比用餐後對廚房的清理工作

第一次你沒有清理它,你用餐是會快一點。但是由於沒有對盤碟和用餐環境進行清潔,第二次做準備工作的時間就

要更長一些。這回再一次促使你放棄清潔工作。的確,如果跳過清潔工作,你今天總是能夠很快用完餐,但是髒亂在

一天天的積累。最終,你的花費大量的時間去尋找合適的烹飪器具,鑿去盤碟上已經乾硬的食物殘餘,並把它們洗擦

乾淨以使他們適合於烹飪。飯是天天要吃的。忽略掉清潔工作並不能真正加快做飯速度。

4、重構的目的,是為了每天清潔你的**

我們不想讓髒亂積累,我們不想「鑿去並洗擦掉」隨著時間積累「乾硬的」位元,我們想通過最小的努力就能夠對我們的

系統進行擴充套件和修改。要想具有這種能力,最重要的就是保持**的清潔。

三、測試

1、編寫單元測試是一種驗證行為,更是一種設計行為,同樣,它更是一種編寫文件的行為。編寫單元測試避免了相當數量的反饋迴圈,尤其是功能驗證方面的反饋迴圈。

2、測試驅動開發,測試促使模組之間隔離,在編寫產品**之前,先編寫測試常常會暴露程式中應該被解藕合的區域。

3、驗收測試,作為驗證工具來說,單元測試是必要的,但是不夠充分。單元測試用來驗證系統的小的組成單元應該按照

所期望的方式工作,但是它們沒有驗證系統作為乙個整體時工作的正確性。單元測試是用來驗證系統中個別機制的

白盒測試,驗收測試是用來驗證系統滿足客戶需求的黑盒測試。

敏捷開發 什麼是敏捷開發?敏捷開發掃盲(詳解)

敏捷開發 scrum 是一種軟體開發的流程,強調快速反應 快速迭代 價值驅動。scrum的英文意思是橄欖球運動的乙個專業術語,表示 爭球 的動作 運用該流程,你就能看到你團隊高效的工作。敏捷開發的特點就是下面4句話 個體與互動 勝過 過程與工具 可以工作的軟體 勝過 面面俱到的文擋 客戶協作 勝過 ...

ipd敏捷開發 IPD 敏捷開發

ipd 敏捷開發 課程目標 通過遊戲 實戰 討論,結合自己當前的實際工作,體會 ipd 系統工程在敏捷開發中的應用 敏捷方法的價值觀 敏捷開發需求管理的必要性和重要性 敏捷開發最佳實踐的組合應用 從而在未來的工作中,能夠靈活地運用這些知識,建立符合自己企業 團隊的工作流程與開發管理模式。課程大綱 1...

敏捷開發 敏捷測試

敏捷測試的定義 首先敏捷測試是敏捷的一種,原有測試定義中通過執行被測系統發現問題,通過測試這種活動能夠提供對被測系統提供度量等概念還是適用的。在傳統的測試定義上,還需要新增 敏捷測試是遵循敏捷宣言的一種測試實踐 強調從客戶的角度,即使用系統的使用者的角度,來測試系統 重點關注持續迭代的測試新開發的功...