Thursday, April 26, 2012

Kod Gözden Geçirme (Code Review) Nedir?

Yaklaşık 1.5 yıldır Kartaca'da öğrendiklerimden biri de kod gözden geçirme süreci oldu. Kod gözden geçirme kısaca yazılan kodun svn kod deposuna teslim edilmeden önce bir/birden çok kişi tarafından değerlendirilmesi sürecidir.

Peki nasıl oluyor bu süreç?
Kartaca'da süreç az çok şu şekilde işliyor:
  1. Kodunuzu yazdıktan sonra değişiklikleriniz içeren bir yama (patch, diff) hazırlıyoruz.
  2. Bu yamayı kod gözden geçirme aracı olarak kullandığımız Crucible'a ekliyoruz. Crucible arayüzünde kodda meydana gelen değişiklikleri görebiliyoruz, değişkliklere yorum yazabiliyoruz.
  3. Kodu gözden geçirecek kişi/kişiler kodu inceleyip beğenmedikleri, hatalı gördükleri, şöyle olsa daha iyi olur dedikleri kısımları yorum olarak ekliyorlar. Bu kısımda genel olarak kodlama standartları, kod mimarisi değerlendiriliyor. Ve tabi ki olası buglar bulunmaya çalışılıyor.
  4. Kodu yazan bu yorumlar doğrultusunda kodu güncelleyip tekrar yama oluşturuyor. 
  5. Bu süreç kodu gözden geçiren kişiler koda onay verinceye kadar devam ediyor. Bu onay genelde "eline sağlık" şeklinde oluyor :)
Peki neden bu kadar zahmete katlanıyoruz?
Neden şirket bu süreleri harcamamıza izin veriyor?

Kod gözden geçirmenin gördüğüm faydalarını şöyle sıralayabilirim:
  1. Kod kalitesi artıyor
  2. Proje hakkında bilgi birikimi geliştiriciler arasında yayılıyor
  3. Junior geliştiriciler Senior geliştiricilerin tecrübe ve bilgi birikimlerinden yararlanıyorlar
  4. Geliştiricileri temiz ve kaliteli kod yazmaya itiyor
  5. Olası bugları daha kod teslim edilmeden bulabiliyoruz
  6. Projeye yeni katılan kişiler projeye daha kısa sürede adapte oluyorlar
Kod gözden geçirme sürecinde hem gözden geçirici (reviewer) hem kodu gözden geçirilen (author) rollerinde  bulunuyorum. İki durum için de dikkat edilmesi gereken bazı noktalar var.

Kodunuz gözden geçiriliyor ise:
Kodunuzu göndermeden önce kullandığınız ide yardımıyla kodunuzu formatlamanızda fayda var. Gözden geçirmede boşluk, girintileme gibi hatalar dikkat dağıtabiliyor.
Yazılım geliştirici egomuzu bir tarafa bırakıp, kod gözden geçirme'yi kendiğimizi geliştirebileceğimiz, pratik bilgiler edinebileceğimiz bir aktivite olarak düşünmekte fayda var. Kod gözden geçirme sürecini başkalarının kodunu kötüleme olarak değerlendirmeye başladığımız an yanlış yapıyoruz demektir.
Kodunuza yapılan yorumları değerlendirin. Eğer yorumun uygun/doğru olmadığını düşünüyorsanız bunu açıkca söyleyin. Konuyu tartıştıktan sonra bir kişi diğerini ikna edecektir bu da doğru çözüm olacaktır.

Kod gözden geçiriyorsanız:
Kod sahibini kırmamak için yorum yapmaktan kaçınmayın. Kimse başkasına "bu olmamış" demek istemez ancak içinize sinmeyen o kodun olduğu haliyle teslim edilmesine izin verirseniz günün birinde o kod ile uğraşmak ve düzeltmek zorunda kalacaksınız demektir.
Yorumlarımızda düzgün bir dil kullanırsak kod sahibinin özgüvenini, gururunu kırmamış oluruz. "Bunu bozuk yapmışsın" demek yerine "bu kısımda şu sebepten şu sorun çıkabilir, şu şekilde düzeltirsen daha iyi olur" demek daha faydalı ve insancıl bir yaklaşım olur.
Gözden geçirme için yeterli zaman ayırın.
Kodun sadece çalışabilirliğine bakmayın. Kod tasarımını da göz önünde bulundurun. Kodda refactoring için önerileriniz varsa bunları dile getirin.

2011 yılında katıldığım kodcu kafe java etkinliklerinden birinde Altuğ Altıntaş kimlerin kod geliştirme süreçlerinde kod gözden geçirme yaptıklarını sormuştu. Cevap yok denecek kadar azdı. Durumun böyle olması üzücü.

Kod gözden geçirme deyince aklıma Google gelir. Eski Google çalışanlarından birinin kod gözden geçirme ile alakalı bloğunda yazdıklarına göz atmanızı tavsiye ederim. O blog girdisinden bir cümle: 
"At Google, no code, for any product, for any project, gets checked in until it gets a positive review."