iOS開發(fā):Code Review 指南

杏仁醫(yī)生 iOS 端 Code Review 指南。

轉(zhuǎn)載注明出處

指南不僅針對(duì) Review 者,提交代碼前,自己也應(yīng)該按照步驟進(jìn)行檢查,避免低級(jí)錯(cuò)誤和無用的反工。

我們按照以下步驟來進(jìn)行 Code Review,來保證代碼質(zhì)量。

Merge Request

Code Review 的第一步是檢查 Merge Request 是否符合規(guī)范。提交者應(yīng)該保證 MR 的清晰:

  • MR 標(biāo)題說明改動(dòng)的模塊和改動(dòng)內(nèi)容,如果是fix bug,標(biāo)明 issue 標(biāo)號(hào)鏈接
  • 將改動(dòng)拆分成獨(dú)立的模塊進(jìn)行提交
  • 在日志中說明:改動(dòng)的原因(指向需求文檔、設(shè)計(jì)稿的鏈接)、改動(dòng)的內(nèi)容、涉及到的模塊、可能的副作用
  • 控制 MR 的代碼規(guī)模,避免出現(xiàn)海量改動(dòng)的 MR
  • 不要將無用的編碼中間步驟提交,本地分支的 commit 可以使用 git rebase 進(jìn)行合并,即:保證每個(gè) commit 都是可編譯通過、帶有完整功能的版本。

冒煙

冒煙檢測(cè)保證提交的 MR 是可編譯通過的,檢查:

  • 可以正常 Debug,運(yùn)行 App
  • 可以登陸、連接服務(wù)器、連接 socket,拉取數(shù)據(jù)。
  • 核心功能運(yùn)行OK

功能實(shí)現(xiàn)

檢查是否按照需求實(shí)現(xiàn)了功能(或者 fix 了 bug)。不必進(jìn)行詳盡的覆蓋,作簡(jiǎn)單的檢查就可以了。

  • UI是否還原了設(shè)計(jì)?
  • 功能的主流程是否按預(yù)期跑通了?
  • bug是否修復(fù)了?
  • 是否影響了其他模塊?改動(dòng)涉及的模塊是否運(yùn)行OK?

性能和體驗(yàn)

對(duì)于新的功能模塊,在功能實(shí)現(xiàn)需求的前提下,還要保證性能和用戶體驗(yàn)

  • 檢查設(shè)計(jì)稿沒有提及(或遺漏)的 UI 交互是否合理,是否需要和產(chǎn)品、設(shè)計(jì)進(jìn)行討論確認(rèn)
  • 檢查頁面的UI是否流暢,是否有不合理的閃爍、跳動(dòng)、掉幀
  • 檢查一些操作是否卡頓、等待時(shí)間是否過長
  • 檢查模塊內(nèi)存占用是否過高,是否有內(nèi)存泄漏的問題(Instruments -> Allocations / Xcode -> DebugSession -> View Memory Graph Hierarchy)
  • 檢查模塊是否占用大量計(jì)算資源,導(dǎo)致手機(jī)發(fā)燙

編碼風(fēng)格

檢查代碼保證代碼命名清晰、結(jié)構(gòu)合理、風(fēng)格統(tǒng)一。

好的代碼應(yīng)當(dāng)是可讀性很強(qiáng)的,在水平差不多的情況下,如果難以讀懂別人提交的代碼,一定是編碼結(jié)構(gòu)、風(fēng)格、命名等出了問題,這是在 Review 階段應(yīng)該提出改正的。

具體的編碼規(guī)范應(yīng)該參照 杏仁醫(yī)生 Objective-C 編碼規(guī)范

分成以下幾個(gè)方面對(duì)編碼進(jìn)行檢查:

命名

  • 檢查模塊、類、方法、變量命名是否合理清晰,是否有歧義
  • 檢查是否正確使用了前/后綴,沒有命名沖突

組織

  • 檢查是否有過長應(yīng)該拆分的方法(原則上一個(gè)方法不應(yīng)該超過一頁)
  • 檢查是否有過長的源文件(原則上一個(gè)源文件不應(yīng)該超過1000行)
  • 檢查代碼換行、注釋、分塊是否合理
  • 檢查文件的組織是否合理,模塊內(nèi)文件拆分合理、存儲(chǔ)位置正確

注釋

  • 檢查每個(gè)源文件是否正確添加了說明
  • 對(duì)于容易引起歧義、不好理解、奇怪的代碼段,檢查是否添加了必要的注釋
  • 檢查關(guān)鍵接口、參數(shù)是否添加了必要的注釋

接口

  • 檢查接口是否清晰,表意清楚,沒有副作用
  • 檢查接口設(shè)計(jì)是否合理,保證了模塊的獨(dú)立性和擴(kuò)展性

編碼

最后是檢查具體的編碼內(nèi)容,這一步不作具體的要求,屬于編碼經(jīng)驗(yàn)、數(shù)據(jù)結(jié)構(gòu)、模式設(shè)計(jì)等高級(jí)知識(shí)范疇,每個(gè)人有不同的理解。目的是提高代碼的質(zhì)量,共同進(jìn)步。

一些編碼檢查可以注意的點(diǎn):

  • 是否重復(fù)造輪子了?
  • 如果使用別人的輪子,這些三方庫、開源代碼、借鑒的實(shí)現(xiàn)方案等等是否好用合理?有沒有更好的方案?
  • API 使用有沒有兼容性的問題?
  • 數(shù)據(jù)結(jié)構(gòu)是否合理?復(fù)雜度是否OK?有沒有優(yōu)化的空間?
  • 設(shè)計(jì)模式是否OK?擴(kuò)展性魯棒性怎么樣?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,939評(píng)論 25 709
  • 寫作對(duì)于我,大抵是一種釋放方式吧,把心里想說的話一一寫下,記在紙上。我的簡(jiǎn)書名片上就是這樣寫的:“書我所愿,寫我所...
    Log君閱讀 645評(píng)論 16 18
  • 其實(shí)很早就想跟你進(jìn)行一次深度溝通,提筆卻覺得內(nèi)容很多,理不清頭緒,不知從何說起。這篇文章算是我對(duì)自己從小到...
    9fb7263265f5閱讀 344評(píng)論 0 0
  • “夢(mèng)里花落知多少”每當(dāng)耳邊響起這句熟悉的話時(shí),總是會(huì)感到略帶的那些孤獨(dú)。 回頭看看身邊的親人,有多少已...
    顧婳扦閱讀 291評(píng)論 0 1
  • 有的妹子生活中真的炒雞好看啊,但拍出來的照片就是沒有本人辣么好看(真的好氣喔是不是(?_?))。先撇開攝像師這個(gè)外...
    喜歡詩詞的女孩閱讀 279評(píng)論 0 0

友情鏈接更多精彩內(nèi)容