Hàm vị từ với các ràng buộc OCL

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 74 - 79)

3.3 Phương pháp sinh dữ liệu kiểm thử cho biến kiểu dữ liệu số và

3.3.5 Hàm vị từ với các ràng buộc OCL

Các ràng buộc OCL được miêu tả trong các biểu đồ tuần tự UML và các biểu đồ lớp: các tiền điều kiện, hậu điều kiện của các phương thức và các bất biến trong biểu đồ lớp. Giả sử một ràng buộc OCL được định nghĩa là một tập các mệnh đề {B1, B2, .., Bn} kết hợp sử dụng các toán tử logic {and, or, xor, not}.

Bảng 3.1: Bảng giá trị chân lý cho các toán tử logic [3]

y1 y2 y1 and y2 y1 or y2 y1 xor y2 not y1

false false false false false true false true false true true true true false false true true false true true true true false false

false ⊥ false ⊥ ⊥ true

true ⊥ ⊥ true ⊥ false

⊥ false false ⊥ ⊥ ⊥

⊥ true ⊥ true ⊥ ⊥

⊥ ⊥ ⊥ ⊥ ⊥ ⊥

đề C được giải quyết bằng thuật tốn tìm kiếm, được biểu diễn như sau: C =

Sn

y=1

Smy

z=1{Byz} với n là số các mệnh đề trong một ràng buộc và my là số lượng biến được bao gồm trong mệnh đề. Trong OCL, tất cả các kiểu dữ liệu là tập con của OCLAny, phần này đề cập đến biến là kiểu dữ liệu số. Trong một tập các ràng buộc OCL bao gồm các mệnh đề khác nhau và giá trị trong các mệnh đề ngoài các giá trị là true, false thì các mệnh đề cịn có thể nhận giá trịundefined. Để tìm kiếm dữ liệu kiểm thử thỏa mãn các ràng buộc OCL, luận án tính các hàm vị từ tương ứng để các giá trị dữ liệu đầu vào gần với mục đích thỏa mãn các ràng buộc.

Ví dụ, có ràng buộc x= 0 và giả sử có hai dữ liệu đầu vào là:x1 := 3và x2 := 50;

Cả hai dữ liệu kiểm thử x1 và x2 đều không thỏa mãn x = 0 nhưng giá trị của

x1gần với giá trị thỏa mãn ràng buộc x= 0 hơn giá trị x2. Thuật tốn tìm kiếm

sẽ tìm giá trị thỏa mãn để tính tốn hàm vị từ sao cho với dữ liệu kiểm thử sinh ra gần hơn với việc thỏa mãn các ràng buộc. Sử dụng hàm vị từ tương ứng với hàm tính khoảng cách nhánh được xác định trong [68]. Hàm f() trả về giá trị

0 nếu ràng buộc được giải hoặc nếu khơng thì một giá trị dương sẽ ước lượng khoảng cách cho ràng buộc được thỏa mãn. Sau đây là cách tính các hàm vị từ cho các dữ liệu của các mệnh đề trong OCL.

Các loại dữ liệu nguyên thủy được hỗ trợ trong OCL bao gồm: Integer, Real, String, và Boolean. Trong OCL, miền của từng kiểu dữ liệu nguyên thủy cũng bao gồm giá trị đặc biệt undefined (⊥). Theo đặc tả ràng buộc OCL [77],

giá trị này được sử dụng cho các mục đích sau:

Bảng 3.2: Hàm vị từ cho các toán tử logic trong OCL [3]Các toán tử logic Hàm vị từ Các toán tử logic Hàm vị từ A if A is true then f(A) = 0 else A is f alse

f(A)>0and f(A)< k else f(A) =k not A if A is f alse then f(A) = 0 else A is true

f(A)>0 and f(A)< k else

f(A) = k

A and B nor (f(A) + f(B)) + numberOfUndefinedClauses A or B nor (min(f(A), f(B))) + numberOfUndefinedClauses

A implies B f (not A or B)

if A then B

else C f ((A and B) or (not A and C)) A xor B f ((A and not B) or (not A and B))

xác định được giá trị cho nó và có thể được gán sau đó khi biết giá trị.

ˆ Một giá trị undefined có thể được gán cho một thuộc tính mà thể hiện cụ thể cho thuộc tính đó khơng có bất kỳ giá trị nào.

ˆ Một giá trị undefined có thể biểu diễn các lỗi trong biểu thức.

Khi giá trị biến logic b là true thì hàm vị từ là 0, tức là f(b) = 0. Khi b là f alse

thì f(b) >0 và f(b) < k khi k là hằng dương. Ví dụ, giả sử k = 1 và khi b là ⊥

thì f(b) là k. Nếu giá trị logic đạt được từ phương thức gọi thì hàm vị từ nói

chung sẽ có thể lấy một trong ba giá trị có thể trên. Khi phương thức isEmpty() được gọi trong một tập hợp thì hàm vị từ nhận giá trị 0, giá trị b giữa 0 và k,

hoặc giá trịk; nếu khơng tính toán khoảng cách được chỉ ra (trả về số lượng các

phần tử trong tập hợp). Chú ý OCL hỗ trợ hai giá trị đặc biệt khác, là giá trị null và invalid. Hai giá trị này trong bảng chân lý được xác định là undefined. Cách tính hàm vị từ tương ứng với các mệnh đề logic như trong Bảng 3.2, có thể nhận các giá trị true, false và undefined.

Các toán tử được xác định trong OCL được kết hợp của các mệnh đề logic là: or, xor, and, not và implies. Ba giá trị chân lý cho các toán tử được chỉ ra

trong Bảng 3.1. Cho những toán tử, hàm vị từ được phát triển từ [68] và mở rộng cho việc xử lý với giá trị undefined. Theo định nghĩa đưa ra trong [68] của hàm f(A and B) là f(A) +f(B), nhưng hàm được tính tốn chỉ cho hai

giá trị: true và false. Định nghĩa tương tự cho giá trị undefined (⊥), nếu B là undefined thì hàm vị từ sẽ làf(A)+k. Để mở rộng hàm vị từ bằng việc thêm biến

numberOfUndefinedClauses, biến chỉ số lượng các mệnh đề undefined trong biểu thức và chuẩn hóaf(A) +f(B)giữa0và 1. Vì vậy, việc tìm kiếm đưa ra lựa chọn

ưu tiên giá trị nhỏ nhất củanumberOfUndefinedClauses, chuyển ⊥ thành giá trị false/true. Tương tự, mở rộng từ [68] tính hàm vị từ choor. Định nghĩa của hàm f() trong một biểu thức được đưa ra bởi hai mệnh đề được chỉ ra trong Bảng 3.2 và có thể tính tốn đệ quy cho nhiều hơn hai mệnh đề. Khi biểu thức hoặc một phần của nó là phủ định thì biểu thức được chuyển sang bằng phép phủ định cho các mệnh đề cơ bản, Ví dụ: not (A and B) sẽ chuyển sang not A or not B. Cho các loại dữ liệu số nhưInteger và Real, các toán tử quan hệ trả về các giá trị logic là: <, >,≤,≥,6=. Cho các toán tử này, việc mở rộng hàm vị từ, phát triển từ [68]

cho ba giá trị logic được chỉ ra trong Bảng 3.3. Một vài toán tử khác được xác định trong kiểu dữ liệuReal và Integer như +,−,∗, /, abs(), div(), mod(), max()và

min(). Các tốn tử này khơng sử dụng để so sánh hai giá trị số trong mệnh đề

nên khơng cần xác định hàm vị từ cho chúng. Tốn tử oclIsUndefine() để kiểm tra nếu giá trị của một biểu thức là undef ined trả về kết quả là true, ngược lại

trả về kết quả f alse.

Trong các ràng buộc OCL, một hậu điều kiện là biểu thức có thể chỉ đến hai tập hợp giá trị cho mỗi thuộc tính của đối tượng: giá trị của một thuộc tính khi khởi tạo một phương thức; giá trị của một thuộc tính sau khi hoàn thành một phương thức. Giá trị của một thuộc tính trong hậu điều kiện là giá trị sau khi thực hiện xong phương thức tương ứng. Để chỉ đến giá trị của một thuộc tính bắt đầu thực hiện tốn tử, chúng ta phải gán tiền tố cho tên thuộc tính với từ khóa:@pre. @pre chỉ cho phép trong biểu thức OCL là một phần của hậu điều kiện. Yêu cầu các thuộc tính hiện tại của một đối tượng đã bị hủy trong q trình thực hiện kết quả tốn tử là undefined; các giá trị trước của một đối tượng khởi tạo trong q trình thực thi kết quả tốn tử cũng là undefined. Ví dụ: context Person::birthdayHappens();

Bảng 3.3: Hàm vị từ cho các toán tử quan hệ OCL cho kiểu dữ liệu số [3]

Toán tử quan hệ Hàm vị từ

x=y

if x.oclIsUndefine() or y.oclIsUndefine() then k else abs(x−y) = 0 0 else abs(x−y <>0) k∗nor(abs(x−y)) x <> y

if x.oclIsUndefine() or y.oclIsUndefine() then k else abs(x−y <>0) 0 else abs(x−y= 0) k∗nor(abs(x−y)) x < y

if x.oclIsUndefine() or y.oclIsUndefine() then k else abs(x−y <0) 0 else abs(x−y>0) k∗nor(abs(x−y) + 1) x≤y

if x.oclIsUndefine() or y.oclIsUndefine() then k else abs(x−y≤0) 0 else abs(x−y >0) k∗nor(abs(x−y) + 1) x > y

if x.oclIsUndefine() or y.oclIsUndefine() then k else abs((y−x)<0) 0 else abs(y−x)≥0) k∗nor(abs(x−y) + 1) x≥y

if x.oclIsUndefine() or y.oclIsUndefine() then k

else abs(y−x≤0) 0

else abs((y−x)>0)

k∗nor(abs(x−y) + 1)

Thuộc tính age chỉ đến thuộc tính của lớp Person khi thực thi tốn tử. Thuộc tính age@pre chỉ đến giá trị của thuộc tính age trong lớp Person trước

khi thực thi toán tử birthdayHappens(). Trong trường hợp lớp Person chưa được tạo đối tượng hoặc đã bị hủy thì giá trị thuộc tính đó đều là undefined.

Trong biểu đồ tuần tự UML, các tiền điều kiện và hậu điều kiện của các phương thức mà là các thông điệp bất đồng bộ (các thông điệp bất đồng bộ là các thông điệp khi gọi không cần trả lời của đối tượng gọi thì đối tượng gửi ngay lập tức gửi thơng điệp tiếp theo) thì các hậu điều kiện có thể là các biểu thức trong đó có chứa biến trong các tiền điều kiện trước chưa xác định. Khi đó, các ràng buộc OCL được sử dụng để đặc tả các điều kiện là giá trị undefined. Vì vậy, việc tính hàm vị từ cho cả giá trị undefined có ý nghĩa trong trường hợp này. So sánh với việc sử dụng bộ giải Z3 [25] để sinh ra các dữ liệu kiểm thử thì chỉ sử dụng hai giá trị logic là true và false.

Một phần của tài liệu (LUẬN án TIẾN sĩ) các kỹ thuật sinh tự động dữ liệu kiểm thử dựa trên các biểu đồ UML luận án TS máy tính 624801 (Trang 74 - 79)

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

(175 trang)