Önce mavi gökyüzü / prototip projelerinde birim testi veya entegrasyon testlerinin yazılıp yazılmayacağını değerlendirme


11

Son zamanlarda fark ettiğim bir şey şu tür projeler yaptığım zamandır:

  • Bir projeye başlarken
  • MVP / prototip üzerinde çalışma
  • Tamamen tanımlanmamış özellikler ekleme
  • Daha küçük ölçekli bir proje üzerinde çalışmak

Referans olarak, şu anda bazı yorumlar ve tüm boşluklar dahil olmak üzere ~ 1k kod satırına sahip bir Python projesi üzerinde çalışıyorum.

İlk önce entegrasyon testlerini yazmak, kod üzerinde çalışmak ve daha sonra API biraz sertleştikten sonra aslında birim testleri eklemek üzerinde çalışmak çok daha kolay buluyorum . Tabii ki, benim işlevim üzerinde çalıştırabileceğim test türleri ve mainher şeyden daha "uçtan uca".

Bunun nedeni, bir API'nin oldukça hızlı bir şekilde değişmesi durumunda birim testlerin gerçekten can sıkıcı olmasıdır;

Bu yaklaşım iyi bir yaklaşım mıdır ve bu tür projeler için önce birim veya entegrasyon testleriyle başlayıp başlamadığına karar verirken hangi kriterler dikkate alınmalıdır? API'lar daha sağlamlaştırılmadan önce bu tür projeleri test eden birim değerini kaçırıyor muyum?


6
Sizin için en uygun olanı yapın. Verimli olmak için belirli bir şekilde çalışmanız gerektiğini söyleyen insanları dinlemeyin: ne zaman verimli olduğunuzu ve ne zaman etkili olmadığınızı bilirsiniz. Önce entegrasyon testlerini veya önce birim testlerini yazıp yazmadığınız önemli değildir. Bazı projeler için bir yol daha kolay, diğerleri için ise diğer yol daha kolay olabilir. Tanımladığınız şey yukarıdan aşağıya ve aşağıdan yukarıya tasarım arasındaki fark olabilir. Her ikisi de yararlıdır, ancak yukarıdan aşağıya genellikle daha iyi tasarımlar üretir.
Frank Hileman

@FrankHileman, bu benim yaklaşımım. Ama merak ettiğim için bir şeyi kaçırmam durumunda doğru yaklaşımı yaptığımdan emin olmak istiyorum .
enderland

Önce spesifikasyonlara odaklanın: kod olmayan kısımlar. Sistemin değişmezleri nelerdir? Bunu yaparken, önce düşük seviyeyi veya önce yüksek seviyeyi bulmanız gerektiğini görebilirsiniz. En kritik veya riskli algoritmaların bulunduğu yere bağlıdır. Öncelikle bunları yoldan çıkarmaya çalışın. Temel risk yönetimi budur.
Frank Hileman

1
Prototip üzerinde çalışmak durumunda hiç bir test yazmamakta bir sakınca yoktur. Prototipin amacı çalışma fikrini kontrol etmektir. Prototipin uygulanması, beklenen uygulama tasarımının tanınmasına yardımcı olacaktır.
Fabio

Buna dışarıdan geliştirme denir. Tam olarak bunu yapan şu kitaba göz atmak isteyebilirsiniz: amazon.com/dp/0321503627
Eternal21

Yanıtlar:


7

API'lar daha sağlamlaştırılmadan önce bu tür projeleri test eden birim değerini kaçırıyor muyum?

Hayır. İyi gidiyorsun.

TDD'nin iki büyük amacı:

  • Dahili uygulama yerine, gerçek kullanım ile arayüzleri tanımlama 1
  • Test kapsamını en üst düzeye çıkarma

Test kapsamı her iki yönde de oldukça iyi bir şekilde maksimize edilebilir. Yani, küçük , yalıtılmış birimleri veya büyük , "entegre" birimleri test edip etmediğinize bakılmaksızın, uygulamalarınızdan önce testlerinizi yazma seçeneğiniz vardır.

Ne ( "entegrasyon") daha yüksek düzeyde yazılı kazanç yaptığınızı olarak, sizin üst düzey arayüzleri ve etkileşimleri olduğu güvence olduğunu, ilk test de oldukça kendi iç uygulamaları ile daha kullanımlarına göre öncelikle tanımlanmış.

