Tải bản đầy đủ (.pdf) (175 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.25 MB, 175 trang )

CÁC KỸ THUẬT SINH TỰ ĐỘNG DỮ LIỆU
KIỂM THỬ DỰA TRÊN CÁC BIỂU ĐỒ UML

VŨ THỊ ĐÀO
Tháng 04 năm 2018


LỜI CẢM ƠN
Luận án được thực hiện tại Trường Đại học Công nghệ, Đại học Quốc gia
Hà Nội, dưới sự hướng dẫn của PGS.TS. Nguyễn Việt Hà.
Tôi xin gửi lời cảm ơn chân thành và sâu sắc nhất tới PGS.TS. Nguyễn
Việt Hà – Bộ môn Công nghệ phần mềm, Khoa Công nghệ thông tin, Trường
Đại học Công nghệ. Người thầy tâm huyết đã tận tình hướng dẫn, động viên
khích lệ, dành nhiều thời gian quí báu để định hướng cho tôi trong quá trình
tham gia khóa học và hoàn thiện luận án.
Tôi xin gửi lời cảm ơn chân thành tới lãnh đạo trường Đại học Công nghệ,
lãnh đạo Khoa Công nghệ thông tin, cảm ơn các đồng nghiệp đã tạo điều kiện
thuận lợi cho tôi trong quá trình làm luận án.
Tôi xin gửi lời cảm ơn chân thành tới các thầy, cô trong Bộ môn Công
nghệ phần mềm, Khoa Công nghệ thông tin, Trường Đại học Công nghệ, những
người luôn hướng dẫn, định hướng, góp ý cho tôi trong quá trình viết luận án.
Cuối cùng, tôi xin gửi lời cảm ơn sâu sắc tới gia đình và bạn bè, những
người đã luôn ủng hộ và hỗ trợ tôi về mọi mặt để tôi yên tâm học tập, nghiên
cứu, và hoàn thành luận án.

i


LỜI CAM ĐOAN
Tôi xin cam đoan: Bản luận án tốt nghiệp này là công trình nghiên cứu
thực sự của cá nhân. Các kết quả được viết chung với các tác giả khác đều được


sự đồng ý của các đồng tác giả trước khi đưa vào luận án. Các kết quả nêu trong
luận án là trung thực và chưa từng được công bố dưới bất cứ hình thức nào
trước khi trình, bảo vệ và công nhận bởi “Hội Đồng đánh giá luận án tốt nghiệp
Tiến sĩ Công nghệ Thông Tin”.
Một lần nữa, tôi xin khẳng định về sự trung thực của lời cam kết trên.

Tác giả:

ii


MỤC LỤC

LỜI CẢM ƠN

i

LỜI CAM ĐOAN

ii

MỤC LỤC

iii

DANH MỤC CÁC THUẬT NGỮ VÀ KÝ HIỆU

vii

DANH MỤC CÁC BẢNG


ix

DANH MỤC CÁC HÌNH VẼ

xi

TÓM TẮT LUẬN ÁN
Chương 1

xiii

GIỚI THIỆU

1

1.1

Đặt vấn đề . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

1.2

Phương pháp và nội dung nghiên cứu . . . . . . . . . . . . . . . .

4

1.3


Cấu trúc luận án . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

Chương 2

KIẾN THỨC NỀN TẢNG

7

2.1

Các khái niệm cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . .

7

2.2

Kiểm thử dựa trên mô hình . . . . . . . . . . . . . . . . . . . . . .

8

2.3

Các biểu đồ UML và ràng buộc OCL . . . . . . . . . . . . . . . . . 12
2.3.1

Biểu đồ tuần tự UML và các toán tử . . . . . . . . . . . . . 12

2.3.2


Các ràng buộc OCL trong các biểu đồ UML . . . . . . . . 17

2.3.3

Đồ thị dòng điều khiển . . . . . . . . . . . . . . . . . . . . . 18

iii


2.4

2.5

Các độ bao phủ và độ phân tích đột biến trong kiểm thử . . . . . 20
2.4.1

Độ bao phủ tương tranh . . . . . . . . . . . . . . . . . . . . 20

2.4.2

Độ bao phủ trong kiểm thử vòng lặp . . . . . . . . . . . . . 21

2.4.3

Độ phân tích đột biến . . . . . . . . . . . . . . . . . . . . . 22

Tổng quan về sinh dữ liệu kiểm thử tự động . . . . . . . . . . . . . 23
2.5.1


Sinh dữ liệu kiểm thử trong kiểm thử cấu trúc . . . . . . . 24

2.5.2

Sinh dữ liệu kiểm thử trong kiểm thử chức năng . . . . . . 28

2.5.3

Sinh dữ liệu kiểm thử tự động từ các biểu đồ UML . . . . 30

2.6

Các công cụ sinh dữ liệu kiểm thử hiện tại . . . . . . . . . . . . . 31

2.7

Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Chương 3 SINH DỮ LIỆU KIỂM THỬ CHO KIỂU DỮ LIỆU
SỐ VÀ CẤU TRÚC ĐỘNG
35
3.1

Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.2

Những nghiên cứu liên quan . . . . . . . . . . . . . . . . . . . . . . 37

3.3


Phương pháp sinh dữ liệu kiểm thử cho biến kiểu dữ liệu số và
cấu trúc động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.4

3.5

3.3.1

Tổng quan về phương pháp đề xuất . . . . . . . . . . . . . 40

3.3.2

Chuyển đổi biểu đồ tuần tự UML thành CFG . . . . . . . 41

3.3.3

Sinh các kịch bản kiểm thử . . . . . . . . . . . . . . . . . . 57

3.3.4

Chọn các vị từ và chuyển thành các hàm vị từ . . . . . . . 60

3.3.5

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

3.3.6


Sinh dữ liệu kiểm thử từ các hàm vị từ . . . . . . . . . . . 65

Thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.4.1

Công cụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

3.4.2

Kết quả và đánh giá . . . . . . . . . . . . . . . . . . . . . . 79

Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

Chương 4

SINH DỮ LIỆU KIỂM THỬ CHO VÒNG LẶP VÀ
iv


CÁC ỨNG DỤNG TƯƠNG TRANH

87

4.1

Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

4.2

Những nghiên cứu liên quan . . . . . . . . . . . . . . . . . . . . . . 88


4.3

Phương pháp sinh dữ liệu kiểm thử theo các độ bao phủ tương
tranh và lặp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

4.4

4.5

4.3.1

Tổng quan về phương pháp đề xuất . . . . . . . . . . . . . 92

4.3.2

Sinh các kịch bản kiểm thử . . . . . . . . . . . . . . . . . . 93

4.3.3

Sinh dữ liệu kiểm thử . . . . . . . . . . . . . . . . . . . . . 98

Thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.4.1

Công cụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

4.4.2

Kết quả và đánh giá . . . . . . . . . . . . . . . . . . . . . . 110


Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Chương 5 SINH DỮ LIỆU KIỂM THỬ CHO KIỂU DỮ LIỆU
CHUỖI
115
5.1

Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

5.2

Những nghiên cứu liên quan . . . . . . . . . . . . . . . . . . . . . . 117

5.3

Phương pháp sinh tự động dữ liệu kiểm thử cho các ràng buộc
chuỗi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

5.4

5.5

5.3.1

Tổng quan về phương pháp đề xuất . . . . . . . . . . . . . 119

5.3.2

Sinh các kịch bản kiểm thử . . . . . . . . . . . . . . . . . . 120


5.3.3

Giải các ràng buộc chuỗi . . . . . . . . . . . . . . . . . . . . 122

Thực nghiệm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.4.1

Công cụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

5.4.2

Kết quả và đánh giá . . . . . . . . . . . . . . . . . . . . . . 139

Tổng kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Chương 6
6.1

KẾT LUẬN

144

Các kết quả đạt được của luận án . . . . . . . . . . . . . . . . . . . 144
v


6.2

Hướng nghiên cứu tiếp theo . . . . . . . . . . . . . . . . . . . . . . 146


DANH MỤC CÁC CÔNG TRÌNH KHOA HỌC CỦA TÁC GIẢ
LIÊN QUAN ĐẾN LUẬN ÁN
148
TÀI LIỆU THAM KHẢO

149

vi


DANH MỤC CÁC THUẬT NGỮ VÀ KÝ HIỆU

Tên thuật ngữ đầy đủ

Chữ viết tắt Giải nghĩa

Breadth-first search

BFS

Thuật toán tìm kiếm theo chiều
rộng

Black box testing
Control Flow Graph

Kiểm thử hộp đen
CFG


Đồ thị dòng điều khiển

Constraint solver

Bộ giải ràng buộc

Coverage criteria

Tiêu chuẩn bao phủ

Dynamic Domain Reduction

DDR

Deadlock
Depth-first search

Phương pháp giảm miền động
Khóa chết

DFS

Thuật toán tìm kiếm theo chiều
sâu

Extended Finite State Machine EFSM

Máy hữu hạn trang thái mở rộng

Finite State Machine


Máy hữu hạn trạng thái

FSM

Gray box testing

Kiểm thử hộp xám

Invariant

Bất biến

Linear Temporal Logic

LTL

Logic thời gian tuyến tính

Message

Thông điệp

Model Checking

Kiểm chứng mô hình

Mutation Score

MS


Độ đo đột biến

Object Constraint Language

OCL

Ngôn ngữ ràng buộc đối tượng

Parallel Fragment

Par

Toán tử song song

Post–condition

Hậu điều kiện

Pre–condition

Tiền điều kiện

Predicate

Vị từ

Safety property

Thuộc tính an toàn


Satisfiable

SAT

Thỏa mãn

Symbolic execution

SE

Thực thi tượng trưng

Weak Sequencing Fragment

Seq

Toán tử tuần tự yếu
vii


Tên thuật ngữ đầy đủ

Chữ viết tắt Giải nghĩa

Satisfiability Modulo Theories

SMT

Các lý thuyết môđun về tính

thỏa được

System Under Testing

SUT

Hệ thống được kiểm thử

Test Case

Ca kiểm thử

Test Data

Dữ liệu kiểm thử

Test Scenario

Kịch bản kiểm thử

Test Script

Mã kiểm thử dạng đặc tả kịch
bản dùng để tự động hóa

Unified Modeling Language

UML

Ngôn ngữ mô hình hóa thống

nhất

Unsatisfiable

UNSAT

Không thỏa mãn

Variable Assignment Graph

VAG

Đồ thị tham số biến

White box testing
eXtensible Markup Language

Kiểm thử hộp trắng
XML

Z3-Str solver

Ngôn ngữ đánh dấu mở rộng
Bộ giải Z3-Str

viii


DANH MỤC CÁC BẢNG
2.1


Các biểu đồ UML và sử dụng để mô hình hóa cho kiểm thử [100]

30

3.1

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

3.2

Hàm vị từ cho các toán tử logic trong OCL [3] . . . . . . . . . . . 62

3.3

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

3.4

Các kịch bản kiểm thử được sinh ra của máy bán hàng tự động . 70

3.5

So sánh kết quả đề xuất và kết quả nghiên cứu trong [72] . . . . . 81

3.6

Thực nghiệm đưa ra độ bao phủ các đường dẫn của đồ thị của
phương pháp đưa ra và phương pháp kiểm thử ngẫu nhiên . . . . 82


3.7

Kết quả thực nghiệm so sánh phương pháp đề xuất với phương
pháp [30] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

4.1

Kết quả MS sử dụng cho từng kịch bản kiểm thử được sinh ra
trong cách tiếp cận [95] và Phương pháp đề xuất . . . . . . . . . . 111

4.2

Kết quả MS của phương pháp đề xuất và phương pháp ngẫu nhiên112

5.1

Ví dụ giải các toán tử chuỗi . . . . . . . . . . . . . . . . . . . . . . 125

5.2

Cách Z3–str thực hiện xử lý các ràng buộc chuỗi trong Bảng 5.1 . 125

5.3

Ngữ pháp của các ràng buộc trong Z3–str, mở rộng cho search và
replaceAll so với [114] . . . . . . . . . . . . . . . . . . . . . . . . . . 127

5.4

Định nghĩa cho Thuật toán 5.2 [114] . . . . . . . . . . . . . . . . . 129


5.5

Các quy tắc giảm [114] . . . . . . . . . . . . . . . . . . . . . . . . . 131

5.6

Quy tắc giảm sử dụng gọi đệ quy . . . . . . . . . . . . . . . . . . . 133

5.7

Các quy tắc tiền xử lý cho các toán tử chuỗi . . . . . . . . . . . . 135

5.8

So sánh khả năng tìm lỗi của các chức năng trong các ứng dụng . 140

ix


5.9

So sánh xử lý các toán tử chuỗi và hiệu năng của SeqString với
phương pháp của nhóm Tác giả Shoichiro [39] . . . . . . . . . . . . 141

x


DANH MỤC CÁC HÌNH VẼ
1.1


Các nội dung luận án giải quyết trong bài toán kiểm thử dựa trên
mô hình. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

2.1

Quy trình kiểm thử dựa trên mô hình [100]. . . . . . . . . . . . . .

9

2.2

Ví dụ biểu đồ tuần tự UML có toán tử alt và opt. . . . . . . . . . 14

2.3

Ví dụ biểu đồ tuần tự UML có toán tử loop và break. . . . . . . . 14

2.4

Ví dụ biểu đồ tuần tự UML có toán tử par và seq. . . . . . . . . . 15

2.5

Ví dụ biểu đồ tuần tự UML có toán tử strict và critical. . . . . . . 16

2.6


Ví dụ biểu đồ tuần tự UML có toán tử ignore và consider. . . . . 16

2.7

Ví dụ biểu đồ tuần tự UML có toán tử negative và assert. . . . . 17

2.8

Ví dụ biểu đồ lớp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.9

Các loại nút của đồ thị dòng điều khiển . . . . . . . . . . . . . . . 19

2.10 Các hướng tiếp cận của sinh dữ liệu kiểm thử tự động [99]. . . . . 24
2.11 Phân loại các công cụ sinh kiểm thử tự động [40]. . . . . . . . . . 32
3.1

Sinh ca kiểm thử sử dụng kiểm chứng mô hình theo cách tiếp
cận [17]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3.2

Các bước cơ bản sinh các dữ liệu kiểm thử. . . . . . . . . . . . . . 41

3.3

Ví dụ biểu đồ tuần tự UML. . . . . . . . . . . . . . . . . . . . . . . 43

3.4


File xmi sau khi chuẩn hóa mô tả dữ liệu của biểu đồ tuần tự
trong Hình 3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

3.5

Chuyển từ biểu đồ tuần tự sang CFG (của toán tử opt và alt). . . 48

3.6

Chuyển từ biểu đồ tuần tự sang CFG (của toán tử break và loop). 50

3.7

Chuyển từ biểu đồ tuần tự sang CFG (của toán tử par và seq). . 51

3.8

Chuyển từ biểu đồ tuần tự sang CFG (của toán tử strict và critical). 53
xi


3.9

Chuyển từ biểu đồ tuần tự sang CFG (của toán tử ignore và
consider). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

3.10 Chuyển từ biểu đồ tuần tự sang CFG (của toán tử assert và
negative). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.11 Biểu đồ tuần tự của máy bán hàng tự động. . . . . . . . . . . . . . 71

3.12 Biểu đồ lớp của chức năng máy bán hàng tự động. . . . . . . . . . 71
3.13 Đồ thị dòng điều khiển của máy bán hàng tự động. . . . . . . . . 72
3.14 Biểu đồ tuần tự với kiểu dữ liệu biến là cấu trúc động. . . . . . . 76
3.15 Đồ thị dòng điều khiển với kiểu dữ liệu biến là cấu trúc động. . . 76
3.16 Đường dẫn con P1 thực thi. . . . . . . . . . . . . . . . . . . . . . . 77
3.17 Đường dẫn con P2 thực thi. . . . . . . . . . . . . . . . . . . . . . . 78
3.18 Đường dẫn con P3 thực thi. . . . . . . . . . . . . . . . . . . . . . . 78
3.19 Kiến trúc thực thi của SequenceTesting. . . . . . . . . . . . . . . . 80
4.1

Toán tử lặp chuyển sang CFG. . . . . . . . . . . . . . . . . . . . . 91

4.2

Toán tử song song chuyển sang CFG. . . . . . . . . . . . . . . . . . 92

4.3

Quá trình sinh dữ liệu kiểm thử: phát triển từ [75] cho vòng lặp. . 100

4.4

Tính điểm chia split phụ thuộc các miền giá trị của biến trong [75].102

4.5

Biểu đồ tuần tự của chức năng chuyển tiền trong hệ thống ngân
hàng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

4.6


Biểu đồ lớp và ràng buộc OCL cho chức năng chuyển tiền. . . . . 108

4.7

Đồ thị dòng điều khiển của chức năng chuyển tiền. . . . . . . . . . 108

4.8

Kiến trúc phát triển của công cụ SequenceConcur. . . . . . . . . . 110

5.1

Kiến trúc của Bộ giải Z3–str trong [114]. . . . . . . . . . . . . . . . 124

5.2

Biểu đồ tuần tự cho chức năng kiểm tra thông tin của một ứng
dụng web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

5.3

CFG của chức năng kiểm tra thông tin ứng dụng web. . . . . . . . 138

5.4

Kiến trúc của SeqString. . . . . . . . . . . . . . . . . . . . . . . . . 139

xii



TÓM TẮT LUẬN ÁN
Luận án nghiên cứu một số giải pháp hỗ trợ sinh dữ liệu kiểm thử tự động
từ các biểu đồ UML 2.0. Cụ thể, luận án tập trung giải quyết ở giai đoạn thiết
kế kiểm thử: sinh các kịch bản kiểm thử và sinh dữ liệu kiểm thử từ biểu đồ
tuần tự và các ràng buộc trong biểu đồ lớp. Mục tiêu của phương pháp nghiên
cứu là sinh dữ liệu kiểm thử có độ bao phủ tốt hơn, có khả năng tìm được nhiều
lỗi trong các hệ thống phần mềm. Vì vậy, luận án tập trung vào việc giải quyết
các đặc trưng, các toán tử của biểu đồ tuần tự UML 2.0; tránh bùng nổ số lượng
kịch bản kiểm thử sinh ra, các vòng lặp, các trường hợp khóa chết (deadlock)
và đồng bộ trong các ứng dụng tương tranh; giải các ràng buộc với các kiểu dữ
liệu khác nhau. Luận án đã đạt được các kết quả chính như sau:
Thứ nhất, luận án đề xuất một quy trình sinh các dữ liệu kiểm thử từ biểu
đồ tuần tự UML 2.0 và các ràng buộc OCL trong biểu đồ lớp. Biểu đồ tuần tự
UML 2.0 áp dụng cho tất cả mười hai toán tử, có cấu trúc phức tạp, các khối
lồng ghép. Phương pháp áp dụng cho các ràng buộc với biến là kiểu dữ liệu số
và cấu trúc động.
Thứ hai, luận án đề xuất một phương pháp sinh dữ liệu kiểm thử tự động
từ các biểu đồ tuần tự UML 2.0 và biểu đồ lớp trong trường hợp của bao phủ
vòng lặp và các ứng dụng tương tranh.
Thứ ba, luận án đưa ra một phương pháp cải tiến việc sinh dữ liệu kiểm
thử tự động từ các biểu đồ tuần tự UML 2.0 và biểu đồ lớp với việc giải quyết
các ràng buộc chuỗi.
Trong các phương pháp đề xuất, luận án đều xây dựng công cụ để cài đặt
và thực nghiệm trên đó. Với mỗi thực nghiệm các dữ liệu kiểm thử và kịch bản
kiểm thử sinh ra được so sánh về độ bao phủ, khả năng tìm lỗi so với các phương
pháp hiện tại. Kết quả cho thấy tính hiệu quả và độ tin cậy của phương pháp
về mặt thực nghiệm. Những đề xuất đó giải quyết một phần trong hướng tiếp
cận lớn về kiểm thử dựa trên mô hình (cụ thể là các biểu đồ UML).


xiii


Chương 1
GIỚI THIỆU
1.1

Đặt vấn đề

Trong quá trình phát triển phần mềm, kiểm thử là giai đoạn quan trọng
và thực sự cần thiết để tạo ra một hệ thống phần mềm có chất lượng cao [9, 67].
Trong thực tế hơn 50% nỗ lực phát triển dành cho giai đoạn kiểm thử [6] và rất
hiếm các sản phẩm phần mềm được sản xuất ra mà không có lỗi. Các công ty
phần mềm cũng như các tổ chức phát triển phần mềm hướng tới giải pháp tự
động hóa quá trình kiểm thử. Một minh chứng thực tế là ngày càng có nhiều
các công cụ kiểm thử tự động đưa ra và được áp dụng trong thực tế. Tuy nhiên,
đa số quá trình thực hiện đều tập trung vào việc thực thi kiểm thử tự động mà
không quan tâm nhiều đến việc thiết kế chúng. Hơn nữa, việc phát hiện lỗi phần
mềm chủ yếu là do chất lượng của các kịch bản và dữ liệu kiểm thử được thiết
kế. Các dữ liệu kiểm thử có độ bao phủ càng lớn thì độ tin cậy của tập dữ liệu
kiểm thử càng cao [24], có thể tìm được nhiều lỗi của hệ thống và giúp kiểm soát
và quản lý quá trình kiểm thử tốt hơn. Như vậy, quá trình sinh các dữ liệu kiểm
thử tự động trở nên thực sự cần thiết, nhất là đối với những phần mềm lớn và
phức tạp. Quá trình này làm giảm giá thành phát triển phần mềm, tiết kiệm
thời gian, công sức, nâng cao chất lượng và tăng độ tin cậy của phần mềm [41].
Trong các hướng tiếp cận sinh tự động dữ liệu kiểm thử hiện nay thường
được thực hiện từ mã nguồn chương trình, các mô hình hoặc các đặc tả [12, 100].
Có nhiều hướng nghiên cứu phát triển được đưa ra thực hiện từ mã nguồn chương
trình trong [8, 34, 54, 75, 91, 110]. Tuy nhiên, việc sinh tự động dữ liệu kiểm
thử này được thực hiện ở giai đoạn sau khi có mã nguồn và số kịch bản kiểm

thử được sinh ra rất lớn. Hơn nữa, có rất nhiều ngôn ngữ lập trình khác nhau
nên phương pháp sinh dữ liệu kiểm thử thường phụ thuộc nhiều vào công nghệ

1


phân tích mã nguồn. Hướng thứ hai là sử dụng các mô hình [16, 72, 97, 24]
hoặc các đặc tả [102, 64, 57] để thiết kế tự động các dữ liệu kiểm thử có thể
xuất phát từ máy hữu hạn trạng thái (Finite State Machine – FSM), các biểu
đồ UML (Unified Modeling Language) hoặc các đặc tả bằng các ngôn ngữ hình
thức khác nhau (chẳng hạn Z, B, v.v.). Việc áp dụng các đặc tả hình thức trong
thực tiễn là khó thực hiện và tốn thời gian. Hơn nữa, khi sử dụng phương pháp
này đòi hỏi trình độ của các chuyên gia hiểu về đặc tả hình thức. Vì vậy, tác
giả chọn hướng nghiên cứu từ các biểu đồ UML vì các biểu đồ UML được sử
dụng phổ biến trong thực tiễn của các công ty phát triển phần mềm. Việc sử
dụng các biểu đồ UML có thể kết hợp với ngôn ngữ ràng buộc đối tượng (Object
Contraint Language – OCL) để biểu diễn các đặc tả ràng buộc mà nhiều khi
biểu đồ không biểu diễn hết được. Hơn nữa, việc thiết kế các dữ liệu kiểm thử
từ các biểu đồ này có thể thực hiện ở giai đoạn đầu của quá trình phát triển,
không nhất thiết là phải đợi khi đã có mã nguồn chương trình.
Kiểm thử từ các biểu đồ UML cũng như việc kiểm thử thông thường được
thực hiện qua các bước: sinh các kịch bản kiểm thử, sinh dữ liệu kiểm thử và
thực thi các đoạn mã kiểm thử. Vì việc thực thi các đoạn mã kiểm thử tự động
có nhiều công cụ hỗ trợ và phụ thuộc vào công nghệ, môi trường ngôn ngữ sử
dụng. Hơn nữa, vấn đề phát hiện lỗi trong các dự án phần mềm thì chủ yếu phụ
thuộc vào các kịch bản và dữ liệu kiểm thử được thiết kế. Do đó, tác giả chọn
hướng tập trung nghiên cứu vào các phương pháp sinh dữ liệu kiểm thử. Các
hướng nghiên cứu việc sinh dữ liệu kiểm thử từ các biểu đồ UML phụ thuộc
vào loại biểu đồ được sử dụng. Tùy vào mục đích kiểm thử, mức độ kiểm thử sẽ
chọn biểu đồ phù hợp với yêu cầu đưa ra. Tác giả Bader và các đồng sự trong [5]

đưa ra một phương pháp cho việc sinh các dữ liệu kiểm thử từ biểu đồ trạng
thái. Tuy nhiên, nghiên cứu này cho rằng biểu đồ trạng thái có ý nghĩa với kiểm
thử đơn vị, số lượng kịch bản kiểm thử sinh ra lớn và rất dễ bùng nổ các kịch
bản kiểm thử. Trong khi đó các dữ liệu kiểm thử và kịch bản kiểm thử sinh từ
các biểu đồ tuần tự có ý nghĩa cho kiểm thử tích hợp [33] và số lượng kịch bản
kiểm thử sinh ra ít hơn khi so sánh với biểu đồ trạng thái [2]. Hơn nữa, biểu đồ
tuần tự là biểu đồ chi tiết và giàu hành vi trong các biểu đồ UML. Vì vậy, các
nhà nghiên cứu quan tâm đến việc sử dụng các biểu đồ tuần tự để sinh các dữ
liệu kiểm thử và các kịch bản kiểm thử. Trong hướng nghiên cứu đó, với việc
giải quyết các toán tử của biểu đồ tuần tự thì phương pháp trong [72] sinh dữ
2


liệu kiểm thử từ biểu đồ tuần tự UML giải quyết với năm loại toán tử: alt, opt,
break, parallel, loop và thuật toán sinh dữ liệu kiểm thử chủ yếu giải quyết với
kiểu dữ liệu số. Trong một vài hướng tiếp cận khác như [97, 84, 65], các phương
pháp kỹ thuật hàm nhỏ nhất trong việc sinh dữ liệu kiểm thử tự động cũng chỉ
áp dụng với kiểu dữ liệu số. Như vậy, việc sinh dữ liệu kiểm thử từ các biểu đồ
UML đối với các ràng buộc mà biến có các kiểu dữ liệu khác nhau như: kiểu dữ
liệu chuỗi, cấu trúc động và trong các trường hợp của vòng lặp chưa được đưa
ra hoặc chưa có lời giải thỏa đáng.
Trong việc giải quyết bài toán sinh dữ liệu kiểm thử tự động từ các biểu
đồ UML thì việc bùng nổ số kịch bản kiểm thử, các trường hợp khóa chết, đồng
bộ trong các luồng song song của hệ thống cũng là vấn đề gặp phải nhiều khó
khăn và thách thức. Nhóm tác giả Sun và các đồng sự trong [93] đưa ra cách
tiếp cận dựa trên việc chuyển đổi để sinh ra các dữ liệu kiểm thử hướng kịch bản
từ biểu đồ hoạt động UML. Cách tiếp cận này dựa trên các quy tắc chuyển đổi
để chuyển về cây nhị phân, sau đó dựa vào các thuật toán tìm kiếm trên cây nhị
phân này để sinh các kịch bản kiểm thử. Công cụ cài đặt sử dụng phương pháp
sinh dữ liệu kiểm thử ngẫu nhiên, chưa xét độ bao phủ của các dữ liệu kiểm thử

sinh ra; các trường hợp khóa chết và vấn đề bùng nổ các kịch bản kiểm thử chưa
được giải quyết. Hướng tiếp cận trong [58, 89] đưa ra phương pháp sinh các kịch
bản kiểm thử từ biểu đồ tuần tự và biểu đồ hoạt động trong các trường hợp
tương tranh. Các dữ liệu kiểm thử sinh ra theo phương pháp này biểu diễn tính
tương tranh và có thể bao phủ các lỗi đồng bộ, khóa chết. Tuy nhiên, phương
pháp đó chưa đưa ra các tiêu chuẩn bao phủ tương tranh khác nhau trong các
ứng dụng, việc cài đặt thực thi tính hiệu quả cũng chưa được triển khai.
Như vậy, các vấn đề mà luận án sẽ tập trung giải quyết cụ thể như sau:
❼ Sinh dữ liệu kiểm thử từ các biểu đồ tuần tự UML 2.0 và các ràng buộc

OCL trong biểu đồ lớp nhằm giải quyết cho tất cả mười hai toán tử, có
cấu trúc lồng ghép nhau; Các ràng buộc với các biến là các biến kiểu dữ
liệu số và cấu trúc động.
❼ Sinh tự động dữ liệu kiểm thử từ các biểu đồ tuần tự UML 2.0 và các ràng

buộc trong biểu đồ lớp trong các ứng dụng tương tranh và với các độ bao
phủ khác nhau của vòng lặp.
3


❼ Sinh tự động dữ liệu kiểm thử từ các biểu đồ tuần tự UML 2.0 và các ràng

buộc trong biểu đồ lớp với việc giải quyết các ràng buộc chuỗi.

1.2

Phương pháp và nội dung nghiên cứu

Để thực hiện các nội dung nghiên cứu trong luận án, tác giả tiến hành theo
phương pháp tiếp cận từ trên xuống, phân loại và hệ thống hóa lý thuyết các

phương pháp về sinh dữ liệu kiểm thử tự động từ mô hình, từ đó phân tích,
phân loại và tổng hợp các phương pháp đó. Theo cách phân loại đưa ra, tác
giả đi sâu phân tích mỗi đặc điểm và ưu nhược điểm của từng loại. Từ phương
pháp phân tích và tổng hợp trên của kiểm thử dựa trên mô hình, tác giả chọn
đối tượng nghiên cứu trong luận án là từ các biểu đồ tuần tự UML 2.0 và biểu
đồ lớp. Từ đó với mỗi đặc trưng của từng loại biểu đồ, tác giả nghiên cứu liên
quan để đề xuất cải tiến hoặc đưa ra phương pháp mới về sinh dữ liệu kiểm thử.
Trong phạm vi của luận án, tác giả tập trung nghiên cứu chủ yếu về các
phương pháp tự động trong giai đoạn thiết kế kiểm thử theo quy trình phát
triển phần mềm. Mục tiêu của luận án nhằm nghiên cứu, cải tiến, đề xuất và
triển khai một số phương pháp sinh tự động các dữ liệu kiểm thử từ các biểu đồ
UML trong giai đoạn thiết kế kiểm thử để giải quyết bài toán trên. Tuy nhiên,
để đo tính hiệu quả, khả năng tìm lỗi của các dữ liệu kiểm thử sinh ra thì một
vài tiêu chuẩn bao phủ và độ đo phù hợp với mục đích so sánh các dữ liệu kiểm
thử được sinh ra với các phương pháp hiện tại. Theo đó, luận án thực hiện các
nội dung cụ thể như sau:
❼ Tổng hợp, hệ thống hóa các nghiên cứu liên quan và bài toán tổng quan về

