Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
1,49 MB
Nội dung
1 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Vương Thị Quỳnh Dương NGHIÊNCỨUVỀMỨCBAOPHỦCỦAKIỂMTHỬ KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành : Công Nghệ Thông Tin HÀ NỘI - 2009 2 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Vương Thị Quỳnh Dương NGHIÊNCỨUVỀMỨCBAOPHỦCỦAKIỂMTHỬ KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công Nghệ Thông Tin Cán bộ hướng dẫn : TS. Trương Ninh Thuận Cán bộ đồng hướng dẫn: ThS. Tô Văn Khánh HÀ NỘI - 2009 3 LỜI CẢM ƠN Bản thân em đạt được thành quả như ngày hôm nay là nhờ một phần không nhỏ công lao dìu dắt của các thầy cô trong khoa Công Nghệ Thông Tin - Đại Học Công Nghệ - Đại Học Quốc Gia Hà Nội. Em xin ghi nhận công lao của các thầy cô và em xin gửi lời cảm ơn sâu sắc tới thầy cô. Để hoàn thành được khoá luận này em xin gửi lời cảm ơn chân thành tới TS. Trương Ninh Thuận và ThS. Tô Văn Khánh, hai thầy đã hướng dẫn, giúp đỡ, chỉ bảo rất tận tình cho em. Dù đã cố gắng rất nhiều trong quá trình làm khoá luận, nhưng cũng không thể tránh khỏi những thiếu sót, em rất mong nhận được sự góp ý của các thầy, cô giáo để em có thể hoàn thiện hơn. Hà nội, ngày 23 tháng 5 năm 2009 Sinh viên: Vương Thị Quỳnh Dương 4 TÓM TẮT KHOÁ LUẬN Trong thời đại công nghệ thông tin bùng nổ như hiện nay, phần mềm đóng một vai trò cực kỳ quan trọng trong hầu hết các lĩnh vực của đời sống. Phần mềm là một sản phẩm cần phải được đảm bảovề chất lượng. Đảm bảo chất lượng phần mềm (SQA- Software Quality Assuarance) là một nhiệm vụ đặc biệt quan trọng trong phát triển phần mềm và là vấn đề sống còn đối với tất cả các công ty phần mềm. Để đảm bảo chất lượng phần mềm thì trong các dự án phần mềm phải tiến hành xác minh và thẩm định. Một trong các hoạt động xác minh và thẩm định quan trọng là tiến hành kiểmthử phần mềm. Kiểmthử cần được tiến hành ở nhiều mức và phối hợp nhiều kỹ thuật khác nhau. Phần không thể thiếu trong kiểmthử là việc xây dựng các ca kiểm thử. Các ca kiểmthử phải đủ tốt mới có thể phát hiện ra khiếm khuyết của phần mềm. Một vấn đề đặt ra ở đây là làm thế nào để xác định được ca kiểmthử đó là tốt, những tiêu chí nào đánh giá chất lượng của chính ca kiểm thử? Và công việc tiến hành kiểm tra khi nào thì dừng lại? Nội dung của khoá luận sẽ đề cập đến hai phương pháp nhằm mục đích xây dựng các ca kiểmthử tốt đó là kỹ thuật phân tích baophủ code và kỹ thuật phân tích giá trị điểm biên. Phân tích baophủ code sẽ phải tiến hành xây dựng các ca kiểmthử tất cả các luồng đường đi có thể qua chương trình, các luồng đường đi từ input tới output được xác định dựa trên các nhánh rẽ của chương trình. Thông thường các lỗi về lập trình thường hay xảy ra tại giá trị biên do vậy tại giá trị biên cần phải thiết kế ca kiểmthửkiểm tra nó. Trong phạm vi của khoá luận chúng tôi sẽ tiến hành cài đặt một chương trình nhằm tìm ra các câu lệnh điều khiển của file nguồn java và chỉ ra giá trị biên trong các biểu thức so sánh nhằm mục đích chỉ ra để xuất các giá trị biên baseline và robust cần được kiểm tra. 5 Mục lục CHƯƠNG 1. MỞ ĐẦU 10 1.1 Bối cảnh nghiêncứu 10 1.2 Nội dung bài toán 11 1.3 Cấu trúc của khoá luận 12 CHƯƠNG 2. GIỚI THIỆU VỀBAOPHỦ CODE 14 2.1 Baophủ code là gì ? 14 2.2 Tại sao cần đo lượng code được baophủ ? 14 2.3 Làm thế nào để xác định lượng code được baophủ ? 15 2.4. Trong tiến trình test thì baophủ code hợp với kỹ thuật kiểmthử nào ? 15 2.4.1 Kiểmthử hộp đen 15 2.4.2 Kiểmthử hộp trắng 15 2.4.3 Baophủ code 16 CHƯƠNG 3. GIỚI THIỆU MỘT SỐ PHƯƠNG PHÁP BAOPHỦ 17 3.1 Baophủ câu lệnh (Statement coverage) 17 3.2 Baophủ nhánh (Branch coverage) 17 3.3 Baophủ đường đi (path coverage) 18 3.4 Baophủ điều kiện (condition coverage) 18 3.5 Baophủ nhiều điều kiện (multiple condition coverage) 18 CHƯƠNG 4. PHÂN TÍCH, ĐÁNH GIÁ CÁC PHƯƠNG PHÁP BAOPHỦ 19 4.1 Phân tích phương pháp baophủ câu lệnh (statement coverage) 19 4.2 Phân tích phương pháp baophủ nhánh (branch coverage) 23 4.3 Phân tích phương pháp baophủ đường đi (path coverage) 28 CHƯƠNG 5. PHÂN TÍCH GIÁ TRỊ ĐIỂM BIÊN 33 5.1 Giới thiệu 33 5.2 Phân hoạch tương đương(equivalence partitioning) 33 5.3 Phân tích giá trị biên (boundary value analysis) 34 5.3.1 Tổng quan về phân tích giá trị điểm biên 34 5.3.2 Lựa chọn các ca kiểmthử sử dụng phân tích giá trị điểm biên 34 5.3.3 Phân tích giá trị biên đơn biến (Single-Variable BVA) 35 5.3.4 Phân tích giá trị biên đa biến (Multi – Variable BVA) 36 5.3.5 Kết luận 40 CHƯƠNG 6. THỰC NGHIỆM 41 6.1 Ví dụ một chương trình đơn giản 41 6.1.1 Xây dựng các ca kiểmthử cho chương trình trên 42 6.1.2 Kết luận 46 6.2 Chương trình cài đặt tìm kiếm các câu lệnh rẽ nhánh trong mã nguồn java. 46 6.2.1 Giới thiệu về chương trình 46 6.2.2 Mô tả các chức năng chính 46 6.2.3 Biểu đồ trình tự 47 6.2.4 Thuật toán đã sử dụng 49 6.2.5 Các lớp cài đặt 51 6.2.5 Kết quả thao tác các chức năng giữa người dùng và chương trình như sau 51 6.3 Kết luận 56 6 CHƯƠNG 7: KẾT LUẬN KHOÁ LUẬN 57 7.1 Kết luậnvề khoá luận 57 7.2 Hướng nghiêncứu phát triển trong tương lai 57 TÀI LIỆU THAM KHẢO 59 7 DANH SÁCH CÁC HÌNH VẼ Hình 1 : Kết quả kiểm tra mã nguồn được thực thi 20 Hình 2 : Kết quả đo baophủ dòng lệnh 23 Hình 3 : Kết quả thực hiện test case 1 26 Hình 4 : Kết quả đo baophủ nhánh khi thực hiện test case 1 26 Hình 5 : Kết quả khi thực hiện test case 2 27 Hình 6 : Kết quả đo baophủ nhánh khi thực hiện test case 2 27 Hình 7: Kết quả thực hiện test case 3 30 Hình 8 : Kết quả đo baophủ khi thực hiện test case 3 31 Hình 9 : Kết quả thực hiện test case 4 32 Hình 10 : Kết quả đo baophủ khi thực hiện test case 4 32 Hình 11 : Tập hợp các giá trị biên baseline cho đơn biến trên một khoảng đầu vào 35 Hình 12 : Đường các giá trị baseline và robust cho đơn biến trên một khoảng đầu vào 36 Hình 13 : Tập hợp các giá trị baseline và rubust trường hợp đơn biến trên hai khoảng đầu vào 36 Hình 14 : Tập giá trị baseline và robust của biến N trong trường hợp hai biến đầu vào 37 Hình 15 : Tập hợp giá trị baseline và rubust trên hai khoảng của biến M trong trường hợp hai biến đầu vào 38 Hình 16 : Tổng hợp tất cả các giá trị của hai biến N và M trên hai khoảng đầu vào 38 Hình 17 : Tổng hợp toán bộ giá trị baseline, robust trường hợp đa biến đầu vào trên hai khoảng 39 Hình 18 : Ví dụ cấu trúc một chương trình đơn giản 41 Hình 19 : Các công việc cần thực hiện (tô đậm) 42 Hình 20 : Test case 1 kiểm tra công việc A 42 Hình 21 : Test case 2 kiểm tra công việc B 42 Hình 22 : Test case 3 kiểm tra công việc C 43 Hình 23 : Hai điều kiện một và hai là độc lập nhau 43 Hình 24 : Kiểm tra đồng thời công việc A và công việc C trong cùng 1 test case 44 Test case 2 kiểm tra công việc B và công việc C: 44 Hình 25 : Test case kiểm tra đồng thời công việc B và C 44 Hình 26 : Nhánh không được baophủ 45 Hình 27. Biểu đồ trình tự 47 Hình 28: Biều đồ trình tự khi tương tác câu lệnh if 48 Hình 29: Biều đồ trình tự khi tương tác câu lệnh while 48 Hình 30: Biểu đồ trình tự khi tương tác câu lệnh for 49 Hình 31: Kiến trúc lớp cài đặt Get_File_Name 51 Hình 32: Kiến trúc lớp ReadContentFile 51 Hình 33: Giao diện yêu cầu nhập tên file cần đọc 52 Hình 34: Nhập tên file không đúng định dạng *.java 52 Hình 35: Nhập vào một tên file đúng để đọc 52 Hình 36 : Nội dung của file TestFile.java 52 Hình 37: Kết quả tìm kiếm câu lệnh điều khiển 53 Hình 38 : Nội dung của file chứa câu lệnh điều khiển được tìm kiếm 53 8 Hình 39 : Kết quả khi người dùng muốn thao tác với câu lệnh if 54 Hình 40 : Kết quả khi người dùng muốn thao tác với câu lệnh while 55 Hình 41 : Kết quả khi người dùng muốn thao tác với câu lệnh for 55 9 DANH MỤC CÁC THUẬT NGỮ Thuật ngữ Khái niệm Statement coverage Baophủ câu lệnh Branch coverage Baophủ nhánh Path coverage Baophủ đường đi Condition coverage Baophủ điều kiện Boundary value analysis(BVA) Phân tích giá trị biên Single-variable BVA Phân tích giá trị biên đơn biến Multi-variable BVA Phân tích giá trị biên đa biến Equivalence partitioning Phân hoạch tương đương Test case Ca kiểmthử Valication Xác minh Verification Thẩm định Test entropy Kiểm tra độ bất định trong cấu trúc của hệ thống Cyclomatic complextity Số đường độc lập tuyến tính đi qua mã nguồn Baseline đường cơ sở Robust mạnh mẽ Module Mô đun 10 CHƯƠNG 1. MỞ ĐẦU 1.1 Bối cảnh nghiêncứu Trong thời đại công nghệ thông tin bùng nổ như ngày nay, phần mềm đóng vai trò vô cùng quan trọng ở hầu hết các lĩnh vực của cuộc sống. Đặc biệt trong khối ngành doanh nghiệp, dịch vụ, quảng cáo, nó đã trợ giúp đắc lực nhằm làm tăng chất lượng nghiệp vụ. Mỗi bộ phận đều phụ thuộc vào phần mềm để hỗ trợ cho việc phát triển, sản xuất, quảng cáo nhằm tiếp thị các sản phầm và dịch vụ của họ. Phần mềm cũng được xem là một sản phẩm, nhưng là loại hình sản xuất đặc biệt. Trong một quy trình sản xuất phần mềm, giai đoạn phát hiện, xác định và sửa các lỗi phần mềm được xem là phần không thể thiếu nhằm đảm bảo chất lượng phần mềm. Đảm bảo chất lượng phần mềm là một nhiệm vụ đặc biệt quan trọng trong phát triển phầm mềm và là vấn đề sống còn đối với tất cả các công ty phần mềm. Ở mức cao, việc đảm bảo chất lượng liên quan đến một loạt các vấn đề như chuẩn và qui trình quản lý của công ty, môi trường và công cụ phát triển, mô hình phát triển phần mềm được lựa chọn, kỹ năng của nhân viên…Ở mức thấp hơn, chất lượng phần mềm được đảm bảo trên cơ sở hiểu đúng yêu cầu của khách hàng, đặc tả đúng yêu cầu, tạo ra các thiết kết tốt và chuyển tải nó một cách đúng đắn thành mã nguồn của phần mềm. Chi phí bỏ ra cho giai đoạn này thường chiếm không nhỏ trong tổng chi phí mà các tổ chức phát triển phần mềm bỏ ra cho toàn bộ qui trình. Với tốc độ phát triển chóng mặt của lĩnh vực công nghệ thông tin trên cả hệ thống phần cứng và phần mềm, khả năng xảy ra nhiều lỗi, đặc biệt là những lỗi phức tạp là rất cao. Lỗi có thể gây thiệt hại to lớn cả về tiền bạc, thời gian và công sức con người. Chính vì vậy, cần có phương pháp phát hiện ra lỗi sớm nhằm giảm công sức để sửa chúng. Để phát hiện ra những lỗi phần mềm, phần mềm cần phải được thẩm định (Valication) và kiểm chứng (Verification). Xác minh, thẩm định giúp ta phát hiện và sửa lỗi phần mềm từ đó đánh tính dùng được của phần mềm. Con người không thể không mắc sai lầm, và phần mềm mà không được kiểm tra sẽ làm việc không hiểu quả. Thông thường, có từ 20 đến 50 lỗi trên 1000 dòng lệnh được tìm thấy trong suốt quá trình phát triển, và vẫn còn từ 1.5 đến 4 lỗi trên 1000 dòng lệnh sau khi kiểmthử hệ thống [1]. Mỗi lỗi này đều có thể dẫn tới lỗi tổng thể hay không đúng với đặc tả yêu cầu. Mục đích củakiểmthử phần mềm là làm giảm lỗi phần mềm xuống mức có thể chấp nhận được, tuỳ thuộc vào mức độ phức tạp của dự án. Chính vì vậy, kiểmthử phần mềm có vai trò vô cùng quan trọng trong toàn bộ quy trình [...]... của khoá luận được trình bày như sau: Chương 2 giới thiệu vềbaophủ code Trong chương này sẽ giới thiệu về kỹ thuật baophủ code Lý do, tầm quan trọng củabaophủ code Cách tiếp cận để có thể đo code được baophủ Phân loại baophủ code vào kỹ thuật kiểmthử hộp trắng Chương 3 giới thiệu về một số phương pháp đo baophủ code cơ bản nhưng vô cùng mạnh mẽ đó là các phương pháp : baophủ câu lệnh đo bao. .. thể, baophủ cậu lệnh cho ta kết quả baophủ hoặc 1% hoặc là 99 % Baophủ câu khối lệnh thường lờ đi vấn đề này Trước những hạn chế củabaophủ câu lệnh ta có thể tìm đến một kỹ thuật baophủ khác tốt hơn đó là baophủ nhánh 4.2 Phân tích phương pháp baophủ nhánh (branch coverage) Một nhánh là một kết luận logic của một quyết định, do vậy baophủ nhánh đơn giản là đo kết luận logic nào đã được kiểm. .. Chương 7 kết luậnvề khoá luận và hướng nghiên cứu tiếp theo 13 CHƯƠNG 2 GIỚI THIỆU VỀBAOPHỦ CODE 2.1 Baophủ code là gì ? Baophủ code là phần trăm code được phủ bằng cách kiểm tra (test) tự động Đo lượng code baophủ đơn giản là xác định những câu lệnh nào được thực thi, những câu lệnh nào không được thực thi thông qua việc kiểm tra Nhìn chung, một hệ thống baophủ code sẽ thu thập thông tin về chương... thông tin baophủ 2.4 Trong tiến trình test thì baophủ code hợp với kỹ thuật kiểmthử nào ? 2.4.1 Kiểmthử hộp đen Kiểmthử hộp đen là sự kiểmthử sử dụng các ca kiểmthử được thiết kế dựa trên đặc tả yêu cầu, tài liệu người dùng nhằm mục đích phát hiện ra các khiếm khuyết Kiểmthử hộp đen nhìn nhận mô đun (module) được kiểm tra như là một hộp đen, và chỉ quan tâm đến chức năng (hành vi) của mô đun... lượt phân tích một số đề xuất baophủ nhằm đưa ra để đánh giá chất lượng của ca kiểm thử: baophủ câu lệnh (statement coverage), baophủ nhánh (branch coverage) và baophủ đường đi (path coverage) 4.1 Phân tích phương pháp baophủ câu lệnh (statement coverage) Trong thiết kế test case ta luôn cố gắng baophủ tối đa câu lệnh trong mã nguồn với số test case ít nhất có thể Baophủ câu lệnh sẽ nhận ra các... tra như thế nào Kiểmthử đệ quy thường là kiểmthử hộp đen do đó có thể không phù hợp với baophủ code 16 CHƯƠNG 3 GIỚI THIỆU MỘT SỐ PHƯƠNG PHÁP BAOPHỦ 3.1 Baophủ câu lệnh (Statement coverage) Baophủ câu lệnh còn được gọi là baophủ dòng lệnh (line coverage), là một cách đo số câu lệnh được thực thi khi ta áp dụng những ca kiểmthử thích hợp Đối với mỗi câu lệnh không được bao phủ, chúng ta sẽ tìm... đã không tăng theo hàm mũ mà vẫn đảm bảo được yêu cầu baophủ đầy đủ các nhánh Ta nhận thấy rằng baophủ đường đi bao gồm cả baophủ câu lệnh và baophủ nhánh trong phương thức Nó tác động gộp lên cả baophủ nhánh và baophủ câu lệnh Ta luôn nhớ rằng, mục đích kiểm tra của các đường cơ sở là để kiểm tra tất cả các nhánh tác động độc lập với nhau Kiểm tra 4 đường cơ sở nhằm đạt được mục đích này Ta có... câu lệnh mã nguồn, baophủ nhánh đo bao nhiêu nhánh đã được thực thi trong tổng số các nhánh rẽ của chương trình, baophủ đường đi đo bao nhiêu luồng đường đi được kiểm tra, baophủ điều kiện tương tự như baophủ nhánh nhưng nó có độ nhạy tốt hơn, baophủ nhiều điều kiện kết hợp các biểu thức điều kiện con trong các câu lệnh rẽ nhánh Chương 4 phân tích, đánh giá các phương pháp baophủ Trong chương này... pháp kiểmthử hộp trắng, baophủ code cần phải hiểu về mã nguồn, có thể truy cập vào mã nguồn hơn là đơn giản sử dụng các giao diện được cung cấp Có thế nói baophủ code là phương pháp hữu ích nhất trong suốt giai đoạn kiểmthử mô đun (module), tuy nhiên nó cũng có những lợi ích trong kiểmthử tích hợp và trong các lần kiểmthử khác nữa, phụ thuộc vào chúng ta kiểm tra cái gì và kiểm tra như thế nào Kiểm. .. chiến lược kiểmthử tối ưu, trong tài liệu này sẽ đề cập đến kỹ thuật phân tích code baophủ và phân tích các giá trị biên Kỹ thuật phân tích baophủ sẽ đánh giá độ baophủ từ đó xác định quá trình kiểm tra có đạt được độ baophủ yêu cầu hay không, tỷ lệ yêu cầu đã được kiểm tra (tính trên các yêu cầu của phần mềm và số lượng code đã viết) Trong phạm vi tài liệu sẽ phân tích các cách baophủ cơ bản . định thông tin bao phủ. 2.4. Trong tiến trình test thì bao phủ code hợp với kỹ thuật kiểm thử nào ? 2.4.1 Kiểm thử hộp đen Kiểm thử hộp đen là sự kiểm thử sử dụng các ca kiểm thử được thiết. khoá luận Phần còn lại của khoá luận được trình bày như sau: Chương 2 giới thiệu về bao phủ code. Trong chương này sẽ giới thiệu về kỹ thuật bao phủ code. Lý do, tầm quan trọng của bao phủ. thực nghiệm, đề xuất các ca kiểm thử để đảm bảo kiểm tra code được bao phủ chương trình. Thông thường để xây dựng các ca kiểm thử kiểm tra bao phủ các nhánh và bao phủ đường đi ta phải xác định