Bối cảnh và vấn đề nghiên cứu

Trong xu hướng phát triển của công nghệ hiện đại, các hệ thống nhúng (embedded systems) đóng vai trò trung tâm trong nhiều lĩnh vực công nghiệp, tự động hóa điều khiển, quan trắc và truyền tin. Đặc trưng nổi bật của hệ thống nhúng là tính tích hợp chặt chẽ giữa phần cứng và phần mềm, yêu cầu độ ổn định, tính toàn vẹn và mức độ an toàn nghiêm ngặt. Những lỗi phát sinh trong hệ thống nhúng chuyên dụng (như thiết bị điều khiển động cơ ô tô, hệ thống dẫn đường máy bay, nhà máy hóa chất hay hệ thống cáp ngầm) có thể dẫn đến nguy hiểm trực tiếp cho con người hoặc gây thiệt hại kinh tế lớn. Do đó, việc mô hình hóa và kiểm thử phần mềm hệ thống nhúng trước khi chế tạo phần cứng thực tế là quy trình bắt buộc.

Môi trường MATLAB/Simulink được sử dụng phổ biến để thiết kế và mô phỏng hệ thống động ở mức cao. Tuy nhiên, khi kiểm thử các mô hình Simulink phức tạp có không gian đầu vào lớn, việc xây dựng mô hình kiểm thử thủ công gặp phải rào cản lớn: tiêu tốn nhiều thời gian, công sức và dễ bỏ sót các trường hợp kiểm thử quan trọng. Xuất phát từ thực tiễn đó, đồ án tốt nghiệp tập trung giải quyết bài toán tự động hóa việc sinh mô hình Simulink phục vụ kiểm thử.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án bao gồm:

  1. Nghiên cứu tổng quan về hệ thống nhúng, mô hình hóa hệ thống nhúng bằng MATLAB/Simulink và các phương pháp kiểm thử hộp đen.
  2. Nghiên cứu và xây dựng phương pháp sinh tự động mô hình MATLAB/Simulink bằng phương pháp tổ hợp toàn phần (Combinatorial Testing).
  3. Nghiên cứu và áp dụng kỹ thuật kiểm thử theo cặp (Pairwise Testing) thông qua công cụ PICT (Pairwise Independent Combinatorial Testing) của Microsoft nhằm tối ưu hóa số lượng ca kiểm thử.
  4. Thiết kế và phát triển phần mềm có giao diện đồ họa (GUI) trên nền tảng MATLAB, tích hợp các phương pháp sinh mô hình tự động và thực hiện thử nghiệm trên mô hình cụ thể.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Mô hình thiết kế hệ thống nhúng trên MATLAB/Simulink, phương pháp kiểm thử hộp đen, kỹ thuật Pairwise Testing và công cụ PICT.
  • Phạm vi nghiên cứu: Đồ án được thực hiện tại Học viện Công nghệ Bưu chính Viễn thông (Khoa Công nghệ Thông tin 1, ngành Hệ thống Thông tin), hoàn thành vào tháng 01/2022. Phạm vi kỹ thuật tập trung vào việc biến đổi tổ hợp tham số của các khối (blocks) trong mô hình Simulink gốc dựa trên tập tin định nghĩa tham số dạng JSON, xuất ra danh sách các tệp mô hình .slx phục vụ kiểm thử.

Cơ sở lý thuyết và phương pháp

Khung lý thuyết của đồ án dựa trên các nguyên lý kỹ thuật phần mềm và công cụ kỹ thuật số:

  • Mô hình hóa và mô phỏng bằng MATLAB/Simulink: Simulink hỗ trợ mô phỏng hệ thống tuyến tính, phi tuyến, liên tục và gián đoạn. Mô hình Simulink được cấu thành từ hai thành phần chính: các khối (blocks) đóng vai trò tạo, xử lý và xuất tín hiệu (Inport, Outport, Mathematical Operator, Logical/Relational Operator, Multiport Switch, Delay...) và các đường dẫn (lines) truyền dữ liệu số (Boolean, integer, floating/fixed-point).
  • Kiểm thử hộp đen (Black-box Testing): Phương pháp kiểm thử không cần can thiệp mã nguồn bên trong mà dựa vào việc xác định dữ liệu đầu vào và kiểm tra tính đúng đắn của kết quả đầu ra. Các kỹ thuật hộp đen được nhắc đến gồm: Phân lớp tương đương (Equivalence Partition), Phân tích giá trị biên (Boundary Value Analysis), Bảng quyết định (Decision Table) và Kiểm thử theo cặp (Pairwise Testing).
  • Kỹ thuật kiểm thử theo cặp (Pairwise Testing): Dựa trên quan sát thực nghiệm rằng phần lớn các lỗi phần mềm bắt nguồn từ sự tương tác giữa hai tham số (kỹ thuật này có thể bao phủ khoảng 70% lỗi). Pairwise Testing tạo ra bộ ca kiểm thử bao phủ tất cả các cặp giá trị rời rạc $(x_i, x_j)$ khả dĩ giữa các biến đầu vào, giúp giảm thiểu đáng kể số ca kiểm thử so với phương pháp tổ hợp toàn phần ($m \times n$).
  • Công cụ PICT (Pairwise Independent Combinatorial Testing): Công cụ dòng lệnh do Microsoft phát triển dựa trên ba nguyên tắc thiết kế: tốc độ sinh ca kiểm thử cao, tính dễ sử dụng và khả năng mở rộng/tích hợp với các công cụ khác.

