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ế?
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ế?
Câu trả lời:
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:
Đ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 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ã.
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.
Bạn có nên làm đánh giá mã chính thức?
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à:
Đá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ể :)
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).
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.
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ã?
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 đó.
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.
Đố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.