Kod yeniden düzenleme zamanı nasıl gerekçelendirilir?


17

Çok büyük bir projeniz var.

Proje kesinlikle Core Framework ve diğer bölümlerde bazı kod yeniden düzenleme işlemlerine ihtiyaç duyuyor. Projenin başlangıcında yeniden düzenleme için belirlenen zaman yoktu. Ancak zamanla ve 40'tan fazla geliştirici ortaklaştı ve projeden ayrıldı. Benim açımdan vazgeçilmez.

Uygun bir yazılım geliştirme prensibini savunmak ve savunmak için kilit noktalarınız nelerdir?


9
70k LOC çok büyük bir proje değil. Ben küçük
diyorum

@ BЈовић Doğru, 10k LoC'nin birkaç katına sahip tek kaynaklı dosyaları miras aldım
James

1
Ahh. 10 bin LOC dosyası okumak büyük bir kitap okumak gibidir. Sonuna gelindiğinde, başlangıcı unuttun. Projemde bir adet 10k LOC miras dersim var ve her değişiklik bir acı. Birkaç olması nasıl görüntüleme olamaz!
BЈовић

Yanıtlar:


19

Eski veya brownfield uygulaması üzerinde çalışırken, her şeyi yeniden şekillendirmeyi umarak bir "bahar temizliği" yapmak caziptir. Bu hiçbir şekilde kaynakların haklı kullanımı değildir. Sonuçta, çalışan yazılımdaki gelişimi durdurmak (sadece çalışma kodu yeniden düzenlenebilir) nasıl değerlendirilebilir? Büyük Yeniden Düzenleme Aşamasında harcanan sürenin daha sonra ödeyeceğini ve projede dejenerasyona neden olmayacağını garanti edebilir misiniz?

Bir fili nasıl yersin? Her seferinde bir ısırık. Yeni bir özellik uygulamanız veya bir hatayı düzeltmeniz gerektiğinde, bu parçanın yeniden geliştirilmesi gerekip gerekmediğini görürsünüz. İzci kuralının dediği gibi: "Kamp alanını her zaman bulduğunuzdan daha temiz bırakın." Yeniden düzenleme ayrı bir aşama olmamalı, günlük gelişimin bir parçası.

Bu kalite kültürünü geliştirme ekibiyle tanıştırdığınızda, kalite artacaktır. Bundan sonra yönetime haklı bir şey yoktur.


Uff, hiç bir fil denemedim
Jackie Chan

Bu zihniyetimi projemde de kurmaya çalışıyorum. Yaklaşan değişiklikler için bazı büyük değişiklikler yapmamız gerekiyor, ancak devam ederken gerekli yeniden düzenleme işlemini yapmak istiyorum. Hiçbir nokta bir gelişme sağlanmadığı * büyük üstlenmeden aşamasını çekmeye Orada çalışıyor" kartı.
yaltaklanmak

3
İzci kuralýný yaptýk. Küçük ısırıklar kalmayıncaya kadar çalışır. O kadar dolaşmış parçalar var ki üzerinde zaman harcamaktan başka bir yol yok.
atoth

13

Genel olarak, kodda yapmanız gereken başka bir değişikliği etkinleştirmek için veya kodda bir değişiklik yapıldıktan sonra doğal bir temizleme adımı olarak yeniden düzenleme yapılmalıdır. Bu durumda, haklı gösterecek bir şey yok. Yeniden düzenleme, proje üzerinde çalışma yapma sürecinin bir parçasıdır. Yeniden düzenleme yaptığınız zaman üzerinde çalıştığınız göreve zaman verilir.

Küçük artışlarla yapılmazsa, o zaman gerçekten yeniden düzenleyici değil, ha?


8

Tüm iyi yanıtlar burada - ama buna bir iş boyutu ekleyebilir miyim? Sana neden / so-ne diye sorayım ? (sivri saç patronunuzu (PHB) düşünün :)

PHB: neden?
Siz: İşlerin düzeltilmesini kolaylaştıracak
PHB: Ne olmuş yani?
Siz: Verimi artıracak - kapıdan daha hızlı yeni yapılar alacak mıyız?
PHB: Ne olmuş yani?
Siz: Hata ... Daha mutlu müşteriler mi?
PHB: WTF?
Siz: Yani artan öneriler, daha fazla memnuniyet, 
     düşük geri dönüş nedeniyle daha fazla kar
PHB: Oh! Kulağa hoş geliyor. Ama sadece "kulağa" hoş görebilir miyim?
Siz: WTF?
PHB: Bana parayı göster! (yani sayılar lütfen)
Siz: Oh! Brb ... (gidip vakanızı yapmak için bazı numaraları basit e-tabloya koyun)

Temel olarak bir iş durumu yapmalısınız - düşünce sürecinizi açıklığa kavuşturmak için sayıları çalıştırın ve sayıları 'fayda'yı' objektif olarak yansıtacak şekilde alın. Ayrıca ne kadar zaman alacağını, yaklaşık maliyetleri de öğreneceksiniz. Buna değerse, yeşil sinyali alırsınız ve belki de inisiyatife öncülük edersiniz :)

