Nhận xét mã, những lợi thế là gì? [đóng cửa]


12

Trong nhóm của tôi, chúng tôi không thực hiện đánh giá mã chính thức. Chúng ta có xu hướng nghĩ rằng nó đủ với lập trình cặp và xoay cặp thường xuyên.

Chúng ta có nên xem xét việc đánh giá mã chính thức? Điều gì sẽ là lợi thế?


1
Câu hỏi liên quan: programmers.stackexchange.com/questions/15874/... Bạn có thể tìm thấy một số các câu trả lời có thú vị.
Kevin D

Mọi người đang thiếu quan điểm về đánh giá mã ... Không chỉ họ kiểm tra mã cho chính xác, mà họ còn lan truyền đổ lỗi xung quanh nếu một cái gì đó sau đó hóa ra là sai. Với lập trình cặp, bạn hoặc anh chàng khác sẽ hiểu được.
James

Câu trả lời:


8

Chúng tôi đánh giá mã một chút khác nhau (có thể).

Chúng tôi đến với tất cả các lập trình viên cùng nhau (mỗi thứ Sáu) và xem những gì chúng tôi đã làm trong một khoảng thời gian vài tuần. Sau đó, chúng tôi đã chọn những dự án mà chúng tôi muốn xem xét để mỗi dự án được thực hiện / đang thực hiện sẽ có ít nhất một hoặc ít người. Sau đó, chúng tôi sẽ xem xét các thay đổi đã được thực hiện, tìm kiếm các lỗi, cách các dự án khác hoạt động và vv. Sau đó, chúng tôi thảo luận, nói về các lỗi, cách thực hiện (chúng tôi không sửa lỗi và spam mã với FIXME). Tất cả trong tất cả nó thường cho chúng tôi (10 lập trình viên) mất khoảng 2 giờ.

Ưu điểm:

  • Mọi thành viên đều biết những gì xảy ra trong công ty
  • Lỗi được tìm thấy nhanh hơn
  • Nó buộc chúng ta phải viết mã có thể đọc được (mã có thể được đọc mà không cần giải thích hoặc giới thiệu!)
  • Phương pháp tối ưu hóa / thủ thuật / chương trình sản xuất lan truyền nhanh hơn
  • Lập trình viên như một chuyên gia "tiến hóa" nhanh hơn
  • Nó vui

Điều tôi có chống lại lập trình cặp như đã đề cập (chắc chắn đó chỉ là ý kiến ​​cá nhân của tôi) là nhóm làm việc cùng nhau càng lâu - thì càng nhanh.

Tôi hy vọng nó sẽ mang lại một số thực phẩm cho suy nghĩ. Chúc may mắn.


Bạn đang đề cập đến điều gì khi bạn nói "nhóm làm việc cùng nhau càng lâu - thì càng nhanh"? Và đó là một điều xấu như thế nào?
Edgar Gonzalez

Nhóm làm quen với nhau trước đó họ có thể hoàn thành nhiệm vụ nhanh hơn. Bạn không có được điều đó nếu bạn liên tục trộn các cặp.
JackLeo

Ồ, nhưng bạn hiểu rõ hơn về toàn đội, và bạn cũng có kiến ​​thức tổng quát hơn về miền vấn đề, cũng như 3 hoặc 4 ý kiến ​​khác nhau từ tất cả các thành viên trong nhóm chứ không chỉ từ một :)
Edgar Gonzalez

Bạn nhận được cùng trong quá trình đánh giá mã. :) nhiều hơn bạn nhận được ý kiến ​​về mọi trường hợp từ mọi lập trình viên công ty. Chỉ phải chờ vài ngày.
JackLeo

4

Bạn có thể muốn đọc qua cuốn sách miễn phí này:

http://smartbear.com/best-kept-secrets-of-peer-code-review/

Chắc chắn, họ có một sản phẩm để thúc đẩy, nhưng vẫn còn rất nhiều thông tin hữu ích trong đó.

Họ cũng thảo luận về cách lập trình cặp cung cấp một số lợi thế giống nhau, vì vậy nếu bạn lập trình cặp, bạn có thể không cần xem lại mã.


2

Tôi không có nhiều kinh nghiệm trong việc xem xét trong môi trường của bạn. Chúng tôi không thực hiện nhiều chương trình cặp ở đây, chúng tôi thực hiện đánh giá mã để truyền bá kiến ​​thức về phần mềm trong nhóm, có một đôi mắt khác để nhận ra lỗi và có một điểm chính thức để kiểm tra xem phần mềm có tuân theo các nguyên tắc mã hóa của chúng tôi không .

2 điểm đầu tiên được bao phủ khá tốt bởi chương trình cặp, điểm thứ ba phụ thuộc rất nhiều vào cặp và có thể trở nên tốt hơn từ đánh giá mã chính thức.


1

Bạn có nên làm đánh giá mã chính thức?

Chắc chắn rồi

Chỉ là một lưu ý phụ, tôi có rất ít kinh nghiệm về lập trình được ghép nối, nhưng tôi không tin rằng các đánh giá sẽ mâu thuẫn với các phương pháp này.

Tôi muốn giới thiệu hai hình thức đánh giá mã:

Đánh giá mã ngang hàng

Ngay cả khi lập trình được ghép nối có hiệu quả với bạn, sẽ không bao giờ đau lòng khi nhận được một cặp mắt khác về mã. Những lợi ích cho việc này là:

  1. Nó nhận được một đôi mắt mới về mã, một người có thể có kiến ​​thức sâu sắc hơn về các lĩnh vực của cơ sở mã mà bạn (và / hoặc đối tác của bạn) có thể không quen thuộc. Điều này có thể phơi bày các vấn đề gõ cửa.
  2. Nó làm cho bạn (cặp) xác nhận lại giải pháp của bạn trước khi gửi. Vì người đánh giá không biết gì về những gì bạn đã viết, bạn phải giải thích toàn bộ. Điều này có thể phơi bày các trường hợp cạnh mà bạn chưa từng nghĩ đến hoặc logic không hợp lệ.

Đánh giá mã ngang hàng (trong thế giới của tôi) được tiến hành trước mỗi lần gửi. Làm thế nào điều này tiếp tục trong thế giới lập trình được ghép nối, tôi không chắc chắn.

Đánh giá mã nhóm

Những điều này xảy ra ít thường xuyên hơn so với đánh giá mã ngang hàng. Tôi thường sẽ kéo nhóm của tôi (hoặc một phần phụ của nhóm của tôi) trong phòng họp để xem xét mã không chính thức. Nói chung, tôi chọn một số mã được viết bởi một người ngẫu nhiên trong nhóm, tốt nhất là mã được viết từ đầu - mã được tái cấu trúc không phơi bày các vấn đề như mã mới.

Hãy chắc chắn rằng tất cả mọi người đều biết rằng những đánh giá này không có nghĩa là emberass và không được sử dụng để phản ánh hiệu suất. Chúng chỉ đơn thuần để đảm bảo rằng các tiêu chuẩn mã hóa nhóm của bạn được tuân thủ và để giúp mọi người trở thành các kỹ sư tốt hơn và do đó, trở nên hữu ích hơn cho nhóm (và phát triển sự nghiệp hơn nữa, v.v.) - và đảm bảo rằng đây là mục đích thực sự của các đánh giá . Nếu bất cứ ai nghi ngờ bất cứ điều gì khác nhau, những điều này sẽ trở nên sợ hãi và kém năng suất.

Tôi sẽ duyệt mã một cách không chính thức, cho phép bất cứ ai trong phòng chỉ ra các giải pháp khác nhau mà họ có thể có hoặc các lỗi logic mà họ gặp phải. Điều này có nghĩa là nhiều cuộc thảo luận nhóm hơn là một nhà lãnh đạo ngồi đó nói với mọi người cách họ nên viết mã.

Tôi đã thấy rằng việc sử dụng hai phương pháp này làm tăng tốc độ tiến bộ của các kỹ sư cũng như giảm số lượng lỗi đáng kể :)


2
"Nó không bao giờ đau". Vâng, vâng, nó có thể. Đánh giá mã là tốn kém và có thể là một sự lãng phí rất lớn thời gian, sẽ tốt hơn nhiều dành cho việc cung cấp phần mềm làm việc.
Martin Wickman

@Martin trên flipside, đánh giá ngang hàng làm tăng số lượng xe tải của bạn. Có một anh chàng duy nhất biết X làm gì là một sự lãng phí thời gian rất lớn khi bạn cố gắng thay thế.
Frank Shearar

@Frank Có, nhưng chúng tôi đang so sánh các đánh giá chính thức với lập trình cặp và pp hoạt động tốt (imo tốt hơn) với việc giữ số lượng xe tải có thể quản lý được.
Martin Wickman

@Martin: Nếu bạn thành thật tin vào điều đó, thì tôi sẵn sàng đặt cược rằng bạn đã kết thúc các bài đánh giá mã không hiệu quả. Nói chung, tôi đã nghe nói rằng các đánh giá mã là một "sự lãng phí rất lớn thời gian" từ chính những người khăng khăng rằng các thiết kế kỹ thuật không phải là một yêu cầu để phát triển. Sau nhiều năm phát triển trong một môi trường áp lực cao , tôi có thể nói với bạn một cách dứt khoát rằng các đánh giá mã không lãng phí thời gian. Chất lượng mã tăng, số lỗi giảm, chuyển / chia sẻ kiến ​​thức tăng.
Demian Brecht

@Dppy, một lần nữa chúng tôi đang so sánh với pp đó là đánh giá mã, nhưng nó xảy ra liên tục. Điều đó làm cho nó tốt hơn so với đánh giá mã chính thức theo kinh nghiệm của tôi. Đánh giá ngang hàng là cần thiết, nhưng có một số cách để làm chúng.
Martin Wickman

1

Tôi chưa bao giờ thực hiện lập trình cặp trong thực tế (chỉ hy vọng cho nó), vì vậy tôi không thể so sánh trực tiếp hai thực tiễn. Tuy nhiên, tôi có thể kể kinh nghiệm của mình với các đánh giá mã chính thức.

Tôi đã từng dẫn các đánh giá mã chính thức trong một dự án trước đó, về mã kế thừa. Dự án hoàn toàn lộn xộn và ban lãnh đạo hoan nghênh bất kỳ sáng kiến ​​nào với hy vọng đưa trật tự vào hỗn loạn. Lúc đó tôi nghĩ rằng đánh giá mã chính thức là một ý tưởng tốt. Chúng tôi đã tìm thấy các lỗi và chúng tôi đã thấy rằng chất lượng của mã mới được viết tốt hơn đáng kể so với mã cũ. Tôi đã thu thập số liệu thống kê, số lượng lỗi vv để chứng minh điều này.

Chúng tôi đã làm trung bình một phiên mỗi tuần, liên quan đến 3-5 người. Mỗi phiên mất khoảng 3-4 giờ mỗi người (bao gồm cả chuẩn bị) và xem xét 200-300 dòng mã (LỘC) *. Theo tốc độ này, trong khoảng thời gian hơn 6 tháng, chúng tôi đã quản lý để xem xét khoảng 5K LỘC, trong số khoảng 50K.

Nhìn lại, tôi cảm thấy rằng nó rất tốn kém. Với tốc độ này, chúng tôi sẽ mất 5 năm để xem xét toàn bộ cơ sở mã di sản. OTOH có nhiều hơn một phiên một tuần sẽ lấy đi nguồn lực từ sự phát triển. Tất nhiên, đó là tình huống khó xử điển hình với mã kế thừa. Nhưng ngay cả việc xem xét tất cả các mã mới được viết chính thức sẽ mất rất nhiều thời gian, làm chậm sự phát triển đáng kể.

Kết luận của tôi là các đánh giá mã chính thức được thực hiện tốt nhất trên mã mới được viết, tập trung vào các phần quan trọng nhất của mã. Phần còn lại được xử lý tốt hơn theo cách không chính thức hơn, có thể thông qua lập trình cặp. Đây chỉ là ý kiến ​​hiện tại của tôi, có thể thay đổi. Tôi không tự nhận là một chuyên gia đánh giá mã hay bất cứ điều gì.


* Đây là tốc độ bình thường của đánh giá mã chính thức.

Tỷ lệ xem xét mã thông thường là khoảng 150 dòng mã mỗi giờ. Kiểm tra và xem xét hơn vài trăm dòng mã mỗi giờ đối với phần mềm quan trọng (như phần mềm nhúng quan trọng an toàn) có thể quá nhanh để tìm lỗi.

Trích dẫn từ Wikipedia (nhấn mạnh bởi tôi).


1

Các lý do cơ bản đánh giá mã tồn tại là bởi vì các lập trình viên bị cô lập cần phải đáp ứng và thảo luận về mã của họ và kiểm tra xem nó có phù hợp với tiêu chuẩn của họ không.

Bạn không đề cập đến bất kỳ vấn đề chất lượng nào, vì vậy có vẻ như nhóm của bạn đã thực hiện đủ các đánh giá mã thông qua lập trình cặp của họ. Tuyệt vời!

Lập trình cặp được thực hiện chính xác làm cho các đánh giá mã chính thức trở nên thừa. Nhưng hãy thử nó trong vài tuần và xem nó hoạt động như thế nào, nhưng tôi nghi ngờ bạn sẽ không nhận thấy bất kỳ cải tiến nào.

Hãy nhớ rằng đánh giá mã là một quá trình mệt mỏi, tốn kém và không phải là một cái gì đó được xem nhẹ. Nó chủ yếu giới thiệu một bàn giao trong dự án của bạn rất tốn kém và làm chậm mọi thứ . Sẽ tốt hơn nhiều khi đảm bảo mã chính xác ngay từ đầu, thay vì cố gắng tìm các vấn đề sau này.


0

Có lẽ. Mã đánh giá mất thời gian. Chúng chỉ có giá trị nếu thời gian đánh giá được lưu vào một thời điểm khác trong quy trình. Bạn tiết kiệm được bao nhiêu từ đánh giá mã? Bạn đang gặp khó khăn có thể được ngăn chặn bằng cách đánh giá mã?


0

Nếu bạn đang thực hiện lập trình cặp, nhu cầu đánh giá mã giảm đáng kể nhưng bạn chắc chắn sẽ được hưởng lợi từ đánh giá ngang hàng. Để điều này có lợi, nó phải được thực hiện bởi một người có thâm niên và nhiều người có kinh nghiệm hơn các thành viên của cặp.

Những lợi ích là gì? Chà, sẽ tốt hơn nếu bạn xem xét những rủi ro của việc không làm điều đó.

  • Cặp đôi có thể làm điều gì đó sai hoặc có thể làm điều đó theo cách tối ưu
  • Có thể bạn không tuân theo các tiêu chuẩn mã hóa hoặc không ghi lại mã đúng. Một đánh giá ngang hàng thực sự tốt trong việc tìm kiếm những
  • Không ai khác ngoài cặp này hiểu một đoạn mã cụ thể. Vì vậy, điều gì xảy ra nếu cả hai thành viên cặp đã rời đi và mã được ghi lại kém? Những người khác sẽ lãng phí thời gian để cố gắng tìm ra mọi thứ. Có một người thứ ba biết những gì bạn đã làm làm giảm rủi ro.

Tôi thích thú rằng mọi người đã nói rằng xem xét mã là một sự lãng phí thời gian. Vâng, nó cần có thời gian. Có thể nó sẽ không tạo ra bất kỳ thay đổi nào trong mã nhưng điều đó không có nghĩa là nó bị lãng phí. Điều đó giống như nói rằng bạn không cần phải kiểm tra hệ thống chữa cháy thường xuyên vì nó rất lãng phí thời gian.


0

Đối với tôi, ưu điểm chính của đánh giá mã là nó làm cho mọi người viết mã tốt hơn.

Biết rằng mã của bạn sẽ được đọc và xem xét làm cho bạn có ý thức hơn về khả năng đọc và tính "chính xác" của mã của bạn. Khi bạn biết mã đang đi thẳng vào kho lưu trữ và không ai khác sẽ đọc nó trừ khi chúng bị lỗi, bạn có xu hướng để mọi thứ trượt như không bao gồm lại tên trường khi sử dụng thay đổi, để lại các phương thức không sử dụng trong trường hợp chúng có thể được bao thanh toán trở lại, v.v.

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.