Kırık camları tamir etmemek ne zaman kabul edilebilir?


21

Kırılan pencerelere atıfta bulunmak üzere , yeniden yapılanmanın gelecekteki bir faaliyet için en iyi zamanının bırakılacağı zamanlar var mı?

Örneğin, mevcut bir dahili sisteme bazı yeni özellikler ekleyen bir proje, sistemle şimdiye dek çalışmayan bir ekibe atanmışsa ve birlikte çalışılması gereken kısa bir zaman çizelgesi verilirse - Bu senaryoda son tarihi verme uğruna mevcut yasaya büyük refactoring ertelemek?


6
Bazen patron, kırık camların tamir edilmeyeceğine karar verir, çünkü daha sonra bütün evi tamir ederek daha fazla para kazanacağını bilir.
mouviciel

1
temel kural: Teknik borcun son tarihe ulaşması tamam, ancak sonunda telafi edilmeli ve ne kadar erken olursa o kadar iyi olur
JF Dion

4
Tebrikler! PHP'nin "tasarım felsefesini" mükemmel bir şekilde tanımladınız.
ThomasX


4
Yarın asla gelmiyor ...
Eric King

Yanıtlar:


25

Yeniden düzenleme, devam eden bir süreçtir - ve olmalıdır. Hala tamamlanmamış olan çalışma ve test edilmiş bir uygulama ile sadece gereksinimleri karşılamak yeterli değildir.

"Çalışmasını sağla, sonra daha iyi çalışmasını sağla" .

Bu alıntıyı nerede okuduğumu hatırlayamıyorum, ancak bu yeniden düzenleme işlemini iyi uygulamanın anahtarı ve başka türlü yapmak için profesyonelce sayıyorum.

Sürekli yeniden düzenleme, yemek pişirirken döküntüleri silmek ve yemeğinizi yedikten sonra bulaşıkları temizlemek gibidir. Hedeflenen yeniden düzenleme, kirli bir mutfak bulmak gibidir, ancak yalnızca bir veya iki bardak yıkamak için zamana sahiptir. Sürekli kirli bir mutfakla mı yaşamayı tercih edersin yoksa devam ettikçe işlerin temiz kalmasını mı tercih edersin?

Kodun çalışmasını sağlayın, sonra kullanabileceğiniz en iyi uygulamaya sahip olduğunuzdan emin olmak için kodunuzu yeniden düzenleyin. Tanıdık bir şey yapıyorsanız, ilk kez en iyi kodu uygulamış olabilirsiniz, ancak emin olmak için çalışmanızı iki kez kontrol etmeniz biraz zaman alabilir. Kodunuzu geliştirebilecek gibi görünüyorsa, kodunuzun olabildiğince az yalın ve temiz olduğundan emin olmak için yeniden yönlendirmeye çalışın. Bu, geride bıraktığınız teknik borç miktarını azaltacağınız ve bir sonraki kodun ele alınması gerektiğinde okumayı ve yeniden düzenleme yapmayı kolaylaştıracağınız anlamına gelir. Bu, TDD mantra "Red-Green-Refactor" ın arkasındaki temel değerdir, ancak TDD'de öncelikle çoğaltmayı kaldırmayı reddettiğinizde, büyük sınıflar, uzun yöntemler gibi yeniden yapılandırılabilecek diğer öğeleri de incelemeyi öder.

Kendinizi büyük bir yeniden tasarımla karşı karşıya bulursanız, belki de zamanlamanız çok azalıyorsa, belki de bir süre erteleyebilirsiniz. Bununla birlikte, bu, kodunuzun işlevselliğinden ödün verilmeyeceği ve uygulamanın gereklilikleri yerine getirmeye devam etmesi koşuluyla sağlanmıştır. Bu tür bir durum nadir görülen bir durum olmalıdır ve ilerledikçe sürekli tekrarlanıyorsanız bunun daha da nadir olmasını sağlamaya yardımcı olabilirsiniz. Daha da önemlisi, büyük değişikliklerinizi çok uzun süre bırakma riskini alamamanız, aksi halde daha sonra düzeltilmesi çok daha maliyetli olabilecek veya daha maliyetli bir sonuç verecek şekilde daha büyük bir iş yükü oluşturacaksınız. proje hatası.

Birçok insanın Refactoring ve Re-engineering tanımlarını karıştırdığı kanısındayım . İki terim, çok farklı durumları yönetme stratejilerini açıklar. Yeniden yapılandırmak istiyorsanız, sistemin davranışını değiştirecek sert bir değişiklik yapma taahhüdünde bulunuyorsunuz. Bu bazı testleri geçersiz kılar ve ayrıca yeni testler gerektirir. Refactor yaptığınızda, sistemin tam olarak davranmaya devam etmesini sağlarsınız.değişiklikten önce olduğu gibi, ancak aynı zamanda kodunuzun uzun ömürlü olmasını ve zamanla bakımının daha kolay olmasını sağlarsınız. Kodunuzu cehenneme "atmayacaksınız", başarısızlık riskini azaltacak profesyonel bir temiz kod standardına bağlı kalıyorsunuz ve kodunuzun çalışmak ve profesyonel bir standartta çalışmaktan zevk almasını sağlayacaksınız. .

Kırılan camlar analojisine geri dönersek, camı kırırsanız hemen onarmanız gerekir. Bir pencerenin kırıldığını farketmediyseniz, pencereyi kırılmış olarak bıraktığınızda maliyeti size belirlemeniz gerekir. Şimdi, önceki iki cümle tekrarlamak, ama yerine Bug için pencerenin. Sonunda farklı bir stratejiye ihtiyacınız var. Kodladığınız gibi bir hata oluşturduysanız hemen düzeltin veya değişikliklerin yeniden mühendislik çalışması gerektirip gerektirmediğini görüyorsunuz ve sorunu çözmenin en iyi olacağı zaman konusunda ticari bir karar veriyorsunuz. Bu yüzden bir sorunu çözmek için refactor yapmazsınız, problemleri bulup düzeltmenin daha kolay olmasını sağlamak için refactor yaparsınız. Kodunuzun ne kadar şaşırtıcı olduğunu düşündüğünüz umrumda değil, karmaşık sistemler her zaman zaman içinde ele alınması gereken problemlere sahip olacaktır. Teknik borcun ne olduğu ve bu nedenle yeniden düzenlemenin neden kodunuzu uygularken devam eden bir süreç olması gerektiğine ve bir süre sonra keyfi bir süre için bırakılmayacağına bağlı.

Kısacası, nadiren verilebilecek olan cevap, bir son tarih vermek için kodda yapılacak önemli değişiklikleri ertelemenin kabul edilebilir olabileceği cevabı, ancak yeniden yapılanmayı günlük uygulama işinizden bağımsız bir egzersiz olarak kabul etmek normal bir uygulama olarak kabul edilmemelidir ve kesinlikle Asla kurallara aşina olmayan ekipler tarafından mazeret olarak kullanılmadıklarından, uygulamalarının şartlar altında yapabilecekleri kadar yalın ve temiz olmalarını önleme seçeneği olarak.


Alıntı gibi.
Marjan Venema

1
Çok fazla yerde "nadir zamanlarda" normdur.
ozz

2
Sadece PHP "tasarımcıları" bu alıntıyı kabul ederse ...
ThomasX

1
Harika bir alıntı, Bunu düşünün - araba ressamınızın 1999 Toyota'nızı tamir etmek için aynı mantığı kullanmasını ister misiniz?
mattnz

