1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu gợi Ý api trong mã nguồn java

60 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên cứu gợi ý API trong mã nguồn Java
Tác giả Tran Manh Cuong
Người hướng dẫn TS. Võ Đình Hiếu
Trường học University of Engineering and Technology
Chuyên ngành Kỹ thuật phần mềm
Thể loại Luận văn tốt nghiệp thạc sĩ
Năm xuất bản 2023
Thành phố Hanoi
Định dạng
Số trang 60
Dung lượng 1,08 MB

Nội dung

NGHIÊN CỨU GỢI Ý API TRONG MÃ NGUỒN JAVA ĐỂ TẠO CÁC GỢI Ý TỪ API GIÚP TẠO DỰNG BÊN TRONG MÃ NGUỒN JAVA GIÚP ÍCH RẤT NHIỀU TRONG MÃ NGUỒN

Trang 1

NGHIÊN CỨU GỢI Ý API TRONG

LUẬN VĂN TỐT NGHIỆP THẠC SĨ

Chuyên ngành: Kỹ thuật phần mềm

HÀ NỘI - 2024

Trang 2

NGHIÊN CỨU GỢI Ý API TRONG

Trang 3

VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY

Tran Manh Cuong

A STUDY RECOMMENDATION APPROACH

FOR API SEQUENCES

MASTER’S THESIS Major: Software engineering

Supervisor: Dr Vo Dinh Hieu

Hanoi - 2023

Trang 4

LỜI CAM ĐOAN

Tôi xin cam đoan: luận văn tốt nghiệp với đề tài “Nghiên cứu gợi ý API trong mãnguồn Java” trong báo cáo này là của tôi, chưa từng được nộp như một luận văntốt nghiệp hay báo cáo nghiên cứu khoa học nào tại Trường Đại học Công Nghệhoặc bất kỳ trường đại học nào khác Những gì tôi viết ra không có sự sao chép

từ các tài liệu, không sử dụng kết quả của người khác mà không trích dẫn cụ thể.Đây là công trình nghiên cứu cá nhân tôi tự phát triển, không sao chép mã nguồncủa người khác Nếu vi phạm những điều trên, tôi xin chấp nhận tất cả những truycứu về trách nhiệm theo quy định của Trường Đại học Công Nghệ

Hà Nội, ngày tháng năm 2023

Học viên cao học

Trang 5

LỜI CẢM ƠN

Lời đầu tiên cho phép em được gửi lời cảm ơn tới Khoa Công nghệ thông tin– Trường Đại học Công Nghệ ĐHQG Hà Nội đã tạo điều kiện thuận lợi cho emđược học tập, nghiên cứu và thực hiện luận văn tốt nghiệp này

Em cũng xin được bày tỏ lòng biết ơn sâu sắc tới thầy Võ Đình Hiếu đã tậntình hướng dẫn, đóng góp những ý kiến xác đáng để em có thể hoàn thành luậnvăn một cách tốt nhất

Em cũng vô cùng biết ơn những thầy cô trong trường đã tận tình giảng dạy,trang bị cho em những kiến thức quan trọng để em có hành trang vững chắc chocon đường học vấn của mình

Em xin được gửi lời cảm ơn chân thành tới anh Nguyễn Văn Sơn cũng nhưtoàn thể các anh chị và các bạn tại phòng nghiên cứu và phát triển RD320 thuộcKhoa Công Nghệ Thông Tin – Trường Đại học Công Nghệ đã luôn ủng hộ, độngviên em trong quá trình hoàn thành luận văn

Cuối cùng, với luận văn này em cũng xin cảm ơn tới quỹ VinIF đã tài trợ họcbổng đào tạo thạc sĩ trong nước với mã số VINIF.2022.ThS.10 Đây là nguồn tàichính vô cùng quan trọng để em hoàn thành chương trình đào tạo

Chúc mọi người luôn luôn vui vẻ và gặt hái được nhiều thành công trongcuộc sống

Trang 6

TÓM TẮT

Tóm tắt: Hiện nay, API là một công cụ hữu ích cho các nhà phát triển phần mềm

để tích hợp các chức năng từ các thư viện bên thứ ba vào ứng dụng của họ Nócung cấp một tập hợp các hàm, lớp, phương thức hoặc giao thức được định nghĩasẵn mà các nhà phát triển có thể sử dụng để truy cập các tính năng hoặc dữ liệucủa một hệ thống hoặc thư viện bên ngoài API đóng vai trò là cầu nối giữa cácthành phần phần mềm khác nhau, cho phép chúng giao tiếp và trao đổi dữ liệuhiệu quả Tuy nhiên, việc sử dụng các API không phải lúc nào cũng dễ dàng, để sửdụng các API một cách chính xác, nhà phát triển cần phải học kỹ tài liệu API vàtìm kiếm các đoạn mã mẫu để hiểu cách sử dụng chúng Nhằm hỗ trợ các nhà pháttriển gọi API một cách nhanh chóng và hiệu quả, luận văn này giới thiệuMFLUTE,một phương pháp mới khai thác phân tích chương trình và ứng dụng mô hình ngônngữ thống kê để đề xuất các lời gọi API trong mã nguồn Java Cụ thể, ứng với mộtđoạn mã chưa hoàn thành (ngữ cảnh), MFLUTE sử dụng các kỹ thuật phân tíchchương trình để phân tích ngữ cảnh và tạo ra một danh sách các ứng viên API tiềmnăng Sau đó, công cụ sẽ sử dụng một mô hình ngôn ngữ để xếp hạng và đề xuấtnhững cái có triển vọng nhất Kết quả thử nghiệm của luận văn trên một bộ dữ liệulớn của các dự án thực tế cho thấy MFLUTE có thể đề xuất gọi API chính xác với

độ chính xác Top-1 là 71.34% Hơn nữa,MFLUTE có thể cải thiện lên đến 12% về

độ chính xác của các lời gọi đề xuất so với nghiên cứu tốt nhất hiện nay

Từ khóa: phân tích chương trình, trình tự chuỗi lời gọi, đề xuất API, mô hình

ngôn ngữ

Trang 7

Abstract: Nowadays, API is a common approach to utilizing third-party libraries

in software development It provides a set of predefined functions, classes, ods, or protocols that developers can use to access the features or data of externalsystems or libraries An API acts as a bridge between different software compo-nents, enabling them to communicate and exchange data efficiently Nonetheless,using APIs is not always straightforward and simple, to correctly call APIs, devel-opers need to carefully learn the API documentation and search for code samples

meth-to understand their usages This process can be time-consuming and error-prone,especially for novice developers or unfamiliar APIs In order to efficiently andeffectively support developers in properly calling APIs, this master thesis intro-duces MFLUTE, a new approach to exploit program analysis and statistical lan-guage model to recommend APIs to call Specifically, for a given partially com-pleted code (context), MFLUTE employs program analysis techniques to analyzethe context and generate a list of potential API candidates Then, this method uses

a language model to rank and suggest the most promising ones The experimentalresults on a large dataset of real-world projects show that MFLUTE can correctlyrecommend API calls with the Top-1 accuracy of 71.34% Furthermore,MFLUTE

can improve state-of-the-art approaches by up to 12% in recommending accuracy

Keywords: program analysis, method sequences, API recommendation, language

model

Trang 8

Mục lục

2.1 Cái khái niệm cơ bản 6

2.1.1 Ngôn ngữ lập trình Java 6

2.1.2 Cây cú pháp trừu tượng 8

2.1.3 Đồ thị dòng điều khiển 9

2.1.4 Đồ thị dòng điều khiển lời gọi 11

2.1.5 Mô hình ngôn ngữ và mô hình ngôn ngữ N-gram 12

2.2 Công cụ sử dụng 13

2.2.1 Eclipse JDT 14

2.2.2 Natural Language Toolkit 15

Trang 9

2.3 Nghiên cứu liên quan 15

Chương 3 Phương pháp gợi ý API trong mã nguồn Java 18 3.1 Ý tưởng khởi đầu 18

3.2 Hướng tiếp cận bài toán 21

3.2.1 Cây kiểu dữ liệu 23

3.2.2 mCFG và chuỗi phương thức 24

3.2.3 Xác định các ứng viên API 26

3.2.4 Xếp hạng các gợi ý 32

Chương 4 Cài đặt công cụ và thực nghiệm 34 4.1 Cài đặt công cụ 34

4.1.1 Thiết lập thực nghiệm 35

4.1.2 Tập dữ liệu 35

4.1.3 Các công cụ bổ trợ 36

4.1.4 Độ đo 37

4.2 Kết quả thực nghiệm 37

4.2.1 Độ chính xác 37

4.2.2 Thời gian chạy 40

4.3 Tích hợp vào trình phát triển 42

Trang 10

Danh sách hình vẽ

1.1 Ví dụ về gợi ý API trên IntelliJ IDEA 3

2.1 Ví dụ về cây AST 8

2.2 Đoạn mã nguồn đơn giản 9

2.3 Đoạn mã ví dụ về các lời gọi phương thức trong mã nguồn 10

2.4 CFG ứng với mã nguồn Hình 2.3 11

2.5 mCFG tương ứng của biến writer Hình 2.4 12

2.6 Các đối tượng cơ bản trong JDT 14

3.1 Ví dụ cơ bản về lời gọi API trong mã nguồn 19

3.2 Kiến trúc cơ bản của vòng đời ứng dụng Android [22] 20

3.3 Tổng quan về hướng tiếp cận 22

3.4 Khai báo lớp AppWidgetService trong mã nguồn AOSP 23

3.5 Biểu diễn lại phương thức setBackground 25

3.6 Ví dụ về đoạn mã cần được gợi ý lời gọi API kế tiếp 27

4.1 Hiệu suất củaMFLUTE so với APIRecX 39

4.2 Thời gian dự đoán của MFLUTE 41

4.3 Triển khai công cụ trên IDE thực tế 43

Trang 11

Danh sách bảng

2.1 Các mức truy cập trong Java 7

3.1 Mô tả thuật toán tìm kiểu thoả mãn 29

4.1 Hiệu suất củaMFLUTE so với APIRecX 38

4.2 Hiệu suất củaMFLUTE trên Netbeans và Eclipse 40

Trang 12

Thuật ngữ

API Application Programming Interface Giao diện lập trình ứng dụng

AST Abstract Syntax Tree Cây cú pháp trừu tượng

CFG Control Flow Graph Đồ thị dòng điều khiển

mCFG method-Control Flow Graph Đồ thị dòng điều khiển cho lời gọi phương thức JDT Eclipse Java development tools Công cụ phân tích Java của Eclipse NLTK Natural Language Toolkit Công cụ xử lý ngôn ngữ

Trang 13

Chương 1

Đặt vấn đề

API là viết tắt của Giao diện lập trình ứng dụng (Application Programming Interfaces),

là một cách cho phép các ứng dụng và thư viện khác nhau giao tiếp và trao đổi dữ liệu vớinhau API có nhiều loại khác nhau, nhưng một loại phổ biến là API REST được sử dụngtrong nền tảng Web Tuy nhiên, trong bài toán này sẽ tập trung đến loại API dưới dạngcác thư viện trong chương trình Java thuần tuý Đối với Java, các thư viện này thườngđược đóng gói trong các tệp tin có đuôi jar Các lời gọi API trong bài toán của luậnvăn là các lời gọi phương thức trong mã nguồn Java

Giao diện lập trình ứng dụng thường được sử dụng để cải thiện năng suất trong quátrình phát triển các sản phẩm phần mềm Các API thường sử dụng thông qua các nguồnbên thứ ba hoặc từ chính nền tảng đang phát triển Khi khảo sát mã nguồn của 1000 dự

án Java chất lượng cao và được xếp hạng cao nhất trên GitHub cho thấy rằng hơn mộtnửa lệnh gọi phương thức (52,3%) là từ các thư viện của bên thứ ba Kết quả này chothấy tầm quan trọng của việc sử dụng API một cách cẩn thận Tuy nhiên, phải mất rấtnhiều công sức để lập trình viên có thể làm quen với tất cả các API trong các thư viện lớn

và sử dụng chúng một cách chính xác trong các chương trình Thật vậy, để hoàn thànhchương trình đang phát triển với các API phù hợp, các nhà phát triển cần nghiên cứu kỹcách sử dụng API từ các tài liệu và ví dụ minh hoạ được cung cấp trong các mã nguồn cósẵn tương ứng Hơn nữa, với các thư viện mới và không quen thuộc, các nhà phát triểnthường cần tìm hiểu xem các thư viện đó có chứa bất kỳ API nào có thể hỗ trợ các tác vụđang phát triển hay không Với vấn đề này, ý tưởng của luận văn cho thấy việc đề xuất

Trang 14

gợi ý API tự động là vô cùng cần thiết khi hỗ trợ các nhà phát triển sử dụng các thư việncủa bên thứ ba một cách hiệu quả.

Gợi ý mã nguồn tự động, đặc biệt là đề xuất API gần đây đã trở thành một bài toánphổ biến trong các nghiên cứu học thuật và ứng dụng thực tiễn Chẳng hạn, trong môitrường phát triển tích hợp (Integrated Development Environment - IDE), gợi ý mã nguồn

là tính năng quan trọng bắt buộc phải có Tính năng này dự kiến sẽ giảm thời gian pháttriển mã nguồn bằng cách cung cấp các đề xuất các phần mã nguồn tiềm năng như tênbiến, hàm, Tuy nhiên, các đề xuất do các IDE hiện tại tạo ra chủ yếu dựa trên khả năngphù hợp về kiểu và khả năng truy cập của các biến và lớp Ví dụ, để gợi ý vế phải củamột kiểu chuỗi (String), IDE có thể gợi ý các biến có kiểu là String và sắp xếp theo thứ

tự bảng chữ cái Do đó, những gợi ý này thường bị hạn chế và thể xử lý trong các trườnghợp phức tạp Lập trình viên đôi khi lại gặp khó khăn vì chính những gợi ý này khi phảimất công sức lựa chọn trong lượng lớn gợi ý mà IDE cung cấp Vì vậy, chúng ta cần mộtgiải pháp để đưa ra các gợi ý hiệu quả bằng cách sắp xếp chúng một cách hợp lý và thugọn lại các gợi ý không hữu ích

Các nghiên cứu gần đây về gợi ý mã nguồn [1–4] đã đạt được những kết quả đầyhứa hẹn Những nghiên cứu này khai thác các thuộc tính của chương trình và ngữ cảnhtrong các mã nguồn khác nhau để đề xuất các loại biểu thức khác nhau Chẳng hạn, Liu

và cộng sự [3] đã đề xuất một giải pháp sử dụng mô hình ngôn ngữ mạng nơ-ron để tạo

đề xuất cho biến số, từ khóa, dấu câu, v.v Aroma [4] đề xuất mã bằng cách so sánh đoạn

mã nguồn đang phát triển với các mã nguồn trong kho dữ liệu lớn, sau đó tận dụng các

mã tương tự để tạo đề xuất Ngoài ra, nghiên cứu AutoSC [2] kết hợp phân tích chươngtrình và mô hình ngôn ngữ thống kê để hoàn thành các câu lệnh chưa hoàn thiện

Bên cạnh đó, một số nghiên cứu đặc biệt tập trung vào việc đề xuất một lời gọiAPI/hàm ứng với ngữ cảnh đang được soạn thảo [5–9] Chẳng hạn, Xie và cộng sự [6] đã

đề xuất phương pháp gợi ý API bằng cách khai thác các mẫu sử dụng API trong một cơ

sở dữ liệu lớn Họ xây dựng các biểu đồ phụ thuộc giữa API và ngữ cảnh của mã nguồn,

sử dụng kết hợp các yếu tố tương đồng giữa chúng để khai thác các mẫu sử dụng API.Ngoài ra, Niu và cộng sự [7] cũng nghiên cứu phương pháp gợi ý API bằng cách biểu thị

mã nguồn dưới dạng một mạng liên kết các cách sử dụng của từng đối tượng, là một tậphợp các lệnh gọi phương thức được gọi trên một lớp API duy nhất Phương pháp gợi ý

Trang 15

API được Gao và cộng sự [8] tập trung vào mảng phát triển các ứng dụng Android bằngcách khai thác tài nguyên dữ liệu trong các cửa hàng ứng dụng như Google Play Store.Còn với nghiên cứu được đánh giá tốt nhất, APIRecX [5], sử dụng mô hình học máymạnh là GPT để đề xuất các API chính xác Mặc dù các phương pháp hiện tại đề xuấtAPI một cách hiệu quả cho thư viện bên thứ ba tiêu chuẩn và phổ biến trong cộng đồnglập trình viên, nhưng hiệu suất của chúng giảm đáng kể khi áp dụng với các loại API dongười dùng tự xây dựng hoặc API nội bộ chưa được công bố mã nguồn trước đó [10].

Hình 1.1: Ví dụ về gợi ý API trên IntelliJ IDEA

Trên Hình 1.1 đưa ra một ví dụ minh hoạ việc gợi ý các API của đối tượng Javatrên IntelliJ IDEA Có thể thấy trên hình, IDE đưa ra một danh sách các gợi ý là các lờigọi API và cho người dùng chọn Các IDE thường gợi ý ngay sau khi người dùng dừnglại trong lúc gõ hoặc sử dụng một số phím tắt như Ctrl + Space Đây cũng là tính năng

có sẵn trong các công cụ phát triển mã nguồn giúp người dùng lựa chọn một danh sáchcác gợi ý có sẵn

Luận văn này đề xuất một phương pháp tiếp cận mới và hiệu quả cho đề xuất API,

MFLUTE Mục tiêu của phương pháp nghiên cứu sẽ đề xuất các API bằng cách kết hợp

các kỹ thuật phân tích chương trình và mô hình ngôn ngữ thống kê Cụ thể,MFLUTEtiến

Trang 16

hành phân tích đoạn mã nguồn còn đang viết dở (ngữ cảnh) để tạo các biểu thức ứng viêndựa trên đặc tả của ngôn ngữ lập trình Các ứng viên là các lệnh gọi API được tạo sẽ đápứng các quy tắc cú pháp và ngữ nghĩa trong đặc tả Java Về mặt ngữ nghĩa, phương phápnày sẽ xem xét đến thông tin về kiểu dữ liệu và khả năng truy cập của các thành phầntrong mã nguồn của toàn chương trình Các quy tắc đặc tả ngôn ngữ lập trình sẽ được ápdụng cho việc đánh giá các gợi ý về mặt cú pháp Một mô hình ngôn ngữ sẽ chịu tráchnhiệm dự đoán xác suất về khả năng gọi phương thức API tương ứng với ngữ cảnh củachúng Hiệu quả của phương pháp kết hợp các kỹ thuật này cũng đã được chứng minhtrong các nghiên cứu trước đây về bài toán gợi ý mã nguồn tự động nói chung khác [2,11] Những nghiên cứu này đã chỉ ra rằng việc kết hợp các kỹ thuật phân tích chươngtrình và mô hình ngôn ngữ có thể tạo ra các mã nguồn gợi ý chính xác và đa dạng hơn

so với việc chỉ sử dụng một trong hai kỹ thuật Điều này cho thấy rằng phương pháp đềxuất trong luận văn này có thể áp dụng được cho nhiều bài toán liên quan đến gợi ý mãnguồn hiện tại

Bài toán cụ thể mà luận văn này cần giải quyết là đề xuất các lời gọi API cho mộtđoạn mã nguồn Java chưa hoàn thiện xong Đầu vào của bài toán là một đoạn mã nguồnJava và vị trí con trỏ tại nơi cần gợi ý lời gọi API Đầu ra của bài toán là một danh sáchcác lời gọi API phù hợp với ngữ cảnh của đoạn mã nguồn Để đầu ra được phù hợp,chúng ta cần thỏa mãn các điều kiện tiên quyết sau:

