Küçük bir değişiklik yapmak, test etmek ve ardından “durulamak ve tekrarlamak” kötü bir alışkanlık mıdır?


54

Ben birkaç yıllık deneyime sahip bir programcıyım. Belirli bir alışkanlığım olduğunu anladım. Bunun gerçekten kötü bir alışkanlık olup olmadığından emin değilim.

Bir çözüm için gerçekleştirilecek görevlerin bir listesini alıyorum, örneğin küçük küçük görevler gibi.

  1. Bu kullanıcı kontrolünün kaynaklarını değiştir
  2. Başka birinin boyutunu değiştir
  3. Biraz HTML ekleyin ve başka bir kullanıcı kontrolüne kodlayın

Bu görevlerin hepsi küçük. 10 dakika içinde yapılabileceklerini söylüyorum, ancak küçük değişiklikler yapma ve daha sonra bir web tarayıcısında tekrar tekrar test etme alışkanlığım var . Bu iyi bir uygulama mı?

Yoksa hepsini aynı anda mı yapmalı ve sonra birlikte test etmeli miyim?

Eğer gerçekten kötü bir alışkanlık ise, küçük değişiklikleri tekrar tekrar test etmekle zaman kaybetmek gibi hissettiğinden nasıl düzeltebilirim?



3
@gnat oyladığınız cevabın cevabı da bence dayanıyor - programmers.stackexchange.com/questions/154733/… Okuduğum her cevap kendi görüşünüzü veriyor mu, yorumunuz var mı?
Matematik

2
Bu değil. ikinci en yüksek oyu alan cevabınıza ne dersiniz - programmers.stackexchange.com/questions/159964/… - sizce de öyle değil mi?
Matematik

7
Yaklaşım , bir test oluşturduğunuz, testi geçmek için gereken değişiklikleri yaptıktan sonra testlerinizi çalıştırmak için Test Driven Development'a benziyor . Daha sonra bunu ikinci bir test için tekrarladığınızda, ikinci test çalışmanız ilkini içerir; hala çalıştığını kanıtlamak için tekrar tekrar denemek istiyorsunuz , ancak otomatik.
Kevin Hogg

5
Alışkanlığın zıddı, bir sürü değişiklik yaparak ve ancak o zaman test ederek kötü alışkanlık olduğunu söyleyebilirim.
Chris B. Behrens

Yanıtlar:


130
  • Bu iyi bir pratik.
  • Bilimsel yöntemi takip ediyorsunuz.
  • Herhangi bir testten önce birkaç şeyi değiştirirseniz, o zaman her birinin test edilmesi daha zor ve belki de güvenilir olmayacaktır, çünkü ön koşullar hazırlamak daha zor olacaktır ve farklı değişiklikler öngörmediğiniz şekillerde birbirleriyle etkileşime girebilir.
  • Şimdi "boşa gittiğini " hissettiğin zaman, daha sonra bütünleşme, test etme ve bakım aşamalarında tekrar kazanacaksın.
  • Gitme zamanı.

9
AFAIK, UI programlama için, sadece iyi bir uygulama değil, sadece kabul edilebilir bir uygulamadır. Bu nedenle yazılım şirketleri What you see is what you getHTML, CSS, Widget, vb.
InformedA

38

Küçük değişiklikler yapmak ve her birini test etmek kötü bir şey değil. Her bir değişikliğin etkisini görmenizi sağlar ve bir değişiklik bir soruna neden olduğunda, hangi değişikliğin sorunlara neden olduğunu bilmek çok kolaydır - en sonuncusu!

10 öğeden oluşan bir görev listeniz varsa ve hepsini bir kerede yapın ve ardından sayfayı test edin ve sayfanın yanlış göründüğünü fark ederseniz, hangi değişikliğin sayfayı kırdığını bilmek daha zor olabilir .

Tabii ki, bu yaklaşımı aşırıya çekmek mümkündür. Denge bulmak anahtardır ve bu neyi değiştirdiğinizi ve değişikliklerin birbirlerini nasıl etkileyebileceğini daha iyi anlamakla birlikte gelir .


18

Sorunuz iki bölümden oluşuyor:

  1. hepsini bir kez uygulayıp sonra birlikte test etmeli miyim?

    Bir VCS kullandığınızı varsayıyorum .
    Ve hangi görevlerin yapıldığını izlemek için, görev listesini bir görev listesine dağıtmanın bir anlamı var: bir görev, bir taahhüt .

    Bu, mevcut kod tabanının farklı sürümlerini yönetmeyi kolaylaştırır; önceki bir duruma geri dönebilir, ana gövdeye girmek istediğiniz değişiklikleri kirazlı bir şekilde toplayabilirsiniz.

    Cevap açıktır:

    Hayır, sadece birer birer değişiklik - birer birer görev .

  2. fakat küçük küçük değişiklikler yapma konusunda kötü bir alışkanlığım oldu ve sonra tekrar ve tekrar web tarayıcısında test ettim, bu iyi bir uygulama mı?

    Bu test kodu / UI için iyi bir uygulamadır neyse ama saçma tarayıcıda tekrar tekrar bunu yapmaktır. Bunu sizin için otomatik olarak yapacak araçlar var ( Selenyum, PhantomJS / Casper, ZombieJS )

    Bu davanın cevabı:

    Evet, yazılımı bir kereden fazla test etmek iyi bir uygulamadır, ancak otomasyon kullanmak


2
+1, ancak otomasyon kullanma konusunda hemfikirim. Yeni bir özellik geliştirirken hem manuel olarak hem de otomasyonla test ediyorum. Manuel testler, olayların beklediğim gibi davrandığından emin olmamı sağlıyor. Otomatik bir testi yanlış yazmak, geçmesini izlemek ve her şeyin iyi olduğunu düşünmek, daha sonra manuel olarak test etmek ve bir şeylerin yanlış olduğunu görmek mümkündür.
Kevin - Monica

Kesin bir görevden biri,
VCS'yi

görevi ne kadar ayrıntılı bir şekilde tanımladığınıza bağlıdır;) veya dilerseniz: bir "bilet" bir taahhüt / şube. Git kullanımı bu
Thomas Junk

1
Kevin'in söylediklerini genişletmek için ön uçta yeni bir özellik ekliyorsanız, her zaman manuel olarak kontrol etmeniz gerektiğine inanıyorum (henüz ön uç iş için TTD'ye bir eşdeğer buldum), fakat aynı zamanda otomasyonunuzu da istiyorsunuz. Mevcut özellikleri bozmamanız için yardım paketi.
scragar

@ scragar evet. Otomasyon regressiontesting içindir.
Thomas Junk

6

Bir geliştiricinin sahip olduğu herhangi bir alışkanlık için 2 ana soru vardır:

  1. Yaptığınız kodun kalitesini nasıl etkiler?
  2. Verimliliğinizi nasıl etkiler?

Her ikisine de cevap "Daha iyi yapar" ise, alışkanlık edin, başkalarına öğretin!
Birinin cevabı "Daha İyi" ve diğeri "Daha Kötü" ise - bu bir stil ve bunun hakkında bilinçli olmalısınız. Her zaman uygulanabilir değildir ve onu her zaman bastırmak için çaba sarfetmeniz gerekebilir.
Her ikisine de cevap "Olumsuz" ise - ciddi bir sorununuz var.

Tabii ki ilk 2 vaka için ayrıca “Olumlu etki bir şekilde otomatikleştirilebilir mi, kurumsallaştırılabilir mi?” Diye düşünmelisiniz. Belki de her seferinde farklı tarayıcıları denemekten daha iyi bir test yazmak daha iyidir. (Not, web geliştirmede uygun yerleşimi test etmenin o kadar kolay olmadığını biliyorum, bunun her zaman mümkün ya da zamana değmeyeceğini söylemiyorum).

Bu özel durumda, kalite artışı, verimlilik olduğunu bana öyle geliyor olabilir azalmıştır. Küçük değişiklikler için büyük olasılıkla kötü (özellikle değişiklikler birbiriyle ilişkiliyse), daha büyük için - bu tür iyi. Son sonucu da test ettiğiniz sürece ("her modül test edildi ve çalışıyor, bu yüzden her şey iyi çalışıyor, test etmeye gerek yok!") Kaçının.

Bu nedenle - iş gününüzün% 90'ı gerçekten küçük değişiklikler yapmıyorsa - bu tamamen iyi bir alışkanlıktır. İş gününüz böyle ise, belki iş tarzınızı (veya iş yerinizi) incelemek isteyebilirsiniz.


4

Bu etki alanına bağlıdır. Bir web sayfası hazırlamak için iyi çalışır ve anında geri bildirim alabilirsiniz (doğrudan tarayıcıdan bile yapabilirsiniz!). Benzer şekilde, başlatılması uzun zaman gerektirmeyen bir şey için iyi sonuç verecektir. Bu, zihinsel iş yükünüzü düşük tuttuğu ve hata olasılığını azalttığı için tercih edilir.

Bununla birlikte, kodu derlemeniz gereken ve gerçekten harcanan zamanın önemsiz olduğu (birkaç dakika) gerçekten büyük projeler için bu, çok fazla zaman kaybına neden olabilir, bu nedenle sık sık başvurmanız gerekir:

  • iş akışınızı "paralelleştirmek" (örneğin aynı anda birden fazla binada çalışmak) veya
  • tek seferde mümkün olduğu kadar çok şey yapmak veya
  • çalışmak ve daha sonra büyük projeye entegre olmak için küçük, bağımsız bir bölüm oluşturun.

(Muhtemelen başka yolları da var.)


Doğrudan tarayıcıda yapmak için +1. Sık sık tarayıcımda, yapmak üzere olduğum gerçek çalışmanın fırlatma prototipi olarak CSS tweaks yapıcam.
RubberDuck

0

Diğerlerinin de belirttiği gibi, bu kesinlikle kötü bir alışkanlık değil . Genelde bir seferde sadece birkaç değişiklik yapmayı tercih ederim. Tek istisna, hepsi birbirini etkilemeyen büyük bir değişiklik listesine sahip olmam (örn. Küçük stillerde veya kopyada değişiklikler, farklı sayfalarda değişiklikler vb.). Düzenleri değiştiriyorsanız, bir seferde birer tane olmak üzere değişiklik yapmaya devam edin, böylece bir sonraki sayıya geçmeden önce tüm desteklenen tarayıcılarda her şeyin% 100 olduğunu doğrulayabilirsiniz.

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.