Title Image

Blog Logo

Unit Test in Embedded Coding (1)

🌱 Unit Test in Embedded Coding (1)

    Giống như nhiều bạn đi theo con đường lập trình nhúng (Embedded Software), mình cũng xuất thân từ ngành điện, vì vậy khi bước chân vào con đường làm phần mềm, có rất nhiều thứ mà mình phải học mới. Điển hình trong số đó là các mô hình, quy trình thiết kế phần mềm. 

    ➤ Và một phase khá quan trọng trong quy trình thiết kế phần mềm (nhúng) mà hôm nay mình muốn giới thiệu, đó là Unit Test - Kiểm thử đơn vị.

     👉 Vậy Unit Test là gì?

    Trong và sau khi phát triển phần mềm (nhúng), việc kiểm thử là việc vô cùng quan trọng. Cần đảm bảo sản phẩm phần mềm đến tay khách hàng là không có bug. Trong thế giới phần mềm, thử nghiệm là bước nhỏ rắc rồi mà không ai thích làm. Thời gian viết kịch bản để thử nghiệm có vẻ lãng phí, mặc dù thực tế thử nghiệm là một phần quan trọng của tất cả các ngành kỹ thuật và hầu hết công ty phần mềm đều áp dụng. 

    Đối với embedded software, việc kiểm thử còn bao gồm kiểm thử phần mềm được nạp và chạy trên phần cứng, bao gồm Unit Test, Integration Test, System Test, Acceptance Test.

    ➤ Trong đó, Unit Test - Kiểm thử đơn vị là kiểm thử ở đơn vị nhỏ nhất, đơn vị nhỏ nhất này có thể là 1 hàm, 1 file, hoặc một module, nhưng thường sẽ là một hàm - Unit Test sẽ kiểm tra hoạt động chính xác của từng hàm bằng các phương pháp như Black Box, White Box, ... (Mình sẽ giới thiệu sau 😇). 

    👉 Tại sao cần Unit Test?

    1 - Tìm ra lỗi trong phần mềm (Driver)

    Một chương trình nhúng dù nhỏ hay lớn đều có thể tiềm ẩn lỗi, thậm chí là những lỗi rất rõ ràng. Đôi khi chạy ứng dụng này rất ok, nhưng ghi vào một số thanh ghi bị sai, dẫn đến chạy các ứng dụng khác bị sai. Dev chỉ có thời gian kiểm tra các luồng code, thanh ghi chính, nhưng không thể cover các trường hợp. 

    Chính vì vậy, Unit Test là việc rất quan trọng và cả Dev và Test đều phải làm để kiểm tra những lỗi cơ bản nhất của phần mềm. 

     2 - Giảm chi phí

    Tất nhiên rồi, nếu mà tăng chi phí thì chắc các công ty đã không làm 😆 Vì chi phí để sửa lại một phần mềm nếu có bug là rất lớn, mà nếu không test thì thường có bug, rất nhiều bug là đằng khác 😅. Mặt khác phần mềm có bug đơn giản còn khiến khách hàng không hài lòng, có thể gây "mất khách"

Bug

    Việc kiểm thử để tìm ra bug sớm có ý nghĩa rất lớn đối với chi phí phần mềm.

    3 - Cải thiện hiệu suất

    Thử nghiệm tối đa hóa hiệu suất của hệ thống. Việc tìm kiếm và loại bỏ mã chết và mã không hiệu quả có thể giúp đảm bảo rằng phần mềm sử dụng toàn bộ tiềm năng của phần cứng.

    👉 Thử triển khai 1 Unit Test đơn giản

    Mỗi ngôn ngữ lập trình hỗ trợ một số framework cho Testing, đối với C cũng vậy, chúng ta có EUnit, CUnit, Ctest, Check, AcuTest, ...

    Những framwork này hỗ trợ các API sử dụng để kiểm tra kết quả của các hàm, hỗ trợ report kết quả của các testcase. 

    Dưới đây mình ví dụ triển khai 1 test chương trình C đơn giản sử dụng thư viện assert.h trong C (Vì nó có sẵn và dễ dàng sử dụng bằng cách include thư viện, không cần cài đặt nhiều môi trường như những framework khác).

    👉 Ví dụ, cần test hoạt động của hàm tính giai thừa sau:

giaithua

    Và chúng ta được yêu cầu test kết quả của hàm này (black box) với một số tham số đầu vào!

    Sử dụng hàm assert() để test các kết quả mong muốn với cú pháp sau (cần include thư viện assert.h trước khi sử dụng):

void assert( /* Biểu thức cần kiểm tra */ );

    Hàm này sẽ không trả về gì cả, nếu biểu thức cần kiểm tra là sai, nó sẽ trả về một thông báo.

    👉 Dưới đây là cách mình triển khai:

Test Black Box

    Mình kiểm tra một số kết quả giai thừa của 1, 2 và 5, nhưng dòng cuối cố ý viết sai kết quả mong muốn một chút. Và đây là kết quả:

result

    Những kết quả sai sẽ có một dòng thông báo như trên!

    👉 Ở những bài viết sau, có thể mình sẽ nói rõ hơn về cách cài đặt, và sử dụng của những framwork test này!

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

    Chúc các bạn học tập tốt 😊

(2) Code Coverage

Đăng nhận xét

4 Nhận xét

  1. Cảm ơn a! hay quá a ơi cái này kiến thức mới với e. Mong a ra thêm nhiều bài để cho đàn e học hỏi thêm a

    Trả lờiXóa
    Trả lời
    1. Ok em, phần test này đối với sinh viên là khá mới, a sẽ ra thêm nhiều bài hơn

      Xóa
  2. Embedded firmware là lập trình cho vđk đúng ko ạ

    Trả lờiXóa
    Trả lời
    1. Đúng rồi em. Giờ nhìn chung là gộp vào làm software luôn rồi ấy.

      Xóa