Kiểm thử đơn vị là một phần quantrọng của quy trình phát triển phần mềm, giúp phát hiện lỗi sớm trong quá trình pháttriển và đảm bảo rằng các phần tử nhỏ nhất của ứng dụng hoạt động chín
Trang 1HỌC VIỆN HÀNG KHÔNG VIỆT NAM
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO KIỂM CHỨNG PHẦN MỀM“Tìm hiểu và trình bày các tính năng
công cụ kiểm thử đơn vị JUnit”
HỌC KỲ III – NĂM HỌC:2023-2024MÃ LỚP HỌC PHẦN: 010100086601
Giảng viên hướng dẫn: Hồ Văn Quí
Võ Như Hoàng Huy MSSV: 2254810046Nguyễn Tấn Dũng MSSV: 2254810046
TP HCM, tháng 6 năm 2024
Trang 2NHẬN XÉT VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
Trang 3Chương II Các tính năng chính của JUnit 4
2.1 Annotation 5
2.2 Assertions 5
2.3 Test RunnerTest 6
2.4 Parameterized Tests 6
2.5 Integration with IDEs and Build Tools 6
Chương III Cài đặt một bài toán cụ thể 7
3.1 Mã nguồn của lớp ArrayUtils 7
3.2 Tạo test script 7
Chương IV Thực thi test script và kiểm tra kết quả 10
Chương V Kết luận 11
Trang 4Chương I Giới thiệu về kiểm thử đơn vị và JUnit
Kiểm thử đơn vị (unit testing) là một phương pháp kiểm thử phần mềm mà trong đócác phần tử nhỏ nhất của mã nguồn, gọi là đơn vị (unit), được kiểm thử độc lập đểđảm bảo chúng hoạt động đúng như mong đợi Kiểm thử đơn vị là một phần quantrọng của quy trình phát triển phần mềm, giúp phát hiện lỗi sớm trong quá trình pháttriển và đảm bảo rằng các phần tử nhỏ nhất của ứng dụng hoạt động chính xác
JUnit là một framework kiểm thử đơn vị phổ biến nhất trong môi trường phát triểnphần mềm Java Được tạo ra bởi Kent Beck và Erich Gamma, JUnit cung cấp mộtnền tảng mạnh mẽ và dễ sử dụng để viết và thực thi các test case JUnit đã trở thànhtiêu chuẩn cho kiểm thử đơn vị trong Java và được tích hợp tốt với các công cụ xâydựng và môi trường phát triển tích hợp (IDE) như Maven, Gradle, IntelliJ IDEA vàEclipse
Junit là một thể hiện của kiến trúc xUnit cho các khung kiểm thử đơn vị JUnit thiết lập ý tưởng "thử nghiệm đầu tiên sau codeing", nhấn mạnh vào việc thiết lập dữ liệu thử nghiệm cho một đoạn code có thể được kiểm tra trước và sau đó được triển khai Cách tiếp cận này giống như "kiểm tra một chút, viết mã một chút, kiểm tra một chút,viết mã một chút." Junit làm tăng năng suất của lập trình viên và sự ổn định của mã
Trang 5chương trình, do đó làm giảm sự căng thẳng trên lập trình viên và thời gian dành cho việc gỡ lỗi
Chương II Các tính năng chính của JUnit
JUnit nổi bật với nhiều tính năng mạnh mẽ hỗ trợ việc viết và quản lý các test case dễdàng và hiệu quả
Cung cấp chú thích để xác định phương pháp thử nghiệm. Cung cấp xác nhận để kiểm tra kết quả mong đợi Cung cấp các trình chạy thử nghiệm để chạy thử nghiệm Các bài kiểm tra JUnit cho phép bạn viết mã nhanh hơn, làm tăng chất lượng
phần mềm JUnit rất đơn giản và tốn ít thời gian hơn Các bài kiểm tra JUnit có thể được chạy tự động và họ kiểm tra kết quả của
riêng họ và cung cấp phản hồi ngay lập tức Không cần phải tự tay thông quamột báo cáo kết quả kiểm tra.'
Các bài kiểm tra JUnit có thể được tổ chức thành các test suites chứa các testcase và thậm chí các test suites khác
JUnit cho thấy tiến trình thử nghiệm trong một thanh có màu xanh lá cây nếuthử nghiệm chạy thành công và nó chuyển sang màu đỏ khi thử nghiệm khôngthành công Trường hợp kiểm thử đơn vị là gì?
Một trường hợp kiểm thử đơn vị là 1 phần của mã nguồn để đảm bảo rằng mộtphần của mã nguồn hay còn gọi là phương thức hoạt động như mong đợi Đểđạt được kết quả mong muốn một cách nhanh chóng, cần có framewoke kiểmtra bắt buộc JUnit là một framewoke kiểm thử đơn vị hoàn hảo cho ngôn ngữlập trình Java
Một trường hợp thử nghiệm đơn vị viết chính thức được đặc trưng bởi một đầuvào được biết đến và một đầu ra dự kiến, được thực hiện trước khi thử nghiệmđược thực hiện Đầu vào đã biết nên kiểm tra điều kiện tiên
Trang 6quyết(precondition) và đầu ra dự kiến sẽ kiểm tra điều kiện sau ( condition.).
post- Phải có ít nhất hai trường hợp thử nghiệm đơn vị cho mỗi yêu cầu - một thửnghiệm valid data và một thử nghiệm invalid data Nếu yêu cầu có yêu cầuphụ, mỗi yêu cầu phụ phải có ít nhất hai trường hợp thử nghiệm là valid datavà invalid data
Dưới đây là một số tính năng quan trọng của JUnit:
2.2 Assertions
Assertions là các phương thức được sử dụng để kiểm tra tính đúng đắn của kết quảkiểm thử JUnit cung cấp nhiều phương thức assertion để so sánh kết quả mong đợivà kết quả thực tế, bao gồm:
assertEquals(expected, actual): Kiểm tra xem giá trị thực tế có bằng giá trị mong đợikhông
Trang 7assertTrue(condition): Kiểm tra xem điều kiện có đúng không.assertFalse(condition): Kiểm tra xem điều kiện có sai không.assertNull(object): Kiểm tra xem đối tượng có null không.assertNotNull(object): Kiểm tra xem đối tượng có không null không.assertThrows(expectedType, executable): Kiểm tra xem một ngoại lệ có được ném ranhư mong đợi không.
2.4 Parameterized Tests
JUnit hỗ trợ việc kiểm thử với nhiều bộ dữ liệu khác nhau thông qua tính năngparameterized tests Điều này cho phép chúng ta viết một test case duy nhất nhưng cóthể kiểm thử với nhiều bộ dữ liệu khác nhau, giúp tiết kiệm thời gian và công sức
2.5 Integration with IDEs and Build Tools
JUnit tích hợp tốt với các IDE như IntelliJ IDEA, Eclipse và các công cụ xây dựngnhư Maven, Gradle Điều này cho phép các nhà phát triển dễ dàng viết, thực thi vàquản lý các test case trong môi trường phát triển quen thuộc
Trang 8Chương III Cài đặt một bài toán cụ thể
Để minh họa cách sử dụng JUnit trong thực tế, chúng ta sẽ tạo một ứng dụng đơngiản để tính toán tổng của một mảng số nguyên và kiểm thử các phương thức của nóbằng JUnit Bài toán cụ thể là kiểm tra hàm sumArray trong lớp ArrayUtils
3.1 Mã nguồn của lớp ArrayUtils
Dưới đây là mã nguồn của lớp ArrayUtils với hàm sumArray để tính tổng của mộtmảng số nguyên
javaSao chép mãpublic class ArrayUtils { public static int sumArray(int[] array) { int sum = 0;
for (int num : array) { sum += num; }
return sum; }
}
3.2 Tạo test script
Chúng ta sẽ viết các test case để kiểm tra hàm sumArray sử dụng JUnit Dưới đây làmã nguồn của lớp ArrayUtilsTest với các test case cho hàm sumArray
Trang 9javaSao chép mãimport org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;
public class ArrayUtilsTest { @Test
public void testSumArray_EmptyArray() { int[] array = {};
int result = ArrayUtils.sumArray(array); assertEquals(0, result, "Sum of empty array should be 0"); }
@Test public void testSumArray_SingleElement() { int[] array = {5};
int result = ArrayUtils.sumArray(array); assertEquals(5, result, "Sum of array with single element 5 should be 5"); }
@Test public void testSumArray_MultipleElements() { int[] array = {1, 2, 3, 4, 5};
Trang 10int result = ArrayUtils.sumArray(array); assertEquals(15, result, "Sum of array {1, 2, 3, 4, 5} should be 15"); }
@Testpublic void testSumArray_NegativeNumbers() { int[] array = {-1, -2, -3, -4, -5};
int result = ArrayUtils.sumArray(array); assertEquals(-15, result, "Sum of array {-1, -2, -3, -4, -5} should be -15"); }
@Test public void testSumArray_MixedNumbers() { int[] array = {-1, 2, -3, 4, -5};
int result = ArrayUtils.sumArray(array); assertEquals(-3, result, "Sum of array {-1, 2, -3, 4, -5} should be -3"); }
}
Trang 11Chương IV Thực thi test script và kiểm tra kết quả
Có thể nói, test script là bản hướng dẫn chi tiết, viết bằng code (mã) để thực hiện automation testing (kiểm thử tự động) Ngoài ra, bạn cũng cần dùng phần mềm automation testing để thực thi test script Một số phần mềm được sử dụng phổ biến hiện nay gồm có Selenium, UTF One (Micro Focus Unified Functional Testing), TestComplete, Cucumber,
Thông thường, trong test script, bạn sẽ viết code để thực hiện ít nhất một lần những tác vụ sau:
1 Xác định trường tham chiếu của input hay test data (dữ liệu đầu vào)2 Kiểm tra sự tồn tại của trường tham chiếu input
3 Điều hướng đến nó và nhập input4 Định vị trường tham chiếu của output (dữ liệu đầu ra)5 Xác minh sự tồn tại của trường tham chiếu output6 Điều hướng đến nó để đọc output
7 So sánh output với expected value (kết quả dự kiến)8 Lưu trữ kết quả kiểm thử vào log (bản nhật ký) hoặc report (bản báo cáo)
Chúng ta có thể thực thi các test case này bằng cách sử dụng IDE hoặc các công cụxây dựng như Maven hoặc Gradle Dưới đây là cách thực thi bằng IntelliJ IDEA:Mở lớp ArrayUtilsTest
Nhấn chuột phải và chọn "Run 'ArrayUtilsTest'".Kết quả kiểm thử sẽ được hiển thị trong cửa sổ kết quả kiểm thử của IDE.Nếu tất cả các test case đều vượt qua, điều đó chứng tỏ hàm sumArray hoạt độngđúng với các trường hợp đã kiểm tra Kết quả kiểm thử sẽ cho thấy các phương thứckiểm thử đã được thực thi thành công và không có lỗi xảy ra
Trang 12Chương V Kết luận
JUnit là một công cụ mạnh mẽ và dễ sử dụng cho việc kiểm thử đơn vị trong Java.Với các tính năng như annotation, assertion, và tích hợp tốt với các IDE và công cụxây dựng, JUnit giúp các nhà phát triển dễ dàng viết, thực thi và quản lý các test case.Kiểm thử đơn vị không chỉ giúp phát hiện lỗi sớm trong quá trình phát triển mà cònđảm bảo chất lượng phần mềm tốt hơn
Trong bài viết này, chúng ta đã tìm hiểu các tính năng chính của JUnit và áp dụngchúng vào một bài toán cụ thể Chúng ta đã tạo một lớp ArrayUtils với hàmsumArray và viết các test case để kiểm thử hàm này bằng JUnit Qua việc thực thi cáctest case, chúng ta đã xác định rằng hàm sumArray hoạt động đúng như mong đợi
Sử dụng JUnit không chỉ giúp cải thiện chất lượng mã nguồn mà còn giúp tăng hiệuquả phát triển phần mềm bằng cách tự động hóa quá trình kiểm thử Điều này đặc biệtquan trọng trong môi trường phát triển Agile, nơi mà kiểm thử tự động đóng vai tròquan trọng trong việc đảm bảo chất lượng và tính ổn định của phần mềm trong cácchu kỳ phát hành nhanh chóng