Tổng quan nghiên cứu

Trong kỹ thuật phần mềm hiện đại, các lỗi hệ thống nghiêm trọng thường gây ra thiệt hại kinh tế ước tính chiếm tới 35% đến 40% tổng chi phí bảo trì dự án. Sự phức tạp ngày càng tăng của các hệ thống thông tin đòi hỏi việc tách biệt các mối quan tâm đan xen (crosscutting concerns) như bảo mật, kiểm toán, nhật ký và quản lý giao dịch. Lập trình hướng khía cạnh (Aspect-Oriented Programming - AOP) và mở rộng của nó là lập trình hướng khía cạnh dựa sự kiện (Event-based Aspect-Oriented Programming - EAOP) đã cung cấp giải pháp mô đun hóa mạnh mẽ bằng cách đan các khía cạnh vào luồng thực thi thông qua chuỗi sự kiện. Tuy nhiên, việc tự động đan mã khía cạnh tiềm ẩn rủi ro phá vỡ các bất biến trạng thái và làm thay đổi hành vi cốt lõi của phần mềm ban đầu.

Luận văn thạc sĩ chuyên ngành Kỹ thuật Phần mềm (mã số 60480103) thực hiện năm 2016 tại Đại học Công nghệ – Đại học Quốc gia Hà Nội tập trung giải quyết bài toán cốt lõi: Thiết lập phương pháp hình thức để mô hình hóa và kiểm chứng tự động tính đúng đắn của các ứng dụng EAOP. Mục tiêu cụ thể là xây dựng bộ quy tắc chuyển đổi hình thức từ EAOP sang ngôn ngữ đặc tả Event-B và sử dụng nền tảng chứng minh tự động Rodin nhằm kiểm chứng 100% các ràng buộc an toàn của hệ thống. Nghiên cứu được thử nghiệm trên mô hình hệ thống máy rút tiền tự động (ATM) với phạm vi bao phủ 3 giao dịch ngân hàng then chốt, mang lại giải pháp tin cậy giúp các kỹ sư phát hiện sớm 100% các vi phạm logic ngay từ giai đoạn thiết kế kiến trúc.

Cơ sở lý thuyết và phương pháp nghiên cứu

Khung lý thuyết áp dụng

Nghiên cứu tích hợp hai nền tảng lý thuyết tiên tiến trong công nghệ phần mềm:

  • Lý thuyết lập trình hướng khía cạnh dựa sự kiện (EAOP): Mô hình hóa hệ thống dựa trên khái niệm điểm nối (joinpoint), hướng cắt (pointcut), mã hành vi (advice) và cấu trúc cây khía cạnh với 4 toán tử thành phần nhị phân chính gồm Seq (tuần tự), Any (tùy ý), Fst (ưu tiên nút trái) và Cond (điều kiện). Hệ thống xử lý 4 loại sự kiện cơ bản trong vòng đời thực thi phương thức gồm gọi phương thức (call), thực thi phương thức (execution), khởi tạo (initialization) và xử lý ngoại lệ (handler).
  • Phương pháp hình thức Event-B: Phương pháp phát triển hệ thống dựa trên lý thuyết tập hợp và logic vị từ bậc một. Mô hình Event-B gồm hai thành phần cốt lõi: Ngữ cảnh (Context - chứa các tập hợp, hằng số, tiên đề) đại diện cho phần tĩnh và Máy (Machine - chứa biến, bất biến, sự kiện) đại diện cho hành vi động. Kỹ thuật làm mịn (refinement) từng bước cho phép chuyển dịch mô hình trừu tượng sang mô hình chi tiết với tính đúng đắn được chứng minh toán học.

Phương pháp nghiên cứu

Nghiên cứu áp dụng phương pháp tiếp cận hình thức hóa kết hợp thực nghiệm ca điển hình (case study):

  • Dữ liệu và mẫu thực nghiệm: Lựa chọn mẫu nghiên cứu có chủ đích là hệ thống điều khiển giao dịch máy ATM, bao gồm 3 lớp nghiệp vụ cốt lõi (Transaction, Exchange, updatetr) với 6 thuộc tính bất biến toán học biểu diễn số dư tài khoản và hạn mức giao dịch. Cỡ mẫu này được chọn vì chứa đầy đủ các quan hệ tương tác đan xen phức tạp giữa luồng xử lý chính và các khía cạnh mở rộng như tính phí dịch vụ và cộng thưởng.
  • Phương pháp phân tích và kiểm chứng: Xây dựng 3 luật ánh xạ hình thức:
    • Luật 1: Chuyển đổi chương trình cơ bản BP = (E, A, V, C) sang máy trừu tượng Event-B, trong đó tập sự kiện E ánh xạ thành các Event, tập biến V ánh xạ thành Variables và ràng buộc C ánh xạ thành Invariants.
    • Luật 2: Chuyển đổi khía cạnh thành máy làm mịn Event-B thông qua cơ chế refinement.
    • Luật 3: Ánh xạ mã hành vi thành các hành động gán biến trong sự kiện Event-B.
  • Công cụ và quy trình: Sử dụng nền tảng mã nguồn mở Rodin (phiên bản tích hợp trên Eclipse) cùng công cụ kiểm tra mô hình ProB để tự động sinh và chứng minh 100% các mệnh đề nghĩa vụ chứng minh (Proof Obligations - POs) trong khoảng thời gian thực thi tối ưu.

Kết quả nghiên cứu và thảo luận

Những phát hiện chính

Quá trình mô hình hóa và thực nghiệm kiểm chứng trên công cụ Rodin đã chỉ ra những phát hiện học thuật then chốt:

  1. Phát hiện lỗ hổng logic tiềm ẩn trong mã nguồn ban đầu: Trong phương thức chuyển tiền (transfer) của lớp Exchange, chương trình cơ bản thiếu mệnh đề bảo vệ kiểm tra số dư. Công cụ Rodin đã chỉ ra sự kiện không thể kiểm chứng thành công khi thiếu điều kiện kích hoạt grd3: amt <= balance, dẫn đến nguy cơ số dư tài khoản bị âm khi số tiền rút vượt quá số dư hiện có.
  2. Kiểm chứng thành công tính bảo toàn bất biến của khía cạnh: Khi đan khía cạnh cập nhật giao dịch (updatetr) để trừ phí và cộng thưởng cho lần rút tiền đầu tiên (bFirst = TRUE), công cụ ProB đã phát hiện kịch bản vi phạm bất biến balance >= 0. Sau khi bổ sung điều kiện kích hoạt grd3: bonus > fee, hệ thống đã khôi phục hoàn toàn tính toàn vẹn dữ liệu.
  3. Tự động hóa chứng minh hình thức đạt hiệu suất tối đa: Bảng thống kê Rodin Statistics ghi nhận 100% các mệnh đề nghĩa vụ chứng minh (bao gồm nghĩa vụ bảo toàn bất biến INV và nghĩa vụ làm mịn REF) được chứng minh tự động hoàn toàn bởi bộ giải toán học tích hợp, không cần can thiệp thủ công.

Thảo luận kết quả

Kết quả nghiên cứu đã chứng minh giả thuyết khoa học: Việc áp dụng cơ chế làm mịn trong Event-B cho phép cô lập và kiểm soát hoàn toàn các tác động phụ của việc đan mã khía cạnh. Trong các phương pháp kiểm thử truyền thống, độ bao phủ kiểm thử thường chỉ đạt khoảng 70% đến 85% các nhánh điều kiện, dễ bỏ sót các lỗi tương tranh hoặc lỗi xung đột trạng thái giữa các khía cạnh. Ngược lại, phương pháp hình thức Event-B đảm bảo độ tin cậy tuyệt đối 100% đối với toàn bộ không gian trạng thái.

Dữ liệu kiểm chứng có thể được trực quan hóa thông qua bảng thống kê chỉ số chứng minh (Proof Statistics Table) hiển thị tổng số mệnh đề POs sinh ra, số lượng POs được giải tự động (Auto Proofs đạt 100%) và số lượng POs cần chứng minh tương tác (Interactive Proofs bằng 0). Bên cạnh đó, biểu đồ cây làm mịn (Refinement Hierarchy Chart) thể hiện rõ cấu trúc phân tầng từ máy trừu tượng M đến máy làm mịn chứa khía cạnh, minh họa trực quan sự chuyển dịch trạng thái an toàn của hệ thống.

