Làm cách nào để xử lý sự bất đồng trong đánh giá mã liên quan đến trường hợp cạnh không chắc?


188

Tôi đang làm việc tại một công ty khởi nghiệp robot trong một nhóm bảo hiểm đường dẫn và sau khi gửi yêu cầu kéo, mã của tôi được xem xét.

Đồng đội của tôi, người đã ở trong đội hơn một năm, đã đưa ra một số nhận xét về mã của tôi đề nghị tôi làm nhiều việc hơn tôi nghĩ là cần thiết. Không, tôi không phải là một nhà phát triển lười biếng. Tôi thích mã thanh lịch có bình luận tốt, tên biến, thụt lề và xử lý các trường hợp đúng. Tuy nhiên, anh ấy có một kiểu tổ chức khác mà tôi không đồng ý.

Tôi sẽ cung cấp một ví dụ:

Tôi đã dành một ngày để viết các trường hợp thử nghiệm để thay đổi thuật toán tìm kiếm chuyển đổi mà tôi đã thực hiện. Anh ấy đã đề nghị tôi xử lý một trường hợp tối nghĩa rất khó xảy ra - thực tế tôi không chắc nó có thể xảy ra hay không. Mã mà tôi đã tạo đã hoạt động trong tất cả các trường hợp thử nghiệm ban đầu của chúng tôi và một số trường hợp mới mà tôi tìm thấy. Mã mà tôi đã tạo đã vượt qua hơn 300 mô phỏng của chúng tôi được chạy hàng đêm. Tuy nhiên, để xử lý trường hợp khó hiểu này sẽ khiến tôi mất 13 giờ có thể tốt hơn để cố gắng cải thiện hiệu suất của robot. Để rõ ràng, thuật toán trước đây mà chúng tôi đã sử dụng cho đến bây giờ cũng không xử lý trường hợp tối nghĩa này và không chỉ một lần, trong 40k báo cáo đã được tạo, nó đã từng xảy ra. Chúng tôi là một người khởi nghiệp và cần phát triển sản phẩm.

Tôi chưa bao giờ xem xét mã trước đây và tôi không chắc liệu mình có quá tranh luận hay không; Tôi có nên im lặng và làm theo những gì anh ấy nói không? Tôi quyết định giữ đầu mình xuống và chỉ thực hiện thay đổi mặc dù tôi hoàn toàn không đồng ý rằng đó là cách sử dụng thời gian tốt.


Tôi tôn trọng đồng nghiệp của mình và tôi thừa nhận anh ấy là một lập trình viên thông minh. Tôi chỉ không đồng ý với anh ấy về một điểm và không biết làm thế nào để xử lý sự bất đồng trong đánh giá mã.

Tôi cảm thấy rằng câu trả lời tôi chọn đáp ứng tiêu chí này để giải thích làm thế nào một nhà phát triển cơ sở có thể xử lý sự bất đồng trong đánh giá mã.


152
Bạn có nhận ra rằng các bài kiểm tra đơn vị, một phần, có nghĩa là để bắt những lỗi một triệu này khi ai đó kiểm tra thay đổi mã của bạn để phá vỡ nó theo một cách khó hiểu, phải không? Kiểm tra đơn vị không chỉ là về đảm bảo rằng mã của bạn là chính xác tại , mà còn trong ba năm khi ai đó đang duy trì mã bạn đã viết.

189
@Klik "Đầu vào thực sự sẽ không bao giờ như thế này" Đó là nơi bạn sai. Tôi đã gặp phải quá nhiều trường hợp "đầu vào sẽ không bao giờ như thế này" và bị bất ngờ khi nó "như thế này." Trong một môi trường sản xuất, tất cả các loại điều kỳ lạ có thể xảy ra. Đừng chỉ nghĩ về cách phần mềm của bạn sẽ hoạt động mà còn phần mềm sẽ thất bại như thế nào?

38
@Snowman Một phần nữa, các đánh giá về mã điểm , phần nào, có nghĩa là để bắt những lỗi một trong một triệu mà đơn vị kiểm tra và thậm chí kiểm tra ngẫu nhiên / làm mờ không tìm thấy.
Derek Elkins

11
Cũng đáng nhớ rằng các đánh giá mã không chỉ ở đó để nắm bắt các vấn đề mà họ cũng ở đó để bạn tìm hiểu làm thế nào bạn có thể làm tốt hơn vì vậy hãy coi chúng như một cơ hội học tập.
Steve Barnes

72
này @Klik, có vẻ như vấn đề cơ bản ở đây là bạn "sợ nói lên suy nghĩ của mình". KHÔNG BAO GIỜ tức giận, LUÔN LUÔN nói lên suy nghĩ của bạn - bằng một nụ cười. Bạn nên nói ngay với anh chàng, "Hmm, điều đó sẽ khiến tôi mất ít nhất hai ngày, điều này có đáng không, hãy hỏi ông chủ của chúng tôi?" và thứ hai bạn nên nói "Đừng quên người đàn ông chúng ta đang làm việc với người máy, thực tế không thể cảm biến bên trái ở bên phải của cảm biến bên phải - hãy hỏi ông chủ bao nhiêu trường hợp góc chống vật lý mà chúng ta muốn để che chở ". Vấn đề của bạn là của bạn , vấn đề của bạn là bạn cần trao đổi sự tức giận để nói chuyện .
Fattie

Câu trả lời:


227

một trường hợp tối nghĩa rất khó xảy ra - thực tế tôi không chắc nó có thể xảy ra hay không

Không có các hành vi chưa được kiểm tra trong mã có thể rất quan trọng. Nếu một đoạn mã được chạy, ví dụ 50 lần một giây, một trong một triệu cơ hội sẽ xảy ra sau mỗi 5,5 giờ chạy. (Trong trường hợp của bạn, tỷ lệ cược có vẻ thấp hơn.)

Bạn có thể nói về các ưu tiên với người quản lý của bạn (hoặc bất cứ ai là người cao cấp hơn phụ trách đơn vị bạn làm việc). Bạn sẽ hiểu rõ hơn về việc ví dụ như làm việc với hiệu suất mã hoặc mã chống đạn là ưu tiên hàng đầu, và trường hợp góc đó có thể khả thi đến mức nào. Người đánh giá của bạn cũng có thể có một ý tưởng sai lệch về các ưu tiên. Sau khi nói chuyện với người phụ trách, bạn sẽ có một thời gian dễ dàng hơn (đồng ý) với các đề xuất của người đánh giá của bạn và sẽ có điều gì đó để tham khảo.

Luôn luôn là một ý tưởng tốt để có nhiều hơn một người đánh giá. Nếu mã của bạn chỉ được xem xét bởi một đồng nghiệp, hãy hỏi người khác biết mã đó hoặc mã cơ sở nói chung, hãy xem. Một ý kiến ​​thứ hai, một lần nữa, sẽ giúp bạn dễ dàng (không) đồng ý với các đề xuất của người đánh giá.

Có một số ý kiến ​​định kỳ trong một số đánh giá mã thường chỉ ra một điều lớn hơn không được truyền đạt rõ ràng, và các vấn đề tương tự lặp đi lặp lại. Cố gắng tìm hiểu điều lớn hơn đó, và thảo luận trực tiếp với người đánh giá. Hỏi đủ câu hỏi tại sao . Nó giúp tôi rất nhiều khi tôi bắt đầu thực hành đánh giá mã.


9
@ 9000 Cũng có thể bực bội khi câu trả lời là "bởi vì cuộc sống là như vậy". Ví dụ, đây là một cái mà tôi gần đây đã phải trải qua: "Sử dụng khoảng trắng trên các tab". "Tại sao?" "Bởi vì hướng dẫn phong cách của chúng tôi nói với." "Tại sao?" "Tôi không biết; tôi đã không viết nó." "Ha, rõ ràng là bạn sai và tôi đúng, và tôi sẽ để lại mã của mình bằng các tab!" Sau đó, một hook hook-commit đã thay đổi nó, nhưng vẫn vậy - nếu bạn sử dụng kỹ thuật 5 whys, hãy đi cho đến khi bạn nhận được câu trả lời hợp lý, cho đến khi bạn khiến người khác thất vọng.
Nic Hartley

111
@QPaysTaxes: Mọi người nên biết lý do tại sao khoảng trắng trên tab (hoặc tab trên khoảng trắng): bởi vì cả hai đều đúng nhưng tính nhất quán là quan trọng hơn nên chỉ cần chọn một, nhất quán và không lãng phí thời gian đạp xe
slebetman

30
Not having untested behaviors in code can be very important. If a piece of code is run e.g. 50 times a second, a one in a million chance will happen approximately every 5.5 hours of runtime. (In your case, the odds seem lower.)-- Gì? Không. Trừ khi bạn đang chạy mô phỏng Monte-Carlo hoặc mã của bạn bao gồm một số yếu tố ngẫu nhiên. Máy tính không chạy phần mềm theo đường cong hình chuông hoặc độ lệch chuẩn trừ khi bạn nói với chúng cụ thể để làm như vậy.
Robert Harvey

10
@RobertHarvey: xem xét một cái gì đó giống như một điều kiện cuộc đua, đó chính xác là một yếu tố ngẫu nhiên. Cũng xem xét một lỗi phụ thuộc dữ liệu trong khi xử lý dữ liệu truyền phát; trong khi dữ liệu có thể không hoàn toàn ngẫu nhiên, nhưng trừ khi nó lặp đi lặp lại nhiều lần, một tổ hợp byte cụ thể có thể xảy ra hết lần này đến lần khác. Một trong một triệu = được kích hoạt bởi sự kết hợp cụ thể gồm 20 bit, một lỗi như thế này sẽ hiển thị ngay lập tức nếu xử lý luồng video; một cái gì đó hiếm khi xảy ra nhưng thường xuyên có thể liên quan đến ví dụ 40 bit.
9000

7
@RobertHarvey: Hoàn toàn có thể! Tôi chỉ muốn chỉ ra rằng có những đoạn mã có thể có cơ hội 1e-6 (không phải 0 và không phải 1) để phá vỡ theo một lời mời cụ thể, đề cập đến «trường hợp tối nghĩa rất khó xảy ra». Mặc dù các lỗi như thế thường không thể nhìn thấy trong các thử nghiệm, nhưng chúng thể nhìn thấy trong sản xuất.
9000

323

Tôi có thể cho bạn một ví dụ về trường hợp góc không bao giờ có thể xảy ra gây ra thảm họa.

Khi Ariane 4 đang được phát triển, các giá trị từ gia tốc kế bên được thu nhỏ để phù hợp với số nguyên có chữ ký 16 bit và bởi vì sản lượng tối đa có thể của gia tốc kế, khi được thu nhỏ, không bao giờ vượt quá 32767 và mức tối thiểu không bao giờ có thể giảm xuống dưới - 32768 đã không có nhu cầu về chi phí kiểm tra phạm vi. Nói chung, tất cả các đầu vào được coi là phạm vi được kiểm tra trước bất kỳ chuyển đổi nào, nhưng trong trường hợp này sẽ cố gắng bắt một trường hợp góc không thể.

Vài năm sau, Ariane 5 đã được phát triển và mã để nhân rộng các gia tốc kế bên được sử dụng lại với thử nghiệm tối thiểu vì nó đã được chứng minh trong sử dụng. Thật không may, tên lửa lớn hơn có thể mong đợi gia tốc bên lớn hơn nên gia tốc kế được nâng cấp và có thể tạo ra các giá trị nổi 64 bit lớn hơn .

Các giá trị lớn hơn này được "bọc" trong mã chuyển đổi, hãy nhớ không kiểm tra phạm vikết quả trong lần khởi chạy đầu tiên vào năm 1996 không tốt. Nó gây tốn kém cho công ty hàng triệu đô la và gây ra sự gián đoạn lớn trong chương trình.

Nhập mô tả hình ảnh ở đây

Điểm mà tôi đang cố gắng đưa ra là bạn không nên bỏ qua các trường hợp thử nghiệm như chưa từng xảy ra, cực kỳ khó xảy ra, v.v .: các tiêu chuẩn mà họ đã mã hóa để kêu gọi kiểm tra phạm vi của tất cả các giá trị đầu vào bên ngoài. Nếu điều đó đã được kiểm tra và xử lý thì thảm họa có thể đã được ngăn chặn.

Lưu ý rằng trong Ariane 4, đây không phải là một lỗi, (vì mọi thứ đều hoạt động tốt với mọi giá trị có thể) - đó là một sự thất bại khi tuân theo các tiêu chuẩn. Khi mã được sử dụng lại trong một kịch bản khác, nó đã thất bại thảm hại, trong khi nếu phạm vi của các giá trị bị cắt, nó có thể đã thất bại một cách duyên dáng và sự tồn tại của một trường hợp thử nghiệm cho điều này có thể đã kích hoạt đánh giá các giá trị. Điều đáng chú ý là, trong khi các lập trình viên và người thử nghiệm đã nhận được một số lời chỉ trích từ các nhà điều tra sau vụ nổ, thì ban lãnh đạo, QA & lãnh đạo đã bị bỏ lại với phần lớn sự đổ lỗi.

Làm rõ

Mặc dù không phải tất cả các phần mềm đều quan trọng về an toàn, cũng không quá ngoạn mục khi nó bị lỗi, ý định của tôi là làm nổi bật rằng các thử nghiệm "không thể" vẫn có thể có giá trị. Đây là trường hợp kịch tính nhất mà tôi biết nhưng robot cũng có thể tạo ra một số kết quả thảm hại.

Cá nhân, tôi sẽ nói rằng một khi ai đó đã đánh dấu một trường hợp góc cho nhóm thử nghiệm, một bài kiểm tra nên được đưa ra để kiểm tra nó. Trưởng nhóm thực hiện hoặc người quản lý dự án có thể quyết định không cố gắng giải quyết bất kỳ thất bại nào được tìm thấy nhưng nên lưu ý rằng có bất kỳ thiếu sót nào tồn tại. Ngoài ra, nếu việc kiểm tra quá phức tạp hoặc tốn kém, để thực hiện, một vấn đề có thể được nêu ra trong bất kỳ trình theo dõi nào đang được sử dụng & / hoặc đăng ký rủi ro để làm rõ rằng đây là trường hợp chưa được kiểm tra - có thể cần phải giải quyết trước khi thay đổi sử dụng hoặc ngăn chặn việc sử dụng không phù hợp.


102
Ôi trời ơi câu trả lời này là nó. OP đang xử lý phần mềm có hậu quả vật lý. Thanh đã được nâng lên. Người đánh giá có lẽ đã không nhận ra "trường hợp cạnh" này cho đến khi họ nhìn lại mã. Và cho đủ thời gian không có gì là một trường hợp cạnh. Bạn không muốn vô tình vung cánh tay robot vào đầu ai đó (không phải tôi biết cánh tay robot có liên quan đến mã này).
Greg Burghardt

11
Greg & Steve, đây là một ví dụ tuyệt vời, nhưng nó là một ví dụ về lỗi . Đó là một lỗi tối nghĩa đơn giản. Nghĩa đen là "một lỗi", chia cho số không. Khi bạn làm việc trên các thuật toán robot, đó là một ý tưởng trung tâm mà bạn nghĩ về các khái niệm vật lý có thể và không thể thực hiện được. . Toàn bộ đội ngũ của họ có vấn đề nghiêm trọng nếu, các anh chàng cao cấp hơn không nhúng vào mô hình đó.
Fattie

11
Tôi nghĩ rằng có những ví dụ trong thế giới thực chứng minh tại sao các trường hợp cạnh nên được bảo hiểm, nhưng đây không phải là một trong số đó. Ví dụ được trích dẫn là một trường hợp sử dụng thư viện sai cho một nhiệm vụ. Mã cho một quả chuối không nên được sử dụng một cách mù quáng trên một quả cam. Đó là lỗi của người đã sử dụng mã chuối trên một quả cam, chứ không phải người viết mã cho một quả cam không thể xử lý một quả chuối. (Tôi đã phải đổi Apple cho Banana theo cách tương tự này do một công ty công nghệ lớn ngoài kia ...)
Xuất xứ

51
@JoeBlow Một lỗi, có, nhưng một lỗi có thể phòng ngừa được , một lỗi có thể bị bắt với các trường hợp kiểm tra bổ sung và / hoặc đánh giá mã. Chúa chỉ biết nếu có một anh chàng ở đó nói rằng "Bạn biết các bạn, tôi nghĩ chúng ta nên xác nhận phạm vi này ..." và những người khác sẽ nói "Đừng lo lắng về điều đó ... điều gì có thể xảy ra với một trường hợp bất khả thi ? " Nếu lỗi không đủ chứng minh rằng logic của chúng ta có nhiều khoảng trống hơn chúng ta muốn, thì tôi không biết phải nói gì ...
code_dredd

30
Điểm mà tôi đang cố gắng đưa ra là bạn không nên bỏ qua các trường hợp thử nghiệm như chưa từng xảy ra, cực kỳ khó xảy ra, v.v., các tiêu chuẩn mà họ đang mã hóa để kêu gọi kiểm tra phạm vi của tất cả các giá trị đầu vào bên ngoài. Nếu điều đó đã được kiểm tra và xử lý thì thảm họa có thể đã được ngăn chặn. Lưu ý rằng trong Ariane 3, đây không phải là lỗi, đó là lỗi không tuân theo các tiêu chuẩn. Khi mã được sử dụng lại trong một kịch bản khác nếu thất bại thảm hại trong khi nếu phạm vi của các giá trị bị cắt bớt, nó có thể đã thất bại một cách duyên dáng.
Steve Barnes

84

Vì nó không được xử lý trước đó, nó nằm ngoài phạm vi cho nỗ lực của bạn. Bạn hoặc đồng nghiệp của bạn có thể hỏi người quản lý của bạn nếu nó xứng đáng với nỗ lực để giải quyết vụ việc này.


19
Tôi nghĩ rằng đây là điểm mấu chốt - mặc dù bao gồm trường hợp bổ sung thực sự là một cải tiến hữu ích và hợp lệ, không cần thiết phải đưa nó vào một PR hiện có vì những lý do khác nhau.
DeadMG

6
Wether hay không nó đã được xử lý trước đó cũng không liên quan IMO, nó chỉ đơn giản là không có trong mô tả nhiệm vụ trước.
Jasper N. Brouwer

6
Để thể hiện tình cảm này, một câu trả lời hay để lấy ý kiến ​​đánh giá có thể là "Tôi sẽ tăng một vé để bao quát điều đó, điểm tốt." Điều đó thừa nhận rằng "việc" cần phải hoàn thành, đồng thời cho phép nó được ưu tiên bên cạnh tất cả các công việc khác cần hoàn thành.
Edd

17
Không thể không đồng ý mạnh mẽ hơn. Thực tế là vấn đề này có thể không được đưa ra trong quá trình triển khai tính năng ban đầu có thể dễ dàng như vậy - vì chúng tôi không biết cụ thể - cho thấy đã rất may mắn cho đến bây giờ vì nó có thể là không cần thiết. Đánh giá mã về một sửa đổi thay đổi cách thuật toán này hoạt động - có khả năng làm tăng khả năng của trường hợp cạnh này - chính xác là thời gian để đưa ra các vấn đề tiềm ẩn. Liệu nó có nằm ngoài phạm vi hay không nên được quyết định sau khi đánh giá chính xác điều đó, không được quyết định ngoài tầm với ít bối cảnh.
Matthew Đọc

6
Đây là lời khuyên khủng khiếp! Since it wasn't handled before, it's out of the scope for your effortsẽ đủ để đánh dấu mọi báo cáo lỗi đơn lẻ wontfix, giả sử thông số kỹ thuật của bạn đủ tệ để bắt đầu với việc nó không xem xét các trường hợp cạnh, nếu bạn thậm chí có một thông số kỹ thuật phù hợp.
Filip Haglund

53

Với các thuật toán phức tạp, rất khó để chứng minh rằng bạn đã nghĩ về mọi trường hợp thử nghiệm sẽ xuất hiện trong thế giới thực. Khi bạn cố tình để một trường hợp thử nghiệm bị hỏng vì nó không xuất hiện trong thế giới thực, bạn có khả năng để các trường hợp thử nghiệm khác bị hỏng mà bạn chưa từng nghĩ đến.

Hiệu ứng khác thường xảy ra là khi bạn xử lý các trường hợp thử nghiệm bổ sung, thuật toán của bạn nhất thiết trở nên tổng quát hơn và do đó bạn tìm cách đơn giản hóa nó và làm cho nó mạnh mẽ hơn cho tất cả các trường hợp thử nghiệm của bạn. Điều này giúp bạn tiết kiệm thời gian trong việc bảo trì và xử lý sự cố.

Ngoài ra, có rất nhiều trường hợp lỗi "điều này không bao giờ xảy ra" xảy ra trong tự nhiên. Đó là bởi vì thuật toán của bạn có thể không thay đổi, nhưng đầu vào của nó có thể thay đổi hàng năm khi không ai nhớ về trường hợp sử dụng chưa được xử lý này. Đó là lý do tại sao các nhà phát triển có kinh nghiệm xử lý những thứ này khi họ còn mới mẻ trong tâm trí. Nó quay lại cắn bạn sau nếu bạn không.


7
Bạn làm cho một điểm rất tốt trong đoạn thứ hai của bạn. Tôi đã trải nghiệm điều đó trước đây, nhưng nói rõ nó rất hữu ích.
Klik

7
Trường hợp thứ ba = lô tô. Tôi làm việc chủ yếu theo mã kế thừa, và có những dự án mà 80% công việc chỉ là sửa chữa những nơi đưa ra giả định. Tôi thích câu trả lời này, nhưng tôi sẽ nói thêm rằng đôi khi không thể giải quyết một trường hợp cạnh không thể như vậy bằng cách thiết lập một thất bại duyên dáng với một thông báo lỗi chính xác và chi tiết, đặc biệt là khi bạn đang trong tình trạng khó khăn.
Jeutnarg

Tôi muốn ghi lại các trường hợp ngoại lệ có nội dung "[Mô tả lỗi] Theo thông số kỹ thuật [phiên bản] được ký bởi [người đã ký tắt] điều này không thể xảy ra."
Peter Wone

Nhưng vì không có trường hợp thử nghiệm nào cho nó trước đó, nên mã (giả sử thông số kỹ thuật là để thay thế trước đó) không cần phải phù hợp với các trường hợp thử nghiệm mới trong lần lặp đó. Và nếu chưa có bài kiểm tra nào cho trường hợp góc đó thì đó phải là một vé / nhiệm vụ mới được thực hiện, không phải là một phản hồi đánh giá mã imo.
kb.

38

Đây không phải là một câu hỏi kỹ thuật mà là một quyết định chiến lược kinh doanh. Bạn nhận thấy sửa chữa được đề xuất là cho một trường hợp rất tối nghĩa sẽ gần như không bao giờ xảy ra. Ở đây nó tạo ra sự khác biệt lớn nếu bạn đang lập trình một món đồ chơi hoặc nếu bạn đang lập trình nói thiết bị y tế hoặc máy bay không người lái có vũ trang. Hậu quả của một sự cố hiếm gặp sẽ rất khác nhau.

Khi thực hiện đánh giá mã, bạn nên áp dụng hiểu biết cơ bản về các ưu tiên kinh doanh khi quyết định đầu tư bao nhiêu để xử lý các trường hợp hiếm. Nếu bạn không đồng ý với đồng nghiệp của bạn trong việc giải thích các ưu tiên của doanh nghiệp, bạn có thể muốn thảo luận với ai đó về khía cạnh kinh doanh.


5
Chính xác, hãy hỏi người khác nếu nó có giá trị. Ít nhất tôi đã viết trường hợp thử nghiệm và sau đó đánh dấu nó là "bỏ qua" với các bình luận nói rằng ai đó đã đưa ra quyết định rằng nó không đáng để thực hiện. CYA
Sean McS Something 6/2/2017

2
Ya, bất cứ khi nào một cái gì đó lớn, ngoài phạm vi nhưng không khẩn cấp xuất hiện trong đánh giá mã, chúng tôi có xu hướng tạo ra một vấn đề cho nó trong trình theo dõi của chúng tôi và sau đó ưu tiên nó cùng với phần còn lại của những thứ khác mà chúng tôi cần phải hoàn thành. Đôi khi, điều này có nghĩa là nhiệm vụ bị trục xuất đến cuối danh sách ưu tiên, nhưng nếu đó là trường hợp thì nó thực sự không quan trọng.
Tacroy

1
"Đó không phải là tỷ lệ cược, đó là cổ phần!"
dùng1068

2
Đây là câu trả lời tốt nhất. Câu hỏi thực sự là về việc thiết lập các ưu tiên và quản lý rủi ro.
wrschneider

Tôi đồng ý với quyết định kinh doanh này. Tạo một vé với ước tính thời gian cần thiết để sửa nó, gán nó cho sếp của bạn (bất kỳ ai trong chuỗi lệnh chịu trách nhiệm phân bổ thời gian của bạn) và yêu cầu nó được ưu tiên chỉ định cho nó (hoặc bị từ chối, như trường hợp có thể)
Matija Nalis

21

Đánh giá mã không hoàn toàn là về tính chính xác của mã. Trong thực tế, đó là khá xa danh sách lợi ích, đằng sau chia sẻ kiến ​​thức và là một quá trình chậm nhưng ổn định để tạo ra một sự đồng thuận thiết kế / phong cách nhóm.

Như bạn đang trải nghiệm, những gì được coi là "chính xác" thường gây tranh cãi và mọi người đều có quan điểm riêng về những gì đó là. Theo kinh nghiệm của tôi, thời gian và sự chú ý hạn chế cũng có thể khiến các đánh giá mã không nhất quán - vấn đề tương tự có thể được chọn hay không tùy thuộc vào các nhà phát triển khác nhau và tại các thời điểm khác nhau của cùng một nhà phát triển. Những người đánh giá trong suy nghĩ về "điều gì sẽ cải thiện mã này?" thường sẽ đề xuất những thay đổi mà họ sẽ không thêm vào nỗ lực của mình một cách tự nhiên.

Là một lập trình viên có kinh nghiệm (hơn 15 năm là nhà phát triển), tôi thường được đánh giá bởi các lập trình viên có ít năm kinh nghiệm hơn tôi. Đôi khi họ yêu cầu tôi thay đổi mà tôi không đồng ý hoặc nghĩ không quan trọng. Tuy nhiên, tôi vẫn thực hiện những thay đổi đó. Tôi chỉ chiến đấu với những thay đổi khi tôi cảm thấy kết quả cuối cùng sẽ gây ra điểm yếu trong sản phẩm, trong đó chi phí thời gian rất cao hoặc khi quan điểm "chính xác" có thể được đưa ra một cách khách quan (ví dụ: thay đổi được yêu cầu thắng ' T làm việc theo ngôn ngữ chúng tôi đang sử dụng hoặc điểm chuẩn cho thấy cải thiện hiệu suất được yêu cầu không phải là một).

Vì vậy, tôi đề nghị chọn các trận đánh của bạn một cách cẩn thận. Hai ngày mã hóa một trường hợp thử nghiệm mà bạn nghĩ là không cần thiết có lẽ không đáng để bỏ thời gian / công sức để chiến đấu. Nếu bạn đang sử dụng một công cụ đánh giá, chẳng hạn như yêu cầu kéo GitHub, thì có thể nhận xét ở đó về chi phí / lợi ích mà bạn nhận thấy, để ghi nhận sự phản đối của bạn, nhưng đồng ý vẫn thực hiện công việc. Điều này được coi là một cú đẩy nhẹ nhàng, vì vậy người đánh giá biết rằng họ đang vượt qua một ranh giới, và quan trọng hơn là bao gồm cả lý do của bạn để những trường hợp như thế này có thể được leo thang nếu họ rơi vào bế tắc. Bạn muốn tránh những bất đồng bằng văn bản leo thang - bạn không muốn tranh luận về phong cách diễn đàn Internet về sự khác biệt trong công việc - vì vậy có thể hữu ích khi nói về vấn đề này trước tiên và ghi lại một bản tóm tắt công bằng về kết quả của cuộc thảo luận,thảo luận thân thiện sẽ quyết định cho bạn cả hai dù sao).

Sau sự kiện, đây là một chủ đề tốt cho đánh giá nước rút hoặc các cuộc họp lập kế hoạch nhóm phát triển, v.v. Hãy trình bày nó một cách trung lập như bạn có thể ví dụ: "Trong đánh giá mã, Nhà phát triển A đã xác định trường hợp thử nghiệm bổ sung này, phải mất thêm hai ngày để viết nhóm nghĩ rằng bảo hiểm bổ sung đã được chứng minh bằng chi phí này? " - phương pháp này hoạt động tốt hơn nhiều nếu bạn thực sự làm việc, vì nó cho bạn thấy ở một khía cạnh tích cực; bạn đã hoàn thành công việc và chỉ muốn thăm dò ý kiến ​​của nhóm vì sợ rủi ro so với phát triển tính năng.


2
"Trình bày nó một cách trung lập như bạn có thể" .. khá. Tôi sẽ đi xa hơn NeilS và đề nghị, như họ nói, bạn cần trao đổi "sự tức giận để nói chuyện". Ngay lập tức và công khai nói (ví dụ, trong ví dụ cụ thể có sẵn), "Steve, trường hợp góc của bạn là phi vật lý với thiết kế cơ học hiện tại, bạn không nghĩ là anh chàng sao? Trước tiên hãy quyết định xem nó có phi vật lý không, và ngay cả khi đó là liệu có đáng để dành hai ngày không. "
Fattie

1
"Nếu bạn đang sử dụng một công cụ đánh giá" là một quan sát chính. IME, các công cụ này là đủ để lưu giữ hồ sơ đánh giá, nhưng công việc thực sự được thực hiện trực tiếp với các cuộc thảo luận. Đó là cách hiệu quả nhất cho luồng thông tin hai chiều. Nếu bạn không đồng ý với đánh giá, hãy có sự bất đồng đó một cách xây dựng và chỉ sau đó nhập kết quả đã thống nhất vào công cụ.
Toby Speight

@TobySpeight: Tôi đồng ý và cố gắng kết hợp điều đó vào câu trả lời.
Neil Slater

1
2 giờ là nhiều hơn những gì tôi sẽ không chiến đấu. 2 ngày và tôi sẽ không thể hoàn thành tất cả các nhiệm vụ khác mà tôi đã cam kết thực hiện trong tuần.
Matthew Đọc

15

Tôi khuyên bạn ít nhất nên khẳng định chống lại trường hợp tối nghĩa. Bằng cách đó, không chỉ các nhà phát triển trong tương lai thấy rằng bạn chủ động quyết định chống lại vụ việc, mà với việc xử lý thất bại tốt, điều đó đã được áp dụng, điều này cũng sẽ gây ra những bất ngờ.

Và sau đó, làm một trường hợp thử nghiệm khẳng định thất bại đó. Bằng cách này, hành vi được ghi lại tốt hơn và sẽ hiển thị trong các bài kiểm tra đơn vị.

Câu trả lời này rõ ràng cho rằng phán đoán của bạn về việc "cực kỳ khó xảy ra nếu thậm chí có thể" là chính xác và chúng tôi không thể đánh giá điều đó. Nhưng nếu có, và đồng nghiệp của bạn đồng ý, thì một khẳng định rõ ràng chống lại sự kiện này sẽ là một giải pháp thỏa đáng cho cả hai bạn.


Hoàn toàn đồng ý. Nếu có bất kỳ trường hợp nào mà mã của bạn không thể xử lý, hãy kiểm tra đầu vào càng sớm càng tốt và thất bại ở đó. "Chương trình gặp sự cố nếu chúng tôi làm X" luôn tốt hơn "Robot của chúng tôi giết người nếu chúng tôi làm X"
Josef

1
Gợi ý tốt. Mã tốt là mã được chứng minh là không bao giờ thất bại, nhưng nếu nó không thể giải thích được thì không thành công, thất bại theo cách được xác định rõ có thể sửa chữa. Mã không thể sai nhưng nếu nó bị lỗi hóa ra là không thể lấy hoặc sửa chữa, thì không phải là quá tuyệt vời ...
leftaroundabout 6/2/2017

Điều này, tôi sẽ đăng chính xác điều tương tự. Người đánh giá đang chỉ ra một thất bại có thể xảy ra, làm thế nào để xử lý nó là một câu hỏi khác nhau.
SH-

2
Ồ, không, đừng khẳng định mã của bạn. Nếu khẳng định không được biên dịch, sẽ không ai nhìn thấy nó. Nếu xác nhận được biên dịch trong đó robot của bạn sẽ sụp đổ. Tôi đã thấy nhiều hơn một trường hợp trong đó một khẳng định cho "điều gì đó không bao giờ có thể xảy ra" trong mã sản xuất đã kích hoạt và đưa xuống không chỉ hệ thống đó mà tất cả mọi thứ phụ thuộc vào nó.
Tom Tanner

@TomTanner "với cách xử lý thất bại tốt, điều đó đã có sẵn". Tôi giả định rằng mã đã có thể xử lý các xác nhận thất bại ở đây. Điều này có thể không phải là quá nhiều, vì các chiến lược thất bại an toàn nên là một phần của bất kỳ hệ thống vật lý nào.
WorldSEnder

13

Vì bạn dường như là người mới ở đó, nên chỉ có một điều bạn có thể làm - kiểm tra với trưởng nhóm (hoặc trưởng dự án). 13 giờ là một quyết định kinh doanh; đối với một số công ty / đội, rất nhiều; đối với một số người, không có gì. Đó không phải là quyết định của bạn, chưa.

Nếu khách hàng tiềm năng nói "bao gồm trường hợp đó", tốt thôi; nếu anh ta nói "nah, vít nó", tốt thôi - quyết định của anh ta, trách nhiệm của anh ta.

Đối với đánh giá mã nói chung, thư giãn về nó. Có một nhiệm vụ trả lại cho bạn một hoặc hai lần là hoàn toàn bình thường.


