Reusing ve Refactoring

Yazılım dünyasının bu iki önemli konusundan biraz bahsetmek istiyorum. Sıkılmayın sonuna kadar okuyun. Sizin için yararlı olduğunu göreceksiniz.

Bir yazılım geliştirme sürecini düşünün. Müşteri size gelir derdini anlatır, projeyi almanızı ister, yasal işlemlerden sonra oturup analiz yapmaya başlarsınız. Öncelikle bir “Hedef ve Kapsam” belgesi yazmanız ve müşteriye onaylatmanız gerek. Daha sonra senaryo analizlerine ve firmanın müşterisi ile arasındaki diyaloglarını belgelendirmeye çalışırsınız. Müşterinin aklına sürekli yeni gereksinimler gelir sizde süreç içinde dökümanları güncelleyerek bunlara karşılık vermeye çalışırsınız.

Her yazılım projesinde kullanılacak genel parçalar, süreçler, modüller ve belgeler vardır. Örneğin senaryoların belgelendirileceği Word şablonları vardır, çeşitli test verilerinin oluşturulacağı Excel belgeleri vardır, programlama alt yapısını oluşturacak; kredi kartı sorgulama, güvenlik, rol dağıtımı, ekran dizaynları, bazı iş akışları, web temaları vardır. Tüm bu malzeme proje daha ortada yokken hazırdır. Mesela kek yaparken yumurta kullanıyoruz ama oturup yumurtayı yeni baştan üretmiyoruz di mi? Zaten çok zor olurdu, önce tavuk mu üreticez yoksa yumurta mı?

Öncelikle refactoring olayından başlayalım. Sadece yazılan kod için değil, projenin her aşamasında kullanılabilecek bir yöntem. Refactoring üretilen parçanın daha kolay anlaşılması, bakımının kolaylaştırılması, hızlandırılması, gereksiz yerlerinin kırpılması, dökümantasyonunun iyileştirilmesi adına yapılacak bir dizi işlemdir. Tek düşünmeniz gereken bu parçayı sizden sonra başka projelerde kullanacak kişilerin yardıma ihitiyacı olmadan (ve size küfür etmeden) rahatça kullanabilmesi ve performansının düşmemesidir.

Örneğin bir döküman şablonunu ele alalım. Projenin başında senaryoları yazarken Word’ü açıp Allah ne verdiyse yazıyordunuz. Sonradan farkettiniz ki aslında her senaryo için belli başlıklar var ve hepsinde ortak kullanılıyor (farklı isimlerde olsa bile). Bir Word şablonu oluşturup herkesin bunu kullanmasını sağlarsanız, firma içi iletişim 10 kaplan gücünde olacaktır ki Agile programlama yapanlar için baş kurallardan bir tanesidir.

Yada yazdığınız bir fonksiyonu düşünün. Hani yapmazsınız ama; ilk yazdığınızda çok uzun ve karmaşık bir algoritma kullanmış olun. Sizden sonra gelen programcılar şöyle diyecektir. “Ağbi NASA’da rocket science üzerine çalıştım, fezaya 10 tane roket gönderdim, ama böyle karmaşık bir algoritma ne gördüm nede duydum”. Böyle konuşmalar duymak istemiyorsanız yazdığınız fonksiyonu parçalara bölüp yeniden düzenlemeniz, belki bir kaç pattern kullanmanız, bir arayüzde çeşitli fonksiyonları toplamanız, algoritmaları hızlandırmanız ve ünite testlerini genişletmeniz gerekir.

Refactoring genelde sürümleri verdikten sonra yapılır. İlk sürümü verip müşteriyi memnun ettikten sonra oturup daha iyi nasıl yapabilirim diye düşünmek, biraz kafa patlatmak ve ünite testlerini bozmadan yeniden yapılandırmaya gidebilirsiniz. Böylece ürün daha kolay anlaşılır, bakımı kolay ve yeni özelliklerin rahatça eklenebileceği bir hal alır ki hem sizin için hemde sizden sonra gelecekler için sağlam bir alt yapı olur. Bir sonraki projenizi yaparken bu alt yapıları kullanır, üretim zamanını yarıya indirebilirsiniz.

İşte Reusing bu aşamada devreye giriyor. Dizayn Pattern’leri, hazır modüller, temalar, şablonlar, program parçaları, fonksiyonlar, testler ve aklınıza gelebilecek daha pek çok şey tekrar kullanılabilir. Oturup koca bir güvenlik modülünü tekrardan yazmaktansa bir önceki projede yazdığınız güvenlik modülünü refactoring yaparak yeniden kullanılabilir hale getirmek daha kısa sürecektir.

Kural olarak; yazdığınız bir fonksiyonun tekrar kullanılabileceğini tahmin ediyorsanız, refactoring yapmanız şarttır. Böylece üretim maliyetlerini azaltmış oluruz. Firmanın büyüklüğü yada projelerin sayısıda sizin için bir kıstas olmasın. Zaten topu topu iki projemiz var refactoring ile zaman harcamaya gerek yok diye düşünebilirsiniz. Fakat daha fazla projeler almak, projeleri zamanında teslim etmek, büyümek ve uzun süreli bir firma olma vizyonumuz varsa bu yöntemleri muhakkak kullanmamız gerekir. Böylece piyasada adından iyi söz edilen, köklü bir firma olursunuz.

Ben her zaman değişimden ve yenilikten yanayım. 10 senedir kullanılan iş süreçlerini değiştirmekten kaçınmam. Tabii ki öncesinde bir analiz ve maliyet-fayda analizi yaparım. Bir heykeltıraş gibi olanı yontmayı veya yeni şeyler ekleyerek geliştirmeyi her zaman düşünürüm. Biraz sanat biraz da mühendislik ile daha iyisini daha kısa zamanda üretmek için yollar ararım. Örneğin açık kaynak projelerde sizin kullanabileceğiniz bir sürü modül olabilir. Birileri sizin yaşadığınız problemleri zaten yaşamış ve çözmüşdür. Hatta o çözümleri refactoring yaparak herkesin kullanabileceği hale bile getirmiştir. Arayıp bulmak size kalıyor.

Yazılım Uzmanı olarak sizin kariyeriniz için de iyi olan tarafları var. Öncelikle yöntemleri öğreniyorsunuz, bunları tekrar uygulamak sizin için çocuk oyuncağı olacaktır. Özgeçmişinize refactoring ve reusing sonucu firmanıza ne kadar yarar sağladığınızı yazabilirsiniz. Örneğin “Falan projede uyguladığım refactoring ve reusing yöntemleri ile görevlerimi %30 daha az zamanda bitirdim. Projenin tamamlanma sürecini de %15 hızlandırdım” gibi. Bu tür başarılar yazacağınız ön kapakta çok yararlı olur. Bold yazılmış kelimelerde dikkati çekmek için iyi bir yöntemdir. Ama lütfen dürüst olmaya özen gösterin.

Hepinize bu yolda kolay gelsin.

Posted in Bilişim, Türkçe.