Takım arkadaşlarını TDD kullanmaya ikna etme [kapalı]


15

Ekibimde TDD kullanan tek kişi benim. Onları kullanmalarını nasıl sağlayabilirim?

Çektiğimde, birinin kodunun testlerimi kıracağından ve bunları düzeltmek zorunda olduğumdan rahatsızım.

Github, çatal ve çekme isteği kullanmak bu sorunu çözecek, böylece çekme kabul edilmeden önce testi geçmeleri gerekiyor mu?

Proje yöneticisi değilim ve onu onu kullanmaya ikna edemiyorum.


11
"birinin kodu testlerimi kıracak" Bunun tasarımınızın ve / veya testlerin çok kırılgan olduğunu gösterme olasılığını düşündünüz mü?
gnat


2
Belki de entegrasyon testleri oluşturmaya başlayın. Giriş / çıkış (neredeyse) her zaman aynı olması gerektiği için bunların kırılması daha zordur. Herkes buna alıştıktan sonra, hepsini çalıştırırken entegrasyon testleri biraz yavaş olduğundan birim testleri ekleyin. Bir yan not: Eğer küçük bir projenin (2 ay kadar kısa bir süre) PM olsaydım, geliştiriciler de testler yazarken zaman harcamış olsaydım bunu sevmezdim. Projenin bitirilmesi ve testlerin yazılması iyidir, ancak zaman alır ve bu tür küçük projelerde, proje zamanında çok fazla bakım yapma şansınız küçüktür.
Jan_V

1
Geliştiriciler sağlam ve kararlı kod yazmaya devam etmelidir ve testler bu konuda yardımcı olabilir. Başbakanlara endişe duydukları hiçbir şey olmadığı için testler yazdığımızı bile söylemiyoruz. Kodumuzun 5 ay önce aynı şekilde çalıştığından emin olmak için yazıyoruz. Ayrıca, bunu gerçek bir 'test' olarak görmemelisiniz, bu daha çok bir sigorta veya yardımcı ya da denetleyicidir. Birisi 'testler yazıyoruz' dediğinde, kafanız karışabilir ve bunun test cihazının yapması gereken bir görev olduğunu düşünebilir.
Jan_V

2
Ayrıca çok benzer: programmers.stackexchange.com/q/141468/39178 ... ve hala bazı iyi argümanlar arıyorum. Sorun şu ki, insanların değişime açık olmadıkları veya zaten yaptıklarının onlar için yeterince iyi olduğunu düşünüyorlarsa, zihinlerini gerçekten değiştiremezsiniz.
S.Robins

Yanıtlar:


5

Gördüğüm gibi, testler hakkında herhangi bir şey için ikna etmenin tek yolu faydalı olduklarını göstermektir - yani test başarısızlıkları hataları bulmaya ve düzeltmeye yardımcı olur .

Sorunu tarif etme şekliniz buradaki gibi değil. Bak...

... çektiğimde, birinin kodu testlerimi kıracak ve bunları düzeltmek zorundayım.

Doğru anlarsam, testleri değiştirmek zorunda olduğunuzu kastediyorsunuz. Bu, test hataları gibi hataları bulup düzeltmeye yardımcı gibi gelmiyor mu? Testler hata bulmaya yardımcı olmazsa, meslektaşlarınızı ikna etmeye başlamak oldukça zayıf bir konumdur - ne kazanmayı bekleyebilirler? kırılgan test kodunda sıkıcı düzeltmeler?

Bu çıkmaz gibi gelebilir, ama gerçekten değil. Nihai hedefiniz (TDD için ikna etmek) hala oldukça mantıklı, düşürmeyin. Sadece çabalarınızı yeniden keşfettiğiniz engeli ortadan kaldırmaya odaklayın.

Sizi rahatsız eden test hataları aslında "yanlış uyarılar" dır - yani bunlar kodda olmayan testlerdeki hatalardır. Testleri iyileştirmek, iyi güvenilir test tasarımını nasıl yapacağınızı öğrenmek için bunları bir fırsat olarak kullanın. "Yanlış uyarıları" daha az sıklıkta yapmak ve test edilen koddaki gerçek hataları bulmayı kolaylaştırmak için testler üzerinde çalışın.

Gerçek hataları keşfettikçe, iş arkadaşlarınıza bilgi verin ve düzeltmelerine yardımcı olun - ve bu hataların testleriniz tarafından bulunduğunu belirtmeyi unutmayın. Bu, meslektaşlarınızı ikna etmek için gerçekten sağlam bir zemin oluşturacaktır.


Bu değer söz olduğunu test tasarımı yaparken :) nihayet kullanım TDD için takım arkadaşları ikna (eğer "ön" aşamasında geliştirdiği becerileri büyük olasılıkla, yine ihtiyaç olacaktır. Bir düşünün ...

... Test odaklı geliştirme deneyimsiz meslektaşlarınıza sunulduğunda ne olur?

Beklenecek ilk şey, çocukların boktan testler yazmaya başlayacağı ve (korku!) Öğrenirken bile iyi olanları kıracağıdır. Doğru yapmanın bir yolunu bulmalarına yardımcı olmak için, iyi bir test tasarımı hakkında oldukça sağlam bir anlayışa ihtiyacınız olacaktır.

Testlerinizde bulduğunuz ve düzelttiğiniz tüm hatalar, öğrenmeye başladıklarında tüm takım arkadaşlarınız tarafından tekrar tekrar tekrarlanacaktır. Eğer (ne zaman!) Bu olursa, TDD hakkında olumlu kalmalarını istiyorsanız hızlı ve net bir şekilde nasıl geliştirileceğini açıklamanız daha iyi olur .


2
İyi cevap, ama başka hiç kimse TDDing veya hatta test paketini çalıştırmıyorsa, o zaman bir testi kırmak için ortak bir senaryo, birinin davranışta değişiklik beklemek için testi değiştirmeden üretim kodunda değişiklik yapmasıdır. Bir istisna mesajındaki ifadeyi değiştirmek kadar basit olabilir. Check-in yaparlar, OP denetler, mola testleri yapar, eğlenir Sen tam bir hata mesajı çok kırılgan iddia bir test düşünebilirsiniz, ama benim son iş sözleşmesi gibi bir kusur tanımlanan herhangi belirtilen AAT sapma ve hata mesajları ortak kusurlar vardı.
KeithS

12

Test Odaklı Geliştirme kullanımını teşvik etmek istediğimde bir Cyber-Dojo kullandım . Bu tür bir alıştırmada, vurgu kodun kendisinde değil, kodun yazılma sürecindedir .

Öğleden sonra, aynı katayı tekrarlayarak, ancak farklı koşullar altında çiftler halinde geçirdik. Tüm gruplara aynı anda bir egzersiz yaparak başladık. Bu bir temel oluşturdu.

Daha sonra TDD'nin bazı temel ilkelerini tartıştık, herkesin ortak değiştirmesi ve aynı kata'yı tekrarlaması istedik. Kod üretimini vurgulamak ve bunun yerine insanları test senaryolarını ve Kırmızı / Yeşil döngüsünü adlandırma sürecine konsantre etmek için aynı kata'yı tekrarladık.

Daha sonra kata'yı tekrarladık, ancak kabaca her 10 dakikada bir, her gruptan bir kişi başka bir gruba taşınarak, bu günlerde kendimizi sık sık bulduğumuz oldukça akıcı ekip ortamlarını taklit ederdi.

Son yinelemede, her iki ortağımızın her 10 dakikada bir farklı gruplara dönüşmesini sağladık. Bu, TDD ile, bir takımdan tamamen farklı bir takıma geçişin bile çok acı verici olması gerekmediğini göstermeye yardımcı oldu, çünkü proje sadece her biri bir Kırmızı / Yeşil döngüsü çalışmalıdır.

İlginç olan şey, seanstan önce herhangi bir TDD yapmış olan az sayıda insan vardı, ancak kata aracılığıyla son yinelemeye kadar hızla TDD bilgisinin yayıldığı, çoğu insan bir TDD şeklinde düşünüyor veya en azından nedenini anlayabiliyordu. yararlı olabilir.

İnsanlar genellikle öğleden sonralarının hem eğlenceli hem de bilgilendirici olduğunu söylediler ve şimdi Cyber-Dojo'yu işyerimde kullanmanın başka yollarını arıyoruz.


Jon Jagger tarafından yazılan Cyber-Dojo , bu tür bir egzersiz için inanılmaz derecede iyi çalışıyor. Bu iş için bir web tabanlı entegre ortamıdır kasıtlı uygulama arasında TDD ve ekibi dinamikleri öğrenmeye. İnsanların sorun değil TDD sürecine konsantre olmalarına yardımcı olmak için özel olarak seçilmiş birçok kata var. Ayrıca Python ve Ruby'den Java ve C ++ 'a kadar çeşitli dilleri destekler.

En iyi şey, bir kata yaptıktan sonra geri dönüp katılan grupların her birinin kırmızı / yeşil ilerlemesine (veya belki * 8 ') bakabilirsiniz. It adlı trafik ışıkları TDD işleminin nasıl görselleştirmek için harika bir yoldur.

Kendi CyberDojo sunucunuzu istiyorsanız, tüm proje github'da bulunabilir ve oradan bağlı bir Anahtar Teslimi Linux cihazı sanal makinesi bile vardır, bu da zaten VMware oynatıcı veya VirtualBox kurulu olduğunuzu varsayarsak , birkaç dakika indirerek!


1
Cyber-dojo referansı için +1. Farkında değildi. Çok ilginç görünüyor .
radarbob

8

TDD'ye direnirlerse, sorun değil. Birçok kişi (ben de dahil) önce birim test yazma konusunda sorun yaşıyor.

Bununla birlikte, hiç birim testinin olmaması ve birim testlerinin kırılması sorunu hakkında bir soru sormalısınız. Birim testleri, birçok olası hatayı önleyen ve kod yeniden düzenlemeye izin veren bir güvenlik ağıdır. Daha yüksek kod kalitesi ve daha temiz kod hakkında açıklayın.

En iyisi, TDD kullanmanın avantajlarını açıklayan bir video bulmak ve bunu bir toplantıda göstermek olacaktır.

Dinlemeyi reddederse, onun üstündeki birine gitmeyi deneyebilirsiniz, ancak patronunuz çok inatçı ise bu çok akıllı olmayabilir.


6

İnsanları alışkanlıklarını değiştirmeye ikna etmek gerçekten zor, ama deneyebileceğiniz bazı şeyler:

  • Diğer geliştiricilerle konuşun ve TDD'nin neden iyi bir fikir olduğunu düşündüğünüzü açıklayın .
  • Onları (veya en azından bir kısmını) sınırlı bir süre denemeye ikna edin
  • Bir ekip olarak iyi çalışmak için bazı minimum gereksinimler belirlemeye çalışın. TDD yapmak zorunda değiller, ancak kesinlikle birim testleri başarısız olan kodu kontrol etmemeliler. Bu, onları TDD'yi kullanmaya ikna etmekten ayrı bir konudur ve ele alınması çok daha önemlidir.
  • Yönetimi TDD için bir deneme süresi uygulamaya ikna etmeye çalışın. Bunun neden iyi bir uygulama olduğuna ve şirketin gelecekte zaman ve paradan nasıl tasarruf edeceğine dair bazı kanıtlar sunmaya hazır olmalısınız.

Bunların hiçbiri işe yaramazsa, başka bir yerde çalışmayı düşünebilirsiniz. Hayatınızın çok daha kolay olacağı birçok şirket var.


1
Singapur küçük bir ülke, fazla seçenek yok.
wizztjh

6
"Bunların hiçbiri işe yaramıyorsa, başka bir yerde çalışmayı düşünebilirsiniz." Ya da sadece kayıt için TDD'yi kullanmayı bırakmayı düşünebilirsiniz :).
Lukas Stejskal

1
Üçüncü madde işareti için +1. Asıl sorun bu.
riwalk

6

Burada biraz farklı 2 sorun var: İnsanların TDD yapmasını sağlamak ve testlerinizi kırmak.

İlk konudan emin değilim, kişisel olarak yapay bir çalışma yolu buluyorum ve her türlü gelişime uygun değilim. Ben birim testleri iyi bir paketi olması için tüm, ama genellikle kodu yazarken daha verimli, daha sonra testleri yazmak için buluyorum, çünkü kodu yazarken fikirlerim her zaman değişiyor ve bu da testleri yazma zaman kaybı erken (IMO).

İkinci sayıda, projeyi, birim testlerinin check-in sırasında gerçekleştirileceği şekilde ayarlayın, böylece diğer geliştiricilerin bir testi bozduklarını bilmekten başka seçeneği kalmaz.


Bu iyi bir nokta, 2 ayrı konu. İlk olarak, "testlerimi kırıyorlar" sorununu çözün. Sonra onları TDD yapmalarını sağlayın.
ozz

+1 için "kod yazarken fikirlerim her zaman değişiyor" ve ilginç gözlem. Belki ben de aynıyım ve bu yüzden önce test yazmakta zorlanıyorum? Özellikle deneysel bir projenin başlangıcında.
Buttons840

4

Diğer birçok "X'i Y yöntemini / teknolojisini kullanmaya nasıl ikna etmeliyim" dediğimde cevabım hep aynı: örneğin.

Kullanın ve daha iyi (ölçülebilir) sonuçlara sahip olun. Sonra diğerlerinin fark ettiğinden emin olun.


2

Mevcut bir projede, yapmazsınız. Girintili stili beğenmediğiniz için kıvırcık parantezlerin eski koda yerleştirilme biçiminde değişiklikler yapmakla aynı şeydir.


yeni bir proje, bu hafta yeni başladım.
wizztjh

Son projemiz çok büyük ve buggy oldu. Bu yüzden, bu proje için TDD kullanmak iyi bir fikir.
wizztjh

2

Çok iyi tavsiye. Ve şimdi, biraz daha ...

Sen gerekir kalpleri ve zihinleri (WHAM) Bir kazan Luddit bir anda. Boğazlarından aşağı zorlamayı unut. Süresiz (özür dilerim) bir süre boyunca birçok nesne dersi. Sonunda kritik bir kitleye vuracak, "doğru" kişileri ikna edeceksiniz.

Bir WHAM kampanyasında TDD için sürekli ve tutarlı bir coşku ve avoculuk çok önemlidir.

Sen dönmeliyiz öğretilebilir anlar halinde testi kıran ve kod değişiklikleri, co-kodlayıcıları için önemli dersler. Kişisel yap. IE Ortalamanın üzerinde temiz kod sağlama konusunda bir üne sahip mi? Entegrasyon testçileri onlara gerçeklik kontrolü verdiği için geç kalan kodlar hakkında yönetimin üstesinden gelmeyi umuyorlar mı? Jack'in bazı zor kodları değiştirme arzusu var, ancak yan etkilerden korkuyor mu?

Kod çözücünün neden olduğu hataları yakalamada iyi test kırma örnekleri toplayın . Kodlayıcılar, değişen testleri, alakasız kod için gereksiz bir çalışma olarak göreceklerdir; testlerin sadece kıçlarını kapladığını anlamalıdırlar.

Küresel etkileri olan bazı kodları bulun (bazı basit yarar yöntemleri), bazı testler yapın, ardından testlerin uygulama boyunca deprem korkusu olmadan değişime izin verdiğini gösterin. Ve ben de duygusal meseleyi vurgulamak istiyorum!

Bazı basit temizleme zamanı örnekleri toplayın (yani üretime geçti) ve test kodlaması için ekstra çabaya rağmen, onu daha hızlı ve daha yüksek kalitede yaptık.

Uyarı: TDD, kötü OO tasarımı ve kodlaması için bir tedavi değildir ve üstesinden gelemez (ancak kesinlikle ortaya çıkarabilir). Ludditlerin yetersizlikleri için test kodu çabalarını suçlamasına izin vermeyin.


1

Yöneticisi ikna etmek için tekrar deneyin. Yazdıklarından, takım arkadaşlarını arkada TDD yapmaya ikna edebileceğini sanmıyorum.

Onun dilini konuşmalısın. Yönetici teknolojiden etkilenme eğilimindedir, ancak iş dilini anlarlar:

  • testler geliştirme sırasında zaman kazandıracaktır, çünkü manuel test yerine (hatayı yerel olarak yeniden oluşturmaya çalışmak, raylar konsoluyla oynamak ...) testleri otomatik olarak gerçekleştireceksiniz

  • Test, bir şeyi değiştirdiğinizde hataları kolayca tespit edebileceğiniz uygulama bakımı sırasında çok zaman kazandıracaktır. Testlerin daha yüksek ilk yatırım gerektirdiğini açıklayın, ancak uzun vadede kendileri için ödeme yapacaklardır (iyi testlerin bakımı genellikle hızlı ve kolaydır)

  • ve ekstra zamanla ne yapacaksın? moar şeyler yaratmak ve onlara moar para kazanmak :)

Programcılara gelince, bu argümanı deneyin (benim için işe yaradı, geri döndü): "Kodu yine de TDD ile veya TDD olmadan test ediyorsunuz. Bunu otomatikleştirmek yerine sadece manuel olarak yapıyorsunuz. Akıllı geliştiriciler olabildiğince çok şeyi otomatikleştiriyor. "


0

Son teslim tarihlerine sahip gerçek projelerde insanlar işi bildikleriyle yapmaya odaklanmak istiyorlar. Bu sadece insan doğası. Ve TDD'yi hiç öğrenmediyseniz, bu durumda onunla aynı olacaksınız. Bunu garanti ediyorum.

Çöp toplama neden RAII'yi sevmiyor, öğrenmiyor ve yaşamıyor? Otomatik bellek yönetimini nasıl savunabilirdiniz ancak dosyalar, bağlantılar vb. Genel kaynaklar için eski moda yönetimi nasıl destekleyebilirsiniz? RAII, bilmedikleri, anlamadıkları ve yapılması gereken bir son teslim tarihleri ​​olduğunda kullanmak için zamanları olmadığı bir teknolojidir.

Eminim RAII kullanmazsınız ve mevcut projeniz için öğrenmek ve anlamak istemezsiniz. TDD'yi öğrenmek ve anlamak istemeyen iş arkadaşınızla aynı.

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.