اپیوئید

در تلاش برای رهایی از این گرداب

درباره‌ی فرهنگ Code Review

۱۲ فروردین ۹۷

در تیم‌های مختلف فنی‌ی که کار کردم، کد ریویو 1 به شیوه‌های متفاوت و فرهنگ‌های مختلفی انجام می‌شده. چندین ماه پیش این فکر تو ذهنم بود که یک مقدار بیشتر راجع به کد ریویو مطالعه کنم و ببینم در دنیا به چه شکلی انجام می‌شه و practiceهای خوبش چیان که حاصلش شد این مطلبی که دارم می‌نویسم که بیشتر خلاصه‌ی یک سری منابع هست که در انتها بهشون لینک دادم.

Code Review چی هست و به چه دردی می‌خوره؟

تو ذهن خیلی از ماها،‌ code review برای این هست که اگر باگی تو کدمون هست که متوجه‌ش نشدیم رو پیدا کنیم توسط code review. آیا واقعا هدف از این code review این هستش؟ نه ! پیدا کردن باگ رو باید با QA و انواع مختلف روش‌های مختلف testing 2 حل کنید. البته کد ریویو به خودی خود باعث می‌شه که باگ‌ها کمتر بشن ولی هدفش این نیست. در فرهنگ کد ریویو مدرن، هدف اصلی چیز دیگه‌ای هستش. یک تیمی از مایکروسافت شروع به یه تحقیق کردن و از تیم‌ها و شرکت‌های مختلف مزایای کد ریویو رو می‌پرسیدن. طبق انتظار، اکثریت، “پیدا کردن باگ” رو به عنوان مزیت اصلی کد ریویو مطرح کرده بودن منتها بررسی‌هایی که روی code reviewهاشون انجام شد، چیز دیگه‌ای رو نشون می‌داد. مزایایی که در عمل تیم‌ها ازش بهره‌مند شدن و تو ذهنشون bold شده بود، انتقال دانش، افزایش آگاهی تیمی، و پیدا کردن راه حل‌های جایگزین/بهتر بود !

کد ریویو فرصتی هستش که آدم‌ها دانش‌ و طرز نگاه‌شون رو با هم به اشتراک بگذارن، از هم یاد بگیرن و با هم دیگه پیشرفت کنند. همچنین، کد ریویو باعث افزایش آگاهی تیمی می‌شه از این نظر که همه مقدار خوبی نسبت به codebase آپدیت می‌مونند و این کار رو در آینده خیلی راحت می‌کنه برای تغییرات. این مساله ارتباط مستقیم داره با bus factor 3. علاوه بر این، باعث می‌شه که راه‌حل جدید یا بهتر برای یه مساله پیدا بشه. مثلا شاید یک نفر بتونه پیشنهاد بده که چطوری می‌شه یک چیزی رو ساده‌تر انجام داد که خب بهتره.

نتیجه‌ی فرهنگ کد ریویوی خوب :

فرایند code review به چه شکل هستش؟

خود تیم می‌تونه قرارداد کنه فرایند کد reviewشون چطوری باشه ولی یه راه خوب‌ش (با فرض اینکه فقط یک نفر کد ها رو مرج می‌کنه) اینه که برای تغییرات‌تون یک merge request درست کنیم و رندوم به یک نفر assign کنیم، اون نفر کد رو بررسی کنه و نظراتش رو بگه و اگر بحثی هست انجام بشه، نویسنده‌ی کد تغییرات لازمه رو بده و در نهایت merge request به system owner اساین بشه و اون مرج کنه.

چه چیزهایی رو review کنیم؟

نکته درباره‌ی Code Style: خوبه که کدها یکپارچه و تمیز باشن و به شکل consistentی نوشته بشن نه اینکه هر تیکه‌ش یه استایل متفاوتی داشته باشه. جوری که انگار همیشه این تیم بوده که کد رو می‌نوشته و نه نفرات مختلف. بهتره روی یک حداقلی توافق بشه (مثلا single quote یا double quote) و در سایر موارد به استایل نویسنده احترام بذاریم. در رابطه با پایتون می‌شه از PEP8 4 استفاده کرد.

تا جاییکه بتونیم، بهتره که یه سری چیزا رو automate کنیم:

مواردی که هنگام review کردن خوبه که رعایت کنیم

مهم‌ترین نکته‌ای که تو review کردن کد باید حواسمون باشه اینه که ما همه انسان هستیم و هممون تا حدی دارای Imposter Syndrome 5 هستیم. نتیجه‌ش این می‌شه که ناخودآگاه، وقتی ایرادی به کدی که زدیم گرفته می‌شه، اون رو به خودمون می‌گیریم و ناراحت می‌شیم یا گارد می‌گیریم. در این رابطه جلوتر صحبت می‌کنیم.

ولی نتیجتا به عنوان reviewer باید در نظر بگیریم اینه که در محیط نوشتاری، لحن و منظور به خوبی منتقل نمی‌شه و تحقیقات نشون داده6 که یه negative bias در تعامل نوشتاری نسبت به تعامل چهره به چهره یا گفتاری وجود داره. پس باید قبل از هر چیزی این نکته رو در نظر بگیریم که چطوری به شکل مناسبی یه پیشنهادی رو مطرح کنیم به نویسنده‌ی کد.

نکات ریزی که خوبه که رعایت کنیم:

این پرسشی مطرح کردن، به جز اون بحث گارد گرفتن به یه چیز دیگه هم کمک می‌کنه. اینکه آدم‌های تازه‌واردتر به تیم، بتونند راحت‌تر به اعضای seniorتر فیدبک بدن. ممکنه خیلی از اعضای جدید سختشون باشه به یک senior بگن فلان کار رو بکن و این پرسشی مطرح کردن این کار رو راحت می‌کنه براشون.

نکته‌ی کنکوری: جمله‌ای نظیر “چرا این کار رو نکردی؟” با اینکه پرسشی هست ولی حامل یک قضاوت هست و بار منفی منتقل می‌کنه.

مواردی که به عنوان نویسنده‌ی کد بهتره رعایت کنیم

اختلاف نظرها

یه سری نکته‌ی پراکنده:

چطوری فرهنگ code review رو تو تیممون جا بندازیم؟

منابعی که برای نوشتن این مقاله ازشون استفاده کردم

https://blog.labix.org/2013/02/06/ethics-for-code-reviewers

https://www.youtube.com/watch?v=1m3eRFeCInY

http://marcotroisi.com/the-ethics-of-code-reviews/

https://www.youtube.com/watch?v=PJjmw9TRB7s

https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/ICSE202013-codereview.pdf

https://blog.fogcreek.com/cultivating-a-code-review-culture-interview-with-derek-prior/

https://www.fastcodesign.com/3036748/why-its-so-hard-to-detect-emotion-in-emails-and-texts

https://github.com/thoughtbot/guides/tree/master/code-review : این خیلی مختصر و مفید و خوبه

http://www.methodsandtools.com/archive/whycodereviews.php

https://mtlynch.io/human-code-reviews-1

https://mtlynch.io/human-code-reviews-2/

https://css-tricks.com/code-review-etiquette/


  1. کد ریویو فرایندی هستش که یک کد جدید، قبل از وارد شدن به کدبیس اصلی طی می‌کنه و در طی اون، به صورت دستی یا اتوماتیک بررسی می‌شه تا یک سری اتفاقات خوب بیفته که تو این مقاله راجع بهشون صحبت می‌کنیم.
  2. https://en.wikipedia.org/wiki/Software_testing
  3. تعداد توسعه‌دهنده‌های یک تیم که اگر زیر اتوبوس برن تو پروژه اختلال جدی به وجود میاد
  4. https://www.python.org/dev/peps/pep-0008/
  5. https://en.wikipedia.org/wiki/Impostor_syndrome
  6. https://www.fastcodesign.com/3036748/why-its-so-hard-to-detect-emotion-in-emails-and-texts
  7. https://en.wikipedia.org/wiki/Socratic_method
  8. https://techblog.workiva.com/tech-blog/mentors-code-review
comments powered by Disqus