在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ iOS/ 代碼審查的藝術(shù):Dropbox 的故事
與四軸無(wú)人機(jī)的通訊
在沙盒中編寫腳本
結(jié)構(gòu)體和值類型
深入理解 CocoaPods
UICollectionView + UIKit 力學(xué)
NSString 與 Unicode
代碼簽名探析
測(cè)試
架構(gòu)
第二期-并發(fā)編程
Metal
自定義控件
iOS 中的行為
行為驅(qū)動(dòng)開(kāi)發(fā)
Collection View 動(dòng)畫(huà)
截圖測(cè)試
MVVM 介紹
使 Mac 應(yīng)用數(shù)據(jù)腳本化
一個(gè)完整的 Core Data 應(yīng)用
插件
字符串
為 iOS 建立 Travis CI
先進(jìn)的自動(dòng)布局工具箱
動(dòng)畫(huà)
為 iOS 7 重新設(shè)計(jì) App
XPC
從 NSURLConnection 到 NSURLSession
Core Data 網(wǎng)絡(luò)應(yīng)用實(shí)例
GPU 加速下的圖像處理
自定義 Core Data 遷移
子類
與調(diào)試器共舞 - LLDB 的華爾茲
圖片格式
并發(fā)編程:API 及挑戰(zhàn)
IP,TCP 和 HTTP
動(dòng)畫(huà)解釋
響應(yīng)式 Android 應(yīng)用
初識(shí) TextKit
客戶端
View-Layer 協(xié)作
回到 Mac
Android
Core Image 介紹
自定義 Formatters
Scene Kit
調(diào)試
項(xiàng)目介紹
Swift 的強(qiáng)大之處
測(cè)試并發(fā)程序
Android 通知中心
調(diào)試:案例學(xué)習(xí)
從 UIKit 到 AppKit
iOS 7 : 隱藏技巧和變通之道
安全
底層并發(fā) API
消息傳遞機(jī)制
更輕量的 View Controllers
用 SQLite 和 FMDB 替代 Core Data
字符串解析
終身學(xué)習(xí)的一代人
視頻
Playground 快速原型制作
Omni 內(nèi)部
同步數(shù)據(jù)
設(shè)計(jì)優(yōu)雅的移動(dòng)游戲
繪制像素到屏幕上
相機(jī)與照片
音頻 API 一覽
交互式動(dòng)畫(huà)
常見(jiàn)的后臺(tái)實(shí)踐
糟糕的測(cè)試
避免濫用單例
數(shù)據(jù)模型和模型對(duì)象
Core Data
字符串本地化
View Controller 轉(zhuǎn)場(chǎng)
照片框架
響應(yīng)式視圖
Square Register 中的擴(kuò)張
DTrace
基礎(chǔ)集合類
視頻工具箱和硬件加速
字符串渲染
讓東西變得不那么糟
游戲中的多點(diǎn)互聯(lián)
iCloud 和 Core Data
Views
虛擬音域 - 聲音設(shè)計(jì)的藝術(shù)
導(dǎo)航應(yīng)用
線程安全類的設(shè)計(jì)
置換測(cè)試: Mock, Stub 和其他
Build 工具
KVC 和 KVO
Core Image 和視頻
Android Intents
在 iOS 上捕獲視頻
四軸無(wú)人機(jī)項(xiàng)目
Mach-O 可執(zhí)行文件
UI 測(cè)試
值對(duì)象
活動(dòng)追蹤
依賴注入
Swift
項(xiàng)目管理
整潔的 Table View 代碼
Swift 方法的多面性
為什么今天安全仍然重要
Core Data 概述
Foundation
Swift 的函數(shù)式 API
iOS 7 的多任務(wù)
自定義 Collection View 布局
測(cè)試 View Controllers
訪談
收據(jù)驗(yàn)證
數(shù)據(jù)同步
自定義 ViewController 容器轉(zhuǎn)場(chǎng)
游戲
調(diào)試核對(duì)清單
View Controller 容器
學(xué)無(wú)止境
XCTest 測(cè)試實(shí)戰(zhàn)
iOS 7
Layer 中自定義屬性的動(dòng)畫(huà)
第一期-更輕量的 View Controllers
精通 iCloud 文檔存儲(chǔ)
代碼審查的藝術(shù):Dropbox 的故事
GPU 加速下的圖像視覺(jué)
Artsy
照片擴(kuò)展
理解 Scroll Views
使用 VIPER 構(gòu)建 iOS 應(yīng)用
Android 中的 SQLite 數(shù)據(jù)庫(kù)支持
Fetch 請(qǐng)求
導(dǎo)入大數(shù)據(jù)集
iOS 開(kāi)發(fā)者的 Android 第一課
iOS 上的相機(jī)捕捉
語(yǔ)言標(biāo)簽
同步案例學(xué)習(xí)
依賴注入和注解,為什么 Java 比你想象的要好
編譯器
基于 OpenCV 的人臉識(shí)別
玩轉(zhuǎn)字符串
相機(jī)工作原理
Build 過(guò)程

代碼審查的藝術(shù):Dropbox 的故事

Dropbox 的 iOS 應(yīng)用中的每一行代碼,都是開(kāi)始于被添加到 Maniphest 中的一個(gè) bug 或者功能任務(wù),Maniphest 是我們的任務(wù)管理系統(tǒng)。當(dāng)一位工程師在上面接受一個(gè)任務(wù),那么在開(kāi)始寫代碼前相應(yīng)的責(zé)任就已經(jīng)賦予他。Phabricator 這個(gè)平臺(tái)包含了我們的代碼審查工具,這個(gè)代碼審查工具有很多很好的功能,但它在評(píng)估對(duì)象之間的相互協(xié)作上不是做的很好。為了彌補(bǔ)這點(diǎn),我們的工程師在開(kāi)始他們的工作之前需要知道審查他們的任務(wù)的人是誰(shuí)[1]。對(duì)于被審查代碼的工程師來(lái)說(shuō),這樣能確保在他們的團(tuán)隊(duì)中有一個(gè)橡皮鴨,這個(gè)橡皮鴨知道項(xiàng)目中一些改動(dòng)代碼的背景和原因,并且對(duì)代碼的設(shè)計(jì)決策上起到協(xié)助的作用。對(duì)于審查者來(lái)說(shuō),這有助于他們將一些變化考慮進(jìn)他們的開(kāi)發(fā)周期評(píng)估中,這樣有助于開(kāi)發(fā)周期評(píng)估的準(zhǔn)確。如果不出意外的話,我們的經(jīng)驗(yàn)會(huì)告訴我們提前做好計(jì)劃可以有效地避免審查代碼過(guò)程中的重復(fù)勞動(dòng)。針對(duì)項(xiàng)目中的變化做計(jì)劃可以像在白板前做交流一樣簡(jiǎn)單,也可以像寫一篇建設(shè)性文檔一樣深入。這都取決于我們自己的選擇。

[1] 我的團(tuán)隊(duì)中每個(gè)人都要審查代碼。新來(lái)的同事在可以獨(dú)立審查較大的任務(wù)之前,會(huì)先被分配一些比較少的代碼量。

隨著任務(wù)的展開(kāi),工程師需要一直謹(jǐn)記我們的代碼規(guī)范。這個(gè)規(guī)范是一個(gè)最佳實(shí)踐和一致規(guī)范的大融合,它的存在使我們不用去猜測(cè)我們應(yīng)該怎樣編碼,也使審查變得更容易[2]。因?yàn)檫@是一個(gè)大項(xiàng)目,開(kāi)發(fā)團(tuán)隊(duì)中沒(méi)有一個(gè)人能對(duì)整個(gè)項(xiàng)目有完美的映射或理解。所以我們的工程師需要依賴團(tuán)隊(duì)中其他工程師的幫助,將這些代碼的功能表現(xiàn)拼成一個(gè)整體,這有助與我們?cè)陂喿x代碼時(shí)能理解其中的邏輯。

[2] 即使這樣,每當(dāng)一個(gè)新成員加入時(shí),總還是不免要展開(kāi)一次關(guān)于使用 property 還是 ivar 的辯論。

當(dāng)這個(gè)任務(wù)的工作進(jìn)行到某個(gè)階段時(shí),我們的工程師很可能會(huì)做出一些明顯不合理的或者不受歡迎的決定。捕獲這個(gè)心理的最佳時(shí)間就是發(fā)生這一刻 -- 為將來(lái)向?qū)彶檎咦龊媒忉尩臏?zhǔn)備。去解釋這些變化,說(shuō)起來(lái)容易做起來(lái)難,我們的工程師被鼓勵(lì)使用 //TODO,//HAX,和 //FIXME 來(lái)在代碼中寫注釋。//TODO//FIXME 從字面上就可以理解它的意義,盡管后者會(huì)產(chǎn)生編譯警告,所以必須在下一次發(fā)布之前要被解決。//HAX 這個(gè)注釋比較有趣的地方。我們用它標(biāo)注那些用來(lái)繞過(guò) Apple 的 API 里的 bug 但又不容易一眼看明白的方法[3]。我們的注釋會(huì)寫上日期和寫這個(gè)注釋人的名字[4],在之后很多時(shí)候我們總會(huì)感激這些額外的上下文的[5]。

[3] 標(biāo)注里通常是第三方來(lái)源或者 radar 的鏈接,還有特殊的重現(xiàn)步驟。

[4] 比如像 //HAX:(ashleynh) 2015-03-09

[5] Hello

上一篇:插件下一篇:收據(jù)驗(yàn)證