Diğerleri hızla buna bağlıyken bir kod tabanını nasıl yeniden düzenleyebilirim?


18

Sonunda açık kaynak olacak özel bir projedeyim. Uygulama oluşturma teknolojileriyle yeteri kadar yetenekli birkaç ekip üyemiz var, ancak temiz / güzel ve en önemlisi uzun vadeli sürdürülebilir kod yazabilen özel geliştiriciler değil.

Ben kod tabanı yeniden düzenleme için yola çıktık, ama başka bir ülkede takımda biri olarak düzenli temas halinde değilim bu tamamen ayrı bir şey güncelleme olabilir gibi biraz hantal.

Bir çözümün hızlı iletişim kurmak veya daha iyi PM uygulamaları benimsemek olduğunu biliyorum, ama henüz o kadar da büyük değiliz. Ben sadece kodu temizlemek ve o ne güncelledi güzel birleştirmek istiyorum. Bir şubeyi kullanmak uygun bir plan olabilir mi? En iyi çaba birleştirme mi? Başka bir şey?

Yanıtlar:


35

İnsanların sıklıkla düşünemediği bir şey, temiz bir mimarinin sadece uzun vadeli bakımı hızlandırmakla kalmayıp aynı zamanda şu anda gelişimi hızlandırmasıdır . Değişikliklerinizi "tamamlanana" kadar meslektaşlarınızdan yalıtmaya çalışmayın. Yaptığınız değişiklikler daha üretken olmalarına ve hatalara daha az eğilimli olmalarına yardımcı olacaktır.

İnsanların büyük bir refaktör üstlenirken yaptıkları en sık hata, bir "büyük patlama" da yapmaya çalışmak yerine yeterince sık birleşmektir. Bunu yapmanın doğru yolu, mümkün olan en küçük refactoru yapmak, test etmek, daha sonra meslektaşınızın şubesine birleştirmek ve ona ilerlemeyi dahil edebilmesi için ona değişiklik hakkında bilgi vermektir. İdeal olarak günde bir birleştirme veya en azından haftada bir birleştirme yapıyorsunuz.


17
Evet evet evet. Sadece bir ay süren solo tur-de-force'e gitme isteğine karşı koy, sadece refactor'a ihtiyacın olan kod tabanının tamamen değiştiğini ve tekrar baştan başlaman gerektiğini bulmak için. Her seferinde bir adım daha iyi yapın.
tdammers

Kesinlikle doğru! Büyük refactorings hiçbir yere gitmiyor (bkz. Netscape 6 veya Proje Piramidi )
Andomar

8

Asla "iletişim kurmak için yeterince büyük değilsiniz". Parmaklar yazmayı yapabilirse, dudakların da konuşmayı yapabilir. Günün sonunda teknoloji iyileştirmesi% 85 iletişim ve% 15 tekniktir. Birisiyle zor konuşmalar yapmaktan ziyade orada kodlamayı tercih etmen iyi bir fikir olduğu anlamına gelmez. İletişim aslında yapmaya çalıştığınız şeyin zor kısmıdır, ama bundan kaçınmayın.


İletişim kurmak gerçekten zor değil, mevcut geliştiricinin yavaşlamasını istemiyorum. Aslında, yeniden düzenlenebilir olduğu sürece doğru yolu öğrenmesi gerektiğinden bile emin değilim. Önce programcı değil, başka bir alanda bilim adamı.
Gizli

+1. Bir kod tabanını iletişim
kurmadan

4

Evet, bir şube bunun için iyi bir çözümdür.

Bu konuda bir dal üzerinde çalışmaya başlamanızı ve bu HEADarada akımınızın üzerine temiz bir şekilde uygulanmasını sağlamanızı öneririm (yani değişikliklerinizi kolayca uygulayabildiğinizden ve testlerinizin hala geçtiğinden emin olmak için test aralıklarını ve düzenli aralıklarla birleştirin - - bununla ilgili yardım da arayıngit rereregit ). Sonra bitirdikten sonra rebase ve değişiklikleri içine birleştirmek HEAD.

Bu konuda çalışmaya ne kadar erken başlarsanız, mimariyi değiştirmek gittikçe daha fazla iş haline geldiğinden kod daha soğuk hale gelir. Ayrıca, kod tabanı boyunca dağılmış birçok yeni kodlama örneği olabilir.


