|
(agile development)是一種以人為核心、迭代、循序漸進的開發(fā)方法。在敏捷開發(fā)中,軟件項目的構建被切分成多個子項目,各個子項目的成果都經(jīng)過測試,具備集成和可運行的特征。簡言之,就是把一個大項目分為多個相互聯(lián)系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態(tài)。
敏捷開發(fā)是全新理論嗎?答案莫衷一是。細心的人們可以發(fā)現(xiàn),敏捷開發(fā)其實借鑒了大量軟件工程中的方法。迭代與增量開發(fā),這兩種在任何一本軟件工程教材中都會被提到的方法,在敏捷開發(fā)模式中扮演了很重要的角色。再向前追溯,我們還也可見到瀑布式與快速原型法的影子,也許還有更多。 改善,而非創(chuàng)新。敏捷開發(fā)可理解為在原有軟件開發(fā)方法基礎上的整合——取其精華,去其糟粕。因此敏捷開發(fā)繼承了不少原有方法的優(yōu)勢?!霸诿艚蒈浖_發(fā)的過程中,我們每兩周都會得到一個可以工作的軟件,”Fowler介紹,“這種非常短的循環(huán),使終端客戶可以及時、快速地看到他們花錢構建的軟件是一個什么樣的結果?!?/span> 也許是因為時間關系,F(xiàn)owler只說出了這些優(yōu)勢中的一部分。允許開發(fā)過程中的需求變化、通過早期迭代可以較早發(fā)現(xiàn)風險、使代碼重用變得可行、減少項目返工……借鑒了眾多先進方法和豐富經(jīng)驗,擁有的眾多優(yōu)勢使得敏捷開發(fā)看來已經(jīng)成為解決軟件危機的標準答案。 問題與思考 大項目的拆分意味著更多子項目的出現(xiàn),協(xié)調這些同步或異步推進的子項目,合理的資源調配都將變得更加復雜。另外,在當前項目和項目組普遍“增容”的情況下,遇到的問題同樣成倍增長。人的重要性被提到了更高的高度,而缺乏有效協(xié)調手段,減少人員流動和項目變更對整個項目造成的影響也將成為一大挑戰(zhàn)……新方法帶來眾多便利的同時,也相應引發(fā)了幾乎同樣多的問題。 敏捷開發(fā)(agile development)概念從2004年初開始廣為流行。Bailar非常支持這一理論,他采取了"敏捷方式"組建團隊:Capital One的"敏捷團隊"包括3名業(yè)務人員、兩名操作人員和5~7名IT人員,其中包括1個業(yè)務信息指導(實際上是業(yè)務部門和IT部門之間的"翻譯者");另外,還有一個由項目經(jīng)理和至少80名開發(fā)人員組成的團隊。這些開發(fā)人員都曾被Bailar送去參加過"敏捷開發(fā)"的培訓,具備相關的技能。 每個團隊都有自己的敏捷指導(Bailar聘用了20個敏捷指導),他的工作是關注流程并提供建議和支持。最初提出的需求被歸納成一個目標、一堆記錄詳細需要的卡片及一些供參考的原型和模板。在整個項目階段,團隊人員密切合作,開發(fā)有規(guī)律地停頓--在9周開發(fā)過程中停頓3~4次,以評估過程及決定需求變更是否必要。在Capital One,大的IT項目會被拆分成多個子項目,安排給各"敏捷團隊",這種方式在"敏捷開發(fā)"中叫"蜂巢式(swarming)",所有過程由一名項目經(jīng)理控制。 為了檢驗這個系統(tǒng)的效果,Bailar將項目拆分,從舊的"瀑布式"開發(fā)轉變?yōu)?quot;并列式"開發(fā),形成了"敏捷開發(fā)"所倡導的精干而靈活的開發(fā)團隊,并將開發(fā)階段分成30天一個周期,進行"沖刺"--每個沖刺始于一個啟動會議,到下個沖刺前結束。 在Bailar將其與傳統(tǒng)的開發(fā)方式做了對比后,他感到非常興奮--"敏捷開發(fā)"使開發(fā)時間減少了30%~40%,有時甚至接近50%,提高了交付產(chǎn)品的質量。"不過,有些需求不能用敏捷開發(fā)來處理。" Bailar承認,"敏捷開發(fā)"也有局限性,比如對那些不明確、優(yōu)先權不清楚的需求或處于"較快、較便宜、較優(yōu)"的三角架構中卻不能排列出三者優(yōu)先級的需求。此外,他覺得大型項目或有特殊規(guī)則的需求的項目,更適宜采用傳統(tǒng)的開發(fā)方式。盡管描述需求一直是件困難的事,但經(jīng)過陣痛之后,需求處理流程會讓CIO受益匪淺。 敏捷開發(fā)是由一些業(yè)界專家針對一些企業(yè)現(xiàn)狀提出了一些讓軟件開發(fā)團隊具有快速工作、響應變化能力的價值觀和原則,并于2001初成立了敏捷聯(lián)盟。他們正在通過親身實踐以及幫助他人實踐,揭示更好的軟件開發(fā)方法。通過這項工作,他們認為:
并提出了以下遵循的原則:
一、敏捷開發(fā)方法 (一) 說明 下面這段話摘自Martin Fowler的一篇文章: 從無到繁重再到敏捷 (二) 方法背后的思想 Alistair Cockburn在Agile Software Development中講述了敏捷開發(fā)方法背后的思想 人們掌握過程(process)可以分為3個階段: 軟件開發(fā)是一個充滿發(fā)明和交流的協(xié)作性游戲(cooperative game of invertion and communication)。軟件開發(fā)的首要目標是生產(chǎn)出軟件,遵循特定的過程和模型只是手段,只要傳遞了足夠的信息,手段是次要的。交流的效果要遠遠重于交流的形式(Effect of communication is more important than the form of communication)。 在軟件開發(fā)中,人的因素要遠遠大于過程和技術。人是有缺陷的: 針對個人因素的幾個建議: 在一個團隊之間,交流是最重要的,實踐證明面對面的實時的交流是最有效的,對交流的延誤會損失信息,白板是最好的交流工具,交流工具的先進并不能提高交流效果。文檔的作用是記錄和備忘,不能通過文檔交流。 敏捷開發(fā)方法要避免的過程設計的幾個常見錯誤 敏捷開發(fā)方法過程設計的幾個原理: 7 確定開發(fā)中間的瓶徑,提高它的效率 這些原理的幾個結論: 敏捷開發(fā)方法的原則是“剛剛好”(Light and Sufficient)
Crystal是Alistair Cockburn提出的一組開發(fā)方法,分為Crystal Clear,Crystal Yellow, Crystal Orange和Crystal Red分別適用于不同的項目。項目可以按照參加的人員和重要性劃分。重要性根據(jù)項目中的錯誤引發(fā)的后果分為: Crystal Clear適用于 C6,D6項目 Crystal Clear 適用于一個辦公室內(nèi)的一個小組 角色有: sponsor發(fā)起人,任務下達者 策略: 過程產(chǎn)品(指整個過程產(chǎn)生的所有產(chǎn)品,包括軟件和文檔)
角色:sponsor 發(fā)起人 策略:
敏捷聯(lián)盟是17位不同敏捷開發(fā)方法的提倡者共同成立的,目的是推進敏捷開發(fā)方法的研究和應用,他們并不要求強制使用某種開發(fā)方法,而是提出了敏捷開發(fā)的幾個核心價值和基本原則: Individuals and interactions over processes and tools principles 1 最高目標是通過快速的和經(jīng)常的發(fā)布軟件滿足客戶的需要
Extreme Programming(XP,極限編程) 是一種輕量級的軟件開發(fā)方法,它使用快速的反饋,大量而迅速的交流,經(jīng)過保證的測試來最大限度的滿足用戶的需求。XP強調用戶滿意,開發(fā)人員可以對需求的變化作出快速的反應。XP強調team work。項目管理者,用戶,開發(fā)人員都處于同一個項目中,他們之間的關系不是對立的,而是互相協(xié)作的,具有共同的目標:提交正確的軟件。XP強調4個因素: XP特別適用于需求經(jīng)常改變的領域,客戶可能并系統(tǒng)的功能并沒有清晰的認識,可能系統(tǒng)的需求經(jīng)常需要變動。 下面是XP的開發(fā)流程
1 Planning: 1)user stories。 2)release plan. 3) small release 5)iteration 下面是iteration的圖示: 6)iteration plan 7)move people around 8) stand-up meeting 9) fix XP when it breaks 2 Designing 1) Simplicity 2)system metaphor 3)CRC card 4) spike solution 5)never add function early 6)refactoringwhenever and wherever
1) customer is alaways available 2) coding standard 3)coding unit test first 4) Pair Programming 5)sequential integration 6) integrate often 7) 共同擁有代碼 8)優(yōu)化工作放在最后 9)NO overtime
1)所有的代碼都有單元測試 2)代碼在release前必須通過所有的單元測試 3) 發(fā)現(xiàn)bug后,首先增加測試 4) acceptance test
1 customer 用戶 2 開發(fā)人員 3 manager 4 tracker 5 coach 二、敏捷開發(fā)的設計原則 關于敏捷開發(fā)的設計原則: GOF說--基于對象組合的設計會有更多的對象(而有較少的類)。 開放封閉原則OCP:Open-Close Principle 一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的。 因此在進行面向對象設計時要盡量考慮接口封裝機制、抽象機制和多態(tài)技術。 該原則同樣適合于非面向對象設計的方法,是軟件工程設計方法的重要原則之一。 我們以收音機的例子為例,講述面向對象的開閉原則。 我們收聽節(jié)目時需要打開收音機電源,對準電臺頻率和進行音量調節(jié)。 但是對于不同的收音機,實現(xiàn)這三個步驟的細節(jié)往往有所不同。 比如自動收縮電臺的收音機和按鈕式收縮在操作細節(jié)上并不相同。 因此,我們不太可能針對每種不同類型的收音機通過一個收音機類來實現(xiàn)(通過重載)這些不同的操作方式。 但是我們可以定義一個收音機接口,提供開機、關機、增加頻率、降低頻率、增加音量、降低音量六個抽象方法。 不同的收音機繼承并實現(xiàn)這六個抽象方法。 這樣新增收音機類型不會影響其它原有的收音機類型,收音機類型擴展極為方便。 此外,已存在的收音機類型在修改其操作方法時也不會影響到其它類型的收音機。 Liskov替換原則LSP:Liskov Substitution Principle 子類應當可以替換父類并出現(xiàn)在父類能夠出現(xiàn)的任何地方。 我們以學生為例,夜校生為學生的子類,因此在任何學生可以出現(xiàn)的地方,夜校生均可出現(xiàn)。 這個例子有些牽強, 一個能夠反映這個原則的例子時圓和橢圓,圓是橢圓的一個特殊子類。 因此任何出現(xiàn)橢圓的地方,圓均可以出現(xiàn)。但反過來就可能行不通。 運用替換原則時,我們盡量把類B設計為抽象類或者接口, 讓C類繼承類B(接口B)并實現(xiàn)操作A和操作B, 運行時,類C實例替換B,這樣我們即可進行新類的擴展(繼承類B或接口B), 同時無須對類A進行修改。 依賴倒置原則DIP:Dependency Invertion Principle 在進行業(yè)務設計時,與特定業(yè)務有關的依賴關系應該盡量依賴接口和抽象類,而不是依賴于具體類。 具體類只負責相關業(yè)務的實現(xiàn),修改具體類不影響與特定業(yè)務有關的依賴關系。 在結構化設計中,我們可以看到底層的模塊是對高層抽象模塊的實現(xiàn)(高層抽象模塊通過調用底層模塊), 這說明,抽象的模塊要依賴具體實現(xiàn)相關的模塊, 底層模塊的具體實現(xiàn)發(fā)生變動時將會嚴重影響高層抽象的模塊,顯然這是結構化方法的一個"硬傷"。
為此,我們在進行業(yè)務設計時,應盡量在接口或抽象類中定義業(yè)務方法的原型, 并通過具體的實現(xiàn)類(子類)來實現(xiàn)該業(yè)務方法,業(yè)務方法內(nèi)容的修改將不會影響到運行時業(yè)務方法的調用 接口隔離原則ISP:Interface Separate Principle 采用多個與特定客戶類有關的接口比采用一個通用的涵蓋多個業(yè)務方法的接口要好。
缺少ISP,組件、類的可用性和移植性將大打折扣。 這個原則的本質相當簡單。如果你擁有一個針對多個客戶的類, 為每一個客戶創(chuàng)建特定業(yè)務接口,然后使該客戶類繼承多個特定業(yè)務接口將比直接加載客戶所需所有方法有效。 以下展示了一個擁有多個客戶的類。 它通過一個巨大的接口來服務所有的客戶。 只要針對客戶A的方法發(fā)生改變,客戶B和客戶C就會受到影響。 因此可能需要進行重新編譯和發(fā)布。這是一種不幸的做法。 所展示的技術。每個特定客戶所需的方法被置于特定的接口中,這些接口被Service類所繼承并實現(xiàn)。 如果針對客戶A的方法發(fā)生改變,客戶B和客戶C并不會受到任何影響,也不需要進行再次編譯和重新發(fā)布。 三、敏捷開發(fā)技術在電子商務軟件中的應用 1.1 電子商務背景 隨著企業(yè)信息化的不斷進步,電子商務在中國也越來越得到更多的認可,電子商務的應用也越來越多,但是很多企業(yè)對電子商務的概念和應用還不是很清楚,行業(yè)內(nèi)對電子商務的研究模式和實施方法也存在很多問題。因此很多企業(yè)在實施電子商務系統(tǒng)的過程中都處在探索和摸索當中,對于項目開發(fā)方來說也有著極大的風險性和挑戰(zhàn)性。 1.2 電子商務軟件開發(fā)存在的問題 由于電子商務軟件開發(fā)存在很大的風險性,而且電子商務的應用也出在不斷摸索當中,沒有很多成熟的模式可以參考,所以沒有實踐的指導可能會導致的項目噩夢。缺乏有效的實踐會導致不可預測性、重復的錯誤以及努力的白白浪費。延期的進度、增加的預算和低劣的質量致使客戶對我們喪失信心。更長時間的工作卻生產(chǎn)出更加低劣的軟件產(chǎn)品,也使得開發(fā)人員感到沮喪。我們希望這些方法這次還會有效,從而消除我們的恐懼。然而,項目并沒有簡單到使用一些約束和人為制品就能夠可靠地防止錯誤的地步。當連續(xù)地犯錯誤時,我們會對錯誤進行診斷,并在過程中增加更多的約束和人為制品來防止以后重犯這樣的錯誤。一個大而笨重的過程會產(chǎn)生它本來企圖去解決的問題。它降低了團隊的開發(fā)效率,使得進度延期,預算超支。它降低了團隊的響應能力,使得團隊經(jīng)常創(chuàng)建錯誤的產(chǎn)品。 1.3 敏捷開發(fā)技術概述 敏捷式開發(fā)采用適應性方法,而傳統(tǒng)的軟件工程學采用的是預測性方法。敏捷式開發(fā)是以人為主的,而傳統(tǒng)的工程學是以過程為主的。 1.4 敏捷開發(fā)的現(xiàn)實意義 適應性和預測性的區(qū)別存在于軟件工程學對軟件開發(fā)過程的描述中。在傳統(tǒng)的工程學里,核心的概念就是把設計和構建這兩個過程分開進行。在軟件開發(fā)的過程中,我們很難想象,如何真正把設計和編程完全區(qū)分過來。軟件工程學領域,所有在這里從事工作的人員,都把設計的過程想象成用圖表、圖象的方式來描述結果的過程。還有一個更重要的問題就是說,軟件本身的需求是在變化的。一個項目在開發(fā)過程中需求會出現(xiàn)變化,需求的變化從根本上推翻了工程學方法所建立的一個基礎。當工程學的人盡量減少或者控制系統(tǒng)將來發(fā)生變化的可能,他越這樣做問題就越容易出現(xiàn)。既然我們沒辦法避免變化的發(fā)生,那么我們就想找到一種新的方法能夠更有效地適應這種變化現(xiàn)象。這也就是敏捷式開發(fā)方法所要達到的效果。 第二章 敏捷開發(fā)技術的應用 2.1 敏捷開發(fā)技術的幾種主要類型 1.XP(Extreme Programming -- 極限編程 2.Cockburn的水晶系列方法 3.開放式源碼 4.Highsmith的適應性軟件開發(fā)方法〔ASD〕 2.2 敏捷開發(fā)技術的特點和優(yōu)勢 1.個體和交互勝過過程和工具 人是獲得成功的最為重要的因素。如果團隊中沒有優(yōu)秀的成員,那么就是使用好的過程也不能從失敗中挽救項目,但是,不好的過程卻可以使最優(yōu)秀的團隊成員失去效用。如果不能作為一個團隊進行工作,那么即使擁有一批優(yōu)秀的成員也一樣會慘敗。團隊的構建要比環(huán)境的構建重要得多。許多團隊和管理者就犯了先構建環(huán)境,然后期望團隊自動凝聚在一起的錯誤。相反,應該首先致力于構建團隊,然后再讓團隊基于需要來配置環(huán)境。 2.可以工作的軟件勝過面面俱到的文檔 沒有文檔的軟件是一種災難。代碼不是傳達系統(tǒng)原理和結構的理想媒介。團隊更需要編制易于閱讀的文檔,來對系統(tǒng)及其設計決策的依據(jù)進行描述。然而,過多的文檔比過少的文檔更糟。編制眾多的文檔需要花費大量的時間,并且要使這些文檔和代碼保持同步,就要花費更多的時間。如果文檔和代碼之間失去同步,那么文檔就會變成龐大的、復雜的謊言,會造成重大的誤導。雖然從代碼中提取系統(tǒng)的原理和結構信息可能是困難的,但是代碼是惟一沒有二義性的信息源。在團隊成員的頭腦中,保存著時常變化的系統(tǒng)的脈絡圖(road map)。人和人之間的交互是把這份脈絡圖傳授給他人的最快、最有效的方式。 3.客戶合作勝過合同談判 不能像訂購日用品一樣來訂購軟件。你不能夠僅僅寫下一份關于你想要的軟件的描述,然后就讓人在固定的時間內(nèi)以固定的價格去開發(fā)它。所有用這種方式來對待軟件項目的嘗試都以失敗而告終。有時,失敗是慘重的。告訴開發(fā)團隊想要的東西,然后期望開發(fā)團隊消失一段時間后就能夠交付一個滿足需要的系統(tǒng)來,這對于公司的管理者來說是具有誘惑力的。然而,這種操作模式將導致低劣的質量和失敗。成功的項目需要有序、頻繁的客戶反饋。項目的需求基本處于一個持續(xù)變化的狀態(tài)。大的變更是很平常的。在這期間,也會出現(xiàn)整個功能塊被減掉,而加進來另外一些功能塊。然而,合同和項目都經(jīng)受住了這些變更,并獲得成功。成功的關鍵在于和客戶之間真誠的協(xié)作,并且合同指導了這種協(xié)作,而不是試圖去規(guī)定項目范圍的細節(jié)和固定成本下的進度。 4.響應變化勝過遵循計劃 響應變化的能力常常決定著一個軟件項目的成敗。當我們構建計劃時,應該確保計劃是靈活的并且易于適應商務和技術方面的變化。計劃不能考慮得過遠。 2.3 敏捷開發(fā)技術的12個原則 1.我們最優(yōu)先要做的是通過盡早的、持續(xù)的交付有價值的軟件來使客戶滿意。 2.即使到了開發(fā)的后期,也歡迎改變需求。 3.經(jīng)常性地交付可以工作的軟件,交付的間隔可以從幾周到幾個月,交付的時間間隔越短越好 4.在整個項目開發(fā)期間,業(yè)務人員和開發(fā)人員必須天天都在一起工作。 5.圍繞被激勵起來的個人來構建項目。 6.在團隊內(nèi)部,最具有效果并且富有效率的傳遞信息的方法,就是面對面的交談。 7.工作的軟件是首要的進度度量標準。 8.敏捷過程提倡可持續(xù)的開發(fā)速度。 9.不斷地關注優(yōu)秀的技能和好的設計會增強敏捷能力。 10.簡單使未完成的工作最大化。 11.最好的構架、需求和設計出自于自組織的團隊。 12.每隔一定時間,團隊會在如何才能更有效地工作方面進行反省,然后相應地對自己的行為進行調整。 2.4 敏捷開發(fā)技術的適用范圍 1.項目團隊的人數(shù)不能太多 2.項目經(jīng)常發(fā)生變更 3.高風險的項目實施 4.開發(fā)人員可以參與決策 第三章 敏捷開發(fā)技術在電子商務軟件的實際應用案例 3.1 案例說明:鋼鐵貿(mào)易企業(yè)的網(wǎng)上期貨訂貨系統(tǒng)開發(fā)實施 項目背景:國內(nèi)某大型國有鋼鐵貿(mào)易企業(yè),其業(yè)務形式大部分采用期貨訂貨,客戶群也比較廣泛,訂貨時間相對比較穩(wěn)定,一般集中在月底的10天左右。該企業(yè)原來開發(fā)了一套適合自己企業(yè)運作的貿(mào)易企業(yè)ERP系統(tǒng),但是僅僅是在公司內(nèi)部使用,功能也很有限,不能夠很好的和客戶進行信息交流,往往客戶在集中訂貨的時候,因為訂貨量巨大,而且時間集中,所以造成該企業(yè)的業(yè)務人員忙的團團轉,而且經(jīng)常會發(fā)生排隊訂貨的現(xiàn)象,同時由于是期貨訂貨,所以該企業(yè)還得向上游供應商訂貨,這樣一來一去,給工作帶來極大的不便,也容易造成混亂和漏洞。 因此,介于用戶這樣的情況,需要開發(fā)一套網(wǎng)上期貨訂貨系統(tǒng),將訂貨的整個環(huán)節(jié)都打通,真正實現(xiàn)24小時訂貨。減少人工干預,通過和幾個系統(tǒng)之間的集成,做到實時的信息流通。但是這樣一個系統(tǒng)對于該企業(yè)來說,畢竟是第一回,國內(nèi)也沒有相關成熟的案例和模型,所以實施存在極大的風險性。而且其他同行業(yè)的競爭對手也在著手打造這樣的一個系統(tǒng),所以盡早建立網(wǎng)上訂貨系統(tǒng),對于提高顧客的忠誠度和滿意度都是大有裨益的,所以對工期的要求也非常嚴格。 根據(jù)以上情況,決定采用敏捷開發(fā)技術來實施這個項目。 3.2 項目組織機構 建立聯(lián)合實施團隊,由電子商務公司的項目實施人員和客戶方的關鍵用戶一起構成,統(tǒng)一受客戶方的常務副總指揮。 工作方式:在客戶現(xiàn)場辦公,在調研的同時做需求,根據(jù)系統(tǒng)架構和功能劃分,邊做設計邊做開發(fā)。 溝通方式:每天下班前半個小時,所有項目組成員必須座在一起溝通交流,對每天的工作進行總結和經(jīng)驗交流。每周召開一次推進和培訓會議,在不斷的開發(fā)過程中進行對用戶的業(yè)務知識,系統(tǒng)知識,和操作的培訓,為將來系統(tǒng)的運行維護打下更好的基礎。 3.3 項目實施過程 第一輪循環(huán)實施周期兩個月,不但搭建了整個應用的整體框架,還實現(xiàn)了兩大品種的單向期貨訂貨流程。 第二輪循環(huán)實施周期兩個月,打通了向供應商的期貨訂貨環(huán)節(jié),并且實現(xiàn)了另外兩個品種的訂貨。同時逐步將前期做好的系統(tǒng)向用戶做推廣使用,在不斷完善的過程中,對本階段的項目開發(fā)實施做修正。 第三輪循環(huán)實施周期三個月。由開發(fā)人員和客戶方的關鍵用戶對期貨訂貨系統(tǒng)進行完善和優(yōu)化。 3.4 項目實施效果 1. 客戶方由于實施了該項目,給訂貨用戶和公司業(yè)務員帶來很大的便利,效率大大提高,再也沒有排隊訂貨的狀況,再也沒有業(yè)務員通宵達旦的處理訂貨需求,再也不會和供應商之間發(fā)生信息失真的現(xiàn)象。系統(tǒng)的快速實施和推進,使得客戶對該系統(tǒng)也越來越依賴,同時該公司的銷售業(yè)績也率攀新高。 2.由于采用了敏捷開發(fā)技術,極大的降低了開發(fā)成本,大大提高了開發(fā)的效率。盡管在整個項目實施過程中存在大量的變更和修正,但是這樣的開發(fā)方式可以很有效的避免帶來更多負面的扯皮現(xiàn)象。 3.因為項目成員由高水平的開發(fā)人員參加,所以對客戶的業(yè)務理解非常深入,在實際的項目開發(fā)當中,不但承擔了具體開發(fā)的工作,還向客戶方提出很多很好的建議改進措施,以便業(yè)務更加優(yōu)化,操作更加順暢。一方面,客戶方從中收益,另外一方面,開發(fā)人員的能力也得到了極大的提高。 第四章 敏捷開發(fā)技術在電子商務軟件的推廣 1. 電子商務軟件實施的高風險性 軟件開發(fā)行業(yè)目前同時存在兩種情況,它既是一個非常成功的又是具有很多問題的行業(yè)。 2. 在跨平臺系統(tǒng)的移植上的應用 電子商務系統(tǒng)經(jīng)常會出現(xiàn)跨平臺的移植。重要的一點就是從功能角度講,移植前后是否一致。一些敏捷開發(fā)中的最佳實踐也是可以使用的,比如你可以把所有的需求以測試的方式提煉出來。很多項目都是使用這種方式而且非常成功。而且使用這種疊蓋式方式,也能夠從項目進程的角度看移植進程有多快。 3. 在電子商務軟件外包公司的應用 軟件外包是非常普遍的。在實踐中發(fā)現(xiàn)敏捷式開發(fā)對外包也是非常有效的方法。實踐中敏捷式開發(fā)比一般的開發(fā)方式估算的方法更快,而且用的人要少一些。 希望中國更多的軟件公司可以采用敏捷開發(fā)技術,使我們的軟件產(chǎn)業(yè)能夠得到更加快速的提高和發(fā)展!(作者: 徐祎 就職于東方鋼鐵電子商務有限公司,職務為首席項目經(jīng)理。目前就讀上海交通大學MBA班 ) 四、敏捷開發(fā)常用工具 (2)易用性好,具備必要的文檔 (3)免費或低價 基于這些工具,慢慢形成了一套敏捷開發(fā)過程。 (一)、工具簡介 下面簡單介紹這些工具,這些工具有些偶已經(jīng)有相當?shù)氖褂媒?jīng)驗,有些正在使用,有些只是剛選定。除直接用于.net開發(fā)的工具中外,還包括一些開發(fā)相關的軟件設計、項目管理工具。偶的主要開發(fā)經(jīng)驗是Web開發(fā),桌面開發(fā)和原型開發(fā),對Mobile開發(fā)不熟悉,也就沒這方面的推薦了。 1,運行平臺 常用的也就.net framework 1.1, 2.0, 和mono了,都是免費的。從功能、性能及安裝基礎來講,自然.net framework要優(yōu)于mono了。mono是開源的,.net framework類庫可以反編譯,從透明的角度講兩者都差不多。如果你想在非windows平臺上開發(fā),或者想研究運行時的實現(xiàn),可以研究mono,否則還是用.net framework吧。 2,服務器 我用過的也就IIS5.0,IIS6.0,Apache加一個mod,還有mono的xsp,這也沒啥好比較的,自然首選IIS6.0了。不過IIS雖然免費,但是至少得windows server版本才運行得爽,至少得花幾千元。XP上的IIS很不爽,據(jù)說也能裝全版IIS6.0,不過還是得折騰。開發(fā)用的話,用Apache加一個.net的mod,或者mono的xsp,還是挺好用的。Apache的缺點是對新版.net framework的支持較IIS6.0滯后。 3,IDE tnnd,這個選擇空間也很小。首選自然是VS 2003或2005,如果VS 2005速成版將來免費的話,偶就選定這個了,或者選價格并不算高的VS 2005 專業(yè)版。可惡速成版、專業(yè)版中沒單元測試,在這里BS微軟10000遍。堅決抵制VSTS版! 其它可選的有SharpDevelop和mono develop。對于不開發(fā)Web程序的初學者來說,用SharpDevelop其實也挺不錯的,集成的Nant,NDoc,NUnit都是很有用的工具。SharpDevelop沒斷點調試功能,但熟用NUnit的話可以彌補這一不足。如果對類庫理解得比較深入的話,采用SharpDevelop,生產(chǎn)力其實也挺高的――即使是進行Web開發(fā)。SharpDevelop的缺點之一是暫時沒重構功能,在下一個版本里會有。缺點之二是內(nèi)存占用比較大,還有性能比VS低得多,大項目,大程序可能不爽。我測試過,用SharpDevelop打開一個大于3M的C#源文件(嘿嘿!是csgl還是tao的,忘了),掛了;用VS 2003打開大概要花幾十秒。 btw,我個人認為其實就用記事本寫中小型(<3000行)的C#程序,效率其實也挺高的,這時候會更加注意類的設計,思路會更清晰一些,當然,速度會慢一些。 4,類庫和文檔 類庫是.net平臺的資產(chǎn)。目前.net下成熟的類庫比較少,和java比,最大的不足就是這里了。最常用的類庫當然是.net framework了,其它各方面的類庫在網(wǎng)上都能搜索到一些。類庫的關鍵資產(chǎn)要素是dll和文檔??次臋n要看一手資料,第一手資料就是源代碼或反編譯過來的代碼,然后就是各類的原始文檔,一般是chm格式的。如果看源代碼習慣的話,效率會很高,并且,建議用反編譯工具看代碼,不建議直接看源文件,原因其一是反編譯工具提供了很多有用的附加功能,其二是反編譯的代碼比源文件更真實。常用的反編譯工具是Reflector。 .net下的文檔是爽死了,比javadoc的pp多了。因此在寫代碼的時候應該注意,多寫///注釋,然后用Ndoc自動生成chm文檔,多爽呀。 很多開源項目提供源代碼和少量的文檔,但它的源代碼中有大量的///注釋,可用NDoc自動生成chm文檔。即使沒有///注釋,采用NDoc生成文檔也是很值的。 MS SQL Server Express版應該是免費的,但標準版和企業(yè)版價格還是不低的,還是用開源的好。對功能有要求就用PostgreSql,沒要求就用MySql。偶現(xiàn)在是GIS項目用PostgreSql,一般項目用MySql。數(shù)據(jù)庫管理用EMS MySQL Manager Lite和EMS PostgreSql Manager Lite,免費,好用,界面很豪華,性能還行。 6,設計與建模 偶選定的UML建模工具是JUDE,2M大,免費但不開源,比ArgoUML功能多、好用。比Visio 的UML功能不知道強大多少倍,比Together也好用。缺點就是只是建模工具,和代碼不同步。另一個缺點就是不能自動生成文檔。不過偶喜歡這樣的工具,強大,體積小,靈活,方便。并且偶覺得它在設計時用就行了,具體的類的文檔用NDoc生成。JUDE是基于java的,得安裝java虛擬機。好像它跨平臺也不怎么樣,我在linux下沒運行成功過。 開源或免費的數(shù)據(jù)庫建模工具試過很多,感覺都不成熟不好用,最后選擇了一個商業(yè)軟件――CASE Studio 2,價格100-300美元,功能很實用,支持很多數(shù)據(jù)庫,生成的文檔也很pp。 7,敏捷開發(fā)工具 NUnit――單元測試。 NAnt――build工具。前面已經(jīng)提及。 NDoc――文檔生成。前面已經(jīng)提及。 CruiseControl.Net ――持續(xù)集成,暫時還沒用過。 NUnit,NAnt,NDoc用的好的話,感覺非常爽,寫程序會有藝術家的感覺。 8,團隊協(xié)作工具 版本管理:CVS和SVN,推薦SVN。客戶端推薦用TortoiseSVN――非??蓯鄣男觚?。 Bug管理:偶選用的是BugTracker.NET,簡單,用ASP.Net寫的,小項目夠用了。 需求管理、項目管理、日程、經(jīng)費計算與管理:還是在用Word、Outlook、Excel。要免費的話可用永中Office試用版,一樣好用。 (二)、優(yōu)勢 1,性價比高。對于10人規(guī)模的團隊,看看軟件成本: 運行平臺:.net framework 1.1或2.0,免費 服務器:1套windows 2003 server版,數(shù)千元 IDE:1套VS 標準版或專業(yè)版,數(shù)千元,其它用express版就行了 類庫和文檔:免費 數(shù)據(jù)庫:免費。用商業(yè)數(shù)據(jù)庫,讓客戶掏錢。 設計與建模:1套CASE Studio 2就行了,數(shù)千元 敏捷開發(fā)工具:免費 團隊協(xié)作工具:1套MS Office(帶Visio的)就行了,數(shù)千元,其它人用永中。 整個下來,不足20000元。 2,易用性好 反正我的感覺是和商業(yè)軟件差不多或者稍差 3,易擴展 上面工具大部分是開源的,并且很多工具之間協(xié)作性比較好,這樣可以用來定制適合自己的生產(chǎn)線。老外的那一套生產(chǎn)線,比如RUP,MSF及其相關工具,除價格貴外,其靈活性也不高,別人的生產(chǎn)線不一定適合自己用。這時上面工具的優(yōu)勢就出來了。 (三)、搭建軟件生產(chǎn)線 流程1:項目管理流程 用Office管理需求。用SVN進行源代碼管理和文檔管理,BugTracker.NET進行 Bug管理和事務管理。盡量將程序、文件、文檔的維護自動化。 流程2:開發(fā)管理流程 開發(fā)過程中所維護的文件越少越好。偶覺得應該盡量少用UML圖寫文檔,只寫最關鍵的部分。類的文檔最好由NDoc直接生成。偶用UML工具的時間很少。寫代碼的過程就是類設計過程。不妨比較這兩個流程:(1)用例分析->采用UML工具設計類->由UML工具生成代碼或撰寫代碼->重構代碼,自動更新UML文檔。(2)用例分析->撰寫代碼->重構代碼。第一個流程只有一個優(yōu)勢,就是人對圖形的理解比對代碼的理解更加直觀,但是多了很對累贅工作。第二個流程少了很多步驟,并且可以隨時根據(jù)代碼逆向工程出類圖出來, 我還是喜歡以代碼為基礎的流程。撰寫代碼也可分為2個過程,第一個過程是寫出一個代碼框架,所有的方法都是UNDO,寫出屬性,接口,寫出///文檔。這應該是設計過程。這個過程基本上只產(chǎn)生、維護源文件。類圖可以通過visio逆向工程,類設計文檔可以通過NDoc自動生成,并且提供了一個測試基礎,可以根據(jù)這個測試基礎寫測試代碼了。測試代碼最好也只寫個框架,但是要寫好///注釋,然后生成測試文檔。這應該是設計過程。第二個過程是實現(xiàn)過程,把類文檔和代碼框架提交給相關人,實現(xiàn)、測試、重構......一切都自動進行......整個過程中只有一份東西,就是源代碼,開發(fā)過程中的交付件應該都從源代碼中自動生成。 數(shù)據(jù)庫腳本和文檔用CASE Studio 2維護。最后提交、上線、驗收都很好辦,所要的東西biaji一下子都出來了。要申報著作權直接從源代碼和chm文檔中弄一部分出來就夠了。 開發(fā)的核心是源代碼,所有文檔應該體現(xiàn)在源代碼的結構、關系和注釋中??刂普麄€開發(fā)流程的核心工具是Nant。要是能把用例分析過程體現(xiàn)在源代碼中就好了! |
|
|