Phương pháp nghiên cứu thực tế:

  • Phương pháp phân tích và thiết kế hệ thống: Phân tích cấu trúc cây mô hình Simulink gốc, trừu tượng hóa các tham số của các khối thành định dạng JSON chuẩn.
  • Phương pháp thực nghiệm kiểm thử: So sánh kết quả sinh dữ liệu giữa phương pháp tổ hợp đầy đủ và phương pháp rút gọn bằng thuật toán Pairwise Testing.
  • Nguồn dữ liệu: Dữ liệu cấu hình tham số khối do tác giả tự xây dựng dưới định dạng JSON (parameter.json), các mô hình kiểm thử mẫu (chứa các khối Switch, Abs, Multiport Switch...) và tập tin sinh ca kiểm thử từ PICT.

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc tự động hóa kết hợp giao diện tương tác người dùng trên MATLAB:

[Mô hình Simulink gốc (.slx)] + [File định nghĩa tham số (.json)]
                                   (qua PICT.exe)

Quy trình triển khai gồm hai phương pháp chính:

1. Phương pháp sinh mô hình bằng tổ hợp toàn phần

  1. Đọc và giải mã dữ liệu đầu vào: Sử dụng lệnh fileread và jsondecode để phân tích tệp parameter.json nhằm trích xuất thông tin model, mode, danh sách target_blocks, combine_parameters và fixed_parameters.
  2. Duyệt và gán tham số: Duyệt lặp qua từng giá trị của các tham số cho từng khối, thiết lập biến đếm counter. Với mỗi tổ hợp giá trị, hệ thống sử dụng lệnh getSimulinkHandle(path, true) để lấy tham chiếu tới khối trong mô hình gốc và gán giá trị mới bằng lệnh set_param(block_name, parameter_name, parameter_value).
  3. Lưu trữ mô hình: Lưu mỗi ca kiểm thử thành một tệp mô hình Simulink độc lập bằng lệnh save_system(name_model, orderModel) và giải phóng tài nguyên với close_system(orderModel).

2. Phương pháp sinh mô hình sử dụng Pairwise Testing và PICT

  1. Chuẩn bị tệp đầu vào cho PICT: Chuyển đổi thông tin từ tệp JSON sang tệp văn bản input.txt theo cú pháp chuẩn của PICT: <ParamName>: <Value1>, <Value2>, ... bằng các hàm fopen, fprintf, fclose.
  2. Thực thi PICT: Gọi công cụ dòng lệnh từ MATLAB thông qua hàm hệ thống dos('pict.txt') hoặc dos('pict input.txt > output.txt') để sinh tệp output.txt chứa ma trận các cặp tham số đã tối ưu.
  3. Xử lý trung gian: Đọc tệp output.txt bằng textscan, chuyển cấu trúc mảng sang cell qua num2cell và ghi tạm ra định dạng Excel bằng xlswrite.
  4. Sinh mô hình hàng loạt: Sử dụng xlsread đọc ma trận ca kiểm thử vào mảng hai chiều. Lặp qua từng hàng của mảng (mỗi hàng tương ứng với một ca kiểm thử Pairwise), truy xuất khối bằng getSimulinkHandle, cập nhật thuộc tính bằng set_param, sau đó gọi save_system để xuất ra các tệp .slx.

3. Thiết kế giao diện người dùng (MATLAB GUI)

Hệ thống sử dụng công cụ MATLAB GUIDE để xây dựng giao diện tương tác:

  • Màn hình chính (SinhMoHinh.fig): Cho phép người dùng lựa chọn một trong hai chế độ: "Sinh mô hình áp dụng phương pháp tổ hợp" hoặc "Sinh mô hình áp dụng pairwise testing".
  • Màn hình chức năng: Bao gồm các trường văn bản nhập đường dẫn (Mô hình mẫu, Thuộc tính), các nút điều khiển (Tải tệp lên, Sinh dữ liệu/Sinh mô hình, Quay lại) và bảng hiển thị (Table) danh sách các tên mô hình .slx đã được sinh thành công.

Nội dung chính theo từng chương

CHƯƠNG 1: TỔNG QUAN

Chương 1 hệ thống hóa các kiến thức nền tảng về hệ thống nhúng và công cụ mô hình hóa:

  • Phân tích các đặc điểm của hệ thống nhúng: tính chuyên dụng, ràng buộc thời gian thực, tài nguyên phần cứng giới hạn (firmware lưu trên ROM/Flash), các yêu cầu cao về độ tin cậy và giải pháp an toàn (như cơ chế watchdog timer, hệ thống dự phòng backup).
  • Giới thiệu phần mềm MATLAB và công cụ mở rộng Simulink; phân tích cách biểu diễn hệ thống thông qua các khối chức năng và đường truyền tín hiệu.
  • Đặt bài toán sinh tự động mô hình Simulink từ mô hình gốc và tệp định nghĩa tham số nhằm thay thế quy trình tạo ca kiểm thử thủ công.
  • Trình bày lý thuyết kiểm thử hộp đen, định nghĩa kỹ thuật Pairwise Testing, phân tích ưu điểm (xét hết các cặp giá trị, tiết kiệm chi phí) và nhược điểm (độ bao phủ lỗi khoảng 70%, khó áp dụng khi thiếu ràng buộc rõ ràng).
  • Giới thiệu công cụ PICT của Microsoft, hướng dẫn cài đặt và cú pháp chạy trên giao diện dòng lệnh Windows CMD.

CHƯƠNG 2: XÂY DỰNG PHƯƠNG PHÁP SINH TỰ ĐỘNG MÔ HÌNH MATLAB/SIMULINK

Chương 2 tập trung vào giải thuật và các bước hiện thực hóa hai phương pháp sinh mô hình:

  • Phương pháp tổ hợp: Trình bày sơ đồ quy trình 3 giai đoạn (Chuẩn bị mô hình gốc -> Phân tích mô hình gốc và tạo tệp định nghĩa tham số JSON -> Sinh dữ liệu kiểm thử). Định nghĩa cấu trúc tệp JSON chứa các trường: model, mode, target_blocks, fullpath, combine_parameters (name, values) và fixed_parameters. Liệt kê chi tiết các hàm MATLAB API thao tác với Simulink (fileread, jsondecode, getSimulinkHandle, set_param, fprintf, save_system, close_system).
  • Phương pháp Pairwise Testing qua PICT: Mô tả chi tiết cấu trúc tệp input.txt, cách gọi dos('pict.txt') từ MATLAB, cấu trúc dữ liệu trả về trong output.txt. Trình bày quy trình 2 bước chuyển đổi: từ output.txt sang output.xlsx (dùng textscan, num2cell, xlswrite) và từ Excel vào mảng hai chiều MATLAB (dùng xlsread) để cập nhật tham số hàng loạt vào các khối Simulink.

CHƯƠNG 3: XÂY DỰNG HỆ THỐNG VÀ THỬ NGHIỆM

Chương 3 mô tả quá trình lập trình hệ thống và thực nghiệm:

  • Hướng dẫn cài đặt và sử dụng các công cụ: MATLAB (phiên bản R2017b), Simulink Library Browser, công cụ thiết kế giao diện MATLAB GUIDE (với các thành phần Uicontrols, Callback functions, tệp .m và .fig).
  • Trình bày kiến trúc giao diện người dùng của hệ thống sinh mô hình, mô tả chi tiết luồng tương tác trên giao diện chính và các giao diện chức năng con.
  • Tiến hành chạy thử nghiệm hệ thống với mô hình mẫu chứa các khối logic/chuyển mạch (như Switch_Abs, Switch, Switch1), thực hiện tải tệp parameter.json, kích hoạt tiến trình sinh tự động và kiểm tra kết quả xuất ra các tệp mô hình Simulink hoàn chỉnh trên ổ đĩa.

Kết quả và đóng góp