Eğer her şeyi nasıl ölçebilirim diye düşünüyorsan bu kitabı dene


6

Yeniden düzenleme, diğer tüm faaliyetler gibi, bunun için de açık bir hedefe sahip olmalıdır. Bu hedef netleştikten sonra, mevcut proje durumunu ve yaşam döngüsü aşamasını dikkate alırsınız. % 80 tamamlanmış,% 30 zamanlamanın gerisinde kalan bir geliştirme projesi için, daha önce belirlenen hedefe dayalı olarak yeniden düzenleme çabalarını haklı göstermelisiniz. Bu örnekte, kod parçaları birim test edilmişse ve bir geliştirme ortamında iyi çalışıyorsa, yeniden düzenlemeyi haklı çıkarmak zordur.

40 geliştiricinin bıraktığı göründüğü kadar dramatik olmayabilir. Bu geliştiricilerin gözden geçirilmiş ve test edilmiş çalışma kodunu teslim etmelerini beklerdim. Yani, bu kodda bilinen sorunlar olmadığı sürece, olduğu gibi bırakacağım. Fikir, sizinki gibi büyük bir projede, standartlar ve prosedürler olduğunu ve kodun tam bir karmaşa olmadığını umuyorum.

Yeniden düzenleme işleminin, tekrarlanan tüm testler olmasa bile birçok kişiye neden olacağını unutmayın. Ayrıca, bu boyutun yeniden düzenlenmesi bir veya iki üst düzey üye tarafından yapılamadığından, yeniden düzenleme, mevcut olmayan sorunları ortaya çıkarabilir. Bu ihmal edilmemesi gereken bir risktir.

Bunu söyledikten sonra, öngörülemeyen bir durumda bir projeye görev eklemek olağandışı değildir. Dolayısıyla, geliştiriciler bir nedenden dolayı ortadan kaybolduysa, bu özel bir doğa olayı olarak kabul edilir ve durumu düzeltmek için ne olursa olsun alınmalıdır. Yangın veya deprem gibi muamele görür.

Özetle, iyi bir sağlam teknik nedenden ötürü büyük bir projede büyük çalışma kodunu yeniden düzenlemezdim, özellikle de çoğu projenin genellikle geç durumda olduğunu biliyoruz.


3
Bir proje sadece başarısız testler umut olabilir
Rig

2
@ Eğer yoksa, biraz yazarak başlardım. Bulduğunuz her hata, düzeltilmesini yakalayacak bir test yazın. Bir yerden başlamalısın. "Hiçbir şeyi kırmadım" diyemiyorsanız hiçbir şeyi yeniden düzenlemenin bir anlamı yok.
John Lyon

6

Uzun ve devasa bir duvarın önünde olduğunuzu düşünün. Diğer tarafa gitmelisin.

Ya bir kapı inşa etmek için duvarı yeniden düzenlersiniz ya da etrafından dolanırsınız.

Her iki çözüm için de zamanı tahmin edin ve yeniden düzenleme için gerekçenizi alın.

İkinci çözümdeki zamanı duvarın diğer tarafına gitmesi gereken insan sayısıyla çarpmayı unutmayın.


1

Diğer cevaplardan birinde okurken, bu fili her seferinde bir ısırık yiyin. Ekip üyelerinin coğrafi olarak dağıldığı büyük bir uluslararası projenin denetlenmesine katılıyorum. Yazılımın ilk iki versiyonunu oluşturduktan sonra ekip yaklaşımlarının, kodlama tarzının ve bina çözümlerinin tutarsız olduğunu kabul etti. Yeni kurallar ve konvansiyona göre başvurunun yeni bölümlerini yazmayı kabul ettiler ve eski kodun bir kısmını (ve ancak o zaman) değiştirmek zorunda kaldıklarında, önce yeni sözleşmeyi karşılamak için başvuruyu yeniden düzenlediler. Her şey gayet iyi çalışıyor. Yeniden düzenleme süreci neredeyse 5. ayındadır, kodun bir kısmı yeniden düzenlenmiştir, bazıları hala değildir. Yeni özellikler zamanında getirildi, müşteriler mutlu, devs mutlu, QA ekibi de mutlu. Bir kazan kazan durumu :)


1

Yeniden düzenlemenin ana noktası, gelecekte işleri kolaylaştırmaktır. Sürekli olarak yeniden düzenleme yapılmadan az sayıda ve çok az sayıda uzun vadeli birden fazla projeyi karşılaştırmazsanız, yeniden düzenleme kârını gösteremezsiniz. Genel olarak geliştiriciler arasında, yeniden düzenlemenin bakım maliyetlerini ve değişikliklerin uygulanmasını azalttığı kabul edilir, ancak bunların iş açısından kanıtlanması zordur. Yeniden düzenleme yapmanın temel nedeni Teknik Borcu azaltmaktır .

Ayrıca, yeniden düzenleme sürekli bir süreç olmalı ve yeniden düzenleme için zaman harcaması geliştirme görevinin kendisine dahil edilmelidir. Özel "yeniden düzenleme görevi" olması iyi bir fikir değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.