Birim testlerini kullanmak istemeyen meslektaşım “kodlamada daha fazla olduğu gibi”


25

Bir meslektaş, birim testlerini kullanmak istemiyor ve bunun yerine hızlı bir test yapmayı tercih ediyor, kullanıcılara iletiyor ve her şey yolundaysa canlı yayınlanıyor. Tabii ki bazı böceklerin üstesinden geldiğini söylemeye gerek yok.

Birim testlerini kullanmayı düşünmemiz gerektiğinden bahsetmiştim - fakat daha fazla kodun yazılması gerektiğine karşı tamamen karşıydı. Bu beni bir şeyleri değiştirme konumunda bırakıyor ve çıktının aynı olduğundan emin olmamaya dikkat ediyor, özellikle de kodu spagetti ve bir şans yakaladığımda yeniden ateşlemeye çalışıyorum.

Peki benim için en iyi yol nedir?


3
Birim testlerini yazma isteği, meslektaşınızla ortak birim test uygulamalarının genel giderine göre daha az olabilir.
mario

2
@james: Lütfen @ m.edmondson adresime verdiğim yanıtı görün.
doppelgreener

İyi!! Sizin için daha az rekabet!

@ Jonathan - yeterince adil, düzeltilmiş duruyorum
ozz

@ m.Edmondson - yeni iş .... benim yorumumun bir parçası yanağında küçük bir dildi, ama çalışmak için berbat bir yer, eski teknoloji, mantıklı bir dev uygulaması kullanmak istemeyen dev sesler gibi geliyor.
ozz

Yanıtlar:


23

Birim testinin faydalarının farkında değil ve yapmanız gereken de bu:

  • Farkındalığı.

Ona, onun işini sadece senin değil geliştireceğini de kanıtlamak zorunda kalacaksın. Bu zor olacak, muhtemelen değişimden korkuyorsa bulabileceği her olumsuz noktaya odaklanmaya çalışacaktır.

Tüm faydaları hakkında onunla konuşmaya çalışabilir ve tüm karşı argümanlarını dinleyebilirsiniz. Kendinizi konuşmaya başlamadan önce konuşmayı bitirmesini bekleyin.

Kendinizi hazırlamak için, P.SE veya Google’a bakmalısınız. Her şey yönetimi veya geliştiricilerin birim testi konusunda endişeli olması ve meslektaşınızla görüşmeleriniz sırasında kullanacağınız yanıtları derlemeniz gerekir.

Sadece onu dinliyor ve çalışmalarını iyileştireceğine dair kanıtları size çok yardımcı olacak. Onun düşüncesiyle ilgilendiğinizi kanıtlıyorsunuz ve ona durumu analiz etmek ve sonunda fikrini değiştirmek için ihtiyaç duyduğu tüm verileri sağlıyorsunuz.


20
Bir öğenin listesini seviyorum. +1
Armand

1
Listeden hemen sonra durursanız bu cevap mükemmel olurdu. +1 :)
Tim Post

SO seçimlerinde 2. sıranız için tebrikler!

6
Bu listenin kendi pasta grafiğini hakettiğini hissettim.
Tomas

Ayrıca, gemi böceklerine olan istekliliğini de değiştirmeniz gerekebilir. Bazı hatalardan kaçınma, daha iyi testleri daha önemli hale getirebilir.
stonemetal

15

Birim testi yaz (ona söyleme)

Her şey kırılıncaya kadar bekleyin, İki gün boyunca manuel testler yapmasına izin verin, ardından ünite testlerinizi çıkarın ve hatayı üç saniye içinde bulun.

Siper al...


1
+1 Hataların kaçınılmaz olduğunu göstermek ve gizlenmek için.
Neil

+1 Kodun belirli bir parçası için tam bir birim test paketi yazmak, faydaları gösteren kodla ilgili yeterince sorun ortaya çıkarabilir. Arabirim / API özelliklerini / davranışlarını eksiksiz bir kod yeniden yazma yoluyla korumak için birim testlerinin nasıl kullanılabileceğine dair bir sunum izlediğimi hatırlıyorum ...
JBRWilkinson

3
@JBRWilkinson: Merb (eski Ruby web uygulama çerçevesi) tam olarak bunu yaptı. Ünite testlerinde değil, ancak fonksiyonel testlerde. Mimari "organik" olarak büyümüştü ve çerçeve kullanımı güzelken sürdürmesi ve uzatılması hoş değildi . Sürdürülebilirlik ve genişletilebilirlik aslında rakibi Ruby on Rails'in en çok satan noktalarından ikisi olduğundan, bu konuda bir şeyler yapmaları gerektiği açıktı. Ya yaptılar anlamıyla için rm -rfsadece fonksiyonel testler tutarak kaynak ve birim test dizinleri ve sadece onları birer yine tek geçirerek olsun.
Jörg W Mittag

11

Aksi takdirde manuel görevler otomatik olarak programlanması herhangi bir programcıya hitap etmelidir.

Yani daha fazla kod yazmıyor, daha az manüel yapıyor.


1
Bunları sizin için yapan bir test ekibiniz olup olmadığına bağlıdır :)
gbjbaanb

11

(Bunlardan biri) otomatik testlerin noktası / noktaları tekrarlanabilirliktir . Elle hızlı bir test yaparsanız , bir ünite testi ile aynı yazmaktan daha hızlı bir şekilde gerçekleştirebilirsiniz (en azından bir ünite testi acemi için - ünite testinde deneyimli herkes testleri oldukça hızlı yapabilir).

Peki ya yarın veya gelecek hafta, kodda küçük (veya büyük ...) bir değişiklik yapılırsa ne olur? Meslektaşınız, hiçbir şeyin kırılmamasını sağlamak için her değişiklikten sonra tekrar tekrar aynı manuel testleri tekrar eder mi? Yoksa "kodlayıp dua etmeyi" mi tercih ederdi?

Kod ne kadar fazla değişirse, birim testleri o kadar çok ilk yatırımınızı geri öder . Olumlu tarafa geçmek uzun sürmez, hatta testler herhangi bir hatayı yakalamadan bile olmaz. Ancak bunu düzenli olarak da yaparlar - bu noktada paha biçilmez hale gelirler. Birisi başarılı bir birim test çalışmasının sağladığı güvenlik hissini ve birinin koduna olan güvenini deneyimlediğinde, genellikle geri dönüş olmaz.

Eğer ikna olmuş, ancak yeni alana girmekten korkuyorsa , ilk ünite testlerini birlikte yazmak için ona bir çift programlama oturumu sunun . Test edilmesi zor olmayan fakat test etmeye değecek kadar karmaşık bir sınıf seçin.

Ancak ikna değilse, zor gerçekleri toplamanız gerekebilir . Bu tür gerçekler olabilir

  • sizin tarafınızdan yazılan koddaki kusur oranları
  • koduna karşı bir takım testler yapmak ve bulunan hataları belgelemek.

Bu tür verileri toplayın, daha sonra kibarca sonuçları gösterin. Bunlar hala onu ikna etmek için yeterli değilse, sorunu tartışmanız ve toplanan kanıtlarınızı yönetimle paylaşmanız gerekebilir. Bu sadece son çareniz olmalı, ama bazen başka yolu yoktur.


Çok düşük bir ihtimal - test planlarının bilinmediği bilinmemekle birlikte (mükemmel belgeler) uzun sayfalar
billy.bob

@ m.edmondson, evet, bu sadece retorik bir soruydu :-)
Péter Török

Tekrarlanabilirlik için +1. Ben saldırgan bir refactor (er), ve bir kod bölümünü tamamen yeniden yazdığımda regresyonları çok hızlı bir şekilde bulabilmeyi seviyorum.
Michael K,

3

Kodunun en kötü bitleri için temel bir test kapsamı yazın, bu testlere dayanarak yapın, ardından sürekli inşaatlar üzerinde yapılan birim testlerinin verimliliği artıracağı yönetimi ile ilgili bir dava açın. Tek bir geliştirici tarafından bildirilmek yerine işveren tarafından yapılması durumunda değişiklikler daha kolay hale gelir.