@ mattnz Analojiniz gerçekten yazılım geliştirme için geçerli değil. Bu bir "altın kaplama" durumu değildir, yatırımınızdan maksimum getiri elde etmenizi sağlamak için nispeten düşük maliyetli bir peşinattır. Boyama analojinizi çalmak, aynı zamanda arabanıza bir boya kapağını geniş bir fırçayla döşemek veya güzel bir düzgün yüzey elde etmek için bir sprey kabini kullanmak arasındaki farktır. Ödediğinizin karşılığını alıyorsunuz, o yüzden bir profesyonelin ücretini ödemek ve yarı işini bitirmek ister misiniz? Köşeleri kesmek kısa vadede biraz tasarruf sağlayabilir, ancak uzun vadede daha büyük teknik borçlar doğuracaktır.
S.Robins

11

Bazı geliştiriciler, “Titanik'teki şezlongları yeniden düzenlediklerinde” “kırık camları tamir ettiklerini” söylüyorlar. İşe yarayan ancak koku alma duyunuzu rahatsız eden kodu yeniden düzenlemek nispeten kolaydır. Kullanıcılarınız için yeni özellikler eklemek veya uygulamayı onlar için daha kullanışlı hale getirmek yerine, bu tür bir göreve geri döndüğünüzü fark ederseniz (uygulamanın daha hızlı çalışmasını sağlayan optimizasyon burada iyidir, kodu daha okunur hale getirmek için optimizasyon farklı) o zaman belki çok fazla toparlanıyorsun. Toplanmak kötü değil, ancak şirketin gelişmesini sağlamak için şirketin parasını ödediği için değil. Elbette kırılgan, okunması zor, kötü tasarlanmış bir çözüm istemiyorlar, ama aynı zamanda cilalı ve güzel bir yarı çözüm istemiyorlar.

“Gitmek için” basit bir şey yapmanız gerektiğinde veya probleminizin aslında onların suçu olup olmadığını veya bir karar beklediğinizi size söylemek için başka bir takımı beklerken düzenli olun. Çok fazla fırsat olacak. Tüm uygulamayı ileriye taşıma şansınız varsa, her şeyin kırılgan hale geldiğini hissetmeye başlamadıkça alın. Muhtemelen olmadı. Yeniden ateşleme yapma şansınız olacak - bunun için endişelenmenize gerek yok.

Sorunuzun ikinci yarısına geri dönmek için, kısa bir zaman çizelgesine bakan özellikler ekleyen bir sprint, "yanlış bir işlem yapmayacağız, zaman yok" demek yanlış olur. "6 hafta geçtiğini biliyorum ve kullanıcılara tamamen aynı görünüyor, ama bu kırık pencerelerin gerçekten düzeltilmesi gerekiyordu" demek de yanlış olurdu. Yeniden projelendirmeyi herhangi bir projede meydana gelen boşluklara yerleştirin. Projenin amacına ulaşma pahasına toparlanmaya sığınmayın.


4
Bazı geliştiriciler gerçekten "Titanik'teki şezlongları yeniden düzenlerken" "kırık camları tamir ettiklerini" söylüyorlar - aslında, geliştiricilerin "teknik borç" ile "benim yaptığım gibi" arasındaki farkı söylemesi zor gibi görünüyor. yaptım "
RevBingo 18:12

9

Bir işletme açısından bakıldığında, yeniden yapılanma spekülatif bir yatırımdır - şimdi zamana ve emeğe (paraya) yatırım yapmak, gelecekte de daha fazla zaman ve emekten (paradan) tasarruf etmek umuduyla.

Yeniden yapılandırmaya yönelik çabaların ne kadar tasarruf sağlayacağı konusundaki tartışmaya girmeden (Bu, burada çok anlamlı bir tartışma olması için çok fazla değişkene bağlıdır), yeniden yapılandırıcının "net bugünkü değer" olduğu zaman olduğu açıktır. Bunu bırakan maliyetin şimdi yapma maliyetini aşması.

Bu kolay, çünkü ne kadar kazanılacağı hakkında hiçbir fikriniz yok. Ayrıca, Yatırımın geri dönüşü, risk yönetimi (marka değeri, yasal sorumluluk, sigortalanabilir - sigortalanamayan risk), uygun maliyet gibi tüm normal finansal planlama fikirlerini de hesaba katmanız gerekir.

Çoğu durumda, ne zaman yeniden ateşleneceğine karar vermek, işi yürüten kişilere en iyi şekilde bırakılmaktır. Bu forumdaki afişlerin çoğunun ses çıkarmasına rağmen, yöneticiler bir işletmeyi genellikle programcılardan daha fazla bilir. Ortaklara geri dönüşü maksimize etmeyi içeren daha büyük bir tabloya sahipler. Kırılmayan şeyleri düzeltmenin buna katkısı nadirdir, kodun istisnası yoktur.

Düzenleme: Kritik altyapıdaki zaman çizelgelerini sürdürme hakkında ilginç bir makale okudum. Temel amaç, hareketin gerektiğinde onarılması (hataların giderilmesi) için rutin bakımdan (refaktör) uzak olmasıdır. Temel fark, izleme seviyeleridir - örneğin bir nükleer enerji santrali çok detaylı olarak izler ve “kırıldıklarında” ancak başarısızlıktan hemen önce düzelir. Elde edilen, bir bakım zincirine sabitlenmenin sadece daha pahalıya mal olmadığı, aynı zamanda sürdürme programının neden olduğu kesintiler nedeniyle daha az güvenilir olduğu. Benzer bir fikir, yazılım için - kırılmak üzere olan bitlerin yeniden değerlendirilmesi - yalnızca ölçümle bilmeniz için gereklidir.


4
Yazım hatalarına rağmen +1 :); Çoğu zaman müşteri temiz kod için para ödemez - sonuç için para ödüyorlar. Temiz kodunuz varsa ve sonuç alamıyorsanız, size ödeme yapılmaz ve çok uzun süre yeniden yönlendirilemezsiniz.
jasonk

2
Sadece Yöneticinin işin bir bütün olarak daha iyi bir şekilde algılanmasının çok yaygın olduğunu belirtmek istiyorum. Ne yazık ki, çoğu zaman gelecekte kötü kodun ne kadara mal olacağı konusunda WORSE hakkında bir fikirleri vardır, bu nedenle yöneticinize bu kararı vereceğine güvenecekseniz, birlikte çalışacak makul maliyet verilerinin olduğundan emin olun.
Michael Kohne

Refactoring'e bakmanın diğer yolu, hedef bir görev olarak karar vermeye karar verecek bir şey değil, bir sistem geliştirirken kendinize yol açmamanızı sağlayacak bir yoldur. Genelde, zayıf faktörlü kodun, testleri değiştirmeye devam etmenize ve ilerledikçe spot yangınları söndürmeye çalışmanıza neden olacağını görürsünüz. Bu, müşterinize bir sonucu olarak daha pahalıya mal olabilir. Kodun temiz tutulması, kodunuzun altınla kaplı olarak görülmemesi, ancak başarılı sonuçlar elde etmek için profesyonel bir standardın muhafaza edilmesi olarak görülmelidir.
S.Robins

1
@ S.Robins Yeniden yapılandırmadan bahsediyoruz ve zayıf faktörlü koddan bahsediyoruz, (aklımda ikincisi bir sorun, ilki olması güzel bir şey).
jasonk

5

İşletmeyi tamir ederek onaracağınız hasarın tamir etmekten daha büyük olması kabul edilebilir.

Bunun gerçekleştiği durumlar:

  • düzeltilmesi gereken süre nedeniyle son tarihin veya iş fırsatının kaçırılabileceği yerler
  • bir kod parçasının (gerçekten) çok kısa bir zaman diliminde emekli olması planlandığı için, bu nedenle yeniden düzenlemenin faydası yoktur.

Ve bu durumlar ortaya çıkar - ticari durumlar sıklıkla, onları müzakere etme fırsatının geçtiği yerde yerine getirilmesi gereken ve zaman bileşeni olan gereklilikleri yerine getirmesi gereken - yapay yasaların yerine getirilmesi gereken - süreklilik arz eden - son belirli bir tarih - var.

