Kod incelemesi sırasında birim testleri, geliştirme sırasında birim testleri için zayıf bir alternatiftir.
Önerdiğiniz şey sezgisel olarak çok mantıklı geliyor. İnceleme ne için? Kodun iyi olduğunu kontrol etmek için. Testler ne için? Kodun iyi olduğunu kontrol etmek için. Öyleyse neden ikisini birleştirmiyorsun?
İşte nedeni.
Teste kod getirmek zor bir iştir. Yapması gereken tek şeyde çalışan kod yazmak bir şeydir; Etkin ve verimli bir şekilde test edilebilecek kod yazmak da başka bir şeydir. Sadece kodun şu anda iki senaryo altında çalışması - "gerçek iş" ve "test" - çok daha fazla esneklik talep ediyor, bu kodun kendi başına anlamlı bir şekilde ayakta durabilmesini istiyor.
Kodunuzu test edilebilir olması için yazmak, ekstra iş ve beceridir. Biri üstlenmeden başka daha başlamama akılda test edilebilirliği ile yazılmamış zaman, test edilebilir kod, önemli bir görev olabilir.
Geliştirici ve inceleyen arasındaki çabayı çoğaltıyorsunuz. Muhtemelen, geliştirici en azından yapılmaksızın onun kodunu teslim edilmez bazı işe yarıyor o güven seviyesinde. Zaten kodu test etmesi gerekiyor. Şimdi, farklı seviyeler ve test kapsamları var. QA, geliştirici ve incelemeden sonra kodu test eder . Ancak geliştirici ve incelemeci için uygun olduğunu düşündüğünüz kapsam ne olursa olsun, geliştiricinin kodu bir kez nasıl test edeceğini anlaması bir anlam ifade etmiyor , ancak testlerini atılması ve yeniden üretilmesini zorlaştırıyor ve ardından incelemeyi yapması tekrar test geliştir, bu sefer otomatik ve tekrar üretilebilir olanlar. Sadece ikisinin de aynı testleri yazmak için zaman harcamasını sağlıyorsunuz - bir kez zayıf, bir kez iyi.
İncelemeyi çok daha uzun, daha zahmetli bir adım haline getiriyorsunuz. Eğer test inceleme sürecinin önemli bir parçası ise, bazı testler başarısız olduğunda ne olur ? Gözden geçiren kişi bütün testleri yaptırmaktan sorumlu mu, bu yüzden de kodu ayıklaması gerekiyor mu? Yoksa bir tanesine sınav yapmak, bir tanesini geçmek için ileri geri pinpon atılacak mı?
Bazen birbirleriyle ortogonal olan bir sürü test yazabilirsiniz, bu yüzden pinpon yapmaya gerek yok. Hakem, bir düzine testini yazıyor, bunların yarısı başarısız oluyor, geliştirici hataları düzeltiyor ve tüm testler geçerli kalıyor ve şimdi geçiyor. Ancak ... çoğu zaman, engelleyici hatalarınız ya da yeniden tasarım ve API değişiklikleri gerektiren hatalarınız olur ya da olmaz. İnceleyici ile geliştirici arasında ileri ve geri testler yapmakla ilgili sorumluluk alıyorsanız, o zaman aslında inceleme aşamasında değilsiniz. Hala gelişiyorsun.
Testler yazmak istemek daha ayrıntılı incelemeyi teşvik etmiyor. Temel olarak, daha derinlere indiğiniz, daha fazla test yazmanız gerektiği ve muhtemelen sisteme girmeleri gereken zor testler olacağı anlamına gelir .
Teşvik ettiği yerde testleri yazan geliştiriciyle karşılaştırın: Önemli testler yazmazsam, gözden geçiren kişi bunu incelemede gösterecektir.
Gözden geçiren kişi bile, kodun kapsamlı testlerini gözden geçirmesi gerekiyorsa sistemi daha iyi anlayacaktır , daha sonra derin kazma testi yazmayı bırakabileceği zaman kendisinin karar vermesi gerekiyorsa ve kod incelemesini tamamlaması gerekir.
Geliştirici birim testleri yazmıyorsa, yorum yapan kişi de yapmaz. Testleri ortak bir uygulama olarak benimsemenin birçok engelleri vardır. Belki çok fazla baskı altındasın ve kod tabanını test etmek zor. Belki test konusunda o kadar tecrübeli değilsindir ve öğrenme eğrisini karşılayamayacağını hissediyorsun. Belki de test yazan kişilere tehdit notları gönderen bir balta katiliniz vardır. Bilmiyorum!
Ancak sebebi ne olursa olsun, gözden geçirene ve geliştiriciye eşit şekilde uygulanacağına iddia etmek güvenlidir. Ekip stres altındaysa, gözden geçirenin geliştiriciden daha fazla vakti yoktur (eğer öyleyse, işi yeniden dağıtır, böylece insanlar çok stresli olmaz ). Hiç kimse birim testlerini nasıl iyi yapabileceğini bilmiyorsa, eleştirmen de muhtemelen bunu yapmaz (eğer öyleyse, oturup arkadaşlarına ders vermelidir ).
Bu öneri, kazancı bir meslektaştan diğerine geçmeye çalışmak gibi geliyor. Ve bunun iyi bir şekilde çalışmasının bir yolunu göremiyorum, çünkü her şeyden önce, çünkü birinin test edebileceği tek kişinin olduğu ve başka birinin yapamayacağı bir durum yaratmak gerçekten zor (ve sağlıksız) Herhangi bir test.
Ne yapar işi olduğu yanı yorumu kapak testleri sahip. Geliştirici zaten on test yazdıysa, gözden geçiricinin başka bir on önerisinde yardımcı olması muhtemeldir, geliştiricinin herhangi bir şey yazmamış olması gerekir.
Köşe kutularını test etmek büyük bir görev ise, bunu takım boyunca daha yaygın bir şekilde dağıtmak anlamlı olabilir. ** Kod ilk kez test edilebilir olduğunda, daha fazla test yazmak çok daha kolay hale gelir. **
İnceleme için bir zamandır nokta köşe durumlarda. Ve eğer eleştirmen içeri girip bulduğu köşe davaları için bir test yazabilirse, hey - en iyisi! Ancak, genel olarak konuşursak, gözden geçirenin geliştiricinin çok kötü bir fikir gibi görünmediği yerlerde testler yazabileceğini varsayarsak .