Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
1,1 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ YÊN CÁCKỸTHUẬTTRONGKIỂMTHỬDÒNGDỮLIỆUTĨNH LUẬN VĂN THẠC SĨ KỸTHUẬT PHẦN MỀM Hà Nội - 2016 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ YÊN CÁCKỸTHUẬTTRONGKIỂMTHỬDÒNGDỮLIỆUTĨNH Ngành: Công nghệ thông tin Chuyên ngành: Kỹthuật phần mềm Mã số: 6048103 LUẬN VĂN THẠC SĨ KỸTHUẬT PHẦN MỀM NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Đặng Văn Hưng Hà Nội - 2016 LỜI CAM ĐOAN Tôi xin cam đoan: Những kết nghiên cứu trình bày luận văn hoàn toàn trung thực, tôi, không vi phạm điều luật sở hữu trí tuệ pháp luật Việt Nam Nếu sai, hoàn toàn chịu trách nhiệm trước pháp luật TÁC GIẢ LUẬN VĂN Nguyễn Thị Yên MỤC LỤC Trang LỜI CAM ĐOAN MỤC LỤC DANH MỤC CÁCKÝ HIỆU VIẾT TẮT DANH MỤC CÁC HÌNH DANH MỤC CÁC BẢNG MỞ ĐẦU Chương 1: TỔNG QUAN VỀ KIỂMTHỬ PHẦN MỀM VÀ KIỂMTHỬTĨNH 1.1 Khái quát Kiểmthử phần mềm 1.1.1 Định nghĩa Kiểmthử phần mềm 1.1.2 Qui trình phát triển phần mềm RUP 10 1.1.3 Các mức kiểmthử phần mềm 11 1.1.4 Ca kiểmthử phương pháp thiết kế ca kiểmthử 13 1.1.5 Các ý tưởng không kiểmthử 14 1.1.6 Các hạn chế việc kiểmthử 14 1.2 Khái quát Kiểmthửtĩnh 15 1.2.1 Định nghĩa Kiểmthửtĩnh 15 1.2.2 Phân loại kỹthuậtkiểmthửtĩnh 15 1.2.3 Sơ lược kỹthuậtkiểmthửtĩnh 16 1.3 Kết luận 17 Chương 2: PHƯƠNG PHÁP KIỂMTHỬDÒNGDỮLIỆUTĨNHTRONGKIỂMTHỬ PHẦN MỀM 18 2.1 Phương pháp kiểmthửdòngliệutĩnh 18 2.1.1 Ý tưởng phương pháp 18 2.1.2 Các vấn đề bất thường dòngliệu 19 2.1.3 Phương pháp kiểmthửdòngliệutĩnh 22 2.2 Kết luận 34 Chương 3: ỨNG DỤNG LOGIC HOARE TRONGKIỂMTHỬ PHẦN MỀM 35 3.1 Đặt vấn đề 35 3.2 Tổng quan Logic Hoare 35 3.3 Ứng dụng Logic Hoare kiểmthử phần mềm 40 3.3.1 Sơ lược kỹthuậtkiểmthử dựa kịch dòngliệu 41 3.3.2 Ký hiệu sử dụng Logic Hoare 44 3.3.3 Kỹthuật kết hợp Logic Hoare với kỹthuậtkiểmthử dựa kịch dòngliệu - Phương pháp TBFV 45 3.4 Áp dụng phương pháp TBFV 46 3.4.1 Áp dụng cho đoạn chương trình 46 3.4.2 Áp dụng cho việc gọi phương thức 48 3.4.3 Các nghiên cứu liên quan 50 3.5 Kết luận 50 KẾT LUẬN VÀ KIẾN NGHỊ 52 Kết luận 52 Kiến nghị 52 TÀI LIỆU THAM KHẢO 53 DANH MỤC CÁCKÝ HIỆU VIẾT TẮT TT Viết tắt Đầy đủ Diễn giải Kỹthuật chứng minh hình thức dựa kiểmthử TBFV Testing - Based Formal Verification RUP Rational Unified Process Qui trình phát triển phần mềm DU-path Definition Use path Đường dẫn định nghĩa sử dụng FSF Functional Scenario Form Hình thức kịch chức SOFL Structured ObjectOriented Formal Language Ngôn ngữ hình thức hướng đối tượng cấu trúc 5 DANH MỤC CÁC HÌNH Trang Hình 1.1: Qui trình phát triển phần mềm RUP 10 Hình 1.2: Các mức kiểmthử phần mềm 12 Hình 1.3: Minh họa Kiểmthử hộp trắng hộp đen 14 Hình 1.4: Phân loại kỹthuậtkiểmthửtĩnh 16 Hình 2.1: Tuần tự câu lệnh có vấn đề thuộc loại 19 Hình 2.2: Tuần tự câu lệnh có vấn đề thuộc loại 20 Hình 2.3: Sơ đồ chuyển trạng thái biến 21 Hình 2.4: Đồ thị dòngliệu cho chương trình Example 25 Hình 2.5: Ví dụ đường DU (DU-path) 28 Hình 2.6: Ví dụ đường dẫn – du mà đường dẫn – dc 28 Hình 2.7: Các độ đo Rapps-Weyuker 30 Hình 2.8: Đồ thị hàm Example sau phân mảnh 33 Hình 2.9: Program slice lưới 33 DANH MỤC CÁC BẢNG Trang Bảng 1.1: Tổng hợp kiểmthử hộp đen hộp trắng sử dụng mức kiểmthử 14 Bảng 2.1: Nút sử dụng nút định nghĩa cho biến totalPrice 28 Bảng 2.2: Nút sử dụng nút định nghĩa cho biến price 28 Bảng 3.1: Ví dụkiểmthử 43 MỞ ĐẦU Chúng ta chứng kiến tăng trưởng đáng kinh ngạc ngành công nghiệp phần mềm vài thập kỷ qua Nếu trước phần mềm máy tính sử dụng để tính toán khoa học kỹthuật xử lý liệu ngày ứng dụng vào mặt đời sống hàng ngày người, từ ứng dụng nhỏ để điều khiển thiết bị dùng gia đình thiết bị nghe nhìn, điện thoại, máy giặt, lò vi sóng, nồi cơm điện, đến ứng dụng lớn trợ giúp điều khiển phương tiện hệ thống giao thông, trả tiền cho hóa đơn, quản lý toán tài chính, Vì người ngày phụ thuộc chặt chẽ vào sản phẩm phần mềm đòi hỏi chất lượng sản phẩm phần mềm tăng, giá thành hạ, sử dụng dễ dàng, an toàn tin cậy Kiểmthử có phương pháp hoạt động thiếu quy trình sản xuất phần mềm để đảm bảo yếu tố chất lượng nêu sản phẩm phần mềm Theo thống kê việc kiểmthử tiêu tốn khoảng 50% thời gian 50% giá thành dự án phát triển phần mềm Tăng suất kiểmthử nhu cầu thiết yếu để tăng chất lượng phần mềm Từ lý nên em chọn đề tài: “Các kỹthuậtkiểmthửdòngliệu tĩnh” Mục tiêu đề tài: Nghiên cứu Tổng quan kiểmthử phần mềm để nắm kiến thức phục vụ cho nghiên cứu Sau nghiên cứu Tổng quan phương pháp kiểmthử phần mềm kiểmthửdòngliệutĩnh Tiếp theo nghiên cứu ứng dụng Logic Hoare kiểmthử phần mềm, cụ thể: nghiên cứu kỹthuật kết hợp Logic Hoare với kỹthuậtkiểmthử dựa kịch dòngliệu áp dụng kỹthuật kết hợp vào kiểmthử đoạn chương trình Cấu trúc luận văn chia thành chương cụ thể sau: Chương 1: Tổng quan Kiểmthử phần mềm kiểmthử phần mềm tĩnh Trình bày khái niệm liên quan đến lĩnh vực Kiểmthử phần mềm khái niệm kiểmthử phần mềm, vai trò Kiểmthử phần mềm, mức độ kiểmthử phần mềm Đồng thời trình bày khái quát kiểmthử phần mềm tĩnh Chương 2: Phương pháp kiểmthửdòngliệutĩnhkiểmthử phần mềm Trình bày cách phân loại kiểmthửdòngliệutĩnh trình bày sơ lược số kỹthuậtkiểmthửdòngliệutĩnh Chương 3: Ứng dụng Logic Hoare kiểmthử phần mềm Trình bày tổng quan Logic Hoare kỹthuậtkiểmthử dựa kịch dòngliệu Sau trình bày kỹthuậtkiểmthử phần mềm kết hợp Logic Hoare kỹthuậtkiểmthử dựa kịch dòngliệu để nâng cao hiệu cho kỹthuậtkiểmthử phần mềm dựa kịch dòngliệu Cuối ứng dụng phương pháp kết hợp vào kiểmthử đoạn chương trình Để hoàn thành luận văn, em xin gửi lời cảm ơn tới thầy cô Khoa Công nghệ thông tin - Trường Đại học Công nghệ tận tình giảng dạy, cung cấp nguồn kiến thức quý giá suốt trình học tập Đặc biệt em xin chân thành cảm ơn thầy giáo TS Đặng Văn Hưng tận tình hướng dẫn, góp ý, tạo điều kiện cho em hoàn thành luận văn 40 m – (i+1) < V Dễ dàng chứng minh: giả thiết m - i -1 < V m - (i+1) < V giả thiết định nghĩa < luật số học Cuối cần chứng minh hậu điều kiện không thay đổi thoát khỏi lặp không biến đổi Chúng ta có gợi ý điều chọn lặp không biến đổi Tuy nhiên, cần miêu tả nhiệm vụ chứng minh cách hình thức: r = nm Chúng ta cần chứng minh sau: r = nm giả thiết thay i m theo giả thiết 3.3 Ứng dụng Logic Hoare kiểmthử phần mềm Chúng ta biết Logic Hoare sử dụng để chứng minh xác chương trình kiểmthử cách sử dụng thực tế để phát lỗi chương trình Tuy nhiên việc sử dụng Logic Hoare áp dụng thực tế kiểmthử khó phát tất lỗi xuất chương trình Do vậy, phần luận văn trình bày kỹthuật kết hợp Logic Hoare với kỹthuậtkiểmthử dựa kịch dòngliệu để nâng cao khả phát lỗi cho kỹthuậtkiểmthử dựa kịch dòngliệu Ý tưởng kết hợp sau: sử dụng kỹthuậtkiểmthử dựa kịch dòngliệu để tìm tất đường dẫn chương trình sau sử dụng Logic Hoare để chứng minh xác tất đường dẫn chương trình Trong trình chứng minh, tất lỗi đường dẫn chương trình phát Để thuận tiện cho việc trình bày, dây luận văn trình bày dạng ký hiệu tóm tắt kỹthuậtkiểmthử dựa kịch dòngliệu Logic Hoare để làm tảng cho việc trình bày kỹthuật kết hợp Logic Hoare với kỹthuậtkiểmthử dựa kịch dòngliệu 41 3.3.1 Sơ lược kỹthuậtkiểmthử dựa kịch dòngliệuKỹthuậtkiểmthử dựa kịch dòngliệu phương pháp kiểmthử dựa đặc tả, sử dụng tiền điều kiện hậu điều kiện việc tạo ca kiểmthử [16] Áp dụng nguyên lý “chia trị” kỹthuậtkiểmthử dựa kịch dòngliệu coi đặc tả kịch dòngliệu tách biệt tạo tập kiểmthử phân tích kết kiểmthử dựa kịch dòngliệu Một kịch dòngliệu dạng đặc tả kiểu pre-post biểu thức logic mà thể cách rõ ràng điều kiện sử dụng để ràng buộc đầu đầu vào thỏa mãn điều kiện Cụ thể, cho S(Siv, Sov)[Spre, Spost] ký hiệu đặc tả toán tử S, Siv tập tất biến đầu vào, giá trị không thay đổi toán tử S, Sov tập tất biến đầu ra, giá trị sinh cập nhật toán tử S, Spre Spost tương ứng tiền điều kiện hậu điều kiện Đặc điểm kiểu đặc tả hậu điều kiện Spost sử dụng để miêu tả mối quan hệ trạng thái khởi tạo trạng thái cuối Chúng ta giả thiết hậu điều kiện biến ~x sử dụng để biểu thị giá trị khởi tạo biến x trước áp dụng toán tử, tức x sử dụng biểu diễn giá trị cuối x sau áp dụng toán tử Do vậy, Tất nhiên, Siv chứa tất biến đầu vào khai báo tham số đầu vào Sov gồm tất biến đầu khác khai báo tham số đầu Một chiến lược thực tế cho tạo ca kiểmthử để thực thi hành vi mong muốn tất kịch dòngliệu dẫn từ đặc tả thiết lập dựa khái niệm kịch dòngliệu Để miêu tả xác chiến lược này, cần giới thiệu kịch dòngliệu Định nghĩa 1: Cho Spost C1 D1 C2 D2 Cn Dn , Ci i 1,, n tiên đề, gọi “guard condition”, không chứa biến đầu Sov; Di “defining condition” mà chứa biến đầu Sov Khi đó, kịch dòngliệu fs S kết nối ~Spre Ci Di biểu thức (~Spre C1 D1 ) )(~Spre C2 D2 ) (~Spre Cn Dn ) ) gọi kịch dòngliệu S Tiền điều kiện ~Spre = Spre(~ ) ký hiệu kết dự đoán từ việc thay trạng thái khởi tạo ~ thành trạng thái cuối tiền điều kiện Spre Chúng ta coi kết nối ~Spre Ci Di kịch dòngliệu 42 định nghĩa hành vi độc lập: ~Spre Ci thỏa mãn trạng thái khởi tạo, trạng thái cuối (hoặc biến đầu ra) định nghĩa defining condition Di Sự kết nối ~Spre Ci biết điều kiện kiểmthử kịch ~Spre Ci Di , phục vụ hệ số cho việc tạo ca kiểmthử từ kịch dòngliệu Để hỗ trợ việc tạo ca kiểmthử cách tự động từ kịch dòng liệu, bước quan trọng lấy FSF từ đặc tả có sẵn Một thủ tục chuyển có tính hệ thống, thuật toán, công cụ phần mềm hỗ trợ cho việc dẫn FSF từ đặc tả kiểu pre-post phát triển nghiên cứu [17] Tạo ca kiểmthử dựa đặc tả sử dụng phương pháp sinh ca kiểmthử dựa kịch dòngliệu thực việc tạo ca kiểmthử dựa đặc tả từ tất kịch dòngliệu phương pháp sinh ca kiểmthử dựa kịch dòngliệu Việc tạo ca kiểmthử từ kịch dòngliệu thực việc tạo ca kiểmthử từ điều kiện kiểmthử kịch dòngliệuTrong nghiên cứu [16] tập tiêu chuẩn cho việc sinh ca kiểmthử định nghĩa chi tiết Để áp dụng KỸTHUẬT DỰA VÀO KỊCH BẢN DÒNGDỮLIỆU cách hiệu quả, FSF đặc tả phải thỏa mãn điều kiện well-formed định nghĩa Định nghĩa 2: Cho FSF đặc tả S (~Spre C1 D1 ) (~Spre C2 D2 ) (~Spre Cn Dn ) Nếu S i, j1,,n i j Ci C j false ( S ~ thỏa pre mãn điều kiện C1 C2 Cn true ), S gọi well-formed Well-formed đặc tả S đảm bảo kịch dòngliệu định nghĩa hàm độc lập guard condition bao hoàn toàn lĩnh vực giới hạn cách đầy đủ Do vậy, đầu vào thỏa mãn tiền điều kiện, S đảm bảo để định nghĩa đầu thỏa mãn defining condition kịch dòngliệu Với giả thiết S well-formed, tập trung vào sinh ca kiểmthử từ kích chức đơn, ~Spre Ci Di , thời điểm sử dụng phương pháp Khi ca kiểmthử sử dụng để chạy chương trình Chúng ta sử dụng toán tử ChildFareDiscount Chức ChildFareDiscount sử dụng ngôn ngữ đặc tả SOFL [15] tương tự VDM-SL cho đặc tả toán tử Process ChildFareDiscount(a: int, n_f: int) a_f: int Pre a > and n_f > 43 Post (a > 12 => a_f == n_f) and (a 12 => a_f == n_f – n_f * 0.5) End_process Đặc tả miêu tả đầu vào a (đại diện cho age) phải lớn n_f (normal_fare) phải lớn Khi a lớn 12, đầu a_f (actual_fare) n_f; ngược lại, a_f giảm bớt 50% n_f Theo thuật toán báo cáo nghiên cứu [4], có ba kịch dòngliệu dẫn từ đặc tả này: (1) a > and n_f > and a > 12 and a_f = n_f (2) a > and n_f > and a 12 and a_f = n_f – n_f*0.5 (3) a or n_f and anything Bảng 3.1: Ví dụkiểmthử Ca kiểm thử: a = 5, n_f = Điều kiện kiểm thử: a > and n_f > and a 12 Kịch dòng liệu: a > and n_f > and a 12 and a_f = n_f – n_f * 0.5 Ở anything nghĩa điều xảy tiền điều kiện bị vi phạm Giả thiết đặc tả viết lại theo chương trình (giống Java): (1) (2) (3) (4) (5) (6) (7) int ChildFareDiscount (int a, int n_f) { If (a > && n_f > 1) { if (a > 12 a_f:= n_f; else a_f:= n_f **2 – n_f – n_f *0.5; return a_f;} else System.out.println(“precondition bị vi phạm”); } Ở ký tự “:=” sử dụng toán tử gán để phân biệt từ ký tự “=” sử dụng đặc tả Hiển nhiên, dẫn đường dẫn đây: [(1)(2)(3)(5)], [(1)(2)’(4)(5)], [(1)’(6)] Trong đường dẫn [(1)(2)’(4)(5)], (2)’ nghĩa thỏa hiệp điều kiện a > 12 (tức a 12), tương tự cách hiểu áp dụng tới (1)’ đường dẫn [(1)’(6)] Chúng ta chèn thêm số khuyết phép gán a_f = n_f **2 – n_f – n_f * 0.5 (chính xác a_f = n_f – n_f * 0.5), n_f **2 nghĩa n_f mũ (tức n_f ) 44 Điểm yếu phương pháp kiểmthử tìm thấy có mặt lỗi không tìm thấy vắng mặt lỗi Ví dụ, sinh ca kiểm thử, {(a, 5), (n_f, 2)}, từ điều kiện kiểmthử a > and n_f > and a 12 kịch dòngliệu (2), minh họa Bảng 3.1 Thực thi chương trình với ca kiểmthử này, đường dẫn [(1)(2)’(4)(5)] qua Kết thực thi a_f = 2**2 – – 2*0.5 = Kết không có sẵn lỗi điều kiện kiểmthử a > and a_f > and a 12 thỏa mãn ca kiểm thử, defining condition a_f = n_f – n_f * 0.5 thỏa mãn đầu a_f = (vì = – 2*0.5 true), mà chứng minh mà ca này, chương trình thực kịch dòngliệu cách xác Nhưng đường dẫn lạ chứa lỗi Một giải pháp cho vấn đề thực thi chứng minh dựa Logic Hoare để kiểm tra đường dẫn xác với kịch dòngliệu Chứng minh xác mong muốn tự động cách hoàn toàn phép tích hợp kỹthuật vào kỹthuậtkiểmthử dựa kịch dòngliệu Để hiểu hơn, cần giới thiệu vắn tắt tiên đề gán Logic Hoare 3.3.2 Ký hiệu sử dụng Logic Hoare Chúng ta biết, Logic Hoare xây dựng dựa logic tiên đề cung cấp tập tiên đề để định nghĩa ngữ nghĩa ngôn ngữ lập trình Với cấu trúc chương trình, hệ quả, lựa chọn lặp tiên đề cho việc định nghĩa, ngữ nghĩa định nghĩa Các tiên đề sử dụng để lý giải xác chương trình viết ngôn ngữ lập trình Cho x:= E phép gán: gán kết đánh giá biểu thức E tới biến x Tiên đề cho phép gán là: QE xx : EQ Biểu thức thể phép gán x:=E xác với post-assertion Q dẫn từ pre-assertion QE x , kết dự đoán từ việc thay E cho tất xảy x Q Post-assertion Q biểu diễn điều kiện mà phải thỏa mãn biến x sau thực thi phép gán (phép gán coi toán tử cập nhật biến x) Để tạo post-condition Q true sau thực thi, biểu thức E phải thỏa mãn Q trước thực thi, là, QE x true, x biểu diễn E sau thực thi 45 3.3.3 Kỹthuật kết hợp Logic Hoare với kỹthuậtkiểmthử dựa kịch dòngliệu - Phương pháp TBFV Kỹthuật kết hợp Logic Hoare với kỹthuậtkiểmthử dựa kịch gọi kỹthuật chứng minh hình thức dựa kiểmthử (Testing - Based Formal Verification, viết tắt là: TBFV) Kỹthuật TBFV kỹthuật sử dụng để chứng minh xác đường dẫn chương trình mà đường dẫn xác định kỹthuật dựa vào kịch dòngliệu Nguyên lý kỹthuật TBFV gồm có ba điểm sau: - Sử dụng kỹthuật dựa kịch dòngliệu sinh ca kiểmthử thích hợp để xác định tất đường dẫn xuất (representative paths) chương trình kiểm thử; đường dẫn sử dụng ca kiểmthử Repesentative path hình thành cách thực lặp cấu trúc if-then-else để đảm bảo phần thân lặp thực lần lặp kết thúc, cách thực tất cấu trúc khác giống hình thức gốc chúng - Cho ~Spre Ci Di (i = 1, …, n) ký hiệu kịch chức ca kiểmthử t sinh từ điều kiện kiểmthử ~Spre Ci Cho p sc1 , sc ,, sc m đường dẫn chương trình, scj (j = 1,…, m) gọi đoạn chương trình, định (tức dự đoán), phép gán, lệnh “return”, lệnh in Giả thiết đường dẫn p sử dụng ca kiểmthử t Để chứng minh xác p với kịch dòng liệu, hình thành ba đường dẫn (path triple) {~Spre}p{Ci Di} Bộ ba đường dẫn giống như cấu trúc ba Hoare, thay đổi thành đường dẫn đơn chương trình Điều có nghĩa tiền điều kiện ~Spre chương trình true trước đường dẫn p thực thi, hậu điều kiện Ci Di đường dẫn p true kết thúc p - Áp dụng lặp lặp lại tiên đề phép gán (hoặc tiền đề) cung cấp cho câu lệnh liên quan khác, dẫn pre-assertion, kí hiệu ppre, để hình thành biểu thức đây: {~Spre(~x/x)} {ppre(~x/x)} p {Ci Di(~x/x)} Ở ~Spre(~x/x), ppre(~x/x) Ci Di(~x/x) tương ứng kết dự đoán tương ứng từ việc thay biến đầu vào ~x tương ứng cho biến đầu 46 vào x dự đoán Các thay cần thiết để loại bỏ xung đột biến đầu vào biến cập nhật bên Cuối cùng, ~Spre(~x/x) ppre(~x/x) chứng minh có nghĩa lỗi xuất đường dẫn; ngược lại xuất lỗi đường dẫn Tiên đề cho lệnh liên quan khác định liên quan khác đưa sau: QS Q Ở S ba loại phân đoạn chương trình: lệnh định, lệnh “return” lệnh in Tiên đề miêu tả tiền điều kiện hậu điều kiện cho ba loại phân đoạn chương trình không phân đoạn chương trình thay đổi trạng thái Chúng ta gọi tiên đề tiên đề cho phân đoạn không thay đổi Chúng ta thấy ứng dụng tiên đề phép gán phân đoạn không thay đổi gồm có thao tác tay theo cú pháp, dẫn từ pre-assertion ppre(~x/x) thực cách tự động, ẩn ý chứng minh cách hình thức ~Spre(~x/x) ppre(~x/x), viết đơn giản sau ~ Spre ppre báo cáo này, thực cách tự động, chí với hỗ trợ chứng minh lý thuyết, phụ thuộc vào độ phức tạp ~ Spre ppre Nếu thu cách tự động đầy đủ theo ưu tiên cao nhất, chứng minh hình thức ẩn ý “thay thế” ca kiểmthử Đó là, sinh giá trị mẫu cho biến ~Spre ppre, đánh giá chúng xem ppre false ~Spre true Nếu điều true, nói đường dẫn chứng minh chứa lỗi Do kỹthuậtkiểmthử có sẵn báo [16, 19] nên không cần trình bày lại chi tiết luận văn 3.4 Áp dụng phương pháp TBFV 3.4.1 Áp dụng cho đoạn chương trình Để thử nghiệm phương pháp TBFV, đoạn tác giả luận văn trình bày nghiên cứu áp dụng phương pháp TBFV để kiểmthử chứng minh đoạn chương trình IC card system (hệ thống thẻ IC) cho JR commute train service (dịch vụ tàu điện chuyển mạch JR) Tokyo Qua thử nghiệm thấy phương pháp TBFV sử dụng hiệu phương pháp đối diện vài thách thức vài giới hạn mà cần giải nghiên cứu 47 Hệ thống thẻ IC thiết kế để cung cấp dịch vụ chức sau: (1) Điều khiển truy cập đến thoát từ trạng thái đường ray, (2) Mua vé sử dụng thẻ IC, (3) Nạp thẻ IC tiền mặt thông qua tài khoản ngân hàng, (4) Mua vé lại khoảng thời gian (thời gian tháng ba tháng) Do giới hạn thời gian, tác giả trình bày chi tiết tất cả, tác giả lấy hoạt động bên sử dụng hệ thống thẻ IC, gọi ChildFareDiscount trình bày trên, làm ví dụ để minh họa cách phương pháp TBFV áp dụng Chương trình ChildFareDiscount chứa ba đường dẫn, cần chứng minh hình thức ba đường dẫn Do trình chứng minh cho ba đường dẫn giống nên tác giả cần chứng minh đường dẫn [(1)(2)’(4)(5)], đường dẫn sử dụng ca kiểmthử {(a, 5), (n_f, 2)} Đầu tiên xây dựng ba đường dẫn: {˜a > and ˜n_f > 1} [ a > && n_f > a 12, a_f := n_f − n_f − n_f 0.5, return a_f ] { ˜a 12 and a_f = ˜n_f − ˜n_f 0.5 Ở kết thay cho biến đầu vào a n_f tương ứng pre-condition chương trình, kết hoàn thành thay post-condition Thứ hai, áp dụng lặp lặp lại tiên đề phép gán tiền đề phép gán với lệnh không thay đổi cho ba đường dẫn [(1)(2)’(4)(5)], post-condition Kết xây dựng đường dẫn đây, gọi asserted path (đường dẫn chứa thêm khẳng định), với khẳng định bên dẫn từ hai đoạn chương trình: { ˜a > and ˜n_f > 1} { ˜a 12 and ˜n_f − ˜n_f − ˜n_f 0.5 = ˜n_f − ˜n_f 0.5} a > && n_f > { ˜a 12 and n_f − n_f − n_f 0.5 = ˜n_f − ˜n_f 0.5} a 12 {˜a 12 and n_f − n_f − n_f 0.5 = ˜n_f − ˜n_f 0.5} 48 a_f := n_f − n_f − n_f 0.5 { ˜a 12 and a_f = ˜n_f − ˜n_f 0.5} return a_f {˜a 12 and a_f = ˜n_f − ˜n_f 0.5} Ở đường dẫn định 12 0.5 0.5, dòngthứ hai từ xuống, kết thay cho a cho n_f định 12 0.5 0.5 Như trình bày trên, điều cần thiết để tin cậy biến đầu vào a n_f pre-condition gốc (biểu thị ) pre-assertion Thứ ba, cần đánh giá tính hợp lý ẩn ý 12 0.5 0.5 Sử dụng ca kiểmthử , dễ dàng chứng minh ẩn ý sai (đánh giá chi tiết không đề cập giới hạn thời gian) Từ ví dụ trên, thấy kiểmthử chí hiệu chứng minh hình thức việc đánh giá tính hợp lý ẩn ý lỗi có sẵn đường dẫn, đường dẫn không chứa lỗi, kiểmthử phát để đưa kết luận Trong trường hợp này, đánh giá kỹthuật phải tạo cho việc đánh giá tính hợp lý Điểm mạnh kiểmthử thực tự động, điều vô có ích thời đại công nghiệp 3.4.2 Áp dụng cho việc gọi phương thức Nếu gọi phương thức (method invocation) sử dụng câu lệnh, thay đổi trạng thái chương trình ChildFareDiscount Do vậy, đường dẫn bên phương thức gọi phải xem xét pre-assertion chương trình dạng kiểmthử Chúng ta thay đổi chương trình ChildFareDiscount tổ chức hoàn thiện chương trình thành lớp (class) gọi FareDiscount (1) (2) (3) (4) (5) class FareDiscount{ int tem; //instance variable int ChildFareDiscount1(int a, int n_f){ Discount(n_f); if (a > && n_f > 1){ if (a > 12) a_f := n_f else a_f := n_f **2 – n_f – tem; 49 (6) (7) return a_f; } else System.out.println(“the precondition is violated ”); } void Discount(int x){ int r; (1.1) r := x*0.5; (1.2) tem := r; } } Khi chạy phương thức ChildFareDiscount1 phương thức Discount(n_f) gọi, lấy ba đường dẫn: [(1)(2)(3)(4)(6)], [(1)(2)(3)’(5)(6)] [(1)(2)’(7)], đoạn (1) đường dẫn (subpath) [(1.1)(1.2)](n_f/x), biểu thị đường dẫn kết từ việc thay tham số thực tế n_f cho tham số hình thức x đường dẫn [(1.1)(1.2)] Do đường dẫn [(1)(2)(3)’(5)(6)] thực tế sau chèn thêm đường dẫn Discount vào đường dẫn ChildFareDiscount1 biểu diễn sau [(1.1)(1.2)(2)(3)’(5)(6)] Lựa chọn ca kiểmthử giống {(a, 5), (n_f, 2)} trước chạy chương trình, tạo đường dẫn [(1.1)(1.2)(2)(3)’(5)(6) Khi xây dựng đường dẫn asserted path sau: { ˜a > and ˜n_f > 1} { ˜a 12 and ˜n_f − ˜n_f − ˜n_f 0.5 = ˜n_f − ˜n_f 0.5} r := n_f * 0.5 {˜a 12 n_f − n_f − r = ˜n_f − ˜n_f 0.5} tem := r { ˜a 12 and n_f − n_f − tem = ˜n_f − ˜n_f 0.5} a > && n_f > { ˜a 12 and n_f − n_f − tem = ˜n_f − ˜n_f 0.5} a 12 {˜a 12 and n_f − n_f − tem = ˜n_f − ˜n_f 0.5} a_ f := n_f − n_f – tem { ˜a 12 and a_f = ˜n_f − ˜n_f 0.5} return a_ f 50 { ˜a 12 and a_ f = ˜n_f − ˜n_f 0.5} Ở đường dẫn [r:= n_f *0.5, tem:= r] kết thay tham số thực tế n_f sử dụng lời gọi phương thức Discount(n_f) cho tham số hình thức x sử dụng định nghĩa phương thức đường dẫn gốc [r:= x*0.5, tem:= r] Tương tự, dễ dàng sử dụng kiểmthử để chứng minh ẩn ý 12 0.5 0.5 sai, lỗi tìm thấy đường dẫn 3.4.3 Các nghiên cứu liên quan Qua nghiên cứu thấy nghiên cứu dựa việc tích hợp Logic Hoare kiểmthử dường tập trung chủ yếu vào sử dụng pre-assertion postassertion ba Hoare cho việc sinh ca kiểmthử phân tích kết kiểmthử nghiên cứu giống phương pháp TBFV cho việc giải toán kiểmthử dựa đặc tả Một kết đạt trình bày Design By Contract (DBC) Meyer ứng dụng ngôn ngữ lập trình Eiffel [7, 8] Thành công Eiffel kiểm tra pre-condition post-condition khuyến khích môn học DBC lập trình để phát triển nghiên cứu tương tự cho ngôn ngữ khác hệ thống kiểmthử Sunit cho Smalltalk [13] Cheon Leavens miêu tả phương pháp kiểmthử đơn vị (unit testing) mà sử dụng kiểm tra assertion thời gian chạy ngôn ngữ đặc tả hình thức để định phương thức làm việc xác theo đặc tả hình thức sử dụng pre-condition post-condition, cài đặt thành công ý tưởng sử dụng ngôn ngữ mô hình Java (Java Modeling Language – JML) tảng làm việc kiểmthử Junit [20] Gray Mycroft miêu tả phương pháp khác để kiểmthử chương trình Java sử dụng đặc tả kiểu Hoare [18] Họ trình bày cách đặc tả kiểmthử logic với post-condition nhúng vào Java cách ngôn ngữ đặc tả kiểmthử biên dịch vào Java cho việc thực thi chương trình Ngoài có nhiều kết tương tự báo nhiên thời gian có hạn nên tác giả luận văn trình bày kết tiêu biểu 3.5 Kết luận Trong chương này, tác giả luận văn trình bày phương pháp chứng minh hình thức dựa kiểmthử (TBFV) cho việc phát lỗi chương trình cách tích hợp kiểmthử dựa đặc tả Logic Hoare Nguyên tắc TBFV trước tiên sử dụng kiểmthử dựa kịch 51 dòngliệu để đưa đường dẫn chương trình hình thức kiểm thử, áp dụng phương pháp dựa Logic Hoare để chứng minh hình thức xác đường dẫn Do kỹthuật cho kỹthuật dựa kịch dòngliệukỹthuật cho chứng minh xác thực tự động nên phương pháp TBFV có ưu điểm so với chứng minh xác hình thức dựa Logic Hoare thực tự động cách xây dựng hệ thống chương trình thực tế Phương pháp có ưu điểm bật việc giảm số lượng ca kiểmthử cần thiết so với kiểmthử dựa đặc tả có sẵn Trong tập trung vào trình bày ý tưởng phương pháp TBFV ví dụ để trình bày tính hiệu bật tiện lợi báo cáo này, thử nghiệm cần xây dựng để đánh giá hiệu có tính hệ thống để so sánh với kiểmthử liên quan phương pháp chứng minh hình thức Nghiên cứu tương lai cần giải đưa công cụ hỗ trợ 52 KẾT LUẬN VÀ KIẾN NGHỊ Kết luận Từ việc nghiên cứu Tổng quan kiểmthử phần mềm kiểmthửtĩnh để nắm kiến thức sở kiểmthử phần mềm nói chung kiểmthửtĩnh nói riêng phục vụ nghiên cứu Sau đó, tác giả luận văn tiến hành nghiên cứu khái quát phương pháp kiểmthửdòngliệutĩnhkiểmthử phần mềm Cuối tác giả nghiên cứu Logic Hoare ứng dụng Logic Hoare kiểmthử phần mềm, cụ thể tác giả trình bày phương pháp kiểmthử kết hợp Logic Hoare với kỹthuậtkiểmthử dựa kịch dòngliệu để nâng cao hiệu kiểmthửkỹthuật dựa kịch dòngliệu áp dụng phương pháp kết hợp vào kiểmthử chương trình cụ thể Như với trình nghiên cứu mặt em hoàn thành mục tiêu đề tài đưa Một số kết đạt sau: - Nắm kiến thức liên quan đến Kiểmthử phần mềm kiểmthử tĩnh; - Nắm kỹthuậtkiểmthửtĩnh phương pháp kiểmthửdòngliệutĩnhkiểmthử phần mềm; - Hiểu Logic Hoare việc chứng minh xác chương trình nghiên cứu kỹthuật kết hợp Logic Hoare với kỹthuậtkiểmthử dựa kịch dòngliệu để nâng cao hiệu cho kỹthuậtkiểmthử dựa kịch dòngliệu - Báo cáo làm tài liệu tham khảo lĩnh vực Kiểmthử phần mềm, Kiểmthửtĩnh đặc biệt kiểmthửdòngliệu tĩnh; - Kết nghiên cứu làm tiền đề cho nghiên cứu liên quan khác Kiến nghị Với thời gian nghiên cứu ngắn lĩnh vực tiếp cận nên báo cáo số phần chưa hoàn thiện Do thời gian tới em tiếp tục nghiên cứu chuyên sâu cố gắng xây dựng chương trình kiểmthử tự động dựa vào kỹthuật kết hợp Logic Hoare với kỹthuậtkiểmthử dựa vào kịch dòngliệuTrong trình làm luận văn, em cố gắng nhiều, nhiên không tránh khỏi thiếu sót, em mong nhận ý kiến đóng góp Thầy giáo, Cô giáo, bạn bè, đồng nghiệp để luận văn ngày hoàn thiện 53 TÀI LIỆU THAM KHẢO Tiếng Việt: [1] Phạm Ngọc Hùng, Trương Anh Hoàng Đặng Văn Hưng (2014), Giáo trình kiểmthử phần mềm Tiếng Anh: [2] Bath, G., McKay, J.: Praxiswissen Softwaretest - Test Analystund Technical Test Analyst Dpunkt, Heidelberg (2010) [3] Beck (2002), Test driven development: By example, Addison Wesley Longman Publishing Co., Inc., Boston, MA, USA [4] Fosdick Lloyd D and Osterweil Leon J (1976), Data flow analysis in software reliability, ACM Comput Surv 8, no 3, 305–330 [5] Huang J C (1979), Detection of data flow anomaly through program instrumentation, IEEE Trans Softw Eng 5, no 3, 226–236 [6] K B Gallagher and J R Lyle, “Using program slicing in software mainte-nance.,” IEEE Trans Software Eng , vol 17, no 8, pp 751–761, 1991 [7] Liggesmeyer (2009), P.: Software-Qualität: Testen, Analysieren und Ve rifizieren von Softwa re, 2nd edn Spektrum-Akademischer Verlag, Berlin [8] M Weiser, “Program slicing.,” IEEE Trans Software Eng., vol 10, no 4, pp 352–357, 1984 [9] M Weiser, “Program slicing.,” in IC SE , pp 439–449, 1981 [10] Majchrzak, T.A., Kuchen, H.: IHK-Projekt Softwaretests: Auswertung In: Working Pa pers, Vol Förderkreis der Angewa ndten Informatik an der Westfälischen Wilhelms-Universität, Münster e V (2010) [11]Michael Kart (2012), Behavior-driven development: conference tutorial, J Comput Sci.Coll 27, no 4, 75–75 [12] P C Jorgensen, Software Testing: A Craftsman’s Approach CRC Press, 2nd ed., 2002 [13] Pezze, M., Young, M.: Software Testing and Analysis: Process, Principles and Techniques Wiley, New York (2007) 54 [14] Roitzsch, E H.P.: Analytische Softwarequalitätssicherung in Theorie und Praxis: Der Wegzur Software mit hoher Qualität durch statisches Prüfen, dynamisches Testen, formales Beweisen Monsensteinund Vannerdat (2005) [15] S.Liu (2004), Formal Engineering for Industrial Software Development Using the SOFL Method Springer-Verlag, ISBN 3-540-20602-7 [16] S Liu and S Nakajima (2010), A Decompositional Approach to Automatic Test Case Generation Based on Formal Specifications In 4th IEEE International Conference on Secure Software Integration and Reliability Improvement (SSIRI 2010), pages 147 {155, Singapore, June 9-11 2010 IEEE CS Press} [17] S Liu, T Hayashi, K Takahashi, K Kimura, T Nakayama, and S Nakajima (2010), Automatic Trans-formation from Formal Specifications to Functional Scenario Forms for Automatic Test Case Genneration In 9th International Conference on Software Methodologies, Tools and Techniques (SoMet 2010), page to appear, Yokohama city, Japan, Sept 29- Oct 2010 IOS International Publisher [18] S Rapps and E J Weyuker, “Selecting software test data using data flow information.,” IEEE Trans Software Eng , vol 11, no 4, pp 367–375, 1985 [19] S.Liu and S.Nakajima (2011), A "Vibration" method for Automatically Generating Test Cases Based on Formal Specifications In 18th Asia-Pacific Software Engineering Conference (APSEC 2011), pages 73{80, HCM City, Vietnam, Dec 5-8 2011 IEEE CS Press [20] Shaoying Liu, “Utilizing Hoare Logic to Strengthen Testing for Error Detection in Programs” [21] Sneed, H.M., Winter, M.: Testen Objektorientierter Software Hanser, München (2002) [22] Zeller, A.: Why Programs Fail: A Guide to Systematic Debugging Morgan Kaufmann, San Francisco (2006) ... trình cho phép người kiểm thử sử dụng kỹ thuật kiểm thử dòng liệu tĩnh Các kỹ thuật kiểm thử dòng liệu tĩnh trình bày đoạn Kiểm thử định nghĩa/sử dụng (Define/Use Testing) Kiểm thử Define/Use sử... yếu kiểm tra tính đắn code (mã lệnh), thuật toán hay tài liệu 1.2.2 Phân loại kỹ thuật kiểm thử tĩnh Các kỹ thuật kiểm thử tĩnh không tạo ca kiểm thử không chạy chương trình kiểm thử [17] Các kỹ. .. tác giả luận văn trình bày sơ lược số kỹ thuật kiểm thử phần mềm thuộc nhóm kỹ thuật kiểm thử tĩnh 1.2.3 Sơ lược kỹ thuật kiểm thử tĩnh Các kỹ thuật kiểm thử tĩnh xem xét chương trình thời điểm