7

Một điều tôi không nghĩ rằng tôi đã thấy được giải quyết bằng hiện vật, mặc dù đó là loại được đưa ra trong câu trả lời @SteveBarnes:

Những hậu quả của một thất bại là gì?

Trong một số lĩnh vực, lỗi là một lỗi trên trang web. Một màn hình xanh PC và khởi động lại.

Trong các lĩnh vực khác, đó là sự sống hay cái chết - xe tự lái bị khóa. Nhà sản xuất tốc độ y tế ngừng làm việc. Hoặc trong câu trả lời của Steve: công cụ nổ tung dẫn đến mất hàng triệu đô la.

Có một thế giới khác biệt trong những thái cực đó.

Có hay không 13 giờ để trang trải một "thất bại" có đáng hay không cuối cùng không nên tùy thuộc vào bạn. Nó nên được quản lý và chủ sở hữu. Họ nên có một cảm giác cho bức tranh lớn hơn.

Bạn sẽ có thể đưa ra một dự đoán tốt về những gì sẽ có giá trị nó. Robot của bạn chỉ đơn giản là chậm lại hoặc dừng lại? Hiệu suất xuống cấp? Hay một thất bại của robot sẽ gây ra thiệt hại tiền tệ? Mất mạng?

Câu trả lời cho câu hỏi THAT nên đưa ra câu trả lời cho "nó có đáng giá 13 giờ thời gian của các công ty không". Thông báo: Tôi đã nói thời gian của công ty. Họ trả các hóa đơn và cuối cùng quyết định những gì xứng đáng. Quản lý của bạn nên có tiếng nói cuối cùng.


1
Ngoài ra, những hậu quả trách nhiệm của một khiếm khuyết đã biết không được sửa chữa, ngay cả khi tối nghĩa?
chux

5

Có thể nói chuyện với người chịu trách nhiệm ưu tiên công việc? Trong khởi nghiệp có thể là CTO hoặc chủ sở hữu sản phẩm. Anh ta có thể giúp tìm xem nếu công việc bổ sung này là cần thiết và tại sao. Ngoài ra, bạn có thể mang lại những lo lắng của bạn trong quá trình đứng lên hàng ngày (nếu bạn có chúng).

Nếu không có trách nhiệm rõ ràng (ví dụ chủ sở hữu sản phẩm) đối với công việc lập kế hoạch, hãy cố gắng nói chuyện với mọi người xung quanh. Sau đó, nó có thể trở thành một vấn đề mà mọi người đang đẩy sản phẩm sang hướng ngược lại.


5

Cách tốt nhất để xử lý sự bất đồng là như nhau, bất kể bạn là nhà phát triển cơ sở hay nhà phát triển cấp cao hay thậm chí là CEO.

Hành động như Columbo .

Nếu bạn chưa bao giờ xem bất kỳ Columbo nào, thì đó là một chương trình khá tuyệt vời. Columbo là nhân vật rất vô duyên này - hầu hết mọi người nghĩ rằng anh ta hơi điên rồ và không đáng lo ngại. Nhưng bằng cách xuất hiện khiêm tốn, và chỉ yêu cầu mọi người giải thích ông đã có thể để có được người đàn ông của mình.

Tôi nghĩ nó cũng liên quan đến phương pháp Socrates .


Nói chung, bạn muốn đặt câu hỏi cho chính mình và những người khác để đảm bảo rằng bạn đang lựa chọn đúng. Không phải từ một vị trí, "Tôi đúng, bạn sai", mà từ một vị trí khám phá trung thực. Hoặc ít nhất là tốt nhất có thể.

Trong trường hợp của bạn, bạn có hai ý tưởng ở đây, nhưng về cơ bản chúng có cùng một mục tiêu: làm cho mã tốt hơn.

Bạn có ấn tượng rằng việc lướt qua phạm vi bảo hiểm mã cho trường hợp có khả năng không thể xảy ra (không thể?) Có lợi cho việc phát triển các tính năng khác là cách tốt nhất để làm điều đó.

Đồng nghiệp của bạn có ấn tượng rằng cẩn thận hơn về các trường hợp góc là có giá trị hơn.

Họ thấy gì mà bạn không thấy? Bạn thấy gì mà họ không thấy? Là một nhà phát triển cơ sở, bạn thực sự đang ở một vị trí tuyệt vời bởi vì bạn tự nhiên nên đặt câu hỏi. Trong một câu trả lời khác, ai đó đề cập đến khả năng đáng ngạc nhiên của một trường hợp góc là như thế nào. Vì vậy, bạn có thể bắt đầu với "Giúp tôi hiểu - Tôi có ấn tượng rằng X, Y và Z - tôi đang thiếu gì thanh swizzle thực sự tô điểm cho bàn chải ANZA? "

Khi bạn đặt câu hỏi về các giả định của bạn và phát hiện của bạn, bạn sẽ tìm hiểu kỹ, phát hiện ra những thành kiến ​​và cuối cùng tìm ra hướng hành động chính xác là gì.

Bắt đầu với giả định rằng mọi người trong nhóm của bạn hoàn toàn hợp lý và họ có lợi ích tốt nhất của nhóm và sản phẩm trong tâm trí, giống như bạn. Nếu họ đang làm điều gì đó không có ý nghĩa, thì bạn cần tìm ra những gì bạn không biết rằng họ làm hoặc những gì bạn biết rằng họ không làm.


3

13 giờ không phải là một vấn đề lớn, tôi chỉ cần làm điều đó. Hãy nhớ rằng bạn đang được trả tiền cho nó. Chỉ cần đánh phấn nó là "bảo mật công việc". Ngoài ra, tốt nhất là giữ nghiệp tốt trong đội. Bây giờ nếu đó là thứ gì đó khiến bạn mất một tuần hoặc hơn, thì bạn có thể liên quan đến người quản lý của mình và hỏi anh ta nếu đó là cách sử dụng tốt nhất thời gian của bạn, đặc biệt là nếu bạn không đồng ý với nó.

Tuy nhiên, bạn có vẻ như bạn cần đòn bẩy trong nhóm của bạn. Đây là cách bạn có được đòn bẩy: yêu cầu sự tha thứ đừng xin phép. Thêm nội dung vào chương trình khi bạn thấy phù hợp (trong phạm vi hoạt động, tức là đảm bảo rằng nó hoàn toàn giải quyết được vấn đề mà sếp muốn ..), và nói với người quản lý hoặc đồng nghiệp của bạn sau khi thực tế. Đừng hỏi họ: "Có ổn không nếu tôi thêm tính năng X". Thay vào đó, chỉ cần thêm các tính năng mà cá nhân bạn muốn trong chương trình. Nếu họ cảm thấy khó chịu với một tính năng mới hoặc không đồng ý, hãy gỡ bỏ nó. Nếu họ thích nó, hãy giữ nó.

Ngoài ra, bất cứ khi nào họ yêu cầu bạn làm điều gì đó, hãy đi "thêm một dặm" ​​và thêm rất nhiều điều họ quên đề cập đến hoặc những điều sẽ hoạt động tốt hơn những gì họ nói. Nhưng đừng hỏi họ nếu "đi" thêm một dặm nữa. Chỉ cần làm điều đó và tình cờ nói với họ về nó sau khi nó được thực hiện. Những gì bạn đang làm là đào tạo họ ..

Điều gì sẽ xảy ra là người quản lý của bạn sẽ coi bạn là "người đi đường" và sẽ bắt đầu đặt niềm tin vào bạn, và đồng nghiệp của bạn sẽ bắt đầu coi bạn là người dẫn đầu bc bạn bắt đầu sở hữu chương trình. Và sau đó khi những điều như những gì bạn đề cập sẽ xảy ra trong tương lai, bạn sẽ nói nhiều hơn vì về cơ bản bạn là ngôi sao của đội và đồng đội sẽ lùi lại nếu bạn không đồng ý với họ.


8
Mặc dù tôi là tất cả đối với các lập trình viên là người chủ động và không chỉ đơn thuần là "nhận đơn đặt hàng từ trên cao", cách bạn thể hiện điều này là vô trách nhiệm và phi đạo đức. Về cơ bản, OP nói rằng OP nên dành thời gian và tiền của nhà tuyển dụng để không làm việc với các tính năng được yêu cầu mà thay vào đó làm việc trên các tính năng mà họ "muốn cá nhân", sau đó dành thời gian và tiền của nhà tuyển dụng để loại bỏ các tính năng đó. Điều này thậm chí không phải là yếu tố trong các lỗi tiềm ẩn được thêm vào hoặc thời gian của nhà phát triển khác để xem xét mã / duy trì điều này. Tôi sẽ sa thải một nhà phát triển với thái độ mà bạn mô tả, đặc biệt là một thiếu niên.
Derek Elkins

1
Vâng, bạn đúng theo một cách nào đó. Đặc biệt là nếu kỹ sư tự đi mà không có bất kỳ sự nhạy cảm nào với tầm nhìn của khách hàng. Nhưng đừng phá hoại những gì tôi đã nói hoàn toàn-- Tôi chỉ nói là đi "thêm một dặm". Vì vậy, điều đó có nghĩa là bạn lấy những gì ông chủ của bạn nói và bạn mở rộng về nó. Và trong phần mềm, đó là sự khác biệt giữa phần mềm trông giống như thứ rác rưởi và phần mềm trông giống như nó được chế tạo bởi một chuyên gia. Tôi biết nhiều nhà phát triển thực hiện "chính xác những gì họ đã nói" ngay cả khi những gì họ nói là rác hoàn chỉnh. Những nhà phát triển không bao giờ lên tới bất cứ thứ gì.

2
Có những cách có trách nhiệm để làm những gì bạn mô tả. Nhiều lần yêu cầu để lại rất nhiều chỗ và sử dụng phán đoán của bạn ở đó để tạo ra một kết quả bóng bẩy hơn (cân bằng với nỗ lực, bao gồm cả nỗ lực bảo trì, để đạt được nó) là một điều tốt. Chủ động chỉ ra và sửa lỗi thường là tốt. Dành thời gian của riêng bạn để tạo nguyên mẫu một tính năng mà bạn nghĩ là lợi ích của công ty và trình bày nó cho nhóm để đưa vào khả năng cũng tốt. "Mong muốn cá nhân" của bạn là không liên quan, trọng tâm trong khi bạn được trả tiền nên tập trung vào lợi ích của doanh nghiệp.
Derek Elkins

Xem bình luận thứ hai của tôi, để biết cách tôi trình bày những gì tôi tin rằng ý tưởng bạn đang cố gắng đạt được là. Như tôi đã nói, vấn đề của tôi là nhiều hơn với cách bạn trình bày nó. Các nhà phát triển cần một chút tự hào để biết rằng họ có thể đưa ra quyết định có ý nghĩa, nhưng khiêm tốn để biết rằng họ (thường) không có một bức tranh rộng lớn về các mục tiêu hoặc ưu tiên của doanh nghiệp. Nhiều nhà phát triển cao cấp ít có khả năng đưa ra quyết định tồi và có nhiều khả năng biết mục tiêu của doanh nghiệp là gì và làm thế nào để tiến về phía họ.
Derek Elkins

cũng lưu ý rằng nhận xét của tôi dành cho những người muốn chuyển sang cấp lãnh đạo hoặc cấp tư vấn. Các công ty đặc biệt thuê tôi cho ý kiến ​​của tôi.

3

Xem xét mã phục vụ một số mục đích. Một điều bạn rõ ràng nhận thức được là, " Mã này có phù hợp với mục đích không? " Nói cách khác, nó có đúng về mặt chức năng không; nó đã được kiểm tra đầy đủ chưa; là những phần không rõ ràng nhận xét thích hợp; nó có phù hợp với quy ước của dự án không?

Một phần khác của đánh giá mã là chia sẻ kiến ​​thức về hệ thống. Đây là cơ hội cho cả tác giả và người đánh giá tìm hiểu về mã đã thay đổi và cách nó tương tác với phần còn lại của hệ thống.

Khía cạnh thứ ba là nó có thể đưa ra đánh giá về các vấn đề tồn tại trước khi có bất kỳ thay đổi nào được thực hiện. Rất thường xuyên, khi xem xét các thay đổi của người khác, tôi sẽ phát hiện ra điều gì đó tôi đã bỏ lỡ trong lần lặp lại trước đó (khá thường là điều gì đó của riêng tôi). Một tuyên bố như: "Đây là một cơ hội để làm cho điều này mạnh mẽ hơn nó", không phải là một lời chỉ trích và đừng coi đó là một!

Nhóm hiện tại của tôi coi việc xem xét mã không chỉ là một cổng hoặc rào cản mà mã phải vượt qua trước khi cam kết, mà chủ yếu là cơ hội cho một cuộc thảo luận có cấu trúc về một lĩnh vực chức năng cụ thể. Đó là một trong những dịp hữu ích nhất để chia sẻ thông tin. (Và đó là một lý do tốt để chia sẻ đánh giá xung quanh nhóm, thay vì luôn luôn là cùng một người đánh giá).

Nếu bạn nhận thấy các đánh giá mã là một hoạt động đối đầu, thì đó là một lời tiên tri tự hoàn thành. Thay vào đó, nếu bạn coi chúng là phần hợp tác nhất trong công việc của bạn, chúng sẽ kích thích cải tiến liên tục cho sản phẩm của bạn và cách bạn làm việc cùng nhau. Nó giúp nếu một đánh giá có thể rõ ràng về các ưu tiên tương đối của các đề xuất của nó - chẳng hạn, có một sự khác biệt giữa "Tôi muốn nhận xét hữu ích ở đây" và "Điều này sẽ phá vỡ nếu xcó bao giờ tiêu cực", chẳng hạn.

Đã thực hiện rất nhiều tuyên bố chung ở trên, làm thế nào để áp dụng cho tình huống cụ thể của bạn? Tôi hy vọng giờ đây rõ ràng rằng lời khuyên của tôi là trả lời đánh giá bằng các câu hỏi mở và đàm phán cách tiếp cận nào có giá trị nhất. Đối với trường hợp ví dụ của bạn khi đề xuất một bài kiểm tra bổ sung, sau đó đại loại như: "Có, chúng tôi có thể kiểm tra cho điều đó; tôi ước tính sẽ mất <thời gian> để thực hiện. Bạn có nghĩ rằng lợi ích đó đáng giá không? Có thể làm gì để đảm bảo bài kiểm tra không cần thiết? "


Một điều làm tôi ngạc nhiên khi tôi đọc câu hỏi của bạn: nếu phải mất hai ngày để viết một trường hợp thử nghiệm mới, thì thử nghiệm mới của bạn là một kịch bản rất khác với các thử nghiệm hiện tại của bạn (trong trường hợp đó có thể có rất nhiều giá trị) hoặc bạn đã xác định nhu cầu sử dụng lại mã được cải thiện trong bộ kiểm tra.


Cuối cùng, như một nhận xét chung về giá trị của các đánh giá mã (và như một bản tóm tắt sâu sắc về những gì tôi đã nói ở trên), tôi thích tuyên bố này, trong Quy trình không duy trì quy mô của Daniel Vetter :

Ít nhất là đối với tôi, đánh giá không chỉ là về việc đảm bảo chất lượng mã tốt, mà còn về việc phổ biến kiến ​​thức và nâng cao hiểu biết. Lúc đầu, có thể có một người, tác giả (và đó không phải là người được cho), hiểu mã. Sau khi xem xét tốt, nên có ít nhất hai người hiểu rõ về nó, bao gồm cả các trường hợp góc.


3

Mã có thể LUÔN tốt hơn.

Nếu bạn đang xem xét mã và bạn không thấy bất cứ điều gì có thể tốt hơn hoặc kiểm tra đơn vị có thể gặp lỗi, thì đó không phải là mã hoàn hảo, mà là người đánh giá không thực hiện công việc của họ. Cho dù bạn chọn đề cập đến sự cải thiện là một lựa chọn cá nhân. Nhưng hầu như bất cứ khi nào nhóm của bạn thực hiện đánh giá mã, sẽ có những điều mà ai đó nhận thấy có thể tốt hơn hoặc mọi người có thể chỉ lãng phí thời gian của họ.

Điều đó nói rằng, cho dù bạn hành động trên các ý kiến ​​hay không là tùy thuộc vào nhóm của bạn. Nếu các thay đổi của bạn khắc phục sự cố hoặc thêm đủ giá trị mà không thay đổi rằng nhóm của bạn chấp nhận chúng, sau đó hợp nhất chúng và đăng nhập nhận xét của chúng vào hồ sơ tồn đọng để ai đó giải quyết sau. Nếu nhóm tìm thấy các thay đổi của bạn thêm rủi ro hoặc phức tạp hơn giá trị thì bạn phải giải quyết các vấn đề tương ứng.

Chỉ cần nhớ rằng bất kỳnào cũng có ít nhất một trường hợp cạnh có thể được kiểm tra và có thể sử dụng ít nhất một lần tái cấu trúc. Đây là lý do tại sao các đánh giá mã được thực hiện tốt nhất dưới dạng một nhóm với tất cả mọi người nhìn vào cùng một mã cùng một lúc. Vì vậy, cuối cùng mọi người có thể đi đến thống nhất về việc liệu mã được xem xét có được chấp nhận hay không (và đúng như vậy) và thêm đủ giá trị để hợp nhất vào cơ sở cộng đồng hoặc nếu một số điều nhất định phải được thực hiện trước khi có đủ giá trị để hợp nhất .

Vì bạn đang hỏi câu hỏi này, tôi cho rằng bạn không thực sự thực hiện "đánh giá mã", mà thay vào đó, tạo một yêu cầu kéo hoặc cơ chế đệ trình khác để người khác nhận xét theo cách không xác định. Vì vậy, bây giờ bạn đang ở trong một vấn đề quản lý và một định nghĩa được thực hiện. Tôi đoán rằng quản lý của bạn thiếu quyết đoán và không thực sự hiểu quy trình và mục đích của đánh giá mã và có khả năng không có "định nghĩa hoàn thành" (DOD). Bởi vì nếu họ đã làm DOD của bạn sẽ trả lời rõ ràng câu hỏi này và bạn sẽ không phải đến đây và hỏi.

Làm thế nào để bạn sửa chữa nó? Vâng, yêu cầu người quản lý của bạn cung cấp cho bạn một DOD và cho bạn biết nếu bạn phải luôn luôn thực hiện tất cả các ý kiến. Nếu người trong câu hỏi là người quản lý của bạn thì câu trả lời là hiển nhiên.


3

Câu hỏi này không phải là về những ưu điểm của lập trình phòng thủ, sự nguy hiểm của các trường hợp góc hoặc rủi ro thảm khốc của lỗi trong các sản phẩm vật lý. Trong thực tế, nó thậm chí không thực sự về công nghệ phần mềm .

Điều thực sự là về cách một học viên cơ sở xử lý một chỉ dẫn từ một học viên cao cấp khi học sinh không thể đồng ý hoặc đánh giá cao nó.

Có hai điều bạn cần đánh giá cao khi trở thành một nhà phát triển cơ sở. Thứ nhất, điều đó có nghĩa là trong khi có thể bạn đúng và anh ta sai, thì đó là - trên sự cân bằng của xác suất - không có khả năng. Nếu đồng nghiệp của bạn đưa ra đề nghị rằng bạn không thể thấy giá trị của nó, bạn cần nghiêm túc giải trí khả năng bạn không đủ kinh nghiệm để hiểu nó. Tôi không có ý nghĩa từ bài viết này.

Điều thứ hai để đánh giá cao là đối tác cao cấp của bạn được gọi là vì anh ta có trách nhiệm hơn. Nếu một thiếu niên phá vỡ một cái gì đó quan trọng, họ sẽ không gặp rắc rối nếu họ làm theo hướng dẫn. Tuy nhiên, nếu một người cao cấp cho phép họ phá vỡ nó - bằng cách không nêu ra các vấn đề trong đánh giá mã, chẳng hạn - họ hoàn toàn có thể gặp nhiều rắc rối.

Cuối cùng, đó là một yêu cầu ngầm của công việc của bạn mà bạn tuân thủ các hướng dẫn từ những người mà doanh nghiệp tin tưởng để lãnh đạo các dự án của họ. Bạn thường không thể trì hoãn với người cao niên khi có lý do chính đáng để đánh giá cao kinh nghiệm của họ? Bạn có ý định làm theo không có hướng dẫn bạn có thể hiểu? Bạn có nghĩ rằng thế giới nên dừng lại cho đến khi bạn bị thuyết phục? Những giá trị này không tương thích với làm việc trong một nhóm.

Một điểm cuối cùng. Hãy nghĩ lại những dự án bạn đã viết sáu tháng trước. Hãy nghĩ về các dự án bạn đã viết tại trường đại học. Xem bây giờ chúng xấu như thế nào - tất cả các lỗi và thiết kế lộn ngược, các điểm mù và trừu tượng sai lầm? Điều gì sẽ xảy ra nếu tôi nói với bạn rằng trong sáu tháng nữa, bạn sẽ tính những sai sót tương tự trong công việc bạn đang làm hôm nay? Điều đó có giúp chứng minh có bao nhiêu điểm mù trong cách tiếp cận hiện tại của bạn không? Bởi vì đó là sự khác biệt mà kinh nghiệm tạo ra.


2

liên tục đưa ra nhận xét cho mã của tôi đề nghị tôi thực hiện nhiều công việc hơn mức cần thiết.

Bạn có thể đưa ra khuyến nghị, nhưng cuối cùng, đó không phải là vai trò của bạn để quyết định những gì cần thiết. Đó là công việc của bạn để thực hiện quản lý hoặc (trong trường hợp này người đánh giá của bạn) quyết định là cần thiết. Nếu bạn không đồng ý với những gì cần thiết quá nhiều hoặc quá mạnh mẽ, bạn có thể sẽ thấy mình bị mất việc. Do đó, đó là một phần của sự chuyên nghiệp của bạn để đạt được điều này và yên tâm với nó.

Anh ấy đã đề nghị tôi xử lý một trường hợp tối nghĩa là điều cực kỳ khó xảy ra

Có những câu trả lời tuyệt vời khác ở đây cho thấy ngay cả những lỗi không (ví dụ: thứ gì đó có thể chứng minh là không bị lỗi bao giờ ) vẫn nên được làm lại đôi khi. (vd Được bảo vệ tốt, không chỉ làm việc trong các tình huống được thử nghiệm trong các điều kiện hiện tại hầu hết thời gian


2

Đề xuất cho người đánh giá mã để tăng tính hữu ích cho việc đánh giá mã của bạn (bạn là OP nên đề xuất thay đổi như vậy):

  • Đánh dấu ý kiến ​​của bạn theo loại. "Quan trọng" / "Phải làm" / "Tùy chọn" / "Đề xuất cải tiến" / "tốt đẹp để có" / "Tôi đang suy nghĩ".

    Nếu điều này có vẻ quá CDO / hậu môn / phức tạp, ít nhất hãy sử dụng 2 cấp độ: "Phải sửa để vượt qua đánh giá và được phép hợp nhất thay đổi của bạn" / "Tất cả các cấp độ khác".

Các đề xuất để xử lý các đề xuất xem xét mã có vẻ ít quan trọng hơn để thực hiện:

  • Tạo một vé mở trong hệ thống bán vé của bạn (nhóm của bạn sử dụng một, hy vọng?), Theo dõi đề xuất

  • Đặt vé # làm nhận xét phản hồi cho mục đánh giá mã nếu quy trình của bạn cho phép phản hồi cho các nhận xét như Fisheye hoặc email đánh giá.

  • Hãy liên hệ với người đánh giá và hỏi rõ ràng xem mục đó có thuộc loại "phải sửa hay không được sáp nhập / phát hành" hay không.

    • Nếu câu trả lời là "Có", nhưng bạn không đồng ý, hãy để người chịu trách nhiệm quản lý dự án (PM, người quản lý của bạn, v.v.) đưa ra quyết định - trình bày sự bất đồng một cách đầy đủ và trung thực. Đây không phải là về việc bạn "đúng" mà là về những gì tốt hơn cho dự án, vì vậy công việc của PM / manager.

Bây giờ, coi vé đó như bất kỳ yêu cầu phát triển nào khác.

  1. Nếu nó quyết định khẩn cấp sau khi leo thang, hãy coi nó như bất kỳ yêu cầu dev khẩn cấp nào. Hủy bỏ công việc khác và làm việc này.

  2. Mặt khác, làm việc theo mức độ ưu tiên đã được chỉ định và ROI của nó (có thể khác nhau dựa trên ngành nghề kinh doanh của bạn như được giải thích trong các câu trả lời khác).


2

Bạn không nên leo thang này để quản lý.

Trong hầu hết các công ty, anh chàng quản lý sẽ luôn chọn không viết bài kiểm tra thêm đó, để không mất thời gian cải thiện chất lượng mã, để không mất thời gian tái cấu trúc.

Trong rất nhiều trường hợp, chất lượng mã phụ thuộc vào các quy tắc bất thành văn trong nhóm phát triển và vào nỗ lực bổ sung mà các lập trình viên đưa vào.

Bạn là một nhà phát triển cơ sở và đây là đánh giá mã đầu tiên của bạn . Bạn phải chấp nhận lời khuyên và thực hiện công việc. Bạn chỉ có thể cải thiện quy trình làm việc và các quy tắc trong nhóm của mình nếu trước tiên bạn biết và tôn trọng họ trong một thời gian để bạn có thể hiểu tại sao họ lại ở đó. Nếu không, bạn sẽ là người mới không tôn trọng luật lệ và trở thành con sói đơn độc của đội.

Bạn là người mới trong nhóm, hãy làm theo những lời khuyên bạn nhận được một lúc, tìm hiểu lý do họ ở đó, đừng mang theo lời khuyên đầu tiên mà bạn gặp phải trong cuộc họp scrum. Các ưu tiên kinh doanh thực sự sẽ hiển nhiên với bạn sau một thời gian mà không cần hỏi (và có thể không phải là điều mà anh chàng quản lý sẽ nói với bạn trực tiếp).


Thật không may trong khi bạn bắt đầu tốt, đề nghị của bạn kết thúc khá tệ.
Joshua

1

Điều rất quan trọng là bạn tạo mã thỏa mãn yêu cầu quản lý / lãnh đạo của bạn. Bất kỳ chi tiết nào khác sẽ chỉ là "tốt đẹp để có". Nếu bạn là một chuyên gia (đọc rằng: "nếu bạn không phải là nhà phát triển cơ sở") trong lĩnh vực của mình, thì bạn "đủ điều kiện" để giải quyết các vấn đề nhỏ bạn gặp phải trên đường đi mà không hỏi ý kiến ​​lãnh đạo của bạn mỗi lần.

Nếu bạn nghĩ có gì đó không ổn và bạn là chuyên gia tương đối trong lĩnh vực của bạn thì khả năng cao là bạn đúng .

Dưới đây là một số tuyên bố có thể hữu ích cho bạn:

  • Tôi được yêu cầu làm X, người đánh giá mã đề nghị cũng làm Y, tôi nên làm điều đó hay tôi nên chuyển sang những thứ quan trọng hơn?
  • Bạn đang gợi ý Y cho tôi, vì vậy bạn có thể tìm ra ít nhất một trường hợp thử nghiệm sẽ bắt được hành vi đó để tôi có thể kiểm tra không? Tôi tin rằng mã sẽ không được gọi.
  • Có lẽ chúng ta không nên phát triển một dự phòng an toàn cho các trường hợp chưa được khám phá trước? Vì vậy, chúng tôi bắt chúng sớm và sửa chữa trên đường đi để chúng tôi có thể tập trung vào những thứ quan trọng hơn.
  • OK, trong khi tôi đang thực hiện Y, bạn có thể rất tốt khi viết một số trường hợp thử nghiệm cho nó để chúng tôi hoàn thành công việc đó một lần và mãi mãi không?
  • Tôi được yêu cầu làm X, và tôi nghĩ tôi có thể làm Y trừ khi có những ưu tiên khác. Lần tới tại sao bạn không gửi yêu cầu tính năng thay vì đặt nó làm nhận xét đánh giá về mã của tôi ? Ít nhất chúng ta có thể nghe ý kiến ​​thêm từ các thành viên khác trong nhóm về tính năng đó trước khi triển khai nó (nói chung, bất kỳ nội dung quan trọng nào cũng phải là một tính năng và nên được xử lý bởi nhiều người; thông thường việc xem xét mã phải là về việc xem xét các cách tiếp cận mã và giải pháp; là sửa lỗi và tính năng).

Bạn có nghiêm túc nghĩ rằng thái độ của người đánh giá của bạn đang làm hỏng dự án hay bạn nghĩ rằng anh ta đúng lúc nào (ngoại trừ đôi khi anh ta chỉ mắc lỗi nhỏ trong đánh giá và phóng đại điều đó)?

Đối với tôi nghe có vẻ giống như anh ấy viết những thứ không thuộc về đánh giá mã, đó là một thực tiễn tồi vì nó khiến mọi người khó theo dõi nội dung hơn. Tuy nhiên tôi không biết những bình luận đánh giá khác mà anh ấy đưa ra, vì vậy tôi không thể nói bất cứ điều gì về các trường hợp khác.

Nói chung, cố gắng tránh cả hai điều sau đây:

  • Bạn không làm những gì đã được yêu cầu
  • Bạn làm cho người đánh giá của bạn cảm thấy ngớ ngẩn

Nếu anh ấy thực sự xem xét mã của bạn, đó là vì quản lý tin tưởng anh ấy hơn bạn.


-1

Khi có sự bất đồng trong quá trình xem xét mã về phạm vi:

  1. Tài liệu phạm vi thực sự được bao phủ bởi mã. Không ai thích những bất ngờ khó chịu.
  2. Nhận ra phạm vi đó là một quyết định kinh doanh. Phạm vi đã được biết đến khi bạn bắt đầu làm việc trên một tính năng, nhưng nếu không phải là bạn luôn có thể yêu cầu làm rõ sau.

Nếu người xem xét mã là người đưa ra quyết định kinh doanh, anh ta có thể thay đổi phạm vi bất cứ lúc nào, ngay cả khi xem xét mã, nhưng anh ta không làm như vậy trong vai trò là người kiểm tra mã.


điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong 20 câu trả lời trước
gnat

-1

Nếu bạn không thể chứng minh trường hợp cạnh là không thể, bạn phải cho rằng nó là có thể. Nếu có thể, thì cuối cùng nó sẽ xảy ra, và sớm hơn là muộn. Nếu trường hợp cạnh không xảy ra trong thử nghiệm, đó có thể là một gợi ý rằng phạm vi kiểm tra không đầy đủ.

  1. Chấp nhận phản hồi.
  2. Trước khi thực hiện bất kỳ thay đổi nào đối với mã của bạn, hãy cố gắng hết sức để xây dựng một thử nghiệm cho trường hợp cạnh và xem liệu bạn có thể gặp lỗi thử nghiệm hay không (bằng chứng là vấn đề tồn tại). Nếu không thể tạo ra một trường hợp thử nghiệm như vậy và bị lỗi thử nghiệm, thì bạn thể kết luận rằng trường hợp cạnh thực sự là không thể (mặc dù tôi rất do dự khi đưa ra kết luận như vậy).
  3. Nếu bạn có thể bị lỗi kiểm tra, hãy áp dụng thay đổi mã thích hợp để vượt qua bài kiểm tra.

Vì lợi ích của sản phẩm, có lẽ bạn muốn có thể sản xuất vỏ cạnh và gây ra lỗi, để bạn có thể áp dụng sửa chữa và tự tin rằng một vấn đề tiềm ẩn đã được khắc phục.

Toàn bộ quan điểm của mã đánh giá là đặt con mắt bổ sung vào mã. Không ai trong chúng ta miễn nhiễm với những sai lầm hay quá sức. Tất cả đều quá phổ biến để nhìn vào một đoạn mã nhiều lần và không nhận thấy một lỗi rõ ràng, trong đó một đôi mắt mới có thể nhận nó ngay lập tức.

Như bạn đã nói, bạn đã thực hiện một thuật toán mới. Sẽ là không khôn ngoan khi đưa ra kết luận về hành vi của thuật toán mới của bạn dựa trên hành vi hoặc quan sát về người tiền nhiệm của nó.


điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong 21 câu trả lời trước
gnat

-2

Có những người đánh giá mã biết họ đang làm gì và nếu họ nói cần phải thay đổi điều gì đó, thì cần phải thay đổi, và khi họ nói điều gì đó cần phải được kiểm tra, thì nó cần phải được kiểm tra.

Có những người đánh giá mã cần biện minh cho sự tồn tại của chính họ bằng cách tạo ra công việc vô ích cho người khác.

Cái nào là cái để bạn quyết định, và làm thế nào để xử lý loại thứ hai là câu hỏi dành cho nơi làm việc.stackexchange.

Nếu bạn sử dụng scrum, thì câu hỏi đặt ra là liệu công việc của bạn có làm những gì đáng lẽ phải làm hay không (và rõ ràng là như vậy), và bạn có thể xử lý trường hợp cực kỳ hiếm và có thể là không thể tồn đọng, nơi nó sẽ được ưu tiên, và nếu nó được ưu tiên đi vào một cuộc đua nước rút, sau đó người đánh giá của bạn có thể cảm thấy thoải mái để nhặt nó lên và thực hiện công việc 13 giờ. Nếu bạn làm công việc X và vì bạn làm công việc X bạn nhận ra công việc Y cũng cần làm, thì công việc Y không trở thành một phần của công việc X, đó là công việc độc lập của riêng nó.


6
Điều này quá mơ hồ và cảm xúc là lời khuyên hữu ích.
Robert Harvey

Nhận xét về SCRUM là hoàn toàn đúng, juts thực hiện một nhiệm vụ mới trong tồn đọng. Xóa phần bắt đầu thô lỗ của câu trả lời của bạn và bạn sẽ nhận được điểm tích cực.
xmedeko
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.