TESTING FUNDAMENTALS
TYPES OF TESTING
TESTCASE DEVELOPMENT
TESTING TECHNIQUES
TEST MANAGEMENT & CONTROL
DEFECTS
AGILE
TESTING DIFFERENT DOMAINS
WHITEBOX TESTING
PERFORMANCE TESTING
ADVANCE TESTING TOPICS
FAQ
TESTING TYPES - MEGA LIST
TOOLS
CHECK!
CERTIFICATION
LIVE TESTING PROJECT
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Kiểm thử đơn vị

Unit testing là một mức độ kiểm thử phần mềm, đòi hỏi phải chuẩn bị trước các test case hoặc script, chỉ định rõ dữ liệu vào, các bước thực hiện và dữ liệu mong đợi được xuất ra. Chúng ta cùng tìm hiểu rõ hơn qua bài viết này nhé.

1. Unit là gì?

Trước tiên, ta cần hiểu được khác niệm Unit là gì?

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Unit là một thành phần nhỏ nhất trong phần mềm có thể thực hiện kiểm thử. Các hàm (Function), thủ tục (Procedure), lớp (Class), hoặc các phương thức (Method) đều là Unit.

2. Kiểm thử đơn vị (Unit testing) là gì?

Kiểm thử đơn vị được định nghĩa là một loại kiểm thử phần mềm trong đó các đơn vị hay thành phần riêng lẻ của phần mềm được kiểm thử.

Kiểm thử đơn vị được thực hiện trong quá trình phát triển (coding) ứng dụng. Mục tiêu của Kiểm thử đơn vị là cô lập một phần code và xác minh tính chính xác của đơn vị đó. Trong lập trình thủ tục, một đơn vị có thể là một chức năng hoặc thủ tục riêng lẻ. Kiểm thử đơn vị thường được thực hiện bởi developer.

Trong quy trình phát triển phần mềm, quy trình kiểm thử phần mềm, Mô hình chữ V, Kiểm thử đơn vị là cấp độ kiểm thử đầu tiên được thực hiện trước khi kiểm thử tích hợp. Kiểm thử đơn vị là một kỹ thuật WhiteBox testing, thường được thực hiện bởi developer. Tuy nhiên trong một thực tế, do thời gian bị giới hạn hoặc yêu cầu của các developer, các kỹ sư QA cũng thực hiện kiểm thử đơn vị.

3. Tại sao cần kiểm thử đơn vị?

Đôi khi các developer tiết kiệm thời gian bằng cách thực hiện kiểm thử đơn vị trong phạm vi tối thiểu. Đây là một sai lầm bởi vì thực hiện kiểm thử đơn vị không kĩ lưỡng sẽ dẫn đến chi phí sửa lỗi cao hơn trong quá trình Kiểm thử hệ thống, Kiểm thử tích hợp và thậm chí Kiểm thử Beta sau khi ứng dụng hoàn tất. Kiểm thử đơn vị được thực hiện trong giai đoạn xây dựng sẽ giúp tiết kiệm cả thời gian và tiền bạc. Đây là những lý do chính để thực hiện kiểm thử đơn vị.

Unit Testing 1 png

  1. Kiểm thử đơn vị giúp sửa lỗi sớm trong chu kỳ phát triển và tiết kiệm chi phí.
  2. Kiểm thử đơn vị giúp các developer hiểu cơ sở nền tảng và cho phép họ thay đổi nhanh chóng
  3. Kiểm thử đơn vị tốt sẽ được phục vụ như tài liệu dự án
  4. Kiểm thử đơn vị có thể sử dụng lại code. Sao chép cả code và những trường hợp kiểm thử sang dự án mới. Chỉnh code để có thể chạy lại.

4. Cách thực hiện kiểm thử đơn vị

Kiểm thử đơn vị có hai loại:

  • Thủ công
  • Tự động

Kiểm thử đơn vị thường được thực hiện tự động nhưng vẫn có thể được thực hiện thủ công. Kiểm thử đơn vị tự động hóa được ưa thích hơn.

Theo hướng tiếp cận tự động:

  • Một developer viết một phần code trong ứng dụng và chỉ kiểm thử chức năng. Sau đó, họ sẽ chú thích và cuối cùng sẽ loại bỏ code kiểm thử khi ứng dụng được triển khai.
  • Một developer cũng có thể cô lập chức năng để kiểm thử được chặt chẽ hơn. Kiểm thử đơn vị được thực hiện kỹ lưỡng hơn nếu copy code vào môi trường kiểm thử riêng so với môi trường tự nhiên của nó. Cô lập code giúp nhận biết các ràng buộc không cần thiết giữa code được kiểm thử và các đơn vị khác trong sản phẩm. Những ràng buộc đó có thể được loại bỏ.
  • Một lập trình viên thường sử dụng UnitTest Framework để phát triển các test cases tự động. Sử dụng Framework tự động hóa, các developer kiểm thử các tiêu chí codes để xác minh tính chính xác của code. Trong quá trình thực hiện các test cases, framework ghi và file log các test cases bị lỗi. Nhiều framework cũng sẽ tự động gắn cờ và báo cáo. Tùy thuộc vào mức độ nghiêm trọng của một lỗi, framework có thể tạm dừng kiểm thử.
  • Quy trình làm việc của Kiểm thử đơn vị là: Tạo các test cases => Review/Rework => Baseline => Thực hiện các test cases

5. Kỹ thuật kiểm thử đơn vị

Các kỹ thuật bao phủ code được sử dụng trong kiểm thử đơn vị được liệt kê dưới đây:

  • Statement Coverage
  • Decision Coverage
  • Branch Coverage
  • Condition Coverage
  • Finite State Machine Coverage

6. Ví dụ kiểm thử đơn vị: đối tượng giả lập

Kiểm thử đơn vị dựa trên các đối tượng giả lập được tạo để kiểm thử các phần code chưa phải là một phần của ứng dụng hoàn chỉnh. Các đối tượng giả lập là các phần còn thiếu của chương trình.

Ví dụ: có một hàm cần các biến hoặc đối tượng chưa được tạo. Trong kiểm thử đơn vị, chúng sẽ được tính toán dưới dạng các đối tượng giả lập được tạo ra chỉ nhằm mục đích kiểm thử đơn vị, được thực hiện trên phần code đó.

7. Công cụ kiểm thử đơn vị

Có một số công cụ tự động có sẵn hỗ trợ kiểm thử đơn vị. Chúng ta cùng xem một vài ví dụ dưới đây:

  1. Jtest: Parasoft Jtest là một plugin IDE sử dụng các frameworks mã nguồn mở (Junit, Mockito, PowerMock và Spring) với các chỉ dẫn và hành động, dễ dàng tạo, mở rộng và bảo trì kiểm thử đơn vị. Bằng cách kiểm thử đơn vị tự động trường hợp tốn thời gian, sẽ giúp developer tập trung vào logic và tạo ra các bộ kiểm thử có ý nghĩa hơn.
  2. Junit: Junit là một công cụ kiểm thử miễn phí, được sử dụng cho ngôn ngữ lập trình Java. Junit cung cấp các nhận định để xác định phương pháp kiểm thử. Công cụ này kiểm thử dữ liệu đầu tiên, sau đó chèn vào đoạn code.
  3. NUnit: NUnit được sử dụng rộng rãi, sử dụng framework kiểm thử đơn vị cho tất cả các ngôn ngữ .net. Đây là một công cụ mã nguồn mở cho phép viết các kịch bản thủ công, hỗ trợ các kiểm thử dựa trên dữ liệu (data-driven) có thể chạy song song.
  4. JMockit: JMockit là công cụ kiểm thử Đơn vị mã nguồn mở. Đây là một công cụ bao phủ code với các số liệu path và line. JMockit cho phép bắt chước API với cú pháp recording và verification. Công cụ này xác định Line coverage, Path Coverage, và Data Coverage.
  5. EMMA: EMMA là bộ công cụ mã nguồn mở dùng để phân tích và báo cáo code được viết bằng ngôn ngữ Java. Emma hỗ trợ các loại bao phủ như method, line, basic block. Emma dựa trên Java nên không phụ thuộc vào thư viện bên ngoài và có thể truy cập mã nguồn.
  6. PHPUnit: PHPUnit là một công cụ kiểm thử đơn vị cho lập trình viên PHP. Phải mất một phần nhỏ code được gọi là các đơn vị và kiểm thử từng mã riêng biệt. Công cụ này cũng cho phép các developer sử dụng các phương thức xác nhận được xác định trước để khẳng định rằng một hệ thống hoạt động theo một cách nhất định.

Đó chỉ là một vài công cụ kiểm thử đơn vị. Có nhiều công cụ kiểm thử đơn vị khác, đặc biệt là đối với ngôn ngữ C và Java, nhưng rất dễ dàng để tìm thấy một công cụ kiểm thử đơn vị cho nhu cầu lập trình của mình bất kể ngôn ngữ bạn sử dụng là gì.

8. Kiểm thử hướng phát triển (Test Driven Development - TDD) & Kiểm thử đơn vị

Kiểm thử đơn vị trong TDD liên quan đến việc sử dụng rộng rãi các framework kiểm thử. Một framework kiểm thử đơn vị được sử dụng để tạo các kiểm thử đơn vị tự động. Các framework kiểm thử đơn vị không phải dành riêng cho TDD, nhưng chúng rất cần thiết.

  • Các kiểm thử được viết trước code
  • Dựa rất nhiều vào các framework kiểm thử
  • Tất cả các lớp trong các ứng dụng được kiểm thử
  • Tích hợp nhanh chóng và dễ dàng

9. Sai lầm trong kiểm thử đơn vị

Sai lầm:

  • Mất nhiều thời gian và kiểm thử đơn vị là không cần thiết
  • Code đã chay đúng, không cần kiểm thử đơn vị.

Sai lầm tạo nên từ những giả định sai lầm. Những giả định đó dẫn đến một vòng luẩn quẩn sau đây:

unit testing 2 png

Sự thật là kiểm thử đơn vị là rất cần thiết, làm tăng tốc độ phát triển phần mềm.

Các lập trình viên nghĩ rằng Kiểm thử tích hợp sẽ phát hiện tất cả các lỗi và không cần thực hiện kiểm thử đơn vị. Khi các đơn vị được tích hợp, các lỗi rất đơn giản có thể dễ dàng tìm thấy và sửa chữa trong đơn vị được kiểm thử sẽ mất một thời gian rất dài để được theo dõi và sửa chữa.

10. Ưu điểm và Nhược điểm của kiểm thử đơn vị

Ưu điểm:

  • Các developer muốn tìm hiểu chức năng nào được cung cấp bởi một đơn vị và cách sử dụng chức năng này có thể xem xét các test cases kiểm thử đơn vị để có được sự hiểu biết cơ bản về unit API.
  • Kiểm thử đơn vị cho phép lập trình viên cấu trúc lại code vào một ngày sau đó và đảm bảo mô-đun vẫn hoạt động chính xác (ví dụ: Kiểm thử hồi quy). Quy trình là viết các trường hợp kiểm thử cho tất cả các hàm và phương thức để mỗi khi thay đổi gây ra lỗi, nó có thể được xác định và sửa chữa nhanh chóng.
  • Do tính chất mô-đun của kiểm thử đơn vị, chúng ta có thể kiểm thử các phần của dự án mà không cần chờ người khác hoàn thành.

Nhược điểm:

  • Kiểm thử đơn vị không thể phát hiện được mọi lỗi trong một chương trình. Không thể đánh giá tất cả các luồng thực hiện ngay cả trong các chương trình tầm thường nhất
  • Kiểm thử đơn vị theo bản chất là tập trung vào một đơn vị code. Do đó, kiểm thử đơn vị không thể bắt lỗi tích hợp hoặc lỗi hệ thống lớn.

11. Thực hiện kiểm thử đơn vị như thế nào để đạt được kết quả tốt nhất?

  • Các trường hợp kiểm thử đơn vị phải độc lập. Trong trường hợp có bất kỳ cải tiến hoặc thay đổi trong yêu cầu, các trường hợp kiểm thử đơn vị sẽ không bị ảnh hưởng.
  • Chỉ kiểm thử một đoạn code tại một thời điểm.
  • Thực hiện theo các quy ước đặt tên rõ ràng và nhất quán cho các test cases kiểm thử đơn vị
  • Trường hợp thay đổi code trong bất kỳ mô-đun nào, nên đảm bảo có Trường hợp kiểm thử đơn vị tương ứng cho mỗi mô-đun, khi pass các trường hợp kiểm thử của một mô-đun mới nên thay đổi triển khai kiểm thử mô-đun khác.
  • Lỗi được xác định trong quá trình kiểm thử đơn vị phải được sửa trước khi chuyển sang giai đoạn tiếp theo trong quy trình phát triển phần mềm
  • Càng viết nhiều code mà không kiểm thử, bạn càng phải kiểm thử nhiều trường hợp.

unit testing 3 png

12. Kết luận

Kiểm thử đơn vị có thể phức tạp hoặc đơn giản tùy thuộc vào ứng dụng đang được kiểm thử và các chiến lược, công cụ, triết lý kiểm thử được sử dụng. Kiểm thử đơn vị luôn luôn cần thiết ở nhiều cấp độ. Đó là một điều chắc chắn.

Cùng chuyên mục:

Giám sát và kiểm soát kiểm thử

Giám sát và kiểm soát kiểm thử

Trong khi nhóm thực hiện các nhiệm vụ được giao, Test Manager cần giám sát…

Tài liệu kiểm thử

Tài liệu kiểm thử

Tài liệu kiểm thử giúp nhóm kiểm thử ước tính effort kiểm thử cần thiết,…

Cách tạo Test Plan

Cách tạo Test Plan

Test Plan là một tài liệu chi tiết mô tả chiến lược kiểm thử, Mục…

Tổ chức nhóm kiểm thử

Tổ chức nhóm kiểm thử

Tổ chức nhóm kiểm thử là một trong những nhiệm vụ phức tạp nhất trong…

Phân tích rủi ro dự án và giải pháp trong quản lý kiểm thử

Phân tích rủi ro dự án và giải pháp trong quản lý kiểm thử

Khi thực hiện dự án, luôn có những rủi ro tiềm ẩn. Để giảm thiểu…

Quy trình quản lý kiểm thử

Quy trình quản lý kiểm thử

Quản lý kiểm thử (Test Management) bao gồm chuỗi nhiều hoạt động. Có hai phần…

Vai trò và Trách nhiệm của Test Manager

Vai trò và Trách nhiệm của Test Manager

Trước khi bắt đầu kiểm thử một dự án, bạn nên biết vai trò của…

Kiểm thử Use Case

Kiểm thử Use Case

Là một tester, bạn đã hiểu rõ về Use Case hay Kiểm thử Use Case…

Kỹ thuật kiểm thử chuyển đổi trạng thái

Kỹ thuật kiểm thử chuyển đổi trạng thái

Chuyển đổi trạng thái (State Transition) trong kiểm thử là gì? Khi nào sử dụng…

Kỹ thuật kiểm thử bảng quyết định

Kỹ thuật kiểm thử bảng quyết định

Bảng quyết định là một trong những kỹ thuật kiểm thử phầm mềm. Vậy Kiểm…

Kỹ thuật Phân tích giá trị biên và phân vùng tương đương

Kỹ thuật Phân tích giá trị biên và phân vùng tương đương

Chúng ta cần sử dụng các kỹ thuật đặc biệt để lựa chọn test cases…

Kỹ thuật kiểm thử phần mềm

Kỹ thuật kiểm thử phần mềm

Kỹ thuật kiểm thử giúp giảm số lượng các test cases được thực hiện trong…

Test Case Template

Test Case Template

Test cases là đơn vị nhỏ nhất trong kế hoạch kểm thử, mô tả các…

Thủ thuật để tạo dữ liệu kiểm thử

Thủ thuật để tạo dữ liệu kiểm thử

Data được sử dụng trong kiểm thử mô tả các điều kiện tiền đề của…

Cách tạo Requirements Traceability Matrix - RTM

Cách tạo Requirements Traceability Matrix - RTM

Requirements Traceability Matrix - RTM là gì? Traceability Test Matrix bao gồm những loại nào?…

Cơ sở kiểm thử - Test basis

Cơ sở kiểm thử - Test basis

Cơ sở kiểm thử - Test Basis là nguồn để tạo ra các test cases.…

Cách viết Test Cases

Cách viết Test Cases

Test Case là tập hợp các hành động được thực thi để xác minh một…

Kịch bản kiểm thử - Test Scenario

Kịch bản kiểm thử - Test Scenario

Test Scenario tuy không còn mới mẻ nhưng không ít người còn mơ hồ về…

Kiểm thử phi chức năng

Kiểm thử phi chức năng

Kiểm thử phi chức năng liên quan đến việc kiểm thử phần mềm từ những…

Kiểm thử hồi quy

Kiểm thử hồi quy

Kiểm thử hồi quy - Regression Testing rất quan trọng, đặc biệt là trong những…

Top