公司目前在開發(fā)上遇到了發(fā)展的瓶頸,大多數(shù)人都在考慮是否換一種開發(fā)平臺(tái),我認(rèn)為原因不在于開發(fā)平臺(tái)的好壞,關(guān)鍵還是在于開發(fā)管理的不規(guī)范性上,我覺得要解決一個(gè)公司的發(fā)展關(guān)鍵要一套好的管理規(guī)范,而一個(gè)好的開發(fā)流程能在很大程度上規(guī)范開發(fā)。最近在微軟開發(fā)大會(huì)上聽了朱敏講的Scrum敏捷開發(fā),非常感興趣,所以找來(lái)一往篇微軟的人員寫的敏捷開發(fā)的文章(并不是贊成作者的所有觀點(diǎn),只是拿來(lái)做個(gè)參考)。
作者:林耀珍
2003 年 11 月
速度是企業(yè)競(jìng)爭(zhēng)致勝的關(guān)鍵因素,軟件項(xiàng)目的最大挑戰(zhàn)在于一方面要應(yīng)付變動(dòng)中的需求,一方面要在緊縮的時(shí)程內(nèi)完成項(xiàng)目,所以軟件團(tuán)隊(duì)除了在技術(shù)上必須日益精進(jìn),更需要運(yùn)用有效的開發(fā)流程,以確保團(tuán)隊(duì)能夠發(fā)揮綜效。這正是 Agile Process (敏捷的軟件開發(fā)流程) 于近年來(lái)興起的主要原因,本文將介紹數(shù)種廣為接受的軟件開發(fā)流程,及其在運(yùn)用上的建議。
Agile Process - 敏捷的開發(fā)流程
幾乎所有的軟件項(xiàng)目都會(huì)在起始階段面臨選擇開發(fā)流程的困難,一種是完備的開發(fā)流程,另一種是簡(jiǎn)易輕便的流程。雖然我們了解采用完備的開發(fā)流程可以提高軟件的質(zhì)量,但是因?yàn)榍啡比肆Α⒐ぞ吲c時(shí)間,我們常會(huì)被迫采用簡(jiǎn)化的流程,但事與愿違,大部分的情況我們?nèi)匀浑y以在預(yù)算內(nèi)及時(shí)完成項(xiàng)目。
Agile Process (敏捷的開發(fā)流程) 是一種軟件開發(fā)流程的泛稱,Agile Process 具有下列幾項(xiàng)共通的特性:
- 客戶與開發(fā)人員形成密切合作的團(tuán)隊(duì),因?yàn)榭蛻魺o(wú)法于初期定義完整的規(guī)格,而開發(fā)人員于開發(fā)過(guò)程中也常常無(wú)法知悉外在環(huán)境或業(yè)務(wù)的變動(dòng),所以需要兩者密切合作方能開發(fā)適用的軟件。
- 項(xiàng)目最終的目標(biāo)是可執(zhí)行的程序,因此所有的中間產(chǎn)品必須經(jīng)過(guò)審慎評(píng)估,確認(rèn)有助于最終目標(biāo),才需要制作中間產(chǎn)品。
- 采用 Iterative 與 Incremental 方式分階段進(jìn)行,密集 review 是否符合需求。
- 流程可以簡(jiǎn)單,但規(guī)劃與執(zhí)行必須嚴(yán)謹(jǐn)。
- 強(qiáng)調(diào)團(tuán)隊(duì)合作,賦予高度的責(zé)任,團(tuán)隊(duì)有自主權(quán)得以因應(yīng)變化做調(diào)整。
RUP 開發(fā)流程 - Rational Unify Process
RUP 為 IBM Rational 公司經(jīng)過(guò)多年的研發(fā)與經(jīng)驗(yàn)所提出的軟件開發(fā)流程,其內(nèi)容含蓋 Business modeling, Requirement Modeling, Logical Design, Implementation, Testing, Deployment 等軟件開發(fā)生命周期的直接工作,與 Project Management, Change & Configuration Management,Environment support 等支持性工作。RUP 的內(nèi)容非常豐富,不同的項(xiàng)目需要不同調(diào)整,IBM Rational 提供 RUP workbench 工具,方便調(diào)整 RUP,并公布于 Web,方便項(xiàng)目成員遵循統(tǒng)一的流程規(guī)范進(jìn)行工作。
RUP 的主要精神為:
1. 項(xiàng)目進(jìn)行采用 Iterative 程序分階段漸進(jìn)地完成項(xiàng)目功能;
2. 廣泛使用 Visual Modeling 于商業(yè)需求分析、系統(tǒng)分析與系統(tǒng)設(shè)計(jì);
3. 強(qiáng)調(diào)架構(gòu)設(shè)計(jì);
4. 對(duì)每項(xiàng)工作所需要的技術(shù)、工具、做法、模板、檢查項(xiàng)目均有詳細(xì)的定義,架構(gòu)完備且具有可調(diào)整的彈性。
因?yàn)?span lang=EN-US> RUP 的流程規(guī)范與相關(guān)技術(shù)較復(fù)雜,所以導(dǎo)入時(shí)必須注意幾個(gè)因素:
1. 主管的支持以確保足夠的資源投入;
2. 分階段導(dǎo)入;3. 適當(dāng)?shù)挠?xùn)練與密切的顧問(wèn)咨詢;
4. 使用 Modeling 技術(shù)時(shí)需要考慮 Coding 的實(shí)作環(huán)境;
5. 良好團(tuán)隊(duì)的管理,以溝通、耐心與堅(jiān)持解決變革的人性阻力。
XP 開發(fā)流程 - eXtreme Programming
XP 亦稱為終極流程,是最輕量級(jí)的開發(fā)流程,其最主要的精神是『在客戶有系統(tǒng)需求時(shí),給予及時(shí)滿意的可執(zhí)行程序』,所以最適合需求快速變動(dòng)的項(xiàng)目。XP 經(jīng)過(guò) 6 年的實(shí)作與修改,已演化為精致的開發(fā)流程,但仍不失其精簡(jiǎn)的特性,它強(qiáng)調(diào)客戶所要的是 workable 的執(zhí)行碼,所以把與撰寫程序無(wú)關(guān)的工作降至最低,并要求客戶與開發(fā)人員最好以 side-by-side 的方式一起工作。
XP 開發(fā)流程的基本步驟為:
1. 開發(fā)人員隨時(shí)可以和客戶進(jìn)行有效溝通,撰寫 user stories 以確認(rèn)需求。
2. 簡(jiǎn)易快速的系統(tǒng)設(shè)計(jì),撰寫?yīng)毩⒌尿?yàn)證程序以解決特殊困難的問(wèn)題,找出算法即可丟棄驗(yàn)證程序。
3. 規(guī)劃多次小型階段的項(xiàng)目計(jì)劃,以最快速度完成每一階段的程序交付客戶,客戶負(fù)責(zé) Acceptance tests;
4. Coding 前必須完成 Unit Test 與 Acceptance tests 程序,所有模塊整合前都須經(jīng)過(guò) Unit Tests;
5. 開發(fā)人員必須快速響應(yīng) Bug 與需求變更;
6. 要求二人一組使用一臺(tái)計(jì)算機(jī)設(shè)計(jì)程序,當(dāng)一人 coding 時(shí),另一人負(fù)責(zé)思考與設(shè)計(jì);
7. 程序必須符合程序規(guī)范,并常做程序的重整 (Refactoring)。
XP 屬于較精簡(jiǎn)的流程,于導(dǎo)入應(yīng)注意幾件事情:
1. 最好有顧問(wèn)給予協(xié)助;
2. 持續(xù)的 Review;
3. 可適當(dāng)調(diào)整流程,但不可失去其基本精神。
SCRUM 開發(fā)流程
SCRUM 開發(fā)流程是 Agile Process 的一種,以英式橄欖球爭(zhēng)球隊(duì)形 (Scrum) 為名,基本假設(shè)是『開發(fā)軟件就像開發(fā)新產(chǎn)品,無(wú)法一開始就能定義 Final Product 的規(guī)程,過(guò)程中需要研發(fā)、創(chuàng)意、嘗試錯(cuò)誤,所以沒(méi)有一種固定的流程可以保證項(xiàng)目成功』。Scrum 將軟件開發(fā)團(tuán)隊(duì)比擬成橄欖球隊(duì),有明確的最高目標(biāo),熟悉開發(fā)流程中所需具備的最佳典范與技術(shù),具有高度自主權(quán),緊密地溝通合作,以高度彈性解決各種挑戰(zhàn),碓保每天、每個(gè)階段都朝向目標(biāo)有明確的推進(jìn),因此 SCRUM 非常適用于產(chǎn)品開發(fā)項(xiàng)目。
SCRUM 開發(fā)流程通常以 30 天為一個(gè)迭代周期,每個(gè)迭代周期叫做一個(gè)Sprint,由客戶提供新產(chǎn)品的需求規(guī)格開始,開發(fā)團(tuán)隊(duì)與客戶于每一個(gè)階段開始時(shí)挑選該完成的規(guī)格部份,開發(fā)團(tuán)隊(duì)必須盡力于 30 天后交付成果,團(tuán)隊(duì)每天用 15 分鐘開會(huì)檢視每個(gè)成員的進(jìn)度與計(jì)劃,了解所遭遇的困難并設(shè)法排除,決定第二天的任務(wù)安排,這樣的短會(huì)就叫做scrum。
SCRUM較為有特色的,是它特別強(qiáng)調(diào)開發(fā)隊(duì)伍和管理層的交流協(xié)作。每天,開發(fā)隊(duì)伍都會(huì)向管理層匯報(bào)進(jìn)度,如果有問(wèn)題,也會(huì)向管理層要求幫助解決。
SCRUM 與傳統(tǒng)開發(fā)流程及項(xiàng)目管理差異較大,于導(dǎo)入時(shí)最好有顧問(wèn)協(xié)助。
總結(jié)
Agile Process 的精神已經(jīng)成為共識(shí),但是沒(méi)有一種固定的流程可以重復(fù)使用在不同的項(xiàng)目上。而且不管是 RUP、XP、SCRUM、或其它的開發(fā)流程都允許相當(dāng)大的彈性,我們必須按項(xiàng)目性質(zhì)的不同,調(diào)整或混合出適合的開發(fā)流程,并允許團(tuán)隊(duì)于進(jìn)行中做必要的彈性修改,方能達(dá)成目標(biāo)。
參考數(shù)據(jù)
RUP:www.rational.com
XP:www.extremeprogramming.org
SCRUM:www.controlchaos.com
AGILE:www.agilealliance.org
作者簡(jiǎn)介
林耀珍為 Microsoft.NET 技術(shù)代言人,目前任職第三波信息技術(shù)總監(jiān),歷任第三波信息教育訓(xùn)練處處長(zhǎng)及育碁數(shù)字科技總經(jīng)理。專長(zhǎng)于信息系統(tǒng)規(guī)劃及軟件開發(fā)技術(shù),擁有 Microsoft MCSD / MCSE / MCDBA,Rational OOAD,Lotus Notes / Domino 等認(rèn)證資格,并為 Microsoft.NET / Java J2EE / 對(duì)象導(dǎo)向系統(tǒng)分析設(shè)計(jì)的資深講師及多家公民營(yíng)機(jī)構(gòu)的 e 化顧問(wèn)。