關于敏捷開發方法(Agile Software Development)的閱讀筆記

  對“敏捷開發”(Agile Software Development)這個詞,我是在這學期鄒欣老師《現代程序設計》課上第一次聽到的,剛聽到時并不知道其具體指什么,只是從字面上直覺其意思應該是快速開發之類的。這次從 Agile Guide?、?The New Methodology?以及其他一些中文資料上較為詳細地了解了敏捷開發方法及其與傳統開發方法相比的優勢所在,收獲頗豐。下面談談在這次閱讀中所學習到的東西。

一、什么是敏捷開發方法

  通常而言,敏捷開發方法是一種以人為核心的、循環的、迭代的開發方法。在敏捷開發中,軟件項目的構建被切分成多個子項目,各個子項目的成果都經過測試,具備集成和可運行的特征。換言之,就是把一個大項目分為多個相互聯系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態(來自百度百科)。我想,其關鍵之處在于迭代。

二、敏捷開發方法的核心思想:適應變化(Adaptive)和以人為中心(people-oriented)

  軟件開發方法的發展經歷了從沒有、到繁重的工程方法、再到敏捷開發方法的過程。早起軟件開發方法沒有完整的規劃,是一個短期的、即時的、邊寫邊改的、組合的過程,當系統很小時這種方法可能很有用但是當系統較大時就無能為力了;為了改變這種狀況,引進了”方法論“(methodology)的概念,借鑒工程領域的實踐提出了規劃驅動的方法(plan-driven methodologies)或工程方法(engineering methods)。為了讓軟件開發更具可預測性(predictable)和更有效率(efficient),強調在軟件開發前制定詳細的規劃來約束開發過程,但成效也并不顯著;后來誕生了敏捷開發方法,這種方法企求在無過程和繁重的過程(no process and too much process),也就是上述兩種方法中找到一個平衡點,以不多的步驟過程獲得合理的剛剛好的結果。其核心有兩方面:

  ※ 強調適應性(adaptive)而非預測性(predictive):不是先制定詳盡的需求計劃然后按著計劃按部就班地做,而是先做出個雛形,然后根據需求的細化或變化進行迭代開發,對需求做出充分的響應。從某種程度上說,這種開發方法不僅不忌諱需求的變化甚至在開發的過程中需求變化得越細越明確,其產品結果越好。

  適應性不僅指在開發過程中修改軟件來適應需求的變化,更包括自適應的過程,即通過每個階段的回顧和總結來(What did we do well? What have we learned? What can we do better? What puzzles us?)來發現自身的問題,繼而選擇一個更合適的方式或過程來進行開發工作,從而不斷完善開發過程。

  ※ 強調以人面向人而不是面向過程(people-oriented rather than process-oriented):工程方法強調事先制定詳盡的過程(process)以便讓參與進來的人都能按照計劃按部就班地做好工作,而敏捷開發方法斷言制定過程不能作為一個開發團隊技能的組成部分,其角色是支持團隊的開發工作。在開發過程中,應以人為中心,讓他們與應用領域的業務專家充分接觸來汲取業務方面的專業知識,合理安排成員的工作,合理評價、衡量每個人的工作成果,從而成為一個高效的、有責任的開發團隊。

三、敏捷開發的價值觀

  在極限編程四個價值觀的基礎上擴展到五個:Communication(溝通), Feedback(反饋), Simplicity(簡易), Courage(勇氣),?Respect(謙遜)

四、具體的敏捷開發方法

  xp(extreme programing)極限編程、Scrum、Crystal、Context Driven Testing、Lean Development精益開發、(Rational) Unified Process等

五、對敏捷開發方法與傳統工程方法的對比的一些看法

  讀完這篇文章?(The New Methodology)?,我覺得這兩種開發方法最大的不同在于著眼點的天壤之別,即 adaptive process 與 predictive process 的區別。

  對于敏捷開發來說,強調適應性

“It is adaptivity in the context of a project adapting its software frequently to meet the changing requirements of its customers.”

  而對工程方法來說,著重通過完整的需求制定具有預測性的計劃

“Everything else in software development depends on the requirements. If you cannot get stable requirements you cannot get a predictable plan.”

?  1、開發過程的差異。

  傳統的工程方法(或如文章中所說,成為規劃驅動方法)強調先詳細了解客戶的需求,然后分析需求并制定周密的開發計劃,可稱之為 “規劃編程”。但是想了那么多、那么全面、那么復雜值得嗎?要知道,計劃是趕不上變化的。相反,采用敏捷開發的方法,關鍵是先搭出個總體的框架,不要太在意與細節;然后在實踐的過程中不斷補充、添加細節,在實踐的過程中不斷完善,一有新的兩點就可以加進來,這樣不僅能完成任務,而且靈活性很大,給開發過程中產生的很多奇思妙想以實現到項目中的機會,大大提高了項目的質量,從某種程度上也大大減少甚至避免了規劃編程的一個很大的缺點——deadline的壓力。積少成多,日積月累、集微致盛的哲理在這里得到現和運用。

  2、需求變化所帶來的影響的差異。

  通常,在開始的時候,客戶并不真正知道自己想要什么,他們只是有個相當模糊的想法說自己想要個什么樣的、能干什么事的軟件,傳統開發方法在開始前需要想法設法地去探尋客戶到底要什么,在這方面它們投入很多,但是結果往往是他們的產品并不是很貼近用戶所需,更甚,這時用戶不可避免地有新的需求補充,這對開發者來說是致命的打擊,不管是在精神上還是在精力上、開發過程上。敏捷開發則不同,它先把一次兩次迭代開發的產品拿給用戶初步體驗,用戶在使用這個產品的過程中越發清晰地體會到了哪些功能是有價值的哪些是可以舍棄的,越發明白他們自己到底想要什么樣的東西。與此同時,開發者也越來越清楚地知道用戶要什么,在下次迭代中應該側重于哪些方面的開發,這樣就達到了 ”雙贏“ !這可以說是對用戶需求會不斷變化這一令人頭疼的現實的充分利用,在這里,!"A late change in requirements is a competitive advantage",用戶需求的變化成為了一個優點,與傳統開發方法害怕用戶需求變化形成了鮮明的對比!!!

  3、產品偏離用戶需求的程度的差異

  

  傳統工程方法design在整個開發時間中所占的比重很大,一旦制定完規劃后便付諸實踐,這個實踐所占的比重一般比 design 少。只要做好design,其開發速度便可以變得很快,因為每一步都規劃好了,只要按部就班就可。但也正因為其按初期的需求分析進行開發,在開發過程中缺少與用戶需求方面的繼續溝通,導致了一個致命缺點——這時,初期需求分析的失之毫厘很可能導致最后產品與用戶的需求差之千里,導致”徒勞一場“;而迭代開發則是 ”In an adaptive process“—— 在最后定稿前的每個迭代過程都充分與客戶交流,一有偏差就改正,這樣就更早地發現了不符合需求的地方并及時解決,把產品與需求的差異扼殺在搖籃中,可以說開發的過程就是不斷解決現實與需求之差異的過程,就是不斷修正的過程,最后自然而然地非常接近用戶真正想要的東西,從這方面來看,敏捷開發甩傳統的開發過程幾條街!

  4、產品的衡量標準的差異

  傳統開發方法由于是按需求分析來做的,因此衡量一個產品是否成功在于是否很好地符合根據需求做出的計劃,是否準時和物符所值(on-time and on-cost);

而敏捷開發則看中經濟效益——對客戶來說產品的價值是否比其投入更多,即是否物超所值。如問文章中所說:”?A good predictive project will go according to plan, a good agile project will build something different and better than the original plan foresaw.“

  

就個人的理解,我想或許我們可以說,迭代過程中體現出來的適應性(adaptive)是敏捷開發方法的精髓,也是它如此備受推崇的核心優勢之所在!

附:敏捷宣言的十二條原則??? ?敏捷宣言遵循的價值觀

  

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276203.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

