來源:長沙北大青鳥大計校區(qū)|發(fā)布時間:2015-08-19 10:39:45
新的研究發(fā)現(xiàn),一個程序的核心功能僅在于一小部分封裝的代碼。
如果你是一個軟件開發(fā)人員,有人問你,你寫的代碼中有多少是真正在實現(xiàn)實際功能的,有多少是填充物、無價值的或者只是因為實際運行編程語言所需要的? 95%? 75%? 50%?都不是!新的研究發(fā)現(xiàn),只有大約5%的代碼是真正在提供核心功能。
研究人員認為,就像自然語言一樣,一些——甚至可能是絕大多數(shù)——寫下的代碼其實對于功能是不起作用的!秙talks of wheat》一文的作者認為,只有一部分代碼代表了功能的語義核心,我們稱之為精華,而其他的則是糟粕。
該作者表示,一個功能的核心可以被封裝于一個小型的關(guān)鍵字集合中,這被稱為“minimum distinguishing subset” (“最小的區(qū)別化子集”)或MINSET。我們可以通過將方法分解為詞素(即,通過空格或標點符號分隔代碼),丟棄那些對函數(shù)行為不重要的內(nèi)容,同時把剩下的映射到關(guān)鍵字中。然后將那些關(guān)鍵字導入到MINSET。
為了檢驗此理論,即MINSET中的代碼只占全部代碼的一小部分,研究人員下載了1000個來自Apache、Eclipse、GitHub和SourceForge最受歡迎的Java項目。在合計超過10億行的Java代碼中,先剔除簡單的方法( tokens低于50)。就只剩下不到190萬的不同方法,然后從中隨機抽取10,000條,確定它們的MINSET。研究中使用的代碼和數(shù)據(jù)可從Bitbucket下載。
以下為研究發(fā)現(xiàn)的主要結(jié)果:
不過有幾處關(guān)鍵的地方需要指出來。首先,MINSET本身是不可執(zhí)行的:它只是表征了核心功能的代碼的最小集合。剩下95%中的一些代碼(前面稱之為糟粕)也不是無用的,因為還需要它們來運行程序。其次,盡管這項研究僅著眼于Java代碼,不過由于語言的相似性,作者表示這些發(fā)現(xiàn)應(yīng)該也適用于其他語言,特別是C語言和C++。
關(guān)于此項工作的意義?研究人員指出了MINSETs的潛在應(yīng)用:
招生熱線: 4008-0731-86 / 0731-82186801
學校地址: 長沙市天心區(qū)團結(jié)路6號
Copyright © 2006 | 湖南大計信息科技有限公司 版權(quán)所有
湘ICP備14017520號-3