在本書中,GaryPollice、LizAugustine、ChrisLowe和JasMadhur四位作者以自己的親身經歷說明了如何在一個小型團隊、小型項目中應用Rational統(tǒng)一過程。其中包含了對開發(fā)過程中各種做法的原因和結果的全面分析,說明了開發(fā)團隊如何對開發(fā)過程與開發(fā)環(huán)境進行動態(tài)的調整。本書的主要內容包括:如何在開發(fā)人員、開發(fā)過程和開發(fā)工具之間尋求平衡,并且在軟件開發(fā)的整個過程中動態(tài)地維持這種平衡;如何組合RUP和敏捷開發(fā)原則中的多征方法來建立團隊自身的開發(fā)過程,并且在項目進程中對開發(fā)過程進行適當?shù)恼{整;如何選擇適當?shù)拈_發(fā)工具來對團隊的活動提供支持,尤其是對于一個小型的分布式團隊需要考慮哪些問題;客戶的參與和意見關系到軟件產品最終能否有效地滿足客戶需求。軟件開發(fā)的目標是向用戶交付具有一定價值的產品。為了提高工作效率,你必須在開發(fā)人員、開發(fā)過程與開發(fā)工具之間維持適度的平衡。每個人似乎都有自己最喜歡的開發(fā)工具、技巧和開發(fā)過程。軟件公司把開發(fā)工具和方法賣給你,幫助你提高構建軟件時的效率。顧問們向你宣講他們的方法,試圖讓你相信他們知道如何幫助你的機構和項目團隊做得更好。而我們開發(fā)人員則不停地學習新的技術、采用新的工具,來幫助我們在更短的時間里以更高的質量完成更多的工作。我們這些作者在各種軟件項目中工作和對之進行觀察的時間累計起來超過了七十五年。根據(jù)這些年中所得到的經驗,我們得出一個結論,很可能一些聰明的讀者也已經想到了:每一個項目都不一樣,那些幫助某個團隊取得了巨大成功的方法如果不具有通用性,可能會導致另一個團隊的慘痛失敗。每個團隊都需要確定如何使用一個特定的開發(fā)過程,然后不斷地進行調整才能取得進步。而在這種不會停止的變化面前,一個項目團隊如何知道改變哪些做法可以獲得最大的效果?我們的答案是,依靠學習盡可能多的技術,依靠學習有效使用支持不同技術的開發(fā)工具,然后確定哪些組合可以工作得最好,以及它們在什么情況下最有效。這也意味著一個不斷學習的過程。好的程序員從其他的程序員那里學習。他們通過查看代碼和閱讀關于不同編程方法的書籍進行學習。測試人員通過學習測試專家的技巧、研究測試設計方案和學習如何使用新技術與新工具來獲得提高。實際上,每一個獨立的實踐者都可以從其他從事相同工作的人那里,或者通過觀察范例來學到知識。每個實踐者都需要形成自己高效工作的風格,既作為獨立的個人也作為一個更大的團隊的一員。團隊也一樣需要利用其他團隊如何工作的范例,來形成自己團隊協(xié)同工作的風格。本書是關于一個小型團隊如何開發(fā)一個軟件工具的例子。它是關于我們做了什么以及為什么這樣做的一本大事記。我們嘗試著解釋了為什么某些做法有效(或者無效),并討論了下一次我們會改變些什么。在此過程中,我們特別指出了所獲得的經驗和教訓,并提供了一些將這些經驗通用化的思路。讀者所要做的,就是觀察我們所做的工作并汲取我們的經驗。如果你正在從事小型的軟件開發(fā)項目,你將立刻根據(jù)我們的經歷發(fā)現(xiàn)一些問題。你可能已經面臨一些我們曾遭遇的問題,并按照自己滿意的方式解決了,或者你仍在試圖找到合適的解決方法。我們希望本書能夠為你提供一些有用思路,幫助你選擇和使用合適的開發(fā)工具,與他人一起有效地工作,并選擇最適合你個人和所在團隊風格的技術。本書的所有作者都曾在軟件行業(yè)的不同類型項目中工作了許多年,從很小的項目到很大的項目都曾涉及。我們對自己的工作都充滿熱情。我們在為Rational軟件公司(現(xiàn)已被IBM公司收購)工作時相互結識。啟動此項目的Gary曾經在第一個RationalSuite項目中工作,然后轉到RationalUnifiedProcess,即RUP團隊工作。Liz和Chris曾和Gary一起在RationalSuite團隊中工作,而Jas是RUP團隊的成員。我們看到過采用RUP或者其他開發(fā)過程并取得成功的項目,我們也看到過同樣采用這些開發(fā)過程卻失敗了的項目。我們希望將要講述的這個項目能取得成功。我們認為自己確實成功了。更重要的是,我們的客戶認為我們成功了,這就是我們的故事,希望你能夠喜歡它。關于本書在本書中,我們講述了我們如何作為一個團隊一起工作的故事。我們談及了面對的一些技術障礙以及克服它們的方法。我們描述了遇到的一些模式以及我們如何將它們應用于自己的團隊、項目以及代碼。我們說明了這個小團隊如何發(fā)展了一種在成員之間以及與用戶之間進行有效交流的方法。我們還討論了所采用的不同技術和方法,并根據(jù)不同的開發(fā)方法學,如RUP、極限編程(XP)等等,進行了調整。本書并不包含任何一種特定軟件開發(fā)技術的全部技術細節(jié)。它并沒有描述一個開發(fā)過程。它并不是關于編寫高效的代碼、調試方法、測試技巧、需求管理或者過程工程的書。不過本書涉及了所有上述主題。PSPTools項目本書是關于我們開發(fā)一個軟件項目——PSPTools的經歷的大事記。PSPTools的目標是為WattsHumphrey的PSP(PersonalSoftwareProcess,個體軟件開發(fā)過程)提供自動化的支持。在版本1中,我們?yōu)橹С諴SP等級1實現(xiàn)了計時器和數(shù)據(jù)收集工具。(關于PSP的更多內容,請參見附錄B。)本書包含了屏幕截圖、表格以及其他反映我們工作進展的材料片段。為了使讀者可以了解我們的實際工作方式,我們據(jù)實地展現(xiàn)了自己的經歷以及最終的軟件,而不是理想化地解釋我們希望如何工作。在本書的網站www.awprofessional.com/titles/0321202945,包含了我們的所有代碼、其他一些非代碼的項目制品、到其他有用網站的鏈接以及其他后來發(fā)生的新聞。我們也很希望能夠聽到大家的意見,無論是對此書的反映,還是關于你自己的軟件開發(fā)經歷。我們的電子郵件地址是psptools@yahoo.com。本書的組織結構本書的組織結構如下:第1~3章介紹此項目的相關情況。我們介紹了自己進行軟件開發(fā)的方法;對于在開發(fā)人員、開發(fā)過程與開發(fā)工具之間維持平衡的重要性的觀點;及對PSPTools項目的描述。第4、5、6、8、10和11章分別從團隊和過程的角度說明了這個項目。我們討論了RUP的不同階段以及我們在每一階段中做了什么。第7章和第9章提供了有關我們所處理的代碼和使用的技術的詳細情況。這兩章并不是對整個應用的全面展示,而是用于體現(xiàn)一些代碼的風格并解釋我們所做的一些技術決策。我們希望這兩章能夠鼓勵你從本書的網站下載整個項目內容來進行更深入的研究。附錄中提供了一些主題的信息,如RUP、PSP和XP,我們假設你對它們已經有一定程度的了解。誰需要閱讀此書?如果你是下列人士之一,那么你應該閱讀此書:一個正在尋求有關的技術指南,以使得團隊整體以及其中的個人都能更有效率工作的項目領導者。書中也討論了我們所使用的開發(fā)工具以及它們的替代產品,還提供了關于如何使用類似RUP之類的開發(fā)過程來幫助、促進交流的實踐性建議。一個工作于小型項目的獨立實踐者(一個程序員、一個測試員或者一個分析師)。本書可以幫助你學會如何在不增加無理負擔的情況下,與團隊中的其他成員進行交流。這里推薦了一些可能會有幫助的工具,并展示了如何有效地應用一種開發(fā)過程來指導、幫助你集中注意力,而不是給你增加負擔。一個工作于開源項目的獨立實踐者。本書沒有專門討論開源開發(fā),但確實提供了一些類似于開源項目的經驗。它提供了一個如何組織分布于不同地點的團隊開展工作的范例。顯示了這個團隊如何調整其工作風格與使用的開發(fā)工具,以適應地理的分隔、完全不同的開發(fā)工具以及在相互獨立的網絡上進行工作。其他對小型項目或者敏捷開發(fā)技術感興趣,并對它們如何與其他開發(fā)過程(如RUP)結合感到好奇的獨立實踐者。致謝如果沒有很多人的努力與貢獻,本書將不可能得以出版。然而對于文中出現(xiàn)的任何錯誤,我們將承擔相關責任。我們要感謝以下人士,他們的工作使得本書內容更為豐滿、有趣和可信。Gary感謝整個開發(fā)團隊。你們中的每一個人都在整個項目過程中提供了自己的見解、知識、努力與支持。RajSrinivasan在我們急需測試人員的時候加入進來,提供了有所側重的、有益的問題報告。我要特別感謝PhilippeKruchten和PerKroll,從他們那里我領會了RUP的精神,從而形成了我自己在小型項目中使用RUP的風格。敏捷開發(fā)社區(qū)中的許多活躍分子教會了我很多事情,我試圖將它們包含于我個人的開發(fā)過程中。我尤其感謝與BobMartin、RonJeffries和RandyMiller的交流。我確信其他的作者和我一樣感謝為本書提供了極有價值的見解的審閱者們。除了PerKroll和PhilippeKruchten,我們很榮幸地請JamesDunion、MagnusLyck?、BobMartin、DanRawsthrone和ChrisSoskin對我們的工作進行了審閱。我們也很感謝來自于Rational軟件公司的支持。最后,我們感謝Addison-Wesley出版公司那些過去和現(xiàn)在幫助我們完成本書的人們,他們是:PaulBecker、MaryO’Brien、BrendaMulligan、AmyFleischer、PatrickCash-Peterson,以及我們有才華的、仁慈的編輯RebeccaGreenberg。感謝你們付出的時間和無盡的耐心。Liz非常感謝我的經理KarlHakkarainen,他支持并鼓勵我在此項目中進行工作。感謝Gary領導了這一項目,同時感謝其他作者——Chris、Jas和Gary——在完成項目的過程中與他們一起工作非常開心。最后,我還要感謝本書的審閱者們,他們充滿理解力的、大量而風趣的評論促使此項目富有成果。Jas真誠地感謝Gary、Liz和Chris,感謝你們的善意、友好、見解與支持。Chris我想感謝與我同一辦公室的SteveZerfas。他一直忍受著作為PSP項目一個組成部分的大量會議電話。他也比任何人更多地聽我說:“在PSP項目中,我們……”。如果沒有我的經理DaveZygadlo的寬宏許可,我將無法在此項目中工作。他即使在“午夜項目”不時地延伸到白天后仍保持著活力。最后,我希望感謝我的妻子Carmen,她對我寫程序到深夜或長途旅行去拜訪Gary從無怨言,而且始終歡迎Gary在來參加編程討論時訪問我們家。本書不是一本關于RUP、敏捷開發(fā)過程或者項目管理的教材,而是一份來源于實際工作的“戰(zhàn)地”報告。它記錄了一個小型的分布式團隊,經歷許多變化最終成功地完成任務,向用戶交付一個有價值的、可用的軟件產品的過程。在本書中,這些“戰(zhàn)士們”以直述的方式講述了他們的故事,沒有試圖去“執(zhí)導”有關的內容。我經常聽到:“我們不需要采用一個開發(fā)過程,因為我們的項目又小又簡單?!笨赡苣阋灿蓄愃频母杏X。但是,實際上你總會采用某種開發(fā)過程,而且這一過程很可能是臨時發(fā)明出來的。在我們的行業(yè)中有一種普遍存在的印象,就是一個預先描述好的開發(fā)過程只適合于大公司、用于大型項目、管理幾百個開發(fā)人員;而對于小型項目來說,這種開發(fā)過程只會使開發(fā)人員過得更加痛苦。在本書中,你將會看到一個很小的團隊在解決一個中等的項目時,如何按照他們的需要采用和剪裁RUP這樣一個描述化的開發(fā)過程。他們并沒有因為采用這一開發(fā)過程而增加過多的正規(guī)性。他們只選擇了那些對自己有用的要素,甚至采用了類似PSP(PersonalSoftwareProcess,個體軟件開發(fā)過程)、極限編程(eXtremeProgramming)以及其他一些敏捷開發(fā)方法。我也經常聽到:“讓我看看你到底是如何做的?!背晒椖康睦雍湍承┎怀晒椖康姆蠢3J菍е麻_始采用一個新開發(fā)過程的關鍵。僅僅埋頭于書本中或者網站上,苦讀一頁頁有關某種理想處理方法的描述,對于我們大多數(shù)人來說都太抽象了。包裝好的、與理論嚴格匹配的完美示例沒有太多的說服力。本書最大的價值在于,它帶領讀者接觸到一個實際項目中的真實經歷,包括了其中的失敗、錯誤的開始以及各種限制;而作者以批判的眼光來分析他們所采取的做法,以及這些做法為什么會成功或者失敗。我們從自己的經驗以及與別人經驗的對比中進行學習。“噢,是的,我知道這種模式;我也曾經處于這種境地。啊,你是這樣解決的?!北緯懻摿嗽趥鹘y(tǒng)的開發(fā)過程(包括RUP)中都沒有涉及到的問題。作者大膽地探索了關于開發(fā)人員、關于形成一個團隊的力量、關于分布式環(huán)境中的通信聯(lián)系、關于使用基于Internet的協(xié)作工具等方面的內容,而所有這些要素都是當前許多小型開源軟件項目的組成部分。最后,本書強調了一個常常在計劃中標明了,而在趕著完成任務的過程中通常被遺忘的關鍵性的實踐步驟:自?。╯elf-reflection),有時也被稱為事后分析(post-mortem)或者回顧(retrospective)。這一步驟就是暫時停下,回頭看看我們做過的、我們是如何做的,看看哪些做法有效,哪些做法無效,以及導致這種結果的原因。而這整本書就是一個非常完整的事后分析的極好例子,坦白而謙虛。本書不能代替你沒有做的那些事后分析和回顧,但是可以讓你意識到可能錯過了哪些東西。那么,哪些人需要使用這本書以及何時需要這本書?可能性有很多:如果你剛接觸現(xiàn)代的開發(fā)過程,如RUP、敏捷開發(fā)方法、PSP等等,那么本書可以讓你了解它們的精髓,而不用深入到細節(jié)中去。如果你不確定該如何處理小型的分布式項目,你將可以學到極有價值的內容,這些內容的作者也曾經問過自己那些你可能會提出的問題。他們對這些問題曾經做出過選擇,這些選擇的對與錯都通過最終的結果反映了出來。你很可能發(fā)現(xiàn)一些熟悉的模式,從書中的解答和解決方案中學會一些東西;這意味著在你自己的項目中犯的錯誤會更少。如果你是這些方法的專家,那么本書將為你打開新的途徑——如何結合不同的方法或者縮減一個開發(fā)過程,并告訴你自省的價值。我從這本書中學到了許多關于RUP的知識,并學會了從不同的角度來看待它。感謝Gary、Jas、Liz和Chris與我們分享他們的經驗?!狿hilippeKruchten于加拿大溫哥華