İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Onder Teker
on_der_tek_er@yahoo.com

Refactoring

Refactoring, bir yazılımı dışa davranışını değiştirmeden iç yapısını yeniden düzenleme anlamına geliyor. Yani çalışan ama kötü yazılmış kodu kimseye çaktırmadan değiştirmek demek. Bir program ilk yazıldığında mükemmel olabilir. Ama daha sonra bir şeyler ekledikçe giderek karmaşıklaşır, daha doğrusu bozulur. Hatta yazılım ilk geliştirildiğinde, hızlı yapılmış olması nedeniyle veya sistemin ilk bakışta tam olarak anlaşılamamasından ötürü iyi yapılandırılmamış olabilir. Bu durumda eklenen her özellik yazılımı daha da kötü bir duruma getirebilir.

Burada çözüm Redesign, yani programı tekrar yazmak olabilir. Ama bu kolay, hatta çoğu zaman mümkün değildir. Her şeyin yeniden yazılması durumunda da daha sonra eklenen her şey bu yapıyı da bozacaktır. Çözüm, progam bozuldukça veya iyi olmayan tarafları farkedildikçe değişiklikler yapmaktır. Bu değişiklikler bütün sistemi etkileyecek yeniden yapılanma biçiminde olmayabilir. Bir kaç nesnenin eklenmesi, bir nesnin ikiye bölünmesi veya iki ayrı nesnenin birleştirlemesi, method veya property ekleme veya çıkarma şeklinde olabilir. Sistem değiştikçe kod da yavaş yavaş değişir ve güzelleşir.

Refactoring'in ikinci bir avantajı daha var : Reusable Components üretmek, yani var olan nesnelerden tekrar kullanıbilir nesneler çıkarmak. Diyelim ki bir modülü gerçekleştirmek için yazdığınz kodun bir kısmı başka bir modulde hatta projede kullanılabilecek kodlar içeriyor. Bu durumda o kodu diğerlerinden ayırmak, bu ayrılan bileşeni iki tarafta da kullanmak gibi bir yola gidilebilir. Bu sayede aynı şeyler her yerde tekrar tekrar yapılmamış olur. Kod tekrarı, özellikle hatalı kodun tekrarı yazılımın bakımını son derece güçleştirilir. Her yere dağılmış her yerde farklı bir şekilde kullanılan ama temelde aynı şeyi yapın koda parçalarında değişiklik istendiğinde veya bir bug ortaya çıktığını bütün kodu değiştirmek gerekir. Oysa ortak bileşenler ortaya çıkartılabilirse değişiklik veya bug fix sadece bir yerde yapılır ve sistem kısa sürede istenen yönde değişir.

Bence refactoring'in en önemli faydası psikolojik olandır. Baştan süre baskısı deneyimsizlik ve beceriksizlik sonucu kötü yazılmış kod, hatta başta çok iyi olup sonradan bozulmuş kod insanlarda çalışma şevkini kırıcı etki yapar. Daha kötüsü, bozuk kodla çalışan geliştiriler bozuk kod yazmaya devam ederler. Yazılımın içerisindeki kötü kod bu sayede yeni kötü kodlar üretmiş olur. Oysa yazılımın iyi olduğuna kanaat getiren geliştirici kendisi de iyi kod yazmaya gayret eder. Temiz yere kimse çöp atmaz. Bir kaç çöp gördüğümüz yere bir çöp de siz atarsınız. Nasılsa orayı pisleten siz değilsiniz. Siz kendiniz daha önce pislettiğini yeri daha sonra daha da dağıtırsınız. Ama temiz tutmayı başarabildiğiniz yere çöp atmaya çekinirsiniz.

Refactoring, insanları hatalı sistem kurma korkusundan da kurtarır. "Şimdilik öyle kalsın sonra düzeltirim!" diye düşünebilirsiniz. Bazı programcılar hiç tasarım yapmadan kod yazmaya girerler, sonuç berbat bir kod olur. Bazıları da her şeyi ince ayrıntısına kadar planlarlar ancak bu sefer de iş zamanında bitmez. İşte refactoring tekniğini kullanın kişi, önce bir Pre-Design (ön tasarım) yapar. Sonra yeri geldiğikçe tasarımı değiştir. Böylelikle ilk tasarımı yaparken hatalı bir şey düşünmüş olmaktan korkulmaz. Tasarımıdan fazla zaman aldığı gerekçesiyle uzak duranlar da sadece ön tasarımın yeterli olması nedeniyle biraz daha planlı kod yazmaya yönelebilirler. Yanlış tasarımdan korkulmaz. Hele tasarımda olmayan bir değişikliğin müşteri tarafından istenmesinden veya öngörülmeyen bir sorun çıkmasından korkulmaz. Çünkü her şey her zaman düzeltilebilir. Refactoring aslında kimsenin her şeyi doğru olarak tasarlayamayacağı gerçeğinden yola çıkar.

"Ben titiz bir insan değilim, niye durup dururken ortalığı toplayayım?!", diyenlere bir çift sözüm var. Ben de değilim! Özel yaşamımda son derece dağınık bir insanım, odamın ve masamaın hali bunu kanıtlıyor. Program yazarken de temiz ve düzenli davranmam. Gerekmedikçe tasarım yapmam, önemli olan işin bitirilmesidir. Ama odamda veya masamda bir şey bulamamya başladığımda, yani dağınıklık görüntüyü bozmasının yanırısıa beni bir işi yapmamı da engellemeye başladığında odamı toplarım. Odamın her zaman düzenli olması gerekmez. Ama belli aralıklarla, özellikle önemli bir iş yapmadan önce ve vakit bulduğum zaman odamı düzenlerim. İşte refactoring budur. Bir eksikliğin veya aksaklığın gerektiği zaman veya vakit buldukça giderilmesi. Belli aralıklarla temizlik yapılmazsa yaşanılan ortamlar her çöplüğe döner. Ama çözüm titiz davranıp her şeyi yerli yerine koymaya azami gayret göstermek de zaten yanlıştır. Aşırı titizlik bir ruh hastalığıdır. Evin insanların yaşamımını rahat hale getirmek için var olduğuu gerçeğini unutup insanları evin hizmetine vermek yanlıştır. Aşırı düzen meraklılığı diktatörlüktür. Oysa her türlü sapma yanlışlık bozukluk sistemde var olmalıdır. Ancak sapma ve bozukluk zaman zaman düzeltilmeli ve işler belli aralıkla rayına konulmalıdır. Hiç bir temizlik ve düzenleme yapmamak da pisliği beraberinde getirir. Bir seneyi aşan her kod belli aralıklarla düzeltilmezse çöplük olur. Hiç kimse çöplükte rahat çalışamaz. Refactoring, titiz olmayan insanların pislik içinde yaşamaktan kurtulması için tek yoldur.

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır