面向 Android 開發的代碼推薦:如何見效以及有何改進?

面向 Android 開發的代碼推薦:如何見效以及有何改進?

1 引用

Junwei Wu and Liwei Shen and Wunan Guo and Wenyun Zhao. Code recommendation for android development: how does it work and what can be improved? SCIENCE CHINA Information Sciences, 2017, 60(9): 1-14.

2 摘要

Android 應用程序是基於框架開發的,並且始終是基於模式的。對於 Android 開發人員,可以通過代碼推薦來幫助他們,以確保高開發效率和質量。現有的研究工作已經提出了幾種方法和工具以多種方式支持推薦。但是,代碼推薦在 Android 開發中如何工作以及哪些可以進一步改進以更好地支持 Android 開發。為了理解現實,我們對主要文獻中報告的當前代碼推薦技術和工具進行了定性審查。首先,基於多維框架將收集的作品分為三類。然後進行審核,以在滿足特定開發要求時繪製出在 Android 開發中採用推薦的全面圖像。在此基礎上,我們從兩個方面給出了代碼推薦的可能改進。首先,提出了一組改進建議,以增強最新代碼推薦技術的能力。其次,提出了可定製的工具框架,以簡化代碼推薦工具的設計,並且該工具框架能夠更輕鬆地集成推薦功能。

3 技術介紹

代碼推薦已成為現代 IDE 普遍提供的最受歡迎的功能之一。它通過為他們的任務提供建議來幫助開發人員提高編程效率,例如,接下來要調用哪種 API 方法或可以參考哪些示例代碼。除了 IDE 的功能外,研究還提出了多種推薦方法和文獻中的原型工具。 但是,尚不清楚代碼建議如何在 Android 開發中發揮作用,還需要進一步完善以更好地支持 Android 開發的內容。

為了瞭解現實並繪製代碼推薦在 Android 開發中的工作原理的全面圖像,我們對主要文獻中報道的當前代碼推薦技術和工具進行了定性審查。從文獻中收集的工作首先基於多維框架分為三類,然後針對特定的建議要求進行審查。審查結果表明,當前的代碼推薦技術能夠在不同程度上滿足推薦要求,但仍需要改進。因此,我們將從兩個方面進一步給出代碼推薦的可能改進。首先,提出了一組改進建議,其中總結了一些未來的研究方向,以減輕缺陷並增強當前代碼推薦技術的能力。其次,為了促進未來代碼推薦工具的設計和開發,我們提出了可定製的工具框架,其中涵蓋了各種代碼推薦功能。因此,Toolsmith 能夠通過根據特定要求定製框架來推導工具架構。

3.1 多維分類框架

該框架如圖 1 所示。每個維度都說明了推薦機制的特定功能。範圍,參數,方法,API 用法和代碼段是具有不同粒度的範圍,可以通過推薦機制得出。目標,該維度指示了建議被採納時的目標。搜索有助於通過構建以下內容來獲取相關的編程助手資源查詢用戶期望的語句。建議通過考慮編程上下文為用戶提供涵蓋示例代碼和設計解決方案的編碼建議。完成可以識別用戶的打字行為並填寫完整的程序元素,尤其是當他不確定這些元素的名稱時。另一方面,生成可以幫助構建一個或一組程序語句,並通過分析編程上下文將它們填充到必要的位置。語境。該維表示收集和分析的工件,以便得出準確的推薦結果。查詢,語句,方法主體,類主體和項目工件是定義的五個上下文組。第一組上下文表示查詢語句,開發人員通過這些查詢語句搜索編程建議。語句始終以自然語言或句子模板形成。其餘組對應於工件的不同粒度,這些工件可以是單個代碼語句,甚至可以是整個項目的工件。特別是,Android 項目工件除了程序代碼外,還包括特定於 Android 的資源,維度的不同基礎技術可能會導致可比的推薦質量。我們僅從文獻中解釋常用的技術。靜態信息是一種基於編程語言語法和靜態類型系統給出推薦結果的技術之一。啟發式規則是得出建議的技術通過基於當前上下文計算預定義規則。數據挖掘與機器學習是從大量資源中挖掘重複出現的編程模式的流行技術,例如在線網絡存儲庫。基於所收集的知識,他們能夠提供相似編程環境中的合適模式。除上述技術外,還有其他技術顯示了它們在代碼推薦中的有效性。我們將這些技術歸類其他。協同過濾 [2],手動資源收集和傳統的靜態和動態程序分析是文獻中已採用的典型技術。

面向 Android 開發的代碼推薦:如何見效以及有何改進?

圖 1 多維分類框架

3.2 推薦類別

在 SDK 快速升級的背景下,SDK 版本相關 API 的使用建議對於 Android 應用的成功至關重要。例如,在圖 2 中,SDK 21+ 中不推薦使用 android.hardware.Camera,但仍然可以調用它來保持向後兼容性。由於新的 API 增強了功能,建議開發者在官方文檔中採用 android.hardware.camera2 作為替代。另一個例子展示了報警 API(android)的區別。在 19 到 19+版本之間。set 和 setRepeating 這兩個方法將其行為從時間關鍵型更改為非時間關鍵型,以啟用跨應用程序的報警批處理。此外,還引入了一種新的 API 方法 setWindow 來支持不可延遲報警。Android 應用程序是基於 AndroidManifest 中指定的 Android SDK 的特定版本編譯的。xml。因此,如果開發人員使用特定 SDK 版本中不鼓勵使用的 api,那麼當應用程序以兼容模式運行時,應用程序的行為可能會受到影響[25]。針對這一問題,工程師們一致認為,這三類建議都可以在可接受的水平上支持這一要求。代碼搜索有助於通過與版本相關的查詢語句檢索結果。可能存在這樣一個缺陷:搜索引擎對 SDK 版本不敏感,因此開發人員無法澄清 api 是否已升級。基本推薦通常與 sdk 有著密切的關係。它能夠通知開發人員 API 的狀態。例如,Android studio 的編輯器可以警告開發人員不推薦的 API 以及基於指定 SDK 版本的替換。另一方面,高級建議可能會反饋所有已學習的相關 API 用法,例如 android.hardware.Camera 和 android.hardware.camera2 都可以檢索,因為底層機制沒有考慮 SDK 版本。然而,工程師們揭示了所有退出機制無法有效處理的關鍵情景。最值得注意的是如何改進 API 的使用以保持向後兼容性。以 camera API 為例,當 minSDKVersion 項在 AndroidManifest 中時。xml 的指定小於 21,單個版本的 CameraAPI 可能無法覆蓋具有不同 Android SKD 級別的所有設備。在這種情況下,可以應用適當的解決方案在運行時對當前設備 SDK 採用相應的 API 方法。在實現中,該解決方案可以由帶有條件語句的 if-else 子句表示(Build.VERSION.SDK-INT>=21)。

面向 Android 開發的代碼推薦:如何見效以及有何改進?

圖 2 不同 SDK 的 API 演進

3.3 工具框架的組件

將代碼推薦工具實現為 IDE 插件比將其實現為獨立系統更實用,因為插件可以與編程環境緊密集成。因此,我們以插件風格設計工具框架,如圖 3 所示。該框架包含四個不同層次的組件,分別命名為上下文層、引擎層、UI 層和訓練層。我們從層的角度描述了框架的組成,上下文層負責在推薦過程中獲取和監控編程上下文。針對不同的工作場景設計了兩個重要組件。首先,一旦需要分析上下文的建議被激活,上下文識別器就被實現來捕獲上下文,特別是周圍的程序。根據指定的捕獲要求,組件根據推薦點(即編輯器中需要推薦代碼的位置)確定其識別邊界。根據應用的推薦機制,可以捕獲程序語句、方法體甚至類體。此外,識別器還有助於從 AndroidManifest 中捕獲與項目相關的信息。比如目標 SDK 版本。這些上下文信息對於成功執行基本建議和高級建議非常有用。相反,上下文監視器對編程上下文的更改非常敏感,以便驅動即時建議。在這種情況下,組件連續地訪問和獲取編輯器狀態,並在上下文更改滿足預定義規則時通知開發人員。在實現層,這兩個組件都與開發環境緊密相關。他們可以通過調用 ide 提供的 api 來了解開發人員執行的操作。此外,周圍的程序和應用程序資源也可以通過其他組 ide api 獲得。

面向 Android 開發的代碼推薦:如何見效以及有何改進?

圖 3 可定製的工具框架

在 Android 開發中,代碼推薦已經被廣泛接受。現有的現代 IDE 主要基於靜態類型系統提供基本的推薦能力。同時,該領域的學術研究者繼續提供先進的解決方案,以提高推薦質量。本文基於多維分類框架,對所選出版物的分類機制進行了描述,並將其分為三類。對不同建議要求的典型代碼建議的應用進行了定性審查。結果表明,最新的代碼建議可以使開發人員受益,但在滿足特定的開發場景方面仍然存在不足。從方法和工具兩個方面提出了改進方向。提出了一套改進建議,以緩解不足,提高推薦能力。工具框架由一組組件組成,它幫助 toolsmith 在一個架構中組織三個推薦類別。對於今後的工作,我們計劃在總結出的推薦設施改進建議的基礎上,進行進一步的研究。它可能指向一個智能 IDE,它為 Android 開發人員提供了更多的自動功能。在大數據時代,通過從大規模的開發數據中挖掘模式,以類似的方式命名為“大代碼”,可以增強特徵的能力。大代碼覆蓋了空間維度和時間維度的編程信息。空間維度涉及現有應用程序的代碼。然後,通過從具有相似上下文的應用程序。時間維度的數據來源於開發人員的編程歷史。類、方法或其他類型資源的添加、刪除和修改表示開發人員在開發或維護階段的決策。因此,在類似的工作場景中也可以學習和推薦經驗。

4 本文主要貢獻

本文的貢獻概括為以下三個方面。首先,我們為以下方面提供了多維代碼推薦分類框架:藝術技巧和工具。其次,我們進行定性研究,針對一組需求場景的技術總結利弊。第三,我們提出了可定製的工具框架,以促進未來代碼推薦的設計工具。

致謝

感謝國家重點研發計劃課題:基於協同編程現場的智能實時質量提升方法與技術(2018YFB1003901)和國家自然科學基金項目:基於可理解信息融合的人機協同移動應用測試研究(61802171)支持!

本文由南京大學軟件學院 2018 級碩士段定翻譯轉述。


分享到:


相關文章: