1
ĐẠI HC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Đức Anh
PHƯƠNG PHÁP PHÂN TÍCH MÃ NGUỒN VÀ
SINH D LIU KIM TH CHO CÁC DỰ ÁN C/C++
Ngành: Công nghệ thông tin
Chuyên ngành: Kỹ thut phn mm
Mã số: 60480103
LUẬN VĂN THẠC SĨ: KỸ THUT PHN MM
Cán bộ ng dn: PGS. TS. Phm Ngọc Hùng
HÀ NỘI - 2017
1
Kim th đơn vị một trong nhng pha quan trng nht
để đảm bo chất lượng cao ca phn mềm, đặc biệt các
phn mm nhúng. Hai phương pháp đưc s dng ph
biến gm kim th hộp đen (black-box testing) kiểm
th hp trng (white-box testing). Kim th hộp đen chỉ
kiểm tra tính đúng đn của đầu ra vi đầu vào cho trước
không quan tâm đến nguồn chương trình. Ngược
lại, phương pháp kiểm th hp trắng đánh giá chất lượng
nguồn bằng cách sử dụng các thuật phân tích
nguồn. Tuy nhiên, bởi kiểm th hp trắng đi sâu vào
phân tích nguồn nên thuật này cho phép phát hin
được các li tim ẩn kim th hộp đen không phát
hiện được. Tuy nhiên, chi phí kiểm th hp trng lớn hơn
rt nhiu so vi kim th hộp đen. Đặc biệt, trong các dự
án công nghiệp, chi phí kiểm th hp trắng th chiếm
hơn 50% tổng chi phí phát trin phn mềm. Nguyên nhân
của tình trạng này do số ợng hàm cần kim th lên
tới hàng nghìn, thậm chí hàng chục nghìn hàm. Kết qu
chi phí để kim th hết những hàm này khá ln, nh
hưởng khá nhiều đến tốc độ phát trin d án. thế, quá
trình kiểm th hp trng cần được t động hóa để gii
quyết bài toán về chi phí.
Hai hướng chính trong kiểm th đơn vị theo phương
pháp kiểm th hp trng gồm phát hin lỗi tối đa hóa
độ ph. Cho một hàm cn kim th hp trng, hàm này
2
thể lỗi tim n rất khó phát hiện. Yêu cầu chính
sinh tp ca kim th để kim tra chất lượng m này.
Theo hướng đầu tiên, tập ca kim th y thể ch y
lỗi như lỗi chia cho 0, lỗi tràn bộ nh. ng th hai yêu
cu sinh tp ca kim th sao cho s ợng nhánh, câu
lnh, hoặc điều kiện con được thc thi ln nhất. Khái
niệm độ ph liên quan đến chất lượng ca kim th theo
hướng tối đa hóa độ phủ. Độ ph càng lớn đồng nghĩa
vi chất lượng ca kim th càng tốt. dụ, nếu hàm cần
kim th có 10 nhánh mà chỉ 9 nhánh được đi qua bởi
tp 3 ca kim th thì độ ph đạt được bằng 90%. Điều đó
nghĩa trong hàm này một nhánh tha cần được
phát hiện, hoặc thể hàm này lỗi tim ẩn nào đó
kim th hộp đen không phát hin ra. Các ng c kim
th tiêu biểu theo hướng này thể k đến PathCrawler,
CAUT, CUTE, CREST. Đối với bài toán sinh tập ca
kim th để đạt độ ph tối đa, hai phương pháp kim th
hp trắng được s dng ph biến gm kim th tĩnh
(static tesing) kiểm th động (DSE - dynamic
symbolic execution). tưởng chính của phương pháp
kim th theo hướng tĩnh sinh ca kim th bằng phân
tích mã nguồn. Theo như phương pháp này, tt c mọi cú
pháp trong chương trình cần được h tr phân tích đầy
đủ. Tốc độ một trong những ưu điểm chính của
phương pháp kim th theo hướng nh bởi thuật y
không yêu cầu thực thi chương trình như thut DSE.
3
Tuy nhiên, phương pháp này khó áp dụng cho các dự án
công nghip bởi rất khó để h tr tt c mọi pháp
có thể của ngôn ng C/C++. Trái ngược với phương pháp
kim th tĩnh, phương pháp kim th DSE không yêu
cu phải phân tích mọi pháp của chương trình để sinh
ca kim thử. Để giảm chi phí phân tích mã nguồn mà vẫn
đạt độ ph tối đa, phương pháp kiểm th DSE kết hp
quá trình phân tích pháp chương trình với trình biên
dch KLEE, PathCrawler, DART, CAUT, CREST. Bi
thế, phương pháp kiểm th DSE d dàng đạt được độ ph
cao vi n lực phân tích chương trình nhỏ hơn so với
phương pháp kiểm th theo hướng tĩnh.
Phương pháp kiểm th theo hướng động gồm hai kĩ thuật
kim th được s dng ph biến gồm thuật EGT
(execution generated testing) thuật concolic.
thuật EGT được áp dụng trong công cụ sinh ca kim th
t động ni tiếng KLEE (2008) một công cụ được đánh
giá cao bởi tính hiệu qu của nó. tưởng chính của
thuật EGT vừa biên dịch chạy chương trình vừa
sinh ca kim th trc tiếp. Chng hn, khi trình biên dch
gp một điều kin, ca kim th tương ứng nhánh đúng và
nhánh sai của điều kiện này được sinh ra. Tại đây, với
mi ca kim th, mt tiến trình mới đưc to ra s phân
tích chương trình theo nhánh đúng/sai đó. Quá trình sinh
ca kim th ch dng khi một trong ba điều kin sau tha
4
mãn (1) đạt độ ph tối đa (2) không còn nhánh đúng/sai
nào để phân tích tiếp, (3) đt đến gii hn thi gian cho
phép. Nhược điểm chính của thuật EGT hiệu sut
thp khi kim th hàm chứa vòng lặp số ln lp ln,
hoc cha li gọi đệ quy. Khi đó, số tiến trình được to
ra có thể t hàng nghìn tới hàng chục nghìn. thuật này
th hiện tính hiệu qu khi tìm các lỗi tim n trong
chương trình bởi EGT xem xét mọi trường hợp thể
xảy ra. Tuy nhiên, thuật EGT không phù hợp với bài
toán sinh ca kim th đạt độ ph tối đa bởi chúng ta
không cần xem xét hết mọi trường hp khi sinh ca kim
thử. thuật hay được s dng kế tiếp gọi concolic
được đề xuất vào năm 2005 cài đặt lần đầu tiên trong
công cụ DART. Sau y, thuật concolic liên tục được
ci tiến trong các công cụ PathCrawler, CUTE, CAUT,
CREST. Trong phương pháp y, ca kim th đầu tiên
được sinh ngẫu nhiên, sau đó đẩy vào hàm cần kim th
để ly danh sách các câu lệnh đi qua. Với mt ca kim
th, tập các ca kiểm th này gọi một đường thi hành.
Ca kim th kế tiếp được sinh ra dựa trên hai thông tin
gồm (1) tiêu chí độ ph (ph câu lệnh/nhánh) (2) trạng
thái của chương trình. Quá trình sinh ca kim th kết
thúc khi (1) độ ph đạt được tối đa, hoặc (2) đạt đến gii
hn thi gian. Hin ti, nhiều công trình nghiên cứu đưa
ra nhiu chiến thut chn đường thi hành khác nhau đ
sinh ca kim th kế tiếp càng tăng độ ph càng tốt như