1
-1: Hayır. @Karl Bielefeldt'in cevabına bakınız.
Jim

Evet? Karl'la aynı fikirde değilim, bu yüzden hızlı başlama konusunda bir noktaya değindim.
Benjamin Bannier

Ben de "Dallanma ve sonra yeniden birleştirme" diyorum. En iyi ihtimalle, boşa harcanan çaba. En kötüsü, büyük bir karmaşa yapacaksınız.
Jim

3

"Henüz yapma" seçeneğini düşündünüz mü?

Bu işi ayrı bir dalda yapmak muhtemelen en iyi yaklaşım olsa da, kendinizi çizgide büyük bir acı birleştirme için hazırlıyorsunuz.

Diğer çocuklar muhtemelen birçok yeni işlevsellik ekliyor, mevcut işlevselliği değiştiriyor ve muhtemelen bazı işlevleri kaldırıyorlar.

Ana akım geliştirici gelecekteki bir noktada biraz yavaşladığında, refactor için çok daha kolay bir konumda olabilirsiniz.


+1. Kod tabanınız büyük bir akışta ise, büyük bir yeniden yazma denemek için muhtemelen en iyi zaman değildir. Gelişim döngünüzde, işlerin daha sakin olduğu bir zaman seçin.
anon

2

tl; dr - Büyük liglere adım atmanın zamanı geldi. Bir tür domuzun üzerine ruj sürmek onu daha güzel yapmaz, eğer böyle bir şeye girmedikçe ...

İnsanlar sorunu

İlk mesele işlem senkronizasyonudur. Aynı kod üzerinde aynı anda çalışan birden fazla kişiniz varsa, sorunları önlemek için yalnızca bir kurala ihtiyacınız vardır:

Rule 1: Always pull before you merge/rebase

DVCS söz konusu olduğunda, uzak bir dalda (yani ana depoda) değişiklik yapmak zordur ve yerelde değişiklik yapmak çok kolaydır. Her kişi kendi kod eklemelerini sorunsuz bir şekilde bütünün içine sokmaktan sorumludur. 2 kişi aynı anda taahhütte bulunmadıkça, tecrübe etmemelisiniz. Menşe / uzak ana sunucuya erişim taahhüdü yalnızca birkaç geliştirici ile sınırlı olmalı ve uzaktan izleme şubeleri aracılığıyla diğer geliştiricilerden değişiklikler almalıdır.

Kod sorunu

Yaptığınız değişikliklerin kodu bozmadığını nasıl anlarsınız?

Basit cevap ... Yapmadıklarını kanıtlamak için testler yazın. TDD (Test Odaklı Tasarım) düşünce okulunu göz ardı ederseniz, tüm testler kodu kırmadan değiştirmenize olanak tanıyan bir doğrulama düzeyi eklemektir.

Rule 2: Don't make assumptions, write proofs (ie tests).

Buna ek olarak, başlangıç ​​/ uzak ana öğeye geçmeden önce tüm test gamı ​​çalıştırılmalıdır.

Taahhütlerinizi mümkün olduğunca küçük ve kısa tutun. Bu şekilde, daha sonra bir şeyi bozan bir değişikliği geri almanız gerekirse, kodu kırmayan parçaları yeniden uygulamak zorunda kalmazsınız.

Öncelikle bazı organizasyonel yeniden yapılanmalara ihtiyacınız olabilir

Yukarıdaki çözümler kolayca uygulanamıyorsa, büyük olasılıkla öncelikle geliştirme yapısında ele alınması gereken bazı sorunlar vardır.

Projenin sahibi kapıcı olmalıdır. Kesintisiz senkronizasyon sorunları varsa, muhtemelen kesin erişime sahip çok fazla kişi vardır. Linux çekirdeği gibi devasa projelerde bile, yalnızca bir avuç geliştirici başlangıç ​​/ uzak ana veri havuzuna erişim taahhüdüne sahiptir. Taahhütleri yönetmek için aslında çoklu düzeylerde depolar vardır. Hiyerarşik model, projeye dahil edilmeden önce değişiklikleri çeken ve kalitesini doğrulayan ağ geçidi denetleyicilerine sahiptir. Hiyerarşik taahhüt modeli, kaliteden ödün vermeden tek katmanlı modelden çok daha büyük ve daha etkili ölçeklenebilir.

