3.4 Phương pháp bảo toàn bất biến trong tái cấu trúc biểu đồ lớp
3.4.5 Chứng minh tính đúng đắn của các luật tái cấu trúc
Tiểu mục4.3.2.1đã trình bày các khái niệm của các phần tử của biểu đồ lớp trong UML một cách hình thức. Trong đó, chúng tơi đặc biệt quan tâm đến một số khái niệm quan trọng là bất biến của lớp (class invariants) và bất biến của mơ hình(model invariants). Hơn thế nữa, Định nghĩa3.12cũng giới thiệu về khái niệm bảo toàn bất biến trong tái cấu trúc (Preservation of Class Invariants in Refactoring). Trong mục này, nhằm tạo điều kiện cho
việc chứng minh tính đúng đắn của các luật tái cấu trúc đã đề xuất, luận án tiếp tục giới thiệu Mệnh đề 3.1 để khẳng định các phép toán Folding, Abstraction, Composition, Factoring và Unfolding là các phép tốn bảo tồn bất biến trong tiến trình tái cấu trúc.
Ký hiệu OPERATIONS là tập hợp chứa các phép tốn tái cấu trúc, khi đó tập hợp này được biểu thị bởi:
OPERATIONS ={Folding,Abstraction,Composition,Factoring,Unfolding}
Mệnh đề 3.1. Một tiến trình tái cấu trúc R : M 7−−−−−→ MOPname 0, OPname ∈
OPERATIONS . R thỏa mãn các điều kiện (3.1) là tiến trình tái cấu trúc bảo tồn các bất biến của lớp.
Chứng minh. Cho R là một tiến trình tái cấu trúc: M 7−−−−−→ MOPname 0 và
OPname là phép toán tái cấu trúc tùy ý trong tập OPERATIONS. Chúng ta phải chứng minh rằng R thỏa mãn tất cả các điều kiện của bảo toàn bất
biến lớp trong tái cấu trúc. Theo Định nghĩa 3.12, cần phải chứng minh các công thức: F ⇒ F0 và F0|M=F được thỏa mãn. Trong đó, F và F0 là các công thức logic vị từ tương ứng biểu diễn các ràng buộc bất biến của mơ hình ban đầu M và mơ hình tái cấu trúc M0.
Như đã trình bày, bản chất của quá trình tái cấu trúc là thực thi các hoạt động phân bố lại các phần tử của mơ hình (lớp, phương thức và thuộc tính) xung quanh mối quan hệ phân cấp giữa các phần tử này. Đặc biệt, các phép toán tái cấu trúc liên quan đến thuộc tính của lớp sẽ thuộc về một trong hai trường hợp sau:
(1) Trường hợp 1: nhóm các phép tốn tái cấu trúc chỉ đơn giản thực hiện việc phân bố lại các thuộc tính rời rạc của mơ hình ban đầu (tức là khơng tồn tại bất cứ một thuộc tính có thể kết hợp nào trong mơ hình ban đầu), như các phép tốn Folding, Abstraction, Unfolding, v.v.
(2) Trường hợp 2: nhóm các phép tái cấu trúc bao gồm bên trong nó hai hoạt động (i) thực hiện phân bố lại các thuộc tính và (ii) xem xét kết hợp các cặp thuộc tính có thể kết hợp (Composable Attributes), như các phép tốn Composition, Factoring, v.v.
Trường hợp đầu tiên, các điều kiện trong công thức 3.1 dễ dàng được thỏa mãn. Bởi vì, hoạt động phân bố lại các thuộc tính rời rạc sẽ khơng có bất kỳ ảnh hưởng nào đến ràng buộc bất biến của các thuộc tính đó. Nói cách
khác, trong trường hợp này bất biến của mơ hình ban đầu ln ln bảo tồn trên mơ hình tái cấu trúc.
Trường hợp thứ hai, tiến trình tái cấu trúc khơng chỉ liên quan đến hoạt động phân bố lại các thuộc tính rời rạc mà cịn xem xét và giải quyết bài toán hợp nhất các cặp thuộc tính có thể kết hợp. Hoạt động phân bố lại các
thuộc tính rời rạc rơi vào trường hợp đầu tiên. Vậy, bài tốn bảo tồn bất biến bây giờ chỉ cịn phải chứng minh bảo tồn bất biến sau khi thực hiện hợp nhất các cặp thuộc tính có thể kết hợp.
Luật tái cấu trúc sử dụng để hợp nhất các thuộc tính có thể kết hợp đã được trình bày trong Tiểu mục 3.4.4 và được biểu diễn bởi công thức:
PAi
E =PAi
C ∨PAi
D với aAi
Chúng ta sẽ chứng minh, tiến trình tái cấu trúc áp dụng luật tái cấu trúc theo công thức 3.2sẽ thỏa mãn các điều kiện ở Định nghĩa 3.12về bảo toàn bất biến trong tái cấu trúc2.
Cho AC,AD, INVC,INVD là các tập thuộc tính và bất biến của các lớp
C và D. Các tập hợp này được biểu diễn như sau:
AC =aC1,aC2, ...,aCm và INVC = Vmi=1PACi AD =a1 D,a2 D, ...,aDq và INVD = Vqi=1Pi AD Trong đó Pi AC,Pi
AD là các biểu thức logic mệnh đề tương ứng biểu diễn các ràng buộc trên các thuộc tính ai
C và ai D.
Cho AC,D = {aCij,D} là tập các cặp thuộc tính có thể kết hợp (Định nghĩa. 3.10) của các lớp C và D; | AC,D |= h (h là lực lượng của tập hợp AC,D), với h ≤ min(m,q) và AC,D 6= ∅. Gọi E là lớp chứa các thuộc tính chung của lớp C và D, khi đó tập thuộc tính của lớp E được biểu diễn như sau:
AE =aE1,aE2, ...,aEh =AC,D
Khơng mất tính tổng qt, chúng ta sắp xếp lại thứ tự các phần tử của các tập hợp AC,AD và AE: AC =aC1,aC2, ...,aCh,aCh+1, ...,aCm ; INVC = (∧hi=1PAi C)∧(∧mi=h+1PAi C) AD =aD1,aD2, ...,aDh,aDh+1, ...,aDq ; INVD = (∧hi=1PAi D)∧(∧qi=h+1PAi D) AE =aE1,aE2, ...,aEh ; INVE =∧hi=1PAi E
Trong đó PAEi được xác định theo cơng thức 3.2.
Giả sử các thuộc tính cịn lại của các lớp C và D sau khi trích lọc được lưu trữ tương ứng trong các lớp C0 và D0. Khi đó, tập các thuộc tính của các lớp C0 và D0 được biểu diễn như sau:
AC0 =aCh+1,aCh+2, ...,am
C và INVC0 = Vmi=h+1Pi AC
AD0 =aDh+1,aDh+2, ...,aDq và INVD0 = Vqi=h+1PAi
D
2. Do tính chất kết hợp của các phép toán tuyển và hội, luận án chỉ thực hiện chứng minh trong trường hợp mơ hình ban đầu có hai lớp. Trường hợp mơ hình ban đầu có nhiều hơn hai lớp, chúng ta sẽ tiến hành kết hợp(combine) các lớp đó để đưa về trường hợp có hai lớp này
Theo Định nghĩa3.6, chúng ta có cơng thức biểu diễn bất biến của mơ hình ban đầu M là: F =INVC ∧INVD = (∧hi=1PAi C)∧(∧mi=h+1PAi C)∧(∧hi=1PAi D)∧(∧qi=h+1PAi D) =∧hi=1(PAi C ∧PAi D)∧(∧mi=h+1PAi C)∧(∧qi=h+1PAi D) (3.3)
Sau tiến trình tái cấu trúc bằng cách áp dụng luật tái cấu trúc biểu diễn bằng cơng thức 3.2, chúng ta có cơng thức biểu diễn bất biến của mơ hình tái cấu trúc M0 là:
F0 =INVE ∧INVC0 ∧INVD0
= (∧hi=1PAi E)∧(∧mi=h+1PAi C)∧(∧qi=h+1PAi D) =∧hi=1(PAi C ∨PAi D)∧(∧mi=h+1PAi C)∧(∧qi=h+1PAi D) (3.4)
Từ các công thức của F biểu diễn bởi 3.3 và F0 biểu diễn bởi 3.4, dễ thấy điều kiện đầu tiên trong Định nghĩa. 3.12 là F ⇒ F0 được thỏa mãn. Bây giờ chúng ta tiếp tục chứng minh điều kiện còn lại cũng được thỏa mãn bởi các công thức F và F0 (chú ý rằng, C và D là các lớp khơng có quan hệ với nhau). Thực sự như vậy, từ Định nghĩa 3.6 chúng ta có:
F0|M = (INVE ∧INVC0 ∧INVD0)|M
= ((∧hi=1PAEi )∧(∧mi=h+1PACi )∧(∧qi=h+1PADi ))|M = (∧hi=1(PAi C ∨PAi D)∧(∧mi=h+1PAi C)∧(∧qi=h+1PAi D))|M = (∧hi=1(PAi C ∨PAi D)∧(∧mi=h+1PAi C)∧(∧qi=h+1PAi D))|C∧ ∧(∧hi=1(PAi C ∨PAi D)∧(∧mi=h+1PAi C)∧(∧qi=h+1PAi D))|D = (∧hi=1PAi C)∧(∧mi=h+1PAi C)∧(∧hi=1PAi D)∧(∧qi=h+1PAi D) =INVC ∧INVD =F (3.5)
Như vậy, các điều kiện bảo tồn ràng buộc bất biến của tiến trình tái cấu trúc đều được thỏa mãn. Nói cách khác, khi thực hiện tái cấu trúc bằng các luật đã đề xuất, các ràng buộc bất biến của mơ hình ban đầu đều được bảo tồn trên mơ hình tái cấu trúc.
3.4.6 Kiểm chứng sự bảo toàn các ràng buộc bất biến sau tái cấu trúc
Như đã trình bày, mục tiêu của Chương 3 là đề xuất phương pháp bảo toàn bất biến của lớp trong tiến trình tái cấu trúc. Các Tiểu mục 3.4.4 và 3.4.5 đã lần lượt giới thiệu về các luật tái cấu trúc được áp dụng, đồng thời cũng chứng minh tính đúng đắn của các luật này. Tuy nhiên, trong thực tế, bên cạnh các hoạt động tái cấu trúc hệ thống phần mềm các nhà phát triển cịn có thể thực thi thêm một số hoạt động khác như thêm/loại bỏ thuộc tính, sửa chữa các thơng tin của thuộc tính hiện tại, v.v. Bởi vậy,
trong tiểu mục này luận án sẽ giới thiệu một thuật toán sử dụng trong kiểm chứng sự bảo tồn các ràng buộc bất biến của mơ hình tái ban đầu trên mơ hình tái cấu trúc. Các bước kiểm chứng sự bảo tồn bất biến được mơ tả như trong Thuật toán 3.1.
Thuật toán 3.1 nhận các dữ liệu đầu vào là các mơ hình ban đầu và mơ hình tái cấu trúc, cùng với các cơng thức mơ tả ràng buộc bất biến của hai mơ hình này. Kết quả đầu ra của thuật toán là một trong hai giá trị, trong trường hợp các công thức F và F0 của các mơ hình Mvà mơ hình M0 thỏa mãn cơng thức 3.1 thì chúng ta thu nhận được kết quả là true (Bảo toàn bất biến), trong các trường hợp khác, kết quả kiểm tra trả lại là false (mơ hình tái cấu trúc khơng bảo tồn bất biến của mơ hình ban đầu).
Thuật tốn 3.1 Checking Invariant-Preserving in Refactoring
Input : M(F :Predicate): Model, M0(F0 :Predicate): Model
Output: invPreserve: Boolean
1 Function invPreserve ← Checking (F, F0)
begin 2 if (F ⇒ F0) and (F0|M=F) then 3 return true 4 end 5 return false 6 end
Có thể thấy, Thuật tốn 3.1 được trình bày khá đơn giản, chỉ thực thi lại Công thức3.12 (công thức về bảo toàn bất biến). Tuy nhiên, để áp dụng được thuật tốn này vào trong q trình kiểm chứng sự bảo tồn hành vi trong tái cấu trúc mơ hình phần mềm, người phát triển hệ thống cần phải
triển khai công thức này một cách chi tiết sao cho phù hợp với từng đặc trưng của mơ hình phần mềm. Như vậy, luận án chỉ giới thiệu về mặt ý tưởng tổng qt, cịn trong từng mơ hình bài tốn cụ thể việc áp dụng lại phụ thuộc vào sự triển khai của các nhà phát triển phần mềm.
Từ góc nhìn của người thực thi, luận án cũng làm rõ hơn các bước áp dụng phương pháp đã đề xuất cho các ứng dụng thực tế, bao gồm các bước cụ thể như sau:
(1) Xây dựng mơ hình ban đầu: Biểu diễn phần mềm cần tái cấu trúc bằng
biểu đồ lớp của UML, đồng thời xem xét ràng buộc về ngữ nghĩa đối với các phần tử của mơ hình; kế tiếp thiết lập các cơng thức về bất biến của lớp (Định nghĩa 3.5) và bất biến của mơ hình (Định nghĩa 3.6). (2) Tái cấu trúc mơ hình ban đầu: Nghiên cứu khả năng và áp dụng các
phép tốn tái cấu trúc (đã được trình bày trong Tiểu mục 3.4.4) để tái cấu trúc mơ hình và xây dựng lại các công thức biểu diễn bất biến của lớp và bất biến của mơ hình.
(3) Kiểm tra sự bảo toàn bất biến: Kiểm tra sự bảo toàn các ràng buộc bất biến của mơ hình ban đầu trên mơ hình tái cấu trúc để đảm bảo tính đúng đắn của tiến trình tái cấu trúc đã thực hiện bằng cách sử dụng Thuật tốn 3.1.
3.5 Kết chương
Đã có khá nhiều các nghiên cứu thực hiện công việc tái cấu trúc trên biểu đồ lớp, tuy nhiên, họ dừng lại ở việc biểu diễn biểu đồ lớp, các thành phần của biểu đồ lớp một cách bán hình thức (semi-formal) hoặc khơng hình thức (informal). Bên cạnh đó, các phép tốn áp dụng trong tái cấu
trúc biểu đồ lớp mới chỉ mô tả khái quát bằng ngôn ngữ tự nhiên và cũng chưa xét một cách chuyên sâu đến sựbiến đổi của các bất biến trong tái cấu trúc biểu đồ lớp.
Trong chương này, luận án trình bày phương pháp bảo toàn bất biến của lớp trong tái cấu trúc mơ hình. Đầu tiên luận án tiến hành hình thức hóa các thành phần của biểu đồ lớp, bao gồm các khái niệm về Mơ hình, Lớp, Phương thức của lớp, Thuộc tính của lớp, Bất biến của lớp. Kế tiếp, nhằm
phục vụ cho tiến trình tái cấu trúc, luận án cũng giới thiệu bổ sung các khái niệm Bất biến của mơ hình, Các phương thức tương đương về ngữ nghĩa, Cặp thuộc tính có thể kết hợp, Bảo tồn bất biến trên mơ hình tái cấu trúc
và chứng minh sự đúng đắn của Mệnh đề khẳng định các phép toán tái cấu trúc đã trình bày là bảo tồn bất biến.
Từ phương diện lý thuyết, phương pháp đề xuất thể hiện được tính chính xác, ngắn gọn. Từ phương diện thực hành, luận án sử dụng lý thuyết tập hợp để biểu diễn mơ hình, các cơng thức logic vị từ cấp 1 để biểu diễn các bất biến. Đây là một trong những ưu điểm bởi sự phát triển về công cụ hỗ trợ cho các thành phần này đang bước vào giai đoạn trưởng thành (ví dụ như KeY [1], Z3 [22], CVC4 [6], v.v.). Thêm vào đó, phương pháp này có tính chất độc lập nền (khơng phụ thuộc vào ngôn ngữ cài đặt hệ thống).
Để có một cái nhìn đầy đủ hơn về phương pháp đề xuất, luận án đã trình bày một cách chi tiết các phép toán liên quan trực tiếp đến tổng quát hóa, bao gồm các phép tốn Folding, Abstraction, Composition, Factoring và Unfolding. Mỗi phép tốn được trình bày một cách có thứ tự theo Tên gọi, Tình huống áp dụng, Mơ hình khởi tạo, Mơ hình tiến hóa và Biểu diễn minh họa bằng ký pháp UML. Đây có thể được coi là cơ sở lý thuyết hướng
đến quá trình tự động hóa kiểm chứng sự bảo tồn bất biến trong tái cấu trúc biểu đồ lớp của UML.
Luận án đã trình bày trong chương này một số phép toán tái cấu trúc biểu đồ lớp trong UML, đặc biệt là các phép tốn có liên quan đến mối quan hệ phân cấp trong kế thừa. Tiến trình tái cấu trúc trên mơ hình UML cần áp dụng phép tốn nào tùy thuộc vào từng hồn cảnh cụ thể và được quyết định bởi các nhà phát triển phần mềm. Trong tương lai, luận án sẽ nghiên cứu việc áp dụng phương pháp này đối với những khía cạnh khác của mơ hình, ví dụ, các phép tốn tái cấu trúc đối với các kết hợp, với các biểu đồ khác trong UML (biểu đồ trạng thái, biểu đồ ca sử dụng, biểu, v.v.). Chúng tôi cũng nghiên cứu việc kết hợp các phép toán này nhằm mục tiêu tạo ra những tiến trình tái cấu trúc mới có ý nghĩa hơn đối với người dùng.
Các ràng buộc trên mơ hình phần mềm được phân thành hai loại cơ bản:
(1) Bất biến và (2) Tiền/hậu điều kiện. Trong chương này, luận án đã trình
bày phương pháp bảo tồn bất biến trong tái cấu trúc biểu đồ lớp. Trong chương tiếp theo, luận án sẽ tiếp tục giải quyết bài tốn bảo tồn hành vi
trong tái cấu trúc hệ thống phần mềm.
Kết quả nghiên cứu nêu trên được chấp nhận đăng bởi tạp chí Interna- tional Journal of Software Engineering and Knowledge Engineering (cơng trình khoa học số 4*).
PHƯƠNG PHÁP KIỂM CHỨNG SỰ BẢO TOÀN HÀNH VI TRONG TÁI CẤU TRÚC
Trong chương này, luận án đề xuất phương pháp bảo toàn các ràng buộc hành vi (tiền/hậu điều kiện - pre/post-conditions) trong tái cấu trúc hệ thống phần mềm. Cụ thể, luận án đề xuất phương pháp kiểm tra sự nhất quán (consitency) giữa các hệ thống phần mềm trước và sau khi tái cấu trúc
ở các giai đoạn thiết kế và cài đặt chương trình phần mềm. Đầu tiên, luận án thực hiện hình thức hóa các thành phần của bản thiết kế cũng như bản cài đặt phần mềm. Các phương pháp kiểm chứng, dựa trên sự hình thức hóa này để kiểm chứng sự nhất quán của các chế tác phần mềm trong tái cấu trúc. Cuối cùng của chương này là ví dụ minh họa phương pháp đề xuất thơng qua hệ thống điều khiển giao thông đường bộ (Adaptive Road Traffic Control System - ARTC) [55].
4.1 Giới thiệu
“Tái cấu trúc và mẫu thiết kế là một sự kết hợp giữa tái cấu trúc (Refactoring) – tiến trình cải thiện thiết kế của mã nguồn hiện tại – với