ScholarGate
Asistan

Kod Kalitesi ve Yeniden Düzenleme (Refactoring)

Kod kalitesi ve yeniden düzenleme (refactoring), okunabilir, sürdürülebilir ve iyi yapılandırılmış kaynak kod yazma ile mevcut kodun dış davranışını değiştirmeden iç yapısını iyileştirmeye yönelik disiplinli teknikleri kapsar.

PaperMind ile konu bulYakındaMakale ve konu bul
Tools & resources
Slaytları indir
Learn & explore
VideoYakında

Tanım

Yeniden düzenleme (refactoring), bir yazılım sistemini gözlemlenebilir davranışını değiştirmeden ancak iç yapısını iyileştirecek şekilde değiştirme sürecidir; kod kalitesi ise kaynak kodun okunabilirlik, sürdürülebilirlik ve sağlam iç tasarım sergileme derecesidir.

Kapsam

Bu konu, kod okunabilirliği ve adlandırma, kod düzeyinde uyum (cohesion) ve bağlılık (coupling), tasarım sorunlarına işaret eden kod kokuları (code smells), davranış koruyucu yeniden düzenleme (refactoring) kataloğu, güvenli yeniden düzenlemede otomatik testlerin rolü ile standartları değerlendirmek ve uygulamak için kullanılan kod kalitesi metrikleri ve statik analiz araçlarını kapsamaktadır.

Temel sorular

  • Kaynak kodu okunabilir ve sürdürülebilir kılan özellikler nelerdir?
  • Kod kokuları (code smells), yeniden düzenlemenin (refactoring) nerede gerekli olduğunu nasıl işaret eder?
  • Davranışı değiştirmeden veya kusurlar ortaya çıkarmadan yapı nasıl iyileştirilebilir?
  • Kod kalitesi ve zaman içindeki bozulması nasıl ölçülür?

Temel kuramlar

Davranış koruyucu yeniden düzenleme (refactoring)
Yeniden düzenleme (refactoring), riskli büyük yeniden yazımlar yerine, yapıyı kademeli ve güvenli bir şekilde iyileştirmek için her biri testlerle doğrulanmış küçük, davranış koruyucu dönüşümleri sırayla uygular.
Tasarım sezgiselleri olarak kod kokuları (code smells)
Tekrarlayan yüzeysel belirtiler — uzun metotlar, yinelenen kod, büyük sınıflar, özellik kıskançlığı (feature envy) — daha derin tasarım sorunlarını gösteren sezgiseller olarak hizmet eder ve bunları gidermek için belirli yeniden düzenlemeler (refactoring) önerir.

Klinik önem

Yüksek kod kalitesi, yazılımı anlama ve değiştirme maliyetini düşürmektedir ki bu da toplam maliyetinin büyük bir kısmını oluşturmaktadır; sürekli yeniden düzenleme (refactoring) bir kod tabanını uyarlanabilir tutar ve çevik geliştirmeyi sürdürmek ile teknik borcu kontrol etmek için temel bir unsurdur.

Kanıt ve kılavuzlar

ISO/IEC 25010, sürdürülebilirlik ve diğer kalite niteliklerini çerçevelendirmekte, statik analiz araçları ise kodlama standartlarını uygulamakta ve proje kurallarına aykırı kod kokularını tespit etmektedir.

Tarihçe

Yeniden düzenleme (refactoring) uygulamaları 1999 yılında Fowler tarafından sistemleştirilmiş ve sürekli, test korumalı yeniden yapılandırmaya dayanan test güdümlü geliştirme ve çevik yöntemlerle birlikte gelişmiştir; temiz kod işçiliği ve otomatik statik analiz daha sonra kod kalitesi disiplinini pekiştirmiştir.

Tartışmalar

Ne kadar yeniden düzenlemenin (refactoring) haklı olduğu
Ekipler, ne kadar agresif yeniden düzenleme (refactoring) yapılacağını tartışmaktadır: sürekli küçük iyileştirmeler kodu sağlıklı tutar ancak çaba gerektirir, yeniden yapılandırmayı ertelemek ise teknik borç biriktirir; denge, kodun ömrüne ve değişim hızına bağlıdır.

Öne çıkan isimler

  • Martin Fowler
  • Kent Beck
  • Robert C. Martin
  • Steve McConnell

İlgili konular

Temel eserler

  • fowler2018
  • mcconnell2004
  • martin2008

Sıkça sorulan sorular

Yeniden düzenleme (refactoring) bir programın ne yaptığını değiştirir mi?
Hayır. Tanım gereği yeniden düzenleme (refactoring) gözlemlenebilir davranışı korur; okunabilirliği ve tasarımı iyileştirmek için iç yapıları yeniden düzenler. Her dönüşümden sonra davranışın değişmediğini doğrulamak için otomatik testler kullanılır.
Yazılım zaten çalışıyorsa neden kod kalitesine yatırım yapılmalı?
Bir sistemin maliyetinin çoğu, daha sonra onu anlama ve değiştirme aşamasından kaynaklanır; düşük kaliteli kod, gelecekteki her değişikliği yavaşlatır ve hata riskini artırır, bu nedenle kaliteye yatırım yapmak, yazılımın sürdürülen ömrü boyunca karşılığını verir.

Bu kavram için yöntemler

İlgili kavramlar