Teknik özellikler BDD tarzı yazarken “gerekir” mi kullanmalısınız yoksa kullanmamalısınız? [kapalı]


12

Bunun biraz öznel olduğunu anlıyorum, ama biri veya diğeri için iyi bir durum bulamıyorum:

"bir şey yapmalı"
o "bir şey yapmalı "

Olması gereken stilin savunucuları, sizi gerçekten ne elde etmeye çalıştığınızı sorgulamaya zorladığını söylerken, detraktörler bunu gereksiz buluyor.

Bu konuda bir fikir birliği var mı, yoksa sadece bir stil meselesi mi?

Yanıtlar:


3

Hukuk İngilizcesine Hoşgeldiniz.

"Zorunlu" == "kullanmak" = sözleşmeye bağlı yükümlülüktür. Bu bir yasalcılık. "Sorgulamaya" yol açmaz. Cezayı resmi bir sözleşme yükümlülüğü olarak işaretler.

"Would" == "kullanmak" == iyi fikir olacaktır. Cümleyi isteğe bağlı bir özellik olarak işaretler.

Sorgulama kolaylaştırma, organizasyon, yardım, güven inşasının bir parçasıdır. Kelime seçiminin bir sonucu değil.

Değiştirici olmadan çıplak bir fiil kullanmak, cümleyi resmi bir gereklilik olarak vurgulamayı biraz zorlaştırır. Ve süper karmaşık fiiller durumunda, onu nasıl eşleştireceğinizi anlamak biraz zor olabilir.

"Bildirmek" veya "oluşturmak" gibi kolay fiiller.

  • Sistem e-posta yoluyla bildirimde bulunur. ("Bildirmek" fiili konjuge edilir "sistem" için "bildirir" - her neyse.)

  • Sistem e-posta yoluyla bildirimde bulunacaktır. ("bildirmek", "bildirmek" olur - konjugasyon yok. Çok basit.)

"Giriş yapmak" gibi sert fiiller veya ayıklamak, temizlemek, dönüştürmek, tekilleştirmek ve yüklemek gibi alana özgü fiil cümleleri veya fiil haline getirilmiş "umudu" gibi bir isim. İçinde birkaç fiilin gömülü olduğu daha uzun cümlenin konjuge edilmesi zor: her fiilin konjuge edilmesi Ya da uzun kelime öbeğini sanki tek bir kelime miydi? Herhangi bir isim İngilizce olarak verilebildiğinden, bu makyaj fiillerinin nasıl konjuge edileceğini bilmek zordur.

  • Kullanıcı giriş tıkladığında sistem ayıklanır, temizlenir, dönüştürülür, tekilleştirilir ve yüklenir. (İngilizce önemsiz bir şekilde herhangi bir isim cümlesi fiil yapar.) Yoksa ayıklar, temizler, dönüştürür, tekilleştirir ve yükler mi?

  • Kullanıcı giriş tıkladığında sistem çıkarmalı, temizlemeli, dönüştürmeli, tekilleştirmeli ve yüklemelidir. (İğrenç ifade bozulmadan bırakıldı, fiil çekimi hakkında gizem yok.)

["Ne?" "İngilizce herhangi bir isim verilebilir mi?" Evet. Herhangi bir isim. Bunun üzerine taş duvar yapacağım. Bunu sık sık taşladım. Teknik özellikler bile bunun üzerine taşlanmalıdır.]


5
"Zorunluluk" kullanmanın "sorgulamaya" yol açmayacağını söylüyorsunuz; benim deneyimlerim, özellikle test / TDD yeni insanlar ile yapar. Ayrıca sonuçları bağlam ve olaylardan ayırma etkisi vardır. "Ve sipariş depoya ulaşıyor" bana bir düğmeye basarak siparişin gelmesine neden olup olmadığımı ya da otomatik olarak gerçekleşmesi gerekip gerekmediğini söylerken "Ve sipariş depoya ulaşması gerektiğini" söylüyor. kontrol etmem gereken bir şey. BDD konuşma, hukuki değil, İngilizce (veya tercih edilen doğal dil) ile ilgilidir.
Lunivore

3
Orada farklı bir diliniz olduğunu takdir ediyorum. BDD yine de Londra'da başladı ... "gerekir" kelimesiyle;) OP bu konuda fikir birliği olup olmadığını sordu ve 2004'ten beri var -> dannorth.net/introducing-bdd
Lunivore

1
Yararlı bulamadığım yasal, sorgulayıcı olmayan bir şekilde "gerekir" ifadesini kullanmanızdır. BDD'nin başladığı kasıtlı keşif zihniyetinin tam tersi. Hayatımı "spec" ile başlayan ve daha sonra sorgulayamayacakmış gibi hisseden insanlara yardım etmek için harcıyorum.
Lunivore

1
Cevabınızı, şu anda söylediği gibi "sorgulamaya yol açıyor" diye sormaya yol açtığı için, "sorgulamaya yol açmaz" gibi bir şey içerecek şekilde düzenleyecek olsaydınız, mutlu. BDD'nin sorgulayıcı yönü benim için en önemli olanlardan biridir ve bunu ifade etme şekliniz ek bağlam sağlamak yerine bu yönü ortadan kaldırır. Cevabı düzenleyip düzenlemediğinizden bağımsız olarak bu görüşme için teşekkür ederiz; Saygılı diyalogu gerçekten takdir ediyorum.
Lunivore

11
IETF Standart RFC yazma için özel olarak 'zorunluluk' ve 'ÖNERİLEN' 'GEREKLİ', 'OLMALI' dir edilir 'Shall' belirtiyor ve 'MAYIS' 'İSTEĞE' dir.
oosterwal

4

Tamamen stilistik bir tercih meselesi. Sormakla kaygılı, siz / müşterileriniz şimdiki veya gelecekteki zamanda sistemi düşünmeyi mi tercih ediyorsunuz?

"Olması gereken" veya "irade" gibi niteleyiciler gelecekteki zamanı ifade eder, ancak bu yumuşaktır ve şimdiki zamanda düşünürken yeterince iyi okur. Bir niteleyici eksikliği kesinlikle mevcut zamanı gösterir (yani şu an).

Bir niteleyici kullanmayı tercih ederim çünkü her iki durumda da pasif olarak iyi okurken, niteleyici eksikliği her şey gelecekteki gergin olduğunda geliştirme sırasında biraz garip bir şekilde okur.

Her durumda, bir niteleyici kullanmaya karar verirseniz, "must" yerine "must" kullanılmasını önemle tavsiye ederim . "Olmalıdır" isteğe bağlı olarak yorumlanabilir (S.Lott'un aksini iddia etmesine rağmen), ancak "zorunluluk" herhangi bir belirsizliği tamamen ortadan kaldırır - açıkça "isteğe bağlı değil" anlamına gelmelidir.


Ve henüz yorum yapamadığım için (karma kısıtlamaları), bu S.Lott'a Should / Shall vs. Would / Will ile ilgili bir cevaptır: yasal sözleşme yazımında bile irade ve irade konusunda çok fazla belirsizlik vardır. Açıklama için bu makaleye bakın .


"niteleyici eksikliği her şey gelecekteki gergin olduğunda geliştirme sırasında biraz garip" - iyi, eğer TDD yapar ve bir test yazdıysanız ama henüz kod yazmadıysanız, test şimdi başarısız olur. "Gelecekte geçmesi gerekiyordu" anlambilimi, ŞİMDİ geçebileceği anlamına gelir. Dolayısıyla şimdiki zaman en azından TDD davasında daha fazla netlik getiriyor: başarısız olan gelecek hakkında bir vaat değil, ŞİMDİ beklenmeyen davranış.
Mikhail Vasin

2

Üçüncü bir kişiyi kullanmaktan yanayım , bir niteleyici olmadan şimdiki zamanı .

Benim ana argümanım: Test bir hikaye.

Bir hikaye sahnelerden oluşur. Her sahne şunları tanımlar:

  • konu
  • bağlam
  • aksiyon

Misal:

AÇIKLAMA : getReceiptişlev

BAĞLAM : makbuz var

IT : makbuzu iade eder

Tıpkı iyi bir hikaye gibi, iyi bir testin okunması kolaydır.

Bir hikaye size programın ne yaptığını anlatır, örn.

  • bir işlem başlatır
  • istekte bulunur
  • cevabı normalleştirir
  • işlemi sonlandırır
  • makbuzu iade eder

Öte yandan, bir niteleyici kullanmak ("olması gerektiği" veya "olması gerektiği" önemli değildir) testi bir iddia listesine dönüştürür, örn:

  • gereken bir hareketin başlamasını
  • bir talepte bulunmalı
  • gereken tepkiyi normalleştirmek
  • gereken işlem sona
  • makbuzu iade etmeli

Sürekli bir hikaye yoktur: zihniniz bir iddia listesini değerlendiriyor.

Bu özneldir, ancak doğal dili okumak (bir hikaye) bir iddia listesini okumaktan daha kolaydır.


1

Bence her zaman 'gerekir' kullanmalısınız.

Akıl yürütme - BDD ile, testi yazarken, yazılım henüz yapmak istediğiniz şeyi yapmaz, bu yüzden "bir şey yapar" demek yanlıştır. “Bir şey yapmalı” ve testler bunu yapmaya devam ettiği sürece geçecektir .


1
"Henüz yok", "zorunluluk" yerine şimdiki zamanı kullanmak için daha fazla neden gibi görünüyor. BDD kabul testi içindir ve bir sistem henüz bir şey yapmazsa derhal başarısız olması gerekir. BDDers arasında "olması gerekeni" kullanma konusunda bir ayrım var gibi görünüyor.
Brenden

1

Gönderen behaviour-driven.org başlıklı "GettingTheWordsRight" :

Kısacası, şeyleri tanımlamak için kullandığımız kelimeler bizim (ve başkalarının) bu şeyleri düşünme şeklimizi etkiler. Bu sadece anlambilim konusunda küçük olmak gibi basit bir soru değildir, çünkü bazı kelimeler beraberinde hem bir entelektüel hem de duygusal düzeyde bir ifadenin anlamını nasıl yorumladığımızı etkileyen nüanslar taşır. Dilimiz, tanımlayıcı kelimeler ve kelime öbekleri bakımından zengindir, bu nedenle kodda tanımlamak istediğimiz öğelerin niyetini açıkça ifade edecek kelimeleri kullanmak makul görünmektedir.

BDD durumunda, şahsen hemen hemen her zaman kelimeyi kullananları olduğum gerektiğini kullanım niyeti belli bir sonuç sağlamak için bir test için ise, diğer beklenmedik sonuçları olduğunu ima çünkü testleri adlandırırken olabilir ele alınması gerekecektir ortaya eğer bir test sonucu geçerli kabul edilecekse. Belki de bekle ya da zorla kelimelerini kullanabilirsinbenzer şekilde, ancak bu kelimeler daha zorunlu bir bakış açısını ima eder, öyle ki testin adı "testte yanlış bir şey yoktur, uygulamanın dağınık olduğunu varsayalım" anlamına gelebilir, oysa * * "testin doğru olun, ancak test sonuçları toplanmıyor gibi görünüyorsa hata için tekrar kontrol edilmesi gerekebilir.Bunu beğendim, çünkü kodunuzu açık fikirli tutmaya teşvik edeceğiniz şekilde düşüncelerinizi etkiler. kodunuzun hatalarını ayıklamaya çalışırken hatalardan kaçınmak istediğinizde önemlidir ve kendinizi bir varsayım nedeniyle hatalar için yanlış yere bakarak bulabilirsiniz.

Bununla birlikte , test isimleri için bir önek olarak uygulandığında kelimenin yakın 'dini' uygulamasının başarısız olması gerektiğini gördüm , çünkü bir test adı sağlamak için ilgili programcıları belirli zihinsel ve dilsel jimnastikten geçirmeye zorladı. anlamlıydı ve bu gibi durumlarda , kelimeleri doğru bir şekilde ifade etme niyetinin beklentilerini karşılamadığı ve sonuç olarak testlerin deşifre edilmesi zorlaştığı anlamına geliyordu . Durumun bu tür ekinler, genelde kelimesini kullanmak gerekirtest yöntemi adının herhangi bir yerinde, adın yöntemini basit ve net bir şekilde iletmesini sağlamak için. Ancak, belirli bir bağlam içinde başka kelimeler eşit derecede uygun olsaydı, kesinlikle belirli bir kelime kullanımını zorunlu kılmazdım. Ancak, püf noktası, bir şeyin kodda neyi temsil ettiği hakkında tartışmaya yer bırakmayan ve kodunuzun sadece imaya dayanmadan yapması gereken şeyleri düşünmenize neden olan kelimeleri seçmektir.

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.