Phát triển phần mềm với Claude Code
Xây công cụ thống kê CSV bằng Claude Code, kiểm tra hợp đồng dữ liệu và giới hạn phạm vi thay đổi.
Tổng quan
Dành cho người học muốn tự hoàn thành bài thực hành phát triển phần mềm với claude code, với dữ liệu mẫu có thể kiểm tra.
- Bắt đầu một phiên Claude Code trong thư mục thử nghiệm.
- Yêu cầu chức năng nhỏ kèm trường hợp kiểm tra.
- Đọc diff và tự chạy lệnh kiểm chứng.
Bạn sẽ hoàn thành: Một summarize.py đọc số lượng từ CSV và từ chối dữ liệu âm.
Chuẩn bị
- Python 3.10+, Git và quyền truy cập Claude Code; cài theo quickstart chính thức.
Claude Code cần quyền truy cập phù hợp hoặc cấu hình API có tính phí. Cài và đăng nhập theo nguồn chính thức; bài không yêu cầu gói hoặc model cụ thể.
Thực hành từng bước
Bước 1. Chuẩn bị repo và dữ liệu nhỏ
mkdir claude-csv-lab
cd claude-csv-lab
git init
claude --version
claudeNếu chưa có lệnh claude, dừng ở đây và cài theo quickstart chính thức; có các lựa chọn khác nhau cho từng hệ điều hành. Tạo data.csv chứa hai dòng dưới. Chỉ làm việc với dữ liệu giả lập.
item,quantity
notebook,2
pencil,3Bước 2. Giao nhiệm vụ có giới hạn file
Tạo summarize.py: nhận đường dẫn CSV qua một đối số dòng lệnh; đọc UTF-8 bằng csv.DictReader; yêu cầu cột quantity là số nguyên không âm; in TOTAL=<sum>. Dữ liệu sai phải kết thúc với lỗi rõ ràng. Không cài thư viện, gọi mạng hay sửa file dữ liệu. Thêm test tự động cho dữ liệu hợp lệ, âm và thiếu cột. Chỉ sửa file của bài tập, không commit.Bước 3. Đối chiếu với cách triển khai tối thiểu
Lưu ví dụ tham khảo dưới vào summarize.py nếu bạn muốn chạy độc lập không cần phiên Claude Code. Nó cố ý dùng thư viện chuẩn để phần khó tập trung vào hợp đồng dữ liệu. Claude Code có thể tạo cấu trúc khác nhưng phải vượt cùng tiêu chí.
import csv
import sys
def total(path):
with open(path, encoding="utf-8", newline="") as stream:
rows = csv.DictReader(stream)
if "quantity" not in (rows.fieldnames or []):
raise ValueError("missing quantity column")
result = 0
for row in rows:
value = int(row["quantity"])
if value < 0:
raise ValueError("negative quantity")
result += value
return result
if __name__ == "__main__":
if len(sys.argv) != 2:
raise SystemExit("usage: python3 summarize.py FILE.csv")
print(f"TOTAL={total(sys.argv[1])}")Bước 4. Chạy đường đúng và đường lỗi
python3 summarize.py data.csv
python3 -m unittest -vLệnh đầu phải in TOTAL=5. Lệnh test chỉ có ý nghĩa sau khi file test được tạo: xác nhận terminal không báo “Ran 0 tests”. Tạo bản bad.csv với quantity=-1 rồi chạy: chương trình phải báo lỗi, không in một tổng có vẻ hợp lệ. Đọc diff để chắc rằng script không sửa CSV đầu vào.
Kiểm tra kết quả
- Dữ liệu hợp lệ cho tổng 5; dữ liệu âm và thiếu cột bị từ chối.
- Không chấp nhận “0 tests” như bằng chứng đã kiểm thử.
Xử lý lỗi thường gặp
Claude Code muốn sửa nhiều file không liên quan
Nguyên nhân: Nhiệm vụ hoặc thư mục làm việc chưa giới hạn rõ.
Cách xử lý: Chỉ định lại danh sách file cho phép và yêu cầu diff trước khi tiếp tục.
CSV có BOM hoặc tên cột khác
Nguyên nhân: Dữ liệu thật không khớp hợp đồng UTF-8/quantity.
Cách xử lý: Kiểm tra header, quyết định có hỗ trợ utf-8-sig hay alias cột, rồi thêm test trước khi đổi code.
Bài tập & mở rộng
- Thêm test cho CSV rỗng và giá trị quantity không phải số.
- Yêu cầu Claude Code tạo hướng dẫn sử dụng ngắn dựa đúng hành vi đã kiểm tra.
Script không bao gồm quy tắc kinh doanh về tồn kho hay hoàn hàng. Không dùng dữ liệu khách hàng hoặc credentials trong phiên thử.
