Birisinin birim testlerin (nUnit, jUnit, xUnit) olması gerektiğini söylediğini duydum
(Örn, birim testleri "kuru kod" değil "nem kodu" içermelidir)
Onlar ne hakkında konuşuyor?
Birisinin birim testlerin (nUnit, jUnit, xUnit) olması gerektiğini söylediğini duydum
(Örn, birim testleri "kuru kod" değil "nem kodu" içermelidir)
Onlar ne hakkında konuşuyor?
Yanıtlar:
DAMP ve DRY çelişkili değil, bir kodun sürdürülebilirliğinin iki farklı yönünü dengeler . Sürdürülebilir kod (değiştirilmesi kolay kod) buradaki nihai hedeftir.
Kodu korumak için önce kodu anlamanız gerekir. Bunu anlamak için okumalısın. Bir an için kodu okumak için ne kadar zaman harcadığınızı düşünün . Bu çok fazla. DAMP, kodu okumak ve anlamak için gereken süreyi azaltarak sürdürülebilirliği artırır.
Çoğaltmanın kaldırılması, sistemdeki her kavramın kodda tek bir yetkili temsiline sahip olmasını sağlar. Tek bir iş konseptinde yapılan bir değişiklik, kodda tek bir değişiklikle sonuçlanır. DRY, değişikliği (riski) yalnızca sistemin değişmesi gereken kısımlarına izole ederek sürdürülebilirliği artırır.
Sınamalar genellikle yinelemeyi içerir, çünkü aynı şeyi tekrar tekrar test ederler, yalnızca biraz farklı giriş değerleri veya kurulum koduyla. Ancak, üretim kodunun aksine, bu çoğaltma genellikle yalnızca tek bir test fikstürü / dosyasındaki senaryolarla yalıtılır. Bu nedenle, çoğaltma minimal ve açıktır, yani proje için diğer çoğaltma türlerinden daha az risk oluşturur.
Ayrıca, bu tür kopyalamanın kaldırılması testlerin okunabilirliğini azaltır. Her testte daha önce çoğaltılan ayrıntılar artık bazı yeni yöntemlerde veya sınıflarda gizlenmiştir. Testin tam resmini elde etmek için, şimdi tüm bu parçaları zihinsel olarak bir araya getirmelisiniz.
Bu nedenle, test kodu çoğaltması genellikle daha az risk taşıdığından ve okunabilirliği teşvik ettiğinden, bunun kabul edilebilir olarak kabul edildiğini görmek kolaydır.
Prensip olarak, üretim kodunda DRY'yi, test kodunda DAMP'ı tercih edin. Her ikisi de eşit derecede önemli olsa da, biraz bilgelikle dengeyi lehinize çevirebilirsiniz.
DAMP - Açıklayıcı ve Anlamlı İfadeler.
"DAMP DRY not" kod yeniden kullanımı üzerinden okunabilirlik değerlerine sahiptir. Test örneklerinde KURU olmayan DAMP fikri, test durumlarının bazen tekrarlanan kodlara sahip olduğu anlamına gelse bile testlerin anlaşılması kolay olmasıdır.
Ayrıca bkz. Yinelenen kod birim testlerinde daha fazla tolere edilebilir mi? bu bakış açısının esası hakkında bazı tartışmalar için.
Etki Alanına Özel Diller ile ilgili olarak Jay Fields tarafından icat edilmiş olabilir .
"KURU", "Kendinizi tekrar etmeyin"
Bu, insanlara yeniden kullanılabilir kod yazmalarını söylemek için kullanılan bir terimdir, böylece tekrar tekrar benzer kodlar yazmazsınız.
"DAMP" "Tanımlayıcı ve Anlamlı İfadeler" dir.
Bu terim, ona bakan biri tarafından kolayca anlaşılabilecek bir kod yazmanızı amaçlamaktadır. Bu prensibi izliyorsanız, uzun ve açıklayıcı değişken ve işlev adlarına vb. Sahip olacaksınız.
Damp = 'Açıklayıcı ve Anlamlı İfadeler' - birim testleriniz 'okunabilir' olmalıdır:
Makaleden:
DAMP, “açıklayıcı ve anlamlı ifadeler” anlamına gelir ve DRY'nin tam tersidir, “okunabilirlik gereksiz kodlardan kaçınmaktan daha önemli olduğu için“ her şey bir çöp yığını gibi görünmeli ve okunması imkansız ”diyor.
Bu ne anlama geliyor ve nerede kullanılır?
DAMP çoğunlukla test kodu yazarken geçerlidir. Test kodunun, bazı fazlalıkların kabul edilebilir olduğu noktaya kadar anlaşılması çok kolay olmalıdır.
DAMP, “açıklayıcı ve anlamlı ifadeler” anlamına gelir ve DRY'nin tam tersidir, “okunabilirlik gereksiz kodlardan kaçınmaktan daha önemli olduğu için“ her şey bir çöp yığını gibi görünmeli ve okunması imkansız ”diyor.
Burada zaten birkaç cevap var, ama mutlaka açıklayabilecekleri kadar iyi açıkladıklarını düşünmediğim için bir tane daha eklemek istedim.
DRY fikri (kendinizi tekrar etmeyin), uygulama kodunuzda gereksiz veya tekrarlayan kodlardan kaçınmak istediğinizdir. Kodunuzun birden çok kez yapması gereken bir şey varsa, bunun için birkaç yerde benzer kodu tekrarlamak yerine bir işlev veya sınıfınız olmalıdır.
Bu oldukça iyi bilinen bir programlama konseptidir.
DAMP (Betimsel ve Anlamsal Cümleler) birim testleriniz içindir. Buradaki fikir, birim test yöntemi adlarınızın uzun ve açıklayıcı olması gerektiğidir - test ettiğiniz şeyi açıklayan etkili kısa cümleler.
Örneğin: testWhenIAddOneAndOneIShouldGetTwo() { .... }
Bunun gibi bir DAMP yöntemi adı okuduğunuzda, test kodunu okumak zorunda kalmadan bile test yazarının ne elde etmeye çalıştığını tam olarak anlamanız gerekir (test kodu da bu kavramı elbette wordy değişken adları ile de takip edebilir, vb).
Bu mümkündür, çünkü bir birim test yöntemi çok özel bir girdiye ve beklenen çıktıya sahiptir, bu nedenle DAMP prensibi onlar için iyi çalışır. Ana uygulama kodunuzdaki yöntemlerin, özellikle de KURU ilkesi göz önünde bulundurularak yazıldıysa, bu gibi adları garanti edecek kadar spesifik olması olası değildir.
DAMP ve DRY birbirleriyle çelişmezler - kodunuzun nasıl yazıldığının farklı yönlerini kapsarlar - ancak yine de bunlar genellikle birlikte kullanılmazlar, çünkü KURU prensibi ile yazılan yöntemler genel amaçlı ve uygun olması muhtemel değildir son derece spesifik yöntem ismine. Bu nedenle, genel olarak, yukarıda açıklandığı gibi, uygulama kodunuz KURU ve birim test kodunuz DAMP olmalıdır.
Umarım bu biraz daha iyi açıklamaya yardımcı olur.
İkisi arasında bir denge kurmanız gerektiğinden Chris Edwards'a katılıyorum. Dikkat edilmesi gereken başka bir şey, çoğaltmayı kaldırmak için birim test kodunuza çok fazla ek yapı eklediğinizde (yani, aşırıya kaçan DRY'yi alırsanız), buraya hata girme riskiyle karşılaşırsınız. Böyle bir durumda, birim testlerinizi birim olarak test etmeniz veya yapı bitlerini test edilmeden bırakmanız gerekir.
Buradaki çabayı çoğaltmak istemiyorum, ancak DAMP olan ancak DRY avantajına sahip testler yapabilirsiniz. Flip tarafında, DRY testleri bazı durumlarda DAMP testlerini karşılamaz.
Bazı örnekler içeren DRY vs DAMP hakkında blog yazdım.
Her iki yaklaşım da tek çözümünüz olmamalı, bazen DAMP aşırıya kaçıyor, bazen de çok güzel bir ek.
Genel bir kural olarak, üç kuralı uygulamanız gerekir. Yinelemeyi üçüncü kez tespit ederseniz, DAMP stili testleri yazmaya değer olabilir, ancak o zaman bile tüm yineleme kötü değildir . Bağlam önemlidir.