2010-01-08 34 views
7

Tôi đang nghe một cuộc thảo luận ở bảng điều khiển mà một người đề cập đến 'động cơ' của họ không phải là 1.3 nhưng bây giờ là 1.7 triệu dòng mã. Điều đó làm tôi sợ. Tôi không thể tưởng tượng rằng số lượng các dòng, số lượng các mô-đun, vv Tôi luôn luôn cảm thấy rằng C + + không xử lý các mô-đun cũng như các ngôn ngữ khác có thể. Tôi cảm thấy các dự án lớn khó quản lý hơn và thích hợp hơn để giữ các dòng mã một cách hợp lý. Tôi cảm thấy khó chịu khi tôi nhấn 10k dòng. Tôi không thể tưởng tượng được 20k, 50k, 500k hay 1 triệu sẽ cảm thấy như thế nào.Mã hóa Thực hành: Suy nghĩ của bạn về dự án 1,7 triệu LOC là gì?

Bạn có thực hành gì trong khi phát triển và duy trì các dự án có kích thước này?

+9

1.7 dòng mã cho động cơ của anh ấy? Anh ta phải sử dụng Perl. – rlbond

+0

Người đó có chỉ định rằng 'động cơ' của họ là 1,7 dòng ** C++ ** hay bạn là người đưa nó vào cuộc thảo luận? –

+0

Động cơ đã biết của nó. Ông đã nói C + + và một số C –

Trả lời

6

Bạn có các phương pháp nào trong khi phát triển và duy trì các dự án có kích thước này?

Chia nhỏ và chinh phục, do đó không có dự án nguyên khối có kích thước này.

2

Đối với tôi, nó không phải là số dòng, nhưng mô-đun thiết kế như thế nào, cách gói gọn các mô-đun. Sau một thời điểm nhất định, nếu tôi có thể phóng to để nói về một mô-đun, tìm ra thiết kế của nó là gì, và viết các tính năng và sửa lỗi, thì số dòng mã không quan trọng. Có thể cho rằng tôi đã làm việc trên một hệ thống lớn hơn 1 triệu dòng mã.

3

Bạn có các phương pháp nào trong khi phát triển và duy trì các dự án có kích thước này?

Vâng, đó là khi bạn phát triển từ nhà phát triển đến kiến ​​trúc sư.

Với dự án phần mềm lớn, mối quan tâm của nhà lãnh đạo dự án không nên thu hẹp khi triển khai nhưng ở cấp cấu trúc: Đúng cách mô đun chính xác thành phần/thư viện của bạn, tách chúng ra, sử dụng các mẫu thiết kế.

0

Loại động cơ nào? Nếu đó là một Game Engine, nó chắc chắn được mô đun hóa thành Đồ họa, Âm thanh, Vật lý, Xử lý Bản đồ và hàng tá mô-đun khác. Mỗi mô-đun chắc chắn có chứa một số mô-đun con, tức là Đồ họa được chia thành Phông chữ, Hiệu ứng, các phần cụ thể của GPU, v.v.

0

Tôi đoán nó phụ thuộc. Bạn có thể cho một đầu bếp xấu cùng một số nguyên liệu (nghĩa là rất nhiều) với tư cách là đầu bếp giỏi và đầu bếp tồi sẽ cho bạn thứ gì đó sẽ khiến bạn vung lên trong khi đầu bếp giỏi có thể làm cho nó ngon và dễ tiêu hóa.

Tôi không nghĩ về dự án về số lượng dòng nhưng (như bạn đã bỏ qua) khả năng bảo trì của dự án. Miễn là dự án được mô đun hóa và được tái cấu trúc tốt, nó có thể không quá tệ. Vì vậy, để trả lời câu hỏi của bạn, các phương pháp tôi sử dụng để duy trì một cơ sở mã lớn sẽ là cơ sở duy nhất để duy trì bất kỳ cơ sở mã cỡ nào - tôi sẽ xem xét tích hợp một xây dựng tự động với mức độ mã cao (tốt nhất là với mức hệ thống). kiểm tra), bao gồm các công cụ để giúp bạn có thể đọc được (ví dụ như checkstyle) và không có mã trùng lặp (ví dụ như simian) và những thứ như vậy.

Nếu dự án tiếp tục phát triển và bạn đạt được số lượng lớn các dòng và bạn phát triển cơ sở mã đúng cách, tôi đoán điều đó chỉ có nghĩa là khách hàng của bạn hài lòng và muốn có nhiều tính năng hơn.

7

Một triệu dòng mã đã vượt quá điểm mà hầu hết các con người có thể giữ tất cả trong đầu. Điều đó có nghĩa là mỗi thành viên trong nhóm sẽ mang theo các bản đồ tinh thần không đầy đủ của hệ thống, điều này có thể làm cho các cuộc thảo luận thiết kế trở nên khó khăn.

Để giảm thiểu nhiều hiểu biết không đầy đủ, bạn cần bản đồ, dưới dạng một bộ sơ đồ kiến ​​trúc thích hợp. Các sơ đồ này thường sẽ bao gồm sơ đồ khối rất cao về kiến ​​trúc của hệ thống, với các biểu đồ mức thấp chi tiết hơn cho các phần quan trọng, và có thể biểu đồ trình tự để mô tả các tương tác chính ở mức chi tiết thích hợp. Việc có các sơ đồ như vậy trong tầm tay giúp nhóm phát triển "trên cùng một trang" khi thảo luận về hệ thống.

Biểu đồ 'Phụ thuộc giữa các hệ thống con' cũng có thể chỉ ra các khu vực lộn xộn (của "Wuh? Tại sao bit đó của khung kiên trì phụ thuộc vào giao diện người dùng?!") Cần được làm sạch. Tốt nhất nếu bạn có thể tìm ra cách để tự động hóa việc tạo các sơ đồ này. Graphviz có thể là bạn của bạn.

0

Bạn có thực hành gì trong khi phát triển và duy trì các dự án có kích thước này?

Có rất nhiều trường phái tư tưởng cho việc quản lý dự án phần mềm lớn, và rõ ràng nó phụ thuộc nhiều vào loại dự án:

  • tài trợ phát triển phần mềm (có thể bao gồm một số dự án mã nguồn mở mà công ty đang đóng góp, suy nghĩ về Eclipse),
  • Phát triển phần mềm "Người chơi" đã thành công một cách dữ dội (nghĩ Linux).

Phát triển phần mềm tài trợ thường có xu hướng sử dụng quy trình chính thức ngay từ đầu, nơi dự án "hobbyist" có xu hướng chỉ áp dụng các thực tiễn bắt buộc để giải quyết điểm sơn khi chúng xuất hiện.

Vì người khác đã chỉ ra rằng dự án có kích thước đó nhất thiết phải là nỗ lực của nhóm, và rất nhiều thách thức phải đối mặt là cần phối hợp các hoạt động và hạn chế hỗn loạn.

Nhưng tất cả họ đều có xu hướng sử dụng cùng một phương pháp "chiến thuật" để xử lý sự phức tạp. Tôi khuyên bạn nên đọc phần giới thiệu này về số Joel Test để hiểu về một số thực tiễn hữu ích/bắt buộc.

Các vấn đề liên quan