ReviewBoard代碼評審經驗總結
代碼評審
代碼評審(CodeReview),顧名思義是對代碼進行評審,是軟件工程的活動之一。 通過代碼評審可以保證代碼質量,促進團隊知識共享……好處多多。
版本控制與代碼評審
軟件工程的各個活動總是離不開工具的支持。
代碼評審工具首先必須和版本控制工具相結合的。
現在主流的兩種版本控制工具:SVN和GIT。
GIT有個Google開發的代碼評審工具Gerrit,可以在提交前進行代碼評審,評審通過之后才允許提交到版本庫。
其次,代碼托管平臺GitLab(號稱是GitHub的開源實現)也可以用來進行代碼評審。
如果版本控制工具是GIT,當然優先選擇用Gerrit或者GitLab來嘗試做代碼評審了。
但是如果版本控制工具是SVN呢?這目前還沒有發現很好的解決方案。
所以問題來了,在技術選型上,該選擇什么工具來進行代碼評審呢?
代碼評審工具選型
關于代碼評審,有很多支持工具,可以查看: 簡單實用的Code Review工具
開源的代碼評審工具有: ReviewBoard、 非死book Phabricator、 Codestriker、 Groogle、 Rietveld、 JCR(Java Code Reviewer)、 Jupiter、 ReviewClipse
商業版的代碼評審工具有: Atlassian Crucible、 Jetbrains Upsource
曾了解過上述大多數工具的使用,曾試過Crucible、Jupiter、ReviewBoard,最終綜合考量(如:流行度、易用度、文檔完善度)選擇了ReviewBoard。
ReviewBoard簡介
ReviewBoard是個開源的、可擴展的、友好的基于Web的代碼評審工具,是用Python框架Django開發的。
ReviewBoard的官方網站:https://www.reviewboard.org,其title為: Take the pain out of code review | Review Board
Take the pain out of code review 可以翻譯為:從代碼評審的痛苦中解脫出來
ReviewBoard的源碼托管在GitHub上: https://github.com/reviewboard/reviewboard
ReviewBoard的源碼也是通過ReviewBoard來進行評審的: https://reviews.reviewboard.org/
ReviewBoard的DEMO: http://demo.reviewboard.org/,可以通過DEMO簡單體驗下ReviewBoard的基本使用
ReviewBoard官方指南介紹
要了解ReviewBoard,最好的方式莫過于閱讀官方指南: https://www.reviewboard.org/docs/,ReviewBoard的官方指南有:
User Guide(用戶指南), Administration Guide(管理員指南),Web API Guide(Web API指南),Extending Review Board(擴展ReviewBoard)和 Frequently Asked Questions(常見問答FAQ)。
用戶指南的提綱:開始(包括代碼評審的介紹、一般工作流、賬戶設置)、使用評審請求(評審請求的創建、修改、發布、關閉等)、評審、搜索、使用MarkDown。
管理員指南的提綱:安裝、升級、優化、管理員UI、配置、擴展和站點管理。
Web API是RESTful架構,使得ReviewBoard可以用各種編程語言來集成。
ReviewBoard安裝及創建站點
ReviewBoard的安裝在互聯網上有很多博文分享,筆者的建議是 以官方指南為準,同時可以參考互聯網上的博文分享
例如,2.0版本在linux下安裝指南: https://www.reviewboard.org/docs/manual/2.0/admin/installation/linux/
在安裝完之后,是創建ReviewBoard站點: https://www.reviewboard.org/docs/manual/2.0/admin/installation/creating-sites/
可以創建多個ReviewBoard站點
筆者安裝過程中曾出現的問題及解決方式如下:
使用ReviewBoard進行代碼評審
代碼評審(CodeReview)一般有兩種形式:pre-commit-review,post-commit-review。
pre-commit-review是指代碼提交到代碼庫前進行代碼評審;
post-commit-review是指代碼提交到代碼庫后進行代碼評審。
pre-commit-review是指代碼提交到代碼庫前進行代碼評審;
post-commit-review是指代碼提交到代碼庫后進行代碼評審。
ReviewBoard同時支持以上兩種形式,代碼的評審主要通過ReviewRequest(評審請求)來進行的。
其中pre-commit-review的工作流為:
- 在代碼修改后,提交人創建代碼評審請求
- 相應的評審人通過評審請求對代碼進行評審,如果評審不通過,提交人可以更新該評審請求
- 評審通過之后,提交人將代碼提交至版比庫 </ul>
當然,筆者始終認為代碼評審的最好方式是提交前評審,這樣能夠很好的保證提交到版本庫的代碼都是經過評審的。
</div>
使用ReviewBoard客戶端或Eclipse插件
在Web界面創建/更新評審請求的過程是比較繁瑣的,好在有相應的工具簡化了這個過程:
RBtools是ReviewBoard官方提供的命令行客戶端,可以使用命令行進行評審請求的相關操作;
eReviewBoard是ReviewBoard的Eclipse插件;
TaoReviewBoard是淘寶開發的ReviewBoard的Eclipse插件。
筆者根據使用經歷,整理出如下eReviewBoard和TaoReviewBoard功能對比表格:
功能 | Tao-ReviewBoard(開源版) | eReviewBoard | </tr>|||||||||||||||||||
pre-commit-review | √ | √ | </tr>|||||||||||||||||||
post-commit-review | √ | × | </tr>|||||||||||||||||||
版本控制工具 | 目前只支持SVN | 支持SVN、CVS、GIT | </tr>|||||||||||||||||||
創建代碼評審請求 | √ | √ | </tr>|||||||||||||||||||
更新代碼評審請求 | √ | √ | </tr>|||||||||||||||||||
diff展示(比較編輯器中) | × | √ | </tr>|||||||||||||||||||
關閉或重新打開評審請求 | × | √ | </tr>|||||||||||||||||||
創建或更新評審請求是否方便 |
可以在多處右擊 可以跨Project 可以直接選擇文件來創建評審請求 (方便)
</td>
| 只支持在Project上右擊 不能跨Project 先列出變更文件再從中選取文件來創建評審請求 (不方便)
|
</tr>
|||||||||||||||||||
安裝過程 | 安裝方便 jar包放到plugins/dropins目錄即可 |
基于Mylvy和SCM Eclipse Plugin(Subclipse/Egit/CVS) 安裝時如果需要聯網下載相關依賴,較耗時 安裝參考: eReviewBoard簡要介紹及安裝 |
</tr>
</tbody>
</table>