phpbreak跳出幾層循環_PHP跳出循環之“break”

前面給大家講解了PHP控制循環語句,知道了,當我們的程序塊滿足一定的條件后才會跳出循環,而跳出循環則是使用我們的break或者continue關鍵字。本章,將會先給大家講解“break”跳出循環。在前面的講解PHP循環控制語句“while”循環的…

Vuex 4.0 正式發布!新年,官方生態齊聚一堂。

Vuex 4 官方版本正式發布。Vuex 4 的重點是兼容性。Vuex 4 支持 Vue 3,但是仍然提供了與 Vuex 3 完全相同的 API,因此用戶可以在 Vue 3 中直接復用他們現有的 Vuex 代碼。下文會把破壞性的改動列出來,請注意查看。在源碼的 example 文件夾[1]…

原生js實現給指定元素的后面追加內容

參考鏈接:http://www.jb51.net/article/35412.htm 原生js實現給指定元素的后面追加內容 var header1 document.getElementById("header"); var p document.createElement("p"); // 創建一個元素節點 insertAfter(p,header1); // 因為js沒有…

文檔中根元素后面的標記格式必須正確。

文檔中根元素后面的標記格式必須正確。 php或其它語言動態輸出的xml&#xff0c;最開始<標記 前面有空格&#xff0c;最后面>標記 后面有 空格 導致xml解析出錯 解決辦法: var data:String evt.target.data;//兼容FireFox, php輸出的xml data data.substr(data…

lstm數學推導_如何在訓練LSTM的同時訓練詞向量?

你本來也不用自己手動進行詞向量更新啊&#xff0c;你搞這么一出最后收斂到0那不是必然的么&#xff1f; 霍華德 老師的答案已經給你推導出來了。實際上你問的這個問題很簡單——只要把Embedding層本身也當成模型參數的一部分就可以了&#xff0c;一開始不使用外部詞向量&#…

Javascript在頁面加載時的執行順序(轉載)

原文&#xff1a;http://dancewithnet.com/2007/03/22/order-of-execution-of-javascript-on-web/ 一、在HTML中嵌入Javasript的方法 直接在Javascript代碼放在標記對<script>和</script>之間由<script />標記的src屬性制定外部的js文件放在事件處理程序中&a…

TClientDataSet[27]: 字段值的約束(或叫輸入限制)

Required、Precision、MaxValue、MinValue:begin{ Required: 必填字段 }with TIntegerField.Create(Self) do beginFieldName : ID;Required : True;DataSet : ClientDataSet1;end;{ Precision: 浮點數精度}with TFloatField.Create(Self) do beginFieldName : Float;Precision…

年度總結文章的抽獎結果公布

大家好&#xff0c;我是若川。2月4日&#xff0c;發表了我的2020年度總結文章《若川的2020年度總結&#xff0c;水波不興》&#xff0c;本以為閱讀量應該突破一千會比較快&#xff0c;實際上比較艱難&#xff0c;而且還掉粉10來人。2020年運營公眾號以來&#xff0c;不知不覺發…

php 正則表達式 匹配中日韓字符(GBK)

轉載鏈接&#xff1a;http://www.cnblogs.com/ITEagle/archive/2013/01/14/2859775.html 首先是這些非英文字符的編碼范圍&#xff1a; 這里是幾個主要非英文語系字符范圍 2E80&#xff5e;33FFh&#xff1a;中日韓符號區。收容康熙字典部首、中日韓輔助部首、注音符號、日本假…

linux多線程求和_linux 多線程信號處理總結

linux 多線程信號總結(一)1. 在多線程環境下&#xff0c;產生的信號是傳遞給整個進程的&#xff0c;一般而言&#xff0c;所有線程都有機會收到這個信號&#xff0c;進程在收到信號的的線程上下文執行信號處理函數&#xff0c;具體是哪個線程執行的難以獲知。也就是說&#xff…

Elon Musk

