CodePhage là hệ thống được phát triển tại viện công nghệ Massachusett (MIT) với khả năng tự động sửa lỗi trên các phần mềm bằng cách vay mượn dữ liệu từ những chương trình khác từ nhiều ngôn ngữ lập trình khác nhau mà không cần truy cập tới mã nguồn của chúng, sau đó tự dịch về ngôn ngữ của phần mềm nhận và chèn vào để sửa lỗi.
Hệ thống tự sửa lỗi cho phần mềm bằng cách "học" từ các phần mềm khác
Đây là một điều tuyệt vời đối với các lập trình viên, giúp họ tiết kiệm được hàng nghìn giờ lập trình, sửa lỗi, đồng thời tạo ra những phần mềm ổn định hơn.
Lỗi luôn là một phần không thể thiếu đối với cuộc sống của các lập trình viên. Việc khắc phục lỗi có thể được triển khai tùy vào mức độ và một số lỗi chỉ cần vài dòng code là có thể sửa được, nhưng việc xác định chính xác lỗi nằm ở dòng lệnh nào lại là một quá trình vô cùng mất thời gian và buồn chán, đặc biệt là đối với những dự án lớn. Giờ đây, hệ thống phần mềm do MIT phát triển có thể giải quyết được điều này và nó còn làm được nhiều hơn nữa.
Với tên gọi CodePhage, hệ thống có thể tự sửa lỗi đang tồn tại trên phần bằng cách kiểm tra các biến đầu vào, sau đó nhanh chóng tự mở rộng ra để sửa thêm nhiều dạng lỗi khác. Đáng chú ý hơn, theo nhà nghiên cứu Stelios Sidiroglou-Douskos tại MIT thì phần mềm còn có khả năng chủ động dịch và ghép mã (gọi là "horizontal code transplant", một quá trình tương tự trong di truyền học) mà không cần phải truy cập vào mã nguồn và qua các ngôn ngữ lập trình khác nhau. Thay vào đó, nó sẽ "học" cách sửa lỗi bằng cách trực tiếp phân tích các tập tin.
Hệ thống hoạt động như thế nào?
Thí dụ như bạn đang viết một chương trình máy tính đơn giản, yêu cầu người dùng nhập vào 2 con số và kết quả đầu ra là thương giữa số thứ 1 và thứ 2. Giả sử trong đoạn code, bạn quên kiểm tra lại rằng số thứ 2 phải khác 0 (phép chia cho 0 là vô nghĩa). Khi đó, CodePhage sẽ bắt đầu với ứng dụng (có lỗi) và 2 đầu vào, 1 cái không có lỗi (safe input) và 1 cái có lỗi gọi là (unsafe input). Bằng cách sử dụng cơ sở dữ liệu rất lớn nhằm tìm cách đọc và xử lý chính xác cả 2 input, hệ thống sẽ tìm một "kho dữ liệu lớn" (vast repository) dành cho một hàm để phép chia được thực hiện "an toàn".
Sidiroglou-Douskos cho biết: "Chúng tôi có hàng tấn mã nguồn trên những cơ sở dữ liệu mã nguồn mở khổng lồ, hàng triệu project và rất nhiều project thực hiện những chức năng tương tự nhau. Ngay cả khi không có chức năng lõi của chương trình, chúng cũng có các chi tiết phụ chia sẻ các chức năng của project lớn."
Hệ thống sẽ phân biệt giữa chương trình "cho" (phần mềm để vay mượn cách sửa lỗi) và phần mềm nhận (phần mềm có lỗi mà hệ thống muốn sửa chữa). Bước đầu tiên là cung cấp dữ liệu đầu vào an toàn vào trong đoạn mã "cho" và tự động theo dõi những ràng buộc đang được áp lên các biến đầu vào. Sau đó, phần mềm sẽ thực hiện điều tương tự với input thứ 2 vốn "không an toàn" và so sánh 2 bộ điều kiện ràng buộc. Điểm phân kỳ được xác định là những điều kiện phù hợp với input an toàn nhưng không xuất hiện trên biến không an toàn, và khi đó, hệ thống sẽ hiểu là có thể đoạn mã nhận đã thiếu chức năng kiểm tra bảo mật ở chức năng này.
Trở lại thí dụ nói trên, input an toàn là những phép chia có mẫu là số khác 0, còn input không an toàn là phép chia có mẫu là 0. Hệ thống của MIT sẽ tự phát hiện ra điều kiện rằng "một phép chia thì mẫu số phải khác 0" - điều này phù hợp với điều kiện của input an toàn, nhưng không phù hợp với input không an toàn, do đó cần phải có một bước kiểm tra cụ thể điều kiện này trong đoạn mã nhận, bằng không có thể có lỗi xảy ra.
Khi nhận thấy được điều đó, CodePhage sẽ lấy tất cả sự khác biệt giữa đoạn mã kiểm tra input trong phần mềm cho và dịch chúng sang ngôn ngữ lập trình của phần mềm nhận. Sau đó, hệ thống tiếp tục thử chèn đoạn mã vừa dịch xong vào trong bộ code của phần mềm nhận cho đến khi input không an toàn được xử lý một cách chính xác (và phần mềm vẫn hoạt động như ý khi kiểm tra lại bằng bộ test suite)
Giáo sư Martin Rinard, người tham gia nhóm phát triển cho biết: "Tầm nhìn dài hạn của dự án là bạn không bao giờ cần phải viết những đoạn code ngắn được viết bởi người khác trước đó. Hệ thống sẽ tìm thấy đoạn code cần thiết và tự động chèn vào cùng với những đoạn khác mà bạn cần để chương trình vận hành như ý." Ông cho rằng hệ thống này có thể giúp các lập trình viên giảm thời gian, công sức cho việc kiểm tra dữ liệu đầu vào. Thay vào đó, họ sẽ sử dụng hệ thống này để tự động chuyển các công cụ check input khác mạnh mẽ hơn từ cơ sở dữ liệu cực lớn, bao gồm cả những ứng dụng độc quyền có mã nguồn đóng.
Theo nhóm nghiên cứu, trong các phần mềm thương mại hiện đại, phần code kiểm tra an toàn chiếm tới 80% . Do đó, tác động của hệ thống tự khắc phục lỗi về mặt thời gian và công sức là khá đáng kể. Hơn nữa, hiện tại hệ thống chỉ mối giới hạn trong việc phân tích các biến kiểm tra, nhưng họ cho biết rằng kỹ thuật tương tự cũng có thể được sử dụng để theo dõi, trích xuất và chèn bất kỳ đoạn code có chức năng khác, miễn là hệ thống có thể xác định được chính xác các giá trị gán vào biến trong phần mềm cho.
Bên cạnh đó, hệ thống của MIT còn có thể sử dụng chuyển đổi kiểm tra giữa các phiên bản khác nhau của cùng một ứng dụng, hỗ trợ công tác phát hành cách bản vá và update ứng dụng khi lỗi phát sinh. Khi thử nghiệm trên 7 chương trình mã nguồn mở, nhóm nghiên cứu nhận thấy CodePhage có thể vá những lỗ hổng vào bất cứ lúc nào và chỉ mất 10 phút để sửa 1 lỗi. Trong những phiên bản trong tương lai, nhóm hy vọng thời gian này sẽ được giảm xuống càng nhanh càng tốt. Nếu quan tâm về hệ thống này, các bạn có thể đọc báo cáo đầy đủ của nó tại đường dẫn miễn phí sau đây (link).