Khám phá sự khác biệt giữa TDD và BDD

admin01
42
17-04-2024

Sự khác biệt giữa TDD và BDD từ góc độ tổng quan: TDD lấy developer làm trung tâm, xoay quanh tính chính xác của code, với các framework dành riêng cho ngôn ngữ lập trình. Mặt khác, BDD lấy người dùng làm trung tâm, xoay quanh hành vi của hệ thống và thúc đẩy sự hợp tác giữa các stakeholders bằng domain-specific language. Hãy cùng Cole tìm hiểu chi tiết trong bài viết dưới đây.

Behavior Driven Development (BDD) là gì?

Behavior Driven Development (BDD) là một kỹ thuật phát triển tập trung nhiều hơn vào hành vi của ứng dụng phần mềm. Chủ yếu, nó tạo ra một đặc tả có thể thực thi được nhưng không thành công do tính năng tương ứng không tồn tại, sau đó viết các đoạn code đơn giản nhất có thể khiến đặc tả đó vượt qua và kết quả là chúng ta có được hành vi cần thiết được triển khai trong hệ thống. Trên thực tế, đây là một team methodology trong đó Developers, Customer, QAs tham gia vào đó.

Quy trình Behavior Driven Development (BDD) bao gồm:

  • Viết hành vi của ứng dụng
  • Viết automated scripts
  • Triển khai các đoạn code chức năng
  • Kiểm tra xem behavior có thành công không và nếu không thì fix lại
  • Sắp xếp code (Tùy chọn)
  • Lặp lại các bước cho hành vi khác
Tổng quan về Behavior Driven Development (BDD)

Tổng quan về Behavior Driven Development (BDD)

 

Test Driven Development (TDD) là gì?

Test Driven Development (TDD) là một kỹ thuật phát triển tập trung nhiều hơn vào việc triển khai một tính năng của ứng dụng/sản phẩm phần mềm. Chủ yếu nó đề cập đến việc viết một trường hợp kiểm thử bị lỗi do chức năng được chỉ định không tồn tại và sau đó cập nhật code có thể làm cho trường hợp kiểm thử đó vượt qua và kết quả là triển khai được tính năng trong hệ thống. Trên thực tế, đó là một hoạt động phát triển trong đó các developers tham gia vào nó.

Quy trình Test Driven Development (TDD) bao gồm:

  • Thêm test case
  • Chạy các trường hợp thử nghiệm và xem thử nghiệm thất bại
  • Update các đoạn code
  • Chạy lại các trường hợp thử nghiệm
  • Cấu trúc lại các đoạn code (Tùy chọn)
  • Lặp lại các bước cho trường hợp thử nghiệm khác
Tổng quan về Test Driven Development (TDD)

Tổng quan về Test Driven Development (TDD)

Sự khác biệt giữa TDD và BDD

 

So sánh Test-Driven Development (TDD) Behavior-Driven Development (BDD)
Quan điểm chính Triển khai chức năng của code thông qua phương pháp thử nghiệm đầu tiên Collaboration, shared understanding và xác nhận hành vi của hệ thống từ góc độ của người dùng
Thuật ngữ và khả năng đọc Các trường hợp thử nghiệm được viết bằng thuật ngữ programming-centric Các kịch bản được viết ở định dạng ngôn ngữ tự nhiên, dễ hiểu đối với cả thành viên team kỹ thuật và phi kỹ thuật
Hợp tác và giao tiếp Hợp tác giữa developers và testers Hợp tác giữa developers, testers và business stakeholders để xác định và xác thực hành vi của hệ thống
Mức độ trừu tượng Tập trung vào các low-level unit tests để xác minh hành vi của các code units riêng lẻ Tập trung vào các higher-level tests mô phỏng tương tác của người dùng hoặc các tình huống từ đầu đến cuối
Test organization Các thử nghiệm được tổ chức dựa trên code structure và cách tiếp cận phân cấp hoặc modules. Các kịch bản được sắp xếp xung quanh hành vi mong muốn, thường được nhóm theo các tính năng hoặc chức năng cụ thể
Mục đích Đảm bảo tính chính xác của code thông qua automated tests Thúc đẩy các hiểu biết chung, giao tiếp và xác nhận hành vi của hệ thống
Quy trình phát triển Các bài test được viết trước khi triển khai code tương ứng Các kịch bản được xác định bằng hình thức cộng tác trước khi triển khai code. Có thể triển khai TDD trong BDD.
Phạm vi thử nghiệm Phạm vi hẹp, thường tập trung vào các code units riêng lẻ Phạm vi rộng, bao gồm nhiều code units làm việc cùng nhau
Test case style Tập trung vào kỹ thuật và thực hiện Tập trung vào người dùng và hành vi
Kiểm tra độ chi tiết Chi tiết, kiểm tra các code units riêng lẻ một cách riêng biệt Chi tiết hơn, kiểm tra hành vi của hệ thống nói chung
Lặp đi lặp lại sàng lọc và phản hồi Tinh chỉnh code lặp đi lặp lại thông qua các lỗi kiểm tra và sửa đổi code tiếp theo Tinh chỉnh lặp đi lặp lại các kịch bản và hành vi thông qua cộng tác và phản hồi

 

Các frameworks TDD phổ biến

Tham khảo một số frameworks Test Driven Development phổ biến dưới đây:

cSUnit

csUnit là unit testing framework có mã nguồn mở được thiết kế riêng cho .NET Framework, đảm bảo khả năng tương thích với mọi ngôn ngữ tuân thủ .NET. Nó đã trải qua quá trình kiểm tra nghiêm ngặt với C#, Visual Basic .NET, Managed C++ và J#. Ưu điểm đáng chú ý của cSUnit so với NUnit chính là sự linh hoạt trong hoạt động cấp phép, cho phép nó được tích hợp liền mạch vào các closed-source products  thương mại mà không phải chịu bất kỳ chi phí nào.

Ưu điểm của csUnit:

  • Kế thừa sự trưởng thành và ổn định của NUnit.
  • Syntax quen thuộc dành cho các developers quen thuộc với NUnit.

Nhược điểm của csUnit:

  • Hỗ trợ từ cộng đồng và tài liệu khá hạn chế so với NUnit.
  • Ít được duy trì tích cực hơn.
csUnit - unit testing for .NET

csUnit – unit testing for .NET

PyUnit

PyUnit, còn được gọi là unittest, đóng vai trò là framework thử nghiệm đơn vị tiêu chuẩn cho Python. Nó cung cấp một framework tích hợp trong thư viện chuẩn Python, giúp các Python developers có thể truy cập dễ dàng. PyUnit không yêu cầu cài đặt bổ sung vì nó đã được bao gồm trong thư viện chuẩn. Framework này kế thừa syntax đơn giản và thân thiện với người dùng mà Python nổi tiếng, giúp việc tạo thử nghiệm trở nên đơn giản.

Ưu điểm của PyUnit:

  • Không cần cài đặt thêm modules vì nó đã có trong standard Python library.
  • Cho phép thực hiện các trường hợp thử nghiệm đơn giản, rõ ràng và nhanh chóng.
  • Tạo báo cáo thử nghiệm nhanh chóng, bao gồm báo cáo XML và báo cáo unittest-sml.
  • Được cộng đồng Python sử dụng và áp dụng rộng rãi.

Nhược điểm của PyUnit:

  • So với một số testing frameworks Python của bên thứ ba, PyUnit có thể được coi là tương đối cơ bản.
  • Các thư viện bổ sung có thể được yêu cầu cho các tính năng nâng cao như thử nghiệm mô phỏng hoặc thử nghiệm tham số hóa.
  • Việc trừu tượng hóa code kiểm tra đôi khi có thể làm cho mục đích không rõ ràng.
  • Yêu cầu một lượng đáng kể “boilerplate” code.
Giao diện PyUnit framework

Giao diện PyUnit framework

TestNG

TestNG là một testing framework dành cho Java lấy cảm hứng từ JUnit đồng thời bổ sung thêm các tính năng và khả năng bổ sung. Nó cung cấp tính năng hỗ trợ viết và thực hiện các bài kiểm tra trong Java, cung cấp các tính năng như test grouping, test dependencies, parallel test execution và cấu hình kiểm tra nâng cao. TestNG cũng vượt trội trong việc cung cấp các tùy chọn cấu hình thử nghiệm linh hoạt và báo cáo mạnh mẽ. Nó tích hợp hoàn hảo với các IDE Java và các công cụ xây dựng, khiến nó trở thành lựa chọn phổ biến cho Java developers.

Ưu điểm của PyUnit:

  • Cung cấp các tính năng nâng cao ngoài những gì JUnit cung cấp, mở rộng khả năng kiểm tra.
  • Cung cấp hỗ trợ tuyệt vời cho cấu hình và báo cáo thử nghiệm, nâng cao quá trình thử nghiệm.

Nhược điểm của PyUnit:

  • Có thể có lộ trình học tập dành cho người mới sử dụng do các tính năng và cấu hình bổ sung.
  • Có cộng đồng nhỏ hơn so với JUnit, có khả năng ảnh hưởng đến các tài nguyên và hỗ trợ sẵn có.
Input output của TestNG framework

Input output của TestNG framework

Các frameworks BDD phổ biến

Tham khảo một số frameworks Behavior Driven Development phổ biến dưới đây:

Cucumber

Cucumber testing là phương pháp kiểm thử phát triển theo hướng hành vi (BDD), sử dụng công cụ Cucumber để xác định, tự động hóa và thực hiện các trường hợp kiểm thử theo định dạng dễ hiểu đối với cả các bên liên quan về kỹ thuật và phi kỹ thuật.

Trong thử nghiệm Cucumber, các kịch bản thử nghiệm được viết bằng định dạng ngôn ngữ tự nhiên, thường sử dụng cú pháp Gherkin. Syntax này sử dụng các từ khóa như Given, When và Then để mô tả các bước của một trường hợp thử nghiệm. Điều này cho phép các business analysts và chủ sở hữu sản phẩm viết các kịch bản thử nghiệm bằng ngôn ngữ phù hợp với hiểu biết của họ về hệ thống đang được thử nghiệm.

Ưu điểm của Cucumber:

  • Cung cấp một cách trực quan để thể hiện các yêu cầu ở định dạng mà con người có thể đọc được.
  • Hỗ trợ nhiều ngôn ngữ lập trình, tăng cường tính linh hoạt và khả năng áp dụng.
  • Cho phép sử dụng lại code, cho phép tạo các trường hợp thử nghiệm hiệu quả.

Nhược điểm của Cucumber:

  • Sự phức tạp do Gherkin gây ra có thể phát sinh.
  • Given-When-Then framework tuy mang lại sự rõ ràng nhưng có thể dẫn đến việc tạo ra các bước dư thừa, có khả năng làm tăng nỗ lực bảo trì.
Cucumber Automation Testing Tool

Cucumber Automation Testing Tool

SpecFlow

SpecFlow là một testing framework tạo điều kiện thuận lợi cho việc phát triển code và cộng tác giữa các developers. Nó hỗ trợ BDD giúp các nhà phát triển viết và kiểm tra code dễ dàng hơn.

Ưu điểm của SpecFlow:

  • Sự hợp tác thúc đẩy tiến độ thiết kế, có sự tham gia của business analysts, designers, programmers và producers.
  • Chi phí fix bugs thấp do khả năng hiển thị theo thời gian thực trong quá trình phát triển.
  • Living documentation về tiến trình và lỗi trong quá trình viết và kiểm tra code.

Nhược điểm của SpecFlow:

  • Không phù hợp cho các dự án ngắn do tính chất tốn thời gian và chi phí.
  • Khá tốn chi phí cho beginners
  • Phụ thuộc vào tất cả các developers để sử dụng ổn định Behavior Driven Development.
  • Đòi hỏi nỗ lực liên tục và các meeting với các stakeholder thường xuyên.
BDD Framework for .NET

BDD Framework for .NET

Vậy là bạn đã khám phá sâu hơn sự khác biệt giữa TDD và BDD thông qua các yếu tố của thử nghiệm thực tế và tìm hiểu về các testing frameworks TDD và BDD phổ biến. Theo dõi Cole và tham gia khoá học ba để cập nhật các kiến thức mới nhất về lập trình và khoa học dữ liệu.

>> Xem thêm: Phân tích sự khác biệt giữa UML và BPMN

Nâng cấp kỹ năng ứng dụng chuyển đổi số cho người đi làm cùng chúng tôi ngay hôm nay.
Tư vấn miễn phí