Đến nội dung chính
AI Coding

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

Luồng thực hành minh họa; không phải kết quả đo thực nghiệm.

Bước 1. Chuẩn bị repo và dữ liệu nhỏ

SHELL
mkdir claude-csv-lab
cd claude-csv-lab
git init
claude --version
claude

Nế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.

TEXT
item,quantity
notebook,2
pencil,3

Bước 2. Giao nhiệm vụ có giới hạn file

PROMPT · HƯỚNG DẪN
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í.

PYTHON
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

SHELL
python3 summarize.py data.csv
python3 -m unittest -v

Lệ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ử.

Nguồn tham khảo

  1. Claude Code quickstart
  2. Python CSV

Kiến thức liên quan

Tiếp tục thực hành