Aynı etki büyük ölçüde iyi bir "mimarlık" ve diyagramlama ile elde edilebilir . Ancak, bu üst düzey testler genellikle diyagramlarınızda kaçırdığınız şeyleri ortaya çıkarabilir - ya da "mimari" çalışmalarınızda yanılmışsınızdır .


Gerçekten TDD (veya bunun gibi bir şey) yapmıyorsanız, testleri yazmanızın sırası çok önemli değildir. Arabirimler test ettiğiniz zamana kadar zaten var, bu yüzden testlerinizin herhangi bir şeyi değiştirmesi çok daha az olası - sadece belirli kırılma değişikliklerine karşı korumaya hizmet edecekler.

Ancak, uygulamayı yukarıdan aşağıya doğru yukarıdan aşağıya oluşturmakla ilgileniyorsanız , ilk kurşun noktası hala büyük ölçüde geçerlidir. Yüksek seviye kodu, düşük seviye arayüzlerin tanımlanmasına yardımcı olur. İlk önce düşük seviye arayüzler yazılırsa (veya zaten mevcutsa), yüksek seviye kodu onların merhametindedir ...


1. Bu, tam TDD yapmasanız bile geçerlidir. Uygulamanızdan önce sadece 1 veya 2 test yazıyor olsanız bile , bu 1 veya 2 testler çok geç olmadan arayüzlerinizi tanımlamanıza veya hassaslaştırmanıza yardımcı olabilir!


1

Ben senin çalıştığın gibi çalıştım. Ve sana yapamayacağını söylemeyeceğim. Karşılaşabileceğiniz bir şey hakkında sizi uyaracağım.

Her birim testi basitçe bir iyileştirme olduğunda, bunları esnek hale getirmeyi öğrenmek zordur. Regresyon testlerinden başka bir şey değildirler. Onları refactor'unuza yardımcı olmak için hiç kullanmadığınızdan, refactoring'i gerçekten zorlaştıran test türlerini yazmak çok kolaydır. Bu, TDD'ye olan tüm inancınızı kaybedene kadar kontrolden çıkma eğilimindedir.

Ancak, zaten bir şey üzerinde çalışıyorsunuz. Sana durmanı söylemeyeceğim. Kırmızı yeşil refactor döngüsünü baştan keşfetmek ve takip etmek için zamanınız olan başka bir şeye başlamanın buna değeceğini söyleyeceğim. Yeniden düzenleme yapmanıza yardımcı olması için testleri gerçekten kullandığınızdan emin olun. Bu şekilde ustalaşana kadar, önemli bir şey üzerinde idareli kullanın. Bu kodlamanın çok farklı bir yoludur ve alışmaya başlar. Yarı yolda yapmak hiç kimsenin faydası olmayacak.

Bahsedilen

İlk önce entegrasyon testlerini yazmak, kod üzerinde çalışmak ve daha sonra API biraz sertleştikten sonra aslında birim testleri eklemek üzerinde çalışmak çok daha kolay buluyorum. Tabii ki, ana işlevim üzerinde çalıştırabileceğim test türleri ve her şeyden daha "uçtan uca".

Bir birim testinin sadece bir sınıfa etki eden bir test OLMADIĞINI anlayın. Üzerinde çalıştığınız API , aşağıdakilerden herhangi birini yapmadan test edilebildiği sürece , birim testini iyi yaparsınız:

  • Veritabanıyla konuşuyor
  • Ağ üzerinden iletişim kurar
  • Dosya sistemine dokunur
  • Diğer birim testlerinizle aynı anda çalışamaz
  • Çalıştırmak için ortamınıza özel şeyler yapmanız gerekir (yapılandırma dosyalarını düzenleme gibi).

Michael Feathers: Bir Birim Test Kuralları

Bu yüzden uçtan uca testiniz iyi olan birden fazla nesne içeriyorsa. Bu birim testi değil nesne testi.

Özel yöntemlerin artık test edilmeleri gerekmediği gibi, bunları kullanan genel yöntemleri test ederek test edilirler, nesnelerin başlangıçta kendi test koşumları altında geliştirilmeleri gerekmez. Yalnızca nesnelerin uçtan uca hikayeden bağımsız olarak kullanıldığı düşünülürse, gerçekten onaylamak için kendi arayüzleri ve davranışları varmış gibi muamele görmeleri gerekir. Eğer bu konuda dikkatli davranıyorsanız, o nesneleri halka açtığınız zamandır. Bu şekilde test etmediğinize dair hiçbir söz vermezsiniz.

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.