Tóm tắt nhanh
Nhiều developer Việt Nam khi vào công ty Nhật sẽ gặp hệ thống cũ: tài liệu dài, code nhiều năm tuổi, framework cũ, rule nghiệp vụ phức tạp. Đây không phải lúc nào cũng là công việc kém giá trị. Nếu biết đọc tài liệu, kiểm tra ảnh hưởng và hỏi đúng cách, bảo trì hệ thống cũ là môi trường rất tốt để hiểu nghiệp vụ và tiếng Nhật IT.
Bài này giúp bạn chuẩn bị cách làm việc với legacy system trong dự án Nhật. Các câu về spec, bug và review có thể học thêm tại Tiếng Nhật IT.
Legacy system trong công ty Nhật là gì?
Legacy system thường là hệ thống đã vận hành lâu năm, có nhiều dữ liệu thật và nhiều quy tắc nghiệp vụ tích lũy. Nó có thể dùng công nghệ cũ, nhưng vẫn rất quan trọng với doanh nghiệp.
- Đặc điểm
- Code lâu năm
- Vì sao cần cẩn thận
- Có logic lịch sử không dễ xóa
- Đặc điểm
- Tài liệu cũ
- Vì sao cần cẩn thận
- Có thể không khớp code hiện tại
- Đặc điểm
- Nhiều dữ liệu thật
- Vì sao cần cẩn thận
- Sửa sai ảnh hưởng khách hàng
- Đặc điểm
- Nhiều batch
- Vì sao cần cẩn thận
- Lỗi có thể phát hiện muộn
- Đặc điểm
- Ít test tự động
- Vì sao cần cẩn thận
- Cần manual test và impact analysis
- Đặc điểm
- Nghiệp vụ phức tạp
- Vì sao cần cẩn thận
- Một rule nhỏ có thể ảnh hưởng nhiều màn hình
Trong dự án Nhật, bảo trì hệ thống cũ thường đi kèm từ 保守, 運用, 改修, 影響調査.
Cách tiếp cận task bảo trì
Khi nhận task sửa hệ thống cũ, đừng mở code và sửa ngay. Hãy đi theo thứ tự:
- Đọc ticket và mục tiêu nghiệp vụ
- Kiểm tra tài liệu liên quan
- Tìm nơi code đang xử lý logic tương tự
- Kiểm tra dữ liệu thật hoặc dữ liệu test
- Xác định phạm vi ảnh hưởng
- Hỏi lại nếu tài liệu và code không khớp
- Sửa nhỏ, test kỹ, ghi rõ nội dung thay đổi
Điểm quan trọng là 影響範囲. Với hệ thống cũ, một function có thể được nhiều màn hình hoặc batch dùng chung. Sửa một chỗ có thể làm hỏng phần khác.
Ví dụ dễ gặp
Ticket yêu cầu đổi rule tính phí cho khách hàng loại A. Developer tìm hàm calculateFee và sửa trực tiếp. Sau đó QA phát hiện khách hàng loại B cũng bị đổi phí vì dùng chung hàm.
Cách làm tốt hơn:
- Bước
- Kiểm tra caller
- Việc nên làm
- Hàm đang được màn hình/batch nào gọi
- Bước
- Kiểm tra condition
- Việc nên làm
- Rule mới chỉ áp dụng loại A hay tất cả
- Bước
- Hỏi spec
- Việc nên làm
- Nếu loại B thì giữ logic cũ đúng không
- Bước
- Test regression
- Việc nên làm
- Test cả loại A và loại B
- Bước
- Ghi PR
- Việc nên làm
- Nêu rõ phạm vi ảnh hưởng đã kiểm tra
Trong dự án Nhật, câu "影響範囲を確認しました" rất quan trọng, nhưng chỉ nên nói khi bạn thật sự đã kiểm tra.
Developer Việt Nam dễ hiểu sai điểm nào?
1. "Code cũ xấu nên cứ refactor mạnh"
Refactor lớn trong hệ thống cũ có rủi ro cao. Nếu task chỉ yêu cầu sửa bug nhỏ, hãy tách refactor thành đề xuất riêng nếu cần.
2. "Tài liệu cũ chắc chắn sai"
Không nên kết luận nhanh. Có thể code mới sai, tài liệu cũ đúng, hoặc cả hai đều thiếu update. Hãy hỏi lại bằng bằng chứng cụ thể.
3. "Không có test tự động thì chỉ cần test case mình sửa"
Legacy system dễ có ảnh hưởng ẩn. Cần test các flow liên quan, đặc biệt function dùng chung, batch và report.
4. "Hệ thống cũ không cần học sâu"
Ngược lại, hiểu hệ thống cũ giúp bạn hiểu nghiệp vụ, dữ liệu và lý do thiết kế. Đây là lợi thế lớn khi làm với công ty Nhật.
Câu tiếng Nhật nên nhớ
- 日本語
- 保守対応を行います。
- かな
- ほしゅたいおうをおこないます
- Nghĩa tiếng Việt
- Tôi sẽ xử lý bảo trì.
- Dùng khi nào
- Task maintenance
- 日本語
- 影響範囲を調査します。
- かな
- えいきょうはんいをちょうさします
- Nghĩa tiếng Việt
- Tôi sẽ điều tra phạm vi ảnh hưởng.
- Dùng khi nào
- Trước khi sửa
- 日本語
- 既存処理を確認します。
- かな
- きそんしょりをかくにんします
- Nghĩa tiếng Việt
- Tôi sẽ kiểm tra xử lý hiện tại.
- Dùng khi nào
- Đọc code cũ
- 日本語
- 既存仕様と異なります。
- かな
- きそんしようとことなります
- Nghĩa tiếng Việt
- Khác với spec hiện tại.
- Dùng khi nào
- Khi phát hiện lệch
- 日本語
- 念のため確認させてください。
- かな
- ねんのためかくにんさせてください
- Nghĩa tiếng Việt
- Cho tôi xác nhận để chắc chắn.
- Dùng khi nào
- Khi hỏi cẩn thận
- 日本語
- 回帰テストを実施しました。
- かな
- かいきてすとをじっししました
- Nghĩa tiếng Việt
- Tôi đã thực hiện regression test.
- Dùng khi nào
- Báo test
- 日本語
- 修正範囲を限定します。
- かな
- しゅうせいはんいをげんていします
- Nghĩa tiếng Việt
- Tôi sẽ giới hạn phạm vi sửa.
- Dùng khi nào
- Tránh sửa lan rộng
Checklist cho legacy task
- Đã đọc tài liệu, ticket và comment mới nhất chưa?
- Đã tìm code tương tự hoặc xử lý hiện tại chưa?
- Đã kiểm tra function dùng chung chưa?
- Đã xác định màn hình, API, batch bị ảnh hưởng chưa?
- Đã hỏi khi tài liệu và code không khớp chưa?
- PR có ghi rõ test regression chưa?
Học tiếp trên JLPTVN
Đọc thêm non-functional requirements, review trong dự án Nhật, bug report tiếng Nhật. Luyện mẫu câu tại bug, review và spec.
Sau khi đọc, làm bài luyện IT và lưu câu sai ở Review để quay lại đúng điểm yếu.
FAQ
Legacy system có phải lúc nào cũng công nghệ rất cũ không?
Không. Có hệ thống dùng công nghệ tương đối mới nhưng code và nghiệp vụ đã tích lũy nhiều năm, vẫn được xem là legacy theo nghĩa bảo trì khó.
Có nên refactor khi sửa bug legacy không?
Chỉ nên refactor trong phạm vi cần thiết và có test đủ. Refactor lớn nên tách riêng để PM đánh giá rủi ro.
Làm legacy có giúp tăng tiếng Nhật IT không?
Có. Bạn sẽ gặp nhiều từ về nghiệp vụ, tài liệu, bug, vận hành, release và báo cáo hơn so với task nhỏ thuần frontend.