Code Review Nedir?
Agile felsefesinin temelinde bulunan Sprint Review (Sprint Değerlendirme) toplantıları bir proje için vazgeçilmez önemdedir.
Increment’in sunulması aşamasında Scrum Team ve Stakeholders (paydaşlar) Sprint’te yapılan işi görür ve ulaşılan durumu bir üst seviyeye çıkarmak amacıyla işbirliği içerisinde fikir alışverişi gerçekleştirir. Alınan geri bildirimler (feedback) takım içerisindeki herkesin gelişimi için kritik öneme sahiptir. Elbette proje geliştirme sürecinde değerlendirilebilecek etkinlikler sadece Sprint toplantılarından ibaret değil. Örneğin, geliştiriciler de kod becerilerini ve koda olan hakimiyetlerini geliştirmek amacıyla Code Review etkinlikleri gerçekleştirebilmekteler. Bağlamı Agile ile oluşturup sonucu Code Review’a bağlamamın ayrıca bir nedeni var elbette. Şimdilik, ilk paragrafı burada sonlandıralım ve hızlıca başlıkta da yer bulan Code Review’a geçelim.
Core Review (Kod İnceleme)
Geliştirilmekte olan projelerdeki kod kalitesini (code quality) artırmak, geliştiricilerin kod becerilerini ve dile (kütüphane ve/veya framework’ler de dahil olmak üzere) olan hakimiyetlerini (daha basiti yapılabilir miydi?) geliştirebilmelerini sağlamak, bug’ları minimize etmek ve alternatif çözüm yolları üzerine fikir pratiği yapmak amacıyla gerçekleştirilen sosyal etkinliklerden biri kodların bir ekipçe gözden geçirilmesi, ekibin tüm sürece aşina olmasının sağlanması, geliştirme sürecine dair olumlu ve olumsuz (güvenlik açığı, gereksiz tekrar (DRY / Don’t repeat yourself), hata yakalama ve yönetimi, kaynak kullanımı, performans vb.) durumlar üzerine fikir alışverişinin sağlanmasıdır.
Unutmadan, kod gözden geçirme sürecinde, gözden geçirici reviewer, kodu gözden geçirilen author olarak nitelendirilir. Reviewer bir kişi olabileceği gibi review işlemi gerçekleştirebilen bir araç da olabilir.
İşleyen, amacını yerine getiren bir kod temel olarak görevini gerçekleştirmiş demektir. Ancak, bu ilgili kodun ve/veya uygulamanın tamamının mümkün olan en “doğru” şekilde yazıldığı anlamına gelmez. Dolayısıyla, kod ve/veya ürün kullanıcıya ulaşmadan önce (DoD kriterlerine göre Done öncesi veya duruma göre sonrasında) kodun geliştirici ekipçe (veya en az daha deneyimli bir geliştirici ile) incelenmesi ve ele alınış biçimlerinin “daha iyi / işlevsel / güvenli / anlaşılır…” şekilde yorumlanması hem geliştirici hem de ürün için oldukça uygun olacaktır. Kötü yazılan bir kod pek çok kez kodu yazan ve/veya ekipteki bir diğer yazılımcıyı planlanandan daha fazla uğraştıracaktır.
Code Review Zamanlaması
Öncelikle, review için bir checklist oluşturulması uygun olacaktır. Bu sayede geliştirici gelişimini takip edebilir ve review toplantıları daha işlevsel ve sosyal bir şekilde yürütülebilir. Standart yazım biçimleri (coding standards, coding best practives…) başta olmak üzere ilgili kod ve uygulama bağlamında checklist en uygun şekilde genişletilebilir.
Review sürecinde yorumlama geliştiriciye değil, koda dair olmalıdır ve kişisel görüş içermemelidir. Bir öneri dayanakları ile (karşılaştırmalar, dokümantasyon bağlantısı vb.) öne sürülmelidir.
Genel kabul, kodun kullanıcıya ulaşmadan önce en işlevsel hale getirilmesidir. En uygun sürecin, test tekrarını da önlemek amacıyla, ilgili task done olarak nitelendirilmeden önce olduğu söylenebilir. Bu sebeple, review kod merge edilmeden önce ve/veya local’e branch çekerek gerçekleştirilebilir. Dev ortamında yapılan geliştirmeler reviewer tarafından onaylanırsa (OK veya LGTM (Looks Good To Me)) kod master branch’e merge edilebilir. Normal şartlara review edilmemiş ve OK/LGTM almamış bir kod hiçbir şekilde master branch’e merge edilmemelidir.
Son bir not! Author, kod gözden geçirilmeden önce dikkat dağıtması muhtemel alanları (gereksiz boşluk, yorum vb.) kaldırmalıdır. Ancak, referans bağlantı içeren yorumlar korunabilir. Değerlendirme süreci kişisellik taşımamalı, tüm görüşler mümkün olduğu kadar ölçülebilir/analiz edilebilir ifadeler çerçevesinde yapılmalıdır. Ek olarak, hobi düzeyinde de olsa bir programlama dili ile ilgileniyorsanız, üzerinde çalıştığınız uygulamaları tartışma grupları ve sosyal medya hesaplarınız üzerinden incelemeye açabilir ve daha deneyimli geliştiricilerin yorumlarıyla kendinizi ve uygulamanızı geliştirebilirsiniz.
Core Review Araçları
Aşağıda, review sürecinde ekip olarak ve/veya online olarak dahil olunabilecek özelliklere sahip bazı review uygulamalarını listeliyorum. Sizin de kullandığınız, listeye eklenmesini istediğiniz uygulamalar / eklentiler mevcut ise yorum olarak paylaşmanız yeterli.
- Review Board, UI olarak basit olmasına karşın başlangıç aşamasında kolaylıkla kullanılabilecek, review sürecinde ihtiyaç duyulabilecek tüm özellikleri barındıran bir review uygulaması1. RBCommons üzerinde barındırılan kullanımlarda uygulanan fiyatlandırma için Hosting Plans sayfasına göz atabilir2, uygulamayı kendiniz yapılandırmak isterseniz Release’leri3 indirebilirsiniz.
- CodeStream, cloud-based (bulut tabalı) servis ve IDE eklentilerinden oluşan uygulama pek çok IDE tarafından desteklenmekte ve bu sayede pratik bir şekilde projelere entegre edilebilmekte4. IDE’lerin yanı sıra slack ve Microsoft Teams gibi mesajlaşma servisleri ve issue tracker destekleri ile geniş bir kullanım imkanı ve pek çok programlama dili desteği sunmakta5. Uygulama, kişisel kullanımlar ve küçük geliştirici grupları için ücretsiz kullanım seçeneğine sahip.
- Crucible, Atlassian uygulamalarıyla (Jira, Bitbucket Server) kolaylıkla entegre olabilen uygulama add-on’larla kullanım alanını genişletebilmekte6. Uygulama ücretsiz kullanım imkanı sunmamakta.
Son Olarak
Elbette, kod bağlamında yazıya pek çok alt başlık eklemek mümkün. Ancak, bir geliştirici olmadığım için aktarımlarımı dahil olduğum projelerde tanıklık ettiğim / gözlemleyebildiğim durumlar nezdinde yapabilmekteyim. Yazıya eklenmesini istediğiniz hususlar olursa, memnuniyetle değerlendirmek isterim. Aşağıda, ilgili olduğunu düşündüğüm ve referans olarak da kullandığım bazı yazıları da listeledim.
- Caitlin Sadowski, Emma Söderberg, Luke Church, Michal Sipko. (2018). Modern Code Review: A Case Study at Google (pdf). Google, Inc.
- Bruce Johnson. (2018). Lessons From Google: How Code Reviews Build Company Culture. Foreward
- Sara Tansey. (2016). 7 ways to uplevel your code review skills. Asana
- Gökhan Gökalp. (2016). Kodlama Yaparken Dikkat Edilmesi Gereken Bazı Performans ve Optimizasyon Teknikleri
- Özcan Acar. (2012). Eşli Programlama, Code Review, Code Retreat ve Adada Yaşayan Programcılar
- Surender Reddy Gutha. (2015). Code Review Checklist - To Perform Effective Code Reviews. EvokeTechnologies