I. Tổng quan luận văn VNU UET Mô hình SLAMC phát hiện lỗi PHP
Luận văn thạc sĩ tại Đại học Công nghệ (VNU UET) giới thiệu một hướng tiếp cận đột phá trong lĩnh vực công nghệ phần mềm. Đề tài tập trung vào việc ứng dụng mô hình ngôn ngữ ngữ nghĩa thống kê, gọi tắt là SLAMC, để tự động phát hiện lỗi trong mã nguồn PHP phiên bản 5.3. Đây là một trong những nghiên cứu khoa học ĐH Công nghệ tiêu biểu, kết hợp kiến thức từ xử lý ngôn ngữ tự nhiên và kỹ thuật phần mềm. Bối cảnh nghiên cứu xuất phát từ thực tế rằng các ngôn ngữ kịch bản như PHP, dù phổ biến, vẫn tiềm ẩn nhiều lỗi logic và cú pháp tinh vi mà các công cụ phân tích truyền thống có thể bỏ sót. Luận văn tốt nghiệp VNU này đề xuất một giải pháp dựa trên học máy, xem mã nguồn như một loại ngôn ngữ tự nhiên đặc biệt. Bằng cách học các mẫu cú pháp và ngữ nghĩa phổ biến từ một kho mã nguồn lớn, mô hình SLAMC có khả năng xác định các đoạn mã "bất thường" hoặc "không tự nhiên", vốn là dấu hiệu của lỗi tiềm tàng. Phương pháp này mở ra một chương mới cho việc đánh giá chất lượng mã nguồn tự động, hứa hẹn giảm thiểu thời gian và công sức của lập trình viên trong quá trình gỡ lỗi và bảo trì phần mềm. Luận văn không chỉ dừng lại ở lý thuyết mà còn trình bày chi tiết quá trình xây dựng và thử nghiệm một công cụ cụ thể.
1.1. Bối cảnh và tính cấp thiết của đề tài nghiên cứu
Sự phát triển mạnh mẽ của các ứng dụng web đã đưa PHP trở thành một trong những ngôn ngữ lập trình phía máy chủ phổ biến nhất. Tuy nhiên, tính linh hoạt của PHP cũng đi kèm với nguy cơ phát sinh lỗi cao, từ các lỗi cú pháp đơn giản đến các lỗ hổng bảo mật PHP phức tạp. Việc kiểm tra và đảm bảo chất lượng mã nguồn PHP, đặc biệt là với các dự án lớn và kế thừa (legacy code), là một thách thức không nhỏ. Các công cụ phân tích tĩnh hiện có thường dựa trên các bộ quy tắc được định sẵn, do đó khó có thể phát hiện các lỗi logic tinh vi hoặc các mẫu mã xấu (code smells) không tuân theo quy tắc cụ thể. Chính vì vậy, luận văn khoa học máy tính UET này ra đời nhằm giải quyết khoảng trống đó. Đề tài nhấn mạnh sự cần thiết của một phương pháp thông minh hơn, có khả năng "hiểu" ngữ cảnh và ngữ nghĩa của mã nguồn. Việc áp dụng AI trong công nghệ phần mềm, cụ thể là các mô hình ngôn ngữ thống kê, được xem là hướng đi đầy tiềm năng để tạo ra các công cụ dò lỗi tự động hiệu quả hơn.
1.2. Mục tiêu chính của luận văn tốt nghiệp VNU
Luận văn đặt ra ba mục tiêu chính. Thứ nhất, nghiên cứu và đề xuất mô hình ngôn ngữ cho mã nguồn (SLAMC) có khả năng nắm bắt cả cấu trúc cú pháp và quan hệ ngữ nghĩa trong mã PHP. Mô hình này phải vượt trội hơn các phương pháp dựa trên N-gram truyền thống bằng cách tích hợp thêm thông tin ngữ nghĩa. Thứ hai, xây dựng một công cụ phần mềm hoàn chỉnh dựa trên mô hình SLAMC. Công cụ này có nhiệm vụ phân tích các tệp mã nguồn PHP 5.3, tính toán xác suất "tự nhiên" của từng đoạn mã và cảnh báo những vị trí có xác suất thấp, nghi ngờ chứa lỗi. Mục tiêu thứ ba là tiến hành thực nghiệm để đánh giá chất lượng mã nguồn đã phân tích. Quá trình này bao gồm việc so sánh kết quả của công cụ với các công cụ phân tích tĩnh phổ biến khác và đo lường các chỉ số như độ chính xác (precision), độ phủ (recall) và F1-score trên một tập dữ liệu chuẩn hóa. Toàn bộ quá trình nhằm chứng minh tính hiệu quả và khả thi của việc ứng dụng SLAMC trong thực tế.
II. Thách thức phát hiện lỗi mã PHP 5
Việc phát hiện lỗi trong các ngôn ngữ kịch bản có kiểu động như PHP 5.3 luôn là một bài toán đầy thách thức. Không giống như các ngôn ngữ biên dịch có kiểu tĩnh, lỗi trong PHP thường chỉ được phát hiện ở thời gian chạy, gây khó khăn cho việc kiểm thử và bảo trì. Các phương pháp phân tích mã tĩnh PHP truyền thống, mặc dù hữu ích, thường gặp giới hạn trong việc hiểu ngữ cảnh và ý định của lập trình viên. Chúng chủ yếu dựa vào các quy tắc định sẵn để tìm các lỗi cú pháp hoặc các mẫu mã không an toàn đã biết. Tuy nhiên, chúng dễ dàng bỏ qua các lỗi logic tinh vi hoặc các vấn đề liên quan đến luồng dữ liệu phức tạp. Để giải quyết những hạn chế này, luận văn thạc sĩ VNU UET đã đề xuất giải pháp đột phá là mô hình SLAMC. Thay vì áp đặt các quy tắc cứng, SLAMC học hỏi từ dữ liệu. Nó coi mã nguồn là một chuỗi các token và học các mẫu phổ biến, hợp lệ từ hàng ngàn dự án nguồn mở. Bất kỳ đoạn mã nào đi chệch khỏi các mẫu này đều bị coi là bất thường. Cách tiếp cận này thuộc lĩnh vực học máy phát hiện lỗi phần mềm, mang lại khả năng phát hiện các lỗi chưa từng được biết đến trước đây.
2.1. Hạn chế của các công cụ phân tích mã tĩnh PHP hiện có
Các công cụ như PHP_CodeSniffer, PHPMD hay PHPStan đã đóng góp rất lớn vào việc cải thiện chất lượng mã nguồn PHP. Chúng rất hiệu quả trong việc đảm bảo mã tuân thủ các tiêu chuẩn mã hóa (coding standards) và phát hiện các lỗi phổ biến. Tuy nhiên, điểm yếu cố hữu của chúng là sự phụ thuộc vào các bộ quy tắc (rulesets). Nếu một loại lỗi mới hoặc một mẫu mã xấu chưa được định nghĩa trong ruleset, công cụ sẽ bỏ qua. Hơn nữa, chúng gặp khó khăn trong việc phân tích ngữ nghĩa mã nguồn sâu. Ví dụ, chúng có thể không nhận ra một biến được sử dụng sai ngữ cảnh hoặc một lời gọi hàm có tham số hợp lệ về kiểu nhưng vô nghĩa về mặt logic. Điều này dẫn đến tỷ lệ bỏ sót lỗi (false negatives) cao đối với các lỗi phức tạp. Thực tế này đòi hỏi một công cụ dò lỗi tự động có khả năng học và suy luận, thay vì chỉ kiểm tra dựa trên luật lệ.
2.2. Sự phức tạp trong phân tích ngữ nghĩa mã nguồn PHP
PHP là ngôn ngữ có kiểu động (dynamically typed), nghĩa là kiểu của một biến không được xác định cho đến khi chương trình chạy. Đặc điểm này mang lại sự linh hoạt cho lập trình viên nhưng lại là một rào cản lớn cho việc phân tích mã tĩnh PHP. Việc xác định chính xác kiểu dữ liệu của một biến tại một thời điểm bất kỳ là rất khó. Điều này ảnh hưởng trực tiếp đến khả năng phân tích luồng dữ liệu và phát hiện các lỗi như gọi phương thức không tồn tại trên một đối tượng hoặc thực hiện phép toán không hợp lệ. Hơn nữa, các tính năng như biến của biến (variable variables) hay hàm vô danh (closures) càng làm cho việc phân tích ngữ nghĩa mã nguồn trở nên phức tạp hơn. Để hiểu được mã PHP, công cụ phân tích không chỉ cần nhìn vào cú pháp bề mặt mà còn phải suy luận về trạng thái và luồng thực thi của chương trình, một nhiệm vụ cực kỳ khó khăn nếu không có sự hỗ trợ của các mô hình thống kê thông minh.
III. Phương pháp SLAMC Mô hình ngôn ngữ ngữ nghĩa thống kê
Trái tim của luận văn là mô hình ngôn ngữ ngữ nghĩa thống kê SLAMC (Statistical Semantic Language Model for Code). Đây là một phương pháp lai, kết hợp sức mạnh của mô hình thống kê N-gram và khả năng biểu diễn ngữ nghĩa của mã nguồn. Cách tiếp cận này dựa trên một giả thuyết nền tảng: mã nguồn được viết tốt thường tuân theo các quy luật và mẫu lặp đi lặp lại, tương tự như ngôn ngữ tự nhiên. Những đoạn mã chứa lỗi thường là những đoạn mã "hiếm gặp" hoặc "bất thường" theo thống kê. SLAMC không chỉ phân tích chuỗi token đơn thuần mà còn làm giàu chuỗi token này bằng các thông tin ngữ nghĩa trích xuất từ Cây Cú pháp Trừu tượng (AST - Abstract Syntax Tree). Điều này cho phép mô hình phân biệt được các token có cùng tên nhưng khác vai trò (ví dụ: tên biến và tên hàm). Theo luận văn, việc áp dụng statistical language model for source code theo cách này giúp cải thiện đáng kể khả năng phát hiện lỗi so với các mô hình chỉ dựa trên bề mặt văn bản. Mô hình được huấn luyện trên một kho mã nguồn PHP lớn để học được đâu là "mã bình thường", tạo ra một nền tảng vững chắc cho việc phát hiện sự bất thường.
3.1. Nguyên lý của statistical language model for source code
Một statistical language model for source code về cơ bản là một phân bố xác suất trên các chuỗi mã nguồn. Nhiệm vụ của nó là gán một xác suất cho một đoạn mã nhất định. Một đoạn mã hợp lệ và phổ biến sẽ có xác suất cao, trong khi một đoạn mã hiếm gặp hoặc chứa lỗi sẽ có xác suất thấp. Mô hình N-gram cho mã nguồn là một trong những dạng đơn giản nhất. Nó tính toán xác suất của một token xuất hiện dựa trên N-1 token đứng ngay trước nó. Ví dụ, trong PHP, sau token $ thường là một định danh (tên biến), do đó xác suất P(tên_biến | $ ) sẽ cao. Tuy nhiên, mô hình N-gram thuần túy có điểm yếu là không hiểu được cấu trúc lồng nhau và các mối quan hệ xa trong mã. SLAMC giải quyết vấn đề này bằng cách không chỉ xem xét chuỗi token tuyến tính mà còn tích hợp thông tin cấu trúc từ AST, tạo ra một mô hình mạnh mẽ hơn.
3.2. Cấu trúc và cách hoạt động của mô hình SLAMC
Mô hình SLAMC hoạt động qua nhiều bước. Đầu tiên, mã nguồn PHP đầu vào được phân tích cú pháp để tạo ra Cây Cú pháp Trừu tượng (AST). AST biểu diễn cấu trúc phân cấp của mã, giúp xác định vai trò của từng thành phần (biến, hàm, lớp...). Tiếp theo, một quá trình duyệt cây (tree traversal) được thực hiện để chuyển đổi AST thành một chuỗi token đã được làm giàu thông tin ngữ nghĩa. Ví dụ, một token biến x có thể được biểu diễn thành VAR_x và một token hàm x có thể là FUNC_x. Chuỗi token ngữ nghĩa này sau đó được đưa vào một mô hình N-gram cho mã nguồn để huấn luyện. Trong giai đoạn phát hiện lỗi, công cụ sẽ quét qua mã nguồn mới, chuyển đổi nó thành chuỗi token ngữ nghĩa và sử dụng mô hình đã huấn luyện để tính toán xác suất (hay cụ thể hơn là perplexity - độ rối) của từng đoạn mã. Những đoạn mã có độ rối cao bất thường sẽ được đánh dấu là có khả năng chứa lỗi.
IV. Hướng dẫn ứng dụng SLAMC để phát hiện lỗi mã nguồn PHP
Việc triển khai và ứng dụng mô hình SLAMC để phát hiện lỗi trong mã PHP 5.3 là một quy trình kỹ thuật gồm nhiều giai đoạn, được mô tả chi tiết trong luận văn khoa học máy tính UET. Quá trình này bắt đầu từ việc xây dựng một bộ dữ liệu huấn luyện chất lượng, bao gồm hàng triệu dòng mã từ các dự án PHP nguồn mở uy tín. Dữ liệu này được xem là "mẫu mực" cho mã nguồn tốt. Sau đó, dữ liệu thô phải trải qua bước tiền xử lý phức tạp, bao gồm phân tích cú pháp để tạo AST và trích xuất chuỗi token ngữ nghĩa. Giai đoạn quan trọng nhất là huấn luyện mô hình, nơi SLAMC học các quy luật thống kê từ bộ dữ liệu. Sau khi huấn luyện, mô hình được tích hợp vào một công cụ dòng lệnh, sẵn sàng cho việc phân tích. Công cụ này nhận đầu vào là một tệp hoặc thư mục mã nguồn PHP cần kiểm tra. Quá trình phân tích mã tĩnh PHP bắt đầu, và kết quả trả về là một danh sách các vị trí đáng ngờ trong mã nguồn, kèm theo một điểm số bất thường. Lập trình viên có thể dựa vào danh sách này để rà soát và sửa lỗi, góp phần nâng cao chất lượng phần mềm.
4.1. Quy trình thu thập và tiền xử lý ngôn ngữ tự nhiên cho code
Chất lượng của mô hình phụ thuộc rất lớn vào dữ liệu huấn luyện. Luận văn đã sử dụng một tập hợp các dự án PHP phổ biến trên GitHub làm nguồn dữ liệu. Bước đầu tiên là lọc ra các dự án phù hợp với phiên bản PHP 5.3. Sau đó, toàn bộ mã nguồn được thu thập. Giai đoạn tiền xử lý ngôn ngữ tự nhiên cho code là cực kỳ quan trọng. Không giống như văn bản thông thường, mã nguồn có cấu trúc chặt chẽ. Mỗi tệp PHP được đưa qua một bộ phân tích cú pháp (parser) để xây dựng AST. Từ AST, hệ thống trích xuất một chuỗi token. Điểm khác biệt của SLAMC là mỗi token không chỉ là một chuỗi ký tự mà còn được gắn nhãn với vai trò ngữ nghĩa của nó (ví dụ: T_VARIABLE, T_FUNCTION, T_STRING). Quá trình này giúp mô hình phân biệt rõ ràng các yếu tố khác nhau trong mã, đặt nền móng cho việc học các mẫu ngữ nghĩa sâu sắc.
4.2. Kỹ thuật huấn luyện và đánh giá mô hình ngôn ngữ
Sau khi có được kho dữ liệu token ngữ nghĩa, quá trình huấn luyện mô hình ngôn ngữ cho mã nguồn bắt đầu. Luận văn đã thử nghiệm với các giá trị N khác nhau (từ 3 đến 6) cho mô hình N-gram để tìm ra cấu hình tối ưu. Kỹ thuật làm mịn (smoothing), chẳng hạn như Kneser-Ney smoothing, được áp dụng để xử lý các N-gram hiếm gặp hoặc chưa từng xuất hiện trong dữ liệu huấn luyện. Để đánh giá mô hình, luận văn sử dụng một tập dữ liệu kiểm thử (test set) riêng biệt, không dùng trong huấn luyện. Chỉ số Perplexity (độ rối) được dùng làm thước đo chính. Perplexity càng thấp, mô hình càng dự đoán chuỗi token tiếp theo tốt hơn, chứng tỏ nó đã học được các quy luật trong ngôn ngữ mã nguồn một cách hiệu quả. Kết quả thực nghiệm cho thấy mô hình 6-gram với thông tin ngữ nghĩa đạt được perplexity thấp nhất, cho thấy hiệu quả vượt trội của phương pháp SLAMC.
4.3. Cách SLAMC xác định bất thường và code smell detection
Khi phân tích một tệp mã nguồn mới, SLAMC sử dụng kỹ thuật cửa sổ trượt (sliding window). Nó trượt một cửa sổ có kích thước N qua chuỗi token của tệp và tính toán xác suất của token cuối cùng dựa trên N-1 token trước đó. Những token có xác suất xuất hiện cực thấp tại một ngữ cảnh nhất định sẽ được coi là bất thường. Hệ thống không chỉ dừng lại ở việc phát hiện lỗi cú pháp mà còn có khả năng thực hiện code smell detection. Code smell là những dấu hiệu trong mã nguồn cho thấy một vấn đề thiết kế sâu sắc hơn. Ví dụ, một hàm quá dài với nhiều biến cục bộ có thể tạo ra các chuỗi token ít phổ biến. SLAMC có thể nhận diện các mẫu này như những điểm bất thường thống kê, từ đó cảnh báo lập trình viên về các vấn đề tiềm tàng về kiến trúc và khả năng bảo trì của mã.
V. Kết quả thực nghiệm luận văn thạc sĩ Đánh giá mô hình
Phần kết quả thực nghiệm là minh chứng quan trọng cho giá trị của luận văn thạc sĩ VNU UET. Các thí nghiệm được thiết kế một cách khoa học để đánh giá hiệu quả của mô hình SLAMC trên nhiều phương diện. Tập dữ liệu đánh giá bao gồm cả mã nguồn chứa lỗi đã biết (được lấy từ lịch sử commit của các dự án) và mã nguồn được cho là sạch. Kết quả cho thấy SLAMC có khả năng phát hiện một loạt các lỗi mà các công cụ truyền thống bỏ qua, đặc biệt là các lỗi liên quan đến việc sử dụng sai API hoặc các lỗi logic tinh vi. Luận văn trích dẫn: "Mô hình SLAMC đạt được chỉ số F1-score là 0.78, cao hơn đáng kể so với công cụ X (0.65) và Y (0.62) trên cùng một tập dữ liệu." Điều này khẳng định sức mạnh của việc áp dụng AI trong công nghệ phần mềm để giải quyết các bài toán kiểm thử chất lượng. Hơn nữa, nghiên cứu cũng chỉ ra rằng việc bổ sung thông tin ngữ nghĩa đã giúp giảm tỷ lệ dương tính giả (false positives) khoảng 15% so với mô hình N-gram thông thường, giúp lập trình viên tập trung vào các cảnh báo thực sự có giá trị.
5.1. Đánh giá chất lượng mã nguồn với độ chính xác cao
Một trong những kết quả nổi bật là khả năng đánh giá chất lượng mã nguồn với độ chính xác cao. SLAMC không chỉ phát hiện lỗi mà còn cung cấp một điểm số "bất thường" cho mỗi dòng mã. Điểm số này có thể được sử dụng để xếp hạng các tệp hoặc module theo mức độ rủi ro, giúp các nhà quản lý dự án ưu tiên nguồn lực cho việc rà soát và tái cấu trúc mã (refactoring). Trong một thí nghiệm, mô hình đã thành công trong việc xác định các module có mật độ lỗi cao nhất trong một dự án lớn với độ chính xác lên tới 85%. Khả năng này đặc biệt hữu ích cho các dự án kế thừa, nơi việc hiểu và đánh giá toàn bộ mã nguồn là một công việc tốn kém. Bằng cách tự động chỉ ra các "điểm nóng", SLAMC giúp quá trình bảo trì phần mềm trở nên hiệu quả và có định hướng hơn.
5.2. So sánh hiệu quả với các công cụ phát hiện lỗi phần mềm khác
Để khẳng định tính ưu việt, luận văn đã thực hiện một so sánh chi tiết giữa SLAMC và hai công cụ phân tích mã tĩnh PHP phổ biến. Cuộc so sánh được tiến hành trên một bộ dữ liệu chứa 100 lỗi thuộc nhiều loại khác nhau, từ lỗi cú pháp, lỗi logic đến các vấn đề bảo mật. Kết quả cho thấy SLAMC phát hiện được 75/100 lỗi, trong khi các công cụ còn lại chỉ phát hiện được lần lượt 60 và 58 lỗi. Đáng chú ý, SLAMC tỏ ra vượt trội trong việc phát hiện các lỗi liên quan đến ngữ cảnh và logic, vốn là điểm yếu của các công cụ dựa trên quy tắc. Tuy nhiên, luận văn cũng thừa nhận các công cụ truyền thống lại nhanh hơn và phát hiện tốt hơn các lỗi vi phạm tiêu chuẩn mã hóa. Điều này cho thấy SLAMC không nhằm thay thế hoàn toàn mà là một sự bổ sung mạnh mẽ cho các công cụ dò lỗi tự động hiện có.
5.3. Khả năng phát hiện lỗ hổng bảo mật PHP tiềm ẩn
Ngoài các lỗi thông thường, một khám phá thú vị từ thực nghiệm là khả năng phát hiện lỗ hổng bảo mật PHP tiềm ẩn của SLAMC. Nhiều lỗ hổng bảo mật, chẳng hạn như SQL Injection hay Cross-Site Scripting (XSS), thường xuất phát từ những mẫu mã bất thường, ví dụ như việc sử dụng trực tiếp dữ liệu đầu vào từ người dùng ($_GET, $_POST) trong các câu lệnh truy vấn cơ sở dữ liệu mà không qua các hàm làm sạch (sanitization). Mô hình SLAMC, được huấn luyện trên các mã nguồn an toàn, đã học được rằng các mẫu mã như vậy có xác suất rất thấp. Do đó, nó có thể cảnh báo các đoạn mã đáng ngờ này. Mặc dù không phải là một công cụ phân tích bảo mật chuyên dụng, khả năng này cho thấy tiềm năng của học máy phát hiện lỗi phần mềm trong việc tăng cường an ninh cho ứng dụng web ngay từ giai đoạn phát triển.
VI. Tương lai luận văn UET Áp dụng AI trong công nghệ phần mềm
Luận văn thạc sĩ về mô hình SLAMC không chỉ là một công trình nghiên cứu độc lập mà còn mở ra nhiều hướng phát triển đầy hứa hẹn cho tương lai. Những kết quả đạt được là một minh chứng rõ ràng cho tiềm năng to lớn của việc áp dụng AI trong công nghệ phần mềm, đặc biệt trong lĩnh vực đảm bảo và kiểm soát chất lượng. Công trình này là nền tảng vững chắc cho các nghiên cứu sâu hơn, chẳng hạn như mở rộng mô hình để hỗ trợ các phiên bản PHP mới hơn hoặc các ngôn ngữ lập trình khác như JavaScript, Python. Hướng đi tự nhiên tiếp theo là tích hợp các mô hình ngôn ngữ tiên tiến hơn như Transformer hay BERT, vốn đã tạo ra cuộc cách mạng trong lĩnh vực xử lý ngôn ngữ tự nhiên. Những mô hình này có khả năng nắm bắt các mối quan hệ phụ thuộc xa trong mã nguồn tốt hơn nhiều so với N-gram. Tương lai của học máy phát hiện lỗi phần mềm hứa hẹn sẽ tạo ra những trợ lý lập trình thông minh, có khả năng gợi ý sửa lỗi và thậm chí tự động vá lỗi, giúp nâng cao năng suất và chất lượng sản phẩm phần mềm một cách toàn diện.
6.1. Tổng kết những đóng góp chính của luận văn khoa học máy tính UET
Công trình luận văn khoa học máy tính UET này đã có ba đóng góp khoa học chính. Thứ nhất, đề xuất thành công mô hình SLAMC, một phương pháp mới kết hợp mô hình thống kê và thông tin ngữ nghĩa để phát hiện lỗi mã nguồn, chứng minh tính hiệu quả trên ngôn ngữ PHP. Thứ hai, xây dựng và thử nghiệm một công cụ phần mềm hoàn chỉnh, cho thấy tính khả thi của việc ứng dụng mô hình vào thực tế. Công cụ này là một tài sản quý giá cho các nghiên cứu tiếp theo. Thứ ba, cung cấp một bộ kết quả thực nghiệm chi tiết, so sánh định lượng hiệu quả của SLAMC với các phương pháp hiện có, khẳng định ưu thế của cách tiếp cận dựa trên học máy trong việc phát hiện các lỗi phức tạp. Những đóng góp này không chỉ có giá trị học thuật mà còn có tiềm năng ứng dụng thực tiễn cao, thúc đẩy sự phát triển của các công cụ hỗ trợ lập trình thông minh.
6.2. Hướng phát triển của học máy phát hiện lỗi phần mềm
Nhìn về tương lai, lĩnh vực học máy phát hiện lỗi phần mềm đang có nhiều hướng phát triển thú vị. Một hướng đi là phát triển các mô hình đa phương thức (multi-modal), kết hợp phân tích mã nguồn tĩnh với các thông tin khác như lịch sử commit, báo cáo lỗi (bug reports), và thảo luận của lập trình viên. Việc này giúp mô hình có một cái nhìn toàn diện hơn về bối cảnh của lỗi. Một hướng khác là học sâu trên đồ thị (Graph Neural Networks - GNNs) để phân tích các đồ thị biểu diễn chương trình như Đồ thị Luồng Điều khiển (CFG) hay Đồ thị Phụ thuộc Chương trình (PDG). Cách tiếp cận này có thể nắm bắt các mối quan hệ cấu trúc phức tạp trong mã tốt hơn. Cuối cùng, sự phát triển của các mô hình sinh (Generative Models) mở ra khả năng tự động sửa lỗi (automated program repair), nơi mô hình không chỉ phát hiện lỗi mà còn đề xuất các bản vá chính xác.