Erişimini taahhüt alamadım devs için, kendi uzaktan izleme dalları oluşturmak için öğrenmelidir (budala ve gitorious bunun için iyidir) devs böylece yapmak kolayca indirebiliriz erişimi taahhüt ediyorum / menşe içine şubeleri entegre. Değişiklikler küçükse, yamalar da aynı şekilde çalışır.

Birleştirme / rebase yapmadan önce değişiklikleri çekme yeteneği, yerel ana dalınızda gelişmediğinizi varsayar. Bunu idare etmenin kolay yolu, kodlamaya başlamadan önce bir ilk çekme işlemi yapmak ve daha sonra bu daldaki tüm çalışmalarınızı yapmaktır. Zor yol, birleştirmeden hemen önce dallamak ve ustayı geri almaktır.

Genel olarak proje için kodlama stilini tanımlayın ve geliştiricilerin onu takip etmesini sağlayın. Katkıda bulunan geliştiriciler, temizliği en aza indirmek için projenin standartlarına / normlarına uygun kod yazmalıdır. Kodlama stili açık bir projede büyük bir ego engeli olabilir. Herhangi bir standart belirlenmezse, herkes kendi tercih ettiği tarzda kodlama yapar ve kod tabanı çok çirkinleşir.

"Efsanevi Adam Ayı" efsanesi

İster inanın ister inanmayın, daha büyük / daha başarılı açık kaynak projeleri demokrasi gibi yürütülmez. Hiyerarşi olarak işletilirler. Bir projenin 8-10 geliştiricinin ötesinde etkili bir şekilde büyüyemeyeceğini söylemek naiftir. Bu doğru olsaydı, Linux Çekirdeği gibi mega projeler olmazdı. Daha derin olan konu, herkese erişim izni vermenin etkili iletişimi ele almayı çok zorlaştırmasıdır.

Efsanevi adam ayının sorunu aslında aşılabilir. Projenizi ordu gibi yürütmeniz gerekiyor. Hiyerarşide birçok seviye vardır, çünkü bireysel insanların sadece bir avuç insanla iletişimi yönetmede gerçekten etkili olduğu yaygın bir bilgidir. Hiçbir kişi 5-7'den fazla kişinin çalışmasını yönetmekten sorumlu olmadığı sürece, sistem süresiz olarak ölçeklenebilir.

En iyi / deneyimli geliştiricileri daha fazla entegrasyon ve daha üst düzey tasarım / planlama yapmakla sınırlayabilir, ancak bu kötü bir şey değildir. Ölçeklendirmenin bir parçası, projenin uzun vadeli bir plana ihtiyacı olduğuna karar vermek için harekete geçiyor. Gelecekteki projelerde en yüksek yatırıma (zaman aynı zamanda bir kaynaktır) sahip olan insanlar, büyük kararlar almakla görevlendirilmelidir.

Artan acılardan geçen açık kaynaklı bir projeyi duymak güzel. Tebrikler ve iyi şanslar.


-1

temiz / güzel ve en önemlisi uzun vadeli bakım kodu.

Deneyimlerime göre temiz / güzel, bakıma muhtaç düşman. Güzel kod sık sık:

  • Çerçeve üzerinde daha yüksek bir soyutlama seviyesi sunan bir katmanı vardır
  • Kodun yeniden kullanımı için optimize eder ve birçok bağımlılığa neden olur
  • Belirli bir sorun yerine genel sorunu çözmeye çalışır

Öte yandan, korunabilir kod:

  • Doğrudan çerçeve üzerine yazılır, böylece tüm geliştiriciler onu okuyabilir
  • Az sayıda bağımlılığı optimize eder, bu nedenle bir alandaki değişiklik diğerini etkilemez
  • Gerekenden daha fazla problem çözmeye çalışmaz

Güzel kod açıklamanız, bakımı kolay kodla da el ele gidebilir, çünkü daha yüksek bir soyutlama düzeyi eklediğinizde ve kodunuzu yeniden kullanım için optimize ettiğinizde, yine de bakımı daha kolaydır.
Karthik Sreenivasan

Soyutlamanın zaman testine dayanmaması dışında. Ve soyutlama ile ilgili herhangi bir sorun, yerel bir düzeltmeyi potansiyel olarak uygulama çapında etkisi olan bir düzeltmeye dönüştürür.
Mart'ta Andomar
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.