Mạn đàm về code review activity

Jul 02, 2021

Coding conventions là một tập các hướng dẫn (guidlines) trong việc viết code để phát triến một sản phẩm sử dụng một ngôn ngữ lập trình nhất định. Với ý nghĩa là các hướng dẫn nên coding conventions thay vì đưa ra các luật ( rules ), sẽ chỉ đưa ra các đề nghị về phong cách viết code, hay các hướng dẫn thực hành tốt nhất ( best practices ) dựa trên sự tán đồng của các lập trình viên nhiều kinh nghiệm trong sử dụng ngôn ngữ này. Thông thường coding conventions sẽ bao gồm các quy ước về :

  • Tổ chức dự án ( Example : tổ chức file, tổ chức thư mực )
  • Cách tổ chức code trong file ( Example : quy tắc tổ chức khối code sử dụng indent, comments, khoảng trắng...)
  • Các quy ước đặt tên ( Naming conventions )
  • Các programming best practices ( cách quy ước về khai báo, dòng lệnh...)
  • Các nguyên tắc lập trình ( programming principles )
  • Các quy ước về kiến trúc

Trước hết phải nói rõ rằng các IDE ( Integrated Development Environment ) hiện đại ngày nay thường được tích hợp với công cụ kiểm tra tuân thủ coding conventions có thể có những cảnh báo (warnings) khi lập trình viên không tuân thủ các quy ước nhưng việc vi phạm coding conventions và báo lỗi tuy nhiên đối với compiler đây không phải là các lỗi (error) nên compiler sẽ không than phiền gì về việc này. dù vậy coding conventions chứa những kinh nghiệm thực tiễn được cộng đồng lập trình viên nói chung cũng như của những chuyên gia của ngôn ngữ lập trình đó tích luỹ và công nhận rộng rãi như một điều kiện cần để tạo ra những dòng code dễ đọc và dễ bảo trì nên nói chung khuyến khích mọi lập trình viên tuân thủ theo.

Coding conventions tồn tại dưới 2 dạng chính

  • Các quy ước được tài liệu hoá một cách chính quy : đây thường là những quy ước chung được biết đến rộng rãi
  • Tập hợp các thói quen lập trình, các best practice đặc thù của tổ chức, cá nhân : thường tồn tại dưới dạng Code Review Checklist được xây dựng bởi tổ chức và cá nhân đó.

Với đặc tính là các quy ước, các bài học kinh nghiệm nên coding coventions là một tiêu chuẩn mềm và sẽ tiến hoá theo thời gian.

Code Review là gì ?

Việc tuân thủ coding conventions thường được gọi với cái tên Code Review, trong đó sản phẩm ( source code ) của lập trình viên sẽ được so sánh với tài liệu coding conventions để tìm ra những điểm chưa tuân thủ. Code Review được thực hiện thông qua 2 hình thức :

  • Sử dụng các tools check tự động ( Example : Sonarquebe, Lint...)
  • Check thủ công ( Peer Review ) sử dụng check list

Các tools thực hiện check coding convetions phổ biến sẽ sử dụng kỹ thuật phân tích code tĩnh ( static code analysis ) để tiến hành việc kiểm tra không tuần thủ coding convention. Phân tích code tĩnh được thực hiện mà không thông qua việc thực hiện chương trình nên sẽ chỉ phát hiện ra các vi phạm thuộc về cú pháp, phong cách code thông qua việc sử dụng các công cụ scanner để dò tìm các vi phạm khi so sánh với một tập các quy ước. Tiêu biểu cho các tools loại này có thể kể đến Sonarquebe, hay Lint.

Bên cạnh kỹ thuật phân tích code tĩnh, cũng tồn tại các tools hỗ trợ phân tích code động hay còn gọi là Dynamic Code Analysis trong đó yêu cầu việc thực hiện chương trình trên một bộ vi xử lý thực hoặc ảo. Như vậy dynamic code analysis là một phương thức được thực hiện trong hoặc sau khi chạy một chương trình, trong đó source code sẽ được chạy với nhiều đầu vào khác nhau và kiểm tra kết quả thực hiện với kết quả mong muốn. Để thực hiện việc này thì chúng ta cần hiểu ý nghĩa của từng đoạn source code thay vì chỉ cần có một tập quy ước để thực hiện so sánh.

Khi nói về Code Review, chúng ta muốn nói về sử dụng các kỹ thuật Static Code Analysis hơn là Dynamic Code Analysis.

Tại sao phải thực hiện code review ?

Code Review được thực hiện nghiêm túc sẽ có rất nhiều lợi ích

  • Code review đảm bảo source code tuân thủ coding conventions từ đó tạo ra các cấu trúc source code dễ bảo trì
  • Code review sử dụng check list chứa các best practices cho phép giảm thiểu các lỗi sai phổ biến ngay từ giai đoạn trước khi thực hiện chương trình
  • Code review làm giảm risk phụ thuộc vào 1 developer duy nhất : việc pair review đảm bảo có nhiều hơn một người có hiểu biết về một đoạn code từ đó giảm thiểu risk khi một developer vắng mặt. Code review chia sẻ kiến thức trong toàn nhóm để bất kỳ thành viên nào trong nhóm có thể bắt đầu và tiếp tục lái con tàu.
  • Code review là phương thức hướng dẫn members mới hiệu quả. Việc review code giúp tạo điều kiện thuận lợi cho các trao đổi về code base mà thông qua đó thành viên mới có thể thu thập các kiến thức về chương trình cũng như hình thành thói quen code tuân thủ các quy ước được thống nhất bởi các thành viên còn lại

Làm thế nào để thực hiện code review hiệu quả ?

Bởi code review là thao tác so sánh source code tĩnh với các quy ước code ( coding conventions ) nên để việc code review diễn ra hiệu quả cần thực hiện một số bước sau

  • Thống nhất về coding conventions : Do không phải là rules nên có nhiều quy ước khác nhau và việc tranh cãi về tính hiệu quả của mỗi bộ quy ước là không thể giải quyết một sớm một chiều. Để tiến hành review hiệu quả thì việc thống nhất bộ coding conventions một cách chính thức sẽ giảm thiểu các tranh cãi về sau.
  • Thống nhắt về tools checks : Có nhiều tools checks với khả năng kiểm tra khác nhau và phù hợp trong những hoàn cảnh dự án khác nhau nên việc thống nhất quy định về sử dụng một loại tools checks đảm bảo việc review diễn ra thống nhất và hiệu quả.

     – Mỗi ngôn ngữ sẽ có một tools check được phát triển dành riêng cho nó như ES Lint cho JS hay PhPCodeSniffer cho PHP... Team nên thống nhất sử dụng tools duy nhất để đem lại hiệu quả.

    – Có một số tools đa dụng với khả năng mạnh mẽ hơn như Sonarquebe nhưng để sử dụng full tính năng sẽ mất phí nên team có thể xem xét sử dụng dựa trên tình hình tài chính cụ thể.

  • Xây dựng coding review checklist : Một bộ coding review checklist được khởi tạo trước khi thực hiện review, chứa các best practices cơ bản và được tiến hoá cùng với độ thành thạo của team đảm bảo rằng các kinh nghiệm hữu ích nhất luôn được sử dụng trong quá trìnk kiểm tra source code

     – Ví dụ : Coding Review Checklist Template được tham khảo ở đây Coding Review Checklist

  • Training : Việc sử dụng tools hay đọc hiểu các coding conventions, hiểu bản chất của các mục trong code review checklist cần liên tục được training để đảm bảo các thành viênc của teams đều hiểu rõ việc đang làm và thống nhất trong cách làm.

      – Tài liệu training : Tài liệu training cở sở được xây dựng bởi team lead tại thời điểm kick-off dự án.

      – Hoạt động training :

           – Diễn ra tại thời điểm start dự án đối với mọi thành viên tham gia

           – Diễn ra tại thời điểm khi có thành viên mới tham gia dự án và hướng tới thành viên đó

  • Xây dựng code review workflow : Code review workflow là thành phần nằm trong workflow chung của cả team, nó đảm bảo việc tích hợp bước thực hiện code review vào quy trình phát triển chung của toàn team.

Workflow được xây dựng để mô tả cách thức các hoạt động review được tích hợp vào quy trình phát triển của dự án. Workflow được setup bởi team lead và có thể khách nhau với từng team. Workflow mẫu có thể tham khảo như sau:

  • Step 1 : Khi hoàn thành xong code, member đổi trạng thái ticket sang Reviewing và thực hiện chạy PHP Code Sniffer với standard PSR-12 đối với branch đích
  • Step 2 : Member thực hiện sửa toàn bộ các warning được report bởi PHP Code Sniffer
  • Step 2.1 : Member thực hiện unit test trên feature branch
  • Step 3 : Member attach file kết quả check code và unit test cuối cùng vào ticket và chuyển trạng thái sang Resolved
  • Step 4 : Member tạo Merge Request vào develop và assign người Review trên GitLab
  • Step 5 : Người được assign ở step 4 sử dụng Code Review Checklist để tiến hành pair review và comment trực tiếp thành các conversation trên gitlab
  • Step 6 : Member thực hiện fix các feedback từ peer reviewer
  • Step 7 : Tech lead dự án thực hiện merge feature branch vào develop
  • Step 8 : Việc merge trigger sonarquebe chạy kiểm tra trên develop
  • Step 9 : Team Lead kết xuất kết quả của Sonarquebe và đăng ký thành 1 ticket mới trả nợ trong sprint tiếp theo và đưa vào Product Backlog
  • Step 10 : Tester thực hiện test trên branch develop và log bug ứng với quá trình test.

Tổng kết

  • Code Review sử dụng auto tools là mandatory đối với mọi dự án.
  • Peer Review là một activity tốn thời gian nên tuy theo từng dự án mà thực hiện hay không tuy nhiên việc thực hiện Peer Review là Highly Recommended
  • Khi khởi tạo bất cứ dự án nào thì code review workflow luôn là yếu tố bắt buộc và là một thành phần không thể thiếu trong tài liệu kick-off như là giải pháp cho việc đảm bảo chất lượng code.
Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.