2010-08-27 18 views
18

Tôi đã chuyển sang một công ty mới và tôi đang làm việc trên một sản phẩm có cơ sở mã lớn mà không cần tài liệu. Tôi muốn nhanh chóng làm quen với thiết kế và dòng mã của sản phẩm để tôi có thể trở thành thành viên sản xuất ASAPLàm thế nào để hiểu được thiết kế và lưu lượng mã của bất kỳ sản phẩm nào một cách nhanh chóng?

Từ từ và đều đặn hiểu mã, nhưng cách nào là tốt nhất và thông minh nhất nên tiếp cận cơ sở mã để anh ấy hiểu mã nhanh chóng và bắt đầu phân phối?

Lưu ý: Tôi đã thử tay trên Star UML và cố đảo ngược sơ đồ lớp để tôi có thể có ý tưởng thô về thiết kế nội bộ của sản phẩm nhưng thất bại thảm hại.

CHỈNH SỬA: Câu hỏi không phải là về việc thu thập kiến ​​thức về những gì sản phẩm làm nhưng cách thiết kế nội bộ.

lỗi Fixing và Debugging sử dụng breakpoint không cung cấp một cách để đạt được điều này, nhưng tôi đang tìm kiếm nếu có thậm chí là một cách nhanh hơn chúng ta có thể đạt được điều này

Trong Words Keith:

Điều này có thể làm việc cho một số mã cơ sở, nhưng nói chung tôi nghĩ đó là một ý tưởng tồi. Bạn có xu hướng quá tập trung vào các chi tiết, trong khi lúc đầu bạn muốn có được bức tranh lớn: các lớp là gì, các mẫu giao tiếp là gì, vv Plus, nếu bạn có một ứng dụng phân tán (máy khách-máy chủ, n-tier , vv), hoặc mã mà phải mất một thời gian dài để chạy nó có thể không thực tế để chạy nó thông qua một trình gỡ lỗi

+0

Tôi không chắc chắn ý bạn là "cách nhanh hơn" của việc học nó. Nếu không nhìn vào mã thực tế, bạn có thể biết nó hoạt động như thế nào? –

Trả lời

15

Tôi là kỹ sư hợp đồng và tình huống này thường xuyên vài lần mỗi năm — trong vài thập kỷ qua.

tôi thấy nó khá hữu ích để lần đầu tiên chạy ứng dụng và chơi với nó-trước khi nhìn vào bất kỳ mã:

  • Cái quái gì nó làm gì? Nếu cần, hãy đọc tài liệu hướng dẫn sử dụng.
  • Điều gì xảy ra với giá trị cực đoan?
  • Nếu tôi bỏ một số giá trị thì sao?
  • Điều gì xảy ra nếu tôi nhấp vào điều khiển nhanh chóng?
  • Có cách nào để lạm dụng chương trình không?
  • Khám phá các cạnh của ứng dụng: có hiếm khi được sử dụng hoặc các menu phụ khó tìm không? Có cơ sở cấu hình nào cho thấy nhiều chức năng hơn không?

Trong khi tôi làm điều đó, tôi đang xây dựng một mô hình tinh thần về cách tôi đã triển khai nó. Đáng ngạc nhiên, cuộc gặp gỡ đầu tiên hướng tới người dùng với sản phẩm này thường khiến tôi hiểu về ứng dụng là đầu và vai phía trên các nhà phát triển đã làm việc trên nó trong một thời gian dài. Một tác dụng phụ của phương pháp này là tôi có xu hướng tìm thấy khá một vài lỗi (thường là một trận tuyết lở của chúng), và nghĩ về một vài cải tiến mà nên được thực hiện.

Sau đó, tôi xem xét cấu trúc chung của chương trình, cho dù đó là mô-đun, lớp, tệp hoặc lược đồ. Không phải xem các dòng mã riêng lẻ, ngoại trừ các dòng hiển thị kiến ​​trúc của chương trình. Một khi tôi nghĩ rằng tôi hiểu hơn một nửa cấu trúc, tôi cố gắng sửa chữa hoặc sửa lỗi nhỏ — một vài thứ cần viết, nhưng có thể mất hàng giờ để hiểu đúng. Nếu nó hoạt động, tôi thực hiện một sự thay đổi lớn hơn một chút ở đâu đó, tốt nhất là ở một phần khác của mã.

Bằng cách này, tôi đã tìm thấy nó có thể hiểu đủ tốt khoảng 50.000 đến 100.000 dòng mã mỗi ngày.

+0

Tôi nghĩ rằng đây là cách tốt nhất cho đến nay. – pankajt

+0

@wallyk cảm ơn đây là cách tiếp cận tốt để áp dụng .. – Himanshu

5

Nếu bạn có một môi trường phát triển để chạy mã theo cách tốt nhất tôi đã tìm thấy là sử dụng trình gỡ rối và xem luồng mã khi thực thi nó. Bạn có thể thiết lập các điểm ngắt và duyệt qua nó để xem mã tương tác như thế nào.

+1

Tùy thuộc vào thiết lập của công ty bạn nếu bạn có bất kỳ tài nguyên QA nào thử nghiệm trên ứng dụng, bạn có thể yêu cầu họ cung cấp một số trường hợp sử dụng phổ biến và thông tin thử nghiệm để bạn có cơ sở chạy chương trình khi gỡ lỗi. –

+0

+1 Điều đầu tiên tôi cố gắng làm khi học một hệ thống mới là tiến hành từng bước một trong trình gỡ rối. –

+4

Điều này có thể hoạt động đối với một số cơ sở mã, nhưng nói chung tôi nghĩ đó là một ý tưởng tồi. Bạn có xu hướng quá tập trung vào các chi tiết, trong khi lúc đầu bạn muốn có được bức tranh lớn: các lớp là gì, các mẫu giao tiếp là gì, vv Plus, nếu bạn có một ứng dụng phân tán (máy khách-máy chủ, n-tier , vv), hoặc mã mà phải mất một thời gian dài để chạy nó có thể không được thực tế để chạy nó thông qua một trình gỡ lỗi. – KeithB

0

Yêu cầu mọi người bạn có thể tìm kiếm trợ giúp và yêu cầu họ hỏi bất kỳ ai khác mà họ cho là có thể hữu ích.

+2

Xin đừng làm điều này. Làm việc với những người khăng khăng là cho ăn muỗng tất cả thông tin của họ không chỉ cực kỳ bực bội mà còn giết chết năng suất. Làm cho nó một nỗ lực tốt trước khi sử dụng phương pháp này, đồng đội của bạn sẽ cảm ơn bạn. ;) – mpeterson

+0

Yêu cầu giúp đỡ là nhanh nhất, và đôi khi là cách duy nhất để hiểu những gì đang xảy ra, đặc biệt là với các hệ thống phức tạp. Không có tài liệu nào vì lý do - họ không có thời gian để tạo ra nó. Các kiến ​​thức về mã là trong đầu, hoặc không có ở tất cả.Anh ta cần phải tìm hiểu những khoảng trống kiến ​​thức mà anh ta dự kiến ​​sẽ lấp đầy và điều đó đến từ việc hỏi đồng đội. – Beth

3

Câu hỏi của bạn có vẻ hơi giống với this topic

lẽ bạn có thể có một cái nhìn tại the blog of one of the SO co-developer, trong đó có một "New phát triển" phần (và BTW thực sự là buồn cười).

+1

Tôi nghĩ rằng 'Vẽ phân cấp lớp trên một tờ giấy' có ý nghĩa. – pankajt

4

Cách tôi luôn học, ngoài việc đọc qua mô hình mã/dữ liệu là bắt đầu sửa một số lỗi. Điều đó cho phép tôi tiếp xúc với các phần khác nhau của hệ thống, và có 'mục đích' trong khi đọc mã làm cho nó có ý nghĩa hơn một chút.

+0

+1 Thực tế việc sử dụng mã là một cách tuyệt vời để tìm hiểu. Không có thuốc ma thuật ở đây. –

0

Có các công cụ hút mã nguồn và vẽ hình ảnh. Hãy thử Kiến trúc sư doanh nghiệp từ Sparx. Đó là dưới $ 200 cho mỗi chỗ ngồi và sẽ cho bạn thấy cách bố trí đối tượng rất hiệu quả.

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