• Các gợi ý là các lời gọi API hay lời gọi phương thức trong Java,

• Các lời gọi API được gợi ý phải tuân theo cú pháp và ngữ nghĩa của ngôn ngữ lậptrình Java, không phải là các lời gọi sai kiểu, sai số lượng tham số, sai tên phươngthức, v.v và khiến chương trình xảy ra lỗi khi thực thi,

• Danh sách đầu ra phải được sắp xếp theo thứ tự giảm dần của xác suất xuất hiện củacác lời gọi API trong ngữ cảnh của đoạn mã nguồn Các lời gọi API có xác suất caohơn sẽ được ưu tiên hiển thị trước

Đối tượng được phân tích cụ thể trong luận văn này nhắm đến ngôn ngữ Java đểphân tích các đặc thù ngôn ngữ này trong các trường hợp cụ thể và xây dựng các công cụtương ứng Tuy nhiên, phương pháp này mang tính tổng quát có thể được áp dụng chonhiều ngôn ngữ hướng đối tượng và ngôn ngữ dạng khác

Trang 17

Kết quả nghiên cứu của luận văn này sẽ cần đáp ứng được các điều kiện đầu ra trênđây Bên cạnh đó, phương pháp trong luận văn phải được đánh giá và so sánh với cácphương pháp hiện có trên các tiêu chí như độ chính xác, thời gian thực hiện, khả năng

áp dụng vào các công cụ thực tế, v.v Từ đó sẽ đánh giá được các giá trị đóng góp và tínhkhả thi khi triển khai của luận văn

Phần còn lại của luận văn được trình bày với cấu trúc như sau: Chương 2 sẽ liệt

kê các kiến thức cơ sở liên quan được áp dụng trong quá trình xây dựng phương pháp.Chương này cũng bao gồm nội dung các công cụ phân tích mã nguồn và xây dựng môhình ngôn ngữ Phương pháp nghiên cứu của luận văn được mô tả chi tiết trong Chương 3.Tiếp theo, Chương 4 trình bày cách thực nghiệm để đánh giá độ hiệu quả của phươngpháp Nội dung đánh giá bao gồm thực nghiệm so sánh với nghiên cứu được đánh giátốt nhất và tổng quát trên một bộ dữ liệu lớn Sau đó một số nghiên cứu liên quan tớibài toán sẽ được trình bày qua, đây là những nghiên cứu đem lại nhiều ý tưởng có thể ápdụng được một cách hiệu quả Cuối cùng, Chương 5 tổng kết lại kiến thức và nêu ra một

số định hướng nghiên cứu tiếp theo của đề tài này

Trang 18

Chương 2

Kiến thức cơ sở

Chương 2 này sẽ trình bày một số nội dung nền tảng liên quan đến bài toán gợi ý APItrong mã nguồn Java Đầu tiên là mục một số nội dung giới thiệu qua về các kiến thức cơbản Java - một ngôn ngữ được IEEE (Institute of Electrical and Electronics Engineers)1xếp hạng hàng đầu trong các năm gần đây cũng như được áp dụng trong luận văn này

sẽ được giới thiệu Tiếp theo là kiến thức về các cấu trúc dữ liệu sử dụng trong phântích chương trình như cây cú pháp trừu tượng (Abstract Syntax Tree - AST) và đồ thịdòng điều khiển (Control-flow graph - CFG) Bên cạnh đó, sẽ giới thiệu thêm một kháiniệm mới trong quá trình phát triển phương pháp này là mCFG (method - Control-flowgraph) Phần sau đó sẽ trình bày về các khái niệm cơ bản của mô hình ngôn ngữ thông

kê Sau đó sẽ là phần trình bày về các công cụ đã sử dụng trong quá trình thực hiện luậnvăn này Và cuối cùng là một số nghiên cứu liên quan đến bài toán đề ra

2.1 Cái khái niệm cơ bản

2.1.1 Ngôn ngữ lập trình Java

Java là ngôn ngữ lập trình hiện tại do tập đoàn Oracle phát triển Đây là ngôn ngữ lậptrình hướng đội tượng dựa trên các lớp Các ứng dụng Java chạy trên đa nền tảng từWindows/Linux/macOS hay thậm chí BSD (Berkeley Software Distribution) và các hệ

1 https://www.ieee.org/

Trang 19

điều hành di động Mã nguồn Java thường được biên dịch sang một dạng trung gian đượcgọi là bytecode trước khi thực thi trên máy ảo Java.

Với càng ngày càng có nhiều nền tảng như Spring hay Android, Java không chỉdừng lại trong phát triển ứng dụng cho máy tính Java được sử dụng trong quá trình pháttriển ứng dụng Web, di động, , hay thậm chí là các nền tảng nhúng giới hạn về phầncứng và tiêu thụ điện năng thấp

Đối với Java và một số ngôn ngữ lập trình đều có các thuộc tính truy cập2 Cácthuộc tính truy cập này thể hiện mức độ khác nhau của việc sử dụng các trường, phươngthức hay lớp tại một vị trí khác trong mã nguồn hay không Ví dụ, đối với một phươngthức có thuộc tính private, phương thức này không thể truy cập tại một lớp khác ngoạitrừ lớp khai báo nó Bảng 2.1 thể hiện khả năng truy cập ứng với các thuộc tính trongJava Việc xác định các thuộc tính này sẽ được ứng dụng vào việc kiểm tra ngữ nghĩacủa mã nguồn ở các phần sau

Bảng 2.1: Các mức truy cập trong Java

Thuộc tính Lớp Gói Lớp con Vị trí bất kỳ

2 https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Trang 20

2.1.2 Cây cú pháp trừu tượng

Cây cú pháp trừu tượng (AST - Abstract Syntax Trees) một cấu trúc dữ liệu dạng câybiểu diễn cấu trúc cú pháp của mã nguồn viết bằng một ngôn ngữ lập trình Cây dữ liệunày thường được sinh ra bởi trình phân tích cú pháp trong quá trình biên dịch mã nguồn.Mỗi nút biểu thị một đối tượng trong mã nguồn, ví dụ như: tên, chuỗi số, biểu thức, câulệnh, v.v Các nút có thể chứa các nút con, ví dụ nút của lời gọi phương thức sẽ chứa cácnút là các tham số Cây cú pháp trừu tượng có vai trò quan trọng trong quá trình biêndịch mã nguồn khi là cấu trúc dữ liệu trung gian giữa mã nguồn ban đầu và mã máy đích.Cây AST thường được dùng làm cấu trúc dữ liệu trung gian của mã nguồn để sinh ra cácdạng biểu diễn khác của nó, ví dụ như đồ thị về dòng điều khiển hay dòng dữ liệu củachương trình [12] Chính vì thế cây AST được áp dụng trong nhiều bài toán như kiểmthử tự động, tối ưu hoá, v.v và đặc biệt kể cả gợi ý mã nguồn

Hình 2.1: Ví dụ về cây AST

AST chứa đầy đủ thông tin của mã nguồn chương trình Tùy thuộc vào từng công

cụ phân tích mà dữ liệu trên cây AST là khác nhau, nhưng về cơ bản đều có thể sử dụngcác thông tin đó để viết lại mã nguồn đúng với mục đích ban đầu

Trang 21

Hình 2.2: Đoạn mã nguồn đơn giản

Trong Hình 2.1, đồ thị biểu diễn ví dụ khi biểu diễn mã nguồn của Hình 2.2 dướidạng cây AST cơ bản Ví dụ, với nút đầu tiên là chương trình sẽ mở rộng ra các nút làcác câu lệnh Ở câu lệnh đầu tiên là biểu thức gán, phép gán sẽ là nút ở trung tâm, và haicạnh con của nó là hai vế của phép gán này, bao gồm:

• Biến x nằm ở bên cạnh trái

• Biểu thức a + b nằm ở cạnh phải, với nút trung tâm là phép tính cộng

Riêng đối với câu lệnh while chứa hai nút con ở hai cạnh bao gồm câu lệnh điềukiện và nút còn lại là khối lệnh bên trong vòng lặp

2.1.3 Đồ thị dòng điều khiển

Đồ thị dòng điều khiển (CFG - Control-flow graph) là đầu ra của kỹ thuật phân tích tĩnhchương trình Mục tiêu của nó là tạo ra một đồ thị có hướng và rẽ nhánh về luồng hoạtđộng của các câu lệnh Mỗi CFG bao gồm các nút và các cạnh Mỗi nút đại diện cho mộtđoạn lệnh không rẽ nhánh, thường là một câu lệnh Mỗi cạnh đại diện cho một đường đitrong chương trình giữa các nút Một CFG luôn luôn có một nút bắt đầu và một nút kếtthúc, và có thể có nhiều nút quyết định (điều kiện) tương ứng với các câu lệnh điều kiện

rẽ nhánh khác nhau

Các ứng dụng thường thấy của CFG như sau:

• Trong kiểm thử, CFG có thể được sử dụng để xác định các đường đi kiểm thử độc

Trang 22

lập trong chương trình, và tính toán độ phức tạp chu trình (cyclomatic complexity)của chương trình.

• Tối ưu hoá chương trình bằng cách loại bỏ các đoạn mã "chết" (dead code) khôngbao giờ được thực thi

• Phân tích luồng dữ liệu trong chương trình Đây là ứng dụng sẽ được sử dụng trongnghiên cứu này

1 public void FileHandle(String str, boolean isAppend)

Hình 2.3: Đoạn mã ví dụ về các lời gọi phương thức trong mã nguồn

Từ đoạn code trên Hình 2.3 được thể hiện qua đồ thị CFG trên Hình 2.4 Trên đồthị này, chúng ta có thể thấy các câu lệnh từ đầu đến cuối của phương thức Đối với câulệnh if được thể hiện bởi khối điều kiện hình thoi và có hai câu lệnh rẽ nhánh tương ứngvới từng trường hợp của điều kiện

Trong luận văn này, đồ thị luồng điều khiển sẽ minh hoạ luồng hoạt động theo thứ

tự của các lần gọi API trong chương trình với một khái niệm mới sẽ được trình bày ởphần kế tiếp

Trang 23

Hình 2.4: CFG ứng với mã nguồn Hình 2.3

2.1.4 Đồ thị dòng điều khiển lời gọi

Cùng với các kiến thức cơ bản về phân tích chương trình, nghiên cứu này sẽ đề cậpđến một khái niệm mới gọi là Đồ thị dòng điều khiển lời gọi (mCFG - method-ControlFlow Graph) mCFG là một đồ thị con của CFG mCFG chỉ thể hiện các luồng gọihàm/phương thức của một biến nhất định Cụ thể hơn, trong đó:

• Mỗi nút trên một cây thể hiện một lời gọi hàm/phương thức hoặc nút rẽ nhánh

• Một đồ thị mCFG tương ứng với chuỗi các lời gọi của một biến/định danh duy nhất

• mCFG giữ lại các tính chất đường đi như rẽ nhánh của CFG ban đầu

Quay lại ví dụ trên Hình 2.4, xét đến đối tượng biến writer chúng ta có đồ thịmCFG tương ứng trên Hình 2.5 Đồ thị này vẫn giữ lại các luồng thực thi các câu lệnhtheo thứ tự như trên đồ thị CFG gốc

Trang 24

Hình 2.5: mCFG tương ứng của biến writer Hình 2.4

2.1.5 Mô hình ngôn ngữ và mô hình ngôn ngữ N-gram

Mô hình ngôn ngữ là tập hợp các kiến thức về một ngôn ngữ nhất định, bao gồm từ vựng,ngữ pháp, tần suất xuất hiện của các chuỗi từ, v.v Mô hình ngôn ngữ có thể cho biết xácsuất xuất hiện của một chuỗi từ thuộc một ngôn ngữ Mô hình ngôn ngữ được ứng dụngtrong nhiều lĩnh vực của xử lý ngôn ngữ tự nhiên như kiểm tra lỗi chính tả, nhận dạnggiọng nói [13], dịch máy [14], nhận dạng chữ viết tay [15], v.v Có nhiều cách khác nhau

để tiếp cận mô hình ngôn ngữ

N-gram là một kỹ thuật phổ biến trong xử lý ngôn ngữ tự nhiên (NLP) để biểu diễncác đoạn văn bản dưới dạng các chuỗi liên tiếp của n từ Bằng cách sử dụng N-gram,chúng ta có thể giảm số lượng các từ có thể xuất hiện sau một từ cho trước và do đógiảm kích thước của không gian tìm kiếm Điều này giúp tăng hiệu suất của các thuậttoán NLP khi xử lý Trong phương pháp của khóa luận này, mô hình ngôn ngữ thống kên-gram được sử dụng

Một chuỗi n-gram được hiểu đơn giản là một chuỗi n từ liên tiếp trong văn bản Ví

dụ, với n = 3, chúng ta có một chuỗi 3-gram (trigram) như sau: “hãy gọi tôi" Với n = 2,

ta có các 2-gram (bigram): “hãy gọi” và “gọi tôi” Với n = 1, ta có các 1-gram (unigram):

“hãy”, “gọi”, “tôi”

Trang 25

Nhiệm vụ của mô hình ngôn ngữ nói chung là cho biết xác suất của một chuỗi có

mtừ w1w2w3 wm là bao nhiêu Một cách để tính được xác suất của chuỗi từ là sử dụngcông thức chain rule [16] trong xác suất thống kê thể hiện trên Công thức 2.1

P(wm|w1w2 wm−1) = P(wm|wm−nwm−n+1 wm−1) (2.2)

Ở đây, xác suất của từ wmđược ước lượng bằng cách chỉ dựa vào n từ trước nó Giảđịnh này có tên là giả định Markov (Markov assumption) Xác suất của chuỗi từ đượctính sau khi áp dụng giả định Markov tại Công thức 2.3

P(w1w2w3 wm) = P(w1).P(w2|w1).P(w3|w1w2) P(wm|wm−n wm−1) (2.3)

Nếu chúng ta giới hạn số từ trong mỗi chuỗi là n, ta gọi đó là một n-gram Từ đó,

ta có thể xây dựng mô hình ngôn ngữ n-gram bằng cách thống kê các chuỗi từ có độ dàinhỏ hơn hoặc bằng n

2.2 Công cụ sử dụng

Trong khi triển khai khóa luận này, phương pháp sử dụng bộ phân tích mã nguồn Javamạnh mẽ nhất là JDT (Eclipse Java development tools)3 JDT giúp phân tích chươngtrình và đưa ra các gợi ý các lời gọi Công cụ NLTK cũng được sử dụng cho các tác vụ

xử lý mô hình ngôn ngữ

3 https://www.eclipse.org/jdt/

Trang 26

2.2.1 Eclipse JDT

Với JDT, đây là bộ phân tích AST hiệu quả trong việc liên kết các tệp tin và thư viện củamột dự án nhằm xây dựng thông tin chuẩn xác nhất về kiểu dữ liệu, các quan hệ giữa cáclớp tương ứng với dự án đang xử lý

JDT hỗ trợ so sánh kiểu, kiểm tra khả năng truy cập đến trường hoặc phương thức,duyệt các nút AST để tìm ra được các biến phù hợp và sinh ra các biểu thức làm gợi ýcho tham số Ngoài ra, từ thông tin đó, các thông tin sau khi được JDT phân tích sẽ đượcgắn lên các nút của cây DFG nhằm kiểm tra lại các gợi ý4 Hình 2.6 biểu diễn các đốitượng cơ bản của JDT trong đó bao gồm các thông tin về các đối tượng như tệp tin, góikhác trong cùng dự án

Hình 2.6: Các đối tượng cơ bản trong JDT

Ngoài ra, một kỹ thuật được gọi là binding, tạm dịch là gắn kết thường được sửdụng trong các công cụ phân tích mã nguồn Đây là kỹ thuật giúp bộ phân tích mã nguồn

có thể kết nối các tệp tin mã nguồn lại với nhau, ví dụ có thể xác định được lời gọi xuấtphát từ một phương thức được khai báo trong tệp tin khác nhưng cùng dự án mã nguồn.Đối với ngôn ngữ Java, khi so sánh công cụ JDT và Javaparser, là hai công cụ phântích mã nguồn tốt nhất, thì JDT ít gặp các trường hợp lỗi hơn Javaparser Điều này được

4 https://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html

Trang 27

chứng minh khi JDT đã được ứng dụng trong một IDE vô cùng nổi tiếng là Eclipse vàtrải qua việc kiểm thử từ lượng lớn người dùng là lập trình viên Chính vì thế JDT là lựachọn trong luận văn này thay vì bộ công cụ nào khác.

2.2.2 Natural Language Toolkit

NLTK (Natural Language Toolkit) [17] là một bộ thư viện cho những tác vụ liên quantới xử lý ngôn ngữ tự nhiên Bộ thư viện này nhằm xây dựng các chương trình dựa trênPython5, một ngôn ngữ lập trình phổ biến, dễ học và linh hoạt

Cùng với đó, NLTK có một số ưu điểm khiến lập trình viên lựa chọn sử dụng như:

• Cung cấp các công cụ để làm việc với dữ liệu ngôn ngữ, bao gồm các hàm tiền xử

lý, phân tích cú pháp, phân loại, trích xuất thông tin và sinh văn bản

• Dễ tiếp cận bởi bộ thư viện này bao gồm nhiều tài liệu hướng dẫn, ví dụ và bài tập

để giúp người học nắm bắt các khái niệm cơ bản và nâng cao về xử lý ngôn ngữ tựnhiên

• Mặc định hỗ trợ nhiều ngôn ngữ tự nhiên khác nhau, không chỉ tiếng Anh mà còntiếng Việt, tiếng Trung, tiếng Nhật, v.v kể cả các ngôn ngữ đặc thù tương ứng vớitừng bài toán

Trong luận văn này sử dụng thư viện NLTK để xây dựng mô hình ngôn ngữ n-gram,một kỹ thuật thống kê thường dùng để ước lượng xác suất của một từ xuất hiện trongmột chuỗi văn bản dựa trên các từ trước đó Trong phần ý tưởng ở chương tiếp theo sẽgiải thích lý do mà phương pháp được ứng dụng trong ngôn ngữ tự nhiên lại phù hợp vớibài toán gợi ý API trong mã nguồn

2.3 Nghiên cứu liên quan

Luận văn này đề xuất một phương pháp để giúp nhà phát triển chọn được các lệnh gọiphương thức API phù hợp với ngữ cảnh của chương trình Phương pháp này là kết hợp

5 https://www.python.org/

Trang 28

giữa hai kỹ thuật: phân tích chương trình và mô hình ngôn ngữ Phân tích chương trìnhgiúp xác định các thuộc tính của đối tượng được gọi phương thức, cũng như các ràngbuộc về kiểu dữ liệu và tham số, Mô hình ngôn ngữ giúp ước lượng xác suất xuất hiệncủa các lệnh gọi phương thức trong các chương trình tương tự Bằng cách kết hợp hai kỹthuật này, nghiên cứu trên mong muốn tăng độ chính xác và độ đa dạng của danh sáchgợi ý cho nhà phát triển Đây là một cách tiếp cận không quá mới mẻ nhưng hiệu quảcho bài toán gợi ý mã nguồn Trong lĩnh vực này, đã có một số nghiên cứu trước đây

áp dụng hai kỹ thuật này [2, 11] TS Nguyễn Văn Sơn và cộng sự [2] sử dụng mô hìnhngôn ngữ n-gram và áp dụng nó cho Java Kết quả thực nghiệm của các nghiên cứu nàycho thấy độ chính xác cao trong danh sách gợi ý Điểm số score được tính toán dựa trênxác suất của mô hình ngôn ngữ và các thông tin từ phân tích chương trình Điều này cónghĩa là tiềm năng khi áp dụng phương pháp kết hợp này trong các công việc liên quancũng như là nguồn động lực để hoàn thành luận văn này

Trong lĩnh vực gợi ý API, đã có nhiều nghiên cứu liên quan được đề xuất, khôngchỉ là những nghiên cứu gợi ý trực tiếp trên ngữ cảnh mã nguồn Một số nghiên cứu tiêubiểu như sau: CLEAR và MULAPI

• Wei và cộng sự đã đề xuất một kỹ thuật đề xuất API mới, CLEAR, để đề xuất danhsách các API có liên quan cho truy vấn ngôn ngữ tự nhiên [18] CLEAR tìm kiếmcác đoạn mã bằng cách khai thác các từ khóa từ những giải đáp trên trang diễn đànhỏi đáp về lập trình CLEAR sử dụng mô hình BERT để nhúng các câu truy vấn vàcác bài viết trên Stack Overflow (SO) vào không gian véc-tơ, và sử dụng học tươngphản để huấn luyện mô hình BERT để học được biểu diễn ngữ nghĩa chính xác củacác thuật ngữ lập trình CLEAR cũng xây dựng một mô hình tái xếp hạng dựa trênBERT để tối ưu hóa kết quả đề xuất Cho một truy vấn, CLEAR trước tiên chọn mộttập các bài viết SO ứng viên qua độ tương đồng dựa trên nhúng câu của BERT đểgiảm không gian tìm kiếm CLEAR sau đó sử dụng mô hình tái xếp hạng dựa trênBERT để xếp hạng các bài viết SO ứng viên và đề xuất các API từ các bài viết SOđược xếp hạng cao nhất cho truy vấn Kết quả thực nghiệm trên ba tập dữ liệu kiểmtra khác nhau xác nhận hiệu quả của CLEAR cho cả đề xuất API ở cấp độ phươngthức và lớp So với các phương pháp đề xuất API tiên tiến nhất, CLEAR cải thiện

độ đo MAP từ 25%-187% ở cấp độ phương thức và từ 10%-100% ở cấp độ lớp

Trang 29

• MULAPI [9] là nghiên cứu đề xuất các phương thức API dựa trên vị trí sử dụngAPI MULAPI sử dụng các vị trí tính năng để xác định các tệp liên quan làm vị trí

sử dụng API Những mẩu thông tin này được coi là đề xuất các phương pháp APIbằng cách khám phá kho lưu trữ mã nguồn và thư viện API Cách tiếp cận của họ

có hiệu quả và có thể là một tính năng để kết hợp trong công việc trong tương lai

để cải thiện giải pháp này Tuy nhiên, MULAPI chỉ sử dụng thông tin về vị trí sửdụng API, không sử dụng thông tin về ngữ cảnh của chương trình hoặc các lệnh gọiphương thức khác

Trong các nghiên cứu liên quan, họ đã đề xuất những cách tiếp cận khác nhau đểgiải quyết bài toán gợi ý API Những cách tiếp cận này đều cho thấy kết quả khả quan và

có thể kết hợp với nhau để tạo ra một tính năng hữu ích cho các công việc trong tươnglai Điều này có thể giúp cải thiện phương pháp trong luận văn này khi áp dụng vào cáccông cụ thực tế để hỗ trợ lập trình viên trong quá trình sử dụng API Ví dụ, CLEAR cóthể đề xuất các API phù hợp cho các truy vấn ngôn ngữ tự nhiên của lập trình viên vàgiải quyết được các câu hỏi của họ khi họ đã chọn được API gợi ý Ngoài ra, nếu kết hợpcác thông tin khác nhau từ các nguồn khác nhau như tài liệu API, trang web hỏi đáp và

mã nguồn mở, phương pháp trong luận văn này có thể nâng cao được độ chính xác và độ

đa dạng của các API gợi ý

Về bài toán chung, một nghiên cứu gần đây của Nguyen Phuong T., và cộng sự [19,20] đã giới thiệu một cách tiếp cận mới để gợi ý các lệnh gọi phương thức kèm theo cácđoạn mã minh họa từ nhiều nguồn khác nhau Họ đã sử dụng phương pháp tính độ tươngđồng để so sánh ngữ cảnh của lập trình viên với các đoạn mã nguồn có sẵn trên tập dữliệu Cách tiếp cận này đã được chứng minh là có hiệu quả trong việc đề xuất các đoạn

mã nguồn cho lập trình viên

Trang 30

3.1 Ý tưởng khởi đầu

Trong bài toán dự đoán lời gọi trong chuỗi API, một yếu tố quan trọng là phải hiểu đượccác quy tắc hoặc ràng buộc về thứ tự của các lệnh gọi phương thức Các quy tắc này

có thể được suy ra từ mã nguồn hoặc tài liệu API của các lớp hoặc giao diện liên quan.Bằng cách quan sát mã nguồn, chúng ta có thể đưa ra một ý tưởng hiệu quả cho bài toán

Ngày đăng: 24/08/2024, 22:10

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Veselin Raychev, Martin Vechev, and Eran Yahav (2014). “Code completion with statistical language models”. In: Proceedings of the 35th ACM SIGPLAN Confer- ence on Programming Language Design and Implementation, pp. 419–428 Sách, tạp chí
Tiêu đề: Code completion withstatistical language models”. In: "Proceedings of the 35th ACM SIGPLAN Confer-ence on Programming Language Design and Implementation
Tác giả: Veselin Raychev, Martin Vechev, and Eran Yahav
Năm: 2014
[2] Son Nguyen et al. (2019a). “Combining program analysis and statistical language model for code statement completion”. In: 2019 34th IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE, pp. 710–721 Sách, tạp chí
Tiêu đề: Combining program analysis and statistical languagemodel for code statement completion”. In: "2019 34th IEEE/ACM InternationalConference on Automated Software Engineering (ASE)
[3] Fang Liu et al. (2020). “Multi-task learning based pre-trained language model for code completion”. In: Proceedings of the 35th IEEE/ACM International Conference on Automated Software Engineering, pp. 473–485 Sách, tạp chí
Tiêu đề: Multi-task learning based pre-trained language model forcode completion”. In:"Proceedings of the 35th IEEE/ACM International Conferenceon Automated Software Engineering
Tác giả: Fang Liu et al
Năm: 2020
[4] Sifei Luan et al. (2019). “Aroma: Code recommendation via structural code search”.In: Proceedings of the ACM on Programming Languages 3.OOPSLA, pp. 1–28 Sách, tạp chí
Tiêu đề: Aroma: Code recommendation via structural code search”.In:"Proceedings of the ACM on Programming Languages
Tác giả: Sifei Luan et al
Năm: 2019
[5] Yuning Kang et al. (2021). “APIRecX: Cross-Library API Recommendation via Pre-Trained Language Model”. In: Proceedings of the 2021 Conference on Empir- ical Methods in Natural Language Processing, pp. 3425–3436 Sách, tạp chí
Tiêu đề: APIRecX: Cross-Library API Recommendation viaPre-Trained Language Model”. In: "Proceedings of the 2021 Conference on Empir-ical Methods in Natural Language Processing
Tác giả: Yuning Kang et al
Năm: 2021
[6] Rensong Xie et al. (2019). “Hirec: Api recommendation using hierarchical con- text”. In: 2019 IEEE 30th International Symposium on Software Reliability Engi- neering (ISSRE). IEEE, pp. 369–379 Sách, tạp chí
Tiêu đề: Hirec: Api recommendation using hierarchical con-text”. In: "2019 IEEE 30th International Symposium on Software Reliability Engi-neering (ISSRE)
Tác giả: Rensong Xie et al
Năm: 2019
[7] Haoran Niu, Iman Keivanloo, and Ying Zou (2017). “API usage pattern recom- mendation for software development”. In: Journal of Systems and Software 129, pp. 127–139 Sách, tạp chí
Tiêu đề: API usage pattern recom-mendation for software development”. In: "Journal of Systems and Software
Tác giả: Haoran Niu, Iman Keivanloo, and Ying Zou
Năm: 2017
[8] Shanquan Gao et al. (2021). “API recommendation for the development of An- droid App features based on the knowledge mined from App stores”. In: Science of Computer Programming 202, p. 102556 Sách, tạp chí
Tiêu đề: API recommendation for the development of An-droid App features based on the knowledge mined from App stores”. In:"Science ofComputer Programming
Tác giả: Shanquan Gao et al
Năm: 2021
[9] Congying Xu et al. (2018). “MULAPI: Improving API method recommendation with API usage location”. In: Journal of Systems and Software 142, pp. 195–205 Sách, tạp chí
Tiêu đề: MULAPI: Improving API method recommendationwith API usage location”. In:"Journal of Systems and Software
Tác giả: Congying Xu et al
Năm: 2018
[10] Yun Peng et al. (2022). “Revisiting, Benchmarking and Exploring API Recom- mendation: How Far Are We?” In: IEEE Transactions on Software Engineering Sách, tạp chí
Tiêu đề: Revisiting, Benchmarking and Exploring API Recom-mendation: How Far Are We?” In
Tác giả: Yun Peng et al
Năm: 2022
[11] Cuong Tran Manh et al. (2021). “API parameter recommendation based on lan- guage model and program analysis”. In: 2021 28th Asia-Pacific Software Engineer- ing Conference (APSEC). IEEE, pp. 492–496 Sách, tạp chí
Tiêu đề: API parameter recommendation based on lan-guage model and program analysis”. In:"2021 28th Asia-Pacific Software Engineer-ing Conference (APSEC)
Tác giả: Cuong Tran Manh et al
Năm: 2021
[12] Ira D Baxter et al. (1998). “Clone detection using abstract syntax trees”. In: Pro- ceedings. International Conference on Software Maintenance (Cat. No. 98CB36272).IEEE, pp. 368–377 Sách, tạp chí
Tiêu đề: Clone detection using abstract syntax trees”. In:"Pro-ceedings. International Conference on Software Maintenance (Cat. No. 98CB36272)
Tác giả: Ira D Baxter et al
Năm: 1998
[13] Roland Kuhn and Renato De Mori (July 1990). “Cache-based natural language model for speech recognition”. In: Pattern Analysis and Machine Intelligence, IEEE Transactions on 12, pp. 570–583. DOI : 10.1109/34.56193 Sách, tạp chí
Tiêu đề: Cache-based natural languagemodel for speech recognition”. In:"Pattern Analysis and Machine Intelligence, IEEETransactions on
[14] Jacob Andreas, Andreas Vlachos, and Stephen Clark (Aug. 2013). “Semantic Pars- ing as Machine Translation”. In: Proceedings of the 51st Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers). Sofia, Bul- garia: Association for Computational Linguistics, pp. 47–52. URL : https://www.aclweb.org/anthology/P13-2009 Sách, tạp chí
Tiêu đề: Semantic Pars-ing as Machine Translation”. In: "Proceedings of the 51st Annual Meeting of theAssociation for Computational Linguistics (Volume 2: Short Papers)
[15] Vu Pham et al. (2014). Dropout improves Recurrent Neural Networks for Hand- writing Recognition. arXiv: 1312.4569 [cs.CV] Sách, tạp chí
Tiêu đề: Dropout improves Recurrent Neural Networks for Hand-writing Recognition
Tác giả: Vu Pham et al
Năm: 2014
[17] Steven Bird and Edward Loper (July 2004). “NLTK: The Natural Language Toolkit”.In: Proceedings of the ACL Interactive Poster and Demonstration Sessions. Barcelona, Spain: Association for Computational Linguistics, pp. 214–217. URL : https://www.aclweb.org/anthology/P04-3031 Sách, tạp chí
Tiêu đề: NLTK: The Natural Language Toolkit”.In:"Proceedings of the ACL Interactive Poster and Demonstration Sessions
[18] Moshi Wei et al. (2022). “CLEAR: contrastive learning for API recommendation”.In: Proceedings of the 44th International Conference on Software Engineering, pp. 376–387 Sách, tạp chí
Tiêu đề: CLEAR: contrastive learning for API recommendation”.In: "Proceedings of the 44th International Conference on Software Engineering
Tác giả: Moshi Wei et al
Năm: 2022
[19] Phuong T Nguyen et al. (2019b). “Focus: A recommender system for mining api function calls and usage patterns”. In: 2019 IEEE/ACM 41st International Confer- ence on Software Engineering (ICSE). IEEE, pp. 1050–1060 Sách, tạp chí
Tiêu đề: Focus: A recommender system for mining apifunction calls and usage patterns”. In: "2019 IEEE/ACM 41st International Confer-ence on Software Engineering (ICSE)
[20] Phuong T Nguyen et al. (2021). “Recommending api function calls and code snip- pets to support software development”. In: IEEE Transactions on Software Engi- neering Sách, tạp chí
Tiêu đề: Recommending api function calls and code snip-pets to support software development”. In
Tác giả: Phuong T Nguyen et al
Năm: 2021
[21] Steven Arzt et al. (2014). “Flowdroid: Precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for android apps”. In: Acm Sigplan Notices 49.6, pp. 259–269 Sách, tạp chí
Tiêu đề: Flowdroid: Precise context, flow, field, object-sensitiveand lifecycle-aware taint analysis for android apps”. In:"Acm Sigplan Notices
Tác giả: Steven Arzt et al
Năm: 2014

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w