Static Testing và Dynamic Testing: Khác nhau như thế nào?

⏱︎

Read time:

2–3 minutes
Minh họa so sánh Static Testing và Dynamic Testing

Trong kiểm thử phần mềm, Static Testing và Dynamic Testing là hai cách tiếp cận quan trọng. Điểm khác biệt cốt lõi rất đơn giản: Static Testing không cần chạy phần mềm, còn Dynamic Testing cần thực thi phần mềm.

Static Testing là gì?

Kiểm thử tĩnh (Static Testing) là hoạt động đánh giá các sản phẩm công việc mà không thực thi phần mềm. Đối tượng kiểm tra có thể là requirement, user story, thiết kế, source code hoặc test cases

Ví dụ: BA viết yêu cầu “Mật khẩu phải có tối thiểu 8 ký tự”, nhưng mockup lại hiển thị tối thiểu 6 ký tự. Tester có thể phát hiện điểm không nhất quán này ngay khi review tài liệu, trước khi lập trình.

Dynamic Testing là gì?

Kiểm thử động (Dynamic Testing) là hoạt động kiểm thử bằng cách thực thi phần mềm và so sánh kết quả thực tế với kết quả mong đợi.

Ví dụ: tester nhập mật khẩu gồm 6 ký tự vào màn hình đăng ký. Hệ thống vẫn tạo tài khoản thành công, trong khi yêu cầu quy định tối thiểu 8 ký tự. Hành vi sai quan sát được là một failure và có thể cho thấy phần mềm đang chứa defect.

Functional Testing, Performance Testing, API Testing hay UI Testing đều có thể là Dynamic Testing vì chúng yêu cầu thành phần hoặc hệ thống được thực thi.

So sánh Static Testing và Dynamic Testing

Tiêu chíStatic TestingDynamic Testing
Thực thi phần mềmKhôngCó
Đối tượng phổ biếnYêu cầu, thiết kế, code, test caseUI, API, các component của phần mềm
Cách thực hiệnReview và Static AnalysisChạy test và quan sát kết quả
Khả năng phát hiệnDefect trong tài liệu hoặc codeFailure khi phần mềm hoạt động, từ đó tìm defect
Thời điểm áp dụngCó thể bắt đầu rất sớmKhi phần mềm bắt đầu test được

Static và Dynamic Testing có thay thế nhau không?

Không. Hai cách tiếp cận bổ sung cho nhau. Static Testing giúp ngăn ngừa và phát hiện defect sớm; Dynamic Testing kiểm chứng hành vi thực tế khi phần mềm chạy. Một lỗi yêu cầu bị bỏ sót trong review có thể trở thành defect trong code và chỉ được nhận ra khi hệ thống gây ra failure.

Vì vậy, một quy trình kiểm thử hiệu quả nên kết hợp cả hai: review yêu cầu, thiết kế và code từ sớm; sau đó thực hiện các cấp độ và loại kiểm thử động phù hợp khi phần mềm đã có thể chạy.