CHƯƠNG 5 : CÀI ĐẶT VÀ THỬ NGHIỆM
5.3 Kết quả thử nghiệm
5.3.1 Phân tích file mã nguồn
Từ dữ liệu thử nghiệm trên, ta sử dụng cơng cụ để phân tích, tách file nguồn này những phương thức, thuộc tính của lớp. Kết quả thực nghiệm của quá trình này như sau:
Hình 5.4: Kết quả thử nghiệm 5.3.1 đối với hàm main
Hình 5.5: Kết quả thử nghiệm 5.3.1 đối với hàm cong
Hình 5.7: Kết quả thử nghiệm 5.3.1 đối với hàm nhan
Hình 5.8: Kết quả thử nghiệm 5.3.1 đối với hàm chia
Hình 5.9: Kết quả thử nghiệm 5.3.1 đối với hàm triTuyetDoi
Trong đó: Method: là tên phương thức, Visibility: là mức độ truy cập, Type là kiểu của phương thức, Parameter là các tham chiếu truyền vào. Content: nội dung của phương thức. Như vậy, công cụ đã thực hiện việc phân tích nội dung file nguồn đúng, tốt.
5.3.2 Chuyển những phương thức này thành relational interface
Với mỗi phương thức như trên, ta sử dụng công cụ để tiến hành chuyển đổi chúng sang relational interface, xem xét kết quả chuyển đổi như sau:
Hình 5.10: Kết quả thử nghiệm 5.3.2 với hàm cong
Đối với hàm tru, ta có interface Itru = ({x3, x4}, {y2}, y2 = x3 – x4)
Hình 5.11: Kết quả thử nghiệm 5.3.2 đối với hàm tru
Đối với hàm nhan, ta có interface Inhan = ({x5, x6}, {y3}, y3 = x5 * x6)
Hình 5.12: Kết quả thử nghiệm 5.3.2 đối với hàm nhan
Đối với hàm chia, ta có interface Ichia = ({x7, x8}, {y4}, x8 != 0 ∧ y4 = x7 / x8)
Hình 5.13: Kết quả thử nghiệm 5.3.2 đối với hàm chia
Đối với hàm triTuyetDoi, ta có interface Ittd = ({x9}, {y5}, x9 ≥ 0 ∧ y5 = x9 ∨ (!x9 ≤ 0) ∧ y5 = - x9)
Trong đó: Name: tên interface, Inputs: là tập input, Ouput: là tập output, Relation là quan hệ giữa input và output.
Như vậy, công cụ đã tiến hành chuyển đổi đúng mỗi phương thức ở trên thành các interface tương ứng.
5.3.3 Kết hợp các interface
Bước cuối cùng, ta sẽ sử dụng công cụ để tiến hành việc kết hợp các interface Icong, Itru, Inhan, Ichia, Ittd lại với nhau theo thứ tự kết hợp được đưa ra ở hàm main. Ở đây, ta có 2 phép kết hợp là: chia(cong(a, b), tru(a, b)) và triTuyetDoi(tru(a, b))
result1 = chia(cong(a, b), tru(a, b)); Với: Icong = ({x1, x2}, {y1}, y1 = x1 + x2) Itru = ({x3, x4}, {y2}, y2 = x3 – x4) Inhan = ({x5, x6}, {y3}, y3 = x5 * x6) Ichia = ({x7, x8}, {y4}, x8 != 0 ∧ y4 = x7 / x8) Ittd = ({x9}, {y5}, x9 ≥ 0 ∧ y5 = x9 ∨ (!x9 ≤ 0) ∧ y5 = - x9)
Đối với phép kết hợp chia(cong(a, b), tru(a, b))
Hình 5.15: Biểu đồ interface cho kết hợp chia(cong(a, b), tru(a, b))
Từ biểu đồ ở hình 23 ta có phép kết hợp: Icong Itru Ichia x1 x2 y1 y2 x3 x4 x7 x8 y4
(θ1 ∪ θ2)((Icong || Itru) , Ichia)
Trong đó, θ1 ≔ {y1, x7} và θ2 ≔ {y2, x8}. Định nghĩa θ3 ≔ θ1 ∪ θ2. Bằng phép kết hợp song song giữa Icong và Itru ta có:
Icong || Itru = ({x1, x2, x3, x4}, {y1, y2}, y1 = x1 + x2, y2 = x3 – x4)
Mặt khác: in(Ichia) ≡ x8 != 0. Do đó, với θ3((Icong || Itru) , Ichia), ta có:
Φ ≔ (y1 = x1 + x2 ∧ y2 = x3 – x4 ∧ y1 = x7, y2 = x8) → x8 != 0.
Rút gọn đi, ta được:
∀ y1, y2, x7, x8 : Φ ≡ x3 – x4 != 0.
Do vậy: θ3((Icong || Itru) , Ichia) = ({x1, x2, x3, x4}, {y1, y2, y4, x7, x8}, y1 = x1 + x2 ∧ y2 =
x3 - x4 ∧ y1 = x7 ∧ y2 = x8 ∧ x8 != 0 ∧ y4 = x7 / x8 ∧ x3 – x4 != 0).
Sau đây, ta sẽ xem xét kết quả mà quá trình kết hợp tự động của cơng cụ:
Hình 5.16: Kết quả thử nghiệm 5.3.3 đối với hàm main
Như vậy, interface sau khi được kết hợp tự động giống với interface mà ta đã tính tốn ở trên.
5.3.4 Dự đốn kết quả:
Ta có: θ3((Icong || Itru) , Ichia) = ({x1, x2, x3, x4}, {y1, y2, y4, x7, x8}, y1 = x1 + x2 ∧ y2 =
x3 - x4 ∧ y1 = x7 ∧ y2 = x8 ∧ x8 != 0 ∧ y4 = x7 / x8 ∧ x3 – x4 != 0) (*).
Quay trở lại với đoạn mã trong hàm main: result1 = chia(cong(a, b), tru(a, b)); Ở đây, x1 = x3 = a, x2 = x4 = b.
Với a = 4, b = 2, ta có:
result1 = 3;
Từ (*), với x1 = x3 = 4, x2 = x4 = 2, ta có:
y1 = 6, y2 = 2, x7 = 6, x8 = 2, x8 = 2 != 0, y4 = 3, x3 – x4 = 2 != 0.
Do vậy phép kết hợp này là hoàn toàn thỏa mãn.
Với a = 2, b = 2, khi biên dịch, chương trình sẽ “ném” ra một ngoại lệ. Tức là phép tính khơng thỏa mãn.
Từ (*), với x1 = x3 = 2, x2 = x4 = 2, ta có:
y1 = 4, y2 = 0, x7 = 4, x8 = 0, y4 = 3, x8 = 0 != 0, x3 – x4 = 0 != 0.
Trong trường hợp này, do 0 != 0 ≔ false, phép kết hợp này là không thỏa mãn. Như vậy, thông qua interface sau khi kết hợp, ta có thể dự đốn chính xác được kết quả trả về của việc kết hợp các thành phần, vì interface mới tạo ra vẫn giữ nguyên được các tính chất của interface thành phần.