Eski kodu teslim ederken kendi kodlama önyargılarınızı nasıl aşarsınız? [kapalı]


22

Programcılar olarak, genellikle becerilerimizle inanılmaz gurur duyuyoruz ve 'iyi' kodun ve 'kötü' kodun ne olduğu konusunda çok güçlü görüşlere sahibiz.

Kariyerimizdeki herhangi bir noktada, muhtemelen turlarımızda bir miktar eski sistem çökmüş ve 'Tanrım, bu kod berbat!' Çünkü, ne iyi bir kodun olması gerektiği konusundaki fikrimize uymuyordu, bununla birlikte, mükemmel bir şekilde işlevsel ve bakımı yapılabilir bir kod olmasına rağmen.

Başınızı başka bir programcının çalışmasının etrafında dolaştırmaya çalışırken zihinsel olarak kendinizi nasıl hazırlarsınız?


2
vay ... bu soru şu an benim için gerçekten önemli.
WalterJ89

1
Kırılmadıysa, tamir etmeyin. :-)
richard

Yapmanız Gerekenler ve Büyük Top Çamur Topu , tüm programcılar için bu konuyu okumak zorunludur.
Jan Hudec

Yanıtlar:


31

Herhangi bir eski kod tabanı için, kendisiyle zihinsel olarak hazırlanmak için kendinizi hazırlamanın doğru yolu, bunun için birim testleri yazarak başlamaktır .

Berbat olsun ya da olmasın, ilk önce bir şeyleri bozmadan değiştirebilmek için kendinize güvenmeniz gerekir!


6
+1. Diğer programlar genellikle mevcut koddaki hatalara dayanır, işleri yapmanın tuhaf yollarını boşver. Onunla dalga geçmeden önce anlayın!
Alex Feinman

Bir zamanlar bu problemi yaşadım. Dahili kütüphanelerimizdeki bir hatayı düzelttim, ancak birçok önemli kodun bu yanlış davranışa bağlı olduğu ortaya çıktı. Amanın.
Jonathan Sterling

Bazen bu testleri yazmak çok zor olabilir. Ama sonra bazen bir yerde gevşek bir iplik bulabilir , ünite testini yapabilir ve ardından test enfeksiyonunu daha da dağıtabilirsiniz. Bu nedenle, gerçekten değiştirmek istediğiniz parçaya ulaşmadan önce bir sürü şeyi yeniden test etmek zorunda kalabilirsiniz.
Frank Shearar

5
Bu, şirketinizin birim testlerini kullandığını veya hatta anladığını varsayar. Çoğu zaman kod için testler yoktur, belgeler yoktur ve onu bütünleştirmek / düzeltmek / değiştirmek için sıkı bir son tarih vardır, böylece yalnızca "birim testleri yazmaya" başlayamazsınız.
Wayne Molina

2
Eski kod tabanı için otomatik regresyon testleriyle başlamak genellikle daha kolaydır. Birim testleri, kodda bağımsız olarak test edilebilen izole edilmiş birimler olduğunu varsayar - bu tür bir eski kodu bulmak için çok şanslı olmanız gerekir.
Doktor Brown,

30

Sana kaç kere "Ah, bu tamamen yanlış" demiştim, tekrar yazdım ve bu kodun neden bu şekilde yazıldığını zor yoldan öğrendim. Genellikle, bazı açık olmayan yazılı / belgelenmemiş bir gerekliliktir. En azından şu an üzerinde çalıştığım eski kodda bu doğru.


3
Birkaç kez başıma geldi. Bazen sadece yalnız bırakmak daha iyidir
TheLQ 15:10

4
Ve öğrenirseniz, sıradaki adama karşı nazik olun ve bir yorum yazın!
Frank Shearar

11

Kendi berbat eski koduna girecek kadar uzun süredir beklemelisin. Bu zor bir deneyim ve öğrenme sürecinin bir parçası. Her şeyi bildiğim zamanı çok özlüyorum.

Fosco'nun potansiyel zaman ve işlevsellik kısıtlamaları bağlamına girebilmek için harika bir noktası olduğunu düşünüyorum. Bazen bir şeyi işe almak zorunda kalırsın.

Ve son olarak, bu yüzden bir işin olduğunu anlayın.


4
Benim için her zaman olur. Sürekli eski kodlara bakıyorum ve kendi kendime düşünüyorum: "Bu saçmalığı kim yazdı? Ah evet .. Yaptım." Geçmişte yazdığınız bazı kodların kötü olduğunu kabul ederseniz, bir programcı olarak büyüdüğünüzü göstermektedir. Eğer geriye bakarsan ve "Evet, bana iyi gözüküyor" dersen, ya lanet olası iyi bir kod ya da ilerlemiyorsun. : P
Jasarien

7

Ona gülün, çok fazla yargılamamaya çalışın ve sadece geçin. Gerçek bir kod-nazi olmak iyi değil ... Kesinlikle 'yeterince iyi', hatta 'o zaman yeterince iyi' diye bir şey var. Bir krizi düzeltmek için bir şeylerin geliştirildiği veya bandajlandığı, sonra tekrar ziyaret edilmediği birçok zaman vardır.

Eğer gerçekten kötüyse, yeniden yazmak için bir dava açıp açamayacağınıza bakın. Önemli değilse, sadece girin ve çıkın.


7

Savaşını seç. "Bu şekilde yazmam" ve "bu ciddi bir sürdürme veya destek zorluğu yaratıyor" arasındaki farkı bil


Bu cevabı çalacağım. :-)
yaltaklanmak

4

Genellikle orijinal devlerin iyi olduğunu düşündüğü şey hakkında bir fikir edinmeyi faydalı buluyorum.

Yaptıklarının kalıplarına ve temalarına bakın ve çoğu zaman ilk başta bazı kararların nedenleri olduğunu bulursunuz.

Bazen orijinal devin aslında kötü olduğunu anlarsın, ama o zaman ne tür bir kötü sattıkları hakkında bir fikrin var.

Her iki durumda da, bunu yaptıktan sonra, yeniden yazmaya başlayabileceğiniz veya her şeyi yeniden düzenlemeye gerek kalmadan hızlı bir düzeltmenin nasıl görüneceği konusunda daha iyi bir resme sahip olmalısınız.

En önemlisi, sadece çirkin olduğu için kötü olduğunu varsaymayın. Hiçbir şey sizi sadece bir şeyi modernize etmek için zaman harcayarak orijinalden daha az yetenekli hale getirmek için daha aptal gibi gösteremez.


3

Zamanım varsa, ona saldırır ve kötü yazılmış kodları öldürürüm.

Bu savaş.


3

Her zaman çirkin kodun birçok hata ayıklama görmüş, bir denetim incelemesinde açıkça görünmeyen birçok incelikle görülen kod olduğunu düşünüyorum. Değiştirirseniz veya derinlemesine yeniden tasarlarsam, kodun ne yaptığını kesinlikle her yönüyle anladığımdan emin olmam gerekir. Eğer dibe atmak için zamanım yoksa, hedeflerime ulaşmak için mümkün olan en küçük değişikliği yaparak asgari risk almalıyım.

Genellikle küçük bir düzeltme / değişiklik yapacağım ve daha sonraki gelişmeler için bir şeyleri dibine inmek ve her şeyi yeniden düzenlemek için bahane verecek bir özellik öneriyorum. Sonra, özellik yol haritasında sona erene kadar kodu yok saymak için elimden geleni yapıyorum.


3

Eski kod birkaç yıldan daha eski olduğunda, kodun yazıldığı sırada var olan dil veya işletim sistemlerinde vs. kısıtlamalar nedeniyle bu şekilde yazılmış olabilir. Hey şimdi kötü gözüküyor ama sonra kötü mü? Geliştiricinin yaptığı şey için bir nedeni olduğunu varsaymaya çalışıyorum. Bu sebep artık geçerli olmayabilir, ancak genel bir beceriksizlik yerine bir tane olduğunu varsayarak (genç programcılar 5 yıl içinde belki de daha az kodunuz için aynı şeyi düşünüyor olacak) sizi daha az sinirlendiriyor. Eğer çalışırsa ve onunla ilişkili hiçbir sorun yoksa, ne kadar çirkin olursa olsun, daha heyecan verici problemleri çözmenize izin vereceğinden, bu eski kodu kullanın.


Ah yaş eski soru NEDEN ...

1

Geçmişte, başkasının koduna işemek ve onu "benim" tarzımdan atmak için zamanım olmadığında, çok görev odaklı olmaya başvurmak zorunda kaldım:

Bu koda eklemeye / düzeltmeye / çalışmaya çalışıyorum.

Yaptığım şey bu hedefe doğru mu? Olmazsa, yapmayı bırak ve son zamana geri dönmeye görev odaklı değişiklikler yapıyorum.

Bu görev bittim mi? Öyleyse, sezgisel olmayan Martian kalıbı tarafından yazılmış gibi görünse de, kodla uğraşmayı bırakın.


1

Gelecekte kod ve gerekli tüm düzeltmelere sahip olmaya hazır değilseniz, ona dokunmayın. Yazmadığınız bir şeyi kırdığınızda bir şeyi düzeltmek isteme eğiliminin üstesinden geleceksiniz, çünkü dalmadan önce yeterince iyi çalışmadınız ve tekrar çalışmanız 2 gün sürüyor ve bir yangın tatbikatı alıyor .

Beni yanlış anlamayın ... kodunuzu yeniden düzenlemenin meşru sebepleri var, ancak bir işletme kodun çalışmasını talep ederse ve içeri girmeden önce sonuçlarını bilmeden "düzelt" .


1

Bir seferde birazcık yeniden düzenlemek yararlı olabilir, ancak bu davranışın neden orada olduğunu ve ne etkilediğini anlamadığınız sürece, kodun gerçekte nasıl davrandığını küçümseme konusunda çok dikkatli olun. Ne yazık ki, en kötüsünü gerektiren kod, davranışa dokunmadan değiştirmek bazen en zorudur, ancak genellikle bazı kısımlarını düzeltebilirsiniz veya en azından yorum yapabilirsiniz.


0

Bugünlerde neredeyse sadece eski kodlar üzerinde çalışıyorum ve her zaman "Ah,% t, ne düşünüyorlardı?" Diye düşünüyorum. . Sonra kod için birim testleri yazmaya başladım ve kontrol akışını ve bağımlılıkları gerçekten analiz etmem gereken nokta budur.

Bazen birim testlerini kolayca yazmak mümkün olmuyor. Ancak denemeye çalışırken kod hakkında bilgi alıyorum ve neden olduğu gibi yazıldığını anlayacağım. Bazen bu, kodun gerçekten bir karışıklık olduğunu kanıtlar, bazen orijinal geliştiricilerin düşünce sürecini anlarım ve yeni bir işlevsellik eklemek istediğimde faydalı belgeler ekleyebilir veya bir kod parçasını yeniden yazabilirim.

Benim için kodumun 12 ayda geri döndüğümde kendime aynı gözükeceğini düşünmemde yardımcı oluyor .


0

Tecrübe ile, kodun ne zaman gerçekten kötü olduğunu ve ne zaman farklı bir tarzda yazıldığını bilmek karar verir. Tamamen işlevsel ve bakımı kolaysa ve iyi bir otomatik test kapsamı varsa , fena değil ve sadece fikrinizi açmanız gerekir. Muhtemelen bir şeyler öğreneceksin. Hatalı kod işlevsel ve bakımsız değil.

İşte gerçekten kötü kodların bazı işaretleri:

  • Yenilenmek yerine büyük mantık blokları kopyalandı.
  • Sınıflar veya paketler arasındaki dairesel bağımlılıklar
  • Yüksek kavrama; düşük uyum
  • Kullanılmayan değişkenler, hiç okunmamış değişkenlere yazma, ulaşılamaz kod.
  • Standart kütüphane fonksiyonlarının yeniden uygulanması, örneğin tarih formatlama.
  • Gereksiz yere karmaşık mantık; yani, 10'un iyi yapacağı 50 kod satırı.
  • Sınıfların veya yöntemlerin amacını açıklayan yorum yok.
  • Yanıltıcı yorumlar.

Otomatikleştirilmiş testlerin eksikliği, kodun kötü olduğu anlamına gelmez, ancak projenin kötü olduğu anlamına gelir.

Bunlar zevk meselesi değil; bu uygulamalar program bakımını çok daha pahalı hale getirir.

Kendini nasıl hazırlarsın?

Yeni bir kod tabanında başarılı bir şekilde çalışmanın biraz zaman alacağını kabul edin. "Mükemmel bir şekilde bakımı yapılabilir" ise ve yüksek test kapsamı varsa, daha az zaman alır ancak yine de hemen gerçekleşmez. Eğer kod kötüyse, ilk yaptığım şey paydaşları kötü durumda olduğu konusunda uyarmak ve başlangıçtaki ilerlemenin yavaş olacağı yönünde. Eğer şüphelilerse, o zaman iddiamı onlara gerçek koddaki bir sorun örneği göstererek ve bunun endüstrinin en iyi uygulamalarından nasıl farklılaştığını açıklayarak yedeklerim.

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.