Chúng ta có nên thử xem lại tất cả mã của mình không?


18

Hiện tại chúng tôi đang sửa đổi quy trình phát triển và tôi tự hỏi liệu chúng ta có nên cố gắng giữ 100% các cam kết của mình được xem xét ngang hàng hay không.

Kinh nghiệm của bạn về đánh giá mã là gì?

  • Bạn có xu hướng dành "rất nhiều" thời gian cho họ (giả sử 1/2 giờ mỗi ngày), hoặc chỉ lướt qua tối đa 5/10 phút?
  • Bạn có một khoảng thời gian cố định để chi tiêu mỗi ngày / tuần / chạy nước rút / dự án không?
  • Quan trọng nhất là bạn có nghĩ rằng mục tiêu nên dành cho 100% mã được đánh giá ngang hàng hoặc 100% là không cần thiết?

Cố gắng chạm 80% mã với 20% nỗ lực. Đầu tư vào các công cụ tự động tốt nhất mà tiền có thể mua.
Công việc

2
Các công cụ tự động là tuyệt vời, nhưng vô dụng trừ khi bạn có thời gian và tài nguyên để duy trì tất cả các bài kiểm tra cập nhật.
Kieren Johnstone

Câu trả lời:


19

Chúng tôi có một nhiệm vụ 'Xem lại mã' trong mỗi câu chuyện. Một người lý tưởng không tham gia vào việc phát triển câu chuyện đó sẽ xem xét tất cả các thay đổi mã liên quan đến câu chuyện đó. Nó hoạt động tốt.

Nhiều thời gian? Không nhiều lắm, phụ thuộc vào số lượng mã - chúng tôi đang tìm kiếm các lỗi rõ ràng, lỗi chính tả, kiểm tra độ tỉnh táo logic cơ bản, ngoại lệ chưa được phát hiện, v.v.

Đây là một bước chất lượng tìm thấy lỗi, do đó nó có một số giá trị. Phân bổ thời gian có thể không phải là cách tốt nhất để làm điều đó - làm thế nào nếu một cái gì đó khá phức tạp, nó cần được xem xét mã?

Nhân tiện, điều quan trọng là người khác phải xem lại mã ..


3
"Nhân tiện, điều quan trọng là người khác phải xem lại mã ..", câu hỏi có ngụ ý rằng cùng một người viết mã nên xem lại không? Nếu nó làm ở đâu? Tôi muốn sửa nó :)
Simeon

4
Không, không, tôi đã toàn diện và nói rằng nó quan trọng
Kieren Johnstone

5
@Simeon thực sự là một quan niệm sai lầm phổ biến mà chủ sở hữu có thể xem lại mã của riêng họ. Nó làm suy yếu toàn bộ hoạt động
Tom Squires

5
@TomSquires: Chính xác. Khi bạn đã làm việc với một đoạn mã trong một thời gian dài, bạn có thể trở nên "mù quáng" với những sai sót rõ ràng khác trong đó, bởi vì bạn thấy nó là những gì nó được coi là thay vì nó là gì. Những vấn đề này sẽ dễ dàng phát hiện hơn đối với người chưa bao giờ nhìn thấy mã trước đây. Nhà văn có cùng một vấn đề, và giống như những cuốn sách không được phát hành mà không cần đọc lại, mã không nên được phát hành mà không xem xét. Ngoài ra còn có những lợi ích khác khi thực hiện đánh giá mã, ví dụ như việc truyền đạt kiến ​​thức giữa các thành viên trong nhóm của bạn là rất tốt.
hammar

@hammar - tất nhiên là cố gắng tìm ai đó không viết mã, người có thời gian để làm quen với nó đến mức họ có thể xem xét nó một cách hữu ích, là một thách thức
Peter Ajtai

12

Một vấn đề quan trọng hơn là bao nhiêu mã của bạn được bao phủ bởi các đánh giá, là mức độ hiệu quả của các đánh giá. Nếu đánh giá của bạn phát hiện ra một vài hoặc không có vấn đề, thì việc đạt được phạm vi bảo hiểm đầy đủ sẽ là vô ích.

Đầu tiên làm việc để làm cho đánh giá của bạn có hiệu lực hơn, sau đó quyết định về phạm vi bảo hiểm.

Đánh giá nên được thực hiện không chỉ trên mã, mà còn về thiết kế.



Ngoài ra, đánh giá không thay thế cho các bài kiểm tra và công cụ:

  • Nhận xét có thể làm khô mã chạy
  • Đánh giá có thể bao gồm phân tích mã
  • Đánh giá kiểm tra tái sử dụng và khả năng đọc
  • Đánh giá có thể kiểm tra một số khía cạnh của hiệu quả, tuy nhiên, điều này không thay thế việc đo thời gian thực tế và tìm kiếm cổ chai
  • Có các công cụ để phân tích mã tĩnh
  • Có các công cụ để kiểm tra các quy ước mã hóa, đừng lãng phí thời gian xem xét về điều này
  • Kiểm tra đơn vị, hệ thống và tích hợp mã chạy ướt
  • Kiểm tra đơn vị, hệ thống và kiểm tra tích hợp có thể được lặp lại tự động, đánh giá mã thường là một lần
  • Các thử nghiệm đơn vị nên có độ bao phủ mã cao và kiểm tra cả kịch bản thành công chính và điều kiện kết thúc, đánh giá mã chỉ có thể thực hiện một phần việc này
  • Kiểm tra tích hợp kiểm tra khả năng của các đơn vị hoặc hệ thống làm việc cùng nhau, đánh giá mã không thể thay thế điều này
  • Kiểm tra hệ thống chức năng kiểm tra của toàn bộ hệ thống, đánh giá mã không thể thay thế điều này



Hãy thử dành một lượng thời gian đặt trước mỗi tháng (hoặc mỗi lần chạy nước rút) để đánh giá. Chọn mã bạn muốn xem lại tại vị trí dành riêng tiếp theo bằng cách sử dụng phương pháp phỏng đoán, chẳng hạn như:

  • Mã có thể chứa một lỗi không xác định đã được báo cáo
  • Mã gần đây đã có lỗi được xác định trong đó
  • Mã với các vấn đề hiệu suất (cổ chai)
  • Mã được viết bởi các nhà phát triển mới
  • Mã kế thừa được cập nhật gần đây bởi một người mà trước đây không quen thuộc với nó
  • Mã trong khu vực mới
  • Mã hiện tại mà bạn muốn các nhà phát triển mới tìm hiểu về
  • Mã giải quyết các vấn đề phức tạp
  • Mã được xác định là phức tạp bởi các công cụ phân tích

Và hãy nhớ rằng, bạn đang xem xét mã (hoặc thiết kế hoặc kiểm tra) chứ không phải tác giả.



Tôi đề nghị các tài liệu đọc sau đây:

Đánh giá bài tập về nhà chọn lọc
Bí mật tốt nhất về đánh giá mã ngang hàng


5

Nó phụ thuộc.

Nó phụ thuộc vào những gì phần mềm của bạn đang làm:

  • Nếu nó điều khiển máy tạo nhịp tim điện tử hoặc tàu con thoi, thì chắc chắn là có.

  • Nếu nó là một nguyên mẫu vứt đi, thì có lẽ là không.

Nó cũng phụ thuộc vào mức độ bạn có nguồn lực tốt, mức độ kinh nghiệm của các nhà phát triển và những gì bạn đang tìm kiếm trong các bài đánh giá mã. (Hãy nhớ rằng nhà phát triển trung bình đang xem xét mã của người khác có thể sẽ nhận thấy các vấn đề về phong cách và bỏ lỡ các lỗi thuật toán tinh vi ... đặc biệt là việc xem xét mã là một việc vặt.)

Lời khuyên của tôi sẽ là tiết kiệm nỗ lực xem xét mã của bạn cho mã trong đó tính chính xác là rất quan trọng và chi phí cho các lỗi không bị phát hiện là cao.


5

Đầu tiên, bạn cần trả lời câu hỏi này: Tại sao bạn xem lại mã?

Với câu trả lời đó trong tay, bạn có thể tìm ra mã nào cần được xem xét.

Một số đánh giá mã hoàn thành chính xác những gì kiểm tra làm hoặc sẽ làm. Nếu đó là mục tiêu đánh giá của bạn, thì việc tiến gần hơn 100% là một ý tưởng tốt nếu bạn có ít thử nghiệm. Tuy nhiên, việc để các công cụ kiểm tra làm điều này sẽ làm giảm nhu cầu về tất cả các mã được xem xét.

Hầu hết các đánh giá tốt dường như tập trung vào việc chia sẻ kiến ​​thức và tăng khả năng của các nhà phát triển trong đánh giá (có thể là người đã viết mã hoặc những người đánh giá mã). Với điều này là một lý do chính để đánh giá, đảm bảo xem xét 100% mã có thể là quá mức cần thiết.


3

Trong một thế giới hoàn hảo, mọi thứ sẽ được tác giả đọc và xem xét ngang hàng bởi ít nhất một người khác, từ thông số kỹ thuật yêu cầu đến hướng dẫn sử dụng đến các trường hợp thử nghiệm. Nhưng đánh giá, thậm chí kiểm tra bàn đơn giản, mất thời gian và chi phí tiền bạc. Điều này có nghĩa là bạn cần chọn những gì bạn nên xem lại và khi nào bạn nên xem lại.

Tôi khuyên bạn nên ưu tiên mọi thứ để xem xét, chọn cách bạn muốn xem xét chúng và cố gắng xem xét càng nhiều càng tốt với mức độ chi tiết phù hợp. Ưu tiên có thể dựa trên loại cổ vật, chẳng hạn như nói rằng các yêu cầu phải được xem xét, mã thiết kế và sản xuất phải được xem xét và các trường hợp thử nghiệm có thể được xem xét. Trong đó, bạn cũng có thể chỉ định rằng các thành phần có rủi ro cao hoặc giá trị cao nhận được ưu tiên trong đánh giá hoặc có thể là đánh giá chính thức hơn.

Theo thời gian, tất cả quay trở lại mức độ ưu tiên của thành phần. Đã có những lúc tôi dành 10-15 phút để xem xét và những lần khác khi nhiều người đọc mã riêng lẻ sau đó vào phòng để thực hiện quy trình kiểm tra chính thức hơn kéo dài 30-45 phút (tùy thuộc vào quy mô của mô-đun).

Cuối cùng, đó là sự cân bằng giữa thời gian, chi phí, phạm vi và chất lượng. Bạn không thể có tất cả, vì vậy bạn cần tối ưu hóa nơi bạn có thể.


3

Theo đề xuất, nếu bạn có kế hoạch thực hiện bất kỳ đánh giá nào, hãy có một số hướng dẫn được chia sẻ về phạm vi và mục tiêu đánh giá để đảm bảo rằng các đánh giá không gây ra xích mích không cần thiết giữa các thành viên trong nhóm.

Đội ngũ mạch lạc xây dựng các dự án tốt hơn. Mọi người có thể mất các mối quan hệ qua những yêu cầu vô nghĩa hoặc quá hoàn hảo. Luôn luôn có một người sẽ phàn nàn về điều này hoặc điều đó và làm phiền người khác chỉ vì anh ta như thế ...


2

Tôi dành một giờ mỗi ngày để thực hiện đánh giá ngang hàng, nhưng không phải lúc nào cũng yêu cầu. Cơ sở mã của chúng tôi được chia sẻ giữa một vài chục sản phẩm. Chính sách của chúng tôi là một thay đổi nhỏ trong mã duy nhất cho một sản phẩm có thể kiểm tra mà không cần xem xét. Những thay đổi một sản phẩm phức tạp hơn đòi hỏi phải xem xét, nhưng nó có thể không chính thức như gọi một đồng nghiệp đến bàn của bạn để đưa nó một lần nữa. Thay đổi trong mã được chia sẻ yêu cầu đánh giá chính thức hơn, bao gồm các nhà phát triển trên các sản phẩm khác. Tôi nghĩ rằng chính sách của chúng tôi đạt được sự cân bằng khá tốt so với các công ty khác mà tôi đã làm việc.

Tôi dành nhiều thời gian mỗi ngày cho các đánh giá hơn một số đồng nghiệp có vai trò trung tâm ít hơn, nhưng tôi không coi đó là một khoảng thời gian không hợp lý, bởi vì trước chính sách đánh giá tôi có thể dễ dàng lãng phí nhiều thời gian hơn việc theo dõi các lỗi mà nhà phát triển trên một sản phẩm khác được giới thiệu.


Đó có phải là một mức trung bình? Giới hạn một đánh giá phức tạp trong một giờ có vẻ lạ, và nếu không có quá nhiều để xem xét .. tôi không thể thấy một giờ mỗi ngày sẽ khả thi như thế nào?
Kieren Johnstone

Đó không phải là một giới hạn. Tôi đặt thời gian dựa trên thời gian, không phải cách khác. Tôi thường có thể nhận được 2 đánh giá được thực hiện trong một giờ. Nếu mất nhiều thời gian hơn, số lần đăng ký của bạn quá lớn, bạn không nhận được đủ đánh giá thiết kế trước khi sử dụng hoặc các công cụ đánh giá mã của bạn quá cồng kềnh. Mã đánh giá là một kiểm tra, không phải là một thiết kế lại.
Karl Bielefeldt

2

Chúng tôi đã thực hiện 100% đánh giá cho mã. Nó rẻ hơn nhiều so với thử nghiệm, đặc biệt là thử nghiệm bảo hiểm mã 100%. Chúng tôi không dành quá nhiều thời gian cho họ, xem xét hơn một giờ mỗi ngày sẽ trở nên kém hiệu quả hơn. (30 phút không phải là nhiều).

Khi bạn đang tiến hành quá trình, hãy ghi chú lại. Bạn đã tìm thấy gì? QA đã tìm thấy gì sau đó? Khách hàng của bạn đã tìm thấy gì? Tại sao những con bọ đó thoát khỏi bạn?


7
Làm thế nào là xem xét rẻ hơn so với thử nghiệm tự động? Giả sử bạn viết một bài kiểm tra một lần, xem lại một bài kiểm tra một lần và có một bộ kiểm tra ổn định, bạn nên dành ít thời gian và tiền bạc để thực hiện các bài kiểm tra hơn so với việc thực hiện bất kỳ loại đánh giá nào (trong suốt vòng đời của dự án). Ngoài ra, việc nhắm mục tiêu bảo hiểm mã 100% là một sự lãng phí tài nguyên, có thể là lý do cho thời gian / chi phí thử nghiệm lớn hơn. Tôi cũng đặt câu hỏi trong 30 phút đánh giá - chúng tôi có thể xem xét một mô-đun trong 30 phút, nhưng có thời gian chuẩn bị để đọc mã ban đầu, hiểu vai trò của nó trong hệ thống và nhận xét về nó.
Thomas Owens

Khiếu nại của @MSalters không phải là chưa từng nghe thấy, mặc dù tôi cũng nghi ngờ với việc chỉ mất 30 phút .. Tôi chỉ đọc được một nơi mà việc kiểm tra có hiệu quả hơn so với thử nghiệm đơn vị tự động và đó là NASA. Trong trường hợp đó, cuối cùng họ đã bỏ thử nghiệm đơn vị hoàn toàn vì việc kiểm tra mã theo cách thủ công rẻ hơn. Tất nhiên, NASA vẫn có tỷ lệ 12: 1 người thử nghiệm: nhà phát triển, vì vậy họ cũng đang thực hiện rất nhiều thử nghiệm khác ...
Michael

2
@Thomas Owens: kiểm tra đơn vị tìm lỗi đơn giản. Các lỗi đắt tiền là những nơi mà nhiều đơn vị kết hợp theo những cách không ngờ tới. Một loại lỗi là bỏ lỡ trường hợp góc. Một nhà phát triển đã bỏ lỡ một trường hợp sẽ không viết một bài kiểm tra đơn vị cho nó, nhưng một đôi mắt thứ hai sẽ phát hiện ra nó.
MSalters

@MSalters Đó là lý do tại sao bạn viết kiểm thử tích hợp và hệ thống tự động cũng như kiểm tra đơn vị. Thực sự, các thử nghiệm duy nhất có thể cần được thực hiện thủ công là các thử nghiệm chấp nhận. Và bằng cách xem xét các bài kiểm tra khi tạo sẽ giúp đảm bảo rằng các trường hợp quan trọng nhất đã được kiểm tra.
Thomas Owens

2

Có các đánh giá mã thường xuyên chủ yếu để xây dựng đội ngũ và chia sẻ ý tưởng về việc thực hiện. Bạn có thể học được rất nhiều từ đồng nghiệp của mình theo cách này.


Điều này chỉ cho thấy một vài lợi ích. Bạn có nghĩ rằng việc tìm kiếm lỗi là quan trọng? Nếu có, bao nhiêu?
JeffO

Tất nhiên việc tìm lỗi là quan trọng nhưng lợi ích lớn hơn là kiến ​​thức dài hạn thu được từ các đánh giá mã. Có lẽ một lỗi đã được tạo ra bởi một cách tiếp cận tồi tệ có thể được ngăn chặn trong tương lai
viên

2

Chúng tôi yêu cầu đánh giá mã ngang hàng cho mỗi lần đăng ký. Nếu không có đồng nghiệp có sẵn, chúng tôi sắp xếp để xem xét đăng ký sau. Người xem xét được ghi chú trong bình luận kiểm tra nguồn kiểm soát nguồn.

Chúng không mất nhiều thời gian và vì chúng được thực hiện giữa các bạn cùng lứa nên không có khía cạnh trẻ em trưởng thành độc hại đối với chúng.


2

Đánh giá mã là, IMO, cần thiết. Bạn 99,999 ...% thời gian không phải lúc nào cũng đúng, vì vậy bạn cần chắc chắn rằng nó đúng. Tôi có thời gian định sẵn không? Không. Nhưng tôi dành thời gian để kiểm tra mã của mình. Thông thường tôi có một đồng nghiệp làm tương tự.


1

Đánh giá mã có vẻ khó khăn, nhưng chúng là một công cụ có giá trị khi được thực hiện đúng. Họ sẽ là tuyến phòng thủ đầu tiên của bạn chống lại những sai lầm trong thiết kế và triển khai. Nếu bạn không tiến hành đánh giá mã trên mọi tính năng bạn đưa vào, bạn nên bắt đầu càng sớm càng tốt.

Đối với việc dành bao nhiêu thời gian cho đánh giá ngang hàng, một thực tiễn tốt là để lại 5-10% tổng thời gian phát triển ước tính của bạn để tiến hành và trả lời đánh giá mã.

Chúng tôi có một whitepaper về việc tiến hành đánh giá mã hiệu quả có thể giúp bạn bắt đầu đi bằng chân phải. Đây là hướng dẫn từng bước và thảo luận về những cạm bẫy phổ biến mà bạn có thể gặp phải và cách giải quyết chúng. Bạn có thể tải nó từ trang web của chúng tôi.

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.