Đồ án đã đạt được các kết quả kỹ thuật và thực nghiệm cụ thể:

  • Xây dựng thành công ứng dụng tự động hóa trên nền tảng MATLAB GUI, tích hợp hoàn chỉnh hai cơ chế sinh mô hình: phương pháp tổ hợp toàn phần và phương pháp tối ưu hóa bằng Pairwise Testing thông qua PICT.
  • Tự động hóa quy trình đọc cấu hình JSON, ánh xạ đường dẫn khối trong Simulink, gán giá trị tham số và lưu tệp mô hình .slx mà không cần người dùng phải thao tác thủ công trên giao diện Simulink.
  • Đưa ra ví dụ thực nghiệm đối sánh rõ nét về hiệu quả cắt giảm số lượng ca kiểm thử giữa hai phương pháp:
Tham số đầu vào Các giá trị tham số Số lượng giá trị ($n_i$)
Loại đặt hàng Mua, Bán, Bảo hành 3
Địa điểm Hà Nội, Đà Nẵng, TP. Hồ Chí Minh 3
Loại xe Wave, Vision, Air Blade, Exciter 4
Số đăng ký xe Hợp lệ, Không hợp lệ 2

Số lượng ca kiểm thử sinh ra theo hai phương pháp:

  • Phương pháp tổ hợp toàn phần: $3 \times 3 \times 4 \times 2 = 72$ ca kiểm thử.
  • Phương pháp kiểm thử theo cặp (Pairwise Testing): Tối ưu còn 12 ca kiểm thử.

Chi tiết 12 ca kiểm thử thu được từ kỹ thuật Pairwise Testing trong văn bản:

STT Loại đặt hàng Địa điểm Loại xe Số đăng ký xe
1 Mua Hà Nội Wave Hợp lệ
2 Bán Đà Nẵng Wave Không hợp lệ
3 Bảo hành TP. Hồ Chí Minh Wave Không hợp lệ
4 Bán Hà Nội Vision Hợp lệ
5 Bảo hành Đà Nẵng Vision Hợp lệ
6 Mua TP. Hồ Chí Minh Vision Không hợp lệ
7 Bảo hành Hà Nội Air Blade Không hợp lệ
8 Mua Đà Nẵng Air Blade Hợp lệ
9 Bán TP. Hồ Chí Minh Air Blade Hợp lệ
10 Mua Hà Nội Exciter Không hợp lệ
11 Bán Đà Nẵng Exciter Không hợp lệ
12 Bảo hành TP. Hồ Chí Minh Exciter Hợp lệ

Đóng góp của đồ án:

  • Cung cấp giải pháp phần mềm hỗ trợ kiểm thử mô hình hệ thống nhúng, giúp giảm thiểu chi phí, thời gian và công sức xây dựng bộ dữ liệu kiểm định.
  • Kết hợp thành công công cụ kiểm thử tổ hợp độc lập (Microsoft PICT) vào quy trình xử lý mô hình hóa của MATLAB/Simulink thông qua cầu nối tệp trung gian và tập lệnh tự động.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế được chỉ ra trong văn bản:

  • Kỹ thuật Pairwise Testing chỉ tập trung vào việc bao phủ các tương tác 2 yếu tố, do đó chỉ đảm bảo phát hiện khoảng 70% lỗi tiềm ẩn trong hệ thống.
  • Khi số lượng giá trị đầu vào của mỗi tham số tăng lên quá lớn, số lượng trường hợp kiểm thử sinh ra vẫn có xu hướng tăng nhanh.
  • Kỹ thuật không áp dụng được cho các bài toán thiếu các điều kiện hoặc ràng buộc tham số rõ ràng.
  • Phạm vi thử nghiệm của hệ thống mới dừng lại ở việc thay đổi giá trị thuộc tính của các khối có sẵn trong mô hình gốc, chưa can thiệp thay đổi linh hoạt cấu trúc đường nối (topology) phức tạp giữa các khối.

Hướng nghiên cứu tiếp:

  • Mở rộng thuật toán sinh ca kiểm thử lên mức kết hợp $N$-thay đổi ($N$-wise testing với $N > 2$) để nâng cao tỷ lệ bao phủ lỗi.
  • Nghiên cứu tích hợp cơ chế tự động chạy mô phỏng và so sánh kết quả đầu ra của các mô hình đã sinh để đánh giá toàn diện chu trình kiểm thử.

Giá trị tham khảo

Đồ án có giá trị tham khảo thiết thực cho các đối tượng sau:

  • Sinh viên và học viên ngành Công nghệ thông tin, Kỹ thuật phần mềm, Hệ thống thông tin: Có thể tham khảo cách thiết kế cấu trúc dữ liệu JSON để quản lý tham số phần mềm, kỹ thuật lập trình giao diện MATLAB GUIDE và cách gọi thực thi các tiến trình dòng lệnh từ môi trường MATLAB.
  • Người nghiên cứu và kỹ sư phát triển hệ thống nhúng / Tự động hóa: Tham khảo phương pháp ứng dụng kiểm thử theo cặp (Pairwise Testing) và công cụ PICT để tối ưu hóa không gian kiểm thử cho các mô hình Simulink phức tạp.
  • Phần đáng giá nhất để tham khảo: Cấu trúc chi tiết của tệp parameter.json (Mục 2.1) cùng các đoạn mã lệnh mẫu sử dụng API Simulink (getSimulinkHandle, set_param, save_system) và quy trình chuyển đổi dữ liệu từ PICT sang Excel để nạp vào mô hình (Mục 2.2).

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

1. Tệp định nghĩa tham số đầu vào của hệ thống được tổ chức theo định dạng nào và gồm các trường dữ liệu gì? Tệp định nghĩa tham số được lưu dưới dạng JSON, gồm các trường chính: model (tên mô hình), mode (loại mô hình), target_blocks (danh sách các khối mục tiêu). Trong mỗi khối mục tiêu có fullpath (đường dẫn khối), combine_parameters (danh sách các tham số cần tổ hợp, gồm name và mảng các values) cùng fixed_parameters (các tham số giữ cố định).

2. Trong ví dụ minh họa của đồ án, kỹ thuật Pairwise Testing giúp giảm số lượng ca kiểm thử như thế nào? Với hệ thống mẫu gồm 4 tham số (Loại đặt hàng: 3 giá trị, Địa điểm: 3 giá trị, Loại xe: 4 giá trị, Số đăng ký xe: 2 giá trị), phương pháp tổ hợp toàn phần yêu cầu $3 \times 3 \times 4 \times 2 = 72$ ca kiểm thử. Áp dụng kỹ thuật Pairwise Testing, số ca kiểm thử giảm xuống còn 12 ca mà vẫn đảm bảo phủ toàn bộ các cặp giá trị giữa hai biến bất kỳ.

3. Công cụ PICT được tích hợp vào môi trường MATLAB bằng cơ chế nào? Hệ thống chuyển đổi dữ liệu từ tệp JSON sang tệp input.txt theo cú pháp của PICT, sau đó gọi thực thi tệp thực thi pict.exe thông qua lệnh hệ điều hành của MATLAB là dos('pict.txt') (hoặc dos('pict input.txt > output.txt')). Kết quả trả về dạng văn bản được xử lý bằng các lệnh textscan, num2cell, xlswrite và xlsread để đưa vào mảng hai chiều trong MATLAB.

4. Những lệnh MATLAB nào đóng vai trò cốt lõi trong việc gán tham số và lưu mô hình Simulink tự động? Các lệnh cốt lõi gồm: getSimulinkHandle(path, true) (lấy tham chiếu/handle của khối từ đường dẫn), set_param(block_name, parameter_name, parameter_value) (gán giá trị cho tham số của khối), save_system(name_model, orderModel) (lưu mô hình mới sinh vào hệ thống) và close_system(orderModel) (đóng mô hình).

5. Điểm hạn chế lớn nhất của kỹ thuật Pairwise Testing theo phân tích của tác giả là gì? Hạn chế lớn nhất là kỹ thuật này chỉ bao phủ được khoảng 70% lỗi (do chỉ xét tương tác giữa 2 tham số), số lượng ca kiểm thử vẫn tăng nhanh khi số lượng giá trị của mỗi tham số tăng cao, và không áp dụng được cho những bài toán không xác định rõ các điều kiện biên hoặc ràng buộc đầu vào.

Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống sinh mô hình MATLAB/Simulink tự động" của tác giả Lê Thị Ngân đã giải quyết bài toán tự động hóa tạo dữ liệu kiểm thử cho mô hình hệ thống nhúng. Bằng việc tích hợp kỹ thuật Pairwise Testing thông qua công cụ PICT của Microsoft và phát triển giao diện đồ họa trên MATLAB, hệ thống cho phép cắt giảm đáng kể số lượng ca kiểm thử so với phương pháp tổ hợp truyền thống trong khi vẫn đảm bảo độ bao phủ các cặp tham số tương tác. Đồ án cung cấp một tài liệu tham khảo hoàn chỉnh về mặt phương pháp luận, cấu trúc dữ liệu và kỹ thuật lập trình điều khiển Simulink phục vụ công tác đảm bảo chất lượng phần mềm nhúng.