Birim ve Entegrasyon testi: Nasıl bir refleks olabilir


27

Ekibimdeki tüm programcılar ünite testi ve entegrasyon testi hakkında bilgi sahibidir. Hepimiz bununla çalıştık. Hepimiz onunla yazılı testler yaptık. Hatta bazılarımız kendi kodunda gelişmiş bir güven duygusu hissetti bile.

Bununla birlikte, bazı nedenlerden dolayı, birim / entegrasyon testleri yazmak, ekibin hiçbir üyesi için bir refleks olmamıştır. Asıl kodla aynı anda birim testleri yazarken hiçbirimiz kendini kötü hissetmiyoruz. Sonuç olarak, kod tabanımız çoğunlukla birim testleriyle ortaya çıkar ve projeler test edilmeden üretime girer.

Bununla ilgili sorun, tabii ki projeleriniz bir kez üretime geçtiğinde ve zaten iyi çalışıyorsa, birim / entegrasyon testi eklemek için zaman ve / veya bütçe elde etmek neredeyse imkansızdır.

Ekibimin ve kendimin üyeleri zaten birim testinin değerini biliyorlar ( 1 , 2 ) ancak birim testini doğal iş akışımıza sokmamıza yardımcı görünmüyor. Tecrübelerime göre, birim testleri ve / veya hedef kapsamı zorunlu kılmak sadece düşük kaliteli testlere neden oluyor ve ekip üyelerini yavaşlatıyor çünkü bu testleri üretmek için kendi kendine üretilen motivasyonlar yok. Ayrıca, basınç düşer gidermez, birim testleri artık yazılmaz.

Sorum şu: Deneyimde denediğiniz, takım içinde bir dinamik / momentum oluşturmaya yardımcı olan ve doğal olarak bu testleri oluşturmak ve sürdürmek isteyen insanlara yönlendiren herhangi bir yöntem var mı?


7
OP'nin uygun cinsiyet formunu kullanıp kullanmadığı konusunda artı ve eksi oyların sunulması hayal kırıklığı yaratıyor. Kuşkusuz, sorunun kalitesi sorulanın ve siteyle olan ilgisidir ve hem kendisinin hem de onun dahil edilmesinin cinsiyetçi olarak kabul edilip edilmeyeceğine dair sübjektif görüşler değildir. Bu tür dostça bir çekişme, sitenin veya çalışanların saygınlığına gerçekten yardımcı olmaz. (Sadece söylüyorum!)
S.Robins

@ S.Robins, Haklısınız ve bunun iyi bir soru olmadığını düşünmeseydim, olumlu oy vermem. Ancak bu yorum yine de saldırgan. Ve programcılar arasında bu tür şeyleri oldukça sık gördüğümde kendimde tutamıyorum.
superM

2
@superM LOL! Ne demek istediğini biliyorum. Aşırı politik doğruluk keçimi alır. Tamamen toplumsal cinsiyet nötrlüğü yazma eğilimindeyim ya da sadece "he" yi kullanıyorum, çünkü bu tür referansları kendi cinsiyetinizle ilişkilendirmeniz doğal. Ancak benim yorumum daha genel olarak uygulanacak ve özel olarak herhangi bir bireye seslenmeyecek şekilde tasarlandı. ;)
S.Robins

1
Bazı yorumları temizledim. +1 yorumlar tamamen gürültülüdür ve gönderim için faydalı bir şey eklemediklerinde kaçınılmalıdır - rehberlik için yorum ayrıcalık sayfamızı okuyun ve lütfen bu tür konuşmaları Yazılım Mühendisliği Sohbetine gönderin . Saldırgan yorumlara gelince, lütfen onları böyle işaretleyin.
yannis

Yanıtlar:


13

Asıl kodla aynı anda birim testleri yazarken hiçbirimiz kendini kötü hissetmiyoruz.

Ele almanız gereken nokta budur. Takımınızın kültürünün, sprint sırasında test yazmama (veya ne zaman kullanırsanız kullanın), kodlama değerleri kadar kod kokusu haline gelmesi için değişmesi gerekir. Bunun çoğu akran baskısını içerir. Kimse gerçekten standart altı olarak görülmek istemez.

Testleri kendin yap. Yapmadığınız zaman gözle görülür bir şekilde kendiniz görün. Ünite testleri yazmışlarsa, "iyi" bir programcının bu hatayı nerede yakalayacağını belirtin. Kimse kötü olmak istemez. Bu istenmeyen davranışın kötü olduğunu ve insanların takip edeceğini söyleyin.


Kültür değişimi için +1 ve örnek olarak size liderlik etmek için başka bir + 1'im var. Güzel cevap
Erik Dietrich

5

Tüm ekibin hepsine aynı şeyi istemesini sağlamak oldukça zor olabilir. Çoğu zaman değeri bir şeyde görmek, insanları kökleşmiş davranışları değiştirmeye teşvik etmek için kendi başına yeterli değildir. Değişime değer veren ve özellikle onu isteyenler bile bazen bilinçaltında onunla savaşmaktan sorumlu olabilirler.

Mesele, bireysel motivasyondan biri, takım motivasyonundan başka bir şey değil. Netlik anının size ulaştığını, sonunda anladığınızı hissettiğiniz bir şeyin sonucu olarak, ya da ortalama bir programcının her şeyi atmasını ve süreci tamamen değiştirmesini sağlayan yeni bir araç ya da başka bir öznel şey yüzünden var. İşiniz - Bunu hariç seçmeliyim - hangi öğrenmek için siz veya ekip için bir yol olup olmadığını görmek için işler her ekip üyesi için açıklık tetikleyiciler olacaktır.

Şahsen benim için , DotNet'teki BDD için StoryQ çerçevesini keşfediyordu, bu da görmezden gelmeyi çok kolaylaştırdı ve beni tamamen aynı anda "engel" olarak testten önce test etmekten kurtardı . Daha sonra Visual Studio için NCrunch'u bulduğumda seçimlerimi yeniden onayladım . Savaşın yarısı bazen fikri satmakta değil, sadece alışkanlıklarda köklü değişime neden olmak için gereken çabayı azaltmakta ... ve o zaman bile biraz zaman alabilir ve çalışabilir. Bununla birlikte, bu aynı kişisel tetikleyiciler, aynı zamanda test kodlarının çoğunu aynı anda ve hatta uygulama kodlarından sonra bile yazan meslektaşlarımın yaklaşımını değiştirmek için yeterli değildi.

Bazen ayrıca, farklı bir şey yapmayı öğrenmek için gereken çabanın, değişikliğin gerekçesi sağlam olsa bile, farklı bir şey yapmayı öğrenmek için gereken çabanın doğal korku, güvensizlik veya hoşnutsuz bakış açısıyla, bir şeylerin nasıl yapıldığını değiştirme konusundaki isteksizliği de vardır. Test platformunuzun tamamı belirli bir şekilde çalışacak şekilde düzenlenmişse, işlerin yapılma şeklini değiştirmeyi ve özellikle de eski ve yeni testlerin kullanım ömrü boyunca bir arada yaşamaya devam etmeleri gerektiğinde, potansiyel olarak takım değiştirmeyi haklı çıkarmak zor olabilir . proje - ve kesinlikle yarattığınız her testi yeniden yazmak istemeyeceksiniz. Garip olan, bazen insanların bunun yeni bir test metodolojisi benimsemenin tek yolu olduğunu hissetmeleri ve bu insanların kendileri için daha mantıklı bir değişimi kabul etmelerini zorlaştırdığıdır.

Gerçekten, bir şeyin refleksif hale gelmesinin tek yolu, bunun nasıl yapılacağına çok fazla odaklanmanız gerekmediğini fark edene kadar tekrar tekrar yapmaya zorlamanızdır. Bazen, bunu bir takımda yapmanın tek yolu, biraz ejderin görebileceği politikalar koymak, çift programlama ve kod incelemeleri yapmak ve ekip üyelerinin birbirlerini desteklemesine ve değişimin tam anlamıyla zorlanmasına yardımcı olabilecek herhangi bir şeydir. oluşma davranışında. Bununla birlikte, böyle bir stratejinin gerçekten başarılı olması için, her bir ekip üyesinden gerekli önlemleri alması ve sürece katılmasında ... ve sürece dahil olan herkesin sabrından dolayı kesin ve dürüst bir taahhüt gerektirir. .


3

Asıl kodla aynı anda birim testleri yazarken hiçbirimiz kendini kötü hissetmiyoruz

"Aynı zamanda" ile ne kastettiğinizden emin değilsiniz, peki onları asıl koddan önce yazmaya ne dersiniz ?

Neden herhangi bir insanın koddan sonra birim testleri yazmakla uğraşmak istemediği psikolojik açıdan kolayca anlaşılabilir. Bu noktada kod zaten çalışıyor, peki neden dünya üzerinde test etmemiz gerekiyor? Bir tür tembellik otomatik olarak gerçekleşir, çünkü sıkıcı, görünüşte işe yaramaz ve test yazmamak tehlikeli görünmüyor. Sonuç olarak, uzun bir süre sonra test sonrası yaklaşımı sürdüren birçok takımı tanımıyorum.

Tecrübelerime göre, test-ilk (TDD tarzı), hızlıca bağımlı olabileceğiniz bir şey çünkü en az 2 acil, somut, endorfin salgılayan fayda var:

  • Kodunuzu somut çalıştırılabilir gereksinimlerle yüz yüze tasarlamanıza ve yeniden tasarladığınız gibi tasarımı daha iyi ve daha iyi hale getirmenize yardımcı olur;

  • TDD döngüsü, anında başarının tadını çıkartabileceğiniz sık sık "yeşil çubuk" anlarıyla noktalanır. Zihninizi sürekli olarak tatmin eder ve bir sonraki özelliğin uygulanmasına hazır hale getirir.

Bu yüzden , testleri yazmadıklarında ekibinize kötü hissettirmeye çalışmam. Bunun yerine, kendilerini olduğu gibi iyi hissettirmeye çalışırdım. TDD bunu yapmanın bir yoludur.


3
TDD'ye bir başka güzel avantaj (özellikle sürekli test aracıyla) hızlı geri bildirimdir. TDD / CT, yazılımı oluşturup çalıştırmanın dakikalar halinde olabileceği büyük bir kod tabanında TDD / CT, geri bildirimi ve dolayısıyla gelişmeyi büyük ölçüde hızlandırır.
Erik Dietrich

0

ilk önce bir test yazmanın ve çalıştırmanın kolay olmasını sağlamanız, mevcut projelerde çerçeveyi hazırlamanız ve bu kurulum prosedürünü gelecekteki projelere dahil etmek için basitleştirmeniz gerekir.

Bu şekilde, bir programcı yeni bir özelliği denemek istediğinde, hata ayıklamaya çalıştığında, testlerin düzgün bir şekilde çalışmasını sağlamak için bir düzine çemberin içinden atlamak zorunda kalmaz

Bir şey ne kadar akward olursa o kadar az alışkanlık yapmak o kadar alışkanlık haline gelir


0

Bir kültür değişikliğini teşvik etmede biraz başarılı olmuş bir şey, "birim test küratörlüğü" seminerinde haftalık bir düşüş ayarlamak. Bunun resmi amacı, ünite test odasının hızlı çalışmasını ve güncel kalmasını sağlamaktır, ancak daha önemli amaç, aklımda, insanlara düşmeleri, soru sormaları ve testler yapmaları için düşük bir baskı uygulamaktır. . Sadece testlere bir saat veya haftada bir saat harcamak istediğiniz gerçeği, bunun önemli olduğu mesajını da gönderir.

Bence bu şekilde bir kültürden biraz faydalanıyorsunuz ve “refleks olarak” yapmanın önündeki engelleri kaldırmaya başlıyorsunuz. İnsanlar, ilk sıkıntı işaretinde eski alışkanlıklara geri dönme eğiliminde olacaklar - böyle bir toplantı yapmak, bir baskın düştüğünde bunu düzeltmeyecek, ancak bunun bir kültür değişimi başlatacağını ve gerçekte olmayandan kaynaklanan engeli kaldıracağını düşünüyorum. Ne yaptığını bilmek.


0

Doğal olarak bir şeyler yapmak isteyen bir grup programcıya sahip olmak bir ütopyadır (özellikle büyük bir gruptan söz ederken).

Birim ve entegrasyon testi standartların bir şeydir . Bir iş akışı için bir standart oluşturursunuz ve ekibin her üyesi buna saygı göstermelidir. Standartlar KG uzmanlarının yardımıyla yapılmalıdır, çünkü bunu daha iyi bilirler. Bir programcı standartlara uymalıdır. Yapabilecekleriniz standartları temiz, anlaşılması ve takip etmesi kolaydır.

Bu, kendi kodunuza güvenmek ve kullanmak istemekle ilgili değildir, herkesin iyi şeyler yapmak için kullandığı kodlama ve test standartlarına sahip olmak ve herhangi bir programcının bunu anlaması gerekir.

İnsanları en baştan standartlara uydurduğunuzda, bir refleks olur ve takip edilir. Bir ünite testi olmadan kod tabanına hiçbir kodun koyulmayacağına dair bir kural yapmak, insanları bu zorunluluklar konusunda ikna eder. Proje havuzları için daha da kısıtlayıcı kurallar var. Örneğin, şirketler üniteyi kodlamadan önce ünite testleri yaparlar (modül spesifikasyonunu yaptıklarında) ve bu çok iyi bir yöntemdir. Bir programcı projeye / kod tabanına kod koyarsa, kod test modülünden çalıştırılır ve ünite testleri geçmezse, işe geri döner.

Şu anda standartlar ve kurallar eklemek zorsa, en azından gelecekteki projelere eklemeyi düşünün.

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.