寫(xiě)代碼的人肯定都搜過(guò)代碼吧。既然有現(xiàn)成的,何必重新發(fā)明輪子呢?在代碼庫(kù)日益豐富、搜索功能越來(lái)越高級(jí)的背景下,代碼搜索已經(jīng)成為一項(xiàng)關(guān)鍵的軟件開(kāi)發(fā)活動(dòng),而且實(shí)際上也是一項(xiàng)非常有用的技能。那開(kāi)發(fā)者一般都是怎么去搜索代碼的呢?針對(duì)這個(gè)問(wèn)題,Google 特地在內(nèi)部進(jìn)行了一項(xiàng)案例研究。研究采用了調(diào)查和日志分析相結(jié)合的辦法,得出了一些有趣的結(jié)果。
研究人員在 15 天內(nèi)對(duì) Google 的 27 名軟件工程師進(jìn)行調(diào)查,然后結(jié)合搜索日志份分析發(fā)現(xiàn),開(kāi)發(fā)者搜索代碼的行為越來(lái)越頻繁了,基本上每工作日平均要進(jìn)行 5 次搜索會(huì)話、12 次代碼查詢(xún),比普通用戶(hù)的搜索行為還要多。
開(kāi)發(fā)者代碼搜索的目的各種各樣:比方說(shuō)代碼作用是什么?代碼在哪里實(shí)例化?代碼為什么會(huì)這樣工作?誰(shuí)負(fù)責(zé)編輯代碼?如何執(zhí)行一項(xiàng)任務(wù)等。其中想了解代碼怎么調(diào)用(How)的搜索占了 22%,想知道某段代碼是干什么(What)用的占了搜索的 20%,要查找某個(gè)類(lèi)在哪里(Where)被實(shí)例化的占到 8.5%,想要了解為什么某個(gè)東西會(huì)失敗的占到了 10%,而想要了解是誰(shuí)什么時(shí)候改動(dòng)了代碼的占 5%。
開(kāi)發(fā)者的代碼搜索工具有很多,包括 Koders、Google、Google Code Search、Krugle [14], SourceForge、GitHub、CodeGenie、Sourcerer、Satsy 等,其中不乏利用了更加語(yǔ)義化的功能,這對(duì)于提高搜索的命中率很有幫助。
研究認(rèn)為,相對(duì)一般用戶(hù),開(kāi)發(fā)者執(zhí)行搜索的頻率非常高,因此,搜索的速度和精度會(huì)對(duì)開(kāi)發(fā)者的生產(chǎn)力造成很大影響。此外,開(kāi)發(fā)者搜索的很大一部分精力都放在代碼樣例的查找上,所以必須加強(qiáng)對(duì)編程例子的支持。第三點(diǎn)是開(kāi)發(fā)者搜索的一般都是自己熟悉或比較熟悉的本地庫(kù),尋找的都是多少有些熟悉的代碼,鑒于此,開(kāi)發(fā)環(huán)境可能最好把代碼搜索功能給集成進(jìn)來(lái)。
你為什么要搜代碼?一般用什么工具搜代碼?去哪里搜?搜代碼又有什么秘訣呢?不妨在評(píng)論欄貢獻(xiàn)你的答案。