Trong phạm trù “phần mềm học” thì testing là một bước trong quy trình phát triển phần mềm. Mục đích của testing là đảm bảo phần mềm chạy đúng theo yêu cầu.
Tùy vào từng quy trình phát triển phần mềm mà testing có thể xuất hiện ở các bước khác nhau. Như trong quy trình phát triển phần mềm “Thác nước”, thì testing [kiểm thử] nằm ở bước thứ 4.
Có thể bạn chưa biết
Testing thường được thực hiện sau khi đã có chương trình [sau khi code], nên khiến cho nhiều developer coi nhẹ bước này vì cho rằng “tại sao lại phải test một đoạn code đã chạy đúng”. Vì thế mà rất nhiều phần mềm được tạo ra mà không hề có bước testing.
Testing có thể thực hiện bằng sức người, tức là con người sẽ trực tiếp thao tác trên phần mềm để tìm lỗi. Hoặc cũng có thể thực hiện qua các “công cụ test tự động”, người dùng sẽ đưa ra các “kịch bản test” kèm kết quả mong muốn, nó sẽ chạy và so sánh kết quả thực tế và kết quả mong muốn để phát hiện lỗi.
II. Testing Driven Development
2.1 TDD là gì?
TDD [Testing Driven Development – Phát triển hướng kiểm thử] là một quy trình phát triển phần mềm mà bước kiểm thử được thực hiện trước bước phát triển [tức là test trước khi code].
Ấy mà khoan, chưa code thì lấy cái gì để mà test nhỉ 🤔 🤔 🤔 – Đây cũng chính là điểm khác biệt của TDD với quy trình phát triển phần mềm truyền thống. Bạn cứ đọc hết bài viết sẽ rõ.
2.2 TDD được thực hiện như thế nào?
TDD được thực hiện qua các bước sau:
- Bước 1: Viết một “kịch bản test” [test case], và đảm bảo nó sẽ fail [vì chưa code gì cả, fail là chắc]
- Bước 2: Code để pass qua test case đó
- Bước 3: Bổ sung thêm test case mới
- Bước 4: Tiếp tục code để pass qua test case mới
- Bước 5: Lặp đi lặp lại các bước tương tự 3 – 4 cho đến khi nào pass hết các test case
- Bước 6: Refactor code – điều chỉnh lại code cho gọn gàng, dễ hiểu, để người sau vào đọc đỡ chửi
Bạn sẽ hiểu rõ hơn khi chúng ta thực hiện ví dụ qua phần III.
III. Ví dụ về TDD
Lý thuyết vậy là đủ, giờ chúng ta sẽ thực hiện một ví dụ đơn giản theo quy trình TDD để hiểu rõ hơn về nó.
Bài toán
Viết một function truyền vào một số nguyên N và trả về:
– Trả về “Fizz” nếu N chia hết cho 3
– Trả về “Buzz” nếu N chia hết cho 5
– Trả về “FizzBuzz” nếu N chia hết cho cả 3 và 5
– Trả về N nếu là các trường hợp còn lại
Mình sẽ sử dụng PHP để triển khai bài toán trên, và sử dụng PHPUnit để làm công cụ test tự động.
Bước 1: Setup các thứ
Tạo thư mục làm việc và cài đặt phpunit.
mkdir tdd && cd tdd && mkdir src && mkdir tests composer require --dev phpunit/phpunit ^9
Chỉnh sửa file
composer dump-autoload5 cho giống như sau:
{ "autoload": { "classmap": [ "src/" ] }, "require-dev": { "phpunit/phpunit": "^9" } }
Chạy autoload
composer dump-autoload
Tạo file
composer dump-autoload6 với nội dung như sau: