Yeniden yapılandırılan kod - Code refactoring

Gelen bilgisayar programlama ve yazılım tasarımı , kod yeniden düzenleme mevcut yeniden yapılanma sürecidir bilgisayar kodu -changing faktoring dış davranışını değiştirerek olmayangastroözofageal. Üstlenmeden tasarımı, yapı ve / veya uygulamayı geliştirmek amaçlanmaktadır yazılım (onun işlevsel olmayan onun korurken, nitelikler) işlevselliği . Yeniden düzenlemenin potansiyel avantajları arasında, geliştirilmiş kod okunabilirliği ve azaltılmış karmaşıklık sayılabilir ; Bu artırabilir kaynak kodunun ' ın korunabilirliğeve genişletilebilirliği geliştirmek için daha basit, daha temiz veya daha etkileyici bir iç mimari veya nesne modeli oluşturun . Yeniden düzenleme için başka bir potansiyel hedef, geliştirilmiş performanstır; yazılım mühendisleri, daha hızlı performans gösteren veya daha az bellek kullanan programlar yazmak için süregelen bir zorlukla karşı karşıyadır.

Tipik olarak, yeniden düzenleme , her biri (genellikle) bir bilgisayar programının kaynak kodunda yazılımın davranışını koruyan veya en azından işlevsel gereksinimlere uygunluğunu değiştirmeyen küçük bir değişiklik olan bir dizi standartlaştırılmış temel mikro yeniden düzenleme uygular . Birçok geliştirme ortamı , bu temel yeniden düzenleme işlemlerinin mekanik yönlerini gerçekleştirmek için otomatik destek sağlar. İyi yapılırsa, kod yeniden düzenleme , temel mantığı basitleştirerek ve gereksiz karmaşıklık düzeylerini ortadan kaldırarak yazılım geliştiricilerin sistemdeki gizli veya etkin olmayan hataları veya güvenlik açıklarını keşfetmesine ve düzeltmesine yardımcı olabilir . Kötü yapılırsa, harici işlevselliğin değiştirilmemesi, yeni hataların ortaya çıkması veya her ikisi de başarısız olabilir.

Kod tasarımını sürekli geliştirerek, çalışmayı daha kolay ve daha kolay hale getiriyoruz. Bu, tipik olarak olanla keskin bir tezat oluşturuyor: çok az yeniden düzenleme ve uygun bir şekilde yeni özelliklerin eklenmesine çok dikkat edildi. Sürekli olarak yeniden düzenleme yapma hijyenik alışkanlığına girerseniz, kodu genişletmenin ve korumanın daha kolay olduğunu göreceksiniz.

—  Joshua Kerievsky, Kalıpları Yeniden Düzenleme

Motivasyon

Yeniden düzenleme genellikle bir kod kokusu fark edilerek yapılır . Örneğin, eldeki yöntem çok uzun olabilir veya yakındaki başka bir yöntemin neredeyse bir kopyası olabilir . Bir kez fark edildiğinde, bu tür sorunlar , kaynak kodu yeniden düzenleyerek veya eskisi gibi davranan ancak artık "koku almayan" yeni bir forma dönüştürerek çözülebilir .

Uzun bir rutin için, bir veya daha fazla küçük alt rutin çıkarılabilir; veya yinelenen rutinler için, çoğaltma kaldırılabilir ve paylaşılan bir işlevle değiştirilebilir. Yeniden düzenlemenin yapılmaması teknik borç birikmesine neden olabilir ; Öte yandan, yeniden düzenleme, teknik borcu geri ödemenin başlıca yollarından biridir.

Faydalar

Yeniden düzenleme faaliyetinin faydalarının iki genel kategorisi vardır.

  1. Sürdürülebilirlik. Kaynak kodunun okunması ve yazarının amacının anlaşılması kolay olduğu için hataları düzeltmek daha kolaydır. Bu, büyük monolitik rutinleri tek tek özlü, iyi adlandırılmış, tek amaçlı yöntemlere indirgeyerek başarılabilir. Bir yöntemi daha uygun bir sınıfa taşıyarak veya yanıltıcı yorumları kaldırarak başarılabilir.
  2. Genişletilebilirlik. Tanınabilir tasarım desenleri kullanıyorsa, uygulamanın yeteneklerini genişletmek daha kolaydır ve daha önce hiçbirinin olmadığı yerde biraz esneklik sağlar.

Performans mühendisliği, bir uygulamanın çalışma süresinden ziyade geliştirme süresini en aza indirmeyi amaçlayan geleneksel yazılım geliştirme stratejilerinden kaynaklanan, yazılım şişkinliği olarak bilinen programlardaki verimsizlikleri ortadan kaldırabilir. Performans mühendisliği ayrıca yazılımı, örneğin paralel işlemcilerden ve vektör birimlerinden yararlanmak için üzerinde çalıştığı donanıma göre uyarlayabilir.

Zorluklar

Yeniden düzenleme, mevcut bir yazılım sistemi hakkındaki bilgileri geri almak için yazılım sistem yapısının, veri modellerinin ve uygulama içi bağımlılıkların çıkarılmasını gerektirir. Ekiplerin devri, bir sistemin mevcut durumu ve ayrılan geliştiriciler tarafından verilen tasarım kararları hakkında eksik veya yanlış bilgi anlamına gelir. Daha fazla kod yeniden düzenleme faaliyetleri, bu bilgiyi yeniden kazanmak için ek çaba gerektirebilir. Yeniden düzenleme faaliyetleri, bir yazılım sisteminin yapısal mimarisini bozan mimari değişiklikler üretir. Bu tür bozulma, yazılım sistemlerinin tamamen yeniden geliştirilmesine yol açabilecek sürdürülebilirlik ve anlaşılabilirlik gibi mimari özellikleri etkiler.

Kod yeniden düzenleme etkinlikleri, algoritmalar ve kod yürütme dizileri hakkında veri sağlayan araçlar ve teknikler kullanılırken yazılım zekasıyla güvence altına alınır . Yazılım sistem yapısının iç durumu, veri modelleri ve bileşen içi bağımlılıklar için anlaşılır bir format sağlamak, neyin ve nasıl değiştirilmesi gerektiğine dair üst düzey bir anlayış ve daha sonra rafine görüşler oluşturmak için kritik bir unsurdur.

Test yapmak

Rutinlerin hala beklendiği gibi davrandığından emin olmak için yeniden düzenlemeden önce otomatik birim testleri ayarlanmalıdır. Birim testleri, tek bir atomik işlemle gerçekleştirildiğinde büyük yeniden düzenleyicilere bile istikrar getirebilir . Birden çok projeyi kapsayan güvenli ve atomik yeniden düzenleme işlemlerine izin vermek için ortak bir strateji, tüm projeleri monorepo olarak bilinen tek bir havuzda depolamaktır .

Yerinde birim testi ile, yeniden düzenleme, küçük bir program dönüşümü yapma, doğruluğunu sağlamak için test etme ve başka bir küçük dönüşüm yapma yinelemeli bir döngüdür . Herhangi bir noktada bir test başarısız olursa, son küçük değişiklik geri alınır ve farklı bir şekilde tekrarlanır. Birçok küçük adımla program, olduğu yerden olmasını istediğiniz yere gider. Bu çok yinelemeli sürecin pratik olması için testlerin çok hızlı çalışması gerekir, yoksa programcı zamanının büyük bir bölümünü testlerin bitmesini bekleyerek harcamak zorunda kalır. Aşırı programlama ve diğer çevik yazılım geliştirme savunucuları, bu aktiviteyi yazılım geliştirme döngüsünün ayrılmaz bir parçası olarak tanımlar .

Teknikler

