0
0
Lập trình
Admin Team
Admin Teamtechmely

Kiểm tra mã MiniScript của bạn hiệu quả

Đăng vào 1 tháng trước

• 6 phút đọc

Giới thiệu

Việc viết kiểm tra ngay từ đầu và kiểm tra mã của bạn giúp bạn phát hiện lỗi và đảm bảo rằng mã của bạn hoạt động như bạn mong đợi. MiniScript cung cấp một cách để thực hiện điều đó thông qua mô-đun QA.

Trong bài viết này, tôi sẽ hướng dẫn bạn cách sử dụng mô-đun QA của MiniScript để kiểm tra các dự án MiniScript của bạn thông qua một ví dụ nhỏ, giúp bạn hiểu rõ quy trình phát triển theo phương pháp TDD (Test-Driven Development).

Mục lục

Bước 1: Nhập mô-đun QA

Khi muốn kiểm tra mã, bạn cần nhập mô-đun QA ở đầu tệp của mình. QA là một mô-đun hệ thống, vì vậy bạn không cần cài đặt thêm, nó đã được cung cấp trong bản phân phối MiniScript của bạn. Để thực hiện điều này, hãy đảm bảo dòng đầu tiên của bạn như sau:

miniscript Copy
import "qa"

Điều này giúp bạn truy cập vào các hàm hữu ích và quan trọng như assertassertEqual, là nền tảng của việc kiểm tra của bạn.

Bước 2: Viết kiểm tra

Trước khi viết mã, bạn hãy viết một kiểm tra. Tôi không bàn cãi về chiến lược này, nhưng tôi thường thành công khi viết kiểm tra trước. Trong ví dụ của tôi, tôi sẽ triển khai một hàm đơn giản cộng 2 số. Để tổ chức kiểm tra, tôi đặt chúng trong một hàm gọi là runUnitTests. Trong các dự án lớn hơn, tôi sẽ gọi các hàm kiểm tra của mình trong hàm này, nhưng hiện tại chúng ta có thể viết tất cả kiểm tra bên trong hàm này.

miniscript Copy
runUnitTests = function
    print "Bắt đầu kiểm tra..."
    qa.assert add(1,1) == 2, "Kiểm tra add 1,1 cho kết quả là 2"
end function

runUnitTests

Bước 3: Chạy kiểm tra

Khi chạy tệp, bạn sẽ gặp lỗi: Runtime Error: Undefined Identifier: 'add' is unknown in this context [line 5]. Thông báo lỗi rõ ràng cho biết rằng chúng ta chưa triển khai hàm add. Đây là điều mong đợi vì chúng ta chưa thực hiện hàm này nhưng đã xác nhận rằng kiểm tra của chúng ta đang hoạt động như mong đợi.

Bước 4: Sửa lỗi

Bước tiếp theo là sửa lỗi. Trong thực tế, tôi có thể nhanh hơn một chút, nhưng để giải thích, tôi sẽ chỉ sửa lỗi rằng add không tồn tại trong ngữ cảnh hiện tại bằng cách tạo một hàm rỗng với các tham số mà tôi định truyền như sau:

miniscript Copy
add = function(a,b)

end function

Khi chạy lại kịch bản, chúng ta sẽ thấy kiểm tra được thực thi và thất bại:

Copy
Bắt đầu kiểm tra...
Xác nhận thất bại: Kiểm tra hàm add cho kết quả là 2 cho đầu vào a=1 và b=1
Call stack:
  0. (chương trình hiện tại) dòng 9
  1. (chương trình hiện tại) dòng 12
(To clear this display, enter: qa.clear)

Điều này cho tôi biết rằng xác nhận của tôi đã thất bại và rằng add(1, 1) không trả về giá trị bằng 2. Tôi có thể dễ dàng sửa điều này bằng cách khiến hàm add trả về 2. Đây là một bước tạm thời. Tôi muốn cho bạn thấy rằng sử dụng TDD là một chiến lược khả thi để đi đến giải pháp đơn giản nhất trước và khám phá giải pháp đầy đủ bằng cách thêm nhiều kiểm tra hơn.

miniscript Copy
add = function(a,b)
    return 2
end function

Chạy kịch bản giờ đây sẽ hoạt động. Thật tuyệt vời, mã của chúng ta đã được kiểm tra!

Bước 5: Viết thêm kiểm tra

Độc giả tinh ý sẽ nhận ra rằng giải pháp hiện tại vẫn còn rất tệ. Với ví dụ toy rất hạn chế này, rất dễ để nhận ra vấn đề, nhưng bạn sẽ ngạc nhiên khi thấy rằng có rất nhiều trường hợp tương tự mà tôi đã gặp phải trong thực tế. Hiện tại, chúng ta có mã mà hoạt động và thậm chí đã được kiểm tra 100%, nhưng rõ ràng nó chỉ hoạt động cho 1 trường hợp kiểm tra. Hãy khắc phục điều này bằng cách thêm một trường hợp kiểm tra khác:

miniscript Copy
runUnitTests = function
    print "Bắt đầu kiểm tra..."
    qa.assert add(1,1) == 2, "Kiểm tra hàm add cho kết quả là 2 cho đầu vào a=1 và b=1"
    qa.assert add(2,3) == 5, "Kiểm tra hàm add cho kết quả là 5 cho đầu vào a=2 và b=3"
end function

Khi chúng ta chạy kiểm tra bây giờ, kết quả sẽ là:

Copy
Bắt đầu kiểm tra...
Xác nhận thất bại: Kiểm tra hàm add cho kết quả là 5 cho đầu vào a=2 và b=3
Call stack:
  0. (chương trình hiện tại) dòng 10
  1. (chương trình hiện tại) dòng 13
(To clear this display, enter: qa.clear)

Bây giờ, hãy sửa điều này bằng cách thực sự triển khai hàm. Tôi sẽ thay đổi hàm add như sau:

miniscript Copy
add = function(a,b)
    return a + b
end function

Chạy kịch bản giờ đây mọi thứ hoạt động.

Đặt kiểm tra bên trong if locals == globals

Rất thường xuyên, cách tiếp cận được minh họa ở đây rất hữu ích khi phát triển các mô-đun mà chúng ta muốn người khác có thể sử dụng trong các dự án của họ. Để cho phép họ sử dụng mô-đun của chúng ta nhưng cũng thực hiện kiểm tra, thường chúng ta sẽ đặt các kiểm tra đơn vị bên trong một câu lệnh if locals == globals. Joe Strout đã giải thích mẫu này rất hay trong một bài blog tuyệt vời tại đây: Joe Strout Blog.

Để thực hiện điều này trong mã của chúng ta, chúng ta đơn giản chỉ cần đặt lệnh gọi đến runUnitTests vào câu lệnh này. Điều này đảm bảo rằng các kiểm tra chỉ được chạy khi mô-đun được thực thi trực tiếp và không khi nó được nhập vào. Dưới đây là toàn bộ mã của mô-đun add mới được phát triển và kiểm tra:

miniscript Copy
import "qa"

add = function(a,b)
    return a + b
end function

runUnitTests = function
    print "Bắt đầu kiểm tra..."
    qa.assert add(1,1) == 2, "Kiểm tra hàm add cho kết quả là 2 cho đầu vào a=1 và b=1"
    qa.assert add(2,3) == 5, "Kiểm tra hàm add cho kết quả là 5 cho đầu vào a=2 và b=3"
end function

if locals == globals then runUnitTests

Đây rõ ràng là một ví dụ rất nhỏ, nhưng nếu bạn thực hành các kỹ thuật được nêu ở đây, điều này sẽ cho phép bạn viết MiniScript theo cách tiếp cận TDD và giúp bạn cung cấp các mô-đun đã được kiểm tra và ít lỗi hơn. Tôi khuyến khích bạn thử nghiệm quy trình này trong dự án tiếp theo của mình!

Thực hành tốt nhất

  • Viết kiểm tra trước: Bắt đầu với việc viết kiểm tra trước khi triển khai mã.
  • Giữ cho kiểm tra đơn giản: Đảm bảo rằng mỗi kiểm tra chỉ kiểm tra một chức năng cụ thể.
  • Thường xuyên chạy kiểm tra: Đừng để lâu mới chạy kiểm tra để phát hiện lỗi kịp thời.

Lỗi thường gặp

  • Không chạy kiểm tra: Đảm bảo rằng bạn đã chạy kiểm tra sau khi thay đổi mã.
  • Quên xác nhận: Đảm bảo rằng mỗi hàm đều có kiểm tra xác nhận tương ứng.

Mẹo hiệu suất

  • Tối ưu hóa kiểm tra: Sử dụng các cấu trúc dữ liệu phù hợp để giảm thời gian chạy kiểm tra.
  • Phân tích mã: Sử dụng công cụ phân tích mã để tìm kiếm lỗi và tối ưu hóa.

Kết luận

Việc kiểm tra mã là một bước quan trọng trong quy trình phát triển phần mềm. Bằng cách áp dụng TDD và sử dụng mô-đun QA của MiniScript, bạn có thể đảm bảo rằng mã của mình luôn hoạt động như mong đợi, giảm thiểu lỗi và cải thiện chất lượng sản phẩm. Hãy thử nghiệm quy trình này trong dự án tiếp theo của bạn và chia sẻ kinh nghiệm với cộng đồng lập trình viên Việt Nam!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào