Programlama sırasında kodunuzu ne sıklıkla çalıştırıp test ediyorsunuz? [kapalı]


16

Özellikle C'de sıfırdan yeni kod yazarken, derleyiciyi zaman zaman sözdizimi kontrolü dışında bir şey için çalıştırmadan saatlerce, hatta günlerce yazarken buluyorum.

Daha büyük kod parçalarını dikkatli bir şekilde yazma ve sadece kodun kafamdaki akışı analiz ederek ne yapması gerektiğine ikna olduğumda iyice test etme eğilimindeyim. Beni yanlış anlamayın - hiç test yapmadan 1000 satır yazmam (kumar olurdu), ama tamamlandığımı düşündükten sonra bütün bir altyordam yazarım ve test ettim (ve gerekirse düzeltin).

Diğer tarafta, editörde girdikleri her satırdan sonra kodlarını çalıştıran ve test eden yeni başlayanlar gördüm ve hata ayıklayıcıların dikkatli olmanın ve akıl sağlığının yerini alabileceğini düşünüyorum. Dil sözdizimini öğrendikten sonra bunun çok dikkat dağıtıcı olduğunu düşünüyorum.

Sizce bu iki yaklaşım arasındaki doğru denge nedir? Tabii ki birincisi daha fazla deneyim gerektiriyor, ancak üretkenliği olumlu veya olumsuz olarak etkiliyor mu? İkincisi hataları daha ince bir düzeyde belirlemenize yardımcı olur mu?


3
Bütün bir altyordamın yazılması saatler mi sürüyor?

1
@Thorbjorn Altyordam yaklaşık 999 satır uzunluğunda ve gizlenmiş: #define h for(int c=y-3; y; c++/(randomTypeIDefinedEarlier)s*(float)4*(lol)sin((helloWorld)mysub(2,1,++a,*(r+z))); goto xkcd)Ve bu sadece bir satır.
Mateen Ulhaq

1
derleyiciler bazen bir programı derlemek için uzun zaman alabilir, bu yüzden her zaman derlemek iyi bir uygulama değildir. her fonksiyondan sonra iyi bir uygulamadır. i yeni işlevsellik veya zor bir kod parçası ekledikten sonra yeniden derleyin. Sadece sözdizimi denetleyicisi olarak kullanıyorum. kodunuzu dikkatli bir şekilde kontrol etmenin ve gizli hatalardan ve gelişigüzel davranışlardan kaçınmanın yerine geçemez.
Ross

Yanıtlar:


6

GERÇEKTEN üzerinde çalıştığınız projenin yönüne bağlıdır.

  • Bir devlet makinesi gibi çalışan OpenGL ile bir şey yaptığımda, yanlışlıkla bir şeyleri berbat etmediğimden emin olmak için sürekli derler ve koşarım. Bir fonksiyonun sonunda sıfırlamayı hatırlamadan bir değer ayarlamak, uygulamanın yalnızca siyah bir ekran oluşturmasını kolayca sağlayabilir.

  • Daha büyük ölçekli "kaputun altında" gelişme için önceden mümkün olduğunca çok test almaya çalışıyorum. Testler bana neyin kırıldığını daha kolay söyleyebildiğinden, tipik olarak uzun derlemeyi beklemek zorunda kalmadan bir süre gidebilirim.

  • UX tasarımı için, her zaman nasıl çalışacağına (veya ona yakın) benzeyen bir tür görsel tasarımcı kullanıyorum. Aslında her zaman tasarım kodunu derlemektedir.


63

Kişisel olarak, küçük parçalar halinde çalışmalıyım çünkü biyolojik L1 önbelleğimde saatlerce kodlama tutacak kadar akıllı değilim. Sınırlı yeteneklerim nedeniyle, çok gevşek bağlantıya sahip küçük, uyumlu yöntemler ve tasarım nesneleri yazıyorum. Daha güçlü araçlar ve diller, bina olmadan daha uzun kod yazmayı kolaylaştırır, ancak benim için hala bir sınır var.

Benim tercihim küçük bir parça yazmak, beklediğim gibi çalıştığını doğrulamak. Sonra, teoride, o parçanın ayrıntılarını unutmak ve mümkün olduğunca kara bir kutu gibi davranmakta özgürüm.


12
"... Yeteri kadar akıllı değil .." için oy verin Uzun süredir bu şekilde hissettim.
leed25d

4
L2 önbelleğiniz ne olacak?
Mateen Ulhaq

Bunu oylayacaktım, ama skor 42'de ...
Wayne Werner

Yeni modellerde çok daha büyük L1 önbellekleri var. Sizinkini ne zaman satın aldınız? Donanım güncellemesi yapmak isteyebilirsiniz.
Peter Ajtai

Peki bu modelin yaşı o kadar "bütçe" hattı olduğu gerçeği kadar değil. :(
dss539

17

Benim testini yazmak ister önce benim uygulama kodu yazmak. Bunu üç nedenden dolayı seviyorum:

  1. Test kodumu önceden yazmak, kodumun nasıl kullanılması gerektiğini düşünmeme yardımcı olur. Programımı tasarlarken ne zaman düşünmediğimi düşündüğüm son vakaları düşünmeme yardımcı oluyor.
  2. Tüm test durumlarım geçtiğinde uygulama kodu yazmayı tamamladığımı biliyorum.
  3. Koddan önce test yazma alışkanlığına girmenin, kodunuzun yeni hatalar eklemediğini kanıtlamanın da ek bir etkisi vardır (iyi test senaryoları yazdığınız varsayılarak).

2
"Tüm test vakalarım geçtiğinde uygulama kodu yazmayı bitirdiğimi biliyorum." - Gerekli tüm test senaryolarını yazıp yazmadığınızı nasıl belirlersiniz?
dss539

1
Bu harika bir soru. Bence, sen olamaz tamamen kod fonksiyonları doğru bunu belirten bir resmi kanıt olmadığı sürece emin. Birim testlerini, kodunuzun ne demek istediğinizi yapma eğiliminde olduğunun kanıtı olarak görüyorum. Ancak, eklediğiniz özellikler büyüdükçe, yazacağınız test senaryolarının sayısı da muhtemelen artacaktır. Şüpheniz varsa, bir başkasından test davalarınıza bakmasını ve aklınıza gelmeyen vakaları sormasını isteyin.
David Weiser

4
@David - Resmi kanıtınızın hiçbir hatası olmadığını resmi olarak nasıl kanıtlarsınız? Sizin tarafınızdan algılanan gereksinimlerin, gerçeklikteki gereksinimlere uyduğunu resmi olarak nasıl kanıtlıyorsunuz? Bir tanımın başka bir tanımla eşleştiğini resmi olarak kanıtlayabilirsiniz, ancak her iki tanımın da aynı şekilde yanlış olması mümkündür - özellikle de her iki açıklama aynı kişi tarafından yazılmışsa. Matematik notasyonunda bir şeyler yazmak insanları yanılmaz kılmaz. Çok sayıda matematiksel “kanıt” ın (uzun dönemli çok detaylı kontrollerden sonra) yanlış olduğu kanıtlanmıştır.
Steve314

1
@ Steve314: AFAIK, bir algoritmanın doğruluğunu resmi olarak kanıtlarken, beklenen doğruluğun ne olduğunu tam ve öz bir şekilde belirtirsiniz. Yine de, "doğruluk" tanımının aslında doğru olmayabileceği konusunda iyi bir noktaya değindiniz .
David Weiser

1
@ dss539, bu programın uygulamak istediği kullanım durumlarından gelir.

4

Kendimi zaman zaman sözdizimi kontrolü dışında herhangi bir şey için derleyiciyi çalıştırmadan saatlerce, hatta günlerce kod yazarken buluyorum.

Saatler - günler, kodunuzu kendi başlarına doğrulanıp test edilebilen daha küçük parçalara bölme yeteneğini kaçırdığınızın açık bir işaretidir. Kesinlikle bunun üzerinde çalışmalısınız.

Daha büyük kod parçalarını dikkatli bir şekilde yazma ve sadece kodun kafamdaki akışı analiz ederek ne yapması gerektiğine ikna olduğumda iyice test etme eğilimindeyim.

Kafanızda analiz edilmesi gereken saatler gerektiren daha büyük ve dolayısıyla karmaşık kod parçaları yazmak yerine, daha büyük, çok büyük olmayan yapı taşları oluşturmaya çalışmalısınız. Buna bina soyutlamaları denir - ve bu iyi bir programlamanın özüdür, kesinlikle bir acemi yetiştirmenin bir işareti değildir.

Mükemmel programlama mükemmel Bilardo oynamak gibidir - iyi bir oyuncu sert vuruşlar oynamaz. Bunun yerine, her vuruştan sonra topların bir sonraki vuruşun tekrar kolay olduğu bir konumda durduğu bir şekilde oynar. Ve bir programcı iyi değil çünkü karmaşık kod yazabiliyor - iyi çünkü karmaşık kod yazmaktan kaçınabiliyor .


3

Aşağıdaki koşullardan birinin karşılanıp karşılanmadığını derleyip test ediyorum:

  • Son derleme 15 dakika önce yapıldı
  • Son derleme 25 satır önce
  • Yeni işlev / altyordam uygulandı
  • Büyük değişiklik
  • Yeni özellik (veya özellik olarak gizlenen bir hata)
  • Hata düzeltme (bir "özellik" kaldırıldı)
  • Sıkıldım

1

Kodu ne sıklıkta çalıştırıp test ettiğim, o anda hangi dilde çalıştığımıza bağlıdır. Saklı bir yordamı kodlarsam, genellikle her şey orada olana kadar bekleyeceğim.

Öte yandan, Lisp'te kod yazıyorsam, yazdıktan sonra her işlevi deneyeceğim.

Haskell kodlama, genellikle her tür hataları yakalamak için her işlev sonra bir derleme yapacağız ve her şey bittikten sonra kodu çalıştırın.


1

Yeşili test etmek için yeterli kod yazıyorum. Yani birkaç dakikada bir test yapıyorum. Bu benim C ++ tarzım. Ancak Ruby'de autotest kullanıyorum, bu yüzden her kaydettiğimde güzel pop-up aracılığıyla test geri bildirimi alıyorum. Kod yazmayı bile bırakmıyorum, sadece arka planda oluyor.


1

İhtiyacı olsun olmasın, saatte üç kez.

Önce test programlama yapıyoruz ve sadece çalışma kodunu VCS'ye taahhüt ediyoruz. Smolderbot her 20 dakikada bir repoyu denetler ve test takımını çalıştırır. Arızalar derhal giderilmek üzere derhal tüm programlama ekibine gönderilir.


1

Benim için ne kadar yazdığımla ilgili değil. Test etmek zorunda kalmadan binlerce satır basit kod yazabilirim. Ama daha zor bir kod yazarken, her bir fonksiyonu birbirine bağlı bir set yazdıktan sonra tek tek test etme eğilimindeyim.

Bazen, kodunuzun çalıştığını görmek büyük bir motivasyon artışıdır, bir süredir hiçbir şey çalıştırmadıysanız, çalıştığını görmek güzeldir.


0

Benim için; -
Kısa zaman çizelgesi (düşünmek için çok fazla zaman yok) - kod yazma, derleme, test etme. hata ayıklama
Yeterli zaman - (bittiğinde) {küçük kod yazma, derleme}, test, hata ayıklama


Birincisinin ikincisinden daha uzun sürdüğünü görüyorum: çok küçük bir test / yazma döngünüz varsa hata ayıklamak için daha fazlasına sahipsiniz.
Frank Shearar

Olabilir. Ancak kısa zaman çizelgesi, eşek yanıyor demektir ve yöneticinin bazı görevlerin% 100 tamamlandığını söyleyen rapora ihtiyacı vardır.
Manoj R

0

Her kodlama kavramını test ediyorum. Bazen bu bir işlev veya sınıftır ve bazen bir if ifadesinden başka bir şey değildir. Kavram çalıştıktan sonra bir sonrakine geçin.


0

Koddan önce testler yazmaya çalışıyorum. Testlerimi bir taahhütten önce en az iki kez çalıştırıyorum. Daha sonra Continous Integration sunucusuyla yeniden çalışır.

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.