BootcampHackathonHiring ChallengeTüm Etkinlikler
İş İlanlarıEğitimlerŞirketler
Refactoring Nedir?

Refactoring Nedir?

Refactoring nedir? Refactoring nasıl yapılır? Techcareer.net olarak Teknoloji Yeteneğinin Kod Günlüğü ile teknoloji dünyasındaki merak ettiklerinizi yanıtlıyoruz.
Techcareer.net
Techcareer.net
07/02/2024
1 Dakika

Refactoring Nedir?

Yazılımlar yaşam döngüleri sürecinde az veya çok ancak sürekli olarak değişim geçirir. Yazılımların uzun yıllar kullanılması üzerinde farklı yazılımcıların çalışmasına neden olur. Bununla birlikte kullanılan teknolojilerdeki gelişmeler ve zaman içerisinde yazılımda yapılan geliştirmeler kötü koda sahip bir yazılım ortaya çıkarabilir.

Elbette hiçbir yazdığı kodun ileride diğer yazılımcılar tarafından kötü kod olarak nitelendirilmesini istemez. Yazılım geliştirme aşamasında belirli yöntemler takip edilerek en iyi ürünü ortaya çıkarmak hedeflenir. Ancak bu her zaman yeterli olmaz. Bu durumda yazılan kodlar yazının devamında daha detaylı açıklanan refactoring işlemine ihtiyaç duyar.

Refactoring, kodun yeniden düzenlenmesidir. Mevcut olan kodun işlevlerini değiştirmeden, sorunlu kısımları belirleyip daha iyi hale getirme çalışmasıdır. Kod içerisinde yer alan işlevsiz kısımlar kaldırılır, daha iyi bir şekilde yazılabilecek olan kodlar düzenlenir. Yazılımın gelişen teknolojiye uyumlu hale getirilmesi, kod okunabilirliğinin ve performansının artışı gibi geliştirmeler amaçlanır.

Refactoring sürecinde koda yeni işlevler eklenmesi amaçlanmaz. Kısaca var olan kodu daha iyi bir hale getirme işlemidir. Çalışan bir koda neden refactoring uygulaman gerekebileceğine yakından bakalım.

Refactoring Neden Yapılır?

Hali hazırda çalışan bir yazılımı neden değiştirmeye ihtiyaç duyulacağı konusunda aklında soru işareti olabilir. Yazılım geliştirme sürecinde zaten yazılımcılar yazabilecekleri en temiz, en performanslı, okunabilir ve geliştirilebilir kodu yazmayı amaçlar.

Her ne kadar en iyi şekilde kod yazmaya çalışılsa da, yazılımın kodunun yazılması ürün geliştirmenin sadece bir aşamasıdır. Geliştirici ekibin yazılımı belirli bir süre içerisinde, belirli finansal çerçevelerin içerisinde geliştirmesi gerekir. Yazılımın teslim tarihine yetiştirilmesi ve sunulan finansal imkanlar yazılımın bazı noktalarının pek temiz olmamasına sebep olur.

Zamanın dar olması, planlamadan tutun kod yazımına kadar yazılımcıyı kısıtlarken, finanslar koşullar ise proje üzerinde çalışan kişi sayısından tutun yazılımın yaşam döngüsü süresince harcayacağı kaynak ile ilgilidir. Üstelik bu sebepler kodun ilk yazımında olduğu gibi devam eden süreçte de geçerlidir. En başta temiz kod yazılmış olsa bile sonraki bakım sürecinde zaman ve finansal şartlar kodun giderek karmaşık, okunması zor bir hale gelmesine neden olabilir.

Refactoring’e ihtiyaç duyulmasının bir diğer sebebi de teknolojide yaşanan gelişmelerdir. Yıllar önce yazılan kod şu anda çalışıyor olabilir. Hatta geliştirildiği dönemde son derece iyi bir performans bile göstermiş olabilir. Buna rağmen daha iyi bir alternatifi ortaya çıkmış olabilir. Yazılım üzerinde yapılacak geliştirmelere daha iyi entegre olacak hale getirilebilir.
 

Kodu Ne Zaman Refactor Etmek Gerekir?

Üzerinde çalışılan kodun refactor edilmesinin zamanı geldiği birkaç uyarı ile kendisini belli eder. Bu belirtiler yazılımda “code smell /kod kokusu” terimi ile ifade edilir. Bu uyarılar yazılımcı ekip tarafından dikkate alınmalıdır.

