Trong một vài tháng, một đồng nghiệp sẽ chuyển sang một dự án mới và tôi sẽ kế thừa một trong những dự án của anh ấy. Để chuẩn bị, tôi đã đặt hàng hiệu quả của Michael Feathers với Legacy Code .
Nhưng cuốn sách này cũng như hầu hết các câu hỏi về mã kế thừa mà tôi tìm thấy cho đến nay đều quan tâm đến trường hợp kế thừa mã như vốn có. Nhưng trong trường hợp này tôi thực sự có quyền truy cập vào nhà phát triển ban đầu và chúng tôi có một thời gian để bàn giao có trật tự.
Một số nền tảng về đoạn mã tôi sẽ kế thừa:
- Chức năng của nó: Không có lỗi nào được biết đến, nhưng khi các yêu cầu về hiệu suất tiếp tục tăng lên, một số tối ưu hóa sẽ trở nên cần thiết trong tương lai không xa.
- Không có giấy tờ: Có khá nhiều tài liệu không ở cấp độ phương thức và lớp. Mặc dù vậy, những gì mã được cho là sẽ làm ở mức cao hơn, được hiểu rõ, bởi vì tôi đã viết chống lại API của nó (dưới dạng hộp đen) trong nhiều năm.
- Chỉ các thử nghiệm tích hợp cấp cao hơn: Chỉ có các thử nghiệm tích hợp thử nghiệm tương tác thích hợp với các thành phần khác thông qua API (một lần nữa, hộp đen).
- Mức rất thấp, được tối ưu hóa cho tốc độ: Vì mã này là trung tâm của toàn bộ hệ thống ứng dụng, rất nhiều trong số đó đã được tối ưu hóa nhiều lần trong nhiều năm và cực kỳ thấp (một phần có trình quản lý bộ nhớ riêng cho các cấu trúc nhất định /Hồ sơ).
- Đồng thời và không khóa: Mặc dù tôi rất quen thuộc với lập trình đồng thời và không khóa và thực sự đã đóng góp một vài phần cho mã này, nhưng điều này lại thêm một lớp phức tạp khác.
- Codebase lớn: Dự án cụ thể này có hơn mười nghìn dòng mã, vì vậy không có cách nào tôi có thể giải thích mọi thứ cho tôi.
- Viết bằng Delphi: Tôi sẽ chỉ đưa vấn đề này ra ngoài, mặc dù tôi không tin ngôn ngữ này là nguyên nhân của câu hỏi, vì tôi tin rằng loại vấn đề này là bất khả tri về ngôn ngữ.
Tôi đã tự hỏi làm thế nào thời gian cho đến khi khởi hành của anh ấy sẽ được dành tốt nhất. Dưới đây là một vài ý tưởng:
- Nhận mọi thứ để xây dựng trên máy của tôi: Mặc dù mọi thứ nên được kiểm tra trong kiểm soát mã nguồn, người đã không quên kiểm tra tệp một lần, vì vậy đây có lẽ nên là đơn hàng đầu tiên của doanh nghiệp.
- Kiểm tra thêm: Mặc dù tôi muốn có nhiều bài kiểm tra đơn vị cấp lớp hơn để khi tôi thực hiện thay đổi, bất kỳ lỗi nào tôi giới thiệu đều có thể được phát hiện sớm, mã hiện tại không thể kiểm tra được (các lớp lớn, phương thức dài, quá nhiều phụ thuộc lẫn nhau).
- Tài liệu gì: Tôi nghĩ cho người mới bắt đầu, tốt nhất nên tập trung tài liệu vào các khu vực trong mã mà nếu không khó hiểu, ví dụ như vì tính chất được tối ưu hóa / mức độ tối ưu cao của chúng. Tôi e rằng có một vài thứ trong đó có thể trông xấu xí và cần tái cấu trúc / viết lại, nhưng thực sự là những tối ưu hóa đã xuất hiện ở đó vì một lý do chính đáng mà tôi có thể bỏ lỡ (xem Joel Spolsky, Things You Should Không bao giờ làm, Phần I )
- Cách viết tài liệu: Tôi nghĩ rằng một số sơ đồ lớp của kiến trúc và sơ đồ trình tự của các chức năng quan trọng kèm theo một số văn xuôi sẽ là tốt nhất.
- Ai là tài liệu: Tôi đã tự hỏi điều gì sẽ tốt hơn, để anh ấy viết tài liệu hoặc để anh ấy giải thích cho tôi, để tôi có thể viết tài liệu. Tôi sợ, rằng những điều rõ ràng với anh ta nhưng không phải tôi sẽ không được bảo hiểm đúng cách.
- Tái cấu trúc bằng cách sử dụng lập trình cặp: Điều này có thể không thực hiện được do hạn chế về thời gian, nhưng có lẽ tôi có thể cấu trúc lại một số mã của anh ta để làm cho nó dễ bảo trì hơn trong khi anh ta vẫn ở đó để cung cấp đầu vào về lý do tại sao mọi thứ lại như vậy.
Hãy bình luận và thêm vào này. Vì không có đủ thời gian để làm tất cả những điều này, tôi đặc biệt quan tâm đến việc bạn sẽ ưu tiên như thế nào.
Cập nhật: Khi dự án bàn giao kết thúc, tôi đã mở rộng danh sách này bằng những kinh nghiệm của riêng tôi trong câu trả lời dưới đây .