Luận Văn Nghiên cứu về mức bao phủ của kiểm thử

Thảo luận trong 'Công Nghệ Thông Tin' bắt đầu bởi Thúy Viết Bài, 5/12/13.

  1. Thúy Viết Bài

    Thành viên vàng

    Bài viết:
    198,891
    Được thích:
    170
    Điểm thành tích:
    0
    Xu:
    0Xu
    TÊN ĐỀ TÀI: Nghiên cứu về mức bao phủ của kiểm thử
    Information
    [TABLE]
    [TR]
    [TD="width: 5%"][/TD]
    [TD="width: 90%"]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ảo về 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ểm thử phần mềm. Kiểm thử 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ểm thử là việc xây dựng các ca kiểm thử. Các ca kiểm thử 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ểm thử đó 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ểm thử tốt đó là kỹ thuật phân tích bao phủ code và kỹ thuật phân tích giá trị điểm biên. Phân tích bao phủ code sẽ phải tiến hành xây dựng các ca kiểm thử 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ểm thử 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.

    Mục lục
    CHƯƠNG 1. MỞ ĐẦU 10
    1.1 Bối cảnh nghiên cứ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Ề BAO PHỦ CODE 14
    2.1 Bao phủ code là gì ? 14
    2.2 Tại sao cần đo lượng code được bao phủ ? 14
    2.3 Làm thế nào để xác định lượng code được bao phủ ? 15
    2.4. Trong tiến trình test thì bao phủ code hợp với kỹ thuật kiểm thử nào ? 15
    2.4.1 Kiểm thử hộp đen 15
    2.4.2 Kiểm thử hộp trắng 15
    2.4.3 Bao phủ code 16
    CHƯƠNG 3. GIỚI THIỆU MỘT SỐ PHƯƠNG PHÁP BAO PHỦ 17
    3.1 Bao phủ câu lệnh (Statement coverage) 17
    3.2 Bao phủ nhánh (Branch coverage) 17
    3.3 Bao phủ đường đi (path coverage) 18
    3.4 Bao phủ điều kiện (condition coverage) 18
    3.5 Bao phủ 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 BAO PHỦ 19
    4.1 Phân tích phương pháp bao phủ câu lệnh (statement coverage) 19
    4.2 Phân tích phương pháp bao phủ nhánh (branch coverage) 23
    4.3 Phân tích phương pháp bao phủ đườ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ểm thử 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ểm thử 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
    CHƯƠNG 7: KẾT LUẬN KHOÁ LUẬN 57
    7.1 Kết luận về khoá luận 57
    7.2 Hướng nghiên cứu phát triển trong tương lai 57
    TÀI LIỆU THAM KHẢO 59

    CHƯƠNG 1. MỞ ĐẦU

    1.1 Bối cảnh nghiên cứ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ểm thử 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ủa kiểm thử 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ểm thử phần mềm có vai trò vô cùng quan trọng trong toàn bộ quy trình phát triền phần mềm, và trong công nghiệp phần mềm hiện nay, nó đang thu hút sự quan tâm của nhiều nhà nghiên cứu.
    Trong quy trình phát triển phần mềm hiện đại có giai đoạn kiểm thử phần mềm dùng để kiểm tra tính đúng đắn của phần mềm. Mục tiêu chính của nhóm phát triển phần mềm là phải làm sao tạo ra được những sản phầm phần mềm có chất lượng tốt nhất.Việc viết tập hợp các ca kiểm thử (test cases) là một phần quan trọng không thể thiếu trong phương pháp phát triển phần mềm linh hoạt. Tập hợp các ca kiểm thử đúng đắn giúp chúng ta giảm thiểu tối đa các lỗi, giảm thời gian tìm kiếm lỗi, tạo ra được các phần mềm tốt, tính ổn định cao. Một cách lý tưởng thì người kiểm tra (tester) phải kiểm tra tất cả các giá trị của biến đầu vào, tuy nhiên điều này là không tưởng bởi vì thường thì miền giá trị của biến đầu vào là rất lớn, thậm chí gần như dài vô hạn hoặc vô hạn. Do đó người kiểm tra không thể kỉêm tra được tất cả mọi giá trị, mọi trường hợp mà chỉ kiểm tra một số trường hợp đại diện mà thôi. Như vậy luôn xuất hiện câu hỏi: xây dựng những ca kiểm thử nào là hợp lý ? Bao giờ có thể ngưng kiểm tra? Các ca kiểm thử tạo ra liệu có tốt hay không? Giá trị được chọn để xây dựng ca kiểm thử là những giá trị nào? . Để nhằm giải đáp các thắc mắc này và xây dựng lên các ca kiểm thử tốt, trong tài liệu này chúng tôi sẽ phân tích một số đề xuất được đưa ra nhằm đánh giá chất lượng của một ca kiểm thử: phân tích bao phủ code (code coverage analysis), kiểm tra các điểm đặc biệt (particular point) cụ thể là phân tích đánh giá giá trị tại vị trí biên.
    1.2 Nội dung bài toán
    Kiểm thử là giai đoạn vô cùng quan trọng trong quá trình phát triển phần mềm. Trong giai đoạn này thì công việc thiết kế các ca kiểm thử lại đóng vai trò cực kỳ quan trọng. Nhằm giúp xây dựng các ca kiểm thử tốt, chiến lược kiểm thử tối ưu, trong tài liệu này sẽ đề cập đến kỹ thuật phân tích code bao phủ và phân tích các giá trị biên. Kỹ thuật phân tích bao phủ sẽ đánh giá độ bao phủ từ đó xác định quá trình kiểm tra có đạt được độ bao phủ 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 bao phủ cơ bản nhưng chúng vô cùng mạnh mẽ. Thông thường, không thể kiểm thử với mọi dữ liệu, chiến lược chung khi thiết kế ca kiểm thử là phân hoạch tương đương (equivalence partitioning). Phân hoạch tương đương chia miền dữ liệu vào ra thành các vùng, mà mỗi vùng chứa các dữ liệu có cùng hành vi. Do đó, đối với mỗi vùng dữ liệu chỉ cần xây dựng một ca kiểm thử để đại diện. Theo kinh nghiệm, các sai sót về lập trình thường xảy ra đối với dữ liệu biên nên cần thêm vào đó các ca kiểm thử kiểm tra đối với biên của các vùng. Trong tài liệu này cũng sẽ tiến hành phân tích đánh giá các giá trị biên sử dụng trong các ca kiểm thử. Đưa ra các giá trị biên đề xuất cần phải được kiểm tra để đảm bảo phần mềm vẫn hoạt động tốt và ổn định trên các giá trị đó. Luồng chương trình từ input đến output có các cách đi khác nhau chủ yếu được dựa vào các câu lệnh điều khiển trong mã nguồn, chúng tôi sẽ tiến hành cài đặt một chương trình tìm kiếm câu lệnh điều khiển trong file mã nguồn java và xuất ra giá trị biên trong câu lệnh điều khiển có chứa toán tử so sánh. Tóm lại bài toán đưa ra ở đây là làm sao xây dựng được ca kiểm thử tốt, các lỗi lập trình thường xảy ra ở các điểm biên của dải giá trị đầu vào, vậy thì ca kiểm thử thiết kế để kiểm tra giá trị biên là gì? Giải quyết bài toán này chúng tôi sẽ phân tích kỹ thuật bao phủ code và kỹ thuật phân tích giá trị biên, sau cùng là cài đặt chương trình tìm kiếm câu lệnh điều khiển của mã file mã nguồn java, xuất ra giá trị biên trong đó.
    1.3 Cấu trúc của 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ủ code. Cách tiếp cận để có thể đo code được bao phủ. Phân loại bao phủ code vào kỹ thuật kiểm thử hộp trắng.
    Chương 3 giới thiệu về một số phương pháp đo bao phủ code cơ bản nhưng vô cùng mạnh mẽ đó là các phương pháp : bao phủ câu lệnh đo bao nhiêu câu lệnh được thực thi trong tổng số câu lệnh mã nguồn, bao phủ 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, bao phủ đường đi đo bao nhiêu luồng đường đi được kiểm tra, bao phủ điều kiện tương tự như bao phủ nhánh nhưng nó có độ nhạy tốt hơn, bao phủ 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 bao phủ. Trong chương này sẽ tiến hành phân tích cụ thể từng phương pháp : bao phủ câu lệnh, bao phủ nhánh, bao phủ đường đi, đồng thời đánh giá ưu nhược điểm của từng phương pháp.
    Chương 5 trình bày tổng quan về phân tích giá trị điểm biên, chiến lược phân hoạch tương đương. Tiếp đó phân tích kỹ thuật phân tích giá trị biên đơn biến và đa biến.
    Chương 6 thực nghiệm một chương trình đơn giản. Chúng tôi sẽ tiến hành phân tích bài toán 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 trong chương trình mã nguồn có bao nhiêu câu lệnh rẽ nhánh, chúng tôi sẽ cài đặt một chương trình đơn giản giúp xuất ra toàn bộ câu lệnh rẽ nhánh và giá trị biên trong các biểu thức điều kiện trong file nguồn cần kiểm tra. File nguồn đầu vào đọc là file java.
    Chương 7 kết luận về khoá luận và hướng nghiên cứu tiếp theo.[/TD]
    [/TR]
    [/TABLE]




     
Đang tải...