Phát hành ControlFlag 1.0, công cụ xác định lỗi trong mã C

Intel đã xuất bản bản phát hành chính đầu tiên của công cụ ControlFlag 1.0, cho phép bạn xác định các lỗi và điểm bất thường trong mã nguồn bằng cách sử dụng hệ thống máy học được đào tạo trên một lượng lớn mã hiện có. Không giống như các máy phân tích tĩnh truyền thống, ControlFlag không áp dụng các quy tắc có sẵn, trong đó rất khó để cung cấp tất cả các tùy chọn có thể mà dựa trên số liệu thống kê về việc sử dụng các cấu trúc ngôn ngữ khác nhau trong một số lượng lớn các dự án hiện có. Mã ControlFlag được viết bằng C++ và có nguồn mở theo giấy phép MIT.

Hệ thống được đào tạo bằng cách xây dựng mô hình thống kê về mảng mã hiện có của các dự án nguồn mở được xuất bản trên GitHub và các kho công cộng tương tự. Ở giai đoạn huấn luyện, hệ thống xác định các mẫu điển hình để xây dựng cấu trúc trong mã và xây dựng cây cú pháp kết nối giữa các mẫu này, phản ánh luồng thực thi mã trong chương trình. Kết quả là một cây ra quyết định tham chiếu được hình thành kết hợp kinh nghiệm phát triển của tất cả các mã nguồn được phân tích. Mã đang được xem xét trải qua một quá trình tương tự để xác định các mẫu được kiểm tra dựa trên cây quyết định tham chiếu. Sự khác biệt lớn với các nhánh lân cận cho thấy sự hiện diện của sự bất thường trong mẫu đang được kiểm tra.

Phát hành ControlFlag 1.0, công cụ xác định lỗi trong mã C

Để làm ví dụ về khả năng của ControlFlag, các nhà phát triển đã phân tích mã nguồn của các dự án OpenSSL và cURL:

  • Cấu trúc dị thường “(s1 == NULL) ∧ (s2 == NULL)” và “(s1 == NULL) | (s2 == NULL)" , không khớp với mẫu thường được sử dụng "(s1 == NULL) || (s2 == NULL)". Mã này cũng xác định các điểm bất thường trong các biểu thức “(-2 == rv)” (điểm trừ là lỗi đánh máy) và “BIO_puts(bp, “:”) <= 0)” (trong bối cảnh kiểm tra việc hoàn thành thành công của chức năng thì lẽ ra nó phải là “== 0”).
  • Trong cURL, một lỗi được phát hiện mà máy phân tích tĩnh không phát hiện được khi sử dụng phần tử cấu trúc “s->keepon”, có kiểu số nhưng được so sánh với giá trị boolean TRUE.

Trong số các tính năng của phiên bản ControlFlag 1.0, có sự hỗ trợ đầy đủ cho các mẫu tiêu chuẩn cho ngôn ngữ C và khả năng phát hiện những điểm bất thường trong các biểu thức “nếu” có điều kiện. Ví dụ: khi phân tích đoạn mã “if (x = 7) y = x;” Hệ thống sẽ xác định rằng câu lệnh “if” thường sử dụng cấu trúc “variable == number” để so sánh các giá trị số, do đó rất có thể “variable = number” trong biểu thức “if” là do lỗi đánh máy. Bộ công cụ này bao gồm một tập lệnh cho phép bạn tải xuống kho ngôn ngữ C hiện có trên GitHub và sử dụng chúng để xây dựng mô hình. Các mô hình làm sẵn cũng có sẵn, cho phép bạn bắt đầu kiểm tra mã ngay lập tức.

Nguồn: opennet.ru

Thêm một lời nhận xét