前面談完了團隊建立與軟體專案管理, 針對建立團隊的流程, 與軟體開發流程做了敘述. 接下來進入另一個主題"搭配IT工具".
前面談完了團隊建立與軟體專案管理, 針對建立團隊的流程, 與軟體開發流程做了敘述.在軟體專案管理的章節中, 雖然號稱是"軟體專案管理", 不過我幾乎沒用到PMP 的知識. 因為談的是"軟體團隊內"相關的專案管理部分, 並沒有包含整個專案團隊, 基本上在專案團隊中還是可以遵照PMP的準則去進行, 並沒有任何牴觸的地方. 再者, PMP有許多大大都是這方面的專家, 小的不敢在關公面前耍大刀, 所以關於PMP的部分就不多做探討. 接下來就進入另外一個大主體"搭配IT工具".![]()
市面上有許多的IT工具可以輔助一個軟體團隊的運作, 要錢的不少, 免費的也很多. 要使用哪些工具, 就看你的預算和工具本身和你的流程契合度而定. 基本上我覺得既然是軟體開發團隊, 應該就有能力架構一些免費的工具, 而不用花錢去買昂貴的套裝軟體來用 (開發專案管理軟體的公司不要打我, 錢很多又怕麻煩的公司還是可以買啦!
). 不過由於免費的, 所以工具和工具間的整合, 就得花一些心思去完成了. 從本篇開始, 我會介紹一些IT工具, 包含 SCM, Project Management, Issue Tracking system, KM, e-Learning, File Server 以及其他相關的管理工具. 我的重點會放在系統與流程的整合, 以系統與系統間的搭配. 至於每個系統如何安裝, 如何使用, 我覺得這個很容易就可以找到相關的資訊, 所以我頂多簡單的帶過. 使用IT工具的最終目的, 是希望能夠讓"大部分"的流程都自動化的進行, 尤其是 Daily build, Weekly build 這些例行性工作.![]()
首先談到SCM, 這是軟體開發團隊最重要的資產-Source Code的保存中心. 它提供版本控管追蹤, 權限控管, 協同作業等功能. 前面章節有提到建議使用的SCM為SVN或GIT. 也有大概敘述一下兩者的不同與選用的考量, 不管你使用哪套, 有幾個點是可以抓出來討論的:
(1)權限控管: 要與軟體團隊的角色配合, 比如只有軟韌體工程師可以修改程式碼, 其他人只能閱讀. 在SVN 和 GIT 都有 Groups / Users 的設計讓你達到這樣的功能. 你只要針對Groups 去設權限即可.
(2)帳號整合: 因為我們採用多套免費系統的大雜燴, 所以帳號整合是個問題, 當然你也可以每套系統有自己的帳號和密碼, 但缺點是你必須一個一個手動建立帳號, 而且使用者要不就是不能更改密碼, 如果可以更改密碼就會有密碼同步的問題. 所以最好還是有一套帳號整合的機制, 讓所有的系統都使用同一套認證機制, 這裡我採用的是PAM模組. 目前我選的系統大部分都有支援PAM, 沒有的也可以透過外掛來支援. 另外你如果自己有網域, 有Directory service, 也可以透過LDAP 來認證.![]()
(3)與外部GIT Sync: 如果你使用的是GIT, 又基於GPL license 的 Open Source 的軟體去開發, 就有Open source 的義務, 你就必須考慮到 GIT Sync 的問題. 看你是要直接跟外部的GIT 連結, 開一個 Branch 去開發, 或是自己內部架 GIT Server, 另外再用別的環境去跟外部GIT Server Sync 都是可以考慮的方法.
(4)Lock/Unlock: 如果你希望你的SCM在Build code 期間不要被其他人修改, 直到軟體發行後再開放, 你就可以加入 Lock/Unlock 的機制. 在SVN, GIT 都可以透過Hook 做到. (Hook 是個很好用的東西, 你可以透過他在commit 前後, update code 等時間點做一些"手腳") ![]()
(5) Auto build: 讓系統自動build code, 你只要寫好一些build code 的 Script 再配合上Cron或windows schedule 這類定時器, 就可達到這目的. 而SCM的部分則是要有Command line 的方式讓你可以在Script 中操作. 這部分對 SVN, GIT來說都是基本功能.
(6)版號結合: 與你所訂的版號規則做結合, 因為我們的目標是讓Build code 自動化, 所以除了在你的Source code 塞入版號外, 你還要有自動Update 版號的機制, 每次build code 時讓系統自動去更新版號, 自動Commit Code, 你可以寫在環境變數內, 也可以寫在Source code 內, 最後再透過Sed, awk 等指令去自動分析更改即可.
(7) Tag: 每次Build 的時候, 為你的版本貼上一個Tag 方便將來追蹤, 這個透過Command line script 就可以達成.
(8)備份: 定時為你的SVN, GIT 備份, 如果儲存空間對你來說不是問題, 建議天天都能做備份, 當然備份時能做成差異性備份以及考慮到異地備援會更好.
(9) Code Reviw : 前面有提過, 為了提高軟體品質, 可以進行Code review. 如果使用 SVN 或 GIT 你可以安裝 Review board 來達成你的目的. Review board 可以強迫所有的Code 都要經過review 後才能 Commit.
(10) 自動產生Release Note: 可以讓工程師在Commit code 時順便寫好Release Note. 方法是透過Log, 先定義好Log 的格式, 如Bug ID, Feature ID, 問題描述, 修改內容等, 透過Hook 去檢查格式, 符合才能上傳. 最後在發行版本時, 就可以透過抓系統Log, 自動將軟體的Release Note 產生出來.![]()
(11) 訊息通知: 可以去抓Mailer 來使用. 基本上review board 和 Mailer 都是通過Hook 去達成的. 什麼時候需要訊息通知? 需要Review code 的時候, 有人改了你的Code 的時候..., 這些都可以修改Mailer 相關的Hook 去達成.
(12) 與Project Management Server, Issue tracking system 整合: 看你選用的系統而定, 讓你可以知道每個Feature 或 Bug 完成的版號為何. 透過系統可以直接了解修改了哪些Code. 這對維護與管理而言非常有幫助.![]()
PS: 對於系統廠而言, 軟體的開發主要是架構在既有的平台上, 如Linux, Android, WINCE, 以及各式各樣的RTOS. 有些作業系統是Open Source 而且有固定在維護的官方網站. 這種情況下, 在選擇SCM時建議可以選擇跟官網使用一樣的SCM, 因為官方絕對已經先考慮過最適合的SCM了.
PS2: 針對SVN, GIT的一些功能, 有興趣的朋友歡迎跟我討論!