İşin püf noktası, bu durumları tanımlamak ve onları doğru şekilde değerlendirmektir. Emekli olması planlanan kod, sık sık yıllarca yapışır. Yapay son teslim tarihlerinin karşılanması gerekebilir, ancak genellikle farklı şekillerde karşılanabilirler (örneğin, belirli bir tarihte son sürüm sürümü mutlaka sonlandırılmadan, yazılım sunulabilir, demonte edilebilir ve belirli bir tarihte "başlatılabilir").

Bu tür bir şeyle sunulduğunda, ona açık bir zihinle yaklaşmanız gerekir, ancak her zaman sormak göründüğü gibi midir? Varsayımlar gerçekçi midir? Standart altı kodu göndermeden hedefe ulaşmanın başka bir yolu var mı? Eğer mevcut değilse, en iyi zamanı nasıl kullanırım?

Ve eğer her zaman iyi bir alternatif yoksa, bunu ne zaman düzelteceğiz?

Neredeyse, neredeyse hemen hemen her zaman olması gerektiği Çünkü zaman , değil ise .


Re: yapay son tarihler; İdeal dünyada, uygun bir projenin son teslim tarihi olmalıdır. Ürün ekiplerinin haftada bir kayma ile tamam olduğunu duydum (bir hafta önemli değil mi?) - iş teşviklerini gerçekleştirmeden - bunun siyah cumartesi gününden önceki güne karşı olduğunu gösteriyordu. Kötü hareket.
jasonk

3

Yöneticiler teknik borç biriktirmek istediklerine karar verirse . Bu, örneğin, bazı ilk müşterilere erken geri bildirim almak için erken bir prototip hazırlamak isteyip istemediğinize ilişkin adil bir karardır.


4
Yöneticilerin teknik borcun dar bir son tarihe kadar tahakkuk etmelerine izin vermesi çok sık gerçekleşir, ancak borçları olabildiğince çabuk ödemek yerine, bir sonraki son teslim tarihini görür ve gelecek iş ve önceki borç için zamanlama yerine gelirler. borç ihmal edilir ve serbest bırakılması için ek yeni özelliklerle doldurulması gerekir. Başka bir deyişle, borç asla ödenmez ve projenin ne kadar derin olduğunu fark etmeden önce, sorunun kontrolün dışında kalmasını önlemek için bir şey yapmak için çok geç. Gerçekten hızlı bir şekilde ödediğiniz sürece borç tahakkuk ettirmeniz uygundur.
S.Robins,

2
Bazı teknik direktörler (özellikle teknik olmayanlar) teknik borçtan bahsettiğinizde neden bahsettiğinizi bilmiyorlar. Hatta bazıları, gerçek iş yapmak yerine onları sadece uzaklara gitmeye ve bir şeylerle oynamaya ikna etmeye çalıştığınızı düşünüyor.
hızla_ben

Kuruluşumuzun menajerleri olmamasının nedeni budur: Open-Org.com;)
David

1
Çoğu yönetici, teknik borcun sakıncalarını anlayacak kadar akıllı değildir; bu nedenle, sonunda teknik olarak iflas edene ve sistemin tamamını yeniden yazmaya zorlanana kadar sürekli olarak tahakkuk eden teknik borçtur.
Wayne Molina

1

Kredi istemekle aynı şekilde düşünebilirsiniz. Kısa vadede X'e yatırım yapmak ve uzun vadede bunun için ödeme yapmak için borç para almak uygun mudur? Kesin bir cevap yoktur, örgütün çıkarları için uygun olabilir (örneğin mevcut müşteri beklentilerini karşılamak için) veya sorumsuzca yapılırsa felaket olabilir.

Her şey önceliklere bağlı ve yönetim bir numaralı önceliğin "kod çalışması" yapmak, yeni özellikler uygulamak ve müşteri beklentilerini karşılamak olmasına rağmen, kırık pencerelerden her ayrıldığınızda o numaralı önceliği yavaşlattığınızın farkında olmalı. , daha zor ve daha fazla kaynak yatırımı gerektiren. Ayrıca, zamanın% 99'unda yeni özellikler geliştirmeyi bırakmak ve "kod tabanını düzeltmek" için her türlü çabayı konsantre etmek mümkün değildir.

Sonuç olarak, evet, bazen kırık pencereler bırakmak kabul edilebilir, tıpkı bir kredi talep etmenin kabul edilebilir olduğu gibi ... sadece gerçekten, gerçekten bunun için ödeme yapmak zorunda olduğunuzu hatırlayın. Gelecekte, bunu yapma zamanı büyük olasılıkla şimdi sahip olduğunuz zamandan daha büyük olmayacaktır.


0

Normalde, yapabildiğiniz zaman, bunu düzeltmelisiniz, Bu, bakım için harcanan zamanı önler. Bununla birlikte, bazı barbarca çevik olmayan uygulamalar, çalıştığı sürece statükoya izin verme eğilimindedir. Bazı yöneticiler değişimin “öngörülemeyen etkilerinden” korkuyor.

Benim almam, sadece olması gerektiği gibi çalışıyorsa (sadece optimizasyonla kırılmış ancak işlevsellikten değil) çalışıyorsa ve biraz yeniden düzenleme yaparsanız test etmek için zamanınız kalmaz. Ancak, en kısa zamanda düzeltilmesi gerektiğini unutmayın.

İşlevsellikten koparsanız ve yeni özellikler buna bağlıysa, en kısa zamanda düzeltmek en iyisidir.


0

Çoğu programcı işverenleri için para kazanma işinde. Peki yeniden yapılanma ne zaman gerçekleşmeli: Ne zaman firmanızın para kazanması gerektiği. Yeniden düzenleme, diğer projelere harcanmamış zamandır ve gelecekte bu projede kazanılan zamandır.

Buna değip değmeyeceği genellikle yöneticinize bağlıdır.


1
1; Bu tür bir tutum, yazılım sistemlerinin iltihaplanmalarına neden olan şeydir, çünkü yeniden yapılanma “yeni şeylere harcanabilecek zaman” olarak görülür.
Wayne Molina

1
Refactoring IS zamanı yeni şeylere harcanmıyor.
Pieter B

@Wayne M: İşler yazılım mühendisleri genellikle işlerin ve işlerin ne yapılması gerektiğine karar veremezler. Tabii ki, herkes istediği zaman refactor almak ister, ama bu gerçekten gerçek değil ... en azından mesleğimdeki 7 yıllık deneyimimde.
James

+1 Bu tür bir tutum, maaşınıza para ödeyenlere değer veren şeydir. Bu olmadan, tüm işiniz dış kaynaklı olabilir.
MarkJ

0

Programcılar, işletme tarafının teknik borcun kapsamını bilmesini sağlamalıdır, böylece bilinçli bir karar verebilirler. Piyasaya daha erken ulaşma ihtiyacı kodunuzun riskinden daha ağır basarsa, fazla seçeneğiniz yoktur. Nakit akışı eksikliği bir çok teknik karardan geçecektir.

Sorunlardan bazılarını teknik olmayan bir perspektife sokmak için, hataları düzeltmek ve yeni özellikler eklemek için uzun süreye dikkat edin. Yönetimin bir satış ve pazarlama geçmişi varsa, bunu anlayabilirler. Müşterilere bu işlerin daha uzun süreceğini söylemekten nefret ediyorlar.

Takımınızı genişletmeyi düşünüyorsanız, küçük bir geliştiriciyi işe almak için iyi bir zaman olabilir. Bu durumda test kapsamı büyük bir kurtarıcı olacaktır. Belgeleri okuyarak daha fazlasını yaparak öğrenirler.


0