Bunu doğru bir şekilde nasıl ifade edeceğinizi bilmiyorum, ama: "şansın varken" kodunu yeniden değerlendiriyorsan ... muhtemelen, kendini "işine" dahil etmek için biraz aptal olduğunu düşünüyor. bu yüzden sizi açık bir zihinle dinlemek daha az olasıdır. Tecrübelerime göre insanlar yaptıklarına bağlı kalıyorlar - çok iyi olmasalar bile.


.NET 1'deyiz (Bildiğim bir şaka) - birim testleri burada uygulanabilir mi?
billy.bob

1
@ m.edmondson: Belki de NUnit gibi bir şey? ( nunit.org )
Dr. Hannibal Lecter,

@dr Hannibal Lecter - Yea Sanırım bir yerde bir kopyasına
sahibiz

4
birim testlerinin etkili olması için belirli bir süit kullanması gerekmez. Onları sadece python'da c ++ programına çağrı yapmak ve alınan değerleri doğrulamak için yazdım. bir çerçeve kesinlikle, ancak bir zorunluluk değildir.
TZHX

3

Şeytanların savunuculuğunu oynamak için: bir anlamı var. Genelde şöyle koyarım:

Otomatik testler, çoğu koda ilişkin sorunları daha fazla kodla çözer.

Gerekçe:

  • hata oranı ve OO metrikleri arasındaki korelasyon hakkında bir çalışma , başlık sonucu: "Çalıştığımız metrelerin hiçbiri artık hata eğilimi ile ilişkilendirilmedi" . (Çalışma sınıf boyutunu tartışıyor. Bu etki kod tabanının büyüklüğünü genişletiyor mu? Muhtemelen. Bence )
  • Ampirik olarak, büyük projeler yavaş ilerlerler. "Yeni bir projede gecede 5K hat" vs. "Büyük projede 10 hat / gün". Bu, kod tabanının boyutuyla birlikte artan değişim için bir "direnç" anlamına mı geliyor?
  • Her zaman "En iyi dil yok, soruna bağlı." Diye ilan ediyoruz. Bir anahtar gereksinim, sorunlu varlıkların ve işlemlerin tercih edilen dilde kolayca modellenmesidir. Sorununuzu ifade daha ayrıntılı olduğu bir dil seçmenizi öneriyoruz olmamasıdır kötüsü , ve olmadığını kod tabanının nihai boyutuyla tekrar korelatı o?

Şimdi, buna kolayca ateş edebilecek birkaç argüman var. Aklıma gelenlere değinmeme izin ver:

  • büyüklük - basitlik: Elbette kodu daha kısa ve daha kötü hale getirmek mümkündür. Ancak, bu sadece bir problem karşılaştırarak her nasılsa bu faktör için kontrol edebilecek varsayabiliriz tartışma biri için, farklı kısalık-vs-basitlik oranlarına sahip kod tabanları.

  • Birim testler sizi bağımlılıkları azaltmanız konusunda baskı altına alıyor ve ampirik olarak bağımlılıkların azaltılmasının kod boyutu sorunlarını azaltabileceğini (benzer boyuttaki iki kod tabanının daha fazla karşılıklı bağımlılığa sahip olması daha kötü olduğu anlamına geldiğine) kabul ediyorum. Bununla birlikte , üretim kodu birimlerine olan bağımlılıkları azaltmakla birlikte , test ile ünitenin kendisi arasında birleşme sağlar.


TL; DR: Ünite testlerinin kötü olduğunu iddia etmiyorum; Soruyorum: Testlerin acı çektiği, kod miktarıyla ilişkili olduğu kesin bir nokta var mı?


2

Bence zor bir durumdasın. İnsanların birim testleri yazamayacağı veya daha da kötüsü, korkunç, sürdürülemeyen birim testleri yapamayacakları bir takımdaydım. Ancak herkes birim testinin iyi olduğu gerçeğinin farkındaydı.

Bu yüzden ekibin birim test paketinin iyi kalitede olması çok zor bir yoldu. Her zaman işlerin nerede geliştirilebileceğinin araştırılması, fikirlerin iletilmesi, deneyimlerin paylaşılması.

Öte yandan, faydayı bile anlamayan bir geliştiriciniz var. Ve sonra da spagetti kodunu kodlar. Sanırım bu özel durumun en önemli nedenlerinden biri, iyi birim testleri yazmanın gevşek bir şekilde birleştirilmiş bir tasarımı zorlamasıdır. Bu yüzden onu teste sokmak umarım uzun vadede "gerçek" kodu da iyileştirebilirdi.

Ama bence sonuçta bu bir takım kararıdır (takımda kaç kişi olduğunuzu bilmiyorum?). Ekip, iyi kapsayan bir birim test paketi olması gerektiği konusunda fikir birliğine ulaşabilirse, herkes uyum sağlamalı, deneyimlerini paylaşmalı ve ekibinizin birlikte güçlenmesini sağlamalıdır.

Ancak takım birim testleri yazmanız gerektiği konusunda fikir birliğine varamazsa, çalışmak için farklı bir geliştirme ekibi bulmanızı öneririm;)


2

Patron o mu?

Eğer öyleyse ... onu temelde "bir ons kilo tedaviye değer" yararları konusunda ikna edemediğiniz sürece şaşırıp kalmışsınız. Hatalar geçiyor. TDD, tutarlı bir çıktı oluşturarak bunu azaltmaya yardımcı olur.

Patron değil mi?

Çalıştığınız kodlama standartları nelerdir? Neden spagetti kodunu patlatıyor? Patrona, "TDD'ye biraz daha fazla zaman harcarsak böceklere çok daha az zaman harcayacağız" diyen bir iş vakası sunun. Bir iş vakası ile değişimi uygulayabilecek birini ikna edin.

TDD'nin zaman kazanmış olabileceği belge vakaları & $$ MONEY $$.

Bu hata kendini sundu. Yaşamadan önce yakalanmış olurdu. 2 saatlik önleme yapılması, bize 10 saatlik bir iyileşme sağlayacaktır. Burada ve burada ve burada oldu. Şirketi 30 adam saat kurtaracak olan 10 saatlik çalışma. Bu kadar para.


1
Ünite testlerini yukarıdan uygulamak, eşinizi daha fazla sebze yemeye zorlamak gibidir. İsteksizce en iyi şekilde uyuyorlar ve izlemeyi bıraktığınızda eski alışkanlıklara geri dönecekler. Sorumlu yetişkinler gibi geliştiricilere daha iyi davranın ve onları birim testlerinin faydalı olduğuna ikna edin.
nikie

1

Bu beni bir şeyleri değiştirme konumunda bırakıyor

Niye ya?

Sorunu onlar yarattı. Çözmeliler.

Hangi yönetici bunun olmasına izin veriyor? Neden başka birinin buggy kodu artık senin sorunun?

Bunu gerçekleştiren bir meslektaşınız ve bir yöneticiniz var. Ve dağınıklıklarını temizleyerek, istekli ve aktif bir katılımcısın.

Düşük kalitedeki acıları hissetmezlerse hiçbir şey değişmeyecektir.


> Sorunu yarattılar => Çözmeli. Bazen tuvale en yakın olan insanlar tüm resmi göremezler. Bir ünite testi yazmak biraz iş yapıyor olabilir, ancak başkalarının işlerini temizlemeniz gerekmez. Örnek olarak liderlik etme fırsatı.
JBRWilkinson

1
@JBRWilkinson: Doğru olsa da - ve sık sık yaptığım - herhangi bir kültürel değişimi etkilemez. Birisi test yapmayı reddederse, bu reddetmeyi (a) mümkün kılan ve (b) iyi davranış olarak pekiştiren bir kültür vardır. Sessizce başka birinin dağınıklığını düzeltme yükünü üstlenmek, altta yatan nedenleri düzeltmez.
S.Lott

Ekip üyelerinin berbat bir kod çıkarması ve karmaşaları ile ilgilenen diğerlerine güvenmesinin sürdürülemez olacağı konusunda hemfikir olmama rağmen, bir "onu yıkarsan, kendine sahip ol" derinlikli bir evliliği benimsemenin zararlı olduğunu düşünüyorum. İnsanların kodu değiştirmekten ve geliştirmekten korkmasını istemiyorsunuz. Bunun yerine, iyi uygulamaları yaymaya odaklanın ve sağlam bir test takımı oluşturun. O zaman daha "ortak bir mülkiyet" zihniyetine doğru çalışabilirsiniz. Bu herkesin kodu. Herkes onu düzeltir, herkes iyileştirir ve sorumluluk alır.
sara,

1

Oldukça haklı, birim testleri "daha fazla kod".

Ancak, programın nasıl çalışması gerektiğine (tekrar tekrar) bakmak için yazılması gereken daha fazla kod var. Boşa zaman değildir. Çekirdek bileşenleri kadar sistemin bir parçası.

Ona meydan oku:

  1. Kurallara aşina olmayan biri bir şeyi değiştirirse ne olur.
  2. Tecrübesiz biri bir şeyi değiştirirse ne olur.
  3. Bir sistemi sürdürmenin maliyeti, ne kadar sürede yaratılacağı ölçülmez. Daha uzun vadeli bir teklif. Toplam sahip olma maliyetini düşünün.
  4. Tahmini (kodlama başlamadan önce gerekliyse), birim testleri yazma gereksinimini içermelidir. İş adamları doğrudan birim testi gerektiren gereksinimler yaratmazlar, ancak kesin bir kalite gereksinimine sahiptirler ve gelecekteki değişikliklerin hatalarla karıştırılmamasını veya aynı programcının kaynağını değiştirmesini gerektirir.

Bunun gibi "daha fazla kod" aldığımdan emin değilim. Olabilir. Muhtemelen sık sık. Ama öyle olmak zorunda değil. İyi bir test paketi hem başlamak için daha az kod yazmanıza yardımcı olur (ne zaman yapıldığını bilirsiniz ve hemen durdurabilirsiniz) ve kodu daha sık yeniden incelemenize ve küçültmenize yardımcı olur. Bu, çok fazla testle sonuçlanır, test kodunun aksine, hiçbir zaman temizlenemeyen büyük kodlu üretim kodunun aksine, çok fazla üretim kodu ile sonuçlanır.
sara,

1

Şu anda üretim kodunu yapan biri olarak konuşan TDD'den ziyade birim testleriyle devam ettim, şu anki yerime uygun görünmüyor (Bazı projelerde TDD yaptım, fakat başka bir araç olarak görüyorum) ol 'çanta, gümüş kurşun değil) ...

Zor bir satış olabilir. Hala iş arkadaşlarımı birim testinde satamıyorum. Birim test kodumda üretim kodumdan çok daha fazla hata yapma eğiliminde olduğumu biliyorum. Bu yüzden, birim test kodunu sabitlemek için çok fazla zaman harcamak zorunda kalmak biraz sinir bozucu ... Ancak, kod değiştirildiğinde güzel bir sigorta. Kenar koşullarını otomatik olarak test etmek için harika bir yol.


1

Ünite testlerini kendiniz oluşturarak ünite testlerinin nasıl yardımcı olduğunu gösterin.

Francis'in bir keresinde dediği gibi, "Her Zaman Vaaz Ver. Gerekirse kelimeleri kullan."

Kodunuzun birim testleri kullandığını ve birim testleriyle hataları daha hızlı çözebildiğinizi görüyorsa fikrini değiştirebilir. Ancak, olmayabilir.

Sonuç ne olursa olsun, sizi yapmaya istekli olmadığınız bir şeyi itmek olarak görmüyor. Değiştirmen gereken şey bu, örnek olarak liderlik etmediğin algısı.

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.