敏捷開發的26條至理名言

敏捷開發愈來愈熱,那麼在實際應用時,應該如何去運用以及須要注意哪些東西呢?不妨來看看本文提供的26條至理名言吧!

一、完整地幹完一件過後在開始另外一件事:用廚房比喻來講就是:「先上這道菜,再開始作下一道」。軟件開發的最大問題就是同時開始幾件事情,這將不可避免的形成某些工做被廢棄,從而形成浪費。專一於一件事;完整地實現其功能;運行測試;編寫文檔;簽入全部,把這當作一項工做完成,而後再開始下一件事。 程序員

二、不要破壞構建:很是明顯,但必須被包含在任何軟件開發建議清單中。程序員在簽入以前採起全部合適的預防措施進行測試,則永遠不會破壞構建。若是構建被破壞,一般是由於有人偷懶了。 架構

三、在用例須要以前,不要實現程序:當你實現一個特定的類,你應該在腦海中有一個特定的用例,同時應該只實現用例須要的方法。你能夠考慮該類潛在的功能,寫入註釋之中,但直到用例真正須要時,才應去實現它。 性能

四、在用例須要以前,不要添加數據成員:同上一條,不過這是從類的數據成員角度考慮的。彷佛顯而易見地,「客戶」記錄須要「送貨地址」,但直到有用例明確須要送貨地址,才應該實現它。 學習

五、不要懼怕作決定,不要懼怕改變先前的決定:敏捷開發是關於相應變化和快速相應的。開發初期,你沒有完整的信息。你應該儘量的推遲決策,直到你必須作出決策的時候。沒有信息,沒法支持你的決定,相反,在有效信息的基礎上作出最佳決定。有了新的信息,不要懼怕改變先前的決定。(某些「恐龍」稱之爲搖擺不定,但我稱之爲響應變化的環境) 測試

六、持續學習如何改善質量:這項工做永不會結束,所以你應常常留意能夠改善的事情,並收集質量問題被確認和處理的案例。 優化

七、度量、度量、度量:敏捷開發幫助處理將來不肯定性問題,但對於過去應沒有不肯定性。測試應持續運行,每次運行的性能表現應被度量和記錄。 編碼

八、爲人而設計,而不是系統:開發者經常因技術而使設計誤入歧途。毫不要忘記設計的最終目標,那就是幫助人們完成工做。 設計

九、測試是產品的一部分:不少開發者和經理認爲產品就是交付給客戶的東西,而其它全部東西都不那麼重要。測試應被認爲是產品實實在在的一個部分,值得在設計時仔細考慮,甚至,在不少狀況下,和產品一塊兒交付給客戶。(後半部分有爭議,可是內建測試做爲軟件交付的一部分僅僅佔用可有可無的空間,卻在必要時提供顯而易見的好處,這種方式應該被考慮。) 對象

十、在代碼以前編寫測試:測試自己能夠用來闡釋真正須要的設計。設計的缺陷經常是經過測試用例被發現的。想一想看,編碼以前,經過這些用例,能夠節約多少時間。可是,爲用例1編寫測試,而後編碼,而後再開始用例2。 開發

十一、消除浪費:坦率的說,這是另外一個必須包含在任何開發原則清單中的陳詞濫調,由於它過重要了。發現浪費並消除它,這項工做沒有盡頭。消除任何不能增長客戶價值的東西。若是你不能確認客戶價值,那極可能你並不須要它。

十二、創建對構建破壞當即響應的文化:要明白當構建被破壞,會影響項目中的每個人,所以,最重要的是確認核心代碼被構建併合理測試。我曾見過有些團隊聽任失敗測試持續數月,由於那是其它人的工做。每一個人都痛苦,但沒人採起行動。想反,必須造成共識,那就是小工做能爲團隊得到大的回報。

1三、全部團隊成員應理解客戶須要:大型的複雜項目定然被分解爲獨立的團隊,進而被分派給開發人員。可是,不該在此範圍內作的是,失去關注最終項目真正用戶的指望和目標。

1四、把相關定義放在一塊兒:組織代碼以使高度相關的事情在一塊兒,或在一個類中。這是標準面向對象設計封裝原則。理想狀況下,全部的類外的代碼不須要知道內部工做細節。一些開發者樂於將細節擴散到多個文件中以便按不一樣方式組織,如全部相同的數據類型放在一塊兒,或者按字母順序組織。例如,在他們要用的不一樣包中,將全部常量放在一個類裏,這增長了沒必要要的程序複雜性。指導原則應該是按相關性分組從而隱藏複雜性。

1五、始終在簽入以前運行測試:這條準則幫助你知足「不要破壞構建」準則。

1六、過早的優化是萬惡之源:引用高德納被證明的話:代碼應編寫良好以免微觀層面的浪費,但獨立方法層次之外的優化應等待整個程序基於真實的最終用戶使用情景的壓力測試的進行。僅僅基於對代碼的靜態理解,直覺地判斷對總體性能什麼是重要的,結論幾乎老是錯誤的。相反,度量整個系統的行爲,辨別1%真正影響性能的代碼,並專一於此。

1七、減小積壓未完成的編碼任務:當開發人員開始一個用例,會發生成本,跟已修改卻未完成和測試的代碼相關聯。留着未完成的變化幾天或幾個星期會累積成巨大的重作風險。考慮每一個估算須要一天的三個任務,同時開始這三個任務,並在3天內同時進行,意味着9個單位的累計成本。可是順序進行每一個任務,完成一個再開始下一個,意味着只有3個單位的成本。這個不是直覺,直覺告訴咱們,在工做完成以前,咱們不妨同時作三件事情。但軟件不像物理構造。短小,快速和完整的工做不只減小認知的負擔,並且減小未完成工做與他人未完成工做之間衝突的可能。

1八、不要過分強調代碼的通用性:這就是著名的「YAGNI-你不會須要它」。當編寫一個特定類的時候,程序員總喜歡認爲該類可能用於其它用途。若是如今的用例須要這些用途,這很好,可是,程序員常常考慮未被說起的用途,或者那些實際上永遠不須要的。(這經常讓我聯想到經典的週六現場滑稽短劇,關於某產品既是地板蠟,也是糕點上的甜食。)

1九、兩行代碼能行,就不要用三行:有人閱讀時,簡潔的代碼總能得到回報。但不要將代碼壓縮到難以閱讀。更小的,編寫良好的代碼比之冗長的,編寫華麗的代碼更容易維護,也更容易發現錯誤。始終儘量簡化,但別過度。

20、不要用行數來度量代碼:完成特定任務所需的代碼行數,不一樣的程序員之間和編碼風格之間差別很大。代碼行數不能告訴你代碼完成和質量的些許東西。代碼質量能夠相差200倍,這足以抵消代碼行數的做用。應該統計功能用例的數目。

2一、持續地從新設計和重構:謹慎地使用這條準則,由於有些代碼脆弱而難以改變,但一般你不該懼怕更改代碼以符合實際使用狀況。一個數據成員過去多是整數,可是當一個用例要求它是一個浮點數時不要懼怕去改變它。

2二、刪除死代碼:涉及到大量不能很好理解的代碼是,有個傾向是不自找麻煩。一個例子就是往類中增長新的方法去替換另外一個,開發人員經常會留下舊的方法以防萬一。必須努力檢查方法是否必須,若是沒有證據代表它是必須的,那就刪除它。最糟糕的就是註釋掉大量的代碼,並把它留在那兒。註釋掉的代碼應在測試經過後儘快刪除,固然應在簽入以前。所以,某個時候你發現一些東西可能並不須要,付出小小的努力去驗證並消除此代碼能讓代碼基線更易維護。

2三、不要發明新語言:程序員喜好使用文本文件配置在運行時驅動功能。沒有配置文件可以不編譯而改變程序的行爲。XML的出現推進了無休止的專門定製「腳本語言」的浪潮,以使功能能被最終用戶定製而不須要編譯。這種推理的缺陷在於,離開某個特定實施的環境,操做行爲幾乎歷來沒能很好地精肯定義,同時,那些腳本語言只對那些對問題領域代碼的內部運行有深刻了解的人有用。所以,不具有詳盡內部知識的真實最終用戶永遠不可能知道預料複雜的命令組合的效果須要什麼。腳本語言有用,也不能被消除,可是設計者必須採起很是很是保守的態度,儘量使用現有的語言,避免新的發明。

2四、在你準備實現並測試前,別作設計:你應該有行進的整體思路和對系統架構的概覽,可是,直到開發迭代容許設計被實現和測試前,不要作詳細設計,不要編寫功能實現的詳細說明。詳細設計應當只涉及處處理目前的用例。軟件開發中最大的浪費源於將時間花在設計那些不須要,或者由於某些錯誤的設計假定而須要從新設計的事情之上。

2五、設計是可塑的:不像物理製造,軟件能夠很容易地得到顯著改變。事實上,有大量證據證實軟件自己比描述軟件的設計說明書更容易改變。此外,軟件比說明書更有效地傳達設計。所以,你應該把時間用於直接實現設計,讓客戶能看見設計的細節。若是你犯錯並改變設計,改變軟件比改變規格更容易。但最重要的是,客戶看到代碼運行後,你關於客戶想要什麼的信息大爲完善。

2六、花時間編寫發現和報告異常狀況的代碼中的問題的完整描述:程序員每每很懶惰,拋出粗淺描述錯誤的異常。認爲他們永遠是惟一會看到這個問題的人,而且他們從含糊的描述會記得這個問題的意思。但實際上,在客戶支持環境,不許確或者不完整的錯誤報告比其它緣由浪費更多的時間。編寫每一個錯誤消息,就好像你正向某個正好走進房間而且沒有此代碼經驗的人解釋情況。客戶和客戶支持團隊畢竟沒有此代碼的經驗。

這些介紹沒有特定的順序,歡迎討論我忽略的原則,或者(若是是這種狀況)你不認同的敏捷開發原則。

相關文章
相關標籤/搜索