Mevcut bir web uygulamasını yeniden düzenlemeye nasıl yaklaşılır?


11

Son zamanlarda çok okuyup düşünüyorum ve belki de web geliştirme stratejimi yeniden düşünmem gerektiği sonucuna vardım. Anında programlama yapıyorum ve 2 yıldır bir PHP web uygulaması üzerinde çalışıyorum, küçük bir araç olarak başlamış olabilecek şey oldukça büyük bir proje oldu. Ama benden bir ton eski kod var ve selefim, o zaman mantıklı olabilecek kod pasajı, ama şimdi söz konusu kodun yararlılığını aslında formda sorgulıyorum. Ayrıca, birim test ve Test Odaklı Geliştirme gibi şeyler yakın zamana kadar benim kapsamımda değildi.

Peki, web uygulamasını yeniden düzenlemeye nasıl yaklaşırsınız? Bakmam gereken şeyler nelerdir ve hangi sırayla? Tarayıcı oyununa karşı işlevsel web uygulamasına ne dersiniz? O halde yaklaşımda bir fark olur mu?


4
Eğer kırılmazsa, tamir etmeyin. Test yazma konusunda daha fazla ve gereksiz değişiklikler yapmak için daha az zaman harcayın.
Macneil

Sadece ilgisiz. Başvurunuzu yazmak için hangi dili / teknolojileri kullandınız? Ne tür bir site? Bkz. Welie.com/patterns -> Tasarım içeriği -> Site türleri
JW01

@ JW01 Ben dahili mantık için PHP ve görünüm yönetimi ve form doğrulama için AJAX kullanın. Bu, Web tabanlı Uygulama modelinin bir çeşidi olabilir, ancak dahili bir araç olduğu için yalnızca belirli bir ortamda kullanılabilir.
Eldros

Soruyu cevapladığımda, uygulamanızın kafamda tamamen farklı bir resmi vardı. API'yı herkese açık alanda olduğundan daha fazla değiştirme özgürlüğüne sahipsiniz.
JW01

@ JW01 Bu sorunun başkaları için de yararlı olmasını istediğim için çok spesifik olmak istemedim.
Eldros

Yanıtlar:


6

Hemen hemen her türlü eski koda yaklaştığınız gibi. Test edilebilir bir parça bulursunuz, bunun için testler yazarsınız ve refactor.

Kolayca test edilebilir bir parça bulamazsanız, bir test paketinin güvenlik kemeri olmadan test edilebilir hale getirmeniz gerekir, bu durumda test edilebilir bir parça parçasını çok dikkatli bir şekilde değiştirirsiniz, böylece test edilebilir.

Tarayıcıya bir şey oluşturmayan kod - "altyapı" kodu, modeller, veritabanına dokunan şeyler - başlamak için iyi bir yer olabilir.

Düzenleme: UI testi: Burada çok az deneyime sahip olduğum uyarısı ile, bir arkadaşım bunu yapıyor: HTML üreten kodun bir parçasını çalıştırıyor. Sonra kodunu hackliyor ve yeni oluşturulan kodu eski versiyonla karşılaştırıyor (diff kullanarak; o kadar otomatik değil). HTML'deki değişiklikler, yeniden düzenleme işleminizin bozulduğu anlamına gelir.


Eski bir uygulamanın (IE), HTML / JavaScript / CSS / etc bölümünün "görünüm" bölümünü test etmeyi nasıl önerirsiniz? Birim testinin gitmenin bir yolu olduğunu kabul ediyorum, ancak uygulama kodunun testinin otomatikleştirilmesi zor görünüyor.
Justin Ethier

bir web kullanıcı arayüzü için testler oluştururken - eski HTML'yi yeni HTML ile karşılaştırmak, işleri yapmanın biraz kırılgan bir yoludur. Bir web sayfasının anlambilimini belirleme ve bunu test etme eğilimindeyim. Yani "Web dizisi (sayfa başlığı, başlık, anahtar kelimeler, giden bağlantılar, formlar) değişti mi?" "HTML değişti mi?"
JW01

Web uygulamalarını 'başsız bir tarayıcı' ile test edebilirsiniz - temelde bir birim için olan bir kütüphane, bir QA adamı için tarayıcının ne olduğunu test eder. Java dünyasında HTMLUnit (saf java, bağımsız) ve WebDriver (FireFox gibi gerçek bir tarayıcıyı uzaktan kontrol eder) vardır. Projemde böyle yazılmış yüzlerce test paketi var.
Tom Anderson

@ JW01 Kesinlikle haklısın - çok kırılgan. Bir kerelik bir tür yeniden düzenleme işlemini test etmek için harika: yeniden düzenleme işleminin çıktıyı değiştirmediğini kontrol edebilirsiniz, ancak oluşturulan HTML'yi her değiştirdiğinizde "yeni beklenen" HTML'yi kaydetmeniz gerekir.
Frank Shearar

10

Michael Feathers'ın "Eski Kodla Etkili Çalışma" adlı harika bir kitabı var. Kabul edelim, hepimizin eski kodu var.

Ana şey, oluşturduğunuz yeni kodu test etmek. Diğer kod parçalarına dokunmanız gerektiğinden, bunları test etmek için de fırsatlar bulacaksınız. Bu uzun ve yavaş bir süreçtir, ancak sistematik olarak devam ederseniz, zaman içinde genel ürünü gerçekten geliştirebilirsiniz.


3
"Kabul edelim, yaptığımız tek şey bugün yarının eski yazılımını yazmak." - Martin Fowler
Frank Shearar

3
  • Evet - Web Uygulamaları Web Sitelerinden farklıdır

Onlara ayrı ayrı davranırdım. Sitenizin basitçe bir belge koleksiyonu olan (anonim kullanıcılar ve giriş yapan kullanıcılar için aynı görünen) bir kısmı varsa - yapılandırmanın en iyi yöntemi, dinamik olarak farklı sayfalar sunan bir web uygulamasından çok farklıdır. her kullanıcıya. Sitenin bu iki bölümünü iki uygulama / bileşene ayırın ve her bir bölümü farklı şekilde ele alın.

  • Sürüm Kontrolünü Kullanmaya Başlayın

Kodunuz sürüm kontrolü altına alındıktan sonra, daha önce 'her ihtimale karşı' vb. Sakladığınız tüm gereksiz kodları güvenle kaldırabilir ve kaldırabilirsiniz. Sürüm kontrolü olmadan nasıl hayatta kaldığımı bilmiyorum.

  • Sonsuzlukları azaltın

Dört farklı url'nin tümü aynı kaynağa işaret ediyorsa, sorun çok daha büyüktür. Sonunda sonsuz miktarda url ile uğraşıyorsunuz. Mümkün olan en kısa sürede, bir URL Normalleştirme politikasının uygulandığından emin olun. Bu yapıldıktan sonra, URL'lere anlamsal anlamlar eklemeye başlayabilir ve kaynaktan URL'ye ters aramalar yapabilirsiniz. Bu, "web baskısını" sitenin "kaynaklarından" ayırmanıza olanak tanır.

Kendinize sormalısınız, "bir url normalize edilmiş şekli nedir?" Bir kez bu sabitlendi. Daha sonra sitenizdeki 50,0000+ url, 2,000 olarak düşürülebilir. zihninizde anlaşılması ve yönetilmesi çok daha kolaydır.

bkz. http://www.sugarrae.com/be-a-normalizer-a-c14n-exterminator/

  • 'İstediğinizi değil' değil 'neyi' modelleyerek başlayın

Başlangıçtan itibaren en iyi uygulama düşünülerek tasarlanmamış eski bir siteyi düzenliyorsanız, 'karmaşadan' ideal tasarıma 'atlamak caziptir. En az iki adımda yapmanız gerektiğine inanıyorum: 'karışıklık' -> 'iyi modellenmiş eski kod' -> 'eklenen özelliklere sahip ideal yeni kod'. Özellik eklemeyi durdurun. Dağınıklığı düzeltmeye veya yolsuzlukla mücadele katmanının arkasına kapsüllemeye konsantre olun. Ancak o zaman, tasarımı daha iyi bir şeye değiştirmeye başlayabilirsiniz.

Bkz. Http://www.joelonsoftware.com/articles/fog0000000069.html

Bkz. Http://www.laputan.org/mud/

  • Teste sokmak iyi bir fikirdir.

Bir test takımı / çerçevesi oluşturun ve testler eklemeye başlayın. Ancak, bazı eski kodları test etmek oldukça zor. Yani, ona fazla takılma. Orada çerçeveye sahip olduğunuz sürece, testleri yavaş yavaş ekleyebilirsiniz.

Bkz. Http://www.simpletest.org/en/web_tester_documentation.html

  • Mahkumiyetlerinizde cesaret var

En iyi yazılım geliştirme uygulamaları literatürünün çoğu masaüstü merkezli / Kurumsal Uygulama Merkezlidir. Siteniz bir karmaşa içindeyken bu kitapları okuyorsunuz ve onlardan sızan bilgeliğe hayran olabilirsiniz. Ancak, bu en iyi uygulamanın çoğunun web / SEO önemli hale gelmeden önce zamanlar tahakkuk ettiğini unutmayın. Modern web hakkında çok şey biliyorsunuz, POEA, Gof vb. Klasik kitaplarda belirtilenden daha fazlası var. Onlardan alınacak çok şey var, ancak kendi deneyiminizi ve bilginizi tamamen atmayın.


Devam edebilirdim. Ama bunlar eski bir eski siteyi parlak ve yeni bir siteye yeniden düzenlerken seçtiğim bazı şeyler.


İyi referans bağlantıları!
Nilesh

2

Bir şey yapmadan önce, projenizi kaynak kontrolünde tutmak en iyisidir. Bu şekilde, değişiklikleri geri alabilir veya ayrı bir dalda önemli değişiklikler üzerinde çalışabilir ve kilometre taşlarını etiketleyebilirsiniz.

Ardından, değiştirmeyi planladığınız kodlar için testler yazın. Her şey için testler yazarak hepsini bir anda dışarı çıkarmanıza gerek yok. Hemen üzerinde çalışmayı planladığınız şey. Teori, yeterli zaman verildiğinde, kod tabanının çoğunun testlerle karşılanacağını söyler. Bazı yeniden düzenleme işlemlerinin testler yapılmadan "güvenli" olduğuna dikkat edin - bunlar daha önce bahsedilen Eski Kod kitabında ve başka yerlerde şüphesiz belgelenmiştir .

Kodun bir bölümü için testler yapıldığında kodu değiştirin. Testler geçtiği sürece ne gerekiyorsa yapın.

Eski kodla bile, ekleme veya değişiklik yapıyorsanız TDD yapabilirsiniz. Sadece beklenen değişiklikleriniz için testler yazın, başarısız olduklarını görün ve ardından değişiklikleri yapın.

Bazı araçlar burada yararlı olabilir. NDepend , yüksek düzeyde birleştirilmiş kod ve diğer kokuları gösterebilir. NCover kod kapsam seviyelerinizi izler. FxCop aslında derleyicinin yaptıklarının ötesinde bir kod doğruluğu denetleyicisidir. Bunların hepsi, herhangi bir gerçek boyutta, özellikle eski çeşitlilikte bir proje için kullanışlı olması için kullanışlı araçlardır.

Sonuçta, bu çok adımlı bir süreçtir. Hepsini bir kerede yapmaya çalışmayın, sadece bir kerede biraz alın.


-2

Beni sinirlendirecek kadar çirkinse, her şeyi silmek ve yerine bir damla yazmak benim için çirkin.

Daha sık olmamakla birlikte, bunu yapmak aynı zamanda zaman alır, çünkü orada oturmak ve örgütlenmemiş ve belgelenmemiş bir karmaşa etrafında parmak uçları ve nazikçe okşamak.


2
Katılmıyorum (her ne kadar -1 vermediysem). joelonsoftware.com/articles/fog0000000069.html
JW01

1
Kendimi doğru bir şekilde savunmak gerçekten durumsal bir karar. Büyük bir Objective-C kütüphanesi üzerinde çalışırken bunu yapamayabilirim, ancak tamamen yeni bir javascript kütüphanesi yazma konusunda hiçbir sıkıntım yok.
Sneakyness

Çok kötü bir fikir! Keşke Joel Spolsky'nin @ JW01'in 2 yıl önce bağlantılı olduğu makaleyi okuduğumda Angular & Bootstrap kullanarak mevcut bir PHP uygulamasını yeniden yazmaya karar vermiş olsaydım. Açısal ve Bootstrap harika teknolojiler ama ben hala bu eski uygulamayı 2 yıl sonra dönüştürmeye çalışıyorum. Ben sadece mevcut uygulamayı değiştirmiş ve sökük / değiştirilmiş olmamalıdır.
Zack Macomber

Özellikle yorumunuzda faktoring yaparken katılıyorum. "senaryo" bir kararı belirleyen anahtar şeydir. Tüm işletmenize hizmet veren devasa API'yi kopyalamanız gerekir mi? Kim bilir, dikkate alınması gereken çok şey var. Daha önce testler yapmak istersiniz. Bağlantı verilen makale çok uygun, tıpkı bir beden herkese uyar, ama bir şey buggy olduğunda veya gerçekten eski bir kod olduğunda ne olacak? Makale, okunması ve bakımı daha kolay olan eski koddan devam etmememizi mi öneriyor? Geliştirme dünyasında siyah beyaz yok, sadece senaryolar ve kararlar
James
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.