開發方法:深入理解敏捷開發的常見誤區

2021-01-11 至頂網

敏捷不是一個過程,是一類過程的統稱,它們有一個共性,就是符合敏捷價值觀,遵循敏捷的原則。

1. 敏捷是「一個」過程
  
敏捷不是一個過程,是一類過程的統稱,它們有一個共性,就是符合敏捷價值觀,遵循敏捷的原則。


敏捷的價值觀如下:
  
個體和交互 勝過 過程和工具
  
可以工作的軟體 勝過 面面俱到的文檔

客戶合作 勝過 合同談判
  
響應變化 勝過 遵循計劃
  
由價值觀引出的12條敏捷原則:
  
我們最優先要做的是通過儘早的、持續的交付有價值的軟體來使客戶滿意。
  
即使到了開發的後期,也歡迎改變需求。敏捷過程利用變化來為客戶創造競爭優勢。
  
經常性地交付可以工作的軟體,交付的間隔可以從幾個星期到幾個月,交付的時間間隔越短越好。
  
在整個項目開發期間,業務人員和開發人員必須天天都在一起工作。
  
圍繞被激勵起來的個體來構建項目。給他們提供所需的環境和支持,並且信任他們能夠完成工作。
  
在團隊內部,最具有效果並且富有效率的傳遞信息的方法,就是面對面的交談。
  
工作的軟體是首要的進度度量標準。
  
敏捷過程提倡可持續的開發速度。責任人、開發者和用戶應該能夠保持一個長期的、恆定的開發速度。
  
不斷地關注優秀的技能和好的設計會增強敏捷能力。
  
簡單??使未完成的工作最大化的藝術??是根本的。
  
最好的構架、需求和設計出自於自組織的團隊。
  
每隔一定時間,團隊會在如何才能更有效地工作方面進行反省,然後相應地對自己的行為進行調整。
  
建立敏捷聯盟的17位大師所創立的敏捷方法包括:極限編程,Scrum,特徵驅動開發,動態系統開發方法,自適應軟體開發,水晶方法,實用編程方法。這些方法統稱為敏捷方法。
  
其實每個人都可以從敏捷宣言和原則出發,明確問題,找出一些解決方法,形成自己的過程。我覺得國內的軟體環境這麼複雜,程式設計師的自主精神又這麼強,敏捷方法應該是在中國首先提出才對,只是國人都有唯標準唯規範至上的心理定式,即使找出好辦法,也覺得不規範,沒有深入形成理論,無法提升高度,始終是跟著鬼子屁股後面走,我想這也是國外軟體行業不成熟的表現之一吧。
  
   
  
2. 敏捷僅僅是一個軟體過程
  
如果僅僅從軟體過程的角度去認識敏捷實施敏捷,效果不會太好。敏捷相對以前的軟體工程最大的革新之處在於把人的作用提高到了過程至上,正如敏捷宣言的第一條「個體和交互勝過過程和工具」所說的。
  
涉及到人的問題,就已經不再是過程所能覆蓋的了,就到了企業管理的層面上了,包括企業的價值觀和文化。這也是敏捷在國內實施的最大障礙:
  
把客戶當作合作夥伴而不是對手,從客戶角度出發去想問題,充分的跟客戶溝通,而不是出了問題推諉責任。目標是讓軟體實現客戶的價值,而不是收錢就完事兒。
  
把人的能動性調動起來,給動力而不是給壓力。
  
要實用而不是要規範。讓開發人員理解並實施,體驗到敏捷的好處,而不是盲目機械地實施規範。
  
沒有絕對的權威,每個人都有可取之處。
  
   
  
3. 迭代就是敏捷,UP屬于敏捷。
  
看到這麼多人都把UP歸入敏捷,我都開始懷疑是不是自己搞錯了。但是在我的印象中:
  
UP是重型的過程,雖然引入了迭代,但是其原則和價值觀與敏捷是不同的。敏捷注重的是反饋,迭代周期儘量的短,重在客戶的參與,通過客戶的參與,獲取持續的反饋,不斷調整使整個項目走在正確的方向上。同時也給客戶一個感受和思考的機會,因為對於大多數客戶而言,目標是明確的(不排除有些客戶目標也不明確),但是具體怎麼做,開始時是沒有想法的,只有看到具體的東西的時候,才知道「噢,原來可以這樣,那我想把這裡調整一下」。
  
   
  
4. 敏捷是徹底革命的。
  
敏捷,特別是XP,讓人有耳目一新的感覺,覺得以前的所有軟體工程理論,設計方法都可以拋棄掉了,推翻一切,從頭再來。抱著這種想法實施敏捷,那就錯了,敏捷不是「石頭裡蹦出個孫大聖」,以前的軟體過程中也有敏捷的影子,只是沒有像敏捷一樣上升到價值觀和原則的高度,比如快速原型法。敏捷是在對已有的軟體過程方法的改進,拋棄的是傳統軟體工程低效的外表,以往的軟體過程中很多技巧都是很實用的。實施敏捷應該以現有的軟體過程為基礎,從敏捷宣言和原則出發,利用敏捷的方法來改善過程。
  
   
  
5. 敏捷是反文檔的。
  
文檔只是為了達成目標的一種手段,如果這種手段是低效的,那就換一種手段。可是完全拋棄了文檔,怎樣解決溝通的問題?難道你想每次溝通都完全用手比劃,用嘴說,跟不同的人重複表述同樣的想法,那樣更是低效的。
  
應該清楚文檔的本質是把知識顯性化。在一個項目中存在很多需要溝通的知識,知識具備兩種形態,顯性的和隱性的,傳統的觀念是儘量把隱性知識顯性化,即文檔化,而忽略了這其中的代價(特別是更新同步文檔的代價)。
  
因此,在實施敏捷的時候,需要在團隊內明確哪些知識是必須顯性的,這些知識可以通過文檔交流。哪些知識是可以隱性的,這些知識則完全可以通過口頭的方式進行交流,以達到溝通的最佳效率。
  
文檔不是目的,有效溝通才是目的。
  
   
  
6. 為了敏捷而敏捷
  
「嗯,敏捷這麼好,我們也敏捷吧」,可能很多人會有這種想法。忘了以前是在哪兒看的大師採訪錄:
  
Q:「我們現有的過程很好,不知道怎麼用敏捷改進?」
  
A:「既然很好,那就不要用敏捷」。
  
做什麼事情都要有明確目標的,敏捷雖好,得看你需不需要,能不能解決你現在頭疼的問題,如果不是,那就不要給自己找麻煩了。
  
   
  
7. 敏捷是CMM的反義詞
  
在桂林會議的討論中,很多人把CMM作為敏捷的反義詞,我覺得這不是很合適。CMM只是一種衡量軟體成熟度的標準,並非過程,和敏捷不是一類概念。如果要給敏捷找一個反義詞,我覺得傳統的瀑布式開發應該更合適一些。
  
並且,我認為,如果CMM還能繼續流行下去的話,應該會有公司可以用敏捷改善的過程通過CMM認證。
  
   
  
8. 敏捷是自由的,無約束的。
  
敏捷強調的是自組織團隊,發揮人的能動性,以動力代替壓力,讓人有絕對自由的錯覺。但是應該清楚,凡是都是要講究一個平衡,人也是兩面的,消極的一面和積極的一面同時並存,絕對的自由會放縱人消極的一面。敏捷並非是絕對自由,無約束的。作為管理者,有一個職責,就是引導團隊成員用自己積極的一面去壓制消極的一面,不能放任團隊中出現搭便車的現象,否則將打擊整個團隊的士氣。如果實在無效,那就只能將其排除出團隊了,這個懲罰夠有約束力吧?  
   
  
9. 重做就是重構
  
重做不等於重構,很多場合這兩個概念是混淆的。但是在敏捷中,重構的一個特徵是必須可控的。當對系統結構進行大的調整時,如果沒有測試驅動輔助的話,那麼可控性就會很差,這不能叫做重構。

相關焦點

  • 什麼是敏捷開發?一分鐘讓你了解敏捷開發的精髓!
    」一詞,想必大家都不陌生,不過對有些人來說,可能也就是書上見過或者聽說過,事實上,「敏捷開發」並不是一門技術或者工具,而只是一個軟體開發方法,也可以說是思想。那麼,究竟什麼是敏捷開發?敏捷開發是一套軟體開發的價值和原則,倡導演進式開發,提早交付,持續改進,鼓勵對變化做出快速靈活的反應。很多人可能會有這樣一個誤區,即敏捷開發就是快速,越快越好,加班加點寫代碼、趕進度等,而實際卻並非如此,對于敏捷,我們可看作是輕量級、高效。
  • 什麼是敏捷開發
    迭代和增量式軟體開發方法可以追溯到1957年。進化式項目管理和適應性軟體開發出現在1970年代初期。在1990年代,因針對重量級的軟體開發方法的批評,而發展了許多輕量化的軟體開發方法、項目與細微化開發管理。
  • 什麼是敏捷開發?
    敏捷的目標一敏捷開發有第一個目標就是更快的交付價值,這裡的快指的不是絕對速度,而是更早的交付。在項目結束的時候,一定是對產品和項目的知識理解最充分的時候。這也是敏捷的第二個業務目標,有效學習和靈活響應變化。敏捷開發工具敏捷開發是一種以人為核心,以迭代方式循序漸進開發的方法,其軟體開發的過程稱為「敏捷過程」。在這一過程中,軟體項目的構建被切分成多個子項目,各個子項目的成功都經過測試,具備集成和可運行的特徵。
  • 敏捷開發超強指南
    編輯導語:敏捷開發以用戶的需求進化為核心,採用迭代、循序漸進的方法進行軟體開發,也是如今很流行的軟體開發方法,但是你真的知道什麼是敏捷開發嗎?本文作者分享了關于敏捷開發的流程以及團隊內部的敏捷分享,我們一起來看一下。
  • 如何實現敏捷軟體開發?
    一、什麼是敏捷軟體開發呢?敏捷開發是以用戶的需求進化為核心,採用迭代、循序漸進的方法進行軟體開發。在敏捷開發中,軟體項目在構建初期被切分成多個子項目,各個子項目的成果都經過測試,具備可視、可集成和可運行的特徵。換言之,就是把一個大項目分為多個相互聯繫、而又可以獨立運行的小項目,並分別完成,從而實現快速開發的目的。二、敏捷開發是如何實現的?
  • 作為產品經理,如何主導團隊敏捷開發?
    對於產品研發團隊,敏捷方法也許給這三個問題找到了答案。簡單介紹敏捷開發你可能已經閱讀了一些關于敏捷的資料,接觸到例如「宣言」、「價值觀」這些大詞兒,還會看到「迭代」、「看板」、「User Story」 這些方法論。但是沒有經歷過實操,覺得迷迷糊糊的。
  • 應用敏捷開發的 5 個好理由
    各個有新想法的工業專家聲稱新的方法將會回答普遍的問題。這同樣應用於Agile;工業資深人士說Agile是運行「快且高效」項目的最好方法。但問題是:我們兼顧質量與速度了嗎?所謂的Agile Mantra是真的存在還是僅僅是一種誇大的說法?誰真正的從整個Agile工作方式中收益?
  • Scrum:兼顧計劃與靈活的敏捷開發
    不同於瀑布模型將開發過程劃分為需求、設計、編碼、測試等階段,Scrum將整個開發過程分為多次迭代(稱為Sprint,衝刺)。在日常工作時,產品負責人會維護一個按優先級排序的「產品待開發項」(Product Backlog),即從客戶價值理解和描述的產品功能條目,通常產品經理承擔這一角色。
  • 軟體開發:敏捷開發模式,無論是產品還是運營都要懂
    本文筆者將從軟體工程的角度來聊一聊敏捷開發模式,會涉及瀑布,V字、RUP、迭代、螺旋等開發模型,同時重點分享下敏捷模式的核心思想。文章分兩部分:通過舉例和對標其他行業,聊聊軟體開發模型的發展演進。聊聊敏捷的核心思想。
  • 敏捷開發,是心頭的硃砂痣還是牆上的蚊子血?
    敏捷開發不是開發方法敏捷開發誕生的標誌,是2001年2月,由Martin Fowler,Jim Highsmith等17位軟體開發專家起草的敏捷宣言發表,敏捷聯盟成立。從這個配圖,這個形式,你想到了什麼?
  • 落地敏捷開發的12個建議,打造自定義開發管理模式!
    敏捷開發提到的相關原則,敏捷開發模式應用到實際開發過程中,實施起來或多或少與理論存在差異。所謂理論結合實際,作為開發人員或者開發組織來說,不可完全照搬。敏捷開發實施背景敏捷開發模式,總體來說適合迭代演進的產品項目。
  • 七個垂手可得的敏捷開發工具
    1.Jira/Jira AgileJIRA是Atlassian公司出品的項目與事務跟蹤工具,被廣泛應用於缺陷跟蹤、客戶服務、需求收集、流程審批、任務跟蹤、項目跟蹤和敏捷管理等工作領域。Rally Platform for Agile Lifecycle Management這是一種基於雲技術的敏捷生命周期管理平臺,在無數個團隊裡擴展使用,帶有自定義頁面、還能夠自定義顯示面板的功能,以達到自動化控制各種開發流程。
  • JIRA與敏捷:李小龍教給我們的敏捷開發之道
    ChrisMountford:李小龍教給我的敏捷開發之道敏捷開發目前在國內已經從前幾年的「奢侈品」變成了隨處可見的「日用品」,很多企業和開發團隊都在談論和實施敏捷,但不可否認,「偽敏捷」依然廣泛存在,這源於相當多的一部分開發團隊還不清楚敏捷為何物、其本質是什麼、為什麼要實施敏捷開發等
  • 成功實踐敏捷開發的26條「軍規」
    【IT168 專稿】    如何才能成功實踐敏捷開發是一個課題。最近Keith Swenson一直在考慮這個問題,並最終總結出26條重要原則,以指導敏捷軟體開發團隊更好地工作。    原則1:第1個用例完全處理好後再開始處理第2個用例。打個比方說,好比「先上這道菜,再開始做下一道菜」。
  • 軟體開發項目管理經驗之敏捷(Scrum/Agile)
    研發團隊拿到經過技術評估後產品需求,需要根據開發工作的特點進行細化,拆分,分配到開發人員手中;而開發人員也需要進行一些基本的軟體設計:給出接口文檔,架構文檔等;也需要與測試團隊溝通好測試的各種case,避免後續測試存在理解上的偏差。最後才是coding,release,測試。說了這麼多讀者是不是覺得有點跑題了?非也!
  • 初學者應該了解的敏捷開發術語
    ,那麼你就需要把這些重複的部分重構到一個方法裡。  解毒劑:技術領先和一些重要的架構師與分析師和顧客洽談的項目開發人員,大家會話思考;  症狀:瀑布開發方法和投資銀行it文化要求方面;  解毒劑:未知,許多人企圖把」agile「用一個大A和小A到企事業廠家多多少少取得了一些成功,但同樣也面臨著一些失敗。
  • 漫畫:三分鐘了解敏捷開發
    什麼是敏捷開發?敏捷開發(Agile)是一種以人為核心、迭代、循序漸進的開發方法。在敏捷開發中,軟體項目的構建被切分成多個子項目,各個子項目的成果都經過測試,具備集成和可運行的特徵。簡單地來說,敏捷開發並不追求前期完美的設計、完美編碼,而是力求在很短的周期內開發出產品的核心功能,儘早發布出可用的版本。然後在後續的生產周期內,按照新需求不斷迭代升級,完善產品。這一切正如某人的名言:
  • 實現敏捷框架的比較:Scrum 方法 vs 看板方法 vs 精益開發 vs 極限編程
    如果您是剛剛踏進敏捷開發的世界中,可能剛開始會被這個方法那個方法搞暈掉。那是因為敏捷開發只是一些簡明扼要的概要準則,沒有明確說明需要如何一二三步驟地來落地實現。因此,人們從實踐中總結真知,就衍生出了實現敏捷的各種各樣的方法。其中,最廣為人知的當屬 Scrum 方法、看板方法、精益開發以及極限編程。
  • 敏捷開發三次迭代(Iteration Three)
    三次迭代(Iteration Three)是敏捷項目開發管理周期中的一個階段,到達這個階段時,項目已經成功的在某些問題上調整過2
  • 應用軟體的「敏捷開發」模式:從小米MIUI談起
    小米CEO雷軍曾表示,MIUI採用了敏捷開發(agile develolment)的模式,因此可以在短時間內完成開發,實現軟體快速迭代。用戶對MIUI這一ROM的質量或許見仁見智,不過,什麼是「敏捷開發」?作為一種相對新穎的產品開發模式,敏捷開發這一概念提出於2001年2月。