Trong hai đề xuất được đưa ra ở chương 3, đề xuất thứ nhất là phương pháp xây dựng mô hình sử dụng thuật toán học L*. Phương pháp này là một giải pháp toàn diện cho việc xây dựng mô hình thành phần phần mềm. Mô hình thu được là một ôtômát tối tiểu mô tả chính xác hành vi của thành phần đó.
Tuy nhiên, phương pháp này chưa cài đặt được bởi những khó khăn như đã trình bày ở trên. Đề xuất thứ hai là phương pháp xây dựng mô hình sử dụng thuật toán Thompson. Trong đề xuất này, chúng tôi đã cài đặt công cụ GenModelTool sinh mô hình thành phần phần mềm một cách tự động. Công cụ này có ý nghĩa quan trọng trong việc mô hình hóa tự động một thành phần phần mềm, là cơ sở cho việc áp dụng các kỹ thuật kiểm chứng mô hình và kiểm thử tự động nhằm nâng cao chất lượng phần mềm.
Hơn thế nữa, công cụ GenModelTool còn có một ý nghĩa rất quan trọng khác là cung cấp đầu vào cho công cụ sinh giả định AGTool [9]. Trong phương pháp kiểm chứng đảm bảo giả định [10], thay vì tiến hành kiểm chứng toàn bộ hệ thống thì chúng ta phân rã nó thành các thành phần nhỏ hơn và kiểm chứng riêng biệt các thành phần đó. Không mất tính tổng quát, chúng ta xét hệ thống gồm hai thành phần M1 và M2. Mục đích của phương pháp này là kiểm chứng xem hệ thống có thỏa mãn một thuộc tính p hay không mà không cần ghép nối hai thành phần M1 và M2. Để làm được điều đó, chúng ta cần sinh ra một giả thiết A(p) sao cho A(p) phải đủ mạnh để M1 thỏa mãn thuộc tính p, nhưng cũng đủ yếu để M2 cũng thỏa mãn nó. AGTool là một công cụ hỗ trợ cho việc sinh giả định A(p). Đầu vào của công cụ này là các mô hình của thành phần phần mềm và một thuộc tính yêu cầu kiểm chứng p. Trong trường hợp này, AGTool nhận đầu vào là các hệ chuyển trạng thái được gán nhãn (Labeled Transition System – LTS) M1, LTS M2 và LTS p. Mỗi LTS được biểu diễn bởi một dãy các quy tắc chuyển trạng thái (transitions) và trạng thái khởi tạo (initial state) theo định dạng (transition, transition,…, transition; initial state), trong đó transition = (state, action, state). Giả sử M1 là một LTS Input, M2 là một LTS Output như trong ví dụ 2.4 và giả thiết p là một LTS p như trong ví dụ 2.5. Khi đó, đầu vào của AGTool là một tệp có định dạng như sau:
(0,in,1),(1,send,2),(2,ack,0);0.
(0,send,1),(1,send,1),(1,out,2),(2,ack,0);0. (0,in,1),(1,out,0);0.
Như vậy, từ đầu ra của công cụ GenModelTool là các ôtômát hữu hạn, chúng ta có thể chuyển thành các LTS tương ứng làm đầu vào cho công cụ AGTool.
KẾT LUẬN
Trong ngữ cảnh phát triển phần mềm hướng thành phần, mỗi thành phần phần mềm thường được coi như một hộp đen, có thể được phát triển bởi bên thứ ba nên thường không biết được mã nguồn, các hành vi và trạng thái của chúng. Chúng ta cần xây dựng mô hình thành phần phần mềm, mô tả hành vi tương ứng của nó để làm cơ sở cho việc kiểm chứng mô hình và kiểm thử tự động.
Trong luận văn, chúng tôi đã đề xuất hai phương pháp xây dựng mô hình thành phần phần mềm. Phương pháp thứ nhất là xây dựng mô hình sử dụng giải thuật học L*, giải thuật sử dụng phương pháp học để thu được mô hình tương ứng thông qua việc tương tác với đối tượng Teacher. Ở mỗi bước lặp, giải thuật sẽ xây dựng một mô hình ứng viên, truy vấn tới Teacher để kiểm tra mô hình ứng viên đó có tương thích với thành phần phần mềm C không. Nếu tương thích thì giải thuật dừng và ta thu được mô hình tương thích mô tả hành vi của thành phần C. Trái lại Teacher trả về một phản ví dụ phản ảnh sự khác nhau giữa C và mô hình ứng viên hiện tại. Giải thuật tiếp tục tiến hành cập nhật lại mô hình ứng viên dựa vào phản ví dụ được trả về bởi Teacher. Giải thuật này tìm ra mô hình chính xác và tối ưu mô phỏng các hành vi của thành phần C tuy nhiên việc cài đặt gặp nhiều khó khăn, do độ phức tạp lớn và thành phần Teacher khó cài đặt. Phương pháp thứ hai là xây dựng mô hình mô tả chính xác các hành vi của một thành phần phần mềm sử dụng thuật toán Thompson. Ý tưởng chính của phương pháp là xây dựng biểu thức chính quy sinh ngôn ngữ L(C), sau đó xây dựng ôtômát hữu hạn là mô hình mô tả hành vi của C tương đương với biểu thức chính quy ở trên.
Về thực nghiệm, chúng tôi đã cài đặt công cụ GenModelTool sinh mô hình tự động cho phương pháp xây dựng mô hình sử dụng thuật toán Thompson. Công cụ trên sinh một mô hình mô tả hành vi của một thành phần phần mềm dưới dạng một ôtômát hữu hạn là đặc tả hình thức cho thành phần đó. Mô hình thu được không những là cơ sở cho việc áp dụng các kỹ thuật kiểm chứng mô hình và kiểm thử tự động mà còn là đầu vào cho công cụ AGTool, một công cụ sinh giả định hỗ trợ cho kỹ thuật kiểm chứng đảm bảo giả định.
Hướng phát triển
Luận văn đã trình bày các kiến thức cơ bản về đặc tả hình thức cho các thành phần phần mềm, đề xuất hai giải pháp cho việc xây dựng mô hình mô tả chính xác các hành vi của thành phần phần mềm. Giải pháp thứ nhất xây dựng mô hình dựa trên giải thuật học L* để thu được mô hình tối ưu tương ứng với thành phần phần mềm C, tuy nhiên giải pháp này chưa được cài đặt thành chương trình. Giải pháp thứ hai xây dựng mô hình tương ứng với thành phần phần mềm C dựa trên giải thuật Thompson, giải pháp này đã được cài đặt để thu được mô hình tương ứng với thành phần phần mềm C một cách tự động, tuy nhiên mô hình đó chưa phải là mô hình tối ưu, việc tối ưu mô hình thu được từ giải thuật dựa trên Thompson đã được chúng tôi đề xuất trong giải thuật 3.6, 3.7 và 3.8.
Hướng nghiên cứu tiếp theo của tôi là cài đặt giải thuật tối ưu hóa mô hình thu được từ giải pháp hai và nghiên cứu khả năng cài đặt giải thuật học L* để sinh mô hình chính xác của thành phần phần mềm C một cách tự động.
TÀI LIỆU THAM KHẢO
Tiếng việt
[1] Nguyễn Văn Ba (2002), Ngôn ngữ hình thức, NXB Khoa học và kỹ thuật, Hà Nội.
[2] Đoàn Văn Ban (2007), Ôtômát và ngôn ngữ hình thức, Đại học Thái Nguyên.
[3] Đỗ Đức Giáo (2004), Toán rời rạc, NXB đại học QGHN.
[4] Đặng Huy Ruận (2002), Lý thuyết ngôn ngữ hình thức và ôtômát, NXB Đại học QGHN.
Tiếng Anh
[5] A.Nerode (1958), "Linear Automaton Transformations", Proc. of the American Mathemat-ical Society, no. 9, pp. 541 – 544.
[6] D.Angluin (Nov.1987), "Learning regular set from queries and counter examples", Information and Computation.
[7] E. M. Clarke, O. Grumberg, and D. Peled (1999), "Model Checking",
The MIT Press.
[8] M.P.Vasilevskii (Aug. 1973), "Failure Diagnosis of Automata",
Kibernetika, no. 4, pp. 98 – 108.
[9] P.N.Hung (2009), An assumption regeneration tool for modular verification of evolving component–based software,
http://www.coltech.vnu.edu.vn/~hungpn/AGTool/.
[10] P.N.Hung (2009), Assume-Guarantee verification of Evolving component based software.
[11] Ken Thompson (June. 1968), "Regular expression search algorithm",
Communications of the ACM 11(6), pp. 419–422, http://doi.acm.org/10.1145/363347.363387.
[12] R.L.Rivest and R.E.Schapire (Apr. 1993), "Inference of finite automata using homing sequences", Information and Computation.
[13] T. S. Chow (May 1978), "Testing software design modeled by finite- state machine", IEEE Transactions on Software Engineering, vol. 4, no. 3, pp. 178–187.