<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    構建高效軟件開發流程和團隊

    構建高效軟件開發流程和團隊

    ?

    ?

    1. ???? 前言 ... 2

    2. ???? 項目計劃 ??? 2

    3. ???? 開發文檔 ??? 3

    4. ???? 編寫代碼 ??? 4

    5. ???? 代碼管理 ??? 4

    6. ???? 測試 ... 4

    7. ???? BUG管理 ??? 5

    8. ???? Code Freeze .. 6

    9. ???? Tech Talk ?? 6

    10. ?????? Code Review ... 6

    11. ?????? 溝通與交流 ??? 7

    12. ?????? 后記 ... 7

    1.?? 前言

    本人曾就職于多家公司,但留給我印象最深刻、開發管理最規范的公司 I 公司。該公司總部位于美國硅谷,其開發的產品 曾獲得 PC Magazine 最高五星級的優秀好評。現我根據在此公司中所感受到的經歷及自身的一些感想寫出來,希望能給大家和其它公司有所借鑒。

    ?

    2.?? 項目計劃

    在一個產品發布并使用之后,其中肯定有許多地方不如意和值得改進的地方。客戶在使用的過程中會發現一些問題,提出更高的需求,市場也在發生變化,我們的競爭對手也在發展,新的技術不斷地產生,這些因素推動著我們的產品不斷地向前發展,使它的版本不停地往上增長。這些發展的需求不是一下子提出來的,在客戶使用的過程中發現某些不如意不方便的地方,他們會向我們的技術支持人員提意見,而技術支持人員會把這些需求以 BUG 的形式存入 BUG 數據庫中,其級別一般定義為下一個版本的 Feature 。有些上一個版本未解決的 BUG 也可能需要在本版本中來解決。因此當我們來開發下一個版本時,其許多特性已經存在于 BUG 數據庫中了。當然新版本的特性不是只從 BUG 中獲得,管理層可能從市場的角度來提出新的特性以求領先競爭對手,開發人員本身也可提出某些要求來納入新版本開發的計劃中,如要求對某部分代碼進行重構以使其結構更清晰更容易維護,執行效率更高。

    每個人把同自己相關的功能模塊收集起來,同時預估時間,其中主要包括寫文檔的時間、開發時間和單元測試的時間,一般要求精確到工作日。這些信息發送給組長,組長再把本小組人員的任務和預估時間發送給管理層,由管理層對此任務及進度進行評估審核,管理層會根據產品發布時間及客戶需求、市場因素等方面作出選擇,可能某些功能由于時間緊急會被推遲到下一個版本中去。若預估出來的時間同預計的產品發布時間有較大沖突,而且此功能是本版本中必須得做的,則開發小組會被要求重新預估時間,加快開發速度來達到這個要求。

    雖然這個開發進度時間是一個大概的估計時間,但我們要盡力按照這個開發進度來執行。每個星期五下午我們有一個 Status Meeting (一般那時工作效率較低,適合開會),在此會議上我們會根據這個進度來 review 我們的工作,每個人手上的工作是否按照這個進度在走,是否有人延后了,是否 block 住別人的工作了。在此會議上每個人都要報告自己的進度,同時還要報告上個星期做了什么,正在做什么,以及下個星期打算做什么。通過這個會議,會讓你覺得有人在監督你,無形之中迫使你不斷地督促自己不要使任務延后,如果有延后的跡象也會盡早發現而趕上。若某些經過努力不能趕上,那也沒有辦法,只能修改原先的進度表,因為那是我們的估計與現實發生了偏差,我們必須使我們的進度表符合實際情況,這可以避免許多項目發生最后的 20% 的工作量會占據 80% 甚至一直拖后的情況。修改進度表的情況我們曾經發生過,有一次在按照原先的進度執行到將要完成的狀態時突然接到通知由于市場及客戶的原因要求加入另一項重大的功能,這個功能對我們程序的結構有非常大的影響,因此我們就要重新制定一個進度來滿足需求。在這種情況下,產品原先的開發進度被打亂,發布時間也因此推遲。當然這種情況應當盡力避免,尤其在項目后期產生新的需求,若不得已也應重新規劃進度,而不是仍舊依照原先的進度去執行,因為老的進度已不能反映現實的情況。

    3.?? 開發文檔

    在項目進度安排中我們已經把寫文檔的時間也規劃進去了,這里雖然是寫文檔,其實是設計程序,整理一下思路與架構,磨刀不誤砍柴工,這樣在實際寫代碼時會流暢很多,節省時間,因此可以說真正有思想性的東西都在寫文檔這段時間內完成了。當然我們這里的文檔格式不象 ISO 那樣規定了條條框框,我們的文檔格式相對自由,基本上能隨意發揮,但對于幾個主要點一般來說是需要說明的。要求寫的文檔能讓他人比較容易地看明白,能把問題講清楚,能反映你的設計思想。文檔的數量也不多,開發文檔有兩類,一類是 Function Spec ,另一類是 Design Document

    Function Spec 中需要寫明的是本模塊完成的任務,解決什么問題,有什么作用,為什么要這些功能,此外我們還會添加進適用范圍,有什么不足,注意點是什么,還有哪些地方在以后可以進行改進。在這個 Function Spec 中不涉及到任何非常詳細的算法。此文檔不光給開發人員看,還讓 QA 及其他成員以及后來的新人能根據此文檔來了解此模塊的大致功能,同時也會給文檔編寫者看,他們會根據這些 Function Spec 整理出一份用戶手冊,告訴用戶此版本中新增了哪些功能,各功能模塊有什么作用,如何使用等信息。因此在我們的開發過程中 Function Spec 是很重要的文檔,此文檔完成后會抽出一段時間同相關人員及 QA 一起 review 這個文檔,讓 QA 了解設計者的意圖,同時熟悉新的功能模塊,為接下來的測試作準備。如果其中有誤解或不明之處,大家會提出來探討并由開發者修正。

    Design Document 中主要描述實現此模塊所涉及到的主要算法、數據結構、類的層次結構及調用關系。這個文檔的閱讀者主要是開發人員,包括任何想了解詳細實現代碼的人,幫助人們理解代碼。在某些功能模塊比較簡單的程序中,此文檔所描述的信息會比較少。此文檔不象 Function Spec 要在開始寫代碼前就編寫完成,它可以隨著代碼編寫的進行而增加,但基本上遵循文檔先行原則,也就是要增加新的代碼或修改代碼前若有涉及到文檔部分的應先修改文檔,然后再修改代碼。

    4.?? 編寫代碼

    由于我們用 JAVA 語言進行開發,因此我們借助了 Jbuilder IDE 工具。關于代碼風格,我們基本上套用 Jbuilder 中自動的代碼格式編排,但其中需要改變的是縮進是 4 個字符,類與類之間間隔 2 行,方法與方法之間間隔 2 行, import 類時用完整的類名。寫代碼時要對類及函數提供詳細的注釋及說明,基本做到看它們的說明就能知道這個類或函數的功能以及主要算法的實現原理。在開發過程中對主要的模塊要編寫 UnitTest ,同時要 UnitTest 先行,也就是遵循 XP 規則中的測試驅動原則,當所有的單元測試代碼通過時,此功能也就基本上完成了。

    ?

    5.?? 代碼管理

    我們采用 VSS+SourceOffsite 進行版本控制,其中存放了此產品的所有源代碼、庫文件、文檔及 release 時的安裝程序,各個部分存放在不同的目錄中。每天早上要求開發人員 VSS get latest version 的源代碼,然后進行編譯并開始一天的工作。在下班之前理論上要求員 check in 所有當天修改的代碼,在 check in 之前要保證編譯是能通過的。若有誰 check in 的代碼導致 daily build 失敗則會被要求某些懲罰措施或警告,象微軟公司要負責照看當日的每日構建。有時我們編寫的代碼涉及到多個文件,而且此改動是比較復雜需要花費多天的工作量,如果現在 check in 進去可能會導致 BVT Build Verify Test )測試通不過,因為有些代碼沒有完全完成,而之前的代碼能使 BVT 測試通過,而且這些代碼基本上不會涉及到他人,在這種情況下可以不 check in 進去,直到全部代碼完成能提交 BVT 測試時再一起 check in 進去。

    每天我們都會做 daily build ,一般是在凌晨 4 點進行,那時有個程序會自動從 VSS 中拉下最新的代碼并進行編譯。因為我們同美國進行同步開發,因此如果想要把修改的代碼進入到這個 build 中去那就需要在凌晨 4 點之前把相應的代碼 check in 進去。若有人 check in 進去的代碼導致編譯通不過則會在本步驟中被發現。當編譯完成之后自動產生安裝包,測試部門將會對這些代碼進行 BVT 測試,同時對 VSS 中開發庫打上 label ,如果發現了什么 BUG 就能根據這個 label 知道是哪個時候開始出現這個 BUG 的。 BVT 是指 Build Verify Test ,是對組件中基本功能的測試。這個測試每天都會進行,看新加入的代碼或修改是否會影響系統的基本功能,便于及早發現錯誤。

    6.?? 測試

    在開發人員完成了 Function Spec 后,測試部門開始了測試規劃,確定需要測試哪些方面,如何測試及進度安排。測試人員需要寫許多測試代碼,有些測試代碼需要集成進 BVT 測試,有些可能需要進行單獨的測試,目的都是為了使產品符合要求,使開發人員容易找出問題所在并改正。產品功能是否符合了要求,是否能被發布是由測試人員決定的,因此測試人員也比較辛苦,責任重大。通過了每天的 BVT 測試,還有一些性能測試、兼容性測試、災難測試等需要在產品發布前進行。在完成這些測試之后由測試人員決定本產品是否能 release 出去了,如果沒有什么問題則會給某些關系較好的用戶進行 β 測試,之后再最終 release 出去。

    7.?? BUG 管理

    由于我們每天進行著測試,因此經常有 BUG 被測試部門發現,一旦發現了新的 BUG ,就會被添加進 BUG Tracking System 中。目前較流行的 BUG Tracking System TestTrack ClearQuest Bugzilla 等。 BUG tracking system 是開發人員和 QA 之間的紐帶,開發人員和 QA 通過 BUG tracking system 聯系著。每個 BUG 有其類型和級別,預定的類型有 Crash-Data Loss, Crash-No Data Loss, Incorrect Functionality, Cosmetic, Feature request , 級別有 P1 P2 一直到 P6 ,它們分別代表了重要性及緊急程度, P1 BUG 需要很快 fix P5 之前的 BUG 在本版本 release 之前必須 fix 掉,若真的不能或不重要則由 QA 確定并降低優先級進入到下一個版本中去 fix QA 發現一個 BUG 后在 BUG Track 中增加一個 BUG ,同時填入相關信息并 assign 給相應的開發人員,開發人員收到 BUG 分析并 fix assign QA verify ,其中要填上分析的結果以及如何解決的詳細說明。若 QA 對此 BUG verify 通過則 close BUG ,否則 verify failed 并重新 assign 給開發人員并等待其 fix 。每星期在 Status Meeting 上會進行 BUG 狀況報告,主要由 QA 組長報告 BUG 的狀況,主要是新增 BUG 數, fix 掉多少,還有多少處于 open 狀態,有多少處于等待 verify 的狀態,據此可以了解開發及測試情況。有時在 Status Meeting 上我們也會進行 BUG Review BUG Review 有時是單獨一個小組內進行,其主要作用是重新明確每個人頭上的 BUG 以及了解每個 BUG 的狀況,如開發人員對此 BUG 將作何處理等,以此來了解開發中是否有碰到比較棘手的問題,增加了產品發布風險。在 QA 增加 BUG 和開發人員 fix BUG 的游戲中, BUG 的數量曲線圖會象股市曲線一樣上下波動,但總體趨勢一般是前期 BUG 放量攀升,后期震蕩下挫,若到了后期新 open BUG 數量一直上升則說明風險在增大,有可能無法控制,也就是說 fix 了一個 BUG 導致了多個新的 BUG 產生。在量化開發進度中也可以用代碼數量的曲線圖來粗略的呈現。在有大量新功能增加時可能代碼量的增加會較快,當在 fix bug 階段,代碼的修改較多,因此代碼數量的增幅會降低,依據代碼量可以看出開發的狀況處于何種階段。

    需要指出的是我們對 BUG 的定義比較廣泛,一些新功能也可以作為 BUG 被提出,只不過這些 BUG 級別比較低,讓它們進入到下一個版本中去實現。因此 BUG 的創建者也可以是技術支持人員、市場人員甚至開發人員本身。關于開發人員本身,因為他可能會找出一些 BUG ,有些是其他開發者的,有些可能是此開發者本身的,把這個 BUG 添加進 BUG 庫中可以幫助開發人員在以后產生新問題時或類似的 BUG 時有一個借鑒和思路,但此 BUG verify 必須要讓測試本模塊的測試人員來 verify

    8.?? Code Freeze

    P5 之前的 BUG 都被修復了,這時離產品發布日期也就不遠了,一般是 2 個星期后就能 release 產品,這時要對 VSS 中的代碼進行 freeze ,以保證代碼庫的穩定性。 Code freeze 階段一般會把各開發人員的 check in check out 的權限關閉,若在這時仍有 BUG 報告上來并經討論確定是重大的且必須在本版本中 fix 的,則需要經管理層同意并特殊地授予權限,在修改完成后修改者要把修改了哪些文件,影響了哪些文檔等信息上報給各部門如 QA build 人員、文檔編寫者等。在 code freeze 階段,測試部門在緊張地進行著各種測試,得出各種數據,并決定本版本是否可以 release 了。

    ?

    9.?? Tech Talk

    計算機知識更新速度非常快,經常有一些新的術語、新的名詞、新的思想、新的技術所產生,如過離開此行業幾個月后重新回來就會對這些新的事物不解,而我們平時為了自己的項目埋頭苦干可能忘了周圍的世界發生了什么。 Tech Talk 就提供了一個讓我們了解新知識和最新發展趨勢的機會,讓大家把知識共享,共同提高。 Tech Talk 一般會在項目不是太忙碌的時候進行,主持人會提前一個星期指定某個人去準備一下 Tech Talk ,一般此人可能對某方面比較感興趣,然后他會花一些時間去了解這方面的情況,寫成一個文檔如 PowerPoint 并上傳到局域網內,同時通知大家可以先去瀏覽。 Tech Talk 的內容非常廣泛,不一定同我們的項目緊密相關,任何新的思想、新的知識(當然一般是限在計算機領域內)都可作為 Tech Talk 的內容,而在主講人講完之后還有一段時間被大家提問,共同對這個話題進行討論,答疑解惑。當然 Tech Talk 也可同我們的項目相關,如研究一下競爭對手的產品技術,本公司產品的架構等。研究本公司的產品架構可以使大家對本公司的產品有一個全局的概念,從整體上來看自己的產品,順便整理一下產品的架構使之更加清晰有條理。平時大家都只注重于自己負責的其中的一小塊,在 Tech Talk 中可以跳出自己的小框框來了解全局,同時這也是新員工了解公司核心技術整體框架的好機會。每個模塊的負責人需要闡述此模塊的方方面面,讓大家來了解并回答問題。

    ?

    10.????????? Code Review

    當進行工作移交時我們會進行 Code Review ,在碰到棘手的 BUG 時也會進行 Code Review Code Review 是大家了解其詳細實現的一個好機會。在 Code Review 之后會對此代碼產生親切感而不是陌生懼怕感,相信很多人在讀他人代碼時會有非常痛苦的經歷, Code Review 是減少此痛苦感的好藥方。在進行 Code Review 前,主講人會提前發出一個通知告訴相關人員要 review 哪些代碼,這樣參與者可以抽出時間提前了解相關代碼,對不懂的地方做個筆記以便在 Code Review 進行中提出疑問。在我們碰到比較棘手的 BUG 沒有什么思路或大惑不解時,這時找幾個相關人員或對此代碼也熟悉的人進行一次 Code Review ,這時形式比較隨意,大家可以臨時提出問題,讓主講人解答,在這個過程中可能聽的人并不會非常快地了解其中的詳細過程,但是講的人在這個過程中重新理了一下思路,對所寫的代碼被迫重新審視了一遍,在其中可能就會發現出解決問題的辦法。在 Code Review 時有時代碼非常多,但可以一個功能模塊一個功能模塊地從總體到局部,由淺入深層層遞進的方式進行。一次 Code Review 的時間不要太長,但可以分多次進行。 Code Review 中大家會提出問題和建議,集思廣益,多個人共同出主意,有些可能一個人沒有想到的問題會被大家發現,互相學習,共同進步。

    11.????????? 溝通與交流

    大部分員工的大部分時間是在公司里度過的,因此公司的生活成了大家主要組成部分。員工之間關系的融洽,交流的暢通顯得非常重要,同時大家也不想自己的生活這樣枯燥乏味,一直同機器打交道。溝通無處不在,交流隨時發生,有許多關系是在工作之外建立起來的。軟件公司內是很容易產生各種矛盾的,因為這是由你的工作性質所決定的,比如 QA 或用戶會對你的實現不滿意,提出各種要求時,我相信你有時會有所抱怨的,無形之中就產生了對立,發展到后來會有抵觸心理。我相信大部分人都會有此感受,這不是你的錯,這主要是由我們的工作性質決定的。如果你的工作是把財富帶給對方,則對方會非常歡迎你的到來,把你奉為財神爺來對待,同你的關系會非常融洽友好。因此我們需要在工作之外來消除這種對立矛盾的關系,建立一種融洽的工作氛圍。我們在平時吃飯的時候飯桌上大家互相聊天溝通。我們建立了 happy 郵件列表,其中會發一些幽默笑話之類的郵件,給我們緊張的工作增加點輕松的氛圍。在下班后大家可以組織一下活動,增加了公司的凝聚力。一個產品發布后組織一下旅游,讓繃緊的神經松弛一下,更好地迎接下一個挑戰。

    12.????????? 后記

    不同公司有不同的做法,我只是把我認為比較好的流程與管理方式呈現出來,讓大家有個借鑒,當然它也不是十全十美的,也不是放之四海而皆準的,如果你覺得某些地方對你有所幫助或值得推廣,這是本文最想達到的效果。非常感謝 I 公司給了我這么美好的經歷,也非常感謝 I 公司的同事們曾給我的巨大幫助,在此衷心地祝福 I公司 越來越壯大,逐步走向成功!也衷心地祝福我的同事們幸福快樂!

    posted on 2006-09-01 20:16 77 閱讀(219) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2006年9月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    導航

    統計

    常用鏈接

    留言簿(12)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    API文檔

    java開發與研究

    にほん

    上海房產

    東京生活

    數據庫大全

    編程與開發

    美國開發生活

    走向管理

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 污污污视频在线免费观看| 亚洲一卡2卡4卡5卡6卡在线99 | 亚洲天堂视频在线观看| a级毛片免费观看在线| 亚洲成a人片在线观看老师| 337P日本欧洲亚洲大胆艺术图| 青青草免费在线视频| 在线观看亚洲AV日韩A∨| 成人性生交大片免费看无遮挡 | 24小时在线免费视频| 亚洲人成影院在线| 8090在线观看免费观看| 亚洲黄网站wwwwww| 美女视频黄是免费的网址| 亚洲午夜一区二区电影院| 最近中文字幕无免费视频| 亚洲最大av资源站无码av网址| 成年人免费观看视频网站| 亚洲另类无码专区首页| 免费看小12萝裸体视频国产| 日韩毛片在线免费观看| 亚洲色精品aⅴ一区区三区| 日本免费在线观看| 亚洲乱码一二三四区国产| 精品久久免费视频| 四虎永久在线精品免费一区二区| 久久夜色精品国产亚洲av| 永久在线观看免费视频| 亚洲国产精品久久丫| 精品国产一区二区三区免费看| a高清免费毛片久久| 亚洲国产精品热久久| 国产免费看JIZZ视频| 人人鲁免费播放视频人人香蕉| 国产亚洲成AV人片在线观黄桃| 2020因为爱你带字幕免费观看全集| 中中文字幕亚洲无线码| 亚洲中文字幕视频国产| 18禁美女黄网站色大片免费观看| 亚洲 日韩经典 中文字幕| 国产福利电影一区二区三区,亚洲国模精品一区|