Bu senaryoda son teslim tarihini hatırlatmak için büyük refaktörleri mevcut koda ertelemek doğrulanabilir mi?

  • Bir şey kırılırsa, büyük olasılıkla değil. Kısmen çalışan frenli araba kullanmayacaksınız, değil mi? (Zamanında bir yere gitmeme riski yoksa, hatalı frenlerden dolayı çarpma riskinden daha büyük değildir.) İdeal çözümden uzak, ancak maalesef bu gerçekleşir.

Ancak, çalışma kodunu yeniden faktörlendirmekten bahsediyorsanız, aşağıdakileri göz önünde bulundururum:

  • Daha üst düzey geliştiricilerimize veya teknik direktörümüze kalsaydı, hiçbir zaman yazılım çıkarmazdık. Mükemmelliği her zaman yeniden hesaba katar ve gayret gösteririz.

  • Yeniden faktoring, işletmenin karlılığı üzerinde olumsuz bir etkiye sahip olacaksa, yeniden planlanması gerekir.

  • İşiniz belirli bir işlevi belirli bir tarihe kadar sunma sözü vermiş olsaydı, daha sonra yeniden ateşlenirdiniz. Kırmızı Burun Günü yardımını düşünün - her yıl 24 veya 48 saatlik bir süre boyunca bağış toplayabilirler. Bu zaman zarfında bağış almalarını engelleyebileceklerini düşünürlerse kod tabanlarını yeniden faktörlendirmelerinin bir yolu yoktur. Ek olarak, eğer kırık bir pencere varsa, ancak bağış alma kabiliyetlerini etkilemeyecekse, tekrar etmemeyi seçmeleri muhtemeldir.

  • Bir şey yapmanın daima daha iyi bir yolunu bulacaksınız. Bu doğal bir işlemdir ve çizgi çizebilmek çok önemlidir.


Aşağı oy hakkında geri bildirim almak güzel olurdu: D
CodeART

2
Anlaşılan, çok fazla eksi oyla, birinin kötü bir gün geçirdiği ve bir grup aşağı oyla çarpıştığı görülüyor.
Sam Goldberg

-1

Yeniden düzenleme ile ilgili sorunuza cevaben, "evet" derim. Yukarıdaki cevaplarda bir başkasının işaret ettiği gibi, yeniden yapılanma devam eden bir süreçtir ve bazı zamanlar zaten çalışmakta olan (belki de sıkıcı bir şekilde) kodu yeniden yazma ihtiyacını artıran taktik ve iş kararları vardır.

“Kırık camlar” hakkında: Bu terimi ilk olarak yaklaşık 10 yıl önce, yazılım geliştirme bağlamında duydum. Fakat o zaman, kırık birim testlerine izin vermeyi tarif etmek için kullanıldı . Bu, insanların kırık ünite testlerini düzeltmeme eğiliminin olduğu senaryoyu tarif ediyordu, çünkü kırık testlerin (arayüz ya da gereksinimler nedeniyle geçerli olarak kırılmış) yerine sadece hangi testlerin "başarısız" olduğunu hatırlamak daha uygun görünüyor. örneğin, değişiklikler).

Bozuk pencere metaforunu kırık birim testlerine uygulamak, yazılım mahallesinde "kırık pencerelere" izin verme tehlikesini daha uygun ve daha açıklayıcı olduğunu düşünüyorum. Bence, kırık ünite testlerinden (kırık pencereler gibi) bahsediyorsanız, cevap o zaman asla olmazdı . (Asla söyleyebileceğimiz ölçüde ...)


Aşağı oylama sebebi nedir? Burada söylenen bir şey doğru değil mi? Ya da sadece haklı editörler?
Sam Goldberg

-1

Eğer gerçekten kırılmışsa, düzeltilmesi gerekir.

Ama gerçekten kırılmış mı? Sadece "hoş değil" i kırılmış olarak eşitlemediğine emin misin?

Çalışma kodunu yeniden faktörlendirmeden önce, stilden hoşlanmadığınız veya gelecekte sorunlara yol açacağını düşündüğünüz için bir "değer değeri" hesaplaması yapmanız gerekir.