các vấn đề sinh dữ liệu kiểm thử tự động, kiểm thử từ các biểu đồ UML.
❼ Nghiên cứu bài toán sinh dữ liệu kiểm thử tự động từ biểu đồ tuần tự UML

và biểu đồ lớp với việc giải quyết các toán tử, các đặc trưng của biểu đồ
UML đó. Nghiên cứu các phương pháp trong giai đoạn thiết kế kiểm thử
để các kịch bản kiểm thử được sinh ra đạt được số lượng nhỏ nhất và độ
bao phủ cao nhất, tránh bùng nổ số lượng kịch bản kiểm thử và xem xét
các trường hợp có hoặc không có sự chia sẻ dữ liệu trong các luồng song
song của biểu đồ tuần tự.
4



❼ Nghiên cứu trong các hệ các ràng buộc từ các biểu đồ UML, xét phương

pháp sinh và thực thi dữ liệu kiểm thử với biến có kiểu dữ liệu số, cấu trúc
dữ liệu động, các ràng buộc chuỗi và kiểm thử với vòng lặp.
❼ Thực nghiệm, triển khai trong các phương pháp cải tiến, đề xuất với các

biểu đồ tuần tự và các biểu đồ lớp. Xem xét áp dụng về các tiêu chuẩn bao
phủ khác nhau phù hợp với từng loại biểu đồ UML và đo khả năng tìm lỗi
của các dữ liệu kiểm thử được sinh ra.
Giҧi quyӃt các ÿһc
trѭng, các toán tӱ cӫa
biӇu ÿӗ UML ÿã chӑn

Các yêu cҫu

mô hình hóa

Các dӳ liӋu kiӇm
thӱ, ca kiӇm thӱ

Các biӇu ÿӗ UML

Bӝ sinh ÿҫu ra
mong muӕn

Ĉánh giá và QuyӃt ÿӏnh:
- Tҥo thêm ca kiӇm thӱ
- ChӍnh sӱa mô hình
- Ĉánh giá ÿӝ tin cұy và các
ÿӝ ÿo chҩt lѭӧng kiӇm thӱ


Giҧi quyӃt vӟi các kiӇu dӳ liӋu sӕ,
có cҩu trúc ÿӝng, các ràng buӝc
chuӛi và kiӇm thӱ vòng lһp

Phân tích kӃt quҧ

Giҧm sӕ lѭӧng và tăng ÿӝ bao phӫ cӫa kӏch
bҧn kiӇm thӱ, Tránh bùng nә sӕ lѭӧng trong
các luӗng song song, khóa chӃt, ÿӗng bӝ

Báo cáo kiӇm thӱ
Lҩy kӃt quҧ kiӇm thӱ

Sҧn phҭm cҫn
kiӇm thӱ

Hình 1.1: Các nội dung luận án giải quyết trong bài toán kiểm thử dựa trên mô hình.

Các nội dung mà luận án đưa ra trên tập trung giải quyết một số phương pháp
sinh tự động các kịch bản kiểm thử và sinh dữ liệu kiểm thử . Trong Hình 1.1
mô tả quy trình của bài toán kiểm thử dựa trên mô hình, các vấn đề luận án
tập trung giải quyết là các hình chữ nhật góc tròn nét đứt. Các vấn đề trong
các hướng nghiên cứu đưa ra phương pháp giải quyết các toán tử của biểu đồ
UML 2.0 chuyển thành một biểu diễn trung gian là đầu vào cho việc sinh các
kịch bản kiểm thử. Phương pháp sinh các kịch bản kiểm thử để tránh bùng nổ
số lượng kịch bản và tăng độ bao phủ của chúng, có mối liên hệ với các phương
pháp giải quyết ràng buộc để sinh dữ liệu kiểm thử trong từng kịch bản trên.
5



Các nghiên cứu đó góp phần giải quyết hoàn chỉnh bài toán trong giai đoạn thiết
kế kiểm thử từ các biểu đồ UML.

1.3

Cấu trúc luận án

Phần còn lại của luận án được cấu trúc thành năm chương chính. Trong
đó, Chương 2 giới thiệu kiến thức nền tảng về các vấn đề nghiên cứu trong luận
án. Đây là cơ sở lý thuyết cho việc xây dựng các phương pháp sinh tự động dữ
liệu kiểm thử từ các biểu đồ UML trong các chương từ Chương 3 đến Chương 5.
Theo cách tiếp cận của việc sinh tự động dữ liệu kiểm thử từ các biểu đồ tuần
tự UML và biểu đồ lớp, tác giả tập trung đưa ra đánh giá phân tích các hướng
nghiên cứu liên quan; nêu ra một số vấn đề còn tồn tại mà luận án sẽ tập trung
giải quyết. Cụ thể, Chương 3 trình bày nội dung kết quả nghiên cứu về phương
pháp sinh tự động dữ liệu kiểm thử giải quyết cho tất cả mười hai toán tử trong
biểu đồ tuần tự UML 2.0 và kiểu dữ liệu số và cấu trúc động. Tiếp theo, phương
pháp đề xuất cho việc sinh tự động dữ liệu kiểm thử với trường hợp kiểm thử
vòng lặp và các ứng dụng tương tranh được đưa ra trong Chương 4 nhằm giải
quyết vấn đề bùng nổ số kịch bản kiểm thử sinh ra, trường hợp khóa chết và
đồng bộ. Chương 5 trình bày nội dung kết quả nghiên cứu về phương pháp sinh
tự động dữ liệu kiểm thử với việc cải tiến khi giải với các ràng buộc chuỗi. Cuối
cùng, tổng kết lại các kết quả đạt được và hướng phát triển tiếp theo của luận
án, được trình bày trong Chương 6.

6


Chương 2

KIẾN THỨC NỀN TẢNG
Chương này trình bày kiến thức nền tảng về các vấn đề nghiên cứu trong
luận án, bao gồm: đưa ra các cơ sở lý thuyết chính về sinh dữ liệu kiểm thử, các
biểu đồ UML và ràng buộc OCL, các hướng tiếp cận chính của kiểm thử dựa
trên mô hình, các biểu đồ UML và OCL . Tiếp theo, đưa ra tổng quan về sinh
dữ liệu kiểm thử tự động, từ các biểu đồ UML và các công cụ sinh dữ liệu kiểm
thử hiện tại. Cuối chương, tác giả nêu ra một số vấn đề còn tồn tại mà luận án
sẽ tập trung giải quyết.

2.1

Các khái niệm cơ bản

Kiểm thử phần mềm là quá trình kiểm tra đảm bảo sản phẩm phần mềm
thực hiện đúng để thỏa mãn các yêu cầu của khách hàng. Mục đích của kiểm
thử nhằm đánh giá chất lượng hoặc tính chấp nhận được của sản phẩm. Kiểm
thử cũng nhằm phát hiện lỗi hoặc bất cứ vấn đề gì về sản phẩm. Các khái niệm
cơ bản sau được sử dụng trong phạm vi của luận án.
❼ Ca kiểm thử (Test case) [1, 15]: gồm một tập các dữ liệu đầu vào, các bước

thực hiện và các giá trị đầu ra mong đợi đối với phần mềm. Mỗi ca kiểm
thử được liên kết với một hành vi trong một chức năng của hệ thống. Với
từng ca kiểm thử cụ thể, kết quả mong đợi được so sánh với kết quả thực
tế của các kịch bản khi thực thi phần mềm.
❼ Dữ liệu kiểm thử (Test data) [46, 15]: là tập các giá trị thực (thỏa mãn

tiêu chuẩn bao phủ dữ liệu đã chọn) được xác định chỉ rõ là đầu vào để
thực hiện các ca kiểm thử trong quá trình kiểm thử.
❼ Tiêu chuẩn bao phủ dữ liệu kiểm thử (Test data coverage criteria) [107,


7


100]: là một tập các quy tắc được sử dụng để xác định việc chọn các giá
trị dữ liệu kiểm thử. Tiêu chuẩn này xác định độ phủ trong không gian dữ
liệu đầu vào của chương trình hoặc mô hình. Tiêu chuẩn bao phủ dữ liệu
hữu ích trong trường hợp một tập miền xác định của dữ liệu đầu vào là
lớn và đưa ra việc chọn các giá trị dữ liệu tốt cho kiểm thử.
❼ Kịch bản kiểm thử (Test scenario) [1, 15]: là khái niệm ở mức cao những

cái cần kiểm thử, và thường bao gồm nhiều ca kiểm thử liên quan nhau.
Mục đích của kịch bản kiểm thử là kiểm tra việc thực hiện chức năng từ
đầu đến cuối của một chức năng phần mềm và đảm bảo luồng logic đang
hoạt động là đúng. Khi các kịch bản kiểm thử xác định, các trường hợp
kiểm thử được viết cho từng kịch bản với từng bộ dữ liệu đầu vào khác
nhau. Các ca kiểm thử là các trường hợp miêu tả chi tiết ở mức thấp về
các kịch bản kiểm thử.
❼ Tiêu chuẩn bao phủ (Coverage criteria) [78, 100]: là một tập các quy tắc

hoặc yêu cầu mà các bộ kiểm thử cần phải thoả mãn. Mục đích để đánh
giá mức độ hiệu quả của các ca kiểm thử, đo phần trăm độ bao phủ của
đặc tả hoặc chương trình của các ca kiểm thử so với yêu cầu phần mềm
(ví dụ: bao phủ dòng lệnh, bao phủ nhánh, v.v.), thông qua kiểm thử để
loại trừ sai sót và tăng chất lượng phần mềm.

2.2

Kiểm thử dựa trên mô hình

Có nhiều khái niệm khác nhau về kiểm thử dựa trên mô hình. Trong nghiên

cứu [4, 100], kiểm thử dựa trên mô hình là một phương pháp kiểm thử mà các
ca kiểm thử được sinh ra từ mô hình, đặc tả hành vi của hệ thống được kiểm
thử (System Under Testing – SUT). Mô hình này được biểu diễn bằng máy hữu
hạn trạng thái, ôtômát, đặc tả đại số, các biểu đồ UML, v.v. Kiểm thử dựa trên
mô hình tự động hóa các thiết kế chi tiết của ca kiểm thử. Cụ thể hơn, thay thế
việc thiết kế hàng trăm ca kiểm thử thủ công thì người thiết kế kiểm thử xây
dựng mô hình trừu tượng của SUT, sau đó công cụ kiểm thử dựa trên mô hình
sinh ra một tập các ca kiểm thử từ mô hình đó. Toàn bộ thời gian thiết kế kiểm
thử được giảm xuống, và ưu điểm là có thể phát sinh các tập các ca kiểm thử

8


khác nhau từ cùng một mô hình bằng việc sử dụng các tiêu chuẩn bao phủ khác
nhau. Quá trình kiểm thử có thể chia thành năm bước chính như sau:
❼ Bước 1: Mô hình hóa hệ thống kiểm thử.
❼ Bước 2: Sinh các trừu tượng kiểm thử (abstract tests) từ mô hình của SUT.
❼ Bước 3: Cụ thể hóa các trừu tượng kiểm thử để tạo ra các đoạn mã kiểm

thử có thể thực thi.
❼ Bước 4: Thực thi các đoạn mã kiểm thử trên SUT.
❼ Bước 5: Phân tích kết quả, so sánh kết quả thực tế với kết quả mong đợi.

Hình 2.1: Quy trình kiểm thử dựa trên mô hình [100].

Hình 2.1 chỉ quy trình kiểm thử dựa trên mô hình. Bước đầu tiên của kiểm
thử dựa trên mô hình là xây dựng hay mô hình hoá của SUT. Mô hình này tập
trung vào các khía cạnh của hệ thống mà chúng ta muốn kiểm thử. Sau khi xây
dựng mô hình, chúng ta có thể sử dụng công cụ để kiểm tra tính nhất quán và
các hành vi mong muốn trên mô hình.

Bước thứ hai của kiểm thử dựa trên mô hình là sinh các trừu tượng kiểm
thử từ mô hình [79]. Chúng ta phải chọn các tiêu chuẩn bao phủ để sinh các
ca kiểm thử theo các tiêu chuẩn bao phủ này vì số lượng các ca kiểm thử có
thể sinh ra luôn là không giới hạn. Phần lớn các công cụ kiểm thử dựa trên mô
hình tạo ra một ma trận tìm dấu vết các yêu cầu phần mềm hoặc các kết quả
bao phủ khác nhau như đầu ra của bước này. Ma trận dấu vết yêu cầu [100] là
quan hệ giữa các yêu cầu chức năng và các ca kiểm thử được tạo ra. Đó có thể
9


là quan hệ nhiều – nhiều: một yêu cầu có thể được bao phủ bởi nhiều ca kiểm
thử, và các ca kiểm thử đơn có thể được tao ra từ nhiều yêu cầu phần mềm. Các
kết quả bao phủ cho chúng ta biết việc xác định các tập ca kiểm thử được sinh
ra so với các hành vi của mô hình. Chúng ta có thể sử dụng các kết quả bao
phủ tĩnh đơn giản về chất lượng của các tập kiểm thử được sinh ra. Việc này có
thể hữu ích để sử dụng công cụ tự động cho việc kiểm tra các hành vi của các
đường dẫn kiểm thử trong mô hình và đưa ra kết quả trong việc sinh các kiểm
thử là đầy đủ hay không.
Kiểm thử dựa trên mô hình trong bước thứ ba là việc chuyển đổi các trừu
tượng kiểm thử vào các kiểm thử cụ thể để có thể thực thi được. Điều này được
thực hiện bởi một công cụ chuyển đổi, sử dụng các mẫu khác nhau và chuyển
đổi các ca kiểm thử thành các đoạn mã kiểm thử. Mục đích của bước này là
cầu nối giữa các ca kiểm thử và hệ thống kiểm thử cụ thể bằng việc thêm các
chi tiết của hệ thống cần kiểm thử ở mức thấp. Thuận lợi của hướng tiếp cận
này là các ca kiểm thử có thể khá độc lập với ngôn ngữ được sử dụng để viết
kiểm thử và môi trường kiểm thử. Nhóm nghiên cứu trong [13] chuyển đổi các
trừu tượng kiểm thử được sinh ra từ công cụ sinh kiểm thử LEIRIOS, sau đó
các trừu tượng đó sang mã kiểm thử bằng Java để có thể thực thi tự động.
Bước thứ tư để thực thi các mã kiểm thử trong SUT. Với kiểm thử trực
tuyến, các kiểm thử sẽ được thực thi như các thủ tục, vì vậy công cụ kiểm thử

dựa trên mô hình sẽ quản lý tiến trình kiểm thử thực thi trên hệ thống thực và
ghi lại kết quả. Với kiểm thử không trực tuyến, một tập các đoạn mã kiểm thử
có thể viết bằng một vài ngôn ngữ, vì vậy chúng có thể được sử dụng trong các
công cụ kiểm thử thực thi các đoạn mã kiểm thử và đưa ra kết quả. Các nhóm
tác giả trong [35, 71] miêu tả về thực thi kiểm thử tự động, các thực thi kiểm
thử được sinh ra theo hướng tiếp cận kiểm thử dựa trên mô hình.
Bước thứ năm là phân tích kết quả của thực thi kiểm thử. Trong các kiểm
thử mà kết quả thông báo bị lỗi, chúng ta phải xác định lỗi và nguyên nhân
gây ra lỗi. Điều này tương tự như tiến trình phân tích kiểm thử truyền thống.
Việc thiết kế các ca kiểm thử được dựa trên các loại hành vi mong đợi, nhưng
với việc thiết kế ca kiểm thử thủ công thì mô hình này chỉ hướng là những mô
hình phi hình thức. Bằng việc tạo ra các mô hình hình thức rõ ràng nên có thể
sử dụng công cụ kiểm thử dựa trên mô hình để sinh các ca kiểm thử tự động
10


đạt được các độ bao phủ khác nhau. Do vậy, việc sử dụng những thay đổi này
làm tăng lên cả về số lượng và chất lượng của các bộ kiểm thử. Như vậy, việc
sử dụng quy trình kiểm thử dựa trên mô hình có thể tự động một phần hoặc
toàn bộ giúp giảm bớt công sức trong giai đoạn kiểm thử, tăng lên về số lượng
của các ca kiểm thử sinh ra và nâng cao chất lượng phần mềm. Trong thực tiễn,
các kiểm thử viên thường thực hiện công việc của mình bằng các phương pháp
truyền thống (thủ công) nên thời gian và chi phí dành cho các hoạt động này
thường rất cao. Kiểm thử dựa trên mô hình là một giải pháp hiệu quả nhằm
góp phần giải quyết vấn đề này. Sau đây là tóm tắt những ưu điểm của kiểm
thử dựa trên mô hình:
❼ Khả năng dò tìm lỗi: mục đích chính của quá trình kiểm thử là tìm lỗi

trong các hệ thống phần mềm. Trong thực tiễn áp dụng của các công ty
IBM và BMW thì kiểm thử dựa trên mô hình luôn luôn dò tìm lỗi lớn hơn

hoặc bằng số lượng lỗi tìm được so với tiến trình thủ công [32]. Trong ứng
dụng của Microsoft, số lượng các lỗi dò tìm được của kiểm thử dựa trên mô
hình gấp mười lần [92, 103]. Khả năng dò tìm lỗi vẫn phụ thuộc vào kinh
nghiệm, kỹ năng của người kiểm thử viên trong khi xây dựng mô hình và
chọn các tiêu chuẩn bao phủ kiểm thử khi sinh các ca kiểm thử.
❼ Giảm chi phí và thời gian: do quá trình kiểm thử hầu hết được thực hiện

tự động nên tính hiệu quả của phương pháp này cao trong khi thời gian
được giảm một cách tối thiểu.
❼ Độ bao phủ tốt hơn: nếu mô hình của hệ thống được xây dựng tốt thì quá

trình kiểm thử dựa trên mô hình sinh ra nhiều ca kiểm thử và phát hiện
nhiều lỗi. Kiểm thử mô hình cũng cho phép giảm các lỗi chủ quan do người
kiểm thử sinh ra trong quá trình kiểm thử sản phẩm.
❼ Đầy đủ tài liệu: mô hình hệ thống, các đường đi, các ca kiểm thử, v.v. là

các tài liệu quan trọng trong quá trình phát triển phần mềm nói chung và
quá trình kiểm thử phần mềm nói riêng. Các tài liệu này cũng giúp cho
các kiểm thử viên hiểu hơn về các ca kiểm thử và các kịch bản kiểm thử.
❼ Tự động tạo và kiểm tra tránh các ca kiểm thử trùng nhau hoặc không

hữu hiệu; có khả năng đánh giá chất lượng phần mềm.
11


×