Phép toán tái cấu trúc Unfolding

Một phần của tài liệu (LUẬN ÁN TIẾN SĨ) Một số phương pháp kiểm chứng tái cấu trúc phần mềm Luận án TS. Máy tính 624801 (Trang 65)

3.4.4.5 Phép toán: Unfolding

• Tên gọi: Unfolding

• Tình huống áp dụng:

– Thành phần: lớp C với một danh sách dài các phương thức, các phương thức này không tham chiếu một cách đồng bộ đến các thuộc tính của nó;

– Mục đích: tối ưu hóa khả năng thực thi của mã nguồn;

– Thực thi: nhóm các phương thức và các thuộc tính mà nó tham chiếu thành các lớp con bắt nguồn từ lớp C, các thuộc tính sẽ được phân chia thành các tập hợp rời rạc. Tạo mối quan hệ kế thừa từ phần còn lại của lớp C tới các lớp con vừa được tạo ra. • Mô hình khởi đầu M chỉ gồm một lớp C.

– lớp C = hNC,MC,ACi; ∗ MC ={mC1,mC2, ...,mCn} ∗ AC ={aC1,aC2, ...,aCp,aCp+1, ...,aCp+q,aCp+q+1, ...,aCp+q+m}. Giả sử A1C ={aC1,aC2, ...,aCp}, A2C ={aCp+1,aCp+2, ...,aCp+q} and A3 C ={aCp+q+1,aCp+q+2, ...,aCp+q+m} ∗ INVC =Vp+q+m i=1 PAi C, trong đó PAi

C biểu diễn ràng buộc trên thuộc tính ai

C

∗ đoạn mã nguồn S1, S2 thuộc về phương thức m1

C tham chiếu đến các thuộc tính aC1, ...,aCp và aCp+1, ...,aCp+q, một cách tương ứng;

∗ phương thức m1

C chỉ được tạo thành từ đoạn mã S1 và S2; ∗ ở đây chúng ta chỉ thực hiện với phương thức m1

C, các phương thức khác (nếu có xảy ra) sẽ được thực hiện một cách tương tự.

• Mô hình tiến hóa M0 bao gồm ba lớp E,C0 và D0.

– lớp C0 = hNC0,MC0,AC0i được định nghĩa như sau:

∗ MC0 ={mCi 0 :mCi 0 được tạo thành từ đoạn mã S1} ∗ AC0 =A1 C ={ai C : 0≤i ≤p} ∗ INVC0 = Vp i=1PAi C0, trong đó PAi C0 = PAi C, là ràng buộc trên thuộc tính ai C0

– lớp D0 = hND0,MD0,AD0i được xác định như sau:

∗ MD0 ={mi D0 :mi

D0 được tạo thành từ đoạn mã S2} ∗ AD0 =A2C ={aCi : (p+ 1)≤i ≤q} ∗ INVD0 =Vp+q i=p+1Pi AD0, trong đó Pi AD0 =Pi AC, là ràng buộc trên thuộc tính aDi 0

– lớp E = hNE,ME,AEi được xác định như sau:

∗ ME ={mCi :mCi ∈(MC \mC1)} ∗ AE =A3 C ={ai C :ai C ∈(AC \(AC0 ∪AD0))} ∗ INVE =Vp+q+m i=p+q+1PAi E, trong đóPAi E =PAi C, là ràng buộc trên thuộc tính ai E, và:

– các lớp C0 và D0 có mối quan hệ kế thừa trực tiếp từ lớp E và

AC0∩AD0 =∅.

• Biểu diễn bằng UML: mô hình khởi đầu và mô hình tiến hóa của phép toán Unfolding được minh họa như trong Hình 3.9. Giả sử rằng lớp C

với phương thức m1 được tạo thành từ 2 đoạn mã S1 và S2; S1 tham chiếu đến a1 và S2 tham chiếu đếna2. Unfolding chia phương thức m1

thức m10 và thuộc tính a1, lớp D0 được thành lập từ phương thức m20 và thuộc tính a2; lớp E là phần còn lại của lớp C sau khi bị trích lọc phương thức m1 và các thuộc tính a1,a2. Các lớp C0 và D0 được kế thừa trực tiếp từ lớp E.

Chú ý rằng, trong mô hình ban đầu phương thức m1 có kiểu trả về là 10 tuy nhiên, các phương thức m10 và m20 có các kiểu trả về tương ứng là 50 và 60. Đương nhiên, sẽ phải tồn tại mối quan hệ giữa kiểu của các biến a1 và a2 với kiểu của các phương thức m10 và m20 nhưng luận án không thể chỉ rõ một cách tường minh mối quan hệ này. Việc lựa chọn kiểu cho các phương thứcm10 và m20 sẽ phải tùy thuộc vào quyết định của các nhà phát triển phần mềm.

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 toán bảo toà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 toá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 toà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 OPname

7−−−−−→ M0 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 toá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 toá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 toá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 luôn luôn bảo toà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 toán bảo toàn bất biến bây giờ chỉ còn phải chứng minh bảo toà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 = Vm i=1PAi C AD =a1 D,a2 D, ...,aDq và INVD = Vq i=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 quát, 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 đó PAi

E đượ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 = Vm i=h+1Pi AC AD0 =aDh+1,aDh+2, ...,aDq và INVD0 = Vq i=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=1PAiE)∧(∧mi=h+1PAiC)∧(∧qi=h+1PAiD))|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 toà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 toà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 toà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 toà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 toàn bất biến của mô hình ban đầu).

Thuật toá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 toá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 toán này vào trong quá trình kiểm chứng sự bảo toà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 quát, còn trong từng mô hình bài toá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 toá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 toá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 toá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

Một phần của tài liệu (LUẬN ÁN TIẾN SĨ) Một số phương pháp kiểm chứng tái cấu trúc phần mềm Luận án TS. Máy tính 624801 (Trang 65)

Tải bản đầy đủ (PDF)

(132 trang)