NGHIÊN CỨU MỘT SỐ KỸ THUẬT SINH TEST CASE TỐT TRONG KIỂM THỬ PHẦN MỀM - Pdf 48

1

ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
THÔNG TIN VÀ TRUYỀN THÔNG

BÁO CÁO TỔNG KẾT
ĐỀ TÀI KHOA HỌC VÀ CÔNG NGHỆ CẤP ĐẠI HỌC

NGHIÊN CỨU MỘT SỐ KỸ THUẬT SINH TEST CASE TỐT
TRONG KIỂM THỬ PHẦN MỀM
ĐH 2014-TN08-03

Chủ nhiệm đề tài: ThS. Tô Hữu Nguyên

THÁI NGUYÊN, THÁNG 9 NĂM 2017


2

ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
THÔNG TIN VÀ TRUYỀN THÔNG

BÁO CÁO TỔNG KẾT
ĐỀ TÀI KHOA HỌC VÀ CÔNG NGHỆ CẤP ĐẠI HỌC

NGHIÊN CỨU MỘT SỐ KỸ THUẬT SINH TEST CASE TỐT
TRONG KIỂM THỬ PHẦN MỀM
ĐH 2014-TN08-03


CNTT

2

Hà Thị Thanh

Thạc sĩ

Bộ Môn: Công nghệ
phần mềm - Khoa
CNTT

Nội dung công việc
tham gia thực hiện
trong đề tài
Nghiên cứu, đánh giá
tổng quan các kỹ thuật,
các công cụ sinh dữ liệu
kiểm thử tự động hiện
nay
Nghiên cứu về các thách
thức của kiểm thử phần
mềm, kỹ thuật thực thi
t

ng tr ng


4


3.1.2. Xây dựng lại ràng buộc ...................................................................................................47
3.1.3. Tiền xử lý ........................................................................................................................48
3.1.4. Sinh các ràng buộc xâu. ..................................................................................................49
3.2.Giải ràng buộc xâu dựa trên ph ơng pháp BitVector .........................................................53
3.3.Cài đặt và đanh giá kêt quả. ................................................................................................54
KẾT LUẬN VÀ KIẾN NGHỊ ................................................................................................57
TÀI LIỆU THAM KHẢO ......................................................................................................58


5

DANH MỤC HÌNH VẼ
Hình 1.1. Ph ơng thức kiểm thử trên VSUnit ................................................................ 5
Hình 1.2. Ph ơng thức LuhnAlgorithm .......................................................................... 7
Hình 1.3. Ph ơng thức test cho LuhnAlgorithm ............................................................. 7
Hình 2.1. Mô hình hoạt động của JPF............................................................................. 9
Hình 2.2. Sơ đồ trạng thái trong quá trình kiểm thử ..................................................... 10
Hình 2.3. Kiến trúc JPF mức cao .................................................................................. 12
Hình 2.4. Mẫu Listener ................................................................................................. 13
Hình 2.5. Cây thực thi t ng tr ng ............................................................................... 19
Hình 2.6. Thuật toán thực thi t ng tr ng động ........................................................... 21
Hình 2.7. Thực thi t

ng tr ng với ph ơng thức nhận đầu vào là đối t

ng ............... 24

Hình 2.8. Cây thực thi t ng tr ng đ c quản lý riêng ................................................ 27
Hình 2.9. Hệ thống kiểm thử tổng quát ......................................................................... 29
Hình 2.10. Gán giá trị t ng tr ng cho tham số đầu vào .............................................. 31

TRƯỜNG ĐHCNTT&TT

THÔNG TIN KẾT QUẢ NGHIÊN CỨU
1. Thông tin chung
- Tên đề tài: Nghiên cứu một số kỹ thuật sinh test case tốt trong kiểm thử phần mềm.
- Mã số: ĐH2014-TN08-03.
- Chủ nhiệm: ThS. Tô Hữu Nguyên.
- Tổ chức chủ trì: Tr ờng Đại học Công nghệ Thông tin & Truyền thông, Đại
học Thái Nguyên.
- Thời gian thực hiện: 1/2014-12/2015.(Gia hạn đến tháng 6 năm 2016)
2. Mục tiêu
- Nghiên cứu một số kỹ thuật sinh test case trong kiểm thử phần mềm và áp dụng
vào bài toán cụ thể.
- Nghiên cứu kỹ thuật thực thi t

ng tr ng từ đó làm cơ sở để sinh ra các Test

Case một cách hiệu quả để nâng cao chất l

ng phần mềm.

3. Tính mới và sáng tạo
- Đề xuất áp dụng ph ơng pháp kiểm thử thực thi t

ng tr ng áp dụng trong

kiểm thử units trong kiểm thử phần mềm.
- Xây dựng thuật toán sinh dữ liệu kiểm thử trên kiểu dữ liệu xâu, b ớc đầu đ a
ra một số cho ra đ


―Thực thi t

ng tr ng trong sinh tự động dữ liệu kiểm thử phần mềm‖, Tạp

chí khoa học Đà Lạt –Đại Học Đà Lạt, 6(2), tr. 254-273.
[2]. To Huu Nguyen, Tran Thi Ngan, Do Thanh Mai, Tran Manh Tuan (2016),
―A Novel Symbolic execution model in automated generation of test case‖,
International Journal of Innovative Technology and Exploring Engineering
(IJITEE) e-ISSN: 2395 -0056, 3(7), pp 145-155.
[3]. Tô Hữu Nguyên, Nguyễn Hồng Tân, Hà Thị Thanh (2016), ―Kỹ thuật mô
hình hóa ràng buộc hỗn h p và ph ơng pháp giải ràng buộc xâu trong thực thi
t

ng tr ng‖, Tạp chí Khoa học và Công nghệ, Đại học Thái Nguyên,

159(14), tr. 141-147
5.2. Sản phẩm đào tạo
[1]. Lê Thị Định, Nghiên cứu kỹ thuật thực thi tượng trưng trong sinh tự động
các Test case, Khóa luận tốt nghiệp Đại học năm 2016, Quyết định số 443/QĐ
ĐHCNTT&TT ngày 15 tháng 06 năm 2016
[2]. Đinh Trọng Tiến, Nghiên cứu áp dụng thực thi tượng trưng trong kiểm thử
Unit trên Junit cho ngôn ngữ Java, Khóa luận tốt nghiệp Đại học năm 2016,
Quyết định số 443/QĐ ĐHCNTT&TT ngày 15 tháng 06 năm 2016
[3]. Đề tài góp phần đào tạo trình độ tiến sĩ cho NCS Tô Hữu Nguyên với tên đề
tài, Kỹ thuật thực thi tượng trưng trong việc sinh tự động các test case, của chính


9

tác giả Tô Hữu Nguyên, Quyết định số 215/QĐ –CNTT-Viện CNT ngày 04

Các kết quả của đề tài có thể đ

c ứng dụng phục vụ mục đích giảng dạy,

học tập và nghiên cứu khoa học trong lĩnh vực chuyên môn kiểm thử phần mềm của
nhóm ngành CNTT, KTPM đang đ
này đ

c đào tạo tại tr ờng đại học CNTT&TT. Điều

c thể hiện bởi các sản phẩm của đề tài nh bài báo, báo cáo toàn văn của đề

tài.
6.3. Đối với xã hội
Kiểm thử phần mềm nói chung và sinh dữ liệu kiểm thử nói riêng đang là
vấn đề đ
đ

c các nhà nghiên cứu và các công ty phần mềm quan tâm. Giải quyết

c các vấn đề này sẽ nâng cao khả năng phát hiện những lỗi trong các sản phầm


10

phần mềm cũng nh khả năng rút ngắn thời gian, chi phí dành cho giai đoạn kiểm
thử.
6.4. Khả năng áp dụng và phương thức chuyển giao kết quả nghiên cứu
Ch ơng trình thực nghiệm có thể phát triển hoàn thiện, có khả năng áp sinh
dữ dữ liệu kiểm thử trên một số kiểu dữ liệu và đặc biệt là kiểu văn bản (trong kiểm

- Duration: from 1/2014 to 12/2015.( extends to 6 / 2017)
2. Objective(s)
- Studying some test-case generation techniques in software testing and applying
these techniques into typical problems.
- Studying symbolic execution technique and applying it effectively in test-case
generation in order to increase the quality of software.
3. Creativeness and innovativeness
- To manufacturing test method applies symbolic execution of unit testing in
software testing.
- Construction of data generation algorithm testing on the data type string,
initially given a number to produce a certain test case.
4. Research results
- Systematizing the basic knowledge about software testing and unit test.
- Improving some test-case generation techniques on string and mixed data.
- Publishing papers on National and International scientific journals.
5. Products
5.1. Scientific products:


12

[1]. To Huu Nguyen, Nguyen Hong Tan, Ha Thi Thanh, Do Thanh Mai (2016),
―Symbolic execution in automaticcally generation of data software testing”,
Dalat Scientific Journal, Dalat University, 6(2), pp. 254-273.
[2]. To Huu Nguyen, Tran Thi Ngan, Do Thanh Mai, Tran Manh Tuan (2016), ―A
Novel Symbolic execution model in automated generation of test case‖,
International Journal of Innovative Technology and Exploring Engineering
(IJITEE) e-ISSN: 2395 -0056, 3(7).
[3]. To Huu Nguyen, Nguyen Hong Tan, Ha Thi Thanh (2016), ―Mixed-Constraints
modeling technique and String constraints solving method in symbolic

MỞ ĐẦU
Kiểm thử đã đ

c chứng minh rõ ràng nó là công đoạn không thể thiếu trong

quá trình tạo ra một sản phẩm phần mềm hoàn thiện nó giúp cho sản phẩm hoạt
động đúng nh mong đ i, tránh những sai sót đáng tiếc trong vận hành phần mềm.
Việc thực hiện kiểm thử đòi hỏi ng ời kiểm thử phải có kiến thức cũng nh cách
nhìn khách quan với sản phẩm đồng thời cũng tiêu tốn khá nhiều thời gian chi phí
và công sức nhất là đối với các ch ơng trình lớn và nhiều nhóm xây dựng do vậy để
giảm bớt thời gian và tiền bạc cũng nh sự nhàm chán khi kiểm thử thủ công, thì
việc nghiên cứu các ph ơng pháp kiểm thử nhằm rút ngắn đ

c thời gian thực hiện.

Để đảm bảo việc kiểm thử đạt hiệu quả thì việc sinh các test case là vô cùng
quan trọng trên cơ sở đó sinh tự động các test case bằng việc sử dụng Java Path
Finder một trong những mở rộng của Java ứng dụng trong kỹ thuật thực thi t ng
tr ng (Symbolic execution).
Một số hướng nghiên cứu về sinh dữ liệu kiểm thử trong phần mềm
Trong lĩnh vực kiểm thử chất l

ng phần mềm hiện nay trên thế giới, hiện có

nhiều kỹ thuật nh ng tựu chung có thể phân theo ba nhóm chính: Phân tích mã
nguồn tĩnh (static code analysis), kiểm thử dữ liệu động (dynamic data testing) và
kỹ thuật hình thức dựa trên mô hình (model-based verification). Hai nhóm đầu tập
trung vào việc nâng cao chất l ng phần mềm tại mức mã nguồn, trong khi nhóm
cuối cùng xử lý phần mềm tại mức trừu t ng cao hơn – mô hình.
Phân tích mã nguồn tĩnh là kỹ thuật phát hiện lỗi ch ơng trình mà không yêu

Bằng kỹ thuật phân tích ch ơng trình dựa trên mô hình sau khi trừu t

ng

hóa mã nguồn của ch ơng trình đ c kiểm thử, việc phân tích cấu trúc logic của
ch ơng trình và tập dữ liệu ứng với mỗi điểm điều khiển trong ch ơng trình sẽ dễ
dàng hơn. Qua đó, quá trình sinh ra tập các testcase sẽ nhanh chóng và chính xác,
đảm bảo các tiêu chí control flow và data coverage tốt hơn nhiều so với cách tiếp
cận ở mức mã nguồn truyền thống. Hơn nữa, nếu quá trình này đ c thực hiện một
cách tự động sẽ giảm thiểu nhiều công sức cho các chuyên gia kiểm thử ch ơng
trình. Với cách tiếp cận nh vậy, phần mềm có thể đ c kiểm thử một cách tự động
bằng máy, đem lại kết quả chuẩn hơn, xét đ c nhiều tr ờng h p hơn, đặt biệt là
các lỗi logic, tiết kiệm chi phí sản xuất.
Đánh giá tập dữ liệu kiểm thử: Ngoại trừ những ch ơng trình đơn giản, sẽ là
không thực tế nếu kiểm chứng phần mềm trên tập tất cả dữ liệu đầu vào có thể.
Ngay cả khi chỉ tính tổ h p của các dữ liệu đầu vào hoặc tổ h p của các hàm, số
l ng đầu vào và số l ng các trạng thái cũng là quá lớn. Khi hệ thống có bộ nhớ
lớn, các dữ liệu đầu vào, đầu ra sẽ đ c log lại để theo dõi trạng thái. Trong khi
không có một công cụ để tạo ra một thiết kế phần mềm chuẩn, hoàn chỉnh và chắc
chắn thì việc kiểm thử là một khâu không thể thiếu để có thể đánh giá đ c chất
l ng phần mềm. Vì thế ng ời ta phải tìm cách chọn đ c một tập dữ liệu nhỏ mà
có thể kiểm thử mang lại đ c độ tin cậy cao với mỗi hệ thống.
Độ phủ hay mức độ đầy đủ bằng trực quan đánh giá đ c phạm vi hay mức
độ kiểm thử. Nếu kiểm thử không đầy đủ đ c hết mọi khía cạnh của phần mềm
đồng nghĩa với việc chúng ta bỏ sót nhiều lỗi. Các tần suất của các tr ờng h p cũng
không giống nhau.
Khái niệm ca kiểm thử đơn giản là kiểm chứng các trạng thái đ a ra thể hiện
cho hoạt động của hệ thống. Chúng ta có thể tạo ra ca kiểm thử để đạt đ c trạng
thái có thể bằng cách đ a vào các biến đặc biệt, trạng thái để điều khiển hệ thống.
H ớng nghiên cứu của đề tài

ng tr ng vào sinh tự động các test case

c

- Báo cáo tổng h p kết tìm hiểu về kỹ thuật thực thi t

ng tr ng các kỹ thuật

giải ràng buộc, sử dụng công cụ mô hình hóa java pathfinder và symbolic java
pathfinder trong tự động sinh test case.
- Công bố một số kết quả nghiên cứu đăng trên tạp chí trong và ngoài n ớc.
- Cài đặt thử nghiệm kỹ thuật mô hình hóa và giải ràng buộc trên một số
ph ơng pháp automata và Bitvector trong giải ràng buộc xâu. Thử nghiệm hai thuật
toán trên với một số bộ dữ liệu, so sánh các kết quả đã thu đ

c sau khi thử nghiệm.


4

Chương 1. TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM VÀ SINH
DỮ LIỆU KIỂM THỬ
1.1. Kiểm thử phần mềm
Để đảm bảo một hệ thống phần mềm hoặc các thành phần của phần mềm làm
việc nh mong muốn là một thách thức lớn trong ngành công nghiệp phần mềm.
Các phần mềm lỗi gây ra những tổn thất về kinh tế cũng nh những hậu quả nghiêm
trọng khác tùy thuộc vào lĩnh vực mà phần mềm đ

c sử dụng. Do đó cần phải phát



c.

c sử dụng phổ biến nhất để phát hiện và khắc

phục các lỗi của phần mềm nhằm đảm bảo chất l

ng của phần mềm. Chi phí giành

cho việc kiểm thử chiếm khoảng 50% tổng chi phí trong phát triển phần mềm. Kiểm
thử là một tiến trình quan trọng trong kỹ nghệ phần mềm. Kiểm thử đơn vị chính là
b ớc đầu tiên trong quy trình kiểm thử đó. Có các kỹ thuật kiểm thử khác nhau
đ

c sử dụng nh kiểm thử hộp trắng (white-box testing), kiểm thử hộp đen (black-

box testing), kiểm thử hộp xám (gray-box testing). Các kỹ thuật kiểm thử đó đ

c

dựa trên 2 loại kiểm thử đó là kiểm thử chức năng (funcional testing) và kiểm thử


5

cấu trúc (structured testing). Kiểm thử chức năng là loại kiểm thử dựa trên đặc tả
chức năng của hệ thống, nó phát hiện các sai sót về chức năng mà không quan tâm
tới cài đặt. Kiểm thử cấu trúc là loại kiểm thử có nghiên cứu mã nguồn bằng việc
phân tích thứ tự thực hiện các lệnh.
1.2. Kiểm thử đơn vị

}


