Tdd la gi

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ác bước trong quy trình phát triển phần mềm thác nước

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-autoload
5 cho giống như sau:

{
    "autoload": {
        "classmap": [
            "src/"
        ]
    },
    "require-dev": {
        "phpunit/phpunit": "^9"
    }
}

Chạy autoload

composer dump-autoload

Tạo file

composer dump-autoload
6 với nội dung như sau:

Chủ Đề