1. Trang chủ
  2. » Công Nghệ Thông Tin

Cải tiến công cụ sinh dữ liệu thử Java PathFinder bởi tối ưu các ràng buộc

4 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cải tiến công cụ sinh dữ liệu thử Java PathFinder bởi tối ưu các ràng buộc
Tác giả Lê Thị Mỹ Hạnh, Trần Hoàng Dũng, Nguyễn Thanh Bình
Trường học Trường Đại học Bách khoa, Đại học Đà Nẵng; Trường Cao đẳng Lương thực - Thực phẩm
Chuyên ngành Kỹ thuật phần mềm
Thể loại Bài báo khoa học
Thành phố Đà Nẵng
Định dạng
Số trang 4
Dung lượng 506,76 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài viết Cải tiến công cụ sinh dữ liệu thử Java PathFinder bởi tối ưu các ràng buộc đề xuất việc áp dụng thuật toán tối ưu các ràng buộc - biểu diễn các lộ trình thực thi mã nguồn, nhằm giảm thời gian thực thi nhưng vẫn đảm bảo hiệu quả bao phủ. Giải pháp cải tiến được thử nghiệm trên tập các chương trình Java khác nhau và cho kết quả rất khả quan.

Trang 1

104 Lê Thị Mỹ Hạnh, Trần Hoàng Dũng, Nguyễn Thanh Bình

CẢI TIẾN CÔNG CỤ SINH DỮ LIỆU THỬ JAVA PATHFINDER

BỞI TỐI ƯU CÁC RÀNG BUỘC

IMPROVING THE JAVA PATHFINDER TOOL FOR GENERATING TEST DATA

BY OPTIMIZING CONSTRAINTS

Lê Thị Mỹ Hạnh 1 , Trần Hoàng Dũng 2 , Nguyễn Thanh Bình 1

1 Trường Đại học Bách khoa, Đại học Đà Nẵng; ltmhanh@dut.udn.vn, ntbinh@dut.udn.vn

2Trường Cao đẳng Lương thực - Thực phẩm; dungdnt@gmail.com

Tóm tắt - Sinh dữ liệu thử là một trong các giai đoạn quan trọng

và quyết định trong kiểm thử phần mềm Các kỹ thuật sinh dữ liệu

thử cấu trúc dựa trên mã nguồn để tạo ra dữ liệu thử nhằm phát

hiện lỗi của người lập trình Kỹ thuật sinh dữ liệu thử sử dụng thực

thi ký hiệu được cài đặt trong công cụ Java PathFinder để sinh dữ

liệu thử cho các chương trình Java Tuy nhiên, hiệu năng công cụ

Java PathFinder còn hạn chế, đó là thời gian thực thi khá lớn

Trong bài báo này, chúng tôi đề xuất việc áp dụng thuật toán tối ưu

các ràng buộc - biểu diễn các lộ trình thực thi mã nguồn, nhằm

giảm thời gian thực thi nhưng vẫn đảm bảo hiệu quả bao phủ Giải

pháp cải tiến được thử nghiệm trên tập các chương trình Java khác

nhau và cho kết quả rất khả quan

Abstract - Test data generation is one of the most important and

crucial phases in software testing Structural test data generation techniques are based on source code to create test data, which can uncover programmer's faults A test data generation technique using symbolic execution is implemented in the Java PathFinder tool to generate test data for Java programs However, Java PathFinder has a performance limitation: execution time is quite big In this paper, we propose applying an optimization algorithm for constraints - representing execution paths in programs - in order

to reduce the execution time but ensure the coverage effectiveness The experiment on different Java programs shows a promising result of the proposed solution

Từ khóa - kiểm thử; sinh dữ liệu thử; thực thi ký hiệu; Java

PathFinder; tối ưu ràng buộc Key words - testing; test data generation; symbolic execution; Java PathFinder; constraint optimization

1 Đặt vấn đề

Với sự phát triển nhanh chóng của công nghệ thông tin

trong vài thập kỷ gần đây, công nghiệp phần mềm đang dần

trở thành ngành mũi nhọn ở hầu hết các quốc gia trên thế

giới, kéo theo là sự mở rộng về quy mô cũng như chất

lượng của các sản phẩm phần mềm Tuy nhiên, một phần

mềm không bao giờ là hoàn hảo, và các vấn đề về hỏng hóc

phần mềm luôn là một nguy cơ lớn; những lỗi phần mềm

dù là nhỏ nhất cũng có thể gây ra thiệt hại và ảnh hưởng

nghiêm trọng Do đó hoạt động kiểm thử phần mềm được

đặt ra như một nhu cầu cấp thiết, giúp ngăn chặn và khắc

phục các lỗi tiềm ẩn bên trong phần mềm chưa được phát

hiện Nhằm giảm chi phí cho việc kiểm thử thủ công khi

các phần mềm đang dần trở nên phức tạp hơn, đồng thời

tăng tính hiệu quả và tin cậy của quá trình kiểm thử, hệ

thống kiểm thử phần mềm dựa trên cơ chế sinh dữ liệu thử

tự động đang được quan tâm và tập trung nghiên cứu

Nhiều cách tiếp cận cho việc sinh dữ liệu thử tự động

đã được đề xuất, trong đó phân tích tĩnh dựa trên thực thi

ký hiệu (SE - Symbolic Execution) [1, 2] được xem là một

phương pháp hiệu quả, có thể phát hiện các lỗi phức tạp

mà các phương pháp thông thường tốn nhiều công sức để

xử lý Ý tưởng của thực thi ký hiệu là sử dụng các giá trị

tượng trưng, thay vì phân tích chương trình với các giá trị

đầu vào cụ thể Như vậy, kết quả của một phương thức

được biểu diễn như một hàm số với tham số là các giá trị

đầu vào tượng trưng đó Bằng cách thực thi với đầu vào

tượng trưng thay vì vét cạn các giá trị cụ thể của đầu vào,

phương pháp này cung cấp một cách thức để làm giảm

bớt vấn đề bùng nổ trạng thái Bên cạnh đó, thực thi kí

hiệu cũng rất được quan tâm trong những năm gần đây

bởi khả năng sinh ra các giá trị đầu vào kiểm thử cao và

tìm lỗi sâu trong các ứng dụng phức tạp

Mục tiêu quan trọng của thực thi ký hiệu trong kiểm thử phần mềm là để khám phá càng nhiều đường dẫn thực thi chương trình khác nhau trong một khoảng thời gian nhất định; và với mỗi đường dẫn (1) tạo ra một tập hợp các giá trị đầu vào cụ thể để thực thi đường dẫn đó, và (2) kiểm tra

sự hiện diện của các loại lỗi khác nhau như lỗi chưa bắt ngoại lệ, lỗ hổng bảo mật, và thất lạc bộ nhớ Một trong những thế mạnh chính của thực thi ký hiệu là khả năng sinh các dữ liệu thử cụ thể, cho phép tạo ra các bộ dữ liệu thử

có độ bao phủ cao Hơn nữa, theo quan điểm tìm kiếm lỗi,

kỹ thuật này cung cấp cho các nhà phát triển các dữ liệu đầu vào cụ thể gây ra lỗi, có thể được sử dụng để xác nhận

và gỡ rối các lỗi độc lập với các công cụ thực thi ký hiệu sinh ra nó

Đã có nhiều công trình nghiên cứu áp dụng phương pháp thực thi ký hiệu để sinh dữ liệu thử cho các ngôn ngữ lập trình như NET, C, Java và cho ra đời nhiều công cụ kiểm thử như CREST, jCUTE, KLEE, Java PathFinder Trong phạm vi bài báo này, chúng tôi triển khai cách tiếp cận sinh dữ liệu thử dựa trên thực thi ký hiệu cho ngôn ngữ Java; đây là một ngôn ngữ lập trình đa nền tảng và có phạm vi sử dụng rất lớn trong ngành công nghiệp phần mềm Ngoài việc áp dụng kỹ thuật thực thi ký hiệu và giải ràng buộc sử dụng công cụ tạo dữ liệu thử tự động, cụ thể

là Java PathFinder (JPF) [3], chúng tôi cũng sẽ đề xuất cải tiến kỹ thuật tối ưu các ràng buộc biểu diễn tập các lộ trình

Bố cục của bài báo như sau: Tổng quan về phương pháp sinh dữ liệu thử dựa trên thực thi ký hiệu được giới thiệu ở Mục 2; Mục 3 giới thiệu về công cụ Java PathFinder; Mục 4 trình bày giải pháp tối ưu tập ràng buộc; kết quả thử nghiệm

và đánh giá giải pháp được trình bày ở Mục 5; Mục 6 là những kết luận và hướng phát triển của giải pháp đề xuất

Trang 2

ISSN 1859-1531 - TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ ĐẠI HỌC ĐÀ NẴNG, SỐ 5(114).2017-Quyển 1 105

2 Sinh dữ liệu thử dựa trên thực thi ký hiệu

Trong hoạt động kiểm thử phần mềm, các ca kiểm thử

thường được tạo ra một cách thủ công, gây tốn kém về chi

phí cũng như thời gian Thực thi kí hiệu (Symbolic

execution) [4] được biết đến là một kỹ thuật nổi tiếng với

khả năng tự động sinh những bộ dữ liệu thử có độ phủ cao

với các tiêu chí kiểm thử, nhằm phát hiện những lỗi sâu

trong các hệ thống phần mềm phức tạp

Ý tưởng chính của thực thi ký hiệu là thực thi chương

trình với các giá trị ký hiệu, thay vì các giá trị cụ thể của các

tham số đầu vào, kết quả là giá trị đầu ra được tính toán bởi

chương trình và được biểu diễn bởi một biểu thức ký hiệu

Ví dụ, đầu ra cho một đoạn mã chương trình như "int sum

(int x, int y) {return x + y; }" với ký hiệu đầu vào a và b sẽ

là a + b

Trong kiểm thử phần mềm, kỹ thuật thực thi ký hiệu

được sử dụng để sinh dữ liệu kiểm thử cho mỗi lộ trình thực

thi khác nhau của chương trình

Một trạng thái trong thực thi ký hiệu bao gồm các giá

trị (ký hiệu) của các biến chương trình, một điều kiện thực

thi lộ trình và bộ đếm chương trình (là thông tin về số hiệu

của dòng lệnh tiếp theo sẽ thực thi trong chương trình)

Điều kiện thực thi lộ trình là một công thức boolean (hoặc

thỏa mãn ràng buộc tương ứng (CSP)) trên các biến đầu

vào và mô tả những điều kiện nào cần phải đúng ở trạng

thái này Một cây thực thi ký hiệu có thể được sử dụng để

mô tả tất cả các lộ trình thực thi Hơn nữa, một cây thực thi

ký hiệu hữu hạn có thể đại diện cho một số hữu hạn thực

thi thực sự Về hình thức, một cây thực thi được ký hiệu

SYM(P) của một chương trình P, là một cây (có thể là hữu

hạn), trong đó các nút là những trạng thái ký hiệu của

chương trình và các cung là sự chuyển trạng thái có thể

Tất cả các nút lá của một cây thực thi ký hiệu mà tại đó

điều kiện lộ trình thực thi được thỏa mãn sẽ biểu diễn cho

các lộ trình thực thi khác nhau Tất cả các lộ trình thực thi

khả thi của P được biểu diễn trong SYM(P) Trong ví dụ của

Hình 2, có hai nút lá thỏa mãn, và do đó có chính xác hai

đường dẫn thực thi trong Chương trình P (Hình 1) Tất cả

giá trị thỏa mãn có thể xác định cho một điều kiện lộ trình

thực thi tại một nút lá đơn trong SYM(P) sẽ cho ra các đầu

vào với các lộ trình thực thi tương ứng trong chương trình

(P) Tất cả các nút lá biểu diễn cho các lộ trình thực thi khác

nhau Do đó, nếu SYM(P) là hữu hạn chúng ta có thể dễ dàng

tạo ra các đầu vào cho tất cả các lộ trình có thể thực thi

trong (P), và nếu SYM(P) là không hữu hạn thì độ bao phủ

lộ trình thực thi sẽ không thể đạt được giá trị cực đại

1 int min( int a, int b ) {

2 int min = a;

3 if ( b <min )

4 min = b;

5 if ( a <min )

6 min = a;

7 return min;

8 }

Hình 1 Chương trình P tìm số bé nhất trong hai số

Ý tưởng ban đầu của thực thi ký hiệu không được phát

triển cho việc sinh dữ liệu thử, mà là kiểm chứng hình thức

và nâng cao hiểu biết của chương trình thông qua gỡ lỗi biểu tượng Tuy nhiên, cách tiếp cận này có rất nhiều vấn

đề [5], bao gồm: 1) Độ phức tạp của biểu thức ký hiệu tăng nhanh; 2) Xử lý các cấu trúc dữ liệu phức tạp là khó khăn; 3) Các vòng lặp phụ thuộc vào các biến đầu vào nên khó

để xử lý

Hình 2 Cây thực thi ký hiệu của chương trình P

Các số trong hình là số hiệu dòng lệnh

3 Công cụ Java PathFinder

Java PathFinder (JPF) [3] là một công cụ mã nguồn mở

để kiểm chứng mô hình cho các chương trình Java Lõi bên trong của công cụ là một máy ảo, vì vậy bất kỳ chương trình Java được biên dịch (bytecode) có thể được sử dụng trực tiếp làm đầu vào cho JPF

JPF-SYMBC là một gói mở rộng của JPF nhằm hỗ trợ người lập trình trong việc thực hiện thực thi ký hiệu [6] JPF-SYMBC kết hợp thực thi ký hiệu với kiểm chứng mô hình và giải các ràng buộc để sinh các dữ liệu thử và kiểm tra các thuộc tính của mã trong quá trình tạo ra các ca kiểm thử; hỗ trợ thực thi ký hiệu động và thực thi trên các tệp bytecode JPF-SYMBC tạo ra các ca kiểm thử có độ bao phủ cao Các chương trình được thực thi trên các đầu vào

ký hiệu biểu diễn cho tất cả các đầu vào có thể Giá trị của các biến được biểu diễn như các biểu thức số (hỗn hợp số nguyên và số thực) và các ràng buộc, được sinh ra từ phân tích các cấu trúc mã Các ràng buộc này sau đó được giải

để sinh ra các dữ liệu kiểm thử đảm bảo thực thi các mã được phân tích Các điều kiện tiên quyết có thể được sử dụng để giảm kích thước của các miền dữ liệu đầu vào và chỉ tạo ra dữ liệu thử thỏa mãn các điều kiện tiên quyết JPF-SYMBC có thể thực hiện trên các kiểu dữ liệu số nguyên, kiểu số thực, con trỏ, mảng, một số toán tử trên kiểu xâu (đang phát triển và hoàn thiện) và sử dụng kết hợp một số bộ giải ràng buộc như: Choco, IASolve, CVC3 để giải các ràng buộc tuyến tính, phi tuyến tính trên các kiểu

số nguyên, số thực, kiểu tham chiếu (con trỏ) và kiểu xâu

4 Tối ưu ràng buộc

Thách thức lớn của việc sinh dữ liệu thử dựa trên thực thi ký hiệu là sự bùng nổ các lộ trình thực thi Do đó, việc giải các ràng buộc ứng với tập lộ trình để sinh dữ liệu thử đòi hỏi nhiều thời gian và nguồn tài nguyên Đó cũng chính

5

2

7

backtrack

backtrack

a: X, b: Y PC: true a: X, b: Y, min:

X PC: true a: X, b: Y, min: X PC: Y<X

a: X, b: Y, min: Y PC: Y<X a: X, b: Y, min: Y PC: Y<X, X<Y

a: X, b: Y, min: Y PC: Y<X, X≥Y

a: X, b: Y, min: Y PC:Y<X, X≥Y

a: X, b: Y, min: X PC: YX

a: X, b: Y, min: X PC: Y≥X, X<X a: X, b: Y, min: X PC: Y≥X, X≥X

a: X, b: Y, min: X PC: Y≥X, X≥X

Trang 3

106 Lê Thị Mỹ Hạnh, Trần Hoàng Dũng, Nguyễn Thanh Bình

là hạn chế của công cụ JPF

Vì vậy, trong bài báo này, chúng tôi nghiên cứu giải pháp

cải tiến công cụ JPF bằng cách tối ưu các ràng buộc biểu diễn

tập các lộ trình Chúng tôi đề xuất áp dụng thuật toán [7] để

tối ưu các ràng buộc nhằm đảm bảo các yêu cầu sau:

• Giảm số lượng các ràng buộc đưa vào bộ giải các

ràng buộc nhằm giảm chi phí thời gian tính toán;

• Đảm bảo sự bao phủ lộ trình của các dữ liệu thử

được sinh ra

Thuật toán tối ưu các ràng buộc thực hiện giảm miền

các ràng buộc cần giải quyết bởi việc loại bỏ các ràng buộc

dựa trên thông tin thực thi ký hiệu động Thuật toán tối ưu

các ràng buộc đã được thử nghiệm và đánh giá hiệu quả

tốt [7]

Thuật toán tối ưu các ràng buộc được trình bày trong Hình

3 Trước hết, thuật toán tìm ràng buộc mục tiêu trong ràng

buộc lộ trình bởi hàm getTargetConstraint() Sau đó, các biến

mục tiêu của ràng buộc lộ trình được xác định bởi

getSymVars() Đối với mỗi biến mục tiêu, xác định các ràng

buộc có phụ thuộc trực tiếp và gián tiếp với biến mục tiêu đó

bởi các hàm tương ứngformGroupsofX() và

getDependencies(); trong tập các phụ thuộc, xác định phần tử

có số phụ thuộc nhỏ nhất và phần tử có số phụ thuộc lớn nhất;

đối với mỗi phẩn tử được chọn, các biến được thay thế bởi giá

trị cụ thể tạo ra ràng buộc mới; và ràng buộc mới được gửi tới

bộ giải ràng buộc Nếu bộ giải cho kết quả thỏa mãn (sat), thì

vòng lặp dừng và cho kết quả dữ liệu thử; ngược lại, nếu kết

quả không thỏa mãn (unsat), thì vòng lặp tiếp tục đối với các

biến mục tiêu khác

Input: Ràng buộc lộ trình (PC), Giá trị biến ký hiệu, Bộ giải

ràng buộc (solver)

Ouput: result = sat, unsat, unknown

Constraint cur = getTargetConstraint(index, pc)

List targetsymlist = getSymVars(cur)

result = unknown

for i = 1 to length(targetsymlist) do

groups[] = formGroupsofX(i, targetsymlist)

List dependencies = []

for a = 0 to length(groups) do

dependencies[a] = getDependencies(groups[a], pc)

end

int selectDep[0] = findSmallestDepIndex(dependencies)

int selectDep[1] = findLargestDepIndex(dependencies)

for b = 0 to length(selectedDep) do

List grpDep = dependencies[(selectDep[b])]

List symbolicVars = join(groups(selectDep[b]), grpDep)

newPC = modifyPC(symbolicVars, concreteValues,pc)

output = callSolver(solver, newPC)

if output = “sat” then

return output

end

elseif output = “unsat” then

result = output

end

end

end

Hình 3 Thuật toán tối ưu ràng buộc lộ trình

Thuật toán được cài đặt tích hợp vào công cụ JPF nhận

đầu vào gồm tập các ràng buộc lộ trình, thực hiện tối ưu

các ràng buộc lộ trình và sử dụng bộ giải ràng

buộc Choco [8] để sinh dữ liệu thử tương ứng

5 Kết quả thử nghiệm

Chúng tôi tiến hành thử nghiệm công cụ JPF được cải tiến trên các chương trình Java khác nhau, với mục đích đánh giá độ bao phủ lộ trình của dữ liệu thử được sinh ra, cũng như hiệu quả của việc cài đặt thuật toán tối ưu các ràng buộc

Danh sách các chương trình Java được sử dụng để thử nghiệm được trình bày trong Bảng 1

Bảng 1 Danh sách các chương trình Java

tam giác đều, cân hay thường

RankStudent Xếp học lực sinh viên dựa trên

điểm thi

CheckValidColor Kiểm tra bộ ba giá trị màu

CompareTwoNumbers So sánh hai số nguyên

SwapBiggerNumber Hoán đổi số lớn hơn

CheckNumber Kiểm tra một số nguyên thuộc các

khoảng cho trước

QuadraticEqualtion Giải phương trình bậc hai

GreatestCommonDivisor Tìm ước số chung lớn nhất

Sum Tính tổng n-1 số tự nhiên đầu tiên

Chúng tôi phân tích mã nguồn các chương trình Java để xác định số lượng lộ trình cũng như dữ liệu thử được sinh

ra để thực thi lộ trình tương ứng Đối với vòng lặp (gồm các chương trình Fibonacci, GreatestCommonDivisor, Sum, Factorial), chúng tôi tính một lộ trình đi qua vòng lặp

và một lộ trình không đi qua vòng lặp Công cụ sinh ra số

dữ liệu phần lớn bằng hoặc nhiều hơn số lộ trình (Bảng 2) Đối với vòng lặp, có dữ liệu không thực thi vòng lặp, một

số dữ liệu thực thi vòng lặp một lần và một số dữ liệu thực thi vòng lặp nhiều lần

Kết quả thử nghiệm cho thấy dữ liệu thử sinh ra cho mỗi chương trình đều thực thi tất cả các lộ trình của chương trình đó

Bảng 2 Thống kê dữ liệu thử được sinh ra

Trang 4

ISSN 1859-1531 - TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ ĐẠI HỌC ĐÀ NẴNG, SỐ 5(114).2017-Quyển 1 107

Để đánh giá hiệu quả của thuật toán tối ưu các ràng buộc,

chúng tôi thực hiện sinh dữ liệu thử cho các chương trình

Java trên trong hai trường hợp: không cài đặt thuật toán tối

ưu và có cài đặt thuật toán tối ưu Bảng 3 trình bày thời gian

thực thi sinh dữ liệu thử trong hai trường hợp trên cùng máy

tính có cấu hình CPU Core i7 và bộ nhớ 4GB RAM

Bảng 3 So sánh thời gian thực thi

Chương trình

Thời gian thực thi (miliseond)

Không cài đặt thuật toán tối ưu

Có cài đặt thuật toán tối ưu

Từ Bảng 3, chúng ta có thể nhận thấy thời gian thực thi khi

áp dụng thuật toán tối ưu các ràng buộc đều giảm Tuy nhiên,

thời gian thực thi giảm rất đáng kể đối với chương trình không

sử dụng vòng lặp, ngược lại, đối với các chương trình có sử

dụng vòng lặp (Fibonacci, GreatestCommonDivisor, Sum,

Factorial) thì thời gian thực thi giảm khá ít Đây cũng chính là

hạn chế mà chúng tôi hướng đến giải quyết trong thời gian đến

Hình 4 Đồ thị so sánh thời gian thực thi

Để minh họa rõ hơn, đồ thị trong Hình 4 cho thấy thời gian thực thi trung bình sinh dữ liệu thử của các chương trình có vòng lặp giảm 2% và của các chương trình không

có vòng lặp giảm 31%

Như vậy, việc áp dụng tối ưu các ràng buộc trong sinh

dữ liệu thử dựa trên thực thi ký hiệu cho công cụ Java PathFinder đảm bảo độ bao phủ lộ trình, nghĩa là khả năng phát hiện lỗi, đồng thời giảm được thời gian thực thi

6 Kết luận

Sinh dữ liệu thử đảm bảo độ bao phủ mã nguồn đóng vai trò quan trọng trong việc phát hiện lỗi của lập trình viên Trong bài báo này, chúng tôi đã tìm hiểu và phân tích hạn chế của công cụ sinh dữ liệu Java PathFinder dựa trên thực thi ký hiệu cho mã nguồn Java.Từ đó, chúng tôi đã đề xuất

áp dụng thuật toán tối ưu các ràng buộc và tích hợp vào công cụ Java PathFinder nhằm cải tiến thời gian sinh dữ liệu thử Kết quả thử nghiệm cho thấy, thời gian thực thi khi áp dụng thuật toán tối ưu các ràng buộc đều giảm nhưng vẫn đảm bảo độ bao phủ các lộ trình

Trong tương lai, chúng tôi sẽ tiếp tục nghiên cứu việc giảm thời gian thực thi sinh dữ liệu thử đối với chương trình có vòng lặp và hướng đến việc áp dụng các thuật toán học máy để tiếp tục cải tiến sinh dữ liệu dựa trên

mã nguồn

TÀI LIỆU THAM KHẢO

[1] Cristian Cadar and Koushik Sen, “Symbolic execution for software

testing: three decades later”, Commununications of the ACM 56,

February 2013, pp 82-90

[2] Cristian Cadar, Patrice Godefroid, Sarfraz Khurshid, Corina Pasareanu, Koushik Sen, Nikolai Tillmann, Willem Visser,

Symbolic Execution for Software Testing in Practice – Preliminary Assessment, Proceedings of the 33rd International Conference on

Software Engineering, 2011

[3] W Visser, K Havelund, G Brat, S.-J Park, and F Lerda, “Model

Checking Programs”, Automated Software Engineering Journal,

10(2), April 2003

[4] J C King, Symbolic execution and program testing,

Communication ACM, 19(7), 1976, pp 385–394

[5] D Coward, Symbolic execution and testing, Inf Softw Technol.,

33(1), 1991, pp 53–64

[6] Corina S Pǎsǎreanu, Peter C Mehlitz, David H Bushnell, Karen Gundy-Burlet, Michael Lowry, Suzette Person, and Mark Pape,

Combining unit-level symbolic execution and system-level concrete execution for testing nasa software, In Proceedings of

the 2008 International Symposium on Software testing and analysis (ISSTA '08), ACM, New York, NY, USA, 2008, pp 15-26

[7] Ikpeme Erete and Alessandro Orso, Optimizing Constraint Solving

to Better Support Symbolic Execution, Proceedings of the 2012 IEEE

Fourth International Conference on Software Testing, Verification and Validation, 2012

[8] http://www.choco-solver.org

[9] Ngô Pô Na, Xây dựng công cụ sinh dữ liệu thử tự động cho chương

trình Java, Luận văn Thạc sỹ, Đại học Đà Nẵng, 2017.

(BBT nhận bài: 20/03/2017, hoàn tất thủ tục phản biện: 25/04/2017)

0

100

200

300

400

500

600

700

800

900

Không thuật toán tối ưu Có thuật toán tối ưu

Ngày đăng: 25/11/2022, 21:11

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm