Knowledge hub công nghệ ứng dụng thực chiến tại Việt Nam Weekly digest · Đăng ký →
Cole
blog
Tech Radar
Cập nhật công nghệ New Sự kiện công nghệ AI news Hot Developer tools
IT Knowledge
AI & DATA
AI Engineering Data Engineering Data Science LLM/RAG/Agent Hot MLOps / LLMOps
IT CORE
Software Engineering Cloud / DevOps Database Security System Design
BUSINESS ANALYST
BA là gì Lộ trình học Kỹ năng & công việc Chứng chỉ BA Định hướng nghề BA
Ứng dụng số
AI cho công việc Automation No-code / Low-code Data-driven business
Định hướng nghề
Lộ trình học Career guide Portfolio Interview Certification
Expert Insights
Chia sẻ chuyên gia Case study Góc nhìn doanh nghiệp Best practices
Theo dõi
Trang chủ/Ứng dụng số/Data-driven business/Khám phá sự khác biệt giữa TDD và BDD
Data-driven business

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

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,…

TTrọng Nhân
Theo dõi
Khám phá sự khác biệt giữa TDD và BDD

Mục lục

  1. Behavior Driven Development (BDD) là gì?
  2. Test Driven Development (TDD) là gì?
  3. Sự khác biệt giữa TDD và BDD
  4. Các frameworks TDD phổ biến
  5. Các frameworks BDD phổ biến
Tiến độ đọc0%

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

Chủ đề:LangChainRAGpgvectorFastAPIProductionVector DBLLM
Chia sẻ bài viết:
3.8k lượt xem 124 56
T
Tác giả Cole Blog

Trọng Nhân

Viết về công nghệ, dữ liệu và định hướng nghề thực chiến.

Tác giả trên Cole Blog, phụ trách các bài viết giúp người đi làm học nhanh hơn, hiểu rõ hơn và áp dụng công nghệ vào công việc hiệu quả hơn.

18bài viết12.4kfollowers96klượt đọc
Theo dõiXem hồ sơ

Bài liên quan

Chưa có bài liên quan.

Đọc nhiều tuần này

1Cẩm Nang Ôn Thi Chứng Chỉ IIBA Toàn Tập

2Tất Tần Tật Về Chi Phí Thi Chứng Chỉ IIBA Năm 2026

3Ai nên học chứng chỉ Databricks

Nhận bản tin Cole

Mỗi tuần một checklist về AI, Data và định hướng nghề.

Đăng ký

Bài viết khác từ tác giả này

Giáo Trình Business Analyst
Career guide

Giáo Trình Business Analyst



Robot Trading MT4 Có Hiệu Quả Như Lời Đồn?
Career guide

Robot Trading MT4 Có Hiệu Quả Như Lời Đồn?

Trong vài năm trở lại đây, robot trading MT4 đã nổi lên như một công cụ…

Robot Trading MT4 Có Thật Sự Đáng Đầu Tư? 
Career guide

Robot Trading MT4 Có Thật Sự Đáng Đầu Tư? 

Trong thị trường ngoại hối (forex) luôn biến động, việc đưa ra quyết định giao dịch…

Thảo luận

Đăng nhập để bình luận
Gửi bình luận
C
Cole BlogGợi ý thảo luận

Anh có thể đặt câu hỏi, góp ý hoặc lưu lại insight quan trọng sau khi đọc bài.