Başarılı Bir Yeniden İnceleme için Aşamayı Belirleyin
Büyük mühendislik projelerinde yazılım sistemleri doğal olarak zaman içinde bir teknik borç almak: tekrarlanan mantık, monolithic sınıflar, ⁇ d bağımlılıklar ve eski tasarım kalıpları. Yeniden değerlendirme, yol haritalarını korumak ve bu tür borcun tespit edilmesidir.
Ancak, büyük kodbase'lerde yeniden faktörleme yorumları çok zor. kod hacmi, modüllerin birbirine bağlılığı ve regresyonların yeniden tanımlanması riski başarılı bir yeniden faktörleme yapmak için kapsamlı bir mavi baskı sağlar - hazırlık ve değerlendirmeden yüksek ölçekli mühendislik ortamlarda kullanılan uygulamalardan alındı.
Aşama 1: Stratejik Hazırlık
Planlama yapmadan yeniden faktörleme incelemesine girmek, boşanma çaba ve kırık yapılara yol açıyor. Hazırlık, incelemenin odaklandığını, ölçülebilir ve güvenli kalmasını sağlar.
Define Scope ve Hedefleri
Büyük projeler bir süpürücüde yeniden faktörlenebilir. açıkça hangi modüller, bileşenler veya alt sistemler incelemenin kaplanacağı anlamına gelir.
- [FONT:0] Statik analizden gelen sıcak nokta: SonarQube, CodeClimate veya NDepend bayrak dosyaları, yüksek karmaşık, uzun yöntemler veya büyük sınıflar gibi.
- [FONT:0)Değişim frekansı:[Dönetici:[Dönetici:0) Değiştirilebilirlik frekansı:[Dönetici:[Dönetici:0) Çoğu zaman değişen modüller (bakım tarihine göre sıralanır) sürekli adaylardır, çünkü devam eden özel iş için sürtünmeyi azaltırlar.
- [FONT:0)Performance şişenecks: Profilleme verileri, mimari değişikliklerin hız iyileştirmeleri sağlayacak alanları gösterebilir.
Belirli sonuçları belgeleyin: e.g., X'in miras hizmetlerinin klomatik karmaşıklığının %20'si, fatura modülünde tekrarlanan kodun% 90'ını ortadan kaldır veya bağımlılık enjeksiyon modeli ile zor bir yapılandırma yerini alır.Bu metrics daha sonra başarıyı doğrulayacaktır.
Doğru Takıma benzeyen
Yeniden deneme, çapraz işlevli perspektifler gerektirir. şunları içerir:
- [FONT:0)Subject-matter uzmanları[Döneticileri) iş mantığını ve domain gerekliliklerini anlayan.
- [FONT:0]Kıdemli geliştiriciler[Dönetici ve tarihi hakkında derin bilgi sahibiler – alt etkiler öngörebilirler.
- [0]Mevcut test otomasyon mühendisi mevcut testsuitelerinin sağlam ve yeni testlerin oluşturulabilmesi için.
İdeal grup büyüklüğü üç ila beş kişi. Büyük gruplar analize yol açıyor. Tüm üyeler kısa bir belge verilir ve kod önceden en az 48 saat içinde gözden geçirilir.
Gather Artifacts
İnceleme toplantısından önce tüm malzemeleri toplayın:
- Mevcut kaynak kodu ( sürüm tarihi ile).
- Mevcut ünite, entegrasyon ve son-to-end test süitleri.
- Mimari diyagramlar (ya da miras olarak - boşlukları somutlaştırır).
- Proje tarafından kullanılan kılavuzlar ve stil kılavuzları.
- Herhangi bir önceki refaksiyon denemeleri veya bilinen ağrı noktaları sorun takip edenlerden.
Bu, "yerinde" durarak incelemeyi önleyene mi engel oluyor? veya "halk API'leri adlandırmamıza izin veriliyor mu?"
2. Aşama 2: The Review Process – Tanımlama ve Analyzing Code Kokuları
İncelemenin özü, kod kokularının sistematik olarak tespit edilmesi ve ciddiyetlerinin değerlendirilmesidir. Bu bölüm orijinal kontrol listesine beton örnekler ve tekniklerle genişletmektedir.
Büyük Projelerde Yaygın Kod Kokuları
Her kokunun ayrı bir remediasyon stratejisi vardır.Rektörün işi en çok zarar verenlere öncelik vermektir.
Karmaşık Kod
Genellikle en kolay kazan.Aynı veya yakın-identical bloklara göre, sınıflar veya dosyalar. büyük projelerde, çoğaltma sık sık sık, hiçbir şeyin var olduğu yerde kopyalanmadan ortaya çıkar.
Uzun Yöntemler ve Tanrı Sınıfları
20-30 çizgiden daha uzun bir yöntem genellikle çok fazla yapıyor. Daha küçük, tek sorulu bir sınıf" veya sistem hakkında çok fazla şey bilen (örneğin 5000-line orkestra hizmeti) işbirliği nesnelere bölünmelidir.
Shotgun Cerrahi ve Divergent Change
Shotgun cerrahi: tek bir değişiklik, birçok farklı dosyada kod değiştirmek gerektirir. Diverjant değişikliği: Birden fazla nedenden dolayı bir sınıf değişikliği. Her ikisi de zayıf modülerliği gösterir. İlgili sorumlulukları uyumlu modüllere ve ilgili olmayanlara taşır.
Farklı Interfaces ile Alternatif Sınıflar
Aslında aynı şeyi yapan iki sınıf ama farklı apis ortaya çıkarır. Onları ortak bir arayüz veya soyut bir sınıf arkasında birleştirin. Bu, çağrıcılarda koşullu mantık azaltır.
Büyük Sınıf Hierarchies
Derin miras ağaçları (örneğin, 10 seviye derin) karmaşıklığı ve kırılganlığı artırmak. Yeniden değerlendirme, temel sınıfların ilgili varsayılan davranışlarla nerede bloklanmış olabileceğini belirlemelidir.
Etkisi Değerlendirme: Ripple Go ne kadar Uzak?
Yeniden faktörlemeye karar vermeden önce, patlama yarının tekniklerini tahmin edin:
- [FONT:0)Dependency grafiği analizi:[Dönetici, grafikiz veya IDE, çağrıcıları ve çağrıları görselleştirmek için araçlar kullanıyor.
- [FONT=0]Statik çağrı analizi: [Dönetici: FONT=FONT=0) pylint for Python, reSharper for C#) tüm referansları listelemek için.
- [FONT:0)Integration test kapsamı: Testin bir kullanım yolunu kapsamazsa, bu yolun yüksek test kapsama alanıyla ilgili alanları bozma riski yüksektir.
- [FONT:0)Öylege bayraklar:[Dönetici: 0) Kod aktif bir bayrak arkasındaysa, üretim davranışı üzerindeki etkisi yuvarlan sırasında sıfırdır - ancak bayrak daha sonra etkinleştirilebilir olabilir.
Her aday yeniden faktörleme için, bir risk seviyesi (düşük, orta, yüksek) dış bağımlı sayısına ve otomatik regresyon testlerinin varlığına dayanarak sipariş edilebilir. Low-risk değişiklikleri hemen yapılabilir; yüksek riskli olanlar, çok adımlı bir plan gerektirir.
3. Aşama: Planlama ve Stratejileri Yeniden Yönetme
Bir zamanlar kokular ve etkiler kataloglanırken, ekip küçük, geri dönüşümlü değişiklikler bir dizi tasarlar. anahtar, yeni bir mimariyi sıfırdan yeni bir şekilde ortaya çıkarmaktır - bu yeniden faktörleme başarısızlığının en yaygın nedenidir.
Teknikleri Kullanabilmek için
Kokuyu ve takımın konfor seviyesini oynayan tekniği seçin:
- [FONT=0)Extract Method:[Dönetici:[Dönetici:0) Bir grup inline kodu bir yönteme dönüştürür.
- [FONT:0)Rename Değişken/Method: Basit ama güçlü. Tüm çağrıcılar güncellemelerini sağlamak için yeniden faktörleme desteği ile IDE'leri kullanın.
- [FONT:0)Pull Up / Push Down:) Süper sınıf ve alt sınıf arasındaki alanları veya yöntemleri, fikre veya yeniden dağıtım sorumluluklarını azaltmak için.
- [FONT:0)Deplace Situational with Polymorphism:) Eliminate switch/if-else zincirleri alt gönderi kullanarak.Bu ağır bir dönüşümdür; önce iyi bir test kapsamı gerektirir.
- [FONT:0)Decompose Durumal: Karmaşık boolean ifadelerini tanımlayıcı yöntem aramalarına dönüştürür.
- [FONT:0)Introduce Parat:[Dönetici:[Dönetici:0) Bir yöntem birçok ilgili parametreye sahip olduğunda, onları yeni bir isim türüne paketler.
Test Kapak: Güvenlik Net
Test olmadan refaksiyon, tek bir çizgi değiştirmeden önce ameliyat gibidir, inceleme bunu doğrulanmalıdır:
- Bir birim testleri paketi modül için mevcuttur, parçalar için en az% 80 şube kapsamı yeniden faktörlenmiş durumda.
- Bütünleme testleri anahtar dış sözleşmeleri ve yan etkileri kapsar (örneğin, veritabanı yazıyor, API yanıtları).
- Test paketi iki dakika altında mühendis tarafından yerel olarak çalıştırılabilir (daha uzun bir süre CI tabanlı doğrulama için plan).
Test kapsamı yetersizse, refaksiyon projesinin ilk adımı, mevcut davranışı karakterize etmek için test yazmaktır. Bu "kücudizasyon testi" kodu tipik girişlerle çalıştırmayı ve çıktıları yakalamayı içerir, sonra bu çıktıları testlerde bulun.
Afet Değişiklikleri: Sadece Güvenli Yol
Büyük mühendislik projeleri genellikle sürekli dağıtıma güveniyor.Refaksiyon, hızlı bir şekilde gözden geçirilecek kadar küçük olan isteklere (PRs) kırılmalı ve kolayca geri gönderilmeli.
- Sadece bir sorumluluğu dokun.
- İlgili test güncelleştirmeleri veya ekleri ekleyin.
- Mevcut testlerden başarısız olmadan CI'de çalıştırın.
- Bir kod incelemesine eşlik edin (Refaksiyon incelemesinden farklı) doğruluğa odaklanır.
Büyük değişiklikler için "strangler Figürü deseni" kullanın: yavaş yavaş yavaş yeni parçalar yerine yeniler ile geçiş yaparken. Bu özellikle mikro hizmet mimarlıkları için ilgili. Örneğin, ServiceA'dan bir yöntem alın, sonra yeni bir ServisB'yi tanıtın ve daha sonra eski kodu emekli edin.
Refaksiyon Buluşması için En İyi Uygulamalar
İncelemenin kendisi işbirliğine dayalı bir atölye olmalı, bir ders değil. Yeterli zaman (2-3 saat tek bir modül için) ve kolaylaştırıcı bir tartışmanın devam etmesini sağlamalıdır.
Bir Yapılı Checklist kullanın
Bu içeren bir çek listesi Dağın:
- Önerilen refaksiyon ortadan kaldırılıyor veya bir veya daha tespit edilen kokuları azaltır mı?
- Dış davranış değişikliklerini doğrulamadık mı?
- Yeni soyutlar tutarlı ve açıkça mı adlandırılıyor?
- ölçülebilir bir gelişme var mı (örneğin, kod azaltımı hatları, karmaşık azaltma)?
- Test paketi hala yeterli midir? Yeniden faktörleme sırasında ortaya çıkan kenar davaları için testler eklemeli miyiz?
Encourage İşbirliği
Her kod bölümünü sunan Rotate. Pair inceleme (iki inceleme taraf yan yana) genellikle ince sorunları daha hızlı yakalar. Eğer ekip uzaktaysa, canlı düzenleme ve nottaker ile paylaşılan bir ekran kullanın.
İş Etkisi tarafından Önce
Tüm kod kokuları eşit değildir. Rank them by:
- [FONT:0] gecikmenin en iyisi: [Dönem: 0,4] Bu koku her gelecek değişikliğine eklendiğinde ne kadar zaman bulunur? Her yeni API uç noktasının yüksek öncelikli bir hedef olduğunu çok kez tekrarladı.
- [FONT:0)Teknik borç ilgi:>[[Dönetici: 1) Bu kodu önümüzdeki değişikliklerde değiştirmek için gerekli ekstra çaba.Performasyonlar haftada veya sprint başına saatler.
- [FONT:0]Risk inaction:[Dönetici:[Dönetici: 1) Koku sonunda bir üretim olayına neden olabilir? Örnek: İki kesintiye neden olan koşullu mantık.
Bu önceliklendirme, takımın çoğu önemli olan konularda çalıştığını sağlar.
Test ve Denetimi Post-Refaksiyon
İncelemenin çalışması, kod üretim benzeri ortamlarda otomatik kapıları geçene kadar yapılmamıştır.
Sürekli İntegra Boru Additions
Yeniden faktörlemeden sonra, CI'yi yeni kaliteli kapıları uygulamak için güncellemek:
- Kompleksi eşiği: Eğer cyclomatic karmaşıklığı herhangi bir yöntemde belirli bir değere sahipse inşa edemez.
- Duplication eşleri: hattın% 3'ünden fazlasının proje boyunca tekrarlanırsa başarısız olur.
- Test kapsamı: yeni veya değiştirilmiş kod üzerinde en az% 70 satır kapsama.
Bu kurallar gelecekteki kokuların yeniden girişini önler.
Performans Ölçümleri
Daha önce ve sonrasında ilgili ölçümler izleyin:
- Zaman inşa edin: refaksiyon veya test süresini azaltmalıdır.
- Memory kullanımı ve geçncy: performansla ilgili refaksiyon için, üretim izleme (örneğin, Prometheus, Datadog) iki haftadan önce karşılaştıran panolar ile.
- Değişim başarısızlığı oranı: Yeniden faktörleme riskli olsaydı, gelecek ay için olay frekansı izleyin.
Ortak Pitfalls ve Them'dan Nasıl Kaçırmak
Katı bir süreçle bile, refaksiyon incelemeleri yanlış gidebilir. Bu tuzakların farkında olun:
Kapsam
İnceleme küçük kokuları hedeflemeye başlar, ancak hızlı bir şekilde tam bir mimari yeniden yazılabilir.ETHFLT:0)Mitigation:[Dönetici: 1 ). herhangi bir değişikliği 300 çizgiden daha büyük bir değişiklik veya 10 dosyadan daha fazla dokunmak, uygulamadan önce refaksiyon liderliği tarafından onaylanmalıdır.
Over-Mühendis
Henüz ihtiyaç duyulmamış tasarım kalıpları tanıtın. Kodu "gelişen" senaryolar için asla gerçekleşmeyebilecek senaryolar için yapmaktan kaçının.*0)Mitigation:[Dönetici:0)[Dönetici:[Dönetici:0)) “ne ihtiyacınız olmayacaksın” (YAGNI) prensibi: sadece şu anda ağrıya neden olan veya sonraki üç sprint’te acıya neden olan ağrıya neden olan bir sonraki üç sprint’lere neden olan bir yeniden faktör.
Not Updating Documentation
Yeniden denemeden sonra, dokümanlar modası geçmiş olabilir.ETHFLT:0)Mitigation:[DDK 1] aynı PR'de belge güncellemelerini içeriyor, ancak kodu veya güncel bir mimari diyagramı ile ilgili bir yorum olsa bile.
Neglecting Non-Functional Gereksinimler
Bazen yeniden kullanılabilirlik geliştirir, ancak performans kötüleştirir (örneğin, yaklaşımı yeniden gözden geçirin.) <0)Mitigation:) Her zaman refaksiyonda bir profilleyici çalıştırılır ve temel olarak karşılaştırır.Eğer performans% 5'ten fazla küçülürse, yaklaşımı yeniden gözden geçirin.
Deeper Learning için Dış Kaynaklar
Üst düzey yeniden faktörleme incelemelerine göre, çalışma referansları belirledi:
- [FONT:0)Refaksiyon: Mevcut Kod Tasarımının iyileştirilmesini Geliştirmek – Martin Fowler) – mekaniklerle yeniden faktörleme modellerinin kesin katalogu.
- [FONT:0]SonarQube Dokümantasyon[Dönem: 1) CI boru hatlarında otomatik kod algılamayı nasıl ayarlayacağı.
- [[Düzzamanlı Kontraksiyon Kanununa göre - Verimli Yaklaşım) - test eksikliği olan kodla çalışmak için pratik kitap.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Büyük bir mühendislik projesinde başarılı bir yeniden değerlendirme, doğru ekibin yaratılması ve süreç hakkında daha azdır: disipline hazırlık, kokuların sistematik tespiti, dikkatli etki analizi, artımlı infaz ve otomatik uygulama. Burada belirtilen yapılandırılmış yaklaşımı takip ederek, doğru ekibin oluşturulması, uygun stratejilerin kullanılması ve test gücünün sürdürülmesi, risk altındaki üretim istikrarının kaldırılması gibi teknik borçların düzeltilmesi. Sonuç, uygulanabilir ve otomatik bir uygulama alanıdır.