Làm thế nào để tôi chọn mã nào để xem xét?


14

Tôi là thành viên của một nhóm gồm bảy nhà phát triển trong một công ty phần mềm nhỏ và tôi đang cố gắng giới thiệu mã nhóm và đánh giá thiết kế thường xuyên. Chúng tôi đã thực hiện một số đánh giá trong quá khứ, nhưng nó đã được lẻ tẻ. Tôi muốn làm cho nó một điều thường xuyên hơn.

Tôi đã đọc Code Complete và các tài nguyên tương tự khác và họ nói về các cơ chế về cách thực hiện đánh giá mã nhưng tôi không thể tìm thấy bất kỳ thực tiễn tốt nhất nào về cách chọn xem xét . Chúng tôi có một cơ sở mã đã hơn tám năm tuổi và bao gồm nhiều ngôn ngữ khác nhau, vì vậy có rất nhiều điều có thể được xem xét.

Dưới đây là một số yếu tố mà tôi có thể nghĩ đến có thể ảnh hưởng đến sự lựa chọn:

  • Ngôn ngữ: C, Java, SQL, PL / SQL
  • Mã tuổi: Mã mới so với mã cũ
  • Sử dụng mã: Mã thường được sử dụng so với mã chết (ít hiệu quả)
  • Mã quan trọng: Mã quan trọng so với mã không quan trọng
  • Nhà phát triển: Mã nhà phát triển cơ sở so với Mã nhà phát triển cao cấp

Tôi hiểu rằng đây không phải là một câu hỏi với câu trả lời dứt khoát tuyệt đối, nhưng bất kỳ hướng dẫn nào cũng sẽ hữu ích.

Một số câu hỏi liên quan đến ngoại vi:

Câu trả lời:


12

Nói chung, bạn phải xem lại mọi thứ . Nếu một ứng dụng mới có 2 000 LỘC, tất cả 2 000 LỘC phải được xem xét.

Đó là lý do tại sao không có cách thực hành tốt nhất về cách chọn những gì cần xem xét.

Nếu bạn tiếp cận một cơ sở mã lớn hiện có, chưa bao giờ được xem xét trước đó, thì đó là điều tương tự khi bạn phải viết lại một cơ sở mã lớn hiện có và chọn nơi bắt đầu. Nó phụ thuộc mạnh mẽ:

  • trên cơ sở mã (một mã nguyên khối đơn lẻ sẽ khó viết lại / đánh giá hơn một bộ các thành phần riêng biệt, v.v.),

  • bối cảnh của bạn (bạn có thể dừng mọi thứ bạn làm và dành ba tháng (ba năm không?) chỉ làm việc để viết lại / đánh giá, hoặc bạn phải làm điều đó bằng những vòng nhỏ, chỉ khi bạn có thời gian rảnh)?

  • loại đánh giá bạn làm (bạn có một danh sách kiểm tra những thứ cần xem xét không? Tùy thuộc vào các mục của danh sách kiểm tra, bạn có thể muốn xem lại một số phần trước).

Nếu tôi là bạn tôi sẽ:

  • theo nguyên tắc 80% -20%, được đề cập trong bình luận đầu tiên của câu hỏi thứ hai mà bạn liên kết đến.

  • hãy tính đến 100%, là một lý tưởng, có lẽ không đáng. Nó giống như phạm vi bảo hiểm mã 100% cho các thử nghiệm đơn vị, ngoại trừ việc bảo hiểm mã như vậy hầu như không thể hoặc cực kỳ tốn kém.

  • bắt đầu với các phần của mã bạn sử dụng nhiều nhất và là phần quan trọng nhất. Nếu codebase có một thư viện xác thực và đăng ký người dùng mới trên trang web công ty của bạn, trước tiên hãy xem xét nó, bởi vì bạn chắc chắn muốn tìm thấy lỗ hổng bảo mật trước khi tin tặc làm.

  • sử dụng các số liệu hiện có để xác định những gì quan trọng hơn để xem xét. Nếu một phần của cơ sở mã không có bài kiểm tra đơn vị nào, trong khi phần khác, phần quan trọng không kém, có độ bao phủ mã 85%, hãy bắt đầu bằng cách xem lại phần đầu tiên. Nếu một phần của cơ sở mã được viết bởi một nhà phát triển được biết là thiếu kinh nghiệm và giới thiệu nhiều lỗi hơn bất kỳ đồng nghiệp nào, hãy bắt đầu bằng cách xem lại mã của anh ta trước.


Nếu bạn thực hiện TDD đúng cách, thì phạm vi bảo hiểm 100% không chỉ dễ dàng, mà còn không thể tránh khỏi, và thực sự hóa ra là một thanh rất thấp.
Jonathan Hartley

4

Bắt đầu bằng cách xem xét tất cả các thay đổi bạn thực hiện đối với mã; Điều đó sẽ ngăn chặn vấn đề trở nên tồi tệ hơn. Sau đó bắt đầu xem xét mã dựa trên tần suất thay đổi; đây sẽ là những khu vực 'vấn đề'.

Bạn sẽ muốn tìm ra một số cách để theo dõi rằng bạn đã xem xét một phần của mã để bạn có thể phân tích phạm vi đánh giá của mã của mình so với các mối quan tâm khác.

Nếu bạn có thể xác định mã nào không nằm trong các thử nghiệm của mình, mã đó sẽ trở thành ưu tiên cao hơn để xem xét.


3

Xem lại tất cả các thay đổi mới đã được thực hiện trước khi chúng được đưa vào sản xuất. kịch bản cài đặt, mã nguồn, thay đổi cơ sở dữ liệu, tất cả mọi thứ! Toàn bộ quan điểm của việc xem xét mã là ngăn chặn mã xấu đưa nó vào sản xuất. Có thể là một sơ đồ tổ chức kém hoặc đơn giản là một lỗi được giới thiệu bởi vì một cái gì đó đã bị bỏ lỡ.

Tái cấu trúc mã hiện tại bạn đang làm việc đi đôi với xem xét mã. Ví dụ: khi tôi đang xem xét mã, nếu có mã trùng lặp trong một lớp có sửa lỗi, ngay cả khi nhà phát triển không thay đổi mã đó trong bản sửa lỗi của họ, tôi sẽ không vượt qua. Tôi sẽ có họ quay lại và loại bỏ mã trùng lặp.

Nếu bạn tái cấu trúc không ngừng thì việc xem lại mã sẽ trở nên hữu ích. Nếu không thì thật lãng phí thời gian.

Nếu bạn kết hợp quy trình xem xét mã như một bước trong quy trình phát triển của mình, cơ sở mã sẽ trở nên tốt hơn theo thời gian. Tốt hơn nữa, bạn không nên cho phép các nhà phát triển của mình đảm nhận công việc tính năng mới hoặc sửa lỗi cho đến khi tồn đọng mã xem lại mã. Điều này đảm bảo rằng việc xem xét mã được thực hiện.

Nếu có những khu vực đã biết cần được tái cấu trúc, nhưng sẽ mất nhiều thời gian để thực hiện chúng (tức là 1 tuần trở lên). Sau đó, tạo một mục công việc để tự tái cấu trúc và thêm nó làm mục để xử lý.


1
Tôi không đồng ý - hãy để mã đi vào sản xuất và xem xét nó khi bạn có thể. Bí quyết là tin tưởng các nhà phát triển của bạn và cho rằng họ không phạm sai lầm lớn. Nếu họ làm (tất cả chúng ta làm) thì bạn có thể sửa chữa và cấu trúc lại các vấn đề sau khi đăng ký. Cố gắng ngăn tất cả mã tiếp cận sản xuất trước khi xem xét thường có nghĩa là không có mã nào đi vào sản xuất (theo kinh nghiệm của tôi). Tất nhiên, nếu bạn không tin tưởng các nhà phát triển của mình, thì hãy thoải mái khóa chúng cùng với chiếc kéo sắc bén trong tủ đứng yên.
gbjbaanb

"Xem xét tất cả các thay đổi mới đã được thực hiện trước khi chúng được đưa vào sản xuất" Tôi hầu như đồng ý với điều này. "Tốt hơn nữa, bạn không nên cho phép các nhà phát triển của mình đảm nhận công việc tính năng mới hoặc sửa lỗi cho đến khi tồn đọng mã xem lại mã." Tôi rất thích làm điều này, nhưng với thực tế của áp lực thương mại, thật đáng buồn là không thực tế.
Burhan Ali

Tôi luôn tin tưởng các dev của tôi. Các nhà phát triển là những người làm việc xem xét mã. Ngoài ra, việc đưa ra một quy trình để đảm bảo rằng việc đánh giá mã được thực hiện theo cách không phản ánh sự thiếu tự tin về khả năng của các nhà phát triển. Tất cả các nhà phát triển, quản lý dự án và chủ doanh nghiệp nên nhẹ nhõm hơn rằng có một điều ít phải lo lắng hơn, đó là: ghi nhớ để xem xét mã.
Charles Lambert

