你的代碼糟粕比精華要多得多
英文原文:Your code is far more chaff than wheat
新的研究發現,一個程序的核心功能僅在于一小部分封裝的代碼。
如果你是一個軟件開發人員,有人問你,你寫的代碼中有多少是真正在實現實際功能的,有多少是填充物、無價值的或者只是因為實際運行編程語言所需要的? 95%? 75%? 50%?都不是!新的研究發現,只有大約5% 的代碼是真正在提供核心功能。
研究人員認為,就像自然語言一樣,一些——甚至可能是絕大多數——寫下的代碼其實對于功能是不起作用的。《stalks of wheat》一文的作者認為,只有一部分代碼代表了功能的語義核心,我們稱之為精華,而其他的則是糟粕。
該作者表示,一個功能的核心可以被封裝于一個小型的關鍵字集合中,這被稱為“minimum distinguishing subset” (“最小的區別化子集”)或 MINSET。我們可以通過將方法分解為詞素(即,通過空格或標點符號分隔代碼),丟棄那些對函數行為不重要的內容,同時把剩下的映射到關鍵字中。然后將 那些關鍵字導入到 MINSET。
為了檢驗此理論,即 MINSET 中的代碼只占全部代碼的一小部分,研究人員下載了 1000 個來自 Apache、Eclipse、GitHub 和 SourceForge 最受歡迎的 Java 項目。在合計超過 10 億行的 Java 代碼中,先剔除簡單的方法( tokens 低于 50)。就只剩下不到 190 萬的不同方法,然后從中隨機抽取 10,000 條,確定它們的 MINSET。研究中使用的代碼和數據可從 Bitbucket 下載。
以下為研究發現的主要結果:
- MINSETS 出奇的小。方法的平均 MINSET 大小為 1.55 個關鍵字,最大值為6。
- MINSET 的大小并不隨方法規模的增加而變大。事實上,如果只看最大的 1000 個方法,其平均和最大 MINSET 關鍵字分別為降到 1.12 和4,這表明,正如作者所言:“即便是對于一些異常龐大的方法,MINSET 也是一項既獨特又靈活有效的指標。”
- 大多數代碼幾乎盡是糟粕。平均來說,在一個方法中只有 4.6% 的獨特詞素可以位列 MINSET。也就是說,95% 以上的代碼都是糟粕。
不過有幾處關鍵的地方需要指出來。首先,MINSET 本身是不可執行的:它只是表征了核心功能的代碼的最小集合。剩下 95% 中的一些代碼(前面稱之為糟粕)也不是無用的,因為還需要它們來運行程序。其次,盡管這項研究僅著眼于 Java 代碼,不過由于語言的相似性,作者表示這些發現應該也適用于其他語言,特別是C語言和C++。
關于此項工作的意義?研究人員指出了 MINSETs 的潛在應用:
- 改進代碼搜索——MINSETs 可用于基于相似查詢的代碼搜索結果排名。
- 智能 IDE——具備了 MINSETs 索引數據庫的 IDE 可用于提出類似的代碼,支持自動代碼填充,加快調試過程。
- 備選的編程形式——MINSETs 可用于支持基于關鍵字的編程,也就是說,我們可以通過一個小型的關鍵字組來創建可用的代碼。
-
譯文鏈接:http://www.codeceo.com/article/your-code-is-far-more-chaff-than-wheat.html
翻譯作者:碼農網 – 小峰