Rails veya Django için bir PHP uygulama yeniden yazma Maliyeti

9 Cevap php

Ben komple bir yazılım yeniden yazma yapıyor düşüncelerinizi merak ediyorum. Biz çerçeve zamanla iyi ölçek olacak değildi bizim yazılım uygulaması tamamlandıktan sonra uzun değil sonra anladım. Kayıt için framework ben proje var çok önce karar verildi. Biz yakında yeni bir çerçevede tüm app yeniden yazmak zorunda kalacak gerçeği ile karşı karşıya. Biz şu anda bir php kullanıyorsunuz. Ben tam yazılım yeniden yazıyor genellikle başarısız ya da son derece acı verici ve zaman alıcıdır çeşitli yerlerde okudum. Herkes bu deneyimi var mı? Eğer raylar bakmak veya geliştiricilerin olmayan çok iyi ya bilmek bile django akıllıca olacağını düşünüyor musunuz? Teşekkürler, ben aklınıza gelebilecek herhangi bir tavsiye için sabırsızlanıyoruz.

9 Cevap

  1. sonra bu şekilde ölçekleme destekleyen bir çerçeve / platformu seçin, ilk ölçek vardır anlamaya. Mutlaka have dilleri / platformlar değiştirmek için değil unutmayın, bazı basit redesigns yerine gerekli ölçeklendirme destekleyebilir olabilir

  2. sonra sure Eğer ölçekleme doğrulamak için birim mevcut işlevselliğini doğrulamak için testler, artı ek testler var olun

  3. sonra uzakta, yeniden yazmak ve iyi şanslar

Eğer kullanıcıların gerçekten ne istediğini kullanılacağı nasıl varsayımlar (bir demet yapmak zorunda ilk kez, ne widget durum X için iyi çalışır çünkü iyi ikinci kez (aynı ekip varsayarak) bir uygulama yazmak kolaydır , ve bu yüzden) üzerinde. Artık çalışan bir şey var ki, bu varsayımlar çoğu ispat veya yalanlanmıştır.

Bu dava ile dava. Ama inanmayarak ile argüman "Tüm yeniden yazılmasının mahkumdurlar" alacaktı. Ben kendi programlama hayatı yansıtmak üzere, hemen hemen her zaman boyunca başka bir yazılım bazı yeniden yazma / üstlenmeden / taşıma olmuştur. Kez değiştirmek gibi, paradigma ve platform vardiya, ancak ihtiyaçların çoğu zaman aynı kalır. Bir bakıma, bilgisayar ve programlama tarih yazımının bir geçmişi olmuştur.

Kötü bir platformu ile çalışan, veritabanı olmayan veritabanı backend, spagetti kod yazılı yıl önce çoğaltma vb ile dolu., Sonuçta IMHO hızlı değişime uyum yeteneği yazılımın en önemli kısmını, düşecek. Bunu hızlı değişikliklere adapte istemiyordu Eğer sadece bir donanım yapmak, "yumuşak" ware demiyorlar.

Tam yazımının bir örneği bir opensource 3D heykel programı ben ve diğerleri Java 3D kullanarak yazdı. Neredeyse her şeyi tamamladıktan sonra, Java 3D kullanarak kötü bir karar olduğunu fark etti. Gerçekten gerçek nedeni neydi hatırlamıyorum, ama ölçeklenebilirlik, performans ve kullanılabilirlik Linux üzerinde ya da onun gibi bir şey olduğunu düşünüyorum. Sonra bazı düşünce biz herhangi bir spec değiştirmeden C + + / OpenGL / wxWindow taşıdık. Tüm sabit düşünme zaten yapıldığını kısmen çünkü bu büyük bir anlaşma olduğunu sanmıyorum ve platformunun kendisi üzerinde çok fazla bağımlılık yoktu.

Yeniden yazımlar başarılı olabilir, ama geliştiriciler taşıma yapılır kadar özellikler eklemek için güdüsünden gerekir. Bir spec sahip değil, tahmin güvenilmez hale getirecek ve bu nedenle proje gecikme olacak ve proje pazar veya paydaş tarafından terk edilme riskini taşır. Ama bu yeni bir şey değil. O dedi, kesinlikle yeniden bazı yukarıdan aşağıya tasarım kararları ve birim gibi "en iyi uygulamalar" koymak için büyük bir fırsat test edilebilir, KURU, MVC, yazma-to-arabirim, kodlama-kongre, kolektif mülkiyet kodu.

Hiç kimse tanıdık bir yeni teknoloji / dil ile bir mahkum-to-fail uygulama yeniden yazma Eh, tesisatçı benim tuvalet çengel kötü bir iş yaptı "diyerek kadar mantıklı, ben elektrikçi bunu gerekecek. " Sadece başka bir sorun yerini alıyor. (Ve muhtemelen kıçını arada yandı alıyorum.)

Için zorlayıcı bir neden varsa bunu yeniden yazmak, ancak yeniden yazma yapıyor bu yeniden yazma olumlu katkıda bulunmak ve yeni bir çaba başarılı olacağı olasılığını artırmak için aşina bir teknoloji / dil kullanın.

Eğer gereksinimlerini desteklemek için teknoloji / dilini değiştirmek gerekmez olduğunu belirlerseniz, o zaman bunu öğrenmek için bazı malzemeler ile aşağı hunkering kenara bir öğrenme eğrisi ortadan kaldırmak için yapabileceğiniz bir sürü değildir.

Joel Spolsky Netscape tam bir yeniden-yazma bir sonucu olarak acı nasıl bir great article yazdı. Bu okudum makale, ama yine de okumaya değer emin değilim.

"Ben tam yazılım yeniden yazıyor genellikle başarısız ya da son derece acı verici ve zaman alıcıdır çeşitli yerlerde okudum."

Kötü yönetilen sadece. Yazılım yeniden yazılmasının da başarılı. Başarı için basit kurallar vardır. Oku Chad Fowler's.

Bir yazımının en önemli yönleri (1) verileri koruyarak ve (2) aşamalı geliştirme yapıyoruz. Herhangi bir sonuç gösterir önce kimse ay sürer büyük bir yeniden yazma projesine yatırım yapacak. Bunun yerine, miras yerini bulana kadar miras ve yeni yazılım yan yana çalıştıran planı var.

Gerçekçi tahminler üretmek için yetersizlik: Yazılım genellikle birçok yeni proje yapmak, aynı nedenlerle başarısız yeniden yazar. Eğer doğru yazımının maliyetini tahmin edebilirsiniz, ve sizin bu bedeli ödemek için istekli iseniz o rewrite bir başarı olacaktır.

Ancak, yazılım mühendisleri iyimserler olmak için çok güçlü bir eğilim var ve bunlar zamanla bir proje inşa tüm inceliklerini açıklamak için başarısız. Birçok yönden bir yazılım yeniden yazma (edebilirsiniz kar topu sorun aynı zamanda özellikleri şeyler 'iyileştirmek' ya eklemek eğilimi hariç) sonuçta iyi belirlenmiş projesidir.

Ben nedeniyle özellik sünme ve iyi tahminler eksikliği ve aynı zamanda başarı dereceleri değişen başarmış kısmi yeniden yazar durakladı tam yeniden yazar dahil edilmiştir. Tüm durumlarda kritik faktör doğru bir maliyet olmadan, maliyet ile gelip edememek, sadece doğru karar vermek için umut edilmektedir.

Altın plaka geliştiriciler eğilimi ve - Fred Brooks "ikinci sistem" etkisi hakkında uyardı Doğru, tüm algılanan işlevselliği ek iş neglibly (hatta olumsuz) katkı bile ilk sistemin yanlışları & alt çizgi.

Tabii ki, o da dedi ki "tek atmak için planı -. Olacak, zaten" Ben o zaman bir bitmiş ürün yeniden çalışıyor vs kazanılan bilgi yararlanarak "gerçek sistemi", bina, açık bir prototip inşa tavsiye düşünüyorum.

Etki alanı mantık, çerçeve kanun ile iç içe nasıl ayırt deneyebilirsiniz - bu bir kütüphane içine etki mantığı izole etmek mümkün olurdu mümkündür & yeni ölçeklenebilir çerçeve ile üzerine yeni bir frontend'i koydu.

Bir yazılımı yeniden yazmak tamamen başarısız olur:

  1. Specifications are not well laid out, even for the previous application. Özellikleri belirsiz ise, bir önceki çerçevenin davranışına özgü birçok özellikleri bu uygulanamaz olsa bile yeni bir birine talep ediliyor sona erecek. Bağlantı noktası özellikleri mantıklı bir set vermeden tamamlandı Ayrıca eğer, bunu doğrulamak için çok zor olurdu.
  2. The stakeholders aren't interested. Bazen bir yeniden-yazma onlar "Yeni ve parlak" bir şey kullanmak istiyorum çünkü, değil paydaşları tarafından, örneğin, müşteriler, ancak geliştirme ekibi tarafından başlatılır. Coşkulu bir istemci olmadan (özellikle çünkü yazımının ürün teslimi gecikmeler gibi şeyler anlamak hangi) Eğer tamamen mahkumdur.
  3. The stakeholders expect totally the same application from the one they used to have. Bu çoğu zaman tamamen imkansızdır. Çerçeve değişiklikler genellikle bu davranış değişikliği kaçınılmaz, ancak müşteriler onların insanları yeniden eğitmek zorunda kalmamak programın çok fazla değişmez diliyorum demek. Eğer müşteri geri büyük olasılıkla bir proje ölüm yürüyüşü gibi sona ereceğini mevcut ürünlerin davranış değişiklikleri talep edecektir ürün teslim aksi zaman, müşterilerine net değişiklikler olacağını yapmalısınız.

İnan bana, proje yeniden yazılmasının üstlenmeden tamamen farklı bir ballgame vardır. Dikkatle bu yolu yürümek

Bu sözü hiçbir gerçek çerçeve ile siyaseten doğru yazıdır beri. Ben teorik olarak konuşacağız.

First what I did when I had similar problem is that I did rewrite in stages. I had horrible php app at client site and I suggested rewrite of parts in either PHP Code Igniter (very good performance) or Rails. Reason for doing this in stages was because of desire to be agile and also knowledge that waiting too much for new app might kill the project. We spend some time figuring out what would be good way to approach it and once we isolated parts we want to rewrite, it was fairly easy to work with that. So maybe it is easier if you split the problem into several parts (stages), since db is the same, you just move parts of it to new framework/rewrite. Once you have parts working, just point urls to that place. One thing that helps is to refactor a little modules/pages you intend to rewrite before you start rewriting them. I found this helps me understand logic better.