Geçen hafta yazdığınız kodu yeniden hesaba katmak için, maliyetinizi geçen hafta kodlamada harcadığınız zamandır, kodun büyük ölçüde iyileştirilmiş olup olmadığına çok fazla değer vermezsiniz.

Birim testinden geçirilmiş kodu yeniden faktoring. Şimdi sadece yeniden yazmaya gerek yok, şu ana kadar yapılan tüm testleri yeniden tanımlamanız ve yeniden çalıştırmanız gerekiyor, bu pahalı görünmeye başlıyor.

Üretime giden kodu yeniden faktoring haline getirin. Yapılması gereken daha fazla test, artı kullanıcılara yönelik bir sunum ve eski sürümün yanı sıra işe yaramayan bir şey verme riski. Devam etmeden önce bunu haklılaştırmanız ve büyük patronla silmeniz gerekir.

Bir süredir üretimde olan ve birkaç sürüm ve hata düzeltmeleri geçirmiş olan Yeniden Faktoring kodu. Yazılımın çalışmayı durduracağını bilmediğiniz sürece oraya bile gitmeyin!


Genellikle "güzel değil" "kırık" ile el ele gider. Doğru şekilde yazılmayan kodların bakımı ve eklenmesi daha zordur, bu nedenle sonunda yeniden yapılanmayı ihmal ettiğiniz için bu kodu tekrar yazmanız gerekir.
Wayne Molina

2
Hatalı rapor vermeden test edilmiş ve üretimde olan kod çalışma kodudur. Bu duruma almak için çok zaman ve para harcandı. Güzel kod sadece bu - güzel kod.
James Anderson,

Katılmıyorum. Kod çalışabilir ancak özelliklere bakım yapma ve ekleme güçlüğü olabilir; Bunun gibi bir kod kırıldı, çünkü sert ve "koklamak". Doğru yazılan kodlar genellikle hoş ve test edilir VE daha da önemlisi bakımı ve geliştirmesi kolaydır.
Wayne Molina

@Wayne M: Vay, Wayne gerçekten hiçbir fikrin yok. Bunu PM'e yaparsanız, geliştiricileriniz sizi sevecek, fakat kariyeriniz muhtemelen uzun sürmeyecek. Çizgiyi bir noktada çizmek zorundasın. Anladığım kadarıyla hayallerinizle aynı fikirde olmayan herkesi aşağı indiren siz misiniz?
James

1
@WayneM - bir "kusur" oluşturacaktın, çünkü kodun görünüşünü beğenmedin. Bir iş yapmak için kod yazılır - işi yaparsa çalışır. Bakım maliyetleri yüksek olabilir ancak yeniden yazmaktan daha ucuz olması gerekir.
James Anderson

-2

Benim için son tarih, iş için en önemli şey benim deneyimim oldu. Bu, gerçekten başvurunuzu kimlerin kullanacağına bağlı. Benim durumum cep telefonu işletim sistemi yazılımı içindi ... kaçırılan son tarihler, kaçırılan satış hedefleri ve fiyat isabetlerini paylaşmak anlamına geliyordu.

Miras aldığımız ve açıkça değiştirilmesi gereken kodlara bakarken bir çok WTF anı ile karşılaştık. Bununla birlikte, bu kod 'neredeyse' işe yaradığından (eşzamansızlık çok az anlaşıldığından), yönetimin teslim edilmek üzere olağanüstü taahhütler varken yeniden yapılanmaya izin vermesi için bir teşvik yoktu. 'Vahşi doğada' bir böcek görülene kadar hiçbir şeyi değiştirmemize izin verilmezdi; Bir keresinde kendi zamanımda yaklaşık 10k kod satırını yeniden kırdım ve atmak zorunda kaldım. Test için gerekli zaman ve diğerlerini inceleyen vb. Haklı bulunamamıştır.


Yazılım geliştirme gerçeğinin bazı insanlar üzerinde kaybolmuş gibi göründüğüne sevindim
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.