Skip to main content

[Code Review] Lợi ích và những sai lầm thường thấy

Tôi là một kĩ sư, một kĩ sư công nghệ, thế nên việc hiểu và thực hành code review nó là một trong những công việc hằng ngày của tôi. Tuy nhiên việc thực hành code review một cách hiệu quả thực sự là một thách thức. Việc hiểu những lợi ích và khó khăn trong khi tiến hành code reivew sẽ giúp chúng ta hiểu đúng và có cách tiếp cận phù hợp để mang lại giá trị và lợi ích cao nhất.

Các lợi ích nổi bật code review mang lại

Improve code quality

Thông qua code review chất lượng code base được tăng cường, khi bạn thực hành code review một cách có hiệu quả nó thường dẫn đến một số các kết quả như bạn nhận được nhiều feedback có giá trị từ những đồng nghiệp trong team. Và thông qua các tương tác trao đổi kết quả tất yếu là chất lượng code base của bạn được nâng cao

Tìm kiếm và ngăn chặn các lỗi từ sớm

Khi code review đã trở thành một thói quen và bạn cảm thấy thích thú với việc đó, thì bạn có thể mang đến rất nhiều lợi ích cho sản phẩm, bạn có thể ngăn chặn các lỗi từ trước khi chúng xuất hiện, thông qua đọc và review code bạn có thể phát hiện ta những logic tiềm tàng bị sai trong quá trình phát triển, các lỗi về performance hay security issues, dưới con mắt của một lập trình viên đầy kinh nghiệm cũng dễ dàng được phát hiện.

Knowledge transfer

Để một công ty có thể phát triển, thì một trong những cách hiệu quả đó là knowledge transfer, làm thế nào để knowledge có thể được tổng hợp và transfer giữa mọi người trong công ty. Code review cũng là một cách thức để thực thi knowledge transfer, đặc biệt đối với những bạn mới hoặc junior các bạn có thể học hỏi được rất nhiều kinh nghiệm thông qua những comments & feedback có giá trị từ các bạn senior, và dần dà những kiến thức đó trở thành của bạn, giúp bạn có thể deliver được impact lớn hơn.

Build team awareness

Việc hiểu biết những gì mà những thành viên khác trong team đang xử lý, sẽ giúp cho tăng cường team awareness, hơn thế nữa cũng tăng cường ownership trong team, khi mà team own product vậy thì việc contribute cho product từ giai đoạn từ sớm, sẽ mang đến những lợi ích từ sớm, ngăn chặn lỗi, việc address và xử lý issues trên product khi gặp phải cũng sẽ nhanh hơn

Những lợi ích mà code review mang lại là không phải bàn cãi nhưng những vấn đề gặp phải khi tiến hành code review cũng không ít, nó cũng chính là những cản trở để team có thể thực hành và thực sự cảm thấy thoải mái với nó. Chúng ta hãy đi vào một số những trở ngại khi tiến hành code review nhé.

Các khó khăn gặp phải

Mất rất nhiều thời gian để nhận được feedback

Việc tiến hành code review chỉ sẽ hiệu quả nếu nhận được feedback đủ nhanh, khi bạn tiến hành tạo PRs để xin review request, thông thường bạn sẽ cần phải chờ reviewer comments và feedback, trong quá trình chờ đó bạn sẽ phải “switch context” để có thể focus vào một task khác, hoặc là giải trí. Việc chờ quá lâu hoặc khi bạn đã giành tâm trí của mình cho một vấn đề khác (task khác) sẽ rất khó để bạn tập trung quay lại với task ban đầu mà bạn đang làm. Nó làm giảm sự tập trung và productivity của bạn.

Code review không được ưu tiên cao trong danh sách các công việc cần làm

Thông thường tôi quan sát thấy rằng, các bạn developer quá tập trung vào việc develop (build feature, fix bugs, refactor code, viết test, meeting…) việc thực hiện code review thường nằm cuối danh sách cần làm. Có lẽ đó cũng là điều dễ hiểu nó phụ thuộc vào công ty vào văn hoá mà công ty xây dựng, tôi cũng quan sát được công ty sẽ ghi nhận đóng góp cá nhân trong việc xây dựng sản phẩm, làm feature, fix bugs…hơn là code review, nó là vấn đề ghi nhận giá trị mà bạn bỏ ra. Tôi cho rằng việc thực hiện code review hiệu quả (có thể đưa ra được những feedbacks & comments có giá trị) thường tốn khá nhiều thời gian của reviewer, trong khi code review có khi còn không được mention trong performance review. Dẫn đến việc nó thường được ưu tiên thấp hơn, và được thực thi “cho đủ” qui trình

Mặc dù cần thời gian để có thể tham gia vào code review hiệu quả (chất lượng + số lượng), nhưng thử nhìn lại các sự kiện quan trọng planning, estimation… mà tôi quan sát được, thường không nhắc đến thời gian cho code review, do thời gian không được tính giành cho code review, nên cũng dễ hiểu mọi người sẽ ưu tiên vào những công việc khác

Code review với số lượng thay đổi quá lớn

Cái này tôi nghĩ là gặp khá thường xuyên trong công việc, đặc biệt công ty tôi là một start up, khi mà mọi thứ phát triển quá nhanh, và cái gì cũng cần làm gấp. Dẫn đến thiếu thời gian để dev, để đảm bảo chất lượng..chứ nói gì đến thời gian cho code review. Do vai trò của code review chưa được thể hiện nên thường thấy, đến một thời điểm nào đó trong tương lai, chúng tôi phải trả nợ bằng technical dev, bằng việc thiếu một số dữ liệu tracking quan trọng, không coverage được hết các edge-case. Và quay lại mục đích chính của code review. Bạn mong đợi gì khi tạo một review request? (với một PRs quá lớn)

Code review không mang đến những feedback có giá trị

Tôi quan sát thấy, có khá ít feedback trong code reviews, vậy nên việc có thể đưa ra được những feedback có giá trị lại càng ít. Do thời gian bỏ ra cho code review cũng “không được tính”, nên thường thấy mọi người làm Code Review rất nhanh, để đảm bảo “qui trình”, để code được merge, hoàn toàn “tin tưởng” vào đồng đội. Có rất nhiều nguyên nhân mà tôi thấy ảnh hưởng đến vấn đề này, từ việc thiếu thời gian để review code, thiếu thông tin về thay đổi cho reviewer, thường thấy là thiếu description thiếu động cơ/lý do thay đổi, thiếu các thông tin liên quan, dẫn đến reviewer không hiểu và không đưa ra được những feedback giá trị. Trong những tình huống này, reviewer rất có thể tập trung vào những vấn đề nhỏ hơn styling, typos, cách đặt tên biến. Hãy nhớ rằng giá trị của bạn mang lại cho Code Author nằm ở các vấn đề cốt lõi, như lỗi, architecture, structure hoặc maintainability


Phần 2 tôi sẽ nói về best practice, các bạn chờ nhé

Comments

Popular posts from this blog

Auto Code Review (Danger)

Code review là một quy trình bắt buộc trong qui trình phát triển phần mềm chuyên nghiệp. Mục tiêu quan trọng nhất của code review là nâng cao code quality của dự án. Tuy nhiên đối với những team làm outsource hoặc khi tính chất của dự án “quick win” với deadline oriented. Thông thường cách tiếp cận của team trong code review chỉ là apply một số rule về coding convention và coding style để cho dự án chạy. Lý do thường thấy nhất đó là reviewer thường phàn nàn không có đủ thời gian để làm review một cách chuẩn chỉnh và qui củ, hơn nữa việc bỏ sót lỗi trong quá trình review là khó tránh khỏi (human mistake). Hoàn toàn hợp lý tuy nhiên chúng ta có thể có một cách tiếp cận tốt hơn bằng cách delegate việc review code style, code convention, và kết quả static analysis tool cho code review bot (Danger). Bằng cách này chúng ta giải quyết được 3 vấn đề chính: Reviewer chỉ cần focus vào review business logic, cái này giá trị hơn rất nhiều so với code style và code convention cũng như s

Follow Law of Demeter!

Việc code bẩn code rác là khá phổ biến đối với lập trình viên, mà để thay đổi nó chúng ta cần phải có thời gian luyện tập, mình sẽ thông qua series các bài viết chia sẻ kinh nghiệm việc mình luyện tập và apply việc refactor code làm cho code đẹp hơn. (Trong series này mình sẽ sử dụng ngôn ngữ Ruby để làm ví dụ) Ở phần 1 này mình sẽ đi vào nguyên lý đầu tiên  Follow Law of Demeter . Để hiểu xem cụ thể Low of Demeter (LoD) là gì chúng ta sẽ đi vào một ví dụ cụ thể. Giả sử chúng ta có 3 class là Address, Customer và Order class Address < ActiveRecord :: Base belongs_to: customer end class Customer < ActiveRecord :: Base has_one: address has_many: orders end class Order < ActiveRecord :: Base belongs_to: customer end Vì  Ruby  cho phép chúng ta thông qua quan hệ của các đối tượng để truy cập đến các thuộc tính và phương thức của những đối tượng liên quan. Để hiển thị địa chỉ của khách hàng cho 1 đơn hàng, chúng ta thông thường sẽ xử lý

Testing like a boss

Manual mobile app testing là một công việc không hề dễ dàng, nó đòi hỏi QA/Tester phải giành nhiều thời gian và công sức để có thể verify/qualify được hết tất cả các test case. Đặc biệt khi những yêu cầu như pixel perfect hay khi dữ liệu được combine từ nhiều nguồn khác nhau (API/Cache/Local Database/Sharepreferences), thì thời gian mà QA/Tester bỏ ra để có thể đánh giá được chính xác "development progress" là ko hề nhỏ. Tôi có thể kể ra một số câu hỏi thường gặp khi manual testing mobile app  1. Liệu 2 màu ( ▲ )( ▲ )   (implementation/specs) có thực sự giống nhau? Hãy chỉ ra mã màu của chúng? 2. Textsize là bao nhiêu? Typeface là gì? TextColor, HintColor giá trị như thế nào? Làm sao để trả lời đã tuân theo design specs hay chưa? 3. Khoảng cách giữa 2 view là bao nhiêu pixel? Có đúng specs ko? 4. Làm sao có thể biết được trong một màn hình, dữ liệu lấy từ đâu? (API/Cache/Local Database/Sharepreferences) 5. Làm sao có thể xoá local storage khi cần thiết? 6. Kiể