İşte bazı mikro yeniden düzenleme örnekleri; bunlardan bazıları yalnızca belirli diller veya dil türleri için geçerli olabilir. Daha uzun bir liste Martin Fowler'ın yeniden düzenleme kitabında ve web sitesinde bulunabilir. Birçok geliştirme ortamı, bu mikro yeniden düzenleme işlemleri için otomatik destek sağlar. Örneğin, bir programcı bir değişkenin adını tıklayabilir ve ardından bir bağlam menüsünden "Encapsulate field" refactoring'i seçebilir . IDE daha sonra, tipik olarak makul varsayılanlar ve kod değişikliklerinin bir önizlemesi ile ek ayrıntılar ister. Programcı tarafından onaylandıktan sonra kod boyunca gerekli değişiklikleri yapacaktır.

  • Daha fazla anlayışa izin veren teknikler
    • Program Bağımlılık Grafiği - veri ve kontrol bağımlılıklarının açık temsili
    • Sistem Bağımlılığı Grafiği - PDG arasındaki prosedür çağrılarının gösterimi
    • Yazılım zekası - mevcut uygulama içi bağımlılıkları anlamak için ilk durumu tersine mühendislikle elde edin
  • Daha fazla soyutlamaya izin veren teknikler
    • Kapsülleme alanı - alıcı ve ayarlayıcı yöntemlerle alana erişmek için kodu zorla
    • Türü genelleştir - daha fazla kod paylaşımına izin vermek için daha genel türler oluşturun
    • Tip kontrol kodunu durum/strateji ile değiştirin
    • koşullu
    polimorfizm ile değiştirin
  • Kodu daha mantıklı parçalara ayırma teknikleri
    • Bileşenleştirme, kodu açık, iyi tanımlanmış, kullanımı kolay arayüzler sunan yeniden kullanılabilir anlamsal birimlere ayırır.
    • Extract sınıfı , kodun bir kısmını mevcut bir sınıftan yeni bir sınıfa taşır.
    • Daha büyük bir yöntemin bir bölümünü yeni bir yönteme dönüştürmek için çıkarma yöntemi. Kodu daha küçük parçalara bölerek daha kolay anlaşılır. Bu aynı zamanda işlevler için de geçerlidir .
  • Adları ve kodun yerini iyileştirme teknikleri
    • Yöntemi taşı veya alanı taşı – daha uygun bir sınıfa veya kaynak dosyaya taşı
    • Yöntemi yeniden adlandır veya alanı yeniden adlandır - adı, amacını daha iyi ortaya çıkaran yeni bir adla değiştirmek
    • Yukarı çekin – nesne yönelimli programlamada (OOP), bir üst sınıfa geçin
    • Aşağı itin – OOP'de bir alt sınıfa geçin
  • Otomatik klon algılama
  • Donanım yeniden düzenleme

    Yeniden düzenleme terimi başlangıçta yalnızca yazılım kodunun yeniden düzenlenmesine atıfta bulunurken, son yıllarda donanım tanımlama dillerinde (HDL'ler) yazılan kodlar da yeniden düzenlendi. Terimi donanım yeniden düzenleme donanım dilleri kod üstlenmeden için bir kestirme terim olarak kullanılır. HDL'ler çoğu donanım mühendisi tarafından programlama dilleri olarak kabul edilmediğinden , donanım yeniden düzenlemesi, geleneksel kod yeniden düzenlemesinden ayrı bir alan olarak düşünülmelidir.

    Analog donanım tanımlarının ( VHDL-AMS'de ) otomatik olarak yeniden düzenlenmesi Zeng ve Huss tarafından önerilmiştir. Yaklaşımlarında, yeniden düzenleme, bir donanım tasarımının simüle edilmiş davranışını korur. İyileştiren işlevsel olmayan ölçüm, yeniden düzenlenmiş kodun standart sentez araçları tarafından işlenebilmesi, ancak orijinal kodun yapamamasıdır. Dijital HDL'lerin yeniden düzenlemesi, manuel yeniden düzenleme de olsa, Synopsys üyesi Mike Keating tarafından da araştırılmıştır . Amacı, tasarımcıların üretkenliğini artıran karmaşık sistemlerin anlaşılmasını kolaylaştırmaktır.

    Tarih

    "Yeniden düzenleme" teriminin yayınlanmış literatürde bilinen ilk kullanımı, William Opdyke ve Ralph Johnson tarafından Eylül 1990'da yayınlanan bir makaledir . Griswold'un Ph.D. tezi, Opdyke's Ph.D. 1992 yılında yayınlanan tezde de bu terim kullanılmıştır. Yeniden düzenleme kodu onlarca yıldır gayri resmi olarak yapılmış olsa da, William Griswold'un 1991 Ph.D. Doktora tezi, işlevsel ve prosedürel programların yeniden düzenlenmesi üzerine ilk büyük akademik çalışmalardan biridir ve bunu , tüm teori ve makineler uzun süredir program dönüştürme sistemleri olarak mevcut olmasına rağmen, William Opdyke'nin nesne yönelimli programların yeniden düzenlenmesi üzerine 1992 tezi izlemektedir . Bu kaynakların tümü, yeniden düzenleme için yaygın yöntemlerin bir kataloğunu sağlar; yeniden düzenleme yöntemi, yöntemin nasıl uygulanacağına ilişkin bir açıklama ve yöntemi ne zaman uygulamanız gerektiğine (veya uygulamamanız gerektiğine) ilişkin göstergelere sahiptir.

    Martin Fowler'ın kitabı Refactoring: Improving the Design of Existing Code kanonik referanstır.

    "Faktoring" ve "factoring out" terimleri, en azından 1980'lerin başından beri Forth topluluğunda bu şekilde kullanılmaktadır . Leo Brodie'nin Thinking Forth (1984) kitabının Altıncı Bölümü bu konuya ayrılmıştır.

    Aşırı programlamada, Extract Method yeniden düzenleme tekniği, Forth'taki faktoring ile temelde aynı anlama sahiptir; bir "kelimeyi" (veya işlevi ) daha küçük, bakımı daha kolay işlevlere bölmek.

    Yeniden düzenleme işlemleri, CVS veya SVN gibi yazılım havuzlarında kaydedilen karmaşık yazılım değişikliklerinin kısa tanımlarını üretmek için sonradan yeniden yapılandırılabilir.

    Otomatik kod yeniden düzenleme

    Birçok yazılım düzenleyicisi ve IDE , otomatik yeniden düzenleme desteğine sahiptir. Test kodunun yanı sıra uygulama kodunu da yeniden düzenlemek mümkündür. İşte bu düzenleyicilerden birkaçının veya sözde yeniden düzenleme tarayıcılarının bir listesi .

    Ayrıca bakınız

    Referanslar

    daha fazla okuma

    Dış bağlantılar