Hệ thống sửa lỗi tự động này có thể fix được nhiều lỗi gấp 10 lần so với người tiền nhiệm của nó.
Các
nhà nghiên cứu của MIT đã phát triển một hệ thống máy tính có thể lùng
sục và học hỏi các thuộc tính chung của những chương trình máy tính mã
nguồn mở thông qua việc sửa chữa những chương trình này, để có thể tạo
ra phương pháp sửa chữa mới cho nhiều chương trình khác nhau.
Các
nhà nghiên cứu này đã thử nghiệm hệ thống của họ trên một tập hợp các
lỗi chương trình được chọn lọc từ các ứng dụng mã nguồn mở trong thực
tế, được biên soạn để đánh giá hệ thống sửa lỗi tự động. Nếu các hệ
thống tiền nhiệm của nó có thể fix được từ một tới hai lỗi thì hệ thống
MIT có thể sửa chữa được từ mười lăm tới mười tám lỗi, điều này phụ
thuộc vào việc nó xử lý trên giải pháp đầu tiên mà hệ thống tìm thấy
hoặc là liệu hệ thống này có được phép chạy lâu hơn.
Hiện
tại các công cụ sửa lỗi tự động có thể hữu dụng nhờ vào khả năng của
chúng, giáo sư kỹ thuật điện tử và khoa học máy tính Martin Rinard,
thuộc nhóm phát triển của hệ thống mới này tin rằng việc họ đang làm có
thể tiến xa hơn nữa trong tương lai.
“Một
trong những khía cạnh thú vị nhất của nghiên cứu này chính là việc
chúng ta đã tìm thấy thuộc tính chung của những mã nguồn đúng mà chúng
ta có thể học hỏi từ một tập hợp các ứng dụng và áp dụng chúng vào một
tập hợp các ứng dụng khác,” trích lời của giáo sư Rinard. “Nếu chúng ta
có thể nhận ra các mã nguồn đúng, thì điều này sẽ mang một ý nghĩa to
lớn trên tất cả phần mềm kỹ thuật. Đây chỉ là ứng dụng đầu tiên của thứ
mà chúng tôi hi vọng sẽ là một kĩ thuật hoàn toàn mới và tuyệt vời.
Fan
Long, một sinh viên tốt nghiệp chuyên ngành kỹ thuật điện tử và khoa
học máy tính ở MIT, đã đưa ra một bộ tài liệu mô tả về hệ thống mới tại
tại Hội nghị chuyên đề về các nguyên tắc của ngôn ngữ lập trình vào tuần
trước. Anh ấy và Giáo sư Rinard người có cố vấn của mình và cũng là
đồng tác giả.
Những
người dùng các chương trình mã nguồn mở sẽ tạo một danh mục các lỗi mà
họ gặp phải trên website của dự án và đóng góp vào dự án những cách sửa
chữa mã nguồn, bản vá cũng vào trang web này. Do đó Long có thể một đoạn
script trên máy tính trích ra những mã nguồn chưa đúng và các bản vá
cho 777 lỗi trong tám ứng dụng mã nguồn mở phổ biến được lưu trữ trực
tuyến trên GitHub.
Hiệu suất của các tính năng.
Cũng
như các hệ thống machine-learning khác, khía cạnh cốt lõi trong thiết
kế của Long và Rinard chính là sự chọn lọc “một tập hợp các tính năng”
mà hệ thống sẽ phân tích. Các nhà nghiên cứu đã tập trung vào những giá
trị được lưu trữ trong bộ nhớ – cũng như là các biến có thể được chỉnh
sửa trong quá trình vận hành của chương trình hoặc là các hằng số, điều
này là không thể. Họ sẽ tiến hành nhận diện 30 đặc điểm chính của giá
trị được cho: Nó có thể liên quan tới quá trình vận hành, như là cộng và
nhân, hoặc so sánh hơn hoặc so sánh bằng; nó có thể là local nghĩa là
nó chỉ xảy ra với một một block các mã nguồn mà thôi hoặc là global, tức
là sẽ ảnh hưởng tới toàn bộ chương trình; nó có thể là biến đại diện
cho kết quả cuối cùng của một phép tính và còn nhiều thứ khác nữa.
Long
và Rinard đã viết một chương trình máy tính để đánh giá những mối quan
hệ có thể có được giữa các thuộc tính trong một dòng mã nguồn thành
công. Có tới hơn 3500 mối quan hệ như vậy cấu tạo nên tập hợp các tính
năng của họ. Thuật toán machine-learning của họ cố gắng xác định những
sự kết hợp các tính năng một cách nhất quán dự đoán sự phù hợp của bản
vá.
“Tất
cả những tính năng mà chúng tôi cố gắng tìm kiếm chính là mối quan hệ
giữa các bản vá mà các bạn chèn vào và mã nguồn mà các bạn đang cố gắng
để vá,” trích lời của Long. “Thông thường, sẽ có những mối quan hệ tốt ở
những bản vá chuẩn, hữu ích cho việc tạo ra tính logic của chương
trình. Và sẽ có những mô hình xấu có nghĩa là mất đi sự liên kết trong
tính logic của chương trình hoặc dư thừa tính logic rất ít khả năng
thành công.
Xếp hạng các ứng viên
Ngay
từ lúc bắt đầu công việc, Long đã phát triển một thuật toán được dùng
để sửa lỗi chương trình bằng chỉnh sửa các mã nguồn của chương trình một
cách hệ thống. Ngay sau đó mã nguồn được chỉnh sửa sẽ được trải qua các
bài thử nghiệm để xác định những hành vi lỗi. Cách tiếp cận này cho
thấy việc sửa đổi mã nguồn có thể qua được những bài kiểm tra tuy nhiên
nó sẽ tốn rất nhiều thời gian. Hơn nữa, các code được chỉnh sửa có thể
vẫn còn lỗi mà các bài kiểm tra không tìm ra được.
Hệ
thống machine-learning của Long và Rinard hoạt động kết hợp với những
thuật toán trước đó, xếp hạng các sửa đổi dựa vào xác suất rằng chúng sẽ
đúng trước khi đưa vào giai đoạn thử nghiệm time-consuming.
Các
nhà nghiên cứu thử nghiệm hệ thống Prophet của họ trên một tập hợp 69
lỗi chương trình được cắt từ 8 chương trình mã nguồn mở phổ biến nhất.
Trong số đó, có tới 19 mã nguồn là tuân theo các sửa đổi mà thuật toán
của Long sử dụng, 50 mã nguồn còn lại có nhiều vấn đề phức tạp hơn liên
quan đến mâu thuẫn logic xung quanh một bề mặt lớn hơn của mã nguồn.
Khi
Long và Rinard cấu hình hệ thống của họ để xử lý giải pháp đầu tiên
vượt qua được các bài kiểm tra lỗi, nó đã sửa được 15 trên 19 lỗi, khi
họ cho phép nó chạy trong 12 giờ đồng hồ cho mỗi vấn đề, hệ thống này đã
sửa chữa được 18 mã nguồn.
Tất
nhiên, vẫn còn 50 lỗi trong bài test vẫn chưa được xử lý. Trong các
bước tiếp theo, Long đang làm việc trên hệ thống machine-learning để xem
xét những thao tác coarse-granied của các giá trị trong chương trình
thông qua các mã nguồn dài hơn, với hi vọng tạo ra được hệ thống tự sửa
lỗi có thể xử lý được những lỗi phức tạp hơn.
“Một khía cạnh mạng tính cách mạng của Prophet chính là cách mà nó thúc đẩy sự thành công của các bản vá
để tìm hiểu những điều mới mẻ”, trích lời của Eran Yahav, phó giáo sư
khoa học máy tính tại Technion ở Israel. “Nó dựa trên nhận thức rằng bất
chấp sự khác biệt giữa các dự án phần mềm, sửa chữa, bản vá được áp
dụng cho các dự án luôn có những điểm chung để có thể học hỏi. Sử dụng
machine learning để học hỏi từ những “big code” hứa hẹn sẽ cách mạng hóa
rất nhiều công việc lập trình, hoàn thiện mã nguồn,
reverse-engineering, v.v”
0 nhận xét:
Đăng nhận xét