Thứ Hai, 22 tháng 2, 2016

TỰ SỮA LỖI MÃ NGUỒN TỪ SAI THÀNH ĐÚNG




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.
topdevcodefix
“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: