Chương 4. PHƯƠNG PHÁP KIỂM CHỨNG HỒI QUY GIẢ ĐỊNH
4.1. Giới thiệu
Trong kiểm chứng giả định - đảm bảo, các giả định nhỏ nhất và mạnh nhất giảm chi phí kiểm chứng cho phần mềm được tiến hóa hàng ngày trong ngữ cảnh tiến hóa. Tuy nhiên, phương pháp kiểm chứng được trình bày trong Chương 3 sử dụng đặc tả là hệ thống chuyển trạng thái được gán nhãn (LTS). Các phương pháp kiểm chứng sử dụng đặc tả LTS đều có một nhược điểm chung là độ phức tạp về thời gian lớn. Nhược điểm này càng được thể hiện rõ trong quá trình kiểm chứng hồi quy các phần mềm tiến hóa do việc tiến hóa diễn ra liên tục trong vòng đời phát triển của chúng. Do đó, chi phí kiểm chứng hồi quy trở nên rất lớn trong ngữ cảnh tiến hóa. Vì vậy, việc giảm chi phí kiểm chứng hồi quy cho phần mềm mang lại lợi ích lớn cho ngành công nghiệp phần mềm nói chung và cho kiểm chứng phần mềm nói riêng. Việc giảm chi phí được thực hiện bằng
nhiều phương pháp trong các nghiên cứu với các loại đặc tả khác nhau như: đặc tả bằng LTS [18, 29, 56, 57, 58, 86], đặc tả bằng lôgic mệnh đề [21, 48], đặc tả bằng các hệ thống có ràng buộc về thời gian [4, 51, 69, 68, 72], v.v. Hai giải pháp dưới đây được sử dụng để giảm chi phí kiểm chứng phần mềm trong ngữ cảnh tiến hóa.
Giải pháp đầu tiên là sinh lại các giả định mỗi khi phần mềm tiến hóa với chi phí nhỏ. Với các phần mềm được đặc tả bằng LTS, các giả định nhỏ (có số trạng thái nhỏ) có thể được sử dụng một cách hiệu quả để giảm chi phí kiểm chứng hồi quy cho các phần mềm đã thay đổi. Do đó, trong các nghiên cứu của mình, PGS. TS. Phạm Ngọc Hùng và cộng sự đề xuất phương pháp để sinh các giả định nhỏ nhất (giả định có số trạng thái nhỏ nhất) cho bài toán kiểm chứng các CBS [86, 57, 58] và một phương pháp để thực hiện kiểm chứng từng phần các CBS trong ngữ cảnh tiến hóa [56]. Tuy nhiên, chi phí để sinh các giả định nhỏ nhất vẫn rất lớn [57]. Lý do chính của vấn đề này là vì bài toán kiểm chứng trong các nghiên cứu này [29, 56, 57, 58, 86] có bản chất là bài toán sinh ô-tô-mát sử dụng thuật toán học L∗ [8]. Vì vậy, các phương pháp này rất khó được áp dụng vào các hệ thống lớn trong thực tế. Mặt khác, để tăng tốc độ sinh giả định, năm 2010, Chen và cộng sự đã đề xuất một phương pháp kiểm chứng khác [21] cho các phần mềm đặc tả bằng lôgic mệnh đề và sử dụng thuật toán CDNF (Conjunction of Disjunctive Normal Form) để sinh giả định [15]. Năm 2016, He và cộng sự đã cải tiến phương pháp này và áp dụng cho việc kiểm chứng hồi quy phần mềm đã thay đổi bằng cách đề xuất một phương pháp sinh giả định hiệu quả [48]. Tuy nhiên, với phần mềm đã thay đổi, một số biểu thức con của phiên bản mới có thể thay đổi. Điều này đòi hỏi quá trình kiểm chứng hồi quy sinh lại giả định cho mọi sự thay đổi dù nhỏ nhất của thành phần phần mềm.
Giải pháp thứ hai để giảm chi phí kiểm chứng phần mềm trong ngữ cảnh tiến hóa là tăng số lần sử dụng lại giả định nhiều nhất có thể. Vì phần mềm thay đổi hàng ngày, nên số lần phải sinh lại giả định càng ít thì càng giảm được chi phí kiểm chứng phần mềm thay đổi. Hơn nữa, giả định yếu (giả định có ngôn ngữ lớn) có thể giúp đạt được điều này và đóng vai trò quan trọng trong kiểm chứng hồi quy phần mềm thay đổi. Mặt khác, hiện chưa có nghiên cứu nào được tiến hành về việc sinh các giả định có ngôn ngữ yếu nhất và sử dụng đặc tả bằng lôgic mệnh đề. Do đó, nghiên cứu của chương này tập trung vào cải tiến thuật
toán sinh giả định của Chen và cộng sự [21] để sinh các giả định yếu nhất cục bộ. Các giả định này có thể được dùng lại để giảm chi phí kiểm chứng hồi quy phần mềm trong ngữ cảnh tiến hóa phần mềm.
Để đạt được mục tiêu trên, một biến thể của kỹ thuật trả lời các truy vấn thành viên cho hai thực thể thuật toán học hàm khởi tạo (CDN Fι) và hàm chuyển trạng thái (CDN Fτ) được đề xuất. Dựa vào biến thể này, một thuật toán sinh giả định quay lui (được gọi là thuật toán LWAG) được đề xuất có thể sinh các giả định yếu hơn các giả định được sinh bởi thuật toán được đề xuất bởi Chen và cộng sự [21] (được gọi là thuật toán CBAG). Điều này dẫn đến một kết quả quan trọng trong ngữ cảnh tiến hóa phần mềm: các giả định được sinh bởi thuật toán LWAG có thể giảm số lần cần sinh lại giả định khi kiểm chứng các phần mềm đã bị thay đổi. Biến thể trả lời các truy vấn thành viên và thuật toán LWAG được tích hợp vào phương pháp đề xuất để giảm số lần giả định cần sinh lại khi kiểm chứng phần mềm trong ngữ cảnh tiến hóa.
Với thuật toán sinh giả định sử dụng đặc tả bằng lôgic mệnh đề, không chỉ ưu điểm về quá trình sinh giả định tốc độ cao mà các ưu điểm của việc đặc tả phần mềm bằng lôgic mệnh đề so với việc đặc tả phần mềm bằng ô-tô-mát được tận dụng. Thứ nhất, các giả định đặc tả bằng lôgic mệnh đề có ít trạng thái hơn các giả định được đặc tả bằng ô-tô-mát hữu hạn trạng thái đơn định vì đặc tả bằng lôgic mệnh đề tương đương với ô-tô-mát không đơn định. Do đó, các giả định được sinh ra có số trạng thái nhỏ hơn số trạng thái của các giả định được sinh bởi phương pháp sinh giả định sử dụng đặc tả bằng ô-tô-mát. Ưu điểm thứ hai là khả năng mở rộng của phương pháp kiểm chứng sử dụng đặc tả bằng lôgic mệnh đề. Điều này là do thuật toánL∗ cần một số là hàm đa thức các truy vấn của số trạng thái của ô-tô-mát cần học [8, 91]. Ngược lại, thuật toán CDNF cần một số là hàm đa thức của số biến lôgic của hàm cần học [15]. Vì giả định sử dụng đặc tả bằng lôgic mệnh đề có thể súc tích hơn nhiều lần đặc tả bằng ô-tô-mát, thuật toán sinh giả định sử dụng đặc tả bằng lôgic mệnh đề có thể tốt hơn thuật toán sinh giả định sử dụng đặc tả bằng ô-tô-mát nhiều lần.
Công trình nghiên cứu đầu tiên sử dụng thuật toán L∗ để sinh giả định cho bài toán kiểm chứng giả định - đảm bảo là nghiên cứu của Cobleigh và cộng sự [29]. Sau đó, có nhiều nghiên cứu cải tiến phương pháp này, bao gồm một sự điều chỉnh của các luật giả định - đảm bảo [10, 47, 83], sự thực thi tượng trưng (Symbolic Implementation) cho các luật giả định - đảm bảo [13, 14, 83], nhiều
sự cải tiến được đề xuất trong [2, 3, 18, 22, 46, 94, 102], và một sự mở rộng cho việc hỗ trợ thuộc tính sống (liveness) [36]. Tuy nhiên, những công trình nghiên cứu này sử dụng thuật toán họcL∗ để sinh một ô-tô-mát đóng vai trò là giả định cần tìm. Do đó, các nghiên cứu này đều có chung một nhược điểm như được mô tả phía trên khi so sánh với thuật toán được đề xuất bởi Chen và cộng sự [21].
Từ những lý do trên, nghiên cứu của Chen và cộng sự [21] được sử dụng làm cơ sở để kiểm chứng phần mềm đã được tiến hóa.