Tối ưu hóa Kiểm thử khắc phục những hạn chế đó khi các trường hợp sẽ được đánh giá độ ưu tiên và thực hiện có tuần tự để đảm bảo các ràng buộc thời gian, chi phí và vẫn đáp ứng mục tiêu
Trang 1LUẬN VĂN THẠC SĨ KỸ THUẬT CÔNG NGHỆ THÔNG TIN
Trang 2
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
- Ngô Thị Thanh Bình
ỨNG DỤNG HỌC MÁY TRONG KIỂM THỬ PHẦN MỀM
Chuyên ngành: Công nghệ thông tin
Trang 3CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ
Họ và tên tác giả luận văn: Ngô Thị Thanh Bình
Đề tài luận văn: Ứng dụng học máy trong kiểm thử phần mềm
Chuyên ngành: Công nghệ thông tin
Mã số SV: CB160533
Tác giả, Người hướng dẫn khoa học và Hội đồng chấm luận văn xác nhận tác giả đã sửa chữa, bổ sung luận văn theo biên bản họp Hội đồng ngày 26/10/2019 với các nội dung sau:
# Nội dung chỉnh sửa Mục lục Trang
1 Thống nhất định nghĩa: Sửa cách dịch “agent” từ “máy”
thành “hệ thống”
2.2.2, 3.2, 3.3 29, 39,
42
2 Làm rõ đóng góp khoa học của đề tài, những khác biệt và
đóng góp thêm so với tài liệu ở mục tham khảo số [32]
trong luận văn
3 Làm rõ cấu trúc, cách hoạt động của mạng nơ-ron nhân
tạo trong mô hình đề xuất, bổ sung hình vẽ
Hình 3.1, Mục 3.3.2
43
4 Thể hiện rõ tính hiệu quả của mô hình đề xuất so với một
số mô hình truyền thống
Hình 4.3, 4.4, 4.6, Mục 4.3
49-52
5 Lỗi chính tả
Ngày tháng 11 năm 2019
Giáo viên hướng dẫn Tác giả luận văn
PSG TS Phạm Văn Hải Ngô Thị Thanh Bình
CHỦ TỊCH HỘI ĐỒNG
Trang 43
LỜI CAM ĐOAN
Những kiến thức trình bày trong luận văn là do tôi tìm hiểu, nghiên cứu và trình bày theo những kiến thức tổng hợp của cá nhân Kết quả nghiên cứu trong luận văn chưa từng được công bố tại bất kì công trình nào khác Trong quá trình làm luận văn, tôi có tham khảo các tài liệu có liên quan và đã ghi rõ nguồn tài liệu tham khảo Tôi xin cam đoan đây là công trình nghiên cứu của tôi và tôi không sao chép của bất kì ai
Tôi xin chịu trách nhiệm, nếu sai, tôi xin chịu mọi hình thức kỉ luật theo quy định
Hà Nội, ngày 21 tháng 11 năm 2019
Học viên
Ngô Thị Thanh Bình
Trang 5Tôi cũng xin gửi lời cảm ơn tới các anh chị em và các bạn đã và đang theo học Cao học, Đại học tại Viện Công nghệ thông tin & Truyền thông, Đại học Bách khoa Hà Nội đã giúp đỡ tôi trong quá trình nghiên cứu và có nhiều ý kiến góp ý quý báu giúp tôi hoàn thiện luận văn
Cuối cùng, tôi xin gửi lời cảm ơn tới gia đình và bạn bè, những người luôn ở bên cạnh, động viên, giúp đỡ trong suốt quá trình nghiên cứu và thực hiện luận văn của mình
Học viên
Ngô Thị Thanh Bình
Trang 65
MỤC LỤC
DANH MỤC HÌNH VẼ VÀ SƠ ĐỒ 7
DANH MỤC BẢNG 8
MỞ ĐẦU 9
Lý do chọn đề tài 9
Tính cấp thiết của đề tài 9
Mục đích nghiên cứu 10
Phạm vi nghiên cứu 10
Bố cục luận văn 11
CHƯƠNG 1 NGHIÊN CỨU TỔNG QUAN 12
1.1 Giới thiệu về kiểm thử phần mềm 12
1.1.1 Kiểm thử và các phương pháp kiểm thử khác nhau 12
1.1.2 Kiểm thử tự động 14
1.2 Bài toán tối ưu trong kiểm thử phần mềm 15
1.2.1 Một số nghiên cứu 16
1.2.2 Bài toán kiểm thử phần mềm 19
1.3 Tổng kết chương 21
CHƯƠNG 2 THU THẬP DỮ LIỆU KIỂM THỬ PHẦN MỀM VÀ TỔNG QUAN VỀ HỌC MÁY 23
2.1 Môi trường thu thập và tiền xử lí dữ liệu 23
2.1.1 Thu thập và tiền xử lí 24
2.1.2 Phân tích đặc trưng dữ liệu 25
2.2 Học tăng cường 27
2.2.1 Quy trình Markov 27
2.2.2 Học máy tăng cường 29
2.2.3 Cập nhật chiến lược 30
2.2.4 Q-Learning 31
2.3 Học sâu 32
2.3.1 Mạng nơ-ron nhân tạo 32
2.3.2 Thuật toán tối ưu 34
2.3.3 Học tăng cường sâu 35
2.4 Tổng kết chương 37
CHƯƠNG 3 MÔ HÌNH HỌC MÁY CHO TỐI ƯU KIỂM THỬ PHẦN MỀM 38
3.1 Bài toán tối ưu kiểm thử 38
Trang 76
3.2 Mô hình học máy tăng cường cho bài toán kiểm thử 39
3.2.1 Không gian trạng thái – hành động 40
3.2.2 Hàm phần thưởng 41
3.3 Mạng học sâu 42
3.3.1 Xây dựng bộ dữ liệu học cho mạng nơ-ron 42
3.3.2 Cấu trúc mạng nơ-ron 43
3.4 Lập lịch kiểm thử và đưa vào CI 44
3.5 Tổng kết chương 44
CHƯƠNG 4 CÀI ĐẶT VÀ THỰC NGHIỆM 46
4.1 Cài đặt chương trình 46
4.1.1 Môi trường phát triển và thử nghiệm 46
4.1.2 Phương pháp đo độ chính xác 46
4.2 Dữ liệu thử nghiệm 47
4.3 Kết quả thử nghiệm 48
4.4 So sánh với nghiên cứu liên quan 52
CHƯƠNG 5 KẾT LUẬN 55
5.1 Kết quả đạt được 55
5.2 Định hướng phát triển 56
Trang 87
DANH MỤC HÌNH VẼ VÀ SƠ ĐỒ
Hình 2.1 Quy trình thu thập dữ liệu 24
Hình 2.2 Tương tác giữa hệ thống và môi trường 29
Hình 2.3 Biểu diễn học sâu 32
Hình 2.4 Biến thiên truyền ngược theo quy tắc chuỗi 34
Hình 2.5 Mạng tăng cường học sâu 35
Hình 3.1 Tương tác hệ thống và môi trường 39
Hình 3.2 Mô hình mạng nơ ron đề xuất 43
Hình 3.3 Kiểm thử trong quy trình CI 44
Hình 4.1 Thất bại theo trường hợp kiểm thử dữ liệu Paint Control 48
Hình 4.2 Thất bại theo trường hợp kiểm thử dữ liệu Rails 48
Hình 4.3 Kết quả trên dữ liệu thử nghiệm trên bộ dữ liệu 1 49
Hình 4.4 Kết quả trên dữ liệu thử nghiệm trên bộ dữ liệu 2 50
Hình 4.5 So sánh với phương pháp ngẫu nhiên 51
Hình 4.6 So sánh với phương pháp có sắp xếp 52
Trang 98
DANH MỤC BẢNG
Bảng 1.1 Ưu tiên kiểm thử dựa trên dữ liệu lịch sử 17
Bảng 1.2 Ưu tiên kiểm thử dựa trên ràng buộc thời gian 17
Bảng 2.1 Dữ liệu kiểm thử thô 24
Bảng 2.2 Thông tin chung về bộ dữ liệu 25
Bảng 3.1 Thông số cho NetworkAgent 42
Trang 10sự phối hợp giữa thực hiện bằng các kiểm thử viên (Tester) và phần mềm còn hạn chế trong ứng dụng thực tiễn Không ngoại lệ, tại Việt Nam quy trình kiểm thử phụ thuộc nhiều vào hoạt động thủ công với thời gian, chi phí cao mà chưa đem lại hiệu
quả tương xứng [6]
Hiện nay, một số kỹ thuật trí tuệ nhân tạo và các kĩ thuật học máy thông minh đã áp dụng trong nhiều lĩnh vực khác nhau, trong đó có kiểm thử phần mềm [7] Điểm hạn chế đó là giải quyết một phần lĩnh vực kiểm thử phần mềm trong lĩnh vực hẹp Đã có nhiều công trình nghiên cứu riêng rẽ trong lĩnh vực kiểm thử và học máy Việc thiếu các nghiên cứu về ứng dụng các kĩ thuật học máy phù hợp vào mục đích kiểm thử phần mềm là mô hình đề xuất ứng dụng học máy được trình bày trong luận văn Tác giả đề xuất một phương pháp tối ưu hóa trong kiểm thử phần mềm dựa trên học máy tăng cường kết hợp mạng nơ-ron nhân tạo Kết quả sẽ được
sử dụng để tích hợp vào quy trình phát triển phần mềm thực tế
Tính cấp thiết của đề tài
Thực tế, có nhiều yếu tố tác động trong vòng đời phát triển phần mềm dẫn đến việc tiếp cận để cải thiện việc kiểm thử là khó và phức tạp [8] Các nghiên cứu
Trang 1110
đi vào các kĩ thuật chính trong kiểm thử như Kiểm thử tất cả, Kiểm thử hồi quy có lựa chọn, Tối giản Kiểm thử và Kiểm thử Ưu tiên [9] Chiến lược Kiểm thử tất cả hiệu quả khi bộ kiểm thử nhỏ nhưng với bộ kiểm thử lớn, cần có cơ chế sắp xếp Chiến lược kiểm thử hồi quy có lựa chọn và Tối giản kiểm thử chứng tỏ được việc đảm bảo 100% độ bao phủ, nhưng lại không đảm bảo được khả năng phát hiện được lỗi như Kiểm thử tất cả và chưa đủ để đưa vào quy trình phát triển phần mềm có tích hợp liên tục Tối ưu hóa Kiểm thử khắc phục những hạn chế đó khi các trường hợp sẽ được đánh giá độ ưu tiên và thực hiện có tuần tự để đảm bảo các ràng buộc thời gian, chi phí và vẫn đáp ứng mục tiêu cuối cùng là tìm lỗi [10] [11]
Các nghiên cứu về tối ưu hóa kiểm thử hiện nay cần phải được tiếp cận theo nhiều hướng khác nhau và số lượng lớn phụ thuộc vào đặc tả phần mềm và mã nguồn Tuy nhiên, việc theo dõi mối liên hệ giữa thay đổi mã nguồn và phương án kiểm thử không phải lúc nào cũng rõ ràng hay dễ dàng tiếp cận trong hệ thống quản
lí kiểm thử độc lập [12] Do đó, vấn đề cần thiết đặt ra là tối ưu hóa kiểm thử không phụ thuộc vào đặc tả phần mềm và vẫn đảm bảo được hiệu năng phát hiện lỗi dưới ràng buộc thời gian Tác giả luận văn đề xuất mô hình để giải quyết vấn đề này
reinforcement learning)
Trang 1211
Bố cục luận văn
Bố cục luận văn chia thành năm chương:
CHƯƠNG 1: NGHIÊN CỨU TỔNG QUAN
Trình bày kiến thức cơ sở về kiểm thử phần mềm, các kĩ thuật trong kiểm thử, các xu hướng ứng dụng trong kiểm thử tự động Cuối chương giới thiệu một số công trình liên quan và tiếp cận vấn đề bài toán tối ưu trong kiểm thử Từ đó tác giả
đề xuất mô hình toán học cho bài toán ưu tiên hóa và lựa chọn trường hợp kiểm thử CHƯƠNG 2: THU THẬP DỮ LIỆU KIỂM THỬ VÀ TỔNG QUAN HỌC MÁY
Trình bày mô tả chi tiết các bước thực hiện để tìm, tổng hợp, tiền xử lí dữ liệu Bài toán kiểm thử là một bài toán phụ thuộc rất lớn vào yêu cầu đặc tả của phần mềm do đó hai bộ dữ liệu được chọn phải đại diện được các đặc trưng về báo cáo kiểm thử thường gặp Cuối chương tiếp tục giới thiệu tổng quan về học máy, học tăng cường và mạng nơ-ron để sử dụng làm phương pháp chính trong giải quyết bài toán
CHƯƠNG 3: MÔ HÌNH HỌC MÁY CHO TỐI ƯU KIỂM THỬ PHẦN MỀM
Trình bày chi tiết mô hình ưu tiên hóa và lựa chọn trường hợp kiểm thử dựa trên kỹ thuật học tăng cường có sử dụng mạng nơ-ron làm hàm ước lượng Cấu trúc
mô hình học, tương tác máy-môi trường và cấu trúc mạng nơ-ron được trình bày trong chương này Về cơ bản, mô hình học máy này sẽ dần có được kiến thức về kiểm thử phần mềm và ra quyết định để tăng dần hiệu năng kiểm thử
CHƯƠNG 4: CÀI ĐẶT VÀ THỰC NGHIỆM
Phân tích kết quả cùng so sánh với các nghiên cứu liên quan Chương trình là
mã nguồn xây dựng trên các thư viện hỗ trợ học máy của Python Dữ liệu thử nghiệm được chọn là hai hộ dữ liệu từ hai nguồn mở là ABB Robotics Paint Control
và Rails Travis CI
CHƯƠNG 5: KẾT LUẬN
Trình bày kết luận về công trình nghiên cứu, các đóng góp chính và ý tưởng phát triển thêm trong tương lai
Trang 13số kĩ thuật tối ưu hóa trong kiểm thử phần mềm
1.1 Giới thiệu về kiểm thử phần mềm
Phần này giới thiệu về kiểm thử phần mềm, các khái niệm xung quanh kiểm thử phần mềm và tự động hóa trong kiểm thử
1.1.1 Kiểm thử và các phương pháp kiểm thử khác nhau
Định nghĩa 1.1 Tiêu chuẩn IEEE 610 (1990) định nghĩa trường hợp kiểm thử:
Một bộ đầu vào, điều kiện thực thi, và kết quả mong đợi được xây dựng cho một mục tiêu nhất định, như kiểm tra một đường dẫn phần mềm, hay xác minh việc tuân theo những yêu cầu cụ thể
Các tài liệu xác định đầu vào, kết quả mong đợi và một bộ điều kiện cho một đối tượng kiểm thử
Kiểm thử phần mềm là phân tích được thực hiện để đánh giá chất lượng của
hệ thống phần mềm dưới dạng một bài kiểm tra [13] Có rất nhiều kỹ thuật kiểm thử
để đảm bảo chắc chắn rằng một bộ phận hay một hệ thống được kiểm tra sẽ đáp ứng đúng yêu cầu đặc tả Rất nhiều các phương án khác nhau được sử dụng để chọn ra
kỹ thuật kiểm thử hợp lí nhất Điều này là do khối lượng kiểm thử là rất lớn trong khi thời gian và các chi phí khác là có hạn Trong mô hình phát triển phần mềm, thời gian và tài nguyên cho kiểm thử là giới hạn Mô hình phát triển phần mềm thác nước truyền thống [14] kiểm thử chỉ diễn ra khi hệ thống đã được thiết kế và triển
Trang 14Tiếp tục, các phương pháp kiểm thử còn được phân chia theo mức độ Thấp nhất là kiểm thử đơn vị [17] mà theo đó từng phần mã nguồn riêng rẽ cùng với dữ liệu đi kèm, thủ tục sử dụng và vận hành được kiểm thử để xác định là chúng hoạt động đúng Những bài kiểm thử này chủ yếu viết bởi người lập trình viên sau khi hoặc thậm chí trước cả khi bắt đầu viết mã nguồn phần mềm [18] nhằm khuyến khích việc thiết kế kiến trúc phần mềm đơn giản hơn Kiểm thử hộp trắng cũng liên quan trực tiếp tới mức độ kiểm thử này vì sự tương đồng về trong tính chất Mức độ thứ hai là kiểm thử kết hợp [19] là kiểm thử sự kết nối giữa các thành phần, tương tác tới các phần khác nhau trong một hệ thống đang vận hành Tiếp theo là kiểm thử
hệ thống đề cập tới hành vi của hệ thống được định nghĩa bởi phạm vi phát triển phần mềm [19] Cuối cùng là kiểm thử chấp nhận, được thực hiện từ phía khách hàng cũng tại chính môi trường mà nó sẽ được vận hành Trong đó, các trường hợp kiểm thử cũng sẽ chỉ gồm những điểm quan trọng từ điểm nhìn của khách hàng
Trang 1514
Các kĩ thuật kiểm thử còn có thể được chia theo công cụ, phần mềm hỗ trợ Kiểm thử thủ công là các trường hợp việc kiểm thử được thực hiện mà không có sự
hỗ trợ của phần mềm tự động nào Người kiểm thử sẽ đi qua tất cả các bước trong
kế hoạch kiểm thử để đảm bảo tất cả các chức năng của hệ thống có kết quả đúng theo yêu cầu Các công đoạn này đều có thể được tự động hóa bằng phần mềm Tức
là, một phần mềm tự động được điều khiển để thực hiện theo trường hợp kiểm thử
và so sánh với kết quả đã định sẵn [20] Các cách nhìn khác nhau về phân loại kiểm thử đều có thể được kết hợp lại và trong các công ty phần mềm ngày nay, nhiều phương án kiểm thử khác nhau đang được dùng để đảm bảo chất lượng Và xu hướng hiện nay đó là đơn giản hóa việc kiểm thử tự động để làm đòn bẩy cho việc đầu tư vào kiểm thử thủ công
1.1.2 Kiểm thử tự động
Kiểm thử phần mềm về bản chất là sự lặp đi lặp lại Một danh sách các bước cần thực hiện, kiểm tra đầu ra, đưa hệ thống về trạng thái ban đầu và thực hiện lại các bước từ đầu Các nhân viên kiểm thử cùng triển khai trên một hệ thống, làm các bước giống hoặc gần giống nhau Như vậy, kiểm thử là một hoạt động tương đối chậm và tốn kém Sự thiếu khách quan của người kiểm thử có thể ảnh hưởng tới các bước quan trọng trong quy trình kiểm thử Tuy nhiên, trong kiểm thử tự động, những điểm vừa liệt kê khó có thể xảy ra
Tăng năng suất: Lý tưởng mà nói, một bộ trường hợp kiểm thử tự động nên
được chạy mà không có sự can thiệp của con người Như vậy sẽ tiết kiệm được rất nhiều tài nguyên khi để việc kiểm thử chạy tự động ban đêm không cần người giám sát [21] Kiểm thử tự động có thể làm ngắn lại vòng đời phát hành sản phẩm Những lỗi do thay đổi trong hệ thống sẽ sớm được phát hiện sớm trong quy trình phát triển phần mềm, tiết kiệm công sức và tiền bạc [22] Hơn nữa, kiểm thử tự động có thể xử lí lượng lớn dữ liệu so với kiểm thử thủ
Trang 1615
công, ví dụ cần kiểm thử trên bộ dữ liệu gồm hàng ngàn bản ghi sẽ gặp khó khăn nếu làm thủ công trong khi khá là đơn giản nếu thực hiện tự động
Tăng độ tin cậy: thể hiện ở việc kiểm thử tự động được chạy chính xác
giống hệt nhau mỗi lần thực hiện Một hoạt động kiểm thử thủ công chắc chắc khó tránh khỏi các lỗi ở con người, nhất là ở các trường hợp lặp đi lặp lại, cần chuẩn bị nhiều, hoặc cần chú ý tới các bước phụ, nhỏ, chi tiết Hơn nữa, việc để kiểm thử chạy tự động giải thoát người kĩ sư khỏi những việc lặp đi lặp lại mà tập trung hơn vào nghiên cứu hệ thống, thiết kế kế hoạch kiểm thử hiệu quả hơn [22]
Tăng độ bao phủ: Kiểm thử tự động chạy rất tương đối nhanh Nhiều
trường hợp kiểm thử được thực thi trong thời gian ngắn hơn sẽ dẫn đến việc
có thể chạy nhiều trường hợp kiểm thử hơn, độ bao phủ phần mềm cao hơn
1.2 Bài toán tối ưu trong kiểm thử phần mềm
Kiểm thử hồi quy chiếm 80% ngân sách kiểm thử [23] Việc thực hiện yêu cầu thay đổi mới, kiểm tra lại phần mềm, sửa lỗi nhanh là phần quan trọng của kiểm thử hồi quy Kiểm thử hồi quy mất rất nhiều thời gian cùng tài nguyên bị bó buộc và thường xuyên lặp đi lặp lại Kiểm thử hồi quy thời gian thực bị hạn chế lớn về thời gian vì môi trường mô phỏng của chúng rất khắt khe và lưu trữ nhiều dự án Kiểm thử lại toàn bộ, Chọn kiểm thử hồi quy (Regression Test Selection - RTS), Giảm thiểu bộ test (Test Suite Minimization - TSM) và Ưu tiên trường hợp kiểm thử (Test Case Prioritization - TCP) là các kỹ thuật kiểm thử hồi quy chiếm ưu thế Mỗi một trong các phương pháp này đều có những ưu điểm và nhược điểm riêng Chiến lược Kiểm thử lại toàn bộ tốt khi bộ kiểm thử nhỏ Tuy nhiên, khi bộ kiểm thử tăng quy
mô, cần thiết có một cơ chế để sắp xếp chúng Trong nghiên cứu đề cập từ [9] có trình bày về một số công nghệ chọn kiểm thử hồi quy Kỹ thuật chọn kiểm thử hồi quy an toàn chọn từng trường hợp kiểm thử tìm ra ít nhất một lỗi nhưng vẫn không đảm bảo lựa chọn thực sự an toàn vì các tiêu chí lấy sự an toàn là then chốt không phải lúc nào cũng được thực hiện [24] Kỹ thuật lựa chọn trường hợp kiểm thử
Trang 1716
không an toàn loại bỏ một số trường hợp kiểm thử, [25] đã chỉ ra rằng Giảm thiểu
bộ kiểm thử (TSM) cho thấy mức giảm rất nhỏ (2% -7%) trong tỷ lệ phát hiện lỗi
Ưu tiên trường hợp kiểm thử (TCP) khắc phục những nhược điểm của cơ chế chọn hoặc giảm bằng cách không loại bỏ các trường hợp kiểm thử Theo TCP, các trường hợp kiểm thử có mức độ ưu tiên cao hơn sẽ được thực hiện sớm hơn trong khi tiến hành kiểm thử Nếu được thực thi, TCP sẽ tiết kiệm thời gian và chi phí và sẽ không trở thành chi phí Ưu tiên trường hợp kiểm thử có thể có hai loại – ưu tiên trường hợp kiểm thử chung và ưu tiên trường hợp kiểm thử cụ thể theo phiên bản Trong
ưu tiên trường hợp kiểm thử chung, sắp xếp thứ tự ưu tiên hữu ích đối với các phiên bản sửa đổi liên tiếp của một chương trình Tuy nhiên, đối với ưu tiên trường hợp kiểm thử cụ thể, sắp xếp thứ tự chỉ có lợi cho một phiên bản cụ thể
Juristo [26] gọi Ưu tiên trường hợp kiểm thử là một cải tiến trong kiểm thử
vì nó có thể được liên kết với bất kỳ công nghệ nào khác để tăng tỷ lệ phát hiện lỗi Trong Ưu tiên trường hợp kiểm thử, các trường hợp kiểm thử được sắp xếp dựa trên một số tiêu chí Mục tiêu của ưu tiên trường hợp kiểm thử có thể đa dạng Nó giống như tăng tỷ lệ phát hiện lỗi hoặc tăng việc nắm bắt các yêu cầu ưu tiên cao hoặc giảm chi phí và thời gian của cơ chế ưu tiên Mặc dù ưu tiên trường hợp kiểm thử chủ yếu được áp dụng cho kiểm thử hồi quy, nó cũng có thể được áp dụng để bảo trì phần mềm hoặc ở giai đoạn kiểm thử ban đầu
1.2.1 Một số nghiên cứu
Phần này sẽ tóm lược ngắn gọn về một số công trình quan trọng liên quan trong lĩnh vực này Có trên dưới 100 công trình nghiên cứu đã công bố xoay quanh việc giải quyết bài toán ưu tiên kiểm thử trong khoảng năm 2001 – 2018 Nhiều nhà nghiên cứu đã giải quyết vấn đề này theo nhiều cách xong liên quan tới hướng nghiên cứu trong bài, luận văn chỉ dừng lại ở các công trình với các kĩ thuật liên quan tới dữ liệu lịch sử có ràng buộc thời gian
Trang 18Chi phí thực hiện trường hợp kiểm thử và mức độ nghiêm trọng cảu lỗi
là yếu tố quan trọng Đo độ hiệu quả dựa trên APFDc
đó
Thực hiện tối ưu các trường hợp kiểm thử không có giải pháp cố định
Kim và Baik
(2010) [30]
FATCP (Ưu tiên trường hợp kiểm thử có nhận thức lỗi)
FATCP vượt trội so với phương pháp bao phủ nhánh và bao phủ câu lệnh
Huang và cộng
sự (2012) [31]
MCCTCP (TCP nhận thức chi phí đã sửa đổi) được sử dụng cho ưu tiên
Sử dụng giải thuật di truyền (GA)
để ưu tiên kiểm thử
Spieker và cộng
sự (2017) [32]
ATCS (TCP sử dụng dữ liệu lịch sử kết hợp ràng buộc thời gian)
Đơn giản, gọn nhẹ cho quy trình CI
Bảng 1.2 Ưu tiên kiểm thử dựa trên ràng buộc thời gian
Tác giả - Năm Kĩ thuật ưu tiên Kết quả
Walcott và cộng
sự (2006) [33]
Nghiên cứu đầu tiên quan tâm tới chi phí thời gian kiểm thử
Các thuật toán dựa trên GA thực hiện rất tốt (cải thiện lên tới 120%)
Alspaugh và Sử dụng giải thuật Hoạt động kiểm thử có thể được
Trang 19(2011) [37]
Nghiên cứu tác động từ chi phí của từng trường hợp kiểm thử riêng rẽ
Lợi ích của việc theo dõi chi phí cho các trường hợp kiểm thử độc lập là cận biên
Có thể nhận thấy hầu hết các nghiên cứu đã tiếp cận và giải quyết bài toán theo hướng dựa vào dữ liệu từ nhiều khía cạnh của kiểm thử phần mềm rồi đưa ra kết quả ưu tiên trường hợp kiểm thử Xét về khía cạnh góc nhìn của người làm kiểm thử độc lập, có một số vấn đề như sau:
Nhiều kĩ thuật được sử dụng phân tích mã nguồn phần mềm để có được các thông tin hữu ích về chức năng, sau đó mới đi vào ưu tiên hóa kiểm thử Trong khi thực tế cán bộ kiểm thử (Tester) không hoặc ít có khả năng tiếp cận mã nguồn
Dữ liệu sử dụng trong các nghiên cứu là dữ liệu độc lập giữa lịch sử thực thi kiểm thử với dữ liệu về ràng buộc thời gian cũng như môi trường thực thi Thực tế hoạt động kiểm thử sẽ được tiến hành song song hoặc ngay lập tức sau khi có bản phát hành phần mềm
Các kỹ thuật sử dụng trên bộ dữ liệu để giải quyết bài toán hầu hết là các kĩ thuật truyền thống và thường giả định rằng ràng buộc thời gian và độ nghiêm trọng của lỗi là đồng nhất
Trang 2019
Từ những nhận xét trên, tác giả đề xuất một dạng bài toán tối ưu kiểm thử có thích nghi phù hợp hơn với bối cảnh kiểm thử độc lập tích hợp vào quy trình phát triển phần mềm liên tục, được gọi là bài toán ưu tiên và chọn lựa kiểm thử thích nghi trình bày sau đây
1.2.2 Bài toán kiểm thử phần mềm
Mô hình toán học
Trong thực tế, thực thi một bộ kiểm thử là một quy trình tốn thời gian, và đòi hỏi nhiều can thiệp thủ công mà ta cần phải ưu tiên và lên lịch để tối ưu hóa việc tìm ra lỗi Trong đó nổi bật một vấn đề sẽ hỗ trợ nhiều trong lên lịch kiểm thử: Chọn bộ trường hợp tiềm năng nhất trong hàng trăm, thậm chí hàng ngàn trường hợp có sẵn khi thực thiện Tích hợp liên tục (Continuous Integration – CI) [38] Bài toán được phát biểu như sau [32]:
Gọi 𝑇𝑖 là bộ trường hợp kiểm thử {𝑡1, 𝑡2, … 𝑡𝑁} ở chu trình 𝑖 Các trường hợp kiểm thử này sẽ được chọn lựa và lên thứ tự gọi là 𝑇𝑆𝑖(𝑇𝑆𝑖 ∈ 𝑇𝑖) Cụ thể hơn,
𝑇𝑆𝑖𝑡ổ𝑛𝑔 là bộ trường hợp kiểm thử đã được sắp xếp thứ tự khi tất cả các trường hợp kiểm thử trong bộ đều sẽ được thực thi (𝑇𝑆𝑖𝑡ổ𝑛𝑔là một hoán vị của 𝑇𝑖) Điểm khác biệt đó là 𝑇𝑆𝑖𝑡ổ𝑛𝑔quan tâm tới thứ tự thực thi các trường hợp còn 𝑇𝑖 thì không
Theo đó, có được hàm xếp hạng: 𝑟𝑎𝑛𝑘: 𝑇𝑆𝑖 → 𝑁 trong đó 𝑟𝑎𝑛𝑘(𝑡) là vị trí của trường hợp 𝑡 trong 𝑇𝑆𝑖
Với mỗi trường hợp kiểm thử, có giá trị 𝑡 𝑘𝑞𝑖 và 𝑡 𝑡𝑔𝑖 Các giá trị này sẽ
có sau khi thực thi kiểm thử Để đơn giản:
𝑡 𝑘𝑞𝑖 = {1 𝑛ế𝑢 𝑡𝑖 == 𝑝𝑎𝑠𝑠𝑒𝑑
0 𝑛ế𝑢 𝑡𝑖 == 𝑓𝑎𝑖𝑙𝑒𝑑 𝑜𝑟 𝑠𝑘𝑖𝑝𝑝𝑒𝑑
(1)
Ở đây các trường hợp có kết quả là failed (thất bại), kí hiệu 𝑇𝑆𝑖𝑓𝑎𝑖𝑙 = {𝑡 ∈
𝑇𝑖|𝑡 𝑘𝑞𝑖 = 0} sẽ được quan tâm hơn cả do việc kiểm thử thất bại khả năng cao đến
Trang 21𝑄𝑖(𝑇𝑆𝑖) = 1
|𝑇𝑆𝑖|∑𝑡∈𝑇𝑆𝑖𝑞(𝑡) Cách chọn Q sẽ dựa theo thuật toán học, trình bày cụ thể trong mục 2.2.4
Bài toàn ưu tiên và lựa chọn kiểm thử thích nghi
Mục đích của bất cứ bài toán gợi ý kiểm thử nào cũng đều là tìm ra một trật tự tối ưu cho các trường hợp kiểm thử sao cho khi thực thi phát hiện ra lỗi sớm nhất có thể khi thực hiện kiểm thử hồi quy
Cụ thể, [39] phát biểu thành: Bài toán ưu tiên trường hợp kiểm thử (Test
Case Prioritization Problem - TCP)
Gọi 𝑇𝑆𝑖 là bộ kiểm thử, 𝑃𝑇 là tất cả các chỉnh hợp của 𝑇𝑆𝑖 với 𝑄𝑖 là hiệu
năng, thì bài toán TCP đi tìm 𝑇𝑆′𝑖 là một chỉnh hợp mà 𝑄𝑖(𝑇𝑆′𝑖) là tối đa Nói cách
khác, TCP đi tìm 𝑇𝑆′𝑖, ∀𝑇𝑆𝑖 ∈ 𝑃𝑇|𝑄𝑖(𝑇𝑆′𝑖) ≥ 𝑄𝑖(𝑇𝑆𝑖)
Đây là nền tảng để xây dựng bài toán mở rộng có quan tâm tới ràng buộc thời gian cho việc thực thi kiểm thử Dễ hiểu, bởi tất cả trường hợp sẽ không được thực thi hết khi có giới hạn thời gian Trên thực thế, việc thực thi kiểm thử còn bị ràng buộc bởi nhiều yếu tố khác chứ không phải chỉ riêng thời gian Tuy nhiên, công thức trình bày dưới hoàn toàn có thể được tùy biến dễ dàng
Bài toán ưu tiên trường hợp kiểm thử giới hạn thời gian (Time-limited Test
Case Prioritization Problem - TTCP)
Trang 2221
Gọi 𝑀 là thời gian tối đa để thực thi kiểm thử, thì TTCP đi tìm 𝑇𝑆𝑖 với 𝑄𝑖
là tối đa trong khi tổng thời gian thực hiện nhỏ hơn 𝑀 Nói cách khác, cần đi tìm
Bài toán lựa chọn trường hợp kiểm thử thích nghi (Adaptive
Test Case Selection Problem – ATCS)
Gọi 𝑇𝑆1, … 𝑇𝑆𝑖−1 là tập hợp các bộ kiểm thử đã được thực thi trước đó Bài
toán ATCS đi tìm 𝑇𝑆𝑖 sao cho 𝑄𝑖(𝑇𝑆𝑖) tối đa trong khi ∑𝑡𝑘∈𝑇𝑆𝑖𝑡 𝑡𝑔𝑘 nằm trong giới hạn 𝑀
Như vậy, ATCS là một bài toán tối ưu lấy ý tưởng từ việc ưu tiên các
trường hợp kiểm thử có ràng buộc thời gian, lựa chọn và đánh giá hiệu năng mà chỉ dựa trên kết quả thực thi trong quá khứ
Trong kiểm thử liên tục, ta thường xuyên bắt gặp dữ liệu kiểm thử chưa đủ
để xây dựng mô hình học máy có giám sát Trong tình huống đó, việc sử dụng học tăng cường là hết sức thích hợp khi có thể bắt đầu từ rất ít dữ liệu và để mô hình tự khám phá ra quy luật bằng việc học trong quá trình tiếp tục kiểm thử
1.3 Tổng kết chương
Chương này đã trình bày các kiến thức cơ bản về kiểm thử trong ngành công nghiệp phần mềm, kiểm thử tự động, các xu hướng trong kiểm thử tự động đang được ứng dụng rộng rãi Phần cuối đi vào cụ thể hóa một bài toán hỗ trợ và tối ưu
Trang 2322
hóa việc kiểm thử qua việc ưu tiên hóa và lựa chọn trường hợp khi thực thi hoạt động kiểm thử trong Tích hợp liên tục và các nghiên cứu liên quan Từ đó người viết đề xuất bài toán và xây dựng mô hình cho bài toán tối ưu hóa kiểm thử
Trang 242.1 Môi trường thu thập và tiền xử lí dữ liệu
Môi trường kiểm thử, đặc biệt là kiểm thử hồi quy thường độc lập với môi trường phát triển phần mềm và chỉ lưu trữ các thông tin liên quan tới đặc tả yêu cầu chức năng, được chuyển thành các điều kiện đầu vào kiểm thử và kết quả đầu ra cùng các dữ liệu lịch sử
Dữ liệu kiểm thử cho nghiên cứu luận văn này lấy từ dữ liệu lịch sử kiểm thử
ABB Robotics Norway, Paint Control [40], là kết quả kiểm thử rô bốt công nghiệp phức tạp và dữ liệu về kiểm thử hệ thống Rails của Travis CI [41] Quá trình thu
thập dữ liệu được diễn tả trong Hình 2.1 Cụ thể thực nghiệm và kết quả trên bộ dữ liệu sẽ được trình bày trong Chương 4
Dữ liệu Paint Control: Dữ liệu kết quả kiểm thử cho 300 vòng CI, đã tiền
xử lí và chiết xuất
Dữ liệu Travis CI: Dữ liệu cho 2000 vòng CI, chưa tiền xử lí
Trang 2524
Hình 2.1 Quy trình thu thập dữ liệu
Các dữ liệu này hầu như là dữ liệu hộp đen, tức là chúng chỉ chứa các thông tin
về việc kiểm thử khi thích hợp CI mà không chỉ rõ kiểm thử cho sự thay đổi nào trong mã nguồn, kiểm thử cho mô đun nào Vì thế việc tiền xử lí và chiết xuất thông tin từ dữ liệu là rất quan trọng
2.1.1 Thu thập và tiền xử lí
Việc thu thập dữ liệu có thể được diễn tả như sau Mỗi lần có phiên bản mới của phần mềm, một bộ trường hợp kiểm thử sẽ được chọn và chạy càng nhiều càng tốt rồi lưu lại và tổng hợp kết quả trong trên một hệ thống chung Bước đầu tiên của việc thu thập dữ liệu đó là phân tích dữ liệu tổng hợp này và tìm các phần liên quan tới kết quả kiểm thử có thể sử dụng Dữ liệu thô thực tế chứa rất nhiều thông tin liên quan như mã kiểm thử, thời gian, mã bản phát hành,… nhưng chỉ những trường liên quan tới nghiên cứu được dữ lại Lưu ý rằng dữ liệu ghi lại lịch sử cho từng trường hợp kiểm thử sẽ cần phải được chiết xuất riêng (trình bày sau)
Bảng 2.1 Dữ liệu kiểm thử thô
Dữ liệu kiểm thử Tên bộ kiểm thử Thời gian
thực hiện trường Số
Mã bản
Tình trạng
Trang 2625
hợp thất bại
Bảng 2.2 Thông tin chung về bộ dữ liệu
Bộ dữ liệu Số trường hợp kiểm thử Số vòng CI Kết quả Tỉ lệ thất bại
2.1.2 Phân tích đặc trưng dữ liệu
Dữ liệu thô đã thu thập trên cần được chiết xuất thông tin cần thiết để đưa vào
mô hình, cụ thể là dữ liệu lịch sử của các trường hợp kiểm thử và chỉ sử dụng các trường hợp chạy đã có lịch sử
Trang 277 limit: hằng số giới hạn chiều dài lịch sử gần nhất
8 function accumulation_result(T, limit):
Trang 281.6 limit: hằng số giới hạn chiều dài lịch sử tối thiểu
1.7 function test_filter(L, limit):
2.2.1 Quy trình Markov
Bài toán tối ưu hóa kiểm thử, cũng như nhiều bài toán trong thực tiễn, có thể
đưa về việc giải một quy trình quyết định Markov (Markov Decision Process -
MDP) [42] MDP là một mô hình toán học để tối ưu hóa việc ra quyết định với điều
Trang 2928
kiện không chắc chắn Nó được cụ thể hóa trong một môi trường, trong đó mục đích của máy là đạt tới trạng thái mong muốn
Định nghĩa 2.1 Markov Decision Process – MDP: là một quá trình ngẫu nhiên
thời gian rời rạc (stochastic process) định nghĩa bởi một bộ 𝑴 = 〈𝑺, 𝑨, 𝑷, 𝑹, 𝜸〉, trong đó:
Định nghĩa 2.2 Markov Property: Hàm 𝑷: (𝑺 × 𝑨) → 𝑺 có tính chất Markov nếu:
𝑃(𝑠𝑡+1|𝑠𝑡, 𝑎𝑡, 𝑠𝑡−1, … , 𝑠0) = 𝑃(𝑠𝑡+1|𝑠𝑡, 𝑎𝑡) (1) MDP là một quy trình ngẫu nhiên, vì thế, việc chuyển từ trạng thái 𝑠 sang trạng thái tiếp theo 𝑠′ chỉ có thể xảy ra với xác suất 𝑃(𝑠′|𝑠, 𝑎)
Mỗi phần thưởng đều được đánh trọng số với 𝛾, gọi là hệ số giảm trừ (discount
factor) Về mặt toán học thuận tiện để giảm giá phần thưởng vì nó tránh được vô
hạn trong quy trình Markov theo chu kỳ Bên cạnh đó, hệ số giảm trừ có nghĩa là càng ở trong tương lai thì phần thưởng càng trở nên ít quan trọng, bởi vì tương lai thường không chắc chắn
Trang 3029
Trong bài toán tối ưu hóa kiểm thử, đây là một bài toán MDP trong đó bộ 𝑀 sẽ
được giải thích cụ thể trong mục 3.2 Mô hình chính đằng sau việc giải quyết bài toán MDP sử dụng RL đó chính là việc học liên tục thông qua kết hợp việc khám phá (tìm ra trạng thái và hành động nào dẫn đến phần thưởng) và khai thác (cập nhật chiến lược của máy để nâng cao phần thường dự đoán trong tương lai xa)
2.2.2 Học máy tăng cường
Học tăng cường (Reinforement Learning - RL) là một lĩnh vực về các phương pháp và vấn đề học máy dựa trên ý tưởng học từ phần thưởng dạng tính toán mà máy có được qua tương tác với môi trường [43]
Như vậy, máy trong RL không có sự giám sát và không biết thông tin về môi trường Theo đó, máy vừa phải khám phá vừa phải khai thác kiến thức của nó.Trong mỗi bước, máy quan sát trạng thái của môi trường và sẽ nhận được tín hiệu phần thưởng Dựa trên trạng thái hiện tại và hàm điều khiển hành động của hệ thống – hay còn gọi là chiến lược – hệ thống sẽ chọn hành động để thực hiện
Hành động này sau đó được đưa vào môi trường, cập nhật và vòng lặp lại Chi tiết thể hiện trong Hình 2.2 [43]
Hình 2.2 Tương tác giữa hệ thống và môi trường
Trang 31Trong luận văn này tập trung vào phương pháp không dựa mô hình đã chứng
tỏ được hiệu năng cao trên nhiều bài toán khác nhau [44] [45]
Để có thể cập nhật được chiến lược, ta có khái niệm hàm giá trị Một hàm
giá trị đánh giá môi trường với chiến lược nhất định là tốt tới đâu, hay là phần thưởng ta có thể nhận được trong tương lai nếu làm đúng theo chiến lược trong môi trường cụ thể đó
Hàm trạng thái-giá trị 𝑣𝜋(𝑠) cho chiến lược 𝜋 trong trạng thái 𝑠 được định nghĩa như sau: [43]
Tương tự, một hàm hành động-giá trị xác định giá trị của việc thực hiện
hành động 𝑎 trong trạng thái 𝑠 sử dụng chiến lực 𝜋 như sau, và đây chính là hàm giá trị Q: