Tải bản đầy đủ (.docx) (56 trang)

Áp dụng kĩ thuật khai phá dữ liệu cho phân lớp các ca kiểm thử phần mềm

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.41 MB, 56 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
---------------------------------------

LÊ LÊ NA

ÁP DỤNG KĨ THUẬT KHAI PHÁ DỮ LIỆU CHO PHÂN LỚP CÁC
CA KIỂM THỬ PHẦN MỀM

LUẬN VĂN THẠC SĨ KỸ THUẬT
(Theo định hướng ứng dụng)

HÀ NỘI - 2019


HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
---------------------------------------

LÊ LÊ NA

ÁP DỤNG KĨ THUẬT KHAI PHÁ DỮ LIỆU CHO PHÂN LỚP CÁC CA
KIỂM THỬ PHẦN MỀM

Chuyên ngành: Hệ thống thông tin
Mã số: 8.48.01.04

NGƯỜI HƯỚNG DẪN KHOA HỌC : PGS.TS TRẦN ĐÌNH QUẾ

HÀ NỘI - 2019


i



LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi.
Các số liệu, kết quả trong luận văn là trung thực và chưa từng được ai công
bố trong bất kỳ nghiên cứu nào khác.
Hà Nội, ngày tháng
Tác giả luận văn

Lê Lê Na

năm


ii

LỜI CẢM ƠN
Để có thể hoàn thành luận văn thạc sĩ một cách hoàn chỉnh, bên cạnh sự nỗ
lực của bản thân thì phần quan trọng là sự hướng dẫn hỗ trợ nhiệt tình của quý Thầy
Cô cũng như sự ủng hộ động viên tinh thần của gia đình bạn bè, đồng nghiệp trong
suốt thời gian học tập nghiên cứu và thực hiện luận văn thạc sĩ.
Tôi xin trân trọng bày tỏ lòng biết ơn sâu sắc tới PGS.TS Trần Đình Quế,
người đã hết lòng giúp đỡ và tạo mọi điều kiện tốt nhất cho tôi hoàn thành luận văn
này. Xin chân thành bày tỏ lòng biết ơn đến toàn thể quý Thầy Cô trong Khoa Công
nghệ thông tin và Khoa Sau đại học Học viện Công nghệ Bưu chính Viễn thông đã
tận tình truyền đạt những kiến thức quý báu cũng như tạo mọi điều kiện thuận lợi
nhất cho tôi trong suốt quá trình học tập nghiên cứu và cho đến khi thực hiện đề tài
luận văn.
Tôi xin chân thành cảm ơn các đồng nghiệp công ty đã tạo điều kiện để tôi
được tiến hành nghiên cứu, cung cấp các thông tin đầy đủ và trung thực cho nghiên
cứu này, luôn tạo điều kiện, quan tâm và động viên tôi hoàn thành luận văn.

Cuối cùng, tôi xin chân thành cảm ơn đến gia đình, các anh chị và các bạn
đồng nghiệp đã hỗ trợ cho tôi rất nhiều trong suốt quá trình học tập, nghiên cứu và
thực hiện đề tài luận văn thạc sĩ một cách hoàn chỉnh.
Hà Nội, ngày

tháng

Tác giả luận văn

Lê Lê Na

năm


iii

MỤC LỤC
LỜI CAM ĐOAN...................................................................................................... i
LỜI CẢM ƠN........................................................................................................... ii
DANH MỤC BẢNG................................................................................................. v
DANH MỤC HÌNH VÀ BIỂU ĐỒ.......................................................................... vi
MỞ ĐẦU................................................................................................................... 1
CHƯƠNG 1: KHAI PHÁ DỮ LIỆU VÀ BÀI TOÁN PHÂN LỚP CÁC CA KIỂM
THỬ.......................................................................................................................... 3
1.1 Khai phá dữ liệu............................................................................................... 3
1.1.1 Tại sao lại cần khai phá dữ liệu.................................................................. 3
1.1.2 Khái niệm.................................................................................................. 3
1.1.3 Quá trình khai phá dữ liệu:........................................................................ 4
1.1.4 Các bài toán thông dụng trong Khai phá dữ liệu:....................................... 5
1.2 Kỹ thuật kiểm thử phần mềm........................................................................... 6

1.2.1 Một số phương thức thiết kế kiểm thử....................................................... 6
1.2.2 Ví dụ thử nghiệm....................................................................................... 7
1.3 Kết luận............................................................................................................... 9
CHƯƠNG 2: PHÂN LỚP DỮ LIỆU DỰA TRÊN NAIVE BAYES VÀ CÂY
QUYẾT ĐỊNH J48.................................................................................................. 10
2.1 Kỹ thuật Naive Bayes cho phân lớp dữ liệu................................................... 10
2.1.1 Một số khái niệm cơ bản.......................................................................... 10
2.1.2 Kỹ thuật Naïve Bayes.............................................................................. 11
2.1.3 Phân lớp dữ liệu với Naïve Bayes............................................................ 13
2.2 Kỹ thuật cây quyết định J48........................................................................... 15
2.2.1 Cây quyết định......................................................................................... 15
2.2.2 Thuật toán ID3:........................................................................................ 17
2.2.4 Phân lớp dữ liệu dựa trên J48.................................................................. 19
2.3 Kết luận.......................................................................................................... 20
CHƯƠNG 3: PHÂN LOẠI CÁC CA KIỂM THỬ, THỬ NGHIỆM VÀ ĐÁNH GIÁ
21


iv

3.1Phát biểu bài toán ..........................................................

3.2Xây dựng dữ liệu ...........................................................

3.2.1Giới thiệu về file arff: ...

3.2.2Xây dựng ứng dụng ......

3.2.3Sinh các ca kiểm thử ....
3.2.4Xây dựng bộ dữ liệu và


3.3Thống kê dữ liệu ...........................................................

3.4Thử nghiệm và đánh giá ................................................

3.4.1Sử dụng Weka để phân l

3.4.2Sử dụng thuật toán Naïv

3.4.3Sử dụng thuật toán J48 .

3.5Đánh giá, so sánh ..........................................................

3.6Kết luận .........................................................................
KẾT LUẬN ...............................................................................................................
TÀI LIỆU THAM KHẢO .........................................................................................


v

DANH MỤC BẢNG
Bảng 1.1: Các ca kiểm thử phủ cấp 2........................................................................ 9
Bảng 3.1: Tổng quan ứng dụng máy tính bỏ túi...................................................... 22
Bảng 3.2: Hoạt động của từng hàm trong ứng dụng................................................ 23
Bảng 3.3: Luồng thực thi của ứng dụng.................................................................. 24
Bảng 3.4: Hướng dẫn sử dụng randoop................................................................... 25
Bảng 3.5 : Kết quả chạy Naïve Bayes với cross-validation.....................................32
Bảng 3.6 : Kết quả chạy Naïve Bayes với kỹ thuật Percentage Split.......................34
Bảng 3.7 : Kết quả J48 với cross validation............................................................ 36
Bảng 3.7: Kết quả J48 với Percentage split............................................................. 38

Bảng 3.8: So sánh Naïve Bayes và J48 với cross validation.................................... 39
Bảng 3.9: So sánh Naïve Bayes và J48 với percentage split.................................... 40


vi

DANH MỤC HÌNH VÀ BIỂU ĐỒ
Hình 1.1 Các bước của quá trình phát triển tri thức trong cơ cở dữ liệu....................3
Hình 2. 1: Naive Bayes trong bài toán phân lớp...................................................... 14
Hình 2. 2: Cây quyết định và luồng thực hiện......................................................... 16
Hình 2. 3: Ví dụ về bài toán phân lớp sử dụng cây quyết định J48.........................20
Hình 3.1: Mẫu file arff chuẩn dựa trên bộ dữ liệu iris............................................. 22
Hình 3.2: Thao tác với randoop bước 2................................................................... 25
Hình 3.3: Thao tác với randoop bước 3................................................................... 25
Hình 3.4: Kết quả chạy với randoop........................................................................ 25
Hình 3.5: Kết quả khi chạy Coverage với công cụ hỗ trợ là Eclemma....................26
Hình 3.6: Kết quả JaCoCo Metrics.......................................................................... 27
Hình 3.7: Bộ dữ liệu huấn luyện mẫu...................................................................... 27
Hình 3.9: Tiền xử lý dữ liệu bằng Weka.................................................................. 28
Hình 3.10: Các bước thực hiện đối với Weka.......................................................... 31
Hình 3.11: Kết quả thử nghiệm Naïve Bayes với n=5............................................. 31
Hình 3.12: Kết quả thử nghiệm Naïve Bayes với n=10........................................... 32
Hình 3.14: Kết quả chạy Naïve Bayes với tỷ lệ phân chia 50%..............................33
Hình 3.16: Kết quả chạy Naïve Bayes với tỷ lệ phân chia 75%..............................34
Hình 3.17: Kết quả chạy Naïve Bayes với tỷ lệ phân chia 80%..............................34
Hình 3.18: Kết quả J48 với n=5.............................................................................. 36
Hình 3.19: Kết quả J48 với n=10............................................................................ 36
Hình 3.21: Kết quả J48 với tỷ lệ phân chia 50%..................................................... 37
Hình 3.23: Kết quả J48 với tỷ lệ phân chia 75%..................................................... 38
Hình 3.24: Kết quả J48 với tỷ lệ phân chia 80%..................................................... 38



vii

Biểu đồ 3.1: Lược đồ Naïve Bayes với cross-validation.........................................33
Biểu đồ 3.2: Lược đồ Naïve Bayes với Percentage Split......................................... 35
Biểu đồ 3.3: Kết quả J48 với cross validation......................................................... 37
Biểu đồ 3.4: Kết quả J48 với Percentage split......................................................... 39
Biểu đồ 3.5: So sánh Naïve Bayes và J48 kỹ thuật Cross-validation.......................40
Biểu đồ 3.6: So sánh Naïve Bayes và J48 với Percentage Split............................... 41


1

MỞ ĐẦU
Cùng với sự phát triển mạnh mẽ của công nghệ thông tin, các sản phẩm phần
mềm sử dụng nguồn dữ liệu lớn xuất hiện không ngừng.
Kĩ thuật phần mềm là lĩnh vực nghiên cứu liên quan đến thiết kế, triển khai
và sửa đổi để xây dựng một phần mềm phù hợp và duy trì lâu dài. Kiểm thử là một
trong những giai đoạn chính trong quy trình phát triển phần mềm, là một trong
những giai đoạn không thể thiếu trong vòng đời phát triển phần mềm. Kiểm thử
thường tiến hành trên quy mô lớn để tìm ra lỗi trong phần mềm và cũng là để kiểm
tra các kết quả thực tế của phần mềm đúng với mong muốn thiết kế hay không. Điều
này đòi hỏi phải xây dựng các trường hợp thử nghiệm mà khai thác hết tất cả các
trường hợp có thể của phần mềm. Sẽ là rất rủi ro và phức tạp nếu tất cả các trường
hợp thử nghiệm đều được thực hiện bằng tay bởi vậy việc tạo mô hình thử nghiệm
tự động đã ra đời nơi mà các trường hợp thử nghiệm được xây dựng một cách tự
động. Nhưng vấn đề với các tiếp cận trên là nếu phần mềm được xây dựng trên hàng
ngàn dòng mã thì việc thực hiện tất cả các trường hợp thử nghiệm sẽ mất rất nhiều
thời gian có thể mất vài ngày để hoàn thành.

Khai phá dữ liệu đã và đang được nghiên cứu, ứng dụng trong nhiều lĩnh vực
khác nhau ở các nước trên thế giới. Trong kiểm thử phần mềm, khai phá dữ liệu
cũng đã trở nên vô cùng phổ biến, giúp phân tích và khai thác dữ liệu, chia nhỏ các
vùng thử nghiệm từ đó giúp tiết kiệm thời gian cũng như tăng độ chính xác của từng
trường hợp thử nghiệm. Xác định các ca kiểm thử, phân loại và giản lược các ca
kiểm thử là những vấn đề đã được nhiều quan tâm nghiên cứu ([1],[2],[3],[4],[5]...
[15]) Với mục đích đưa những tiến bộ công nghệ phục vụ cho công việc hằng ngày,
luận văn đã chọn đề tài tìm hiểu "Áp dụng kĩ thuật khai phá dữ liệu cho phân lớp
các ca kiểm thử phần mềm" .
Trong phạm vi luận văn sẽ trình bày về cách xử lý bài toán khi kiểm thử
chương trình của một máy tính bỏ túi sử dụng các phép toán cộng, trừ, nhân, chia....
mặc dù khá đơn giản nhưng các trường hợp kiểm thử đặt ra cũng vô cùng phức tạp
và số lượng testcases là khá nhiều. Luận văn tập trung áp dụng thuật toán Naive


2

Bayes, thuật toán cây quyết định J48 để phân tích các ca kiểm thử nhằm tối giản để
tránh mất quá nhiều thời gian, tăng hiệu quả làm việc cũng như chất lượng phần
mềm.
Ngoài phần mở đầu và kết luận, luận văn bao gồm 3 chương chính:
Chương 1: Khai phá dữ liệu và bài toán phân lớp các ca kiểm thử
Chương này trình bày chung về khái niệm khai phá dữ liệu và một số ý về
bài toán phân lớp. Giới thiệu một số ví dụ về các trường hợp kiểm thử và độ bao
quát của từng trường hợp kiểm thử.
Chương 2: Phân lớp dữ liệu dựa trên Naive Bayes và cây quyết định J48
Chương này sẽ đi vào tìm hiểu một số thuật toán về phân lớp, cụ thể trong
luận văn áp dụng thuật toán Naive Bayes và cây quyết định J48.
Chương 3: Phân loại các ca kiểm thử, thử nghiệm và đánh giá
Chương này đi sâu phân tích dữ liệu và áp dụng dữ liệu thực tế vào Weka, áp

dụng thuật toán với dữ liệu cụ thể. Từ đó phân tích và đánh giá kết quả thu được.


3

CHƯƠNG 1: KHAI PHÁ DỮ LIỆU VÀ BÀI TOÁN PHÂN
LỚP CÁC CA KIỂM THỬ
1.1 Khai phá dữ liệu
1.1.1 Tại sao lại cần khai phá dữ liệu
Với sự bùng nổ thông tin trong những thập kỷ gần đây thì lượng thông tin
ngày càng trở nên khổng lồ. Làm thế nào để khai thác được “kho” thông tin đó đang
là một câu hỏi cần thiết được đặt ra.
Khai phá dữ liệu (Data Mining) ra đời như là một hướng giải quyết hữu hiệu
câu hỏi trên. Có khá nhiều định nghĩa về Data Mining như là một công nghệ tri thức
giúp khai thác những thông tin hữu ích từ những kho dữ liệu được tích trữ trong
suốt quá trình hoạt động của một công ty, tổ chức nào đó.

1.1.2 Khái niệm
Khai phá dữ liệu (Data Mining) là một quá trình chắt lọc hay khai phá tri
thức từ một lượng dữ liệu lớn.
Theo Frawley, Piatetski-Shapiro và Matheus Khai phá là một bước trong quá
trình phát triển tri thức trong cơ sở dữ liệu. thi hành một thuật toán khai phá dữ liệu
để tìm ra các mẫu từ dữ liệu.

Hình 1.1 Các bước của quá trình phát triển tri thức trong cơ cở dữ liệu


4

Khai phá dữ liệu là bước thứ 5 trong 7 bước của quá trình phát triển tri thức

trong cơ cở dữ liệu

1.1.3 Quá trình khai phá dữ liệu:


Tìm hiểu dữ liệu:
Nhà tư vấn nghiên cứu kiến thức về lĩnh vực áp dụng, bao gồm các tri

thức cấu trúc về hệ thống, các nguồn dữ liệu hiện hữu, ý nghĩa, vai trò và tầm quan
trọng của các thực thể dữ liệu.


Chuẩn bị dữ liệu:

Giai đoạn này sử dụng các kỹ thuật tiền xử lý bao gồm để biến đổi và cải
thiện chất lượng dữ liệu để thích hợp với các yêu cầu của các giải thuật học.
Các giải thuật tiền xử lý bao gồm:
-

Xử lý dữ liệu bị thiếu, mất. Các dữ liệu bị thiếu sẽ được thay thế bởi

các giá trị thích hợp.
-

Khử sự trùng lặp: Các đối tượng dữ liệu trùng lặp sẽ bị loại bỏ. Kỹ

thuật này không được sử dụng cho các tác vụ có quan tâm đến phân bổ dữ liệu.
-

Giảm nhiễu: nhiễu và các đối tượng tách rời khỏi phân bố chung sẽ bị


loại ra khỏi dữ liệu.
-

Chuẩn hóa: Miền giá trị của dữ liệu sẽ được chuẩn hóa.

-

Rời rạc hóa: Các dữ liệu số sẽ được biến đổi ra các giá trị rời rạc.

-

Rút trích và xây dựng đặc trưng mới từ các thuộc tính đã có.

-

Giảm chiều: các thuộc tính chứa ít thông tin sẽ bị loại bỏ bớt.



Mô hình hóa dữ liệu:

Các giải thuật học sử dụng các dữ liệu đã được tiền xử lý trong giai đoạn hai
để tìm kiếm các quy tắc ẩn và chưa biết.


Hậu xử lý và đánh giá mô hình:

-


Dựa trên đánh giá của người dùng sau khi kiểm tra trên các tập thử

các mô hình sẽ được tinh chỉnh và kết hợp lại nếu cần. Chỉ các mô hình đạt được
các yêu cầu cơ bản của người dùng mới đưa ra triển khai trong thực tế.


5

-

Trong giai đoạn này, các kết quả được biến đổi từ dạng học thuật sang

dạng phù hợp với môi trường nghiệp vụ và dễ hiểu hơn cho người dùng.


Triển khai tri thức

-

Các mô hình được đưa vào hệ thống thông tin thực tế dưới dạng các

modun hỗ trợ việc đưa ra quyết định
-

Mối quan hệ chặt chẽ giữa các giai đoạn trong quá trình khai phá dữ

liệu là rất quan trọng cho việc nghiên cứu trong khai phá dữ liệu. Một giải thuật
trong khai phá dữ liệu không thể được phát triển độc lập, không quan tâm đến bối
cảnh áp dụng mà thường được xây dựng để giải quyết một mục tiêu cụ thể.
-


Quá trình này có thể được lặp lại nhiều lần một hay nhiều giai đoạn

dựa trên phản hồi từ kết quả của các giai đoạn sau.

1.1.4 Các bài toán thông dụng trong Khai phá dữ liệu:


Phân lớp (Classification): Với 1 tập dữ liệu huấn luyện cho trước và

sự huấn luyện của con người, các giải thuật sẽ học ra bộ phân loại (classiffier) dùng
để phân loại các dữ liệu mới vào trong những lớp đã được xác định trước.
Giới thiệu một số thuật toán phân lớp điển hình:
-

Support Vector Machine (SVM)

-

Thuật toán Bayes

-

Cây quyết định



Dự đoán (Prediction): sẽ học ra các bộ dự đoán. Khi có dữ liệu mới

đến, bộ dự đoán sẽ dựa trên thông tin đang có để đưa ra một giá trị số học cho hàm

cần dự đoán.


Tìm luật liên kết (Association Rule): tìm kiếm các mối liên kết giữa

các thành phần từ dữ liệu.


Phân cụm (Clustering) sẽ nhóm các đối tượng dữ liệu có tính chất

giống nhau vào cùng một nhóm.


6

1.2 Kỹ thuật kiểm thử phần mềm
1.2.1 Một số phương thức thiết kế kiểm thử
Quá trình phát triển một hệ thống phần mềm bao gồm một chuỗi các hoạt
động sản sinh ra mã lệnh, tài liệu, nơi mà những sai sót của con người có thể xẩy ra
bất cứ lúc nào. Một lỗi có thể xuất hiện ngay từ lúc bắt đầu những dòng code đầu
tiên, do đó quá trình phát triển một phần mềm phải kết hợp với một quá trình kiểm
thử.
Hiện tại phát triển rất nhiều các phương thức thiết kế các trường hợp kiểm
thử cho phần mềm. Những phương pháp này đều cung cấp một hướng kiểm thử có
tính hệ thống. Quan trọng hơn nữa là chúng cung cấp một hệ thống có thể đảm bảo
sự hoàn chỉnh của các trường hợp kiểm thử phát hiện lỗi cho phần mềm.
Một sản phẩm đều có thể kiểm thử theo hai cách:


Hiểu rõ một chức năng cụ thể của một hàm hay một module. Các


trường hợp kiểm thử có thể được xây dựng để kiểm thử tất cả các thao tác đó.


Hiểu rõ cách hoạt động của một hàm/module hay sản phẩm. Các

trường hợp kiểm thử có thể được xây dựng để đảm bảo tất cả các thành phần con
khớp với nhau. Đó là tất cả các thao tác nội bộ của hàm dựa vào các mô tả và tất cả
các thành phần nội bộ đã được kiểm thử một cách thỏa đáng.
Cách tiếp cận đầu tiên gọi là kiểm thử hộp đen (Black-box testing) và cách
tiếp cận thứ hai gọi là kiểm thử hộp trắng (White-box testing). Trong luận văn này
tôi sẽ đề cập đến cách kiểm thử với hướng tiếp cận thứ 2 kiểm thử hộp trắng.
Đặc điểm của kiểm thử hộp trắng là dựa vào các giải thuật cụ thể, vào cấu
trúc dữ liệu bên trong của đơn vị phần mềm cần kiểm thử để xác định đơn vị phần
mềm đó có được thực hiện đúng không. Kỹ thuật kiểm thử này thường mất rất nhiều
thời gian và công sức nếu mức độ kiểm thử được nâng cao lên ở cấp kiểm thử tích
hợp hay kiểm thử hệ thống.
Thông thường sau khi code xong một vài chức năng thì chúng ta sử dụng các
công cụ như Junit testing để kiểm thử cho ứng dụng.
Có 2 hoạt động kiểm thử hộp trắng:


7

-

Kiểm thử luồng điều khiển : tập trung kiểm thử giải thuật chức năng.

-


Kiểm thử dòng dữ liệu : tập trung kiểm thử đời sống của từng biến dữ

liệu được dùng trong giải thuật.
Trong kiểm thử hộp trắng có rất nhiều phương pháp được đưa ra nhưng trong
luận văn này tôi xin giới thiệu về phương pháp phổ biến thường được sử dụng nhiều
nhất là phương pháp kiểm thử đường thi hành (Execution Path).
Kiểm thử đường thi hành là 1 kịch bản thi hành đơn vị phần mềm tương ứng,
cụ thể nó là danh sách có thứ tự các lệnh được thi hành ứng với 1 lần chạy cụ thể
của đơn vị phần mềm, bắt đầu từ điểm nhập của đơn vị phần mềm đến điểm kết thúc
của đơn vị phần mềm.

1.2.2 Ví dụ thử nghiệm
Mỗi TPPM có từ 1 đến n (có thể rất lớn) đường thi hành khác nhau. Mục tiêu
của phương pháp kiểm thử luồng điều khiển là đảm bảo mọi đường thi hành của
đơn vị phần mềm cần kiểm thử đều chạy đúng. Rất tiếc trong thực tế, công sức và
thời gian để đạt mục tiêu trên đây là rất lớn, ngay cả trên những đơn vị phần mềm
nhỏ. Thí dụ đoạn code sau :
for (i=1; i<=1000; i++)
for (j=1; j<=1000; j++)
for (k=1; k<=1000; k++)
doSomethingWith(i,j,k);
chỉ có 1 đường thi hành, nhưng rất dài : dài 1000*1000*1000 = 1 tỉ lệnh gọi
hàm doSomething(i,j,k) khác nhau.
Mà cho dù có kiểm thử hết được toàn bộ các đường thi hành thì vẫn không
thể phát hiện những đường thi hành cần có nhưng không (chưa) được hiện thực. Do
đó, ta nên kiểm thử 1 số test case tối thiểu mà kết quả độ tin cậy tối đa. Nhưng làm
sao xác định được số test case tối thiểu nào có thể đem lại kết quả có độ tin cậy tối
đa ?



8

Phủ kiểm thử (Coverage) : là tỉ lệ các thành phần thực sự được kiểm thử so
với tổng thể sau khi đã kiểm thử các test case được chọn. Phủ càng lớn thì độ tin cậy
càng cao. Thành phần liên quan có thể là lệnh thực thi, điểm quyết định, điều kiện
con hay là sự kết hợp của chúng.
Phủ cấp 0 : kiểm thử những gì có thể kiểm thử được, phần còn lại để người
dùng phát hiện và báo lại sau. Đây là mức độ kiểm thử không thực sự có trách
nhiệm.
Phủ cấp 1 : kiểm thử sao cho mỗi lệnh được thực thi ít nhất 1 lần. Phân tích
hàm foo sau đây :
1 float foo(int a, int b, int c, int d) {
2

float e;

3

if (a==0)
return 0;

4
5

int x = 0;

6

if ((a==b) || ((c==d) && bug(a)))
x = 1;


7
8

e = 1/x;

9

return e;

10}
Với hàm foo trên, ta chỉ cần 2 test case sau đây là đạt 100% phủ cấp 1 :
1. foo(0,0,0,0), trả về 0
2. foo(1,1,1,1), trả về 1

nhưng không phát hiện lỗi chia 0 ở hàng lệnh 8.
Phủ cấp 2 : kiểm thử sao cho mỗi điểm quyết định luận lý đều được thực hiện
ít nhất 1 lần cho trường hợp TRUE lẫn FALSE. Ta gọi mức kiểm thử này là phủ các
nhánh (Branch coverage). Phủ các nhánh đảm bảo phủ các lệnh.


9

Predicate
ine
(a == 0)
((a==b)
OR
((c == d)
AND bug(a) ))

Bảng 1.1: Các ca kiểm thử phủ cấp 2
Với 2 test case xác định trong slide trước, ta chỉ đạt được 3/4 = 75% phủ các
nhánh. Nếu thêm test case 3 :
3. foo(1,2,1,2), thì mới đạt 100% phủ các nhánh.

1.3 Kết luận
Có rất nhiều kỹ thuật khai phá dữ liệu đã được áp dụng nhằm xử lý kho dữ
liệu trong phát triển phần mềm. Trong chương 1 đã đề cập đến những bước quan
trọng diễn ra trong quá trình khai phá dữ liệu như chuẩn bị dữ liệu, mô hình hóa dữ
liệu, xử lý và đánh giá, cuối cùng là triển khai áp dụng thực tế. Trong chương này
cũng đã đề cập đến một số phương pháp cơ bản để thực hiện kiểm thử phần mềm
cũng như phân tích đặc điểm, hiệu quả, phạm vi áp dụng của từng phương pháp. Kỹ
thuật khai phá dữ liệu được chọn áp dụng trong luận văn là kỹ thuật phân lớp dữ
liệu và phương pháp kiểm thử được chọn là phương pháp kiểm thử hộp trắng. Cụ
thể hơn là phương pháp kiểm thử đường thi hành hay còn gọi là kiểm thử luồng điều
khiển.


10

CHƯƠNG 2: PHÂN LỚP DỮ LIỆU DỰA TRÊN NAIVE
BAYES VÀ CÂY QUYẾT ĐỊNH J48
Trong chương này, luận văn sẽ nêu lên hai thuật toán chính sử dụng trong
luận văn đó là Naïve Bayes và J48. Nội dung chính của chương bao gồm khái niệm,
thuật toán và áp dụng vào bài toán phân lớp dữ liệu nói chung.

2.1 Kỹ thuật Naive Bayes cho phân lớp dữ liệu
2.1.1 Một số khái niệm cơ bản
Định lý Bayes cho phép tính xác xuất xảy ra của sự kiện ngẫu nhiên A khi
biết sự kiện liên quan B đã xảy ra. Xác suất này được ký hiệu là ( | ), đọc là “xác

suất của nếu có ”. Đại lượng này được gọi là xác suất có điều kiện hay xác suất
hậu nghiệm vì nó được rút ra từ giá trị được cho của . Theo định lý Bayes, xác suất
xảy ra khi biết sẽ phụ thuộc vào 3 yếu tố sau:

Xác suất xảy ra mà không quan tâm đến . Ký hiệu là ( ) và đọc là xác suất của . Đây
còn được gọi là xác suất tiên nghiệm – nghĩa là nó không quan tâm đến bất kỳ thông tin nào của (prior).

Xác suất xảy ra mà không quan tâm đến . Ký hiệu là ( ) và đọc là xác suất của B.
Đại lượng này là hằng số chuẩn hóa, vì nó không phụ thuộc vào sự kiện đang muốn biết (evidence).
đã xảy ra.



Xác suất xảy ra khi biết xảy ra. Ký hiệu ( | ) và đọc là xác suất của nếu có . Đại lượng này là khả năng xảy ra khi biết



Xác suất có điều kiện mà xảy ra khi đã biết . Ký hiệu ( | ). Xác suất này còn được gọi là xác suất sau (likelihood).

Khi biết ba đại lượng kể trên. Xác suất của khi biết được cho bởi công
thức: (Công thức định lý Bayes) (posterior).
(|)=

(|) ( )=





( )

Bài toán thực tế trong học máy sử dụng định lý Bayes: Vấn đề cần làm là tìm
hiểu mô hình của chúng ta từ một tập hợp các thuộc tính nhất định (dựa vào tập dữ


11

liệu đặc trưng đã quan sát được), mỗi bộ dữ liệu lại có một biến đại diện cho tập dữ
liệu đó. Sử dụng định lý Bayes để xây dựng xác suất của biến dữ đoán đáp ứng
được bộ dữ liệu ban đầu và đưa ra tập các thuộc tính mới.
Giả thiết cho rằng số thuộc tính là , số giá trị nó có thể có là 2 (đú
ℎ ặ
). Để huấn luyện phân
loại và áp dụng định lý Bayes, ta cần tính toán ( | ), theo đó số lượng phép tính cần tính là xấp xỉ 2 ∗ (2 − 1)
các tham số cho mô hình này. Có thể nhận thấy con số trên là một vấn đề khá lớn trong những bài toán có nhiều
thuộc tính. Để giải quyết bài toán này, ta sẽ cần áp dụng thuật toán Naïve Bayes.

Naive Bayes được nghiên cứu rộng rãi từ những năm 1950, ứng dụng và đưa
vào thực tế những năm 1960.
Naive Bayes được xây dựng dựa trên định lý Bayes về lý thuyết xác suất để
đưa ra các dự đoán cũng như phân loại dữ liệu dựa trên các dữ liệu quan sát được.
Hiện nay thuật toán dược áp dụng nhiều trong lĩnh vực học máy dùng để đưa ra các
dự đoán dựa trên tập dữ liệu thu thập được. Nó thuộc bài toán học dựa trên mẫu có
trước.
Có một số giả định được thực hiện trong Naïve Bayes. Ngay cả khi những
giả định này bị vi phạm một chút thì nó vẫn hoạt động rất tốt. Giả định đầu tiên
cũng được coi là khá quan trọng khi thực thi Naïve Bayes là tất cả các biến ngẫu
nhiên đầu vào phải độc lập với nhau và được lấy từ một phân phối tương tự nhau.
Giả định thứ hai là tất cả những biến ngẫu nhiên kể trên đều có điều kiện độc lập.
Trên thực tế, đối với các mô hình xác suất khác nhau mà có những phương
pháp phân loại dựa trên Naïve Bayes khác nhau để có kết quả tốt nhất. Thực tế cho

thấy, một báo cáo năm 2006 đưa ra rằng phân loại Bayes vượt trội hơn so với các
phương pháp khác như cây (trees) hoặc rừng ngẫu nhiên (random forests).

2.1.2 Kỹ thuật Naïve Bayes
Naïve Bayes là kỹ thuật phân loại phổ biến trong học máy có giám sát. Ý
tưởng chính của kỹ thuật này dựa vào xác suất có điều kiện giữa từ hay cụm từ và
nhãn phân loại để dự đoán văn bản mới cần phần loại thuộc lớp nào. Naïve Bayes


12

được ứng dụng nhiều trong giải quyết các bài toán phân loại văn bản [6]; xây dựng
bộ lọc thư rác tự động [7],[8]; hay trong bài toán khai phá quan điểm [9],[10] bởi
tính dễ hiểu, đễ triển khai cũng như độ chính xác tốt.
Ý tưởng cơ bản của cách tiếp cận Naïve Bayes là sử dụng xác suất có điều

kiện giữa các đặc trưng và nhãn để dự đoán xác suất nhãn của một văn bản cần phân
loại. Điểm quan trọng của phương pháp này chính là ở chỗ giả định rằng sự xuất
hiện của tất cả các đặc trưng trong văn bản đều độc lập với nhau. Giả định đó làm
cho việc tính toán Naïve Bayes hiệu quả và nhanh chóng hơn các phương pháp khác
vì không sử dụng việc kết hợp các đặc trưng để đưa ra phán đoán nhãn. Kết quả dự
đoán bị ảnh hưởng bởi kích thước tập dữ liệu, chất lượng của không gian đặc
trưng…
Thuật toán Naïve Bayes dựa trên định lý Bayes được phát biểu như sau:
(

(

|)=


) ( | )

( )

Áp dụng trong bài toán phân loại, các dữ kiện gồm có:
D:

tập dữ liệu huấn luyện đã được vec-tơ hóa dưới dạng ⃗ = (

1, 2,

…, )

Ci: phân loại i, với i = {1,2,…,m}.
Các thuộc tính độc lập điều kiện đôi một với nhau.
Theo định lý Bayes:
( |)=

( | ) ( )

( )

Theo tính chất độc lập điều kiện:
(|)=∏(

Trong đó:
( | ) là xác suất thuộc phân loại i khi biết trước mẫu X.

( ) xác suất là phân loại i.


( | ) xác suất thuộc tính thứ k mang giá trị xk khi đã biết X thuộc phân

loại i.

=1

|)


13

Thuật toán Naïve Bayes:
Bộ dữ liệu đã huấn luyện

Input :

Dữ liệu đầu vào ví dụ ở bài toán này là một ca kiểm thử
(testcase)
Output :

Nhãn phân loại của ca kiểm thử đầu vào

Bước 1: Huấn luyện Naïve Bayes (dựa vào tập dữ liệu), tính ( ) và ( | )

X

new

Bước 2: Phân loại = ( 1, 2, … , ), ta cần tính xác suất thuộc từng phân loại khi đã biết trước X new.
được gán vào lớp có xác suất lớn nhất theo công thức

max
( ( )∏ (


| ))

=1

2.1.3 Phân lớp dữ liệu với Naïve Bayes
Khi áp dụng thuật toán Naïve Bayes vào bài toán phân lớp thực tế, để ước
tính các tham số phù hợp với phân phối của đối tượng cần phân lớp mười ta sẽ phải
giả định những phân phối các tính năng và được gọi là mô hình sự kiện của bài toán
phân lớp dữ liệu với Naïve Bayes. Tùy thuộc bộ dữ liệu đầu vào để sử dụng những
phân phối phù hợp nhất.


14

Hình 2. 1: Naive Bayes trong bài toán phân lớp
-

Gaussian Naïve Bayes:

Mô hình này sử dụng phân phối chuẩn Gaussian, được áp dụng chủ yếu trong
bài toán có dữ liệu là các biến liên tục.
Với mỗi chiều dữ liệu và một phân lớp , tuân theo một phân phối chuẩn (phân phối Gaussian) có kỳ vọng và phương sai 2 :
2
(|) =(| , )=

-


Multinomoal Naïve Bayes:

Mô hình này chủ yếu được sử dụng trong bài toán phân loại văn bản mà các
vector tính năng (features) được biểu diễn bởi một vector có cùng độ dài , các vector
này là tập từ điển của văn bản. Giá trị của phần tử thứ trong mỗi vector chính là số
lần từ thứ xuất hiện trong văn bản đó.
Khi đó, giá trị ( | ) được tính bằng công thức sau:

( |)=


15

Trong đó:


là tổng số lần từ thứ xuất hiện trong các văn bản của phân lớp

thứ , nó được tính là tổng các thành phần thứ của các vector tính năng ứng với phân
lớp .


là tổng số từ (kể cả lặp) xuất hiện trong phân lớp thứ . Nói cách

khác, nó bằng tổng độ dài của toàn bộ các văn bản thuộc phân lớp .
Hạn chế của phương pháp này là nếu có một từ mới chưa bao giờ xuất hiện
trong phân lớp thì biểu thức kể trên sẽ có giá trị bằng 0, điều này dẫn đến kết quả
của bài toán không còn chính xác nữa.
sau:


Bernoulli Naïve Bayes:

Mô hình này được áp dụng cho các loại dữ liệu mà mỗi thành phần là một giá trị 0 hoặc 1. Khi đó, ( | ) được tính bằng công thức

Với

( | )=

(| ) (1− (| )1− )

( | ) là xác suất từ thứ xuất hiện trong phân lớp thứ .

2.2 Kỹ thuật cây quyết định J48
2.2.1 Cây quyết định
Học bằng cây quyết định là một phương pháp thông dụng trong khai phá dữ
liệu. Khi đó, cây quyết định mô tả một cấu trúc cây. Trong đó, các lá đại diện cho
các phân loại còn cành đại diện cho các kết hợp của các thuộc tính dẫn tới phân loại
đó. Một cây quyết định có thể được học bằng cách chia tập hợp nguồn thành các tập
con dựa theo một kiểm tra giá trị thuộc tính. Quá trình này được lặp lại một cách đệ
quy cho mỗi tập con dẫn xuất. Quá trình đệ quy hoàn thành thì không thể tiếp tục
thực hiện việc chia tách được nữa.


16

Hình 2. 2: Cây quyết định và luồng thực hiện

Khi một phân loại đơn có thể được áp dụng cho từng phần tử của tập con dẫ
xuất. Một bộ phận loại rừng ngẫu nhiên (random forest) sử dụng một số cây quyết

định để có thể cải thiện tỷ lệ phân loại.
Cây quyết định có thể được mô tả như là sự kết hợp của các kỹ thuật toán
học và tính toán nhằm hỗ trợ việc mô tả, phân loại và tổng quát hóa một tập dữ liệu
cho trước.
Có rất nhiều thuật toán phân lớp như ID3, J48, C4.5, … Việc chọn thuật toán
nào để có hiệu quả phân lớp cao tùy thuộc vào rất nhiều yếu tố. Trong đó cấu trúc
dữ liệu ảnh hưởng lớn đến kết quả của thuật toán.
Ưu điểm của cây quyết định:
-

Dễ hiểu.

-

Việc chuẩn bị dữ liệu cho một cây quyết định là không cần thiết.

-

Có thể xử lý cả dữ liệu có giá trị bằng số và dữ liệu bằng chữ.

-

Cây quyết định là một mô hình hộp trắng, có thể quan sát một tình

huống cho trước trong mô hình, nên dễ dàng để giải thích, nhìn nhận và đánh giá.
-

Có thể thẩm định một mô hình bằng các kiểm tra thống kê.

-


Có thể xử lý một lượng dữ liệu trong một thời gian ngắn.

-

Khó giải quyết những vấn đề có dữ liệu phụ thuộc thời gian liên tục.

-

Dễ xảy ra lỗi khi có quá nhiều lớp chi phí tính toán để xây dựng mô

hình cây quyết định cao.


×