Tổng quan nghiên cứu

Trong kỹ nghệ phần mềm hiện đại, hoạt động đảm bảo chất lượng và kiểm thử đóng vai trò sống còn nhưng lại chiếm tới 40% đến 60% tổng chi phí của toàn bộ vòng đời phát triển dự án. Thách thức lớn nhất mà các kỹ sư phần mềm phải đối mặt là việc xây dựng kịch bản kiểm thử theo cách thủ công tiêu tốn nhiều nhân lực, dễ phát sinh sai sót chủ quan và khó thích ứng kịp thời khi các yêu cầu chức năng biến động liên tục. Nhằm giải quyết triệt để điểm nghẽn này, luận văn thạc sĩ chuyên ngành Hệ thống thông tin của tác giả Trần Thị Mùi, dưới sự hướng dẫn khoa học của Tiến sĩ Phạm Ngọc Hùng tại Trường Đại học Công nghệ – Đại học Quốc gia Hà Nội (bảo vệ năm 2015), đã tập trung nghiên cứu phương pháp sinh bộ kiểm thử tự động từ biểu đồ tuần tự UML 2.0 dựa trên nền tảng kiểm thử mô hình.

Mục tiêu trọng tâm của đề tài là xây dựng quy trình tự động hóa khép kín: phân tích đặc tả thiết kế hệ thống từ tệp XMI của biểu đồ tuần tự UML 2.0, chuyển đổi sang đồ thị dòng điều khiển, trích xuất tập đường kiểm thử độc lập, áp dụng kỹ thuật thực thi tượng trưng để sinh hệ ràng buộc và sử dụng công cụ giải hệ ràng buộc tự động nhằm sinh ra các ca kiểm thử chính xác. Phạm vi nghiên cứu tập trung vào các hệ thống phần mềm hướng thành phần và mô hình tương tác hướng đối tượng. Kết quả nghiên cứu có ý nghĩa thực tiễn to lớn khi giúp giảm thiểu khoảng 50% thời gian tạo ca kiểm thử, bảo đảm độ bao phủ kiểm thử đạt mức tối đa và xác minh tính đúng đắn giữa mã nguồn lập trình với kiến trúc thiết kế ban đầu ngay từ giai đoạn tiền triển khai.

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

Khung lý thuyết áp dụng

Luận văn thiết lập nền tảng khoa học vững chắc dựa trên sự kết hợp liên ngành giữa lý thuyết kiểm thử dựa trên mô hình (Model-Based Testing - MBT), lý thuyết đồ thị dòng điều khiển (Control Flow Graph - CFG), kỹ thuật thực thi tượng trưng (Symbolic Execution - SE) và lý thuyết giải hệ ràng buộc thỏa mãn mô-đun (Satisfiability Modulo Theories - SMT). Kiểm thử dựa trên mô hình cho phép trừu xuất hóa hành vi hệ thống thành các cấu trúc toán học chính xác như ôtômát hữu hạn trạng thái hoặc máy trạng thái UML. Trên cơ sở đó, 5 khái niệm cốt lõi được định nghĩa và vận dụng xuyên suốt gồm:

Thứ nhất, phân đoạn tương tác kết hợp (Combined Fragment) trong chuẩn UML 2.0, đại diện cho các luồng điều khiển phức tạp như lựa chọn rẽ nhánh (alt, opt), lặp (loop), thực thi song song (par), tuần tự hóa (seq, weak, strict), ngắt dòng (break) và các điều kiện lọc thông điệp (ignore, consider, assert, neg, critical).

Thứ hai, đồ thị dòng điều khiển biểu diễn luồng thực thi logic dưới dạng cấu trúc đồ thị có hướng, bao gồm đỉnh xuất phát, khối xử lý câu lệnh, điểm quyết định điều kiện, điểm nối và điểm kết thúc.

Thứ ba, đường kiểm thử (Test Path) là chuỗi các đỉnh liên tiếp từ điểm khởi đầu đến điểm kết thúc thỏa mãn các tiêu chí phủ kiểm thử độc lập.

Thứ tư, thực thi tượng trưng là kỹ thuật gán giá trị biến dưới dạng ký hiệu đại số thay vì số thực cụ thể để thiết lập hệ điều kiện đường đi.

Thứ năm, bộ giải SMT-Solver và ngôn ngữ chuẩn SMT-Lib, ứng dụng các lý thuyết logic như số học số nguyên tuyến tính không chứa lượng từ (QF_LIA) và số học số thực tuyến tính (QF_LRA) để tìm nghiệm thỏa mãn ràng buộc.

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

Nghiên cứu sử dụng nguồn dữ liệu đầu vào là các đặc tả thiết kế biểu đồ tuần tự UML 2.0 được lưu trữ dưới định dạng tệp chuẩn hóa XML Metadata Interchange (XMI). Tác giả đã xây dựng bộ quy tắc định dạng tệp XMI tùy chỉnh nhằm tinh gọn cấu trúc dữ liệu, loại bỏ các định danh ID phức tạp và thiết lập các thẻ bao gói rõ ràng cho các chu kỳ sống (Lifeline), thông điệp (Message), phân đoạn (Fragment) và biểu thức gác (Guard).

Phương pháp phân tích dựa trên việc xây dựng hệ thống gồm 9 thuật toán chuyên biệt: thuật toán phân tích cú pháp tệp XMI; thuật toán chuyển cấu trúc dữ liệu sang đường kiểm thử; cùng chuỗi 7 thuật toán xử lý riêng biệt cho từng loại phân đoạn tương tác phức tạp (alt, opt, break, loop, par, seq, weak, strict, ignore). Về cỡ mẫu thực nghiệm, nghiên cứu lựa chọn mẫu mục tiêu gồm các mô hình thiết kế ca sử dụng điển hình trong hệ thống phần mềm nghiệp vụ, bao gồm các cấu trúc lặp với cận lặp từ 5 đến 10 lần và các khối xử lý rẽ nhánh đa tầng. Phương pháp phân tích kết hợp giữa thuật toán duyệt đồ thị đệ quy quay lui để sinh đường đi độc lập và phân tích rút gọn câu lệnh tượng trưng qua N chu kỳ biến đổi. Tiến trình nghiên cứu được thực hiện xuyên suốt giai đoạn 2013-2015 tại phòng thí nghiệm công nghệ phần mềm thuộc Trường Đại học Công nghệ.

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

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

Quá trình thực nghiệm và kiểm thử hệ thống đã mang lại 3 phát hiện khoa học quan trọng:

Thứ nhất, hệ thống 9 thuật toán đề xuất đã chuyển đổi thành công 100% các phân đoạn kết hợp phức tạp của biểu đồ tuần tự UML 2.0 sang đồ thị dòng điều khiển tương đương. Cấu trúc lồng nhau giữa các khối rẽ nhánh và khối lặp được bóc tách chính xác mà không làm thất thoát ngữ nghĩa logic của bản thiết kế.

Thứ hai, việc tích hợp kỹ thuật thực thi tượng trưng kết hợp công cụ giải SMT-Solver đạt hiệu năng vượt trội so với phương pháp sinh ngẫu nhiên truyền thống. Trong các trường hợp kiểm thử chứa biểu thức điều kiện biên phức tạp, phương pháp sử dụng SMT-Solver tìm ra nghiệm thỏa mãn chỉ trong vài mili-giây với tỷ lệ thành công 100%, trong khi kỹ thuật sinh ngẫu nhiên mất thời gian gấp hơn 15 lần hoặc hoàn toàn rơi vào trạng thái bế tắc khi không gian tìm kiếm mở rộng.

Thứ ba, công cụ phần mềm do tác giả tự xây dựng đã tự động sinh ra tập ca kiểm thử tối ưu bao phủ 100% các đường đi thực thi được trên đồ thị dòng điều khiển. Hệ thống phát hiện chính xác các đường đi không thể thực thi (Infeasible Paths) thông qua trạng thái vô nghiệm (UNSAT) của bộ giải, giúp loại bỏ hoàn toàn các ca kiểm thử dư thừa và giảm thiểu khoảng 40% dung lượng bộ kiểm thử cần chạy trên hệ thống thực tế.

Thảo luận kết quả

Nguyên nhân cốt lõi giúp phương pháp đạt hiệu quả cao là nhờ cơ chế giải trừu tượng hóa phân cấp. Bằng cách bóc tách từng phân đoạn tương tác độc lập trong biểu đồ tuần tự rồi hợp nhất lại thành đồ thị dòng điều khiển tổng thể, độ phức tạp tính toán được kiểm soát chặt chẽ, hạn chế tối đa nguy cơ bùng nổ không gian trạng thái. Khi so sánh với các nghiên cứu tiền nhiệm sử dụng thuật toán học máy L-star hoặc công cụ Bandera phân tích mã nguồn Java, giải pháp của luận văn không bị phụ thuộc vào sự sẵn có của mã nguồn chương trình, đồng thời tiết kiệm đáng kể tài nguyên bộ nhớ khi xử lý các chuỗi hành vi dài.

Dữ liệu thực nghiệm của nghiên cứu có thể được trực quan hóa tối ưu thông qua một biểu đồ cột so sánh thời gian sinh ca kiểm thử giữa kỹ thuật sinh ngẫu nhiên và kỹ thuật SMT-Solver trên các mức độ phức tạp khác nhau của biểu thức gác. Biểu đồ sẽ thể hiện rõ đường tiệm cận thời gian ổn định của SMT-Solver ở mức dưới 100 mili-giây, trái ngược với đường tăng trưởng hàm mũ của phương pháp ngẫu nhiên. Đồng thời, một bảng ma trận ánh xạ giữa các toán tử tương tác UML (alt, loop, par) với số lượng đỉnh, số cạnh trên đồ thị dòng điều khiển và số lượng ca kiểm thử sinh ra sẽ minh chứng tính toàn diện và khả năng kiểm soát độ bao phủ của mô hình.

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

Dựa trên các kết quả đạt được, luận văn đưa ra 4 khuyến nghị hành động thiết thực cho các bên liên quan trong ngành công nghệ thông tin:

Thứ nhất, tích hợp module sinh ca kiểm thử tự động vào quy trình phát triển phần mềm liên tục. Các doanh nghiệp công nghệ cần nhúng công cụ chuyển đổi XMI và bộ giải SMT-Solver vào đường ống CI/CD nhằm tự động hóa khâu kiểm thử hồi quy ngay khi bản vẽ thiết kế được cập nhật, hướng tới mục tiêu cắt giảm 45% thời gian tạo kịch bản kiểm thử trong vòng 6 tháng triển khai.

Thứ hai, chuẩn hóa quy chuẩn mô hình hóa thiết kế kiến trúc. Đội ngũ kiến trúc sư phần mềm tại các công ty phát triển cần ban hành bộ quy chuẩn nội bộ về đặc tả biểu đồ tuần tự UML 2.0 tuân thủ cấu trúc định dạng XMI chuẩn hóa, bảo đảm 100% các phân đoạn kết hợp và biểu thức điều kiện được khai báo nhất quán ngay từ quý đầu tiên của dự án.

Thứ ba, mở rộng khả năng xử lý của công cụ đối với các cấu trúc dữ liệu nâng cao. Nhóm nghiên cứu và phát triển phần mềm cần tiếp tục tối ưu hóa thuật toán rút gọn câu lệnh để hỗ trợ đầy đủ các kiểu dữ liệu mảng động đa chiều, con trỏ và các phép toán phi tuyến tính phức tạp, đặt mục tiêu nâng mức độ bao phủ kiểm thử thực tế lên trên 95% trong lộ trình 12 tháng tiếp theo.

Thứ tư, đẩy mạnh công tác đào tạo chuyên môn về kiểm thử dựa trên mô hình. Các trường đại học khối công nghệ và trung tâm đào tạo lập trình cần đưa chuyên đề kiểm thử tự động bằng kỹ thuật thực thi tượng trưng và SMT-Solver vào khung chương trình giảng dạy đại học và sau đại học trong vòng 3 đến 6 tháng tới để nâng cao năng lực cho đội ngũ kỹ sư QA/QC tương lai.

Đố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ị học thuật và ứng dụng sâu sắc cho 4 nhóm đối tượng chính:

Thứ nhất, kỹ sư kiểm thử phần mềm tự động (Automation QA/QC Engineers) có thể khai thác trực tiếp quy trình 9 thuật toán và kiến trúc công cụ để xây dựng các khung kiểm thử tự động (Automation Frameworks), loại bỏ thao tác viết kịch bản thủ công và tối ưu hóa bộ dữ liệu kiểm thử biên.

Thứ hai, kiến trúc sư phần mềm và chuyên viên phân tích hệ thống (Software Architects / System Analysts) có thể sử dụng các quy tắc chuẩn hóa XMI và mô hình ánh xạ sang đồ thị dòng điều khiển để đánh giá độ phức tạp của thiết kế, từ đó phát hiện sớm các khiếm khuyết kiến trúc trước khi bàn giao cho đội ngũ lập trình viên.

Thứ ba, các nhà nghiên cứu, giảng viên và học viên cao học chuyên ngành Công nghệ thông tin và Hệ thống thông tin có thể sử dụng tài liệu làm tài liệu tham khảo chuyên sâu về việc ứng dụng kỹ thuật thực thi tượng trưng, lý thuyết thỏa mãn mô-đun SMT và kiểm thử phần mềm dựa trên mô hình hình thức.

Thứ tư, giám đốc kỹ thuật (CTO) và quản lý dự án phần mềm (Project Managers) có thể áp dụng các giải pháp đề xuất để hoạch định chiến lược kiểm thử tự động cho doanh nghiệp, giúp rút ngắn 30% thời gian đưa sản phẩm ra thị trường và tối ưu hóa ngân sách dự án.

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

Phương pháp sinh ca kiểm thử từ biểu đồ tuần tự UML 2.0 có ưu điểm gì vượt trội so với kiểm thử truyền thống?

Phương pháp này chuyển đổi toàn bộ quy trình tạo kịch bản từ thủ công sang tự động hóa hoàn toàn nhờ khai thác mô hình thiết kế. Điều này giúp giảm từ 40% đến 60% chi phí kiểm thử, loại bỏ sai sót chủ quan của con người, tăng độ bao phủ kiểm thử lên mức tuyệt đối và cho phép tái sử dụng bộ kiểm thử nhanh chóng khi yêu cầu hệ thống thay đổi.

SMT-Solver đóng vai trò gì trong quy trình sinh ca kiểm thử tự động?

SMT-Solver đóng vai trò là bộ giải toán học tự động nhận đầu vào là hệ ràng buộc logic được trích xuất từ kỹ thuật thực thi tượng trưng. Công cụ sẽ phân tích và tìm ra giá trị nghiệm chính xác của các biến đầu vào để kích hoạt đúng đường kiểm thử mục tiêu, hoặc xác định đường đi không thể thực thi nếu hệ vô nghiệm.

Luận văn xử lý các phân đoạn rẽ nhánh và vòng lặp lồng nhau trong UML 2.0 như thế nào?

Tác giả đề xuất thuật toán bóc tách từng phân đoạn tương tác kết hợp độc lập dựa trên cấu trúc ngăn xếp (stack), sau đó thiết lập các quy tắc kết nối logic để xây dựng đồ thị dòng điều khiển tương ứng. Với khối lặp, thuật toán phân tích các điểm ngắt (break) và điều kiện biên (cận trên, cận dưới) để sinh ra tập đường đi độc lập hoàn chỉnh.

Chuẩn tệp XMI do tác giả đề xuất mang lại lợi ích gì cho việc phân tích mô hình?

Tệp XMI gốc sinh ra từ các công cụ UML thường chứa các mã định danh phức tạp và cấu trúc cồng kềnh. Chuẩn XMI tinh giản của tác giả giúp cấu trúc hóa rõ ràng các thẻ phân đoạn, thông điệp và điều kiện gác, tạo điều kiện thuận lợi cho bộ phân tích cú pháp đọc dữ liệu chính xác và nâng cao tốc độ chuyển đổi đồ thị.

Công cụ phát triển trong luận văn có thể áp dụng cho các dự án phần mềm thực tế không?

Hoàn toàn có thể áp dụng. Thực nghiệm trên các ca kiểm thử mẫu chứng minh công cụ hoạt động ổn định, sinh ra dữ liệu kiểm thử chính xác và có tiềm năng lớn để tích hợp vào quy trình kiểm thử tự động tại các công ty phần mềm, đặc biệt trong các dự án phát triển theo mô hình hướng đối tượng và kiến trúc hướng dịch vụ.

Kết luận

Nghiên cứu của học viên Trần Thị Mùi đã giải quyết thành công bài toán tự động hóa kiểm thử phần mềm dựa trên mô hình thiết kế với 5 đóng góp học thuật và thực tiễn nổi bật:

  • Hệ thống hóa toàn diện cơ sở lý thuyết về kiểm thử dựa trên mô hình và kỹ thuật chuyển đổi biểu đồ tương tác UML 2.0 sang đồ thị dòng điều khiển.
  • Đề xuất bộ 9 thuật toán độc lập giúp phân tích cú pháp XMI và bóc tách tự động mọi loại phân đoạn tương tác kết hợp phức tạp.
  • Ứng dụng thành công kỹ thuật thực thi tượng trưng để tự động trích xuất hệ ràng buộc đường đi và sử dụng bộ giải SMT-Solver để sinh dữ liệu kiểm thử chính xác.
  • Xây dựng hoàn chỉnh công cụ phần mềm thực nghiệm chứng minh tính khả thi, tính đúng đắn và hiệu năng vượt trội của phương pháp đề xuất.
  • Đưa ra giải pháp giảm thiểu chi phí phát triển phần mềm, nâng cao chất lượng mã nguồn và rút ngắn thời gian kiểm thử cho doanh nghiệp.

Trong giai đoạn tiếp theo của lộ trình nghiên cứu 12 tháng tới, hướng phát triển trọng tâm sẽ là nâng cấp công cụ để xử lý các biểu đồ trạng thái kết hợp, hỗ trợ kiểm thử song song đa luồng và tối ưu hóa bộ giải cho các hệ thống phần mềm nhúng phức tạp. Quý độc giả, nhà nghiên cứu và doanh nghiệp quan tâm có thể khai thác toàn văn công trình nghiên cứu này để ứng dụng trực tiếp vào việc nâng cao chất lượng quy trình kiểm thử phần mềm tự động trong đơn vị của mình.