Temiz kod yazma konusunda geliştiriciler tarafından birkaç prensip ortaya atılmıştır. Üç kuralı (Rule of Three), DRY (Don’t Repeat Yourself) gibi prensipler temelde kod tekrarının önüne geçerek temiz kod yazılmasını amaçlar. Aynı zamanda kodunun bu prensiplere uymadığı durumlar refactor zamanının geldiği anlaşılır.

Üç Kuralı, yazdığın kodun içinde bir kod modeli üçüncü kez tekrar ediyorsa kodun refactor edilmesi gerektiği ilkesiyle hareket eder. Üç kuralı geliştiriciyi ortak kalıtım, class ve interface kullanımına yönlendirir. DRY ise yazılım içerisinde her şeyin tek bir kez yapılmasını öğütleyen yazılım geliştirme ilkesidir.

Refactoring Nasıl Yapılır?

Kodun refactor edilme süreci sağlam bir planlama aşaması ile başlar. Ortada hali hazırda çalışan bir yazılım, bu yazılımın devam eden bir bakım süreci ve yazılıma kazandırılması gereken yeni işlevler vardır. Sahip olunan geliştirici gücünün refactor süreci için diğer iş süreçlerini aksatmadan planlı bir şekilde bu iş için ayrılması gerekir. Refactoring işlemi mevcut günlük kod geliştirme sürecinin bir parçası haline getirilmelidir.

Kodda minor değişiklikler yaparak bu değişikliklerin sık sık test edilmesiyle refactoring işlemi gerçekleştirilir. Refactoring süreci katı kurallara sahip değildir. Her ekip kendi içerisinde kendilerine özgü bir süreç geliştirilebilir. Refactoring sürecinde kabul görmüş bazı teknikler vardır.

Kırmızı, Yeşil, Refactor (Red, Green, Refactor)

En popüler ve en yaygın olan refactoring tekniğidir. Test odaklı yazılım geliştirme yaklaşımının refactor sürecine uygulanmasıdır. Test odaklı yazılım geliştirme kodu yazmadan önce testlerin yazılmasını gerektiren bir yaklaşımdır. Bu refactoring tekniği üç ayrı aşamadan oluşur:

  • Kırmızı olarak adlandırılan ilk aşamada ne geliştirilmek istendiği belirlenir. Yazılan kod istenilen şekilde olursa geçebileceği test hazırlanır.
     
  • İkinci aşama yeşildir. Hazırladığınız testten geçebilecek kod yazılır.
     
  • Üçüncü aşama olan refactor aşamasında yazdığımız ve testten geçen kodun nasıl daha iyi olabileceği üzerine çalışma yapılır.

Metotları Düzenleme (Composing)

Kod içerisinde yer alan uzun ve anlaşılması zor olan büyük sınıf ve metotları refactor etmeye odaklanır. Çıkarma (extraction) ve Inline olarak iki şekilde uygulanır.

  • Çıkarma işleminde kod küçük parçalara ayrılır. Bu küçük parçaların her biri ayrı metotlara atanır ve gerektiğinde çağırılır.
     
  • Inline refactor etmede ise metot sayısı azaltılması amaçlanır. Gerekli olmayan metotlar çıkartılır.

Soyutlamayla Refactor Etmek

Refactor etmen gereken kod tabanı oldukça büyükse soyutlama (abstraction) ile refactor etmeyi düşünebilirsin. Amaç soyutlama ile kod tekrarının önüne geçilmesi böylelikle kod tabanında yer alan gereksiz kalabalığın azaltılması amaçlanır. İki farklı teknik uygulanarak gerçekleştirilir.

  • Yukarı çekme yöntemi ile alt sınıfların benzer işi gerçekleştiren metotları bir üst sınıfa (superclass) çekilir.
     
  • Aşağı itme metodunda ise bir üst sınıfta (superclass) yer alan metot, alt sınıfların tamamında değil de bir veya birkaçında kullanılıyorsa metot alt sınıfa itilir.

Nesneler Arasında Özellikleri Taşıma

Kodun içinde yer alan sınıflar arasındaki fonksiyonelliğin yeniden düzenlenmesi ile ilgilidir. Örneğin bir metot kendi sınıfından çok başka sınıflar tarafından kullanılmış olabilir. Yapılması gereken metodu en çok kullanıldığı sınıfa taşımaktır. Eski yerinde hala ihtiyaç duyuluyorsa yeni yerinden çağırılmalı. Eski yerinde ihtiyaç duyulmuyorsa silinebilir.

