Kiểm thử đơn vị với Junit

23 42 0
Kiểm thử đơn vị với Junit

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

KIỂM THỬ PHẦN MỀM BÁO CÁO BÀI TẬP ĐỀ TÀI KIỂM THỬ ĐƠN VỊ VỚI JUNIT HÀ NỘI – 102022 MỤC LỤC CHƯƠNG 1 TỔNG QUAN VỀ KIỂM THỬ VÀ JUNIT.CHƯƠNG 1. TỔNG QUAN VỀ KIỂM THỬ VÀ JUNIT 1 1.1 Tổng quan về kiểm thử 1 1.2 Kiểm thử đơn vị 1 1.2.1 Khái niệm 1 1.2.2 Tại sao cần kiểm thử đơn vị 1 1.2.3 Cách thực hiện kiểm thử đơn vị 2 1.2.4 Kỹ thuật kiểm thử đơn vị 3 1.2.5 Công cụ kiểm thử đơn vị 3 1.2.6 Ưu điểm và nhược điểm của kiểm thử đơn vị 4 1.2.7 Thực hiện kiểm thử đơn vị như thế nào để đạt được kết quả tốt nhất? 5 1.3. Kiểm thử đơn vị với JUNIT 6 1.3.1 Tổng quan về Junit 6 1.3.2 Các thuật ngữ về Junit: 6 1.3.3 Kiến trúc tổng quan của Junit: 7 1.3.4 Lợi ích và hạn chế của Junit 7 1.3.5 Các phương thức trong Junit 7 1.3.6 Một số cách test với Junit 8 1.3.7 Cấu trúc của một lớp kiểm thử Junit: 8 1.3.8 Thực hiện Tests Assert 8 CHƯƠNG 2. Cài đặt và kiểm thử với JUNIT 1 2.1 Cài đặt Junit 1 2.2 Thực hiện test với Junit 4 2.3 Tham số hóa các test case để test cho nhiều trường hợp của dữ liệu. 9

ĐẠI HỌC CÔNG NGHỆ GIAO THÔNG VẬN TẢI KHOA CÔNG NGHỆ THÔNG TIN  KIỂM THỬ PHẦN MỀM BÁO CÁO BÀI TẬP NHÓM ĐỀ TÀI: KIỂM THỬ ĐƠN VỊ VỚI JUNIT HÀ NỘI – 10/2022 MỤC LỤC CHƯƠNG TỔNG QUAN VỀ KIỂM THỬ VÀ JUNIT .1 1.1 Tổng quan kiểm thử 1.2 Kiểm thử đơn vị 1.2.1 Khái niệm 1.2.2 Tại cần kiểm thử đơn vị 1.2.3 Cách thực kiểm thử đơn vị 1.2.4 Kỹ thuật kiểm thử đơn vị 1.2.5 Công cụ kiểm thử đơn vị 1.2.6 Ưu điểm nhược điểm kiểm thử đơn vị 1.2.7 Thực kiểm thử đơn vị để đạt kết tốt nhất? 1.3 Kiểm thử đơn vị với JUNIT 1.3.1 Tổng quan Junit 1.3.2 Các thuật ngữ Junit: .6 1.3.3 Kiến trúc tổng quan Junit: 1.3.4 Lợi ích hạn chế Junit .7 1.3.5 Các phương thức Junit .7 1.3.6 Một số cách test với Junit 1.3.7 Cấu trúc lớp kiểm thử Junit: 1.3.8 Thực Tests Assert CHƯƠNG Cài đặt kiểm thử với JUNIT 2.1 Cài đặt Junit 2.2 Thực test với Junit 2.3 Tham số hóa test case để test cho nhiều trường hợp liệu .9 LỜI MỞ ĐẦU CHƯƠNG TỔNG QUAN VỀ KIỂM THỬ VÀ JUNIT 1.1 Tổng quan kiểm thử - Kiểm thử phần mềm trình thực thi chương trình với mục đích tìm lỗi - Thơng qua chu trình “kiểm thử - tìm lỗi - sửa lỗi”, ta hy vọng chất lượng sản phẩm phần mềm cải tiến - Kiểm thử module (hay kiểm thử đơn vị) trình kiểm thử chương trình con, thủ tục nhỏ chương trình - Mục đích kiểm thử đơn vị: so sánh chức thực tế module với đặc tả chức hay đặc tả interface module - Các kĩ thuật kiểm thử đơn vị kiểm thử không tăng tiến, kiểm thử tăng tiến từ xuống kiểm thử tăng tiến từ lên 1.2 Kiểm thử đơn vị 1.2.1 Khái niệm - Unit thành phần nhỏ phần mềm thực kiểm thử Các hàm (Function), thủ tục (Procedure), lớp (Class), phương thức (Method) Unit - Kiểm thử đơn vị định nghĩa loại kiểm thử phần mềm đơn vị hay thành phần riêng lẻ phần mềm kiểm thử - Kiểm thử đơn vị thực trình phát triển (coding) ứng dụng Mục tiêu Kiểm thử đơn vị cô lập phần code xác minh tính xác đơn vị - Trong lập trình thủ tục, đơn vị chức thủ tục riêng lẻ Kiểm thử đơn vị thường thực developer - Trong quy trình phát triển phần mềm, quy trình kiểm thử phần mềm, Mơ hình chữ V, Kiểm thử đơn vị cấp độ kiểm thử thực trước kiểm thử tích hợp Kiểm thử đơn vị kỹ thuật WhiteBox testing, thường thực developer Tuy nhiên thực tế, thời gian bị giới hạn yêu cầu developer, kỹ sư QA thực kiểm thử đơn vị 1.2.2 Tại cần kiểm thử đơn vị Đôi developer tiết kiệm thời gian cách thực kiểm thử đơn vị phạm vi tối thiểu Đây sai lầm thực kiểm thử đơn vị không kĩ lưỡng dẫn đến chi phí sửa lỗi cao trình Kiểm thử hệ thống, Kiểm thử tích hợp chí Kiểm thử Beta sau ứng dụng hồn tất Kiểm thử đơn vị thực giai đoạn xây dựng giúp tiết kiệm thời gian tiền bạc Đây lý để thực kiểm thử đơn vị Kiểm thử đơn vị giúp sửa lỗi sớm chu kỳ phát triển tiết kiệm chi phí Kiểm thử đơn vị giúp developer hiểu sở tảng cho phép họ thay đổi nhanh chóng Kiểm thử đơn vị tốt phục vụ tài liệu dự án Kiểm thử đơn vị sử dụng lại code Sao chép code trường hợp kiểm thử sang dự án Chỉnh code để chạy lại 1.2.3 Cách thực kiểm thử đơn vị Kiểm thử đơn vị có hai loại: - Thủ công - Tự động Kiểm thử đơn vị thường thực tự động thực thủ cơng Kiểm thử đơn vị tự động hóa ưa thích Theo hướng tiếp cận tự động:  Một developer viết phần code ứng dụng kiểm thử chức Sau đó, họ thích cuối loại bỏ code kiểm thử ứng dụng triển khai  Một developer lập chức để kiểm thử chặt chẽ Kiểm thử đơn vị thực kỹ lưỡng copy code vào môi trường kiểm thử riêng so với môi trường tự nhiên Cơ lập code giúp nhận biết ràng buộc không cần thiết code kiểm thử đơn vị khác sản phẩm Những ràng buộc loại bỏ  Một lập trình viên thường sử dụng UnitTest Framework để phát triển test cases tự động Sử dụng Framework tự động hóa, developer kiểm thử tiêu chí codes để xác minh tính xác code Trong q trình thực test cases, framework ghi file log test cases bị lỗi Nhiều framework tự động gắn cờ báo cáo Tùy thuộc vào mức độ nghiêm trọng lỗi, framework tạm dừng kiểm thử  Quy trình làm việc Kiểm thử đơn vị là: Tạo test cases => Review/Rework => Baseline => Thực test cases 1.2.4 Kỹ thuật kiểm thử đơn vị Các kỹ thuật bao phủ code sử dụng kiểm thử đơn vị liệt kê đây:  Statement Coverage  Decision Coverage  Branch Coverage  Condition Coverage  Finite State Machine Coverage 1.2.5 Cơng cụ kiểm thử đơn vị Có số cơng cụ tự động có sẵn hỗ trợ kiểm thử đơn vị Chúng ta xem vài ví dụ đây: Jtest: Parasoft Jtest plugin IDE sử dụng frameworks mã nguồn mở (Junit, Mockito, PowerMock Spring) với dẫn hành động, dễ dàng tạo, mở rộng bảo trì kiểm thử đơn vị Bằng cách kiểm thử đơn vị tự động trường hợp tốn thời gian, giúp developer tập trung vào logic tạo kiểm thử có ý nghĩa Junit: Junit công cụ kiểm thử miễn phí, sử dụng cho ngơn ngữ lập trình Java Junit cung cấp nhận định để xác định phương pháp kiểm thử Công cụ kiểm thử liệu đầu tiên, sau chèn vào đoạn code NUnit: NUnit sử dụng rộng rãi, sử dụng framework kiểm thử đơn vị cho tất ngôn ngữ net Đây công cụ mã nguồn mở cho phép viết kịch thủ công, hỗ trợ kiểm thử dựa liệu (data-driven) chạy song song JMockit: JMockit công cụ kiểm thử Đơn vị mã nguồn mở Đây công cụ bao phủ code với số liệu path line JMockit cho phép bắt chước API với cú pháp recording verification Công cụ xác định Line coverage, Path Coverage, Data Coverage EMMA: EMMA cơng cụ mã nguồn mở dùng để phân tích báo cáo code viết ngôn ngữ Java Emma hỗ trợ loại bao phủ method, line, basic block Emma dựa Java nên không phụ thuộc vào thư viện bên ngồi truy cập mã nguồn PHPUnit: PHPUnit công cụ kiểm thử đơn vị cho lập trình viên PHP Phải phần nhỏ code gọi đơn vị kiểm thử mã riêng biệt Công cụ cho phép developer sử dụng phương thức xác nhận xác định trước để khẳng định hệ thống hoạt động theo cách định Đó vài cơng cụ kiểm thử đơn vị Có nhiều cơng cụ kiểm thử đơn vị khác, đặc biệt ngôn ngữ C Java, dễ dàng để tìm thấy cơng cụ kiểm thử đơn vị cho nhu cầu lập trình ngơn ngữ bạn sử dụng 1.2.6 Ưu điểm nhược điểm kiểm thử đơn vị Ưu điểm:  Các developer muốn tìm hiểu chức cung cấp đơn vị cách sử dụng chức xem xét test cases kiểm thử đơn vị để có hiểu biết unit API  Kiểm thử đơn vị cho phép lập trình viên cấu trúc lại code vào ngày sau đảm bảo mơ-đun hoạt động xác (ví dụ: Kiểm thử hồi quy) Quy trình viết trường hợp kiểm thử cho tất hàm phương thức để thay đổi gây lỗi, xác định sửa chữa nhanh chóng  Do tính chất mơ-đun kiểm thử đơn vị, kiểm thử phần dự án mà khơng cần chờ người khác hồn thành Nhược điểm:  Kiểm thử đơn vị phát lỗi chương trình Khơng thể đánh giá tất luồng thực chương trình tầm thường  Kiểm thử đơn vị theo chất tập trung vào đơn vị code Do đó, kiểm thử đơn vị khơng thể bắt lỗi tích hợp lỗi hệ thống lớn 1.2.7 Thực kiểm thử đơn vị để đạt kết tốt nhất?  Các trường hợp kiểm thử đơn vị phải độc lập Trong trường hợp có cải tiến thay đổi yêu cầu, trường hợp kiểm thử đơn vị không bị ảnh hưởng  Chỉ kiểm thử đoạn code thời điểm  Thực theo quy ước đặt tên rõ ràng quán cho test cases kiểm thử đơn vị  Trường hợp thay đổi code mơ-đun nào, nên đảm bảo có Trường hợp kiểm thử đơn vị tương ứng cho mô-đun, pass trường hợp kiểm thử môđun nên thay đổi triển khai kiểm thử mô-đun khác  Lỗi xác định trình kiểm thử đơn vị phải sửa trước chuyển sang giai đoạn quy trình phát triển phần mềm  Càng viết nhiều code mà không kiểm thử, bạn phải kiểm thử nhiều trường hợp 1.3 Kiểm thử đơn vị với JUNIT 1.3.1 Tổng quan Junit - Khái niệm: JUnit đơn giản sử dụng cho việc tạo đơn vị kiểm tra tự động chạy thử nghiệm lặp lặp lại Nó kiến trúc xUnit họ cho phép tạo kiểm tra đơn vị - Lịch sử phát triển Junit: + Vào năm 90 kỷ 20, Kent Beck phát triển thử nghiệm cho SmallTalk + Beck Gamma phát triển Junit chuyến bay từ Zurick đến Washington, DC + Từ trở Junit trở thành công cụ chuẩn cho Phát triển Thách thức Java + Ngày nay, Junit tích hợp sẵn IDE Java (Eclipse, BlueJ, Jbuilder, DrJava) 1.3.2 Các thuật ngữ Junit: - “Test runner” phần mềm chạy kiểm thử báo cáo kết - “Test suite” tập trường hợp kiểm thử - “Test case” kiểm tra phản ứng hàm đơn với tập đầu vào - “Unit test” kiểm thử phần tử mã nguồn nhỏ kiểm thử, thường lớp đơn - “Test fixture” môi trường chạy kiểm thử Một môi trường cài đặt trước lần thực trường hợp kiểm thử huỷ bỏ sau Ví dụ: để thử nghiệm CSDL, mơi trường kiểm thử thiết lập máy chủ trạng thái ban đầu chuẩn, sẵn sàng cho khách hàng để kết nối - “Integration test” kiểm thử cho việc kết hợp hoạt động nhiều lớp với Junit hỗ trợ phần cho kiểm thử tích hợp 1.3.3 Kiến trúc tổng quan Junit: 1.3.4 Lợi ích hạn chế Junit - Mục đích, lợi ích: Junit tránh cho người lập trình phải làm làm lại việc kiểm thử nhàm chán cách tách biệt mã kiểm thử khỏi mã chương trình, đồng thời tự động hóa việc tổ chức thi hành số liệu kiểm thử - Hạn chế Junit: + Tốn thời gian cho việc chạy toàn test suite + Rất nhiều chương trình lập trình thêm: “Đúng!”, sử dụng framework có sẵn giúp giảm bớt trình lập trình 1.3.5 Các phương thức Junit + assertXXX(): Các phương thức dạng assertXXX() dùng để kiểm tra điều kiện khác + SetUp() teardown(): Hai phương thức phần lớp Junit.framework.TestCase Khi sử dụng phương thức giúp tránh việc trùng mã nhiều test chia sẻ phần khởi tạo dọn dẹp biến + Tổ chức phép thử: Mỗi phép thử (Test Case) nên kiểm tra phần cụ thể chức Chúng ta không nên kết hợp nhiều phép thử không liên quan đến vào phương thức testXXX() 1.3.6 Một số cách test với Junit + Kiểm tra với test case + Kiểm tra với nhiều test case + Kiểm tra với exception + Dùng test làm hướng dẫn sử dụng 1.3.7 Cấu trúc lớp kiểm thử Junit: - Chúng ta muốn kiểm thử lớp tên Triangle: + Đây kiểm thử đơn vị lớp Triangle, định nghĩa đối tượng sử dụng hay nhiều kiểm thử: public class TriangleTestJ4{} + Đây hàm tạo mặc định: public TriangleTest () {} - @Before public void init (): Tạo môi trường kiểm thử cách tạo khởi tạo đối tượng giá trị - @After public void cleanUp (): Giải phóng tài ngun hệ thống sử dụng mơi trường kiểm thử Java thường thực giải phóng tự động files, kết nối mạng ko giải phóng hồn tồn - @Test public void noBadTriangles (), @Test public void scaleneOk (), etc: Các phương thức chứa tests cho hàm tạo Triangle phương thức isScalene () 1.3.8 Thực Tests Assert - Trong test: + Gọi phương thức kiểm thử thu kết thực tế + Assert (xác nhận) thuộc tính chứa kết kiểm thử + Mỗi assert thách thức cho kết kiểm thử - Nếu thuộc tính thất bại, assert thất bại đối tượng AssertionFailedError sinh Junit nhận lỗi, ghi lại kết kiểm thử hiển th CHƯƠNG Cài đặt kiểm thử với JUNIT 2.1 Cài đặt Junit Bước 1: Mở Eclipse, tạo project tên TestJUnit ==> Finish Bước 2: Thêm thư viện JUnit cho project Chuột phải vào project TestJUnit ==> Build Path ==> Add Library Chọn JUnit sau chọn JUnit Finish 2.2 Kiểm thử tốn phép tính với Junit 2.2.1 Mơ tả toán test case Bài toán: Thực kiểm thử tốn phép tính (+, -, *, /) hai số nguyên Bảng test case Phép toán + * / + / * / 2.2.2 Các bước thực Đầu vào (1, 1) (1, 1) (1, 1) (1, 1) (a, b) (1, 0) (‘’, a) (/, 2) (a, b) Kết mong đợi 1 || || || || || Kết trả Trong JUnit, đưa tham số vào unit test cách: Thông qua phương thức khởi tạo (Constructor) Sử dụng filed injection với annotation @Parameter Bước 1: Tạo project tên Parameterizing Bước 2: Add JUnit vào class path project Bước 3: Tạo class tên MathUtils Trong class MathUtils, tạo phương thức static đơn giản trả tổng hai số nguyên Chúng ta sử dụng class để tạo test case với JUnit Bước 4: Parameterized với JUnit thông qua phương thức khởi tạo Constructor Tạo class ParameterizedTest Trong class sử dụng annotation @RunWith JUnit JUnit biết test case chạy với class Cụ thể @RunWith(value = Parameterized.class) JUnit Chúng ta thêm cấu hình tham số thơng qua phương thức khởi tạo class ParameterizedTest Tham số array gồm phần tử, tương ứng với number (a), number (b) tổng Lines từ 18-22: có phương thức khởi tạo class ParameterizedTest Trong phương thức gán giá trị tham số truyền vào (còn gọi arguments) cho thuộc tính class ParameterizedTest (có thuộc tính tương ứng với số hạng tổng chúng) Line 24: sử dụng annotations @Parameters để định dạng liệu tham số, thuộc tính name annotation không bắt buộc, để name chuỗi biểu diễn chuỗi in console đối tượng liệu (lưu collection) test Bước 5: Chạy test case review kết Chuột phải vào class ParameterizedTest ==> Chọn Run As ==> Chọn JUnit Test Chúng ta quan sát thấy test case với đầu vào liệu khác thực Bước 6: Sửa lại class ParameterizedTest để thực tham số hóa test case theo cách thứ (Field Injection) Chúng ta xóa phương thức khởi tạo class này, thay sử dụng injection @Parameter JUnit cho thuộc tính class Chú ý thuộc tính phải chuyển từ private sang public Chạy lại test case thu kết Bước 2.3 Kiểm thử toán tam giác với Junit 2.3.1 Mơ tả tốn bảng test case Bài toán: Cho ba số a, b, c Kiểm tra xem ba số cạnh tam giác hay khơng, có tam giác gì? Bảng test case a 6 ‘’ -1 a b 6 10 c 7 Kết mong đợi Khong la tam giac Day la tam giac vuong Day la tam giac can Day la tam giac deu || Loi du lieu || Day la tam giac Kết thực tế aaaaaaaa 10 BẢNG PHÂN CÔNG CÔNG VIỆC Thành viên Nguyễn Đức Nam Nguyễn Trường An Đặng Tiến Tồn Cơng việc làm KẾT LUẬN ... thuật kiểm thử đơn vị 1.2.5 Công cụ kiểm thử đơn vị 1.2.6 Ưu điểm nhược điểm kiểm thử đơn vị 1.2.7 Thực kiểm thử đơn vị để đạt kết tốt nhất? 1.3 Kiểm thử đơn vị với JUNIT. .. Unit - Kiểm thử đơn vị định nghĩa loại kiểm thử phần mềm đơn vị hay thành phần riêng lẻ phần mềm kiểm thử - Kiểm thử đơn vị thực trình phát triển (coding) ứng dụng Mục tiêu Kiểm thử đơn vị cô... VỀ KIỂM THỬ VÀ JUNIT .1 1.1 Tổng quan kiểm thử 1.2 Kiểm thử đơn vị 1.2.1 Khái niệm 1.2.2 Tại cần kiểm thử đơn vị 1.2.3 Cách thực kiểm thử đơn vị

Ngày đăng: 06/12/2022, 20:14

Hình ảnh liên quan

Chúng ta sẽ thêm cấu hình tham số thông qua phương thức khởi tạo của class ParameterizedTest - Kiểm thử đơn vị với Junit

h.

úng ta sẽ thêm cấu hình tham số thông qua phương thức khởi tạo của class ParameterizedTest Xem tại trang 17 của tài liệu.
Bảng test case - Kiểm thử đơn vị với Junit

Bảng test.

case Xem tại trang 20 của tài liệu.
2.3.1 Mơ tả bài tốn và bảng test case - Kiểm thử đơn vị với Junit

2.3.1.

Mơ tả bài tốn và bảng test case Xem tại trang 20 của tài liệu.
BẢNG PHÂN CÔNG CÔNG VIỆC - Kiểm thử đơn vị với Junit
BẢNG PHÂN CÔNG CÔNG VIỆC Xem tại trang 22 của tài liệu.

Tài liệu cùng người dùng

Tài liệu liên quan