Team Dynamics'te Refaksiyon Rolü
Mühendislik takımlarında etkili işbirliği, dışsal davranışını değiştirmeden büyük ölçüde net ve uygulanabilir kodlara bağlıdır.Bu elde etmek için en değerli uygulamalardan biri, teknik bir egzersizden daha kolaydır - doğrudan takımlarla iletişim kurmaları, diğer çalışmalarını incelemeyi ve kodbase'in mülkiyetini değiştirmesini içerir.
Kod kaotik ve nötr olduğunda, geliştiriciler zihinsel enerji parsing karanlık isimleri boşa harcarlar, tasarım hakkında yapıcı tartışmalardan ziyade niyetle tartışırlar ve her etkileşimde yan etkiler.Bu bilişsel yük yavaşlar.Bir ekip üyesi, bir şeyi bozma korkusu için kırılgan bir yönteme dokunabilir. Kod yorumları, tasarım hakkında yapıcı tartışmalardan ziyade niyetle ilgili tartışmalarla ilgili tartışmalarla ilgili tartışmalarla ilgili tartışmalarla ilgili tartışmalarla ilgili tartışmalarla ilgili tartışmalar ve ahlaki güvenlendiriciler.
Yeniden düzenleme, bu dinamikleri sürekli olarak geliştirmek ve kodlanabilirliği geliştirmekle, takımlar, işbirliğin doğal hale geldiği bir temel yaratırlar. İyi faktörlü bir sınıf veya işlev tek bir gerçek kaynağı olarak hareket eder - bazı isimler, parametreler ve iç mantık açıkça bir dosyayı açabilir ve hemen amacı kavrayabilir.
Yeniden faktörleme ve işbirliği arasındaki bağlantı, yazılım mühendisliğinde araştırma tarafından destekleniyor. Zürih Üniversitesi'nden bir çalışma, takım verimliliğini ve hataları ile ilişkili kod kalitesi ölçümlerinin daha iyi bir şekilde geliştirilmesini sağladı. Low-quality kodu, özellik teslimiyet olasılığını artırıyor.Refaksiyon doğrudan bu ölçümleri geliştirir, virtual döngüsü yaratır: daha iyi kod → işbirliği için daha iyi bir gelişme → daha iyi kod.
Güvenli Kodlar için Temel Prensipleri
Taktiklere dalmadan önce, kararların belirsiz olduğu bir pusula olarak hareket eder.
Her Seviyede Tek Sorumluluk
Tek Sorumluluk Prensi (SRP) bir modül, sınıf veya işlevin değişmenin bir nedeni olması gerektiğini belirtir. Pratik anlamda, bu, her bir kod parçasının bir konsepti veya görevi ele geçirmesi gerektiği anlamına gelir. 200-line bir işlevi beş küçük fonksiyona kırdığınızda - bir tanımlayıcı isim ile ilgili olarak, kodu hemen okumak, test etmek ve kod incelemeleri sırasında tartışmak için kodunuzu yapın.
“Herhangi bir aptal, bir bilgisayarın anlayabileceği kod yazabilir. İyi programcılar insanların anlayabileceği kodu yazmaktadır.” – Martin Fowler).
Konsolide Naming Conventions
İsimler yazabileceğiniz en güçlü belgedir.Bir değişken isim olarak adlandırılır:0) veya [[Dönetici:0) Okuyucuyu zihinsel haritaya dönüştürmeye zorlar. ”(Üye:2) veya [[DÜyetim:2) ve kod kendi tanımlı kurallarla uygular.
Miniksiyon Duplication
Duplicated code birçok kötülüklerin köküdür. Aynı mantık birden çok yerde ortaya çıktığında, herhangi bir hata düzeltme veya geliştirme her kopyada yeniden çoğaltılmalıdır - tekrarlanan bloklar paylaşılan işlevleri veya faydalı modüllere kopyalanmalıdır.
Favor Komability Over Inheritance
Derin sınıf hiyerarşileri, değişken olmayan kod değiştirmeden davranışları değiştirmek için daha kolay hale getirir.Bu, Open/ Closed Prensle uyumlu hale getirmek için daha kolay hale getirir.Bir çekme isteğine yorumlandığında, bir kompozit tasarım ebeveyn-çocuk yöntemi overrides zincirinden daha kolay bir şekilde yapılır.
Common Rephaing Techniques
Yeniden deneme tek bir etkinlik değil, ancak kanıtlanmış dönüşümlerin bir aracı kutusudır.Bu desenlerin bilmek, mühendislere güven ve hassaslığa yardımcı olur.
Türleme Yöntemi
Bir yöntem çok uzun olduğunda veya net bir isim ile tanımlanabilir bir bölüm içerseniz, bu bölümü kendi yöntemine çıkarın ve okunabilirliği artırır. Örneğin, bir yöntem [[Döneticileri doğrulama, indirimler uygular ve bir veritabanına devam eder. ”, [[DüzDÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
Rename Değişken / Fonksiyonlar
yanıltıcı bir isim kötü bir uygulamadan daha kötüdür. Rename özgürce - Modern IDEs tüm kodbase'de güvenli bir yeniden adlandırılmasını sağlar.A function called ESFLT:11). aslında bir alt toplamı belirler mi? Rename it toASIFLT:12. ve son toplamı hesaplamak için yeni bir işlev yaratır.
Magic Number with Sembolic Constant
Sayılar bağlamsız dağınık (örneğin,FLT:13) “sihirli sayılar”dır. Onları sürekli olarak, 444D: 14) Bu, kodu kendi kendine teslim eder ve gelecekteki değişiklikler için değer merkezileştirir.
Decompose Durumal
Birden çok ve /OR koşulu ile karmaşık durumlar her koşulu iyi isimli bir işleve dönüştürmek zor olabilir: 03.15. Bunun yerine, [[ŞUygunlukT:16) Bu teknik de koşulları yeniden uygulanabilir ve test edilebilir hale getirir.
Encapsulate Collection
Bir sınıf doğrudan içsel bir liste veya sözlük ortaya çıktığında, callers onu değişkenleri kıran şekillerde değiştirebilir.Refaksiyon okuma-sadece görüş veya doğru ek /remove yöntemleri ekleyerek.Bu, verilerin bütünlüğünü korur ve arayüz açık hale getirir.
Bu tekniklere daha derin bir referans için, Martin Fowler'in [Döneticileri:0)Refaksiyon: Mevcut Kod Tasarımının İyileştirilmesi[Dönem: 1) ([Dönem: 2)Martin Fowler - Refaksiyon[Dış[Döneticiler)
Refaksiyonun Etkisini Ölçmek
Yeniden düzenleme, sadece ham çıktıya bakarsanız maliyet merkezi gibi hissedebilir ( kodların kısımları değişti, zaman harcandı). Yararlı ve yararlarını takip etmek için, takımlar işbirliği ile ilişkili kaliteli metriklere odaklanmalıdır.
Cyclomatic Kompleksiity
Bu ölçüm, bir işlev aracılığıyla lineer bağımsız yol sayısını ölçer. Yüksek karmaşıklık, daha fazla şube, daha zor test ve SonarQube gibi daha zihinsel çaba, KodClimate veya ESLint bir eşin üzerinde karmaşıklık ile ilgili olarak daha karmaşıklık sağlar (yaklaşık 10–15).
Kod Churn
Churn önlemler, genellikle bir dosya değişikliği. Yüksek churn ama düşük karmaşıklık? Bu, zayıf özellikleri gösterebilir. Low churn ama yüksek karmaşıklıklara işaret eder mi?Bu, böceklere dokunduğunda ortaya çıkması muhtemel.Refaksiyon, kodbazı tüm takım için daha istikrarlı ve öngörülebilir hale getirir.
Test Coverage ve Test Hız
Sık sık kod daha test edilebilir hale getirir. Daha küçük işlevleri içine mantık çıkarırsanız, uygulama yollarını gerektiren entegrasyon testlerine bağlı olarak milisans testlerini doğrulayarak testlere güvenebilirsiniz.Bir veritabanına hızlı bir şekilde çalışan bir süit, geliştiricilerin sık sık sık koşmasını teşvik eder, kod değerlendirmeleri sırasında da güven artırır - denemeler zihinsel olarak basitleştirme yollarını doğrulamayı gerektirir.
Zaman Resolve (MTTR) Bir Bug
Daha temiz kod daha hızlı bir şekilde silmeye yol açıyor. Stripe tarafından yapılan bir çalışma, geliştiricilerin bakım ve debugging konusundaki zamanlarının% 42'sini harcadığını buldu.Refagginglere yatırım yapan takımlar genellikle MTTR'de bir azalma görüyor çünkü kod daha kolay ve kök nedenler izole etmek daha kolay.
İş akışlarına Yeniden İttifak Etmek
Yeniden düzenleme, gelişim sürecinin alışkanlık bir parçası haline geldiğinde, ayrı bir “temizleme aşaması değil.
Boy İz Kuralı
Amerika'nın Boy İzleri bir kurala sahiptir: “Birkaç haftadan fazla kamp alanı onu bulduğunuzdan daha temiz.”Bu kodu özel bir şekilde geri yüklemeden bir dosyaya dokunursanız, küçük bir gelişme yapabilir.
Kod Yorumları sırasında Yeniden İttifak
Kod incelemeleri yapısal gelişmeler önerebilmek için ideal bir zamandır. “Bu işlev çok uzundur”, [[Çalışkanlık:0) nasıl onu kırmak için: “Mevcut mantığı bir yardımcı yönteme çıkarmak için.
Özel Emekli Biletleri
Bazen bir kod parçası o kadar rahat ki, bir özellik sırasında ona dokunacaktır. Bu durumda, ayrı bir teknik borç bileti yaratır.Diğer özellikleri yanında, her sprint'in% 20'sini bakım için tahsis eder.Bu sinyaller kalitelinin aynı derecede değerli işlevsellikle değerlenir.
Otomatik Araçlar ve Sürekli Entegrasyon
Linters (ESLint, Pylint, RuboCop), formatçılar (Prettier, Black, gofmt), ve statik analizciler (SonarCloud, CodeClimate) her çekme isteğine otomatik olarak uymalıdır.
Gerici Direnişin Yeniden Bağışlanması
İyi niyetlerle bile, takımlar algılanan riskler, zaman basıncı veya anlayış eksikliği nedeniyle yeniden faktörlemeye karşı koyabilirler. Bu itirazlara doğrudan erişim kültürü oluşturmak için gereklidir.
“Refaksiyona yeniden dönme zamanımız yok.”
Bu en yaygın itirazdır. Karşıtlık, daha yüksek teknik borç seviyeleri ile takımların yeni özellikleri uygulamasını sağlayan teknik borçlar atlamaktadır.A 2018 study by adminFLT:0).
“Refaksiyon böcekleri tanıtabilir.”
Bu geçerli bir endişedir, ancak her küçük değişiklikten sonra testleri azaltılabilir.Yeniden önce, IntelliJ'de mevcut kodun iyi test kapsamasına izin verin.
“Mevcut kod işe yarıyor – bunu değiştirir mi?”
Doğruluk, kodun yalnızca ölçütleri değildir, ancak sık sık sık sık sık kullanılan başlangıç veya ürün takımlarında daha fazla uyum sağlar.Refaksiyonu geliştirir ) kodun tasarımı). Bu, özellikle de yeni gereksinimlere adapte edilebilir hale getirmektir.
“Bir ortak stil rehberimiz yok.”
Kabul edilen standartlar olmadan, herhangi bir rektör öznel hissediyor.Bir takım olarak bir stil rehberi oluşturmak veya uygulamak için zaman ayırın (örneğin, Google’ın tarzı rehberleri, diliniz için deyimsel sözleşmeler).Bir kez stil tutarlı, refaktör kararları kişisel olarak mekanik hale gelir.
Vaka Çalışması: Gerçek Dünya Kodbase'i Nasıl Yeniden Geliştirdim
Dört yıldan fazla inşa edilen orta ölçekli e-ticaret platformu düşünün.12'nin mühendislik ekibi 3 orijinal yazardan büyüdü. codebase vergi hesaplaması için kopya-paste mantığıyla kurtulmuştu, tutarsız adlandırma (bazı dosyalar geldi) ve geçerliliği olan bir monolitika.
Kod incelemeleri, yanlış yazılmış değişken bir isimden dolayı oluşan özellikle acı verici bir üretimden sonra, ekip yeniden faktörlemeye yatırım yapmaya karar verdi.
Üç adımlı bir yaklaşımla başladılar:
- [FONT:0) Ek testler [Dönetici:0) Bir şeye dokunmadan önce, kritik atık için entegrasyon testleri yazdılar.
- [FONT:0]Öyle hizmet verenler; [Döntilmişler, 4 adet dersten ayrılırlar: ﴾4﴿
- [FONT:0)Standartize adlandırma[Dönetici:0)[Döneticiler için standartlaşma; PascalCase for classes)
Sonuçlar dramatikdi. Kod inceleme süresi ortalama 6 saat sürdü. Yeni bir kira için zaman üç haftaya düştü.Bug oranı aşağıdaki çeyrekte% 40 azaldı. Ekip daha yüksek memnuniyet bildirdi çünkü artık birbirlerinin kodunu uzun tartışmadan anlayabilirdi.
Bu durum refaksiyonun lüks olmadığını gösteriyor - takım işbirliği ve uzun vadeli hızda pratik bir yatırım.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Yeniden düzenleme, bir serbest bırakmadan önce yapılması gereken bir zaman temizleme değildir.Bu, aynı anda kod okuma ve takım işbirliğini güçlendiren sürekli bir disiplindir.Tek sorumluluk, tutarlı adlandırma ve çoğaltma geri yükleme gibi ilkeleri uygulayarak, takımlar tartışmak için güvenli ve kolay bir kod tabanı oluşturur.
Burada belirtilen stratejiler – Boy İzni'den geri çekilmek için özel bir yeniden faktörleme kuralından – herhangi bir mühendislik ekibi için geliştirmek isteyen bir yol haritasına başlamak: Bir dosyayı değiştirmek, basit bir yeniden adlandırma veya ekstrak yöntemi uygulamak ve deneyimlerinizi tekrarlamak için ne kadar kolay bir şekilde izlemek.Rezervatifler içinde paylaşmak, birçok küçük gelişmenin kümülatif etkisi sadece kodunuzu dönüştürmeyecektir, aynı zamanda ekibinizin birlikte nasıl çalıştığını da seçin.
[FONT:0)Daha fazla okuma için, inceleme: Mevcut Kod Tasarımının iyileştirilmesi[Dönetici:2) Martin Fowler ve ) tarafından, Robert C. Martin tarafından, her iki takım da daha derin bir şekilde işbirliği yapmayı sevdikleri kod hakkında rehberlik etmeyi tercih eder.