Metotları Basitleştirme

Metotların karmaşıklıklarını azaltarak mantığı daha kolay anlaşılabilir ve sürdürülebilir hale getirme çalışmasıdır. Uzun metotları daha kısa, temiz ve daha kısıtlı bir amaç için yoğunlaşmış hale getirmek amaçlanır.

Hazırlık Amaçlı Refactoring

Üzerinde çalıştığın kod tabanına yeni bir geliştirme eklerken veya büyük değişiklerden önce kodun refactor edilmesi gerektiğini düşünüyorsan bu işlemlerden önce kodu refactor etmek daha iyi bir seçenek olabilir.

İleride yapılacak olan geliştirmeler için daha basit, okunabilir, temiz kod bırakmak amaçlanır. Koduna her yeni işlev eklendiğinde refactor uygulanabilir.

Refactoring Sürecinde Nelere Dikkat Edilmeli?

Yapılan düzenlemelerin gerçekten işe yaradığından, refactoring sürecinin doğru ilerlediğinden birkaç kontrol ile emin olabilirsin. Düzenlemelerin sonucunda kod temiz hale gelmelidir. Önceki okunması zor karışık durum ortadan kalkmalı. Refactoring sürecinde yazılıma yeni işlevler eklenmemiş olmalı ya da aktif olarak kullanılan işlevlerinden kayıp olmamalı. Yazılan kod her adımda tekrarlanan testlerden geçmelidir. Refactoring programlama sürecinin bir parçası haline getirilmelidir.

Refactoring Avantajları Nelerdir?

Refactoring işlemi yazılımın ömrünü, performansını ve anlaşılabilirliğini artırır. Gelecek geliştirmelere düzgün bir zemin hazırlar. Birkaç madde ile refactoring’in avantajlarına bakalım:

  • Refactoring kodu basit ve anlaşılabilir hale getirir. Kodu okuması kolaylaşır böylelikle sonraki geliştiriciye uyum sağlama konusunda yardımcı olur.
     
  • Gelecekte çıkan hataların tespitini kolaylaştırır. Bakım sürecini hızlandırır.
     
  • Geliştirme yaparken geliştiricinin eski kod hakkında bilgi sahibi olması gerekir. Basit kod ile daha kolay uyum sağlanır.

Refactoring Dezavantajları Nelerdir?

Dezavantajlar konusuna değinecek olursak hali hazırda çalışan ve uzun yıllar üzerine eklemeler yapılmış bir kodu yeniden düzenlemek ek iş gücü gerektirir. Benzer şekilde dezavantajları da maddelemek gerekirse:

  • Refactoring süreci sıkı bir planlama gerektirir. Geliştirme ekibinin bu iş için ek zaman ayırması diğer geliştirme süreçlerini sekteye uğratabilir, yavaşlatabilir.
     
  • Kodu yeniden düzenleme sürecinde temiz kod yazmak ana hedef olduğundan geliştiriciler kod üzerinde daha fazla zaman harcar.
     
  • İş gücünün refactoring’e aktarılması finansal olarak da kaynak ayrılması anlamına gelir.
    Doğru bir şekilde refactoring yapılmazsa yeni sorunlara yol açabilir.

Refactoring Avantaj Dezavantaj Değerlendirmesi

Avantaj-dezavantaj değerlendirmesi yapıldığında hiç şüphesiz refactoring işleminin uzun vadede

sağladı faydalar öne çıkar. Yazılımın yaşam döngüsünde, yeni özellikler eklemekten tutun, bakım çalışmalarına kadar tüm süreçlere pozitif etkileri vardır.

Bir yazılım uzun yıllardır kullanılıyorsa ve kullanılmaya devam edilecekse pek çok yazılımcı çalışacaktır. Sürekli değişen bu döngüde temiz kod miras bırakmak esas amaç edinildiğinde gelecek olan yazılımcının da projeye uyum süreci kolay ve kusursuz olur. Bu da yazılımın geliştirme sürecinin hızlanmasına ve yeni özelliklere daha fazla zaman ayrılmasına sebep olur.

Refactoring yazılım geliştirmeye yeni başlayanlar için karışık bir konu olarak gözükebilir. Kod yazma konusunda deneyim kazandığında bir işi yapmanın farklı yolları olduğunu daha iyi görebileceksin. Yazılım geliştirme kariyerinde sıfırdan geliştirilmeye başlayan bir projeye dahil olma imkanına her zaman sahip olamazsın. Çoğu zaman bir ekibe dahil olduğunda, hali hazırda var olan bir proje üzerinde çalışacaksın. Üzerinde çalışman gereken kod tabanı yıllar önce yazılmaya başlanmış, bir çok geliştirici tarafından geliştirmeler yapılmış durumda olabilir. Böyle bir durumla karşılaştığında kodun refactor edilmesinin önemini daha iyi kavrayacaksın.

Üzerinde çalışılan kod gittikçe karışık hale geliyorsa, temiz kod anlayışından uzaklaşmışsa, koda yeni işlevler kazandırmak zorlaşıyorsa o kodun gözden geçirilmesinin zamanı gelmiştir. Bir kodu refactor etmek için yukarıda birçok yöntem sıralanır. Hepsinin temelinde ise kodu daha basit ve temiz hale getirmek yatar. Kodun sorunlu parçalarını tespit edip ufak değişiklikler şeklinde sürekli test ederek refactoring sürecini yürütmelisin.

Hedefin teknoloji alanında bir kariyere sahip olmaksa, Techcarrer.net tarafından hazırlanan tamamen ücretsiz Bootcamp eğitimlerine katılabilirsin. Veri analistliğinden test mühendisliğine, oyun geliştiriciliğinden backend geliştiriciliğe kadar birçok alanda hazırlanan Bootcamp’ler ile hayalindeki kariyer için ilk adımı atabilirsin.

SSS

Refactoring her zaman tercih edilir mi?

Yazılımı refactor etme işlemi, düzenlenmesi gereken çok fazla kod parçası olduğunda ve yapılan değerlendirmeler sonucu refactor çalışmasının dezavantajları, avantajlarından daha ağır geldiği durumlarda tercih edilmeyebilir. Kodun yeniden yazılmasına karar verilebilir.

Teknoloji alanında iş ilanlarını nereden takip edebilirim?

Techcarret.net iş ilanları sayfası ile teknoloji alanındaki en güncel iş ilanları seçeneklerini takip edebilirsin. Filtreler sayesinde sana en uygun ilanları sıralayabilir, başvuru gerçekleştirebilirsin.

Hiring challenge nedir?

Hiring challenge, sana verilen süre zarfı içerisinde, şirketler tarafından hazırlanmış Android, iOS ve algoritma problemlerini çözmeye çalıştığın yarışmadır. Yaratıcılığını önplana çıkarman beklenen hiring challenge’lar ile hayalindeki şirketlerde çalışma imkanı kazanabilirsin.

Hiring Challenge’lara kimler katılabilir?

Techcareer.net tarafından düzenlenen hiring challenge’lara teknoloji alanında kariyere sahip olmak isteyen ve hali hazırda teknoloji alanında kariyere sahip olan herkes katılabilir.


Daha Fazla

Neural Networks (Sinir Ağları) Nedir? Nasıl Çalışır?

Neural Networks (Sinir Ağları) Nedir? Nasıl Çalışır?

Neural Networks (Sinir Ağları) nedir? Neural Networks ne işe yarar? Techcareer.net olarak Teknoloji Yeteneğinin Kod Günlüğü ile teknoloji dünyasındaki merak ettiklerinizi yanıtlıyoruz.
23.12.2024
6 Dakika

TECHCAREER

Hakkımızda
techcareer.net
Türkiye’nin teknoloji kariyeri platformu

SOSYAL MEDYA

LinkedinTwitterInstagramYoutubeFacebook

tr

en

Tüm hakları saklıdır
© Copyright 2024
support@techcareer.net
İşkur logo

Kariyer.net Elektronik Yayıncılık ve İletişim Hizmetleri A.Ş. Özel İstihdam Bürosu olarak 31/08/2024 – 30/08/2027 tarihleri arasında faaliyette bulunmak üzere, Türkiye İş Kurumu tarafından 26/07/2024 tarih ve 16398069 sayılı karar uyarınca 170 nolu belge ile faaliyet göstermektedir. 4904 sayılı kanun uyarınca iş arayanlardan ücret alınmayacak ve menfaat temin edilmeyecektir. Şikayetleriniz için aşağıdaki telefon numaralarına başvurabilirsiniz. Türkiye İş Kurumu İstanbul İl Müdürlüğü: 0212 249 29 87 Türkiye iş Kurumu İstanbul Çalışma ve İş Kurumu Ümraniye Hizmet Merkezi : 0216 523 90 26