Đề xuất và khuyến nghị

Nhằm áp dụng hiệu quả mô hình nghiên cứu vào thực tiễn công nghiệp phần mềm, 4 nhóm giải pháp chiến lược được đề xuất:

  • Chuẩn hóa quy trình đặc tả hình thức trong thiết kế hệ thống (Mục tiêu: Giảm 85% lỗi thiết kế logic; Thời gian: 1 đến 3 tháng; Chủ thể: Đội ngũ kiến trúc sư phần mềm và chuyên viên phân tích nghiệp vụ): Áp dụng bắt buộc việc xây dựng mô hình ngữ cảnh và máy trừu tượng Event-B cho toàn bộ các mô đun tài chính nhạy cảm trước khi tiến hành lập trình chi tiết.
  • Tích hợp công cụ Rodin và ProB vào đường ống CI/CD (Mục tiêu: Tự động hóa 100% khâu kiểm chứng bất biến; Thời gian: 3 đến 6 tháng; Chủ thể: Đội ngũ kỹ sư DevOps và QA/QC Automation): Thiết lập cơ chế tự động biên dịch và xả các mệnh đề chứng minh hình thức mỗi khi có khía cạnh mới được đan vào mã nguồn gốc.
  • Xây dựng bộ thư viện quy tắc ánh xạ tự động từ mã nguồn Java/AspectJ sang Event-B (Mục tiêu: Rút ngắn 60% thời gian mô hình hóa thủ công; Thời gian: 6 đến 12 tháng; Chủ thể: Nhóm nghiên cứu phát triển công nghệ lõi): Phát triển công cụ chuyển đổi trung gian dựa trên nền tảng Recoder để tự động sinh mã đặc tả Event-B từ các đoạn mã nguồn Java thực tế.
  • Đào tạo nâng cao năng lực toán học hình thức cho kỹ sư phần mềm (Mục tiêu: 100% kỹ sư nòng cốt làm chủ kỹ thuật Refinement; Thời gian: 6 tháng định kỳ; Chủ thể: Bộ phận đào tạo nội bộ phối hợp với các viện, trường đại học chuyên ngành).

Đối tượng nên tham khảo luận văn

Nội dung và kết quả nghiên cứu của luận văn mang lại giá trị ứng dụng thiết thực cho 4 nhóm đối tượng chính:

  • Học viên cao học và nghiên cứu sinh ngành Khoa học Máy tính / Kỹ thuật Phần mềm: Tiếp cận khung phương pháp luận hoàn chỉnh về sự kết hợp giữa mô hình hướng khía cạnh (AOP/EAOP) và phương pháp hình thức (Event-B), phục vụ mở rộng nghiên cứu sang các hệ thống phân tán và tương tranh.
  • Kiến trúc sư phần mềm và nhà phát triển hệ thống Ngân hàng - Fintech: Nắm bắt phương pháp kiểm soát rủi ro khi triển khai các mối quan tâm cắt ngang như bảo mật, kiểm toán giao dịch, giúp giảm 50% thời gian khắc phục sự cố sau triển khai.
  • Chuyên gia kiểm thử và đảm bảo chất lượng phần mềm (QA/QC): Sử dụng công cụ kiểm chứng mô hình ProB và nền tảng Rodin như một công cụ xác minh chất lượng cao cấp, nâng tỷ lệ phát hiện lỗi logic biên lên 100%.
  • Các đơn vị đào tạo đại học và sau đại học: Sử dụng luận văn làm tài liệu tham khảo chuyên đề chuyên sâu cho các học phần Phương pháp hình thức trong công nghệ phần mềm và Kiến trúc phần mềm nâng cao.

Câu hỏi thường gặp

  • Phương pháp Event-B giải quyết vấn đề phá vỡ tính đóng gói của lập trình hướng khía cạnh như thế nào? Phương pháp Event-B sử dụng cơ chế làm mịn (refinement) kết hợp hệ thống mệnh đề bất biến (invariants) toán học nghiêm ngặt. Khi một khía cạnh can thiệp vào biến trạng thái của chương trình gốc, công cụ Rodin sẽ tự động thiết lập nghĩa vụ chứng minh g(ev_r) và I(vb) suy ra I(vb'). Nhờ đó, 100% các thay đổi từ khía cạnh đều bị ràng buộc không được vi phạm trạng thái an toàn của hệ thống gốc.

  • Tại sao mô hình EAOP lại ưu việt hơn mô hình AOP truyền thống trong các hệ thống phản hồi? Khác với AOP truyền thống chỉ can thiệp tại các điểm nối đơn lẻ, EAOP cho phép xác định hành vi cắt ngang dựa trên toàn bộ chuỗi sự kiện tuần tự trong quá trình thực thi. Với sự hỗ trợ của 4 toán tử nhị phân gồm Seq, Any, Fst, Cond, EAOP loại bỏ triệt để các xung đột tương tranh giữa các khía cạnh và hỗ trợ áp dụng khía cạnh lồng nhau hiệu quả.

  • Công cụ Rodin đóng vai trò gì trong quy trình kiểm chứng phần mềm hướng khía cạnh? Rodin đóng vai trò là môi trường tích hợp mã nguồn mở dựa trên Eclipse, cung cấp bộ sinh mệnh đề chứng minh và công cụ kiểm chứng tĩnh tự động. Rodin giúp các kỹ sư quản lý kho dữ liệu mô hình, kiểm tra cú pháp và tự động phóng thích 100% các nghĩa vụ chứng minh toán học, giúp tiết kiệm hơn 70% thời gian so với chứng minh thủ công.

  • Sự khác biệt cốt lõi giữa phương pháp kiểm thử thông thường và kiểm chứng hình thức bằng ProB là gì? Kiểm thử thông thường dựa trên tập dữ liệu mẫu hữu hạn và thường chỉ bao phủ khoảng 80% trường hợp thực tế, dễ bỏ sót các lỗi biên phức tạp. Trong khi đó, bộ kiểm tra mô hình ProB kết hợp với Rodin thực hiện rà soát toàn bộ không gian trạng thái logic, giúp phát hiện chính xác các phản ví dụ (counter-examples) khi biến số vi phạm miền giá trị đã định nghĩa.

  • Phương pháp đề xuất có thể áp dụng cho các ngôn ngữ lập trình nào ngoài Java và AspectJ? Phương pháp ánh xạ hình thức được xây dựng trên cấu trúc toán học trừu tượng BP = (E, A, V, C) hoàn toàn độc lập với ngôn ngữ lập trình cụ thể. Do đó, quy trình này có thể áp dụng hiệu quả cho bất kỳ ngôn ngữ nào hỗ trợ kiến trúc hướng sự kiện và khía cạnh như C#, C++, Python hoặc các hệ thống hướng sự kiện phân tán hiện đại.

Kết luận

  • Luận văn đã xây dựng thành công khung lý thuyết hoàn chỉnh kết hợp giữa lập trình hướng khía cạnh dựa sự kiện (EAOP) và phương pháp hình thức Event-B.
  • Thiết lập 3 quy tắc ánh xạ chuẩn xác chuyển đổi toàn diện các thành phần chương trình cơ bản, khía cạnh và mã hành vi sang máy trừu tượng và máy làm mịn trong Event-B.
  • Chứng minh toán học thành công tính bảo toàn các ràng buộc bất biến của hệ thống dưới sự tác động của các khía cạnh đan xen.
  • Ứng dụng thực nghiệm trên hệ thống giao dịch ATM khẳng định khả năng phát hiện sớm 100% các lỗ hổng logic và phóng thích tự động toàn bộ nghĩa vụ chứng minh trên công cụ Rodin.
  • Lộ trình phát triển tiếp theo trong 6 đến 12 tháng tới sẽ tập trung mở rộng mô hình cho các cấu trúc crosscut phức tạp hơn trên hệ thống phân tán đa luồng. Quý độc giả và các nhóm phát triển phần mềm hãy áp dụng ngay phương pháp hình thức Event-B vào quy trình thiết kế để nâng cao tối đa độ tin cậy và chất lượng cho sản phẩm phần mềm của mình.