Trên máy em nó chạy mà thầy. Câu này xuất hiện trong gần như mọi đợt bảo vệ đồ án công nghệ thông tin.
Nó không phải xui xẻo. Nó là hệ quả của việc dựng môi trường tuỳ tiện trong nhiều tháng, rồi tới lúc cần thì không ai dựng lại được.
Vì sao chạy được máy này mà không máy kia
Bốn nguyên nhân, xếp theo mức phổ biến:
- Thiếu thư viện hoặc gói phụ thuộc. Bạn cài dần trong nhiều tháng và không nhớ đã cài gì.
- Khác phiên bản. Máy bạn chạy phiên bản mới, máy kia bản cũ, và một hàm đã đổi cách hoạt động.
- Đường dẫn cứng. Mã có ghi thẳng đường dẫn tới thư mục trên máy bạn.
- Cấu hình nằm ngoài dự án. Biến môi trường, tệp cấu hình, cơ sở dữ liệu cài riêng — những thứ bạn đã cài từ lâu và quên mất là mình có.
Cả bốn đều chặn được bằng thói quen, không cần công cụ phức tạp.
Ghi lại phụ thuộc ngay từ đầu
Hầu hết ngôn ngữ đều có cách khai báo danh sách thư viện cần dùng kèm phiên bản, và cách cài lại toàn bộ bằng một lệnh.
Việc phải làm:
- Tạo tệp khai báo phụ thuộc ngay khi bắt đầu dự án, không phải ở tuần cuối khi cố nhớ lại.
- Cập nhật mỗi lần cài thêm thư viện. Thành thói quen: cài xong là ghi vào.
- Ghim phiên bản cụ thể, đừng để mở. Thư viện cập nhật giữa kỳ có thể làm mã của bạn ngừng chạy — và đây là kiểu hỏng khó hiểu nhất vì bạn không đổi gì cả.
Dùng môi trường ảo riêng cho dự án nếu ngôn ngữ của bạn hỗ trợ. Nó tách dự án này khỏi mọi thứ bạn đã cài trên máy, nên bạn biết chính xác dự án cần gì.
Bỏ đường dẫn cứng
Mã có dòng trỏ thẳng tới một thư mục trên máy bạn là mã chỉ chạy trên máy bạn.
Thay bằng:
- Đường dẫn tương đối so với thư mục dự án.
- Tệp cấu hình cho những gì thay đổi theo máy.
- Dữ liệu mẫu để ngay trong dự án, ở thư mục con, để chạy thử được ngay sau khi tải về.
Tách cấu hình và bí mật
⚠️ Không bao giờ để mật khẩu, khoá truy cập, chuỗi kết nối cơ sở dữ liệu trong mã nguồn. Kể cả khi kho của bạn riêng tư, và kể cả khi đó chỉ là mật khẩu cơ sở dữ liệu trên máy bạn.
Lý do rất cụ thể với đồ án: mã nguồn được nộp kèm, lưu ở bộ môn, có khi đưa lên kho công khai để làm hồ sơ. Một mật khẩu lọt vào đó là lọt vĩnh viễn, vì lịch sử kho giữ lại kể cả sau khi bạn xoá.
Cách làm: để trong tệp cấu hình riêng, loại tệp đó khỏi danh sách theo dõi, và kèm một tệp mẫu ghi các khoá cần có nhưng để giá trị trống.
Viết hướng dẫn cài đặt
Nửa trang, đặt ở thư mục gốc của dự án:
- Cần cài gì trước — ngôn ngữ và phiên bản, cơ sở dữ liệu, công cụ khác.
- Các bước cài, theo thứ tự, dạng lệnh sao chép dán được.
- Cách tạo cấu hình từ tệp mẫu.
- Cách nạp dữ liệu mẫu.
- Lệnh chạy.
- Tài khoản đăng nhập thử nếu có phân quyền.
Tệp này phục vụ ba người: thầy hướng dẫn, hội đồng, và chính bạn ba tháng sau khi đã quên.
Phép thử máy sạch
Đây là phép thử duy nhất đáng tin, và phải làm trước khi nộp ít nhất một tuần:
- Lấy một máy khác — máy bạn cùng phòng, máy phòng thí nghiệm.
- Tải dự án về từ kho hoặc từ bản nộp.
- Làm theo đúng hướng dẫn cài đặt bạn viết, không làm thêm bước nào ngoài hướng dẫn.
- Chạy thử các chức năng chính.
Kẹt ở bước nào thì bổ sung bước đó vào hướng dẫn. Gần như lần đầu nào cũng phát hiện ra hai ba thứ thiếu — đó chính là những thứ sẽ làm bạn khó xử ở buổi bảo vệ.
Chuẩn bị cho buổi bảo vệ
- Cài sẵn và chạy thử trên chính máy sẽ mang đi.
- Có dữ liệu mẫu nạp sẵn, không phải nhập tại chỗ.
- Không phụ thuộc vào mạng nếu tránh được — phòng bảo vệ có thể không có mạng ổn định.
- Có bản sao dự án ở ổ rời.
- Có video demo dự phòng.
Câu hỏi thường gặp
Vì sao chương trình chạy máy này mà không chạy máy khác?
Bốn nguyên nhân: thiếu thư viện phụ thuộc, khác phiên bản, đường dẫn cứng trỏ tới thư mục trên máy bạn, và cấu hình nằm ngoài dự án như biến môi trường hay cơ sở dữ liệu cài riêng.
Quản lý phụ thuộc thế nào cho đúng?
Tạo tệp khai báo phụ thuộc ngay khi bắt đầu dự án, cập nhật mỗi lần cài thêm thư viện, và ghim phiên bản cụ thể vì thư viện cập nhật giữa kỳ có thể làm mã ngừng chạy.
Có được để mật khẩu trong mã nguồn không?
Không, kể cả khi kho riêng tư. Mã nguồn được nộp kèm và lưu ở bộ môn, có khi đưa lên kho công khai — một mật khẩu lọt vào là lọt vĩnh viễn vì lịch sử kho giữ lại cả sau khi xoá.
Phép thử nào chắc chắn nhất trước khi nộp?
Phép thử máy sạch: lấy một máy khác, tải dự án về, làm theo đúng hướng dẫn cài đặt mà không làm thêm bước nào, rồi chạy thử. Gần như lần nào cũng phát hiện hai ba thứ thiếu.
Hướng dẫn cài đặt nên có gì?
Cần cài gì trước kèm phiên bản, các bước cài theo thứ tự dạng lệnh sao chép dán được, cách tạo cấu hình từ tệp mẫu, cách nạp dữ liệu mẫu, lệnh chạy, và tài khoản đăng nhập thử.