Tối ưu hóa hiệu suất Claude Code nhờ kiểm thử tự động
Bài viết này chia sẻ kỹ thuật số 1 để nâng cao hiệu suất làm việc với Claude Code: kiểm thử tự động. Khi các tác nhân AI ngày càng giỏi viết code, kiểm thử trở thành nút thắt cổ chai chính; việc tự động hóa hoặc tối ưu hóa quy trình này sẽ giúp tiết kiệm thời gian và đảm bảo chất lượng phần mềm.

Claude Code hoạt động khá tốt ngay khi bạn mới bắt đầu sử dụng. Bạn có thể nhập một loạt hướng dẫn và để nó tạo ra mã nguồn hoặc các kết quả đầu ra khác cho bạn. Tuy nhiên, có một số việc bạn có thể làm để nâng cao đáng kể hiệu suất của Claude Code, đặc biệt là trong lĩnh vực lập trình.
Trong bài viết này, tôi sẽ thảo luận về kỹ thuật hàng đầu mà tôi sử dụng hàng ngày để làm cho Claude Code hiệu quả hơn gấp nhiều lần: đó là kiểm thử tự động hoặc làm cho việc kiểm thử hiệu quả hơn.
Tổng quan nội dung bài viết
Bề ngoài, chủ đề này có vẻ hơi nhàm chán, nhưng khi tìm hiểu sâu hơn, bạn sẽ thấy rằng kiểm thử — đặc biệt là khi được tự động hóa hoặc tối ưu hóa — là một cách tuyệt vời để tiết kiệm rất nhiều thời gian. Nếu bạn có thể khiến tác nhân AI tự kiểm tra các triển khai của nó, nó sẽ trở nên hiệu quả hơn nhiều trong việc tạo ra giải pháp mà bạn mong muốn.
Tại sao nên tự động hóa kiểm thử?
Lý do quan trọng nhất khiến bạn nên tự động hóa kiểm thử là nó đơn giản giúp bạn hiệu quả hơn rất nhiều. Nếu bạn có thể để một tác nhân tự động kiểm tra các triển khai của chính nó, nó sẽ tốt hơn nhiều trong việc thực hiện giải pháp mà bạn mô tả trong prompt. Cuối cùng, điều này giúp bạn tiết kiệm rất nhiều thời gian vì bạn không phải lặp lại quá trình tương tác với tác nhân nhiều lần để có được đúng giải pháp mình muốn.
Hơn nữa, một điểm quan trọng khác là khi các tác nhân lập trình đã trở nên cực kỳ hiệu quả trong việc viết code, nút thắt cổ chai thực sự của lập trình hiện nay lại nằm ở khâu kiểm thử. Bạn cần kiểm tra xem việc triển khai có thực sự hoạt động đúng như ý định của bạn hay không. Tôi nhận thấy rằng mình dành phần lớn thời gian lập trình để kiểm tra các giải pháp khác nhau và đảm bảo mọi thứ hoạt động như mong đợi. Nếu bạn có thể làm cho việc kiểm thử hiệu quả hơn hoặc hoàn toàn tự động hóa nó, bạn sẽ giải quyết được nút thắt lớn nhất trong lập trình, từ đó tự nhiên trở nên hiệu quả hơn.
Tôi tin rằng điều này áp dụng cho nhiều người đang tích cực sử dụng các tác nhân lập trình, và tôi đang chia sẻ cách tôi tự động hóa cũng như nâng cao hiệu quả kiểm thử của chính mình.
Cách tự động hóa kiểm thử
Tôi sẽ thảo luận về một số khía cạnh liên quan đến kiểm thử. Đầu tiên, tôi sẽ nói về việc tự động hóa kiểm thử, tức là khi bạn cung cấp cho tác nhân quyền tự chạy các bài kiểm tra. Điều này có thể thực hiện theo nhiều cách khác nhau. Ví dụ, bạn có thể cung cấp cho nó các script kiểm thử để chạy, các bài kiểm thử đơn vị (unit tests), hoặc các bài kiểm thử tích hợp hoàn chỉnh. Tiếp theo, tôi sẽ thảo luận về cách làm cho việc kiểm thử bởi con người hiệu quả hơn. Đôi khi tác nhân lập trình không thể tự thực hiện đầy đủ bài kiểm tra. Có thể nó cần bối cảnh đặc biệt hoặc quyền hạn, hoặc đó là một hành động phức tạp trong giao diện người dùng (UI) mà bạn không muốn hoặc tác nhân không thể thực hiện.
Kiểm thử tự động bởi tác nhân (Agentic automatic testing)
Dưới đây là ba bước chính để kiểm thử tự động:
- Đảm bảo tác nhân có tất cả các quyền cần thiết.
- Yêu cầu tác nhân thiết lập các bài kiểm tra và kiểm tra các triển khai của nó.
- Đảm bảo các bài kiểm tra luôn chạy trước khi commit hoặc merge, tùy thuộc vào thời điểm bạn muốn chúng chạy.
- Đảm bảo tất cả mã mới đều có kiểm thử được cập nhật và đôi khi xem xét thủ công các bài kiểm tra để đảm bảo chúng hoạt động và làm đúng những gì bạn nghĩ.
Tôi sẽ bắt đầu bằng cách thảo luận về cách bạn có thể cấp quyền truy cập cho tác nhân để chạy kiểm thử. Điểm quan trọng nhất cần lưu ý ở đây là bạn nên làm cho tác nhân có khả năng chạy kiểm thử. Điều này được thực hiện bằng cách cấp cho nó đủ quyền truy cập, ví dụ, có thể nó cần quyền truy cập AWS để lấy dữ liệu, hoặc có thể nó cần quyền truy cập trình duyệt để điều hướng qua ứng dụng. Vì vậy, bước đầu tiên ở đây là đảm bảo tác nhân có tất cả các quyền cần thiết.
Theo kinh nghiệm của tôi, bạn có thể chạy Claude Code với chế độ "Dangerously Skip Permissions" (Bỏ qua quyền một cách nguy hiểm) hoặc "Auto Mode" (Chế độ tự động) mới được phát hành gần đây, và nó hoạt động rất tốt. Thật không may, khi sử dụng các tác nhân lập trình khác như Gemini hay ChatGPT, tôi chưa làm điều này vì tôi đã có những trải nghiệm khi các tác nhân lập trình thực hiện các hành động không mong muốn và không thể đảo ngược. Tuy nhiên, điều này chưa bao giờ xảy ra khi tôi sử dụng các mô hình của Claude.
Phần thứ hai của kiểm thử tự động đơn giản là yêu cầu tác nhân thiết lập kiểm thử. Ví dụ, tôi yêu cầu mô hình của mình thiết lập các bài kiểm thử tích hợp (integration tests). Các bài kiểm thử tích hợp về cơ bản chỉ là một chuỗi các lệnh gọi API đảm bảo luồng hoạt động qua ứng dụng như mong đợi. Với các tác nhân lập trình, điều này hoạt động rất tốt. Ví dụ, có một lệnh gọi LLM dẫn vào quy trình phân tích cú pháp, v.v. Bạn có thể làm cho quy trình này xác định và đảm bảo kết quả chính xác mỗi lần. Chỉ cần thông báo cho tác nhân thiết lập các bài kiểm thử tích hợp sẽ hoạt động rất tốt; mô hình sẽ thiết lập các bài kiểm tra và thực sự hoạt động tốt hơn ngay lập tức.
Bạn cũng có thể chỉ cần yêu cầu mô hình tạo các script kiểm thử kiểm tra một triển khai và cho nó biết rằng nó nên chạy script kiểm thử đó để đảm bảo mọi thứ hoạt động như ý định, và không được dừng lại cho đến khi script kiểm thử chạy thành công. Phần cuối cùng rất quan trọng vì đôi khi các mô hình thực sự hơi lười biếng, và bạn cần thông báo rõ ràng cho chúng rằng chúng không được phép dừng lại trước khi triển khai thành công. Điều này, tất nhiên, giả định rằng việc triển khai là khả thi dựa trên các quyền và hành động bạn đã cấp cho tác nhân lập trình.
Tiếp theo, điều quan trọng là bạn phải đảm bảo các bài kiểm tra này chạy trước khi mã được đẩy lên môi trường sản xuất (production). Bạn có thể chạy kiểm thử dưới dạng các móc (hooks) trước khi commit (pre-commit hooks), mặc dù điều này đôi khi có thể làm chậm bạn vì các bài kiểm tra phải chạy trước mỗi lần commit, và nếu bài kiểm tra mất thời gian, nó sẽ làm chậm bạn. Bạn cũng có thể để chúng chạy mỗi khi bạn đẩy mã (push), một lần đẩy mới vào pull request. Tức là nếu một pull request được cập nhật, hãy chạy các bài kiểm thử tích hợp. Các bài kiểm tra này cũng có thể là một phần của GitHub Actions, ví dụ như vậy chúng tự động chạy và bạn không phải chạy chúng trên máy tính của mình. Tuy nhiên, theo kinh nghiệm của tôi, thường rất tốt khi có các bài kiểm tra này trên máy tính của bạn, vì nó làm cho mọi thứ nhanh hơn và bạn có thể kích hoạt chúng dễ dàng hơn.
Cuối cùng, trong phần kiểm thử tự động, tôi muốn làm nổi bật cách bạn cần đảm bảo rằng bạn liên tục cập nhật các bài kiểm tra của mình dựa trên mã mới được tạo ra. Ví dụ, nếu bạn tạo ra một đoạn mã mới, hãy đảm bảo thêm các bài kiểm tra mới cho nó. Và nếu bạn xóa mã cũ, hãy đảm bảo xóa các bài kiểm tra tương ứng. Điều quan trọng là phải duy trì các bài kiểm tra để chúng hiệu quả. Mặc dù việc bảo trì này có vẻ như là thêm công việc phía trước, nhưng thực tế nó sẽ giúp bạn tiết kiệm thời gian về lâu dài vì bạn không chạy các bài kiểm tra không cần thiết và bạn đảm bảo rằng tất cả mã của bạn đều được kiểm tra, làm giảm khả năng xảy ra lỗi.
Hơn nữa, tôi khuyên bạn đôi khi nên kiểm tra thủ công các bài kiểm tra bằng cách thực sự nhìn vào đầu vào và đầu ra và yêu cầu tác nhân hiển thị cho bạn kết quả. Việc kiểm tra thủ công các bài kiểm tra này đôi khi có thể rất hiệu quả trong việc đảm bảo bài kiểm tra hoạt động như mong đợi và giúp dễ dàng phát hiện lỗi trong bài kiểm tra.
Làm cho kiểm thử thủ công hiệu quả hơn
Điểm thứ hai về kiểm thử mà tôi muốn đề cập là làm cho việc kiểm thử thủ công hiệu quả hơn. Khi tôi nói về kiểm thử thủ công, tôi có nghĩa là kiểm thử yêu cầu con người thực hiện và không thể thực hiện bởi AI. Thật không may, một số kiểm thử phải do bạn thực hiện và bạn không thể đơn giản thuê ngoài để AI làm. Điều này có thể xảy ra vì một số lý do:
- Nhiệm vụ quá phức tạp để AI thực hiện và bạn cần tự làm.
- Nhiệm vụ bao gồm thứ mà AI không có quyền truy cập hoặc quyền hạn. Ví dụ, nó yêu cầu quyền truy cập quản trị viên mà bạn không muốn cấp cho AI, hoặc nó sử dụng âm thanh mà AI hiện tại không có quyền truy cập.
- Nhiệm vụ quá phức tạp để AI thực hiện và bạn không tin tưởng nó thực hiện đúng.
Trong những trường hợp này, điều tốt nhất bạn có thể làm là làm cho việc kiểm thử hiệu quả hơn cho chính mình. Tất nhiên, bản năng đầu tiên của bạn khi tạo ra các bài kiểm tra luôn nên là cố gắng tự động hóa chúng hoàn toàn để bạn không bao giờ phải chạm vào chúng và AI luôn chạy chúng tự động. Tuy nhiên, một cách thực tế, bạn cũng cần tự kiểm tra rất nhiều.
Mẹo số một của tôi để làm cho việc kiểm thử hiệu quả hơn là sử dụng kiểm thử trực quan. Ví dụ, nếu tôi để AI giải quyết nhiều nhiệm vụ cho mình, trước tiên tôi yêu cầu nó tạo một báo cáo HTML bao gồm từng nhiệm vụ và một hộp kiểm (checkbox) bên cạnh các nhiệm vụ này để tôi có thể đánh dấu các nhiệm vụ đã hoàn thành. Tôi cũng yêu cầu AI cung cấp cho tôi các liên kết đến các trang chứa nội dung tôi cần kiểm tra và mô tả chính xác cách tôi có thể kiểm tra xem nó có hoạt động hay không. Điều này đơn giản hóa quy trình rất nhiều vì tôi không phải nhớ mọi thứ mình cần kiểm tra và cách kiểm tra nó. Nhưng nó được trình bày một cách có ý thức trong một báo cáo.
Ví dụ về danh sách kiểm tra công việc
Ảnh chụp màn hình này làm nổi bật cách tôi tạo danh sách việc cần làm (to-do checklist) cho các nhiệm vụ mà tác nhân lập trình đã triển khai. Nó bao gồm mọi nhiệm vụ tôi cần xác minh tính chính xác, tiêu đề của nhiệm vụ, nơi kiểm tra nhiệm vụ và những gì mong đợi. Về bản chất, nó làm cho mọi thứ dễ dàng nhất có thể cho tôi, vì vậy tôi chỉ cần xác minh tính chính xác và không cần tiêu tốn bất kỳ năng lượng nhận thức nào cho việc khác.
Một điểm khác về cách tôi làm cho việc kiểm thử dễ dàng hơn là tôi cố gắng thuê ngoài càng nhiều nhiệm vụ càng tốt cho tác nhân lập trình. Ví dụ, nếu tôi cần dữ liệu cụ thể để kiểm tra một cái gì đó thủ công, tôi không dành nhiều thời gian để tìm kiếm dữ liệu thủ công. Tôi yêu cầu tác nhân lập trình truy cập các tài nguyên cần thiết và tự động tìm dữ liệu cho tôi.
Kết luận
Trong bài viết này, tôi đã thảo luận về cách bạn có thể tự động hóa kiểm thử với Claude Code để trở nên hiệu quả hơn nhiều với Claude Code hoặc bất kỳ tác nhân lập trình nào khác mà bạn đang sử dụng. Tôi chủ yếu thảo luận về cách bạn có thể tự động hóa kiểm thử, đây là cách tiếp cận được ưu tiên nhất, hoặc bạn có thể làm cho việc kiểm thử thủ công hiệu quả hơn. Khi các tác nhân lập trình đã trở nên tốt như hiện nay, đặc biệt là sau khi phát hành các mô hình Opus mới nhất, tôi tin rằng kiểm thử đã trở thành nút thắt cổ chai. Trong khi trước đây bạn dành nhiều thời gian nhất để viết mã thủ công, bây giờ bạn không còn dành nhiều thời gian viết mã thủ công nữa, và bạn dành nhiều thời gian hơn để kiểm tra các triển khai thực tế. Do đó, việc cố gắng tối ưu hóa quy trình kiểm thử để làm cho nó hiệu quả hơn là hoàn toàn hợp lý. Để tối đa hóa hiệu quả của mình với tư cách là một lập trình viên, tôi chắc chắn sẽ tập trung vào phần kiểm thử và suy nghĩ về cách bạn có thể hiệu quả hơn ở đó. Các kỹ thuật tôi trình bày trong bài viết này chỉ là một số ví dụ về những gì tôi cá nhân làm để làm cho việc kiểm thử hiệu quả hơn.


