本篇文章是有關(guān)敏捷軟件開發(fā)方法學(xué)及應(yīng)用的基礎(chǔ)知識。敏捷開發(fā)是有關(guān)團隊怎么樣合作去實現(xiàn)一個常規(guī)目標。敏捷開發(fā)并不僅僅適用于軟件開發(fā)者,也適用于團隊領(lǐng)導(dǎo)人,項目經(jīng)理,產(chǎn)品經(jīng)理,開發(fā)經(jīng)理,測試人員,質(zhì)量保證經(jīng)理,質(zhì)量保證工程師,技術(shù)作者,用戶體驗設(shè)計者,以及任何與制做發(fā)布軟件相關(guān)的人員。本文著重于技術(shù)團隊怎么很好的合作去計劃,開發(fā)并發(fā)布軟件。本文不著重于編碼,技術(shù)細節(jié)或微軟工具。希望本文能改善你的專業(yè)生活和團隊效率。
背景下圖是Winston Royce的瀑布式開發(fā)模型:
( "Managing the Development of Large Software Systems",1970 IEE paper)
無論項目有多大有多復(fù)雜,有兩個關(guān)鍵的步驟常用于所有的計算機程序開發(fā):1) 分析 2) 編碼。 接下來,Winston Royce介紹了最重要的五步: 第一步:程序設(shè)計分配任務(wù)處理流程,功能,數(shù)據(jù)庫處理,明確數(shù)據(jù)庫流程,分配執(zhí)行時間,明確操作系統(tǒng)間的接口與處理流程模塊,描述輸入與輸出流程,并且明確初步的操作流程。撰寫容易理解的,信息量大的,當前時新的概要文檔。
第二步:撰寫設(shè)計文檔管理軟件開發(fā)的第一條規(guī)則就是無條件服從的執(zhí)行文檔需求。
第三步:重復(fù)兩次第二個非常重要的成功標準以產(chǎn)品是否完全原始為重中之重。如果把還有疑問的計算機程序開發(fā)為第一版,考慮到嚴格的設(shè)計/操作領(lǐng)域,那么給客戶正式部署的版本實際上是第二版本。
第四步:計劃,控制,監(jiān)控測試在成本和計劃方面上,這是最有風(fēng)險的一步。當備選方案幾乎或一點不可用時,它會出現(xiàn)在日程安排的最近時間點上。
第五步:讓客戶參與讓客戶參與到項目中是非常重要的,因為客戶可能在最終發(fā)布之前較早的認可項目工作。
仔細閱讀Royce的文章后發(fā)現(xiàn):
不幸地是,上面列出的步驟當中,設(shè)計迭代從來沒被限制成連續(xù)的步驟。
下面這些東西都是什么?
答案是:
敏捷開發(fā)并不意味著只是一種方法。上面雨傘下的術(shù)語代表著不同的敏捷開發(fā)方法。
敏捷軟件開發(fā)宣言我們一直在實踐中探尋更好的軟件開發(fā)方法,身體力行的同時也幫助他人。由此我們建立了如下價值觀:
也就是說,上面右側(cè)(藍色字體)內(nèi)容有其價值,但我們更重視左側(cè)(紅色字體)產(chǎn)生的價值。 敏捷宣言的十二條原則我們遵循以下原則:
很多開發(fā)者都經(jīng)過這樣的噩夢:沒有任何實踐可以輔佐的項目。由于缺乏有效的實踐,項目變得不可預(yù)測,重復(fù)出現(xiàn)錯誤,還有白白浪費的辛苦。計劃延期,超出預(yù)算,質(zhì)量低下使客戶感到失望。開發(fā)者也由于更長時間的工作而換來更糟糕的軟件而心灰意冷。
DSDMDSDM(Dynamic Software Development Method),動態(tài)軟件開發(fā)方法,通過提供一個負責(zé)整體開發(fā)周期的框架來彌補RAD(Rapid Application Development)快速程序開發(fā)的不足。下面是DSDM的主要功能:
FDDFDD(Feature Driven Development),功能驅(qū)動開發(fā),是一種包裝方法學(xué)。它允許你在非常高的級別上應(yīng)用一個方法來管理項目,但它也允許你在較低的級別上應(yīng)用其它方法學(xué)。FDD的著重點是能夠把估算,日程計劃,項目狀態(tài)匯報作為一個整體或放到顆粒級別上,但是FDD不會規(guī)定一個非常細節(jié)化的方法讓你應(yīng)用去創(chuàng)建日程計劃,相反FDD讓你去覺決定該用什么方法。FDD的觀點是你可以查看一下你的項目,陳術(shù)一下項目的確切狀態(tài),如項目進度是否及時,延時或過早等等。
LeanLean思想是一種進行系統(tǒng)優(yōu)化的途徑,它關(guān)注于減少浪費,提高整個系統(tǒng)總體流程。Lean在制造業(yè)上有著豐富的歷史,近幾年在在軟件開發(fā)行業(yè)也越來越流行。Lean來源于制造業(yè)中的Lean(Lean Manufacturing: http://www./pages/article/newSTR_44.htm),它是一組為滿足質(zhì)量,速度和客戶需求而定制的原則。
七大Lean軟件開發(fā)原則:
軟件產(chǎn)品的交付工作應(yīng)用這些原則并不是我們的最終目的。我們并不是說讓我們用Lean吧,而是把Lean原則做為決策的向?qū)Щ騾⒖既ミx擇可以改善整體系統(tǒng)的技術(shù)。比如,TDD測試驅(qū)動開發(fā),通過在每一個功能點上創(chuàng)建功能自我測試從而構(gòu)建軟件的完整性和完善性。
Plan(譯外話:指瀑布式開發(fā)Waterfall Development)在計劃驅(qū)動開發(fā)中,如果一個項目確切的按照計劃執(zhí)行,那么它就是成功的。因此,在軟件開發(fā)中計劃驅(qū)動開發(fā)依賴于需求的穩(wěn)定性,明確性和固定性。你或許知道這些奢侈的性質(zhì)是在大多數(shù)軟件項目中不存在的。
計劃驅(qū)動方法學(xué),在初期的設(shè)計階段的需求變更中成本花費較低,但是一旦到了開發(fā)階段需求變更將會花費昂貴的代價。所以,很多的工作被要求在初期計劃設(shè)計階段完成。然而,軟件開發(fā)不同于普通的項目,我們不能保證將來的開發(fā)階段會完全按照初期的設(shè)計進行,無論你的設(shè)計有多么出色。
"Walking on water and developing software from a specification are easy if both are frozen."- Edward V. Berard
在水上行走和開發(fā)軟件都只有當它們被凍結(jié)時才會變得容易。
敏捷開發(fā)打破了對需求穩(wěn)定性的依賴,它有一個專門的流程用于負責(zé)需求變化,主要體現(xiàn)在它的自適應(yīng)計劃和進化式設(shè)計。
自適應(yīng)計劃,意思是多次的仔細檢查整體項目流程,經(jīng)常會再次制定計劃并再次適應(yīng)。
進化式設(shè)計,有一些實踐對它很有幫助,如自我測試代碼,持續(xù)集成,重構(gòu),簡易設(shè)計等。
敏捷開發(fā)是價值驅(qū)動,傳統(tǒng)的瀑布式開發(fā)是計劃驅(qū)動。這并不是說計劃驅(qū)動就沒有價值,在特定的實際情況下它們都有各自的有優(yōu)缺點。關(guān)鍵是怎么平衡使用兩種方法,在特定情況下采取它們的長處而回避它們的短處。
Plan VS Agile計劃驅(qū)動開發(fā)模式和敏捷驅(qū)動開發(fā)模式在基本原理差異上有兩大不同。
第一大不同:計劃驅(qū)動模型中只能在項目完成時才能部署一個新模塊,而且是較大的模塊。敏捷驅(qū)動模型中可以頻繁的部署新模塊,甚至較小的模塊。
第二大不同:計劃驅(qū)動是序列化的,敏捷驅(qū)動是并發(fā)的。在計劃驅(qū)動模型中,一個流程的開始必須在前一個流程完全成功結(jié)束的前提下進行。在敏捷驅(qū)動模型中,任何時候都可能在做計劃,流程是并發(fā)的或互相穿插的。
“Plan your work, then work your Plan” by Martin Fowler and Neal Ford
先計劃你的工作,后工作你的計劃。
敏捷開發(fā)和計劃驅(qū)動開發(fā)(瀑布式開發(fā)):
適應(yīng)變化能力(Y軸) 時間(X軸)
可見性(Y軸) 時間(X軸)
在敏捷開發(fā)中:
客戶滿意度是以迅速,持續(xù)的交付可用軟件為導(dǎo)向。
強調(diào)人和互動要高于強調(diào)流程和工具。 客戶,開發(fā)者,還有測試人員一直保持互動。
可用軟件頻繁的被交付使用(按周交付高于按月交付) 面對面交流是最好的溝通形式。
業(yè)務(wù)人員和開發(fā)者保持近距離的,日常的協(xié)作。 持續(xù)關(guān)注出色的技術(shù)和設(shè)計。 適應(yīng)易變情況。 需求中較晚的改動也受歡迎。 善于使用計劃驅(qū)動模型的管理團隊同樣也能夠善于使用敏捷開發(fā)方法。 缺乏能力使用計劃驅(qū)動模型的管理團隊也沒有能力使用敏捷開發(fā)方法。 敏捷開發(fā)Agile敏捷軟件開發(fā)的原理和價值用于幫助團隊打破流程循環(huán)膨脹,著重于用簡單的技術(shù)去實現(xiàn)目標。目標?什么是目標? 每一個軟件開發(fā)者,開發(fā)團隊的主要目標是為老板和客戶制造盡可能高的價值。 敏捷開發(fā)的核心是把傳統(tǒng)的軟件開發(fā)方法(瀑布式開發(fā))的五個步驟壓縮成一個一周的開發(fā)周期。用敏捷開發(fā)方法去開發(fā)一個系統(tǒng)時,項目中會不斷貫穿著重復(fù)的周期開發(fā)和較小模塊的開發(fā),并在開發(fā)過程中允許開發(fā)者測試和檢查。高速度,低成本,靈活性是敏捷開發(fā)的主要優(yōu)勢。
![]() 敏捷開發(fā)發(fā)展極為迅速,從2001年的只有1%的開發(fā)者使用敏捷開發(fā)到現(xiàn)在的60-80%的開發(fā)者在使用敏捷開發(fā)。更大的吸引力是因為敏捷開發(fā)提供:
敏捷開發(fā)使用者從來不會害怕變化。他們把需求變化看作是好事,因為這些變化意味著團隊又收獲了更多關(guān)于怎樣滿足客戶的經(jīng)驗。敏捷開發(fā)團隊成員一起協(xié)作項目的方方面面。每一個成員都允許為項目整體提出意見或做貢獻。沒有一個團隊成員是單一的負責(zé)架構(gòu)或者需求或者測試。團隊分享這些責(zé)任,同時每個成員都會對它們產(chǎn)生影響。 我們有很多的敏捷開發(fā)流程:Scrum,crystal,BDD(Behavior-Driven Development行為驅(qū)動開發(fā)),TDD(Test-Driven Development測試驅(qū)動開發(fā)),F(xiàn)DD(Feature-Driven Development功能驅(qū)動開發(fā)),ADP(Adaptive Software Development自適應(yīng)軟件開發(fā)),XP(Extreme Programming極限編程),等等等等。然而,大量成功的敏捷開發(fā)團隊從所有這些方法中吸取經(jīng)驗與知識,進而調(diào)整生成他們自己特有的敏捷開發(fā)方式。這些改編后的方法通常與SCRUM還有XP組合在一起,SCRUM實踐用來管理使用極限編程XP的團隊。 極限編程XPAs developers we need to remember that XP is not the only game in town.- Pete McBreen
作為開發(fā)者,我們需要記住極限編程并不是城里唯一的游戲。 極限編程強調(diào)團隊合作(經(jīng)理,客戶,開發(fā)者)。它從五個關(guān)鍵點改善軟件項目:溝通,簡明,反饋,尊重,還有勇氣 維基百科對極限編程的定義:極限編程XP是一種軟件開發(fā)方法,它的意圖是提搞軟件質(zhì)量及對用戶需求變化的響應(yīng)能力。作為一種敏捷軟件開發(fā)方法,它提倡在短開發(fā)周期中頻繁地發(fā)布,從而提高軟件生產(chǎn)力并提出新客戶需求能夠被采納的檢查點。 極限編程是一系列嵌入到敏捷開發(fā)中的簡易并堅實的實踐。極限編程是一個非常好的通用軟件開發(fā)方法。許多項目團隊都采用它,同時更多的團隊通過添加或修改實踐來把它變得更適用。
“迫使它們走向極端”是什么意思呢?是不是如下圖一樣?
![]() 或者下圖
![]() 不,這不是極限編程。讓我們看看它的真正意思:
![]()
極限編程是一系列遵循敏捷開發(fā)原則和價值的實踐。極限編程是離散的方法,而敏捷開發(fā)是一類方法。有很多的敏捷開發(fā)方法,極限編程只是其中一種。
極限編程在敏捷開發(fā)方法中是范圍寬闊,出類拔萃的。Scrum有些類似極限編程,擁有極限編程的大多數(shù)特征。但是在細節(jié)是它們有很多的不同,公平的說Scrum是是極限編程的子集。甚至,許多Scrum團隊爭論著要把極限編程實踐加入Scrum流程中,如滿意度測試,結(jié)對編程,持續(xù)集成,以及測試驅(qū)動開發(fā)。
在所有敏捷開發(fā)方法當中,極限編程是唯一的一種方法為開發(fā)者的日常工作提供深度的,意義深遠的開發(fā)準則。在這些準則中,測試驅(qū)動開發(fā)是最革命性的。下圖中都是一些出色的極限編程實踐。 ![]() ScrumScrum是和種迭代式及遞增式的敏捷軟件開發(fā)框架,它用于管理軟件項目,產(chǎn)品,或程序的開發(fā)。它的著重點是一個靈活的,全面的產(chǎn)品開發(fā)策略,它把一個開發(fā)團隊通常作為一個單位進而實現(xiàn)一個常規(guī)目的。相反,它不著重于傳遞的序列化式的方法。Scrum會問傳統(tǒng)瀑布式開發(fā)“為什么我們要花費這么長時間,這么多努力去做一件事?為什么我們不能衡量出做一件事所需時間和人力?” Scrum擁抱變化和創(chuàng)造力,因為這是人們的工作方式。Scrum有一個流程學(xué)習(xí)結(jié)構(gòu),能夠讓團隊評估他們做了什么以及他們怎樣做的。
![]() Scrum角色三個核心角色:
產(chǎn)品持有人 Product Owner![]()
開發(fā)團隊 Development Team![]()
|
|
來自: 昵稱10504424 > 《工作》