Eski projeleri temizlemek için iyi yaklaşımlar nelerdir?


Yanıtlar:


21

Üç temel seçeneğiniz vardır:

  1. Uygulama çok küçük ve gerçek bir karışıklık varsa , tekrar başlamak en iyi bahsiniz olabilir.

  2. Refactor .

  3. Karmaşa ile yaşayın ve ek özellikleri hackleyin.

Tipik olarak, seçenek (2) en iyi seçeneğinizdir.

Gerçekte ne kadar yeniden düzenleme yaptığınız, aldığınız kaynağa veya aldığınız değere bağlı olacaktır. Sorulacak sorular şunları içerecektir:

  1. Ne zaman / bütçe mevcut?
  2. Gelecekte ne kadar değişiklik bekliyorsunuz?
  3. Kodu başka kim görecek? (örn. dağınık kod itibarınıza zarar verir mi?)
  4. Başka birinin kodu koruması bekleniyor mu?
  5. Size yardımcı olacak hangi yeniden düzenleme araçları mevcut?
  6. Yeniden düzenleme deneyiminiz nedir?
  7. Yeniden düzenleme ile nasıl bir deneyim kazanacaksınız?
  8. Ne tür bir yeniden düzenleme size en çok fayda sağlayacaktır?
  9. Hangi otomatik testler zaten var? Yazılmaya mı ihtiyacınız var?
  10. Ne kadar manuel test gerekli olacak?
  11. Kodu olduğu gibi bırakırsanız nasıl hissedeceksiniz?

Deneyimlerime göre, bir yeniden düzenleme oturumu sırasında uygun bir karmaşaya girmek çok kolaydır. Öğrendiğim en önemli dersler:

  1. Her seferinde bir şey yapın.
  2. Küçük adımlar atın.
  3. Kaynak kontrolünüzü iyi kullanın (sık sık kontrol edin + yorumları ekleyin).
  4. Otomatik yeniden düzenleme araçlarından faydalanın.
  5. IDE'yi öğrenin.

6
Ayrıca çok uzun bir süre kırık bir duruma sahip olmaktan kaçınmak istiyorum. İddialı bir yeniden yazma / yeniden tasarım sırasında çok sayıda açık kaynak projesinin hızla öldüğünü gördüm. İşlevsel olmayan bir proje motivasyonu hızla öldürür.
LennyProgrammers

2
Kesinlikle. Hırslı yeniden yazma / tasarımlar ile ilgili olarak, bunu bir kereden fazla faul ettim. Şimdi, işleri daha küçük adımlarla atmaya çalışıyorum. Bu öneriyi yanıtıma ekledim.
Kramii

Ayrıca, bunun için yazılmış bir testi olmayan hiçbir şeyi yeniden düzenlememeniz gerektiğini de ekleyeceğim. Her şeyi düzeltme dürtüsüne direnin ve yeni özellikleri eklemek için değiştirilmesi gereken alanlara odaklanın. Bunu yaptıktan sonra, geri kalanını yeniden düzenlemek için ne kadar çaba harcamak istediğinize karar verin.
TMN

1
@TMN: İdeal olarak, evet. Ancak, her zaman otomatik bir teste ihtiyacınız yoktur . (1) Kod otomatik testler olmadan geliştirildiyse, daha önce bazı yeniden düzenleme işlemleri yapana kadar birim testlerini yeniden ayarlamak kolay / mümkün olmayabilir (2) Önemsiz, yerel değişiklikler yapmadan önce testler yazmak pahalı olabilir. (3) Otomatik yeniden düzenleme araçları + IDE özellikleri, yeniden düzenleme sonucunda kod kırılmasını önlemeye yardımcı olabilir.
Kramii

2
Ekleyeceğim - kaynak kontrolünüzde, tüm yeniden düzenleme işlemlerini ayrı bir ŞUBE koyun. Bu, büyük blok karşılaştırmaları kadar mantıklı bir adım adım yapılmasına yardımcı olur. İşler muhallebi haline gelirse (Bu HANGİ OLACAKLAR) çok değerli olabilir.
10_10

5

En azından yeterince refactor, böylece yeni özellik güvenli bir şekilde eklenebilir. Daha da kötüleştirme. Gerisi motivasyona, bütçeye ve zaman kısıtlamalarına bağlıdır - ancak bir karmaşayı tamamen temizlemenin orijinali yaratmaktan daha uzun sürebileceğini unutmayın.


1
Bu elbette ünlü Boyscout Kuralı: kodu her zaman bulduğunuzdan daha iyi bir durumda bırakın.
Jörg W Mittag

2

Bu kez işleri düzeltirken belgelendirdiğinizden emin olun. Bir dahaki sefere kodu görürseniz, şeyleri hatırlamak çok daha kolay olacaktır.


1

Bu, bir dağınıklık olduğundan korumak için daha fazla zamana mal olacak mı, yoksa bir dağınıklık değil ve kolayca bakımı için yeniden yazmak mı? Ben şahsen bu şu an geçiyorum, bir intranet sitesini ASP.Net MVC3'e dönüştürüyorum çünkü eski kod tek kullanımlık olması gerektiği için ( yazdığım) bir yığındı (evet, daha iyi bilmeliydim) ). Eski bok yığını hala burada ve özellikleri ekleyen ve hataları gideren bir baş ağrısı. MVC güzel ve üzerinde çalışmayı gerçekten zevkli hale getiriyor, bu yüzden bir yeniden yazma alıyor.

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.