人物事件 成長學習 1971年6月28日&#xff0c;埃隆馬斯克在南非的比勒陀利亞出生&#xff0c;他的 埃隆馬斯克 父親是一名南非機電工程師&#xff0c;母親是加拿大人&#xff0c;從事營養師兼模特。[8] 1981年&#xff0c;10歲的馬斯克就擁有了自己的第一臺電腦&#xff0c;并…

真誠推薦這7個大佬的公眾號,碎片化學習

逆水行舟&#xff0c;不進則退。我們的工作已經占用了大塊的時間了&#xff0c;剩下的只有各種碎片&#xff0c;最適合碎片時間學習的&#xff0c;莫過于優質的技術干貨公眾號啦~以下這些是小編精選&#xff0c;里面有很多資訊和資源&#xff0c;內含干貨&#xff0c;希望能給大…

[轉]Windows 7 產品密鑰是否安全

提到Windows 7&#xff08;或Windows Server 2008&#xff09;有些人認為自己的產品密鑰&#xff08;Product Key&#xff09;很安全&#xff0c;甚至在公司內部有些網管也認為公司部署的Windows 7 系統的密鑰不會泄露。但其實并非如此&#xff0c;眾所周知我們的密鑰都是寫在注…

HttpWatch的Result中出現Aborted的原因分析[配圖]

轉載鏈接&#xff1a;http://www.cnblogs.com/yutiansanshou/archive/2013/02/01/2889486.html 我們在使用HttpWatch進行Web調試的過程中有時候會看到非HTTP Status Code&#xff08;狀態碼&#xff09;的值&#xff0c; 例如&#xff1a;(Aborted)。 (Aborted)是HttpWatch中定…

android顯示布局邊界的邊距_Android設計規范 Material Design-Layout(2 度量與邊框)

度量與邊框基準網絡所有組件都與間隔為8dp的基準網格對齊。排版/文字(Type)與間隔為4dp的基準網格對齊。在工具條中的圖標同樣與間隔為4dp的基準網格對齊。這些規則適用于移動設備、平板設備以及桌面應用程序。有關詳細信息請參見組件一節。有關詳細信息請參見字體排版一節。邊…

《大規模分布式系統架構與設計實戰》

《大規模分布式系統架構與設計實戰》 基本信息 作者&#xff1a; 彭淵 叢書名&#xff1a; 大數據技術叢書 出版社&#xff1a;機械工業出版社 ISBN&#xff1a;9787111455035 上架時間&#xff1a;2014-2-21 出版日期&#xff1a;2014 年2月 開本&#xff1a;16開 頁碼&…

WINDOWS下的squid

今天寫這篇教程目的在于分享自己在WINDOWS主機下配置squid的方法。哪些地方寫的不完善或是不完整或是需要修改的地方&#xff0c;大家可以提出。我會第一時間糾正。下面看正文部分。先提條件&#xff0c;您預安裝配置squid的這臺計算機必須是聯入網絡的&#xff0c;系統版本是w…

Provide/inject 真的可以取代 Vuex 嗎?

Hello&#xff0c;各位小伙伴&#xff0c;接下來的一段時間里&#xff0c;我會把我的課程《Vue.js 3.0 核心源碼解析》中問題的答案陸續在我的公眾號發布&#xff0c;由于課程的問題大多數都是開放性的問題&#xff0c;所以我的答案也不一定是標準的&#xff0c;僅供你參考喔。…

php 計算代碼執行時間

轉載鏈接&#xff1a;http://blog.csdn.net/php_boy/article/details/6450678 class runtime {var $StartTime 0;var $StopTime 0;function get_microtime(){list($usec, $sec) explode( , microtime());return ((float)$usec (float)$sec);}function start(){$this->S…

參數方程求二階偏導_偏微分方程

常微分方程&#xff08;ODE&#xff09; 的時候我們更多是關于時間的導數。偏微分方程&#xff08;partial differential equation) 則不僅僅是與時間相關&#xff0c;加上了與空間位置相關的一些信息。解當 ODE 滿足 利普希茨連續&#xff08;Lipschitz continuity&#xff09…