Các kỹ thuật tốt để giữ vị trí của bạn trong mã là gì?


21

Tôi hiểu việc sử dụng dấu trang để ghi nhớ một điểm trong mã của bạn. Tuy nhiên, làm thế nào để một người theo dõi dòng mã họ đang điều tra? Ví dụ: nhiều dấu trang và thứ tự chúng được tạo ra.

Thí dụ:

  1. Báo cáo lỗi: "Va chạm không hoạt động trên các góc tường"

    1. Sinh sản của lỗi đặt nó xuống một số đa giác không va chạm.
    2. Mã va chạm được viết bởi một dev không có sẵn. Vì vậy, điều tra đi một cái gì đó như:

Lược đồ của một dòng chảy

Trong quá trình điều tra, đặc biệt là khi xem xét các mục không phải là mã như Google, người ta có thể dự kiến ​​một cách hợp lý sẽ mất vị trí của chúng trong mã ( Tôi đã xem xét đường dẫn mã này chưa? Hoặc tôi đang điều tra đường dẫn mã nào? đến chức năng này , v.v.). Điều tương tự cũng xảy ra đối với các gián đoạn không thể tránh khỏi (Boss: Tôi cần [Báo cáo dài vô nghĩa] NGAY BÂY GIỜ , v.v.)

Sẽ rất hữu ích khi có một nguồn kỹ thuật hoặc công cụ để cung cấp một cách để theo dõi vị trí của một người trong mã.


Chỉnh sửa : Ví dụ trên có nghĩa là một minh họa tiềm năng, không phải là một vấn đề thực tế cần trả lời.

Một cách khác để diễn đạt câu hỏi này là:

Khi học một hệ thống mới, làm thế nào để bạn theo dõi nơi bạn sẽ học mã? Nó không phải là về việc hiểu tại sao mã làm những gì nó làm (đó là những gì bình luận nên làm), nhưng nó làm như thế nào (chỉ được học thông qua việc đọc mã chứ không phải bình luận).

Câu trả lời:


14

Giao diện bong bóng cố gắng giải quyết vấn đề này bằng cách hiển thị một loạt các đoạn mã cùng một lúc. (Bạn đang bị mắc kẹt với trình duyệt của mình cho Google). Nó trông tuyệt vời nhưng tôi đã không thử nó. Phiên bản ý tưởng này là một triển khai Visual Studio cho Visual Studio Ultimate.


+1 vì đây là một giải pháp thực tế và sẵn sàng cho vấn đề. (Nó cũng chỉ là một chút tuyệt vời!)
Jess Telford

Một trong những điều tôi đã phát minh ra trong đầu của mình nhiều năm trước, chỉ để tìm ra nó đã tồn tại :( +1
phresnel

có vẻ tương tự như những gì bạn có thể làm trong Squeak và các Smalltalk khác nơi bạn mở các cửa sổ duyệt mã mới và bạn có thể điều hướng đến bất kỳ phương thức / lớp nào bạn muốn trong chúng.
Rudolf Olah

khá tuyệt vời ... Tôi đã tạo ra một ứng dụng đồ chơi nhỏ cung cấp trực quan hóa trình duyệt internet của bạn theo cách tương tự (khi bạn nhấp vào liên kết, một nút mới sẽ được thêm và liên kết trở lại nguồn gốc). Không bao giờ nghĩ đến việc áp dụng điều đó để mã hóa trực quan.
Michael Brown

12

Ngoài tất cả các công nghệ tuyệt vời đã đề cập, tôi đã thấy rằng mảnh giấy A3 lỗi thời là một trợ giúp tuyệt vời trong những vấn đề này. Viết ra ý tưởng của bạn và sắp xếp chúng theo kiểu mindmap.


Yep yep. Câu trả lời tốt nhất cho đến nay.
Patrick Hughes

10

Cả trình soạn thảo và trình gỡ lỗi của tôi đều có thể chuyển sang định nghĩa của hàm và có nút "quay lại" đa cấp như trình duyệt web để trở về nơi tôi đã ở trước đó. Điều đó thường đủ để tôi theo dõi một luồng gỡ lỗi phức tạp. Nó cũng giúp có kiểm soát nguồn cho phép bạn cam kết rất nhiều . Điều đó mang lại cho tôi một thông điệp cam kết giải thích lý do tại sao tôi đang thử một cái gì đó, cũng như một cách nhanh chóng để sao lưu sự thay đổi nếu nó không hoạt động. Ngoài ra, một bảng trắng đơn giản để liệt kê các khách hàng tiềm năng và đã khám phá sẽ lấp đầy mọi khoảng trống còn lại cho tôi.


1
Rất thực tiễn. Tôi đã không nghĩ đến việc sử dụng kiểm soát nguồn theo cách này.
Jess Telford

Trình soạn thảo và trình sửa lỗi nào?
John Gaines Jr.

Trình gỡ lỗi MULTI của Vim và Green Hill.
Karl Bielefeldt

Trong Visual Studio, đó là CTRL + - để quay lại và CTRL + = để đi tiếp.
VitalyB

Eclipse có thể hiển thị định nghĩa của biểu tượng hiện tại dưới con trỏ trong một bảng riêng biệt.

3

Nhiều cách tôi theo dõi:

  • Viết nó ra . Có một cuộc họp trong hai phút? Viết ra những gì bạn đã làm và ở đâu. Tôi luôn có bút và giấy đặt cạnh tôi để viết những thứ khi tôi viết mã.
  • Dấu trang . Tôi có 10 dấu trang được đánh số tôi có thể đặt.
  • Ngăn xếp . Bạn có thể dễ dàng xem toàn bộ hệ thống phân cấp mã bạn đã trải qua. Trình chỉnh sửa của tôi cũng cho phép tôi sao chép theo dõi ngăn xếp và lưu nó. Lần sau khi tôi mở trình soạn thảo của mình, tôi có thể tải stacktrace để điều hướng nhanh.
  • Biên tập điều hướng . Đi đến thành viên cơ sở, đi đến người thừa kế, tìm tập quán, đi tham khảo, ...

1

Tôi sử dụng giải pháp đơn giản - không bao giờ đóng bất cứ thứ gì cho đến khi tôi hoàn thành nhiệm vụ. Điều đó có nghĩa là thường thì một trong số 50 cửa sổ / tab đang mở có một cái gì đó sẽ nhắc nhở tôi những gì tôi đã nghĩ khi quay lại với nó.


Vấn đề với cách tiếp cận này có xu hướng là làm thế nào để bạn theo dõi nhiều nhánh suy nghĩ / nghiên cứu đồng thời?
Jess Telford

1
Tôi không thấy đó là một vấn đề - tất cả đều mở theo cùng một cách, và nó không thành vấn đề với tất cả những chi nhánh mà tôi trở lại. Điều này hoạt động tốt hơn cho trình duyệt web so với IDE, nhưng điều đó có thể là do cơ sở mã hiện tại của tôi không thực sự được tổ chức theo khái niệm.
Tom Clarkson

1

Nhận một công cụ / IDE dành cho nhà phát triển thực sự, điều khiến bạn thích thú. Vi, Emacs, Eclipse hoặc bất cứ điều gì (Sự lựa chọn lớn như những tranh luận về vấn đề nào là tốt nhất, nhưng đó là một vấn đề khác) và học cách sử dụng nó đúng cách . không, giống như quá nhiều người làm, sử dụng nó như Notepad với cú pháp đánh dấu. Học cách sử dụng các phím nóng và không dựa vào chuột cho các hành động thông thường (Quá chậm). Một màn hình lớn (tối thiểu 1920x1200) là lành mạnh.

Công cụ dev của tôi đã đặt tên (chậm hơn nhưng tên hữu ích làm cho chúng bền bỉ) và không được đặt tên (Quick to insert and xóa) bookmark, duyệt và quay lại và tìm kiếm tất cả trong một, ghi chú và nhà phát triển (cá nhân và nhóm rộng) được đính kèm dòng mã nguồn cụ thể. Nó thực hiện mọi ngôn ngữ dưới ánh mặt trời mà không cần phải cài đặt một plugin nào khác.

Tôi làm việc trên cơ sở mã bao gồm một tá hoặc hơn 1 triệu mô-đun SLOC, sử dụng nửa tá ngôn ngữ. Rõ ràng là tôi không làm việc với tất cả chúng cùng một lúc, thay vào đó tập trung vào các phần nhỏ của một hoặc hai, nhưng tôi có thể điều hướng bằng một vài hành động đến bất kỳ điểm nào trong mã có liên quan đến những gì tôi đang làm.


Tôi đồng ý một IDE thích hợp là tốt nhất. Tôi sử dụng nhãn hiệu tuyệt vời của vim và tính năng nhảy thẻ. Tuy nhiên, cả hai đều có những hạn chế: nhãn hiệu là bộ đệm cục bộ và lịch sử thẻ là tuyến tính. Đối với các tình huống phức tạp, điều này vẫn chưa đủ (do đó đặt câu hỏi này).
Jess Telford

1
Tôi là một người ampe Vi, nhưng đã thấy những gì có thể được thực hiện với nó trong tay của người dùng quyền lực đã chuẩn bị viết một vài đoạn script ngắn, dành thời gian để học cách thực sự sử dụng VIM hoặc thay đổi thành một công cụ có thiết lập tính năng trong một cách làm việc cho bạn, và dành thời gian học điều đó. Đó là quan điểm của tôi. Tìm hiểu bạn công cụ. Một người giao dịch giỏi không đổ lỗi cho các công cụ của mình, người lập trình giỏi hơn.
mattnz

Đã đồng ý. Tôi là người mới bắt đầu với vim (có thể sử dụng mà không cần suy nghĩ hầu hết thời gian, nhưng hầu như không bị trầy xước bề mặt), vì vậy tôi chắc chắn có những điều tôi không biết. Thậm chí, tôi không tưởng tượng rằng có thể làm bất cứ điều gì như câu trả lời của psr trong vi (m) (ít nhất, không phải từ nghiên cứu của tôi).
Jess Telford

@Jess: đánh dấu không nhất thiết phải đệm cục bộ. Nhãn hiệu sử dụng chữ in hoa là toàn cầu.
Dave Kirby

@DaveKirby Tuyệt vời - Tôi thích học những điều mới về vim: D
Jess Telford

1

Với Visual Studio, trong phiên gỡ lỗi, bạn có thể sử dụng cửa sổ 'Call Stack' (bạn có thể bật nó trong Debug / Windows / Call Stackhoặc bằng phím tắt Ctrl+Alt+c) để theo dõi dòng mã.


1
Như trong hầu hết các trình sửa lỗi. Câu hỏi nằm nhiều hơn khi duyệt thủ công mã của bạn, bao gồm cả nghiên cứu bên ngoài cơ sở mã của bạn.
Jess Telford

1

Tôi ngạc nhiên không ai đề cập đến nhiều công cụ có thể tạo ra các đồ thị cuộc gọi. Tôi đã tìm thấy doxygen là một trợ giúp tuyệt vời. Bạn thậm chí không phải cam kết sử dụng doxygen trong suốt chương trình của mình, bạn chỉ có thể gắn thẻ các chức năng bạn quan tâm để theo dõi.


0

Tôi sử dụng chế độ org cho emacs, đây là một công cụ phác thảo. Với nó, tôi có thể viết một phác thảo bắt chước ngăn xếp cuộc gọi của mã và bao gồm các liên kết trực tiếp đến chính mã nguồn (thông qua org-store-link). Bạn có thể bao gồm văn bản giải thích, liên kết đến các trang web, v.v. (ví dụ: khi bạn tìm kiếm số ma thuật)

Nó không hoàn hảo. Ví dụ, cấu trúc phác thảo không có bất kỳ khái niệm nào về việc tăng cấp, vì vậy rất khó để theo dõi một đường dẫn thực thi, trái ngược với chỉ một ngăn xếp. Nhưng đó là điều tốt nhất tiếp theo cho sơ đồ trên giấy mà tôi đã tìm thấy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.