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 tố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 ={m1 C,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+qi=1+mPACi , trong đó PACi 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 = Vpi=1PAi C0, trong đó PAi C0 = PACi , 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+qi=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+qi=p+q+1+m PAEi , trong đóPAEi =PACi , 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 tố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 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 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 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 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 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 tố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 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 tồn trên mơ hình tái cấu trúc.

3.4.6 Kiểm chứng sự bảo tồ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 tồ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 tố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 tồn bất biến). Tuy nhiên, để áp dụng được thuật toá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 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 tồ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 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

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)