Kiểm thử phần mềm (software testing) là hoạt động nhằm tìm kiếm và phát hiện ra các lỗi của phần mềm, đảm bảo phần mềm chính xác, đúng và trọn vẹn theo yêu cầu của khách hàng, yêu cầu của sản phẩm đã đặt ra. Software testing cũng gửi tới mục tiêu, cái nhìn độc lập về phần mềm điều này cho phép đánh giá và hiểu rõ các rủi ro khi thực thi phần mềm. Căn cứ là gì? Hãy cùng LVN Group nghiên cứu thông qua nội dung trình bày dưới đây
1. Uni Test là gì?
Unit Test (Kiểm thử đơn vị) là kỹ thuật kiểm thử những khối thành phần nhỏ nhất trong phần mềm (thường là các hàm hoặc phương thức). Đây là một trong những cấp độ kiểm thử đơn giản và có thể bắt đầu sớm trong vòng đời phát triển phần mềm. Thậm chí, bạn có thể viết unit test trước khi viết mã. Tuy nhiên, đây không phải là một thuật ngữ mới trong lĩnh vực phần mềm. Khái niệm unit test xuất hiện lần đầu trong ngôn ngữ lập trình Smalltalk vào những năm 1970. Đến nay, unit test gần như đã trở thành một chuẩn mực trong ngành bởi mục đích của nó là phục vụ yêu cầu nâng cao chất lượng sản phẩm phần mềm.
2. Kiểm thử là gì?
Đây là một trong những loại kiểm thử phần mềm cần thiết để xác nhận xem hệ thống có hoạt động đúng yêu cầu được không. Ở tất cả các mức độ kiểm thử đều được kiểm thử chức năng.
Testing of function là một trong những loại kiểm thử phần mềm cần thiết
Testing of function có thể thực hiện theo 2 quan điểm: business – process – based và requirements-based. Với business – process – based, kiểm thử viên sẽ sử dụng các kiến thức về quy trình nghiệp vụ (mô tả các kịch bản liên quan đến nghiệp vụ của hệ thống mỗi ngày).
Trong khi đó, requirements-based sử dụng các đặc tả yêu cầu của hệ thống làm cơ sở để design test. Để đảm bảo những thành phần cần thiết nhất đều được kiểm thử, hãy xem xét độ ưu tiên của yêu cầu dựa trên tiêu chí rủi ro, theo đó, chúng ta sẽ sử dụng độ ưu tiên để kiểm thử.
Các bước kiểm thử chức năng gồm:
Bước 1: Xác định phần mềm sẽ kiểm thử và chức năng của nó
Bước 2: Dựa trên tài liệu đặc tả chức năng để tạo dữ liệu đầu vào
Bước 3: Dựa vào tài liệu đặc tả chức năng để xác định đầu ra
Bước 4: Thực hiện các trường hợp kiểm thử phần mềm
Bước 5: So sánh kết quả thực tiễn với mong muốn đạt được
3. Lợi ích của Unit Testing
Tách rời việc kiểm thử với mã nguồn; không cần viết mã vào phương thức main() để có thể kiểm tra phương thức có hoạt động đúng đắn được không.
Duy trì một bộ kiểm thử liên tục được cập nhật.
Đảm bảo mã mới không ảnh hưởng và gây lỗi tới những chức năng hiện có (qua việc thực hiện chạy lại toàn bộ bộ test đã viết từ trước).
4. Hướng dẫn viết Unit test Java chi tiết nhất
Trước tiên chúng ta cần chuẩn bị vài thứ:
IntelliJ
Maven
Junit 5
JDK 8 or later
4.1. Tạo project
Sau khi tạo xong project, xuất hiện file pom.xml.
File pom.xml là nơi khai báo tất cả những gì liên quan đến dự án được cấu hình qua maven, như khai báo các dependency, version của dự án, tên dự án, repossitory …
Chúng ta thêm các thư viện Junit thông qua pom.xml thay vì add file jar như lúc sử dụng ant.
pom.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<project xmlns=”http://maven.apache.org/POM/4.0.0″
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>DemoUnitTest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4.2. Viết code để test
Tạo một class MathUtil ở ..srcmainjava
MathUtil
public class MathUtil {
public int sum(int a, int b){
return a+b;
}
}
4.3. Tạo testcase version đơn giản
Chúng ta viết vài test case nhẹ nhàng thông qua Annotation @Test và hàm assertEquals().
Tạo một class MathUtilTest tại ..srctestjava
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class MathUtilTest {
MathUtil util = new MathUtil();
@Test
void test1(){
assertEquals(util.sum(1,1),2);
}
@Test
void test2(){
assertEquals(util.sum(1,1),3);
}
@Test
void test3(){
assertEquals(util.sum(1,2),3);
}
}
IntelliJ hỗ trợ các bạn chạy từng test case hoặc cả class test thông qua các nút hiện kế bên số dòng
Khi chạy test, nó sẽ kiểm tra tất cả các Expected và Actual, nó chỉ cho bạn pass khi tất cả đều thành công, chỉ cần có 1 test sai xem như test fail.
Khi có sai sót xảy ra, nó sẽ hiện thông báo lên màn hình
4.4. Unit Test với file csv
Tạo một file data.csv tại .srcmainresources
a,b,result
1,1,2
1,2,3
1,3,4
1,4,5
1,5,6
2,1,3
2,2,4
2,3,5
2,4,6
2,5,7
tạo thêm 1 class MathUtilCsvTest.java
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import static org.junit.jupiter.api.Assertions.*;
public class MathUtilCsvTest {
@ParameterizedTest
@CsvFileSource(resources = “/Data.csv”, numLinesToSkip = 1)
void test(int a, int b, int result){
MathUtil math = new MathUtil();
assertEquals(math.sum(a,b),result);
}
}
Sắp xếp các tham số trong hàm test() theo thứ tự các tham số trong file CSV.