6

Ph ơng thức kiểm thử TestArrayList bắt đầu bằng việc gán giá trị 1 cho biến
capacity và giá trị null cho biến element nh là các giá trị đầu vào kiểm thử. Sau đó
nó thực hiện một dãy các lời gọi ph ơng thức, tr ớc tiên là khởi tạo một đối t

ng

ArrayList với kích cỡ là capacity không chứa phần tử nào. ArrayList là một mảng
động với kích cỡ có thể thay đổi. Tiếp theo nó chèn một đối t

ng là element vào

mảng. Và cuối cùng là xác nhận xem phần tử đầu tiên của mảng có bằng đối t
vừa đ

ng

c chèn vào hay không.

Việc cài đặt nhiều ph ơng thức kiểm thử không đảm bảo rằng sẽ kiểm tra
đ

c hết mọi khía cạnh thực thi của ch ơng trình. Với các ch ơng trình có nhiều

đ ờng đi thực thi khác nhau thì việc thiếu xót các UT để kiểm tra một vài đ ờng đi
thực thi trong ch ơng trình là điều th ờng xuyên xảy ra. Khi ng ời lập trình thay

public static class LuhnAlgorithm {
public static bool Validate(string number){
if (number == null)
throw new ArgumentNullException("");
foreach (var c in number)
if (!Char.IsDigit(c))
throw new ArgumentException("");
return false;
}
}
Ta có thể viết một lớp kiểm thử chứa các UT để thực hiện việc kiểm thử lớp
LuhnAlgorithm:
Hình 1.3. phương thức test cho LuhnAlgorithm
[TestClass]// lớp chứa các unit test
public class LuhnAlgorithmTest {
[TestMethod]

[ExpectedException(typeof(ArgumentNullException))]
public void Test1() {
LuhnAlgorithm.Validate(null);
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void Test2() {


8

LuhnAlgorithm.Validate("K50");
}

c ném ra. Khi thực thi ph ơng thức kiểm thử Test2 thì

c ném ra. Rõ ràng là mỗi ph ơng thức kiểm thử ở trên chỉ

có thể kiểm tra việc thực thi của lớp LuhnAlgorithm theo một nhánh đi cụ thể. Thực
thi cả 3 ph ơng thức kiểm thử ở trên ta sẽ kiểm tra đ

c tất cả các tr ờng h p thực

thi của lớp LuhnAlgorithm. Với một ch ơng trình có nhiều đ ờng đi thì ta cần viết
các UT khác nhau để kiểm tra sự thực thi của ch ơng trình theo các đ ờng đi đó.
Tuy nhiên, với những ch ơng trình có nhiều đ ờng đi thực thi khác nhau thì việc
viết các UT nh thế đòi hỏi nhiều thời gian và công sức để tính các giá trị đầu vào
thích h p và khó có thể kiểm tra hết đ
các đ ờng đi.

c sự thực thi của ch ơng trình theo tất cả


9

Chương 2. JAVA PATHFINDER VÀ THỰC THI TƯỢNG TRƯNG
2.1. Java pathfinder
2.1.1. Giới thiệu về JPF
JPF là một bộ kiểm tra mô hình phần mềm trạng thái t ờng minh cho Java
[12]. Hiểu một cách cơ bản JPF là một máy ảo thực thi ch ơng trình Java không
chỉ một lần (giống nh các máy ảo thông th ờng), mà thực thi trong tất cả các
nhánh, các đ ờng đi có thể. JPF sẽ kiểm tra các vi phạm thuộc tính nh khóa chết
hoặc các ngoại lệ không thể bắt đ


(1)
int

a

=

random.nextInt(2);

// (2)
System.out.println("a=" + a);

int b = random.nextInt(3);

//

(3)
System.out.println("

b=" + b);

int c = a/(b+a -2);

//

(4)
System.out.println("
}
}


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status