@BurhanAli - Nó rất thực tế. Khách hàng của chúng tôi đã là khách hàng cao cấp (nghĩ rằng Microsoft) và chu kỳ phát hành của chúng tôi rất nhanh. Sẽ mất tất cả khoảng 30 phút, có thể là một giờ, để nhà phát triển xem xét thay đổi. Nếu mất nhiều thời gian hơn thế, thì rất có thể bạn không chia công việc của mình thành những mảnh nhỏ, đó là một vấn đề hoàn toàn khác.
Charles Lambert

2
@gbjbaanb Bạn để mã chưa được xem xét đi vào sản xuất? Ồ Đó không phải là về việc không tin tưởng các nhà phát triển của bạn (bạn có thể khiến một trong số các nhà phát triển của mình xem xét mã của ai đó), đó là về việc tìm kiếm những sai lầm rõ ràng rõ ràng
Rob

2

Bắt đầu bằng cách xem lại tất cả mã mới và sửa đổi mã hiện có.

Khi xem xét sửa đổi mã hiện có, nhà phát triển nên tuân theo quy tắc tẩy chay. Để lại mã tốt hơn anh ta tìm thấy nó.

Điều đó không có nghĩa là bạn phải sửa toàn bộ tập tin để trở nên hoàn hảo. Nhưng nó không nên thêm vào mớ hỗn độn, nó sẽ làm cho nó tốt hơn một chút. Có lẽ bằng cách di chuyển các sửa đổi vào các lớp mới được cấu trúc đúng và để phần còn lại của tệp mã gốc như cũ (sau tất cả, nó đang hoạt động).

Khi bạn bắt đầu cải thiện mã bằng cách xem xét tất cả mã mới và sửa đổi, với tư cách là nhà phát triển, bạn nên biết khu vực nào của ứng dụng yêu cầu thay đổi nhiều nhất. Sau đó, xem lại những điều đó, thảo luận về cách chúng có thể được cải thiện, từng chút một.

Xem xét mã được viết 10 năm trước, vì mục đích xem xét nó, là vô nghĩa, nhà phát triển nên đã cải thiện trong 10 năm đó. Vì vậy, không có điểm nào để xem xét nó chỉ để tìm hiểu những gì bạn biết.

Mục đích của đánh giá mã là để cải thiện và sửa chữa những sai lầm bạn hiện đang mắc phải và chia sẻ kiến ​​thức đó giữa các nhóm.


+1 cho "Để lại mã tốt hơn anh ta đã tìm thấy." Tôi luôn cố gắng khuyến khích điều đó. Đối với việc xem xét mã 10 năm tuổi chỉ vì lợi ích của nó, tôi đồng ý với những gì bạn nói. Nhưng có lẽ có một số lợi ích trong việc làm điều đó mặc dù để làm cho nhóm thoải mái hơn với ý tưởng xem xét? Không có nhiều nguy hiểm về việc mọi người nhận được sự bảo vệ đối với mã mà họ không viết (hoặc quá cũ đến nỗi họ đã quên họ đã viết nó.)
Burhan Ali

1

Trong dự án của tôi, chúng tôi bao gồm đánh giá mã là điều bắt buộc trong hầu hết các trường hợp cho bất kỳ câu chuyện / lỗi người dùng / lỗi nào đang được phát triển. Chúng tôi đang sử dụng các quy trình scrum / agile và vé / câu chuyện không được chuyển sang xây dựng (đó là tồn đọng cho QA) cho đến khi các bài kiểm tra đơn vị được viết và hoàn tất đánh giá mã.

Chúng tôi sử dụng phân tích Atlassian FishEye với đánh giá mã Crucible được tích hợp với JIRA + SVN cho mục đích này.

Khi nhà phát triển kiểm tra mã trong một câu chuyện cụ thể, anh ta tạo một đánh giá mã mới trong FishEye, nơi anh ta chọn các thành viên khác trong nhóm để thực hiện đánh giá.

Sau khi hoàn tất đánh giá mã, (công cụ nêu bật các thay đổi được gửi và cho phép để lại nhận xét cho dòng mã cụ thể), nhà phát triển sửa các vấn đề được đề cập / thực hiện các cải tiến được đề xuất và chuyển vé vào cột Được xây dựng trong JIRA - điều đó có nghĩa là câu chuyện sẵn sàng để được kiểm tra và không có nhiều thay đổi mã dự kiến ​​cho mục công việc cụ thể này.

Điều này cũng đảm bảo QA không kiểm tra bất cứ điều gì có thể thay đổi và có khả năng bị phá vỡ trong khi tái cấu trúc mã sau khi xem xét mã .

Tóm lại, tất cả các mã phải được xem xét - điều này hỗ trợ chất lượng mã cao, thường dẫn đến thiết kế tốt hơn, dễ đọc, khả năng bảo trì và kiểm tra mã và cải thiện hiệu suất phát triển trong thời gian dà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.