Test-Driven Development (TDD) như được định nghĩa trong Wiki, là một kỹ thuật phát triển phần mềm chia nhỏ một chức năng thành các pha phát triển nhỏ dựa trên việc định nghĩa các test case. Mỗi pha tạo ra các đoạn code cần thiết để có thể đạt được các pha test. Cuối cùng, người lập trình hiệu chỉnh (refactor) code cho khớp với các thay đổi. Một khái niệm quan trọng của TDD là phải chuẩn bị các bản test trước khi lập trình để thuận tiện cho việc nhanh chóng đáp ứng các thay đổi. Chú ý rằng test-driven development là một phương pháp thiết kế phần mềm, không chỉ là một phương pháp của việc kiểm thử.
Trong bài viết này, chúng tôi sẽ sử dụng một ví dụ là xây dựng một Stack sử dụng Test-Driven Development (TDD) theo từng bước một.
Nhiệm vụ
Stack là một cấu trúc dữ liệu mà được truy cập theo kiểu tuần tự vào sau ra trước. Các hoạt động bao gồm: Push, Pop, Top và IsEmpty. Push thêm một phần từ vào đỉnh của Stack, Pop lấy một phần tử trên đỉnh của Stack, Top trả lại phần tử trên đỉnh của Stack. IsEmpty trả về true khi Stack rỗng, ngược lại là false.
Như vậy, danh sách test gồm:
- Tạo một Stack và xác nhận IsEmpty là true.
- Push một đối tượng đơn vào Stack và xác nhận IsEmpty là false.
- Push một đối tượng đơn, Pop đối tượng đó và xác nhận IsEmpty là true.
- Push một đối tượng đơn, ghi nhớ đối tượng đó; Pop đối tượng, và xác nhận hai đối tượng này là giống nhau.
- Push ba đối tượng, ghi nhớ chúng; Pop từng đối tượng một, và xác nhận chúng được xóa theo đúng thứ tự.
- Pop một Stack không có thành phần nào.
- Push một đối tượng đơn và sau đó gọi Top. Xác nhận IsEmpty là false.
- Push một đối tượng đơn, nhớ nó; sau đó gọi Top. Xác nhận đối tượng trả lại là giống với đối tượng đã được đưa vào.
- Gọi Top trên một Stack rỗng.
Ở đây, chúng ta sẽ chọn test case đơn giản nhất để thực hiện đầu tiên, đó chính là test case đầu tiên trên danh sách ở trên.
Cài đặt
Tiếp theo, chúng ta sẽ cài đặt từng test case trong danh sách ở trên.
Test 1: Tạo một Stack và xác nhận IsEmpty là true.
Chúng ta sẽ tạo 1 file source code test gọi là StackFixture.cs, trong đó sẽ chứa các test case được cài đặt.
Đầu tiên, chúng ta khai báo
using System; using NUnit.Framework; [TestFixture] public class StackFixture { /*...*/ }
Tiếp theo, chúng ta viết phương thức test cho test case này, tên là Empty.
[Test] public void Empty() { Stack stack = new Stack(); Assert.IsTrue(stack.IsEmpty); }
Với bản test ở trên, chúng ta sẽ thực hiện cài đặt code cho Property là IsEmpty của lớp Stack mà ta đang cài đặt.
using System; public class Stack { private bool m_IsEmpty; public bool IsEmpty { get { return m_IsEmpty; } } }
Như vậy, việc cài đặt cho test case đầu tiên đã hoàn thành. Khi bắt đầu, bạn nên tập trung vào test case mà bạn đang viết và không nghĩ đến các test case khác. Điều đó sẽ giúp bạn kiểm soát được tốt hơn khi mà lượng test case lớn hơn.
No comments:
Post a Comment