Birim test geliştirme veya test mi?


24

Birim yöneticisi ile birim ve entegrasyon testinin rolü hakkında bir tartışma yaptım. Geliştiricilerin birim ve entegrasyon testlerinin ne olduğunu ve nasıl yapıldığını bildirmelerini istedi. Benim bakış açım, birim ve entegrasyon testlerinin test sürecinin değil geliştirme sürecinin bir parçası olduğu. Anlambilimin ötesinde demek istediğim, birim ve entegrasyon testlerinin test raporlarına dahil edilmemesi ve sistem test uzmanlarının onlar hakkında endişelenmemesi gerektiğidir. Akıl yürütmem iki şeye dayanıyor.

  1. Her zaman bir arayüz ve sözleşmeye karşı birim ve entegrasyon testleri planlanır ve gerçekleştirilir. Resmi sözleşmeleri kullanıp kullanmadığınızdan bağımsız olarak, örneğin bir yöntemin yapması gereken, yani bir sözleşmenin ne olduğunu hala test edersiniz.

    Entegrasyon testinde iki farklı modül arasındaki arayüzü test ediyorsunuz. Arayüz ve sözleşme , testin ne zaman geçeceğini belirler. Ancak her zaman tüm sistemin sınırlı bir bölümünü test edersiniz. Diğer taraftan, sistem testi sistem spesifikasyonlarına göre planlanmakta ve gerçekleştirilmektedir. Spesifikasyon testin ne zaman geçeceğini belirler.

  2. Birimin genişliğini ve derinliğini ve entegrasyon testlerini (sistemler) test cihazına iletmede hiçbir değer görmüyorum. Belirli bir iş katmanı sınıfında ne tür birim testlerinin yapıldığını listeleyen bir rapor yazdığımı varsayalım. Bundan ne çıkarması gerekiyor?

    Neyin test edilmesi ve neyin test edilmemesi gerektiğine karar vermek yanlış bir sonuçtur, çünkü sistem tüm ünite ve entegrasyon testleri geçse bile özelliklerin gerektirdiği şekilde çalışmayabilir.

Bu işe yaramaz bir akademik tartışma gibi gözükebilir, ancak benim gibi kesinlikle resmi bir ortamda çalışıyorsanız, işlerin nasıl yürüdüğünü belirlemede önemlidir. Her neyse, tamamen yanlış mıyım?


9
Önemli mi?
yannis

5
@YannisRizos Başlıktan, no. Tüm sorudan, sorulan kişi için kesinlikle öyle görünüyor
Ludwig Magnusson

2
@Rubio Sorunuzdan, birim test raporlarının sistem test cihazı için yararsız olduğuna katılıyorum. Birim testleri, geliştirici için yararlı bir araçtır. Test yöneticiniz bu raporlara olan ihtiyacı nasıl motive ediyor?
Ludwig Magnusson

2
@LudwigMagnusson True, ancak yalnızca sorduğu kişi için önemliyse , bu çok fazla yerelleştirilmiş.
yannis

5
Test yöneticisine rapor veren geliştiriciler , ne olursa olsun yanlış. Bu isteği ( dev müdürünüz ) aracılığıyla geçerse, patronunuzun size söylediklerini yapmanız gerekir. "Yöneticimle konuş " seninki gibi "kesinlikle resmi bir ortamda" nasıl kullanılacağını bilmesi gereken silahtır
gnat

Yanıtlar:


30

Otomatikleştirilmiş testler yazmak bir geliştiricinin işidir; Testler kod tabanının bir parçasıdır ve bu şekilde ele alınmalıdır - bunlar projenin geri kalanıyla aynı kod incelemelerine, kodlama standartlarına, kaynak kontrol disiplinine vb. tabi olmalıdır.

Bu testlerin yapılması iki nedenden ötürü yapılır: Birincisi, geliştiricilere yol gösterici bir araç olarak. Yeni yazdığınız kodun yapılması gerekeni yaptığını, ek belgeler olarak kullandığınızı ve değişikliklerin varolan herhangi bir işlevselliği bozmadığını doğrulamak için testler yaparsınız. Gerçek bir TDD yaparsanız, testler aynı zamanda teknik özelliklerin yetkili kaynağıdır. Testleri kullanmanın ikinci nedeni KG ve dağıtım sırasındadır. Tüm otomatik testlerin yapılması, her test turunda ilk adımlardan biri olmalıdır; otomatik testlerin yapılması ucuzdur (neredeyse hiç insan gücü gerektirmez) ve otomatik testlerin başarısız olması durumunda manuel testlere girmenin bir anlamı yoktur.

Bu, sorumlulukların şöyle olması gerektiği anlamına gelir:

  • Geliştiriciler otomatik testler yazar
  • Geliştiriciler, geliştirme iş akışlarının bir parçası olarak gerektiğinde bireysel otomatik testler gerçekleştirir
  • KG, tüm otomatik testleri testin ilk aşamalarından biri olarak gerçekleştirir

Bir yapı sunucunuz varsa, KG'nin görevi (otomatik testlerle ilgili olarak) "yapı sunucusunun raporunu açmak ve her şeyin yeşil olduğunu doğrulamak" anlamına gelir.


Mükemmel yazı, tam olarak göndereceğim satırlar boyunca. Yalnızca kalite ünite testlerine çok fazla güveniyor ve entegrasyon testleri yolun aşağısında sorunlara yol açabiliyor. KG’nin görevinin yapı sunucusunu kontrol etmekle kaynaşması gerçeğine katılmıyorum (sanırım Hudson gibi bir şey demek istediniz). Bu, geliştiricilere çok fazla ağırlık vermiş gibi görünen TÜM iş mantığını kapsayan testler yazmak için geliştiricilere uygulanan tüm test yükünü ortaya koyuyor.
dardo

4
@dardo: Elbette otomatikleştirilmiş testler, yapmanız gereken tek test değil , aksi takdirde KG'den tamamen kurtulabilirsiniz. Bu çok saçma olurdu - herhangi bir yazılım ürününün çok önemli yönleri birçok şey otomatik olarak test edilemez. Demek istediğim, otomatik testlerin varlığı göz önüne alındığında, KG'nin derleme sunucusunun çıktısını kontrol etmenin ötesinde onlar için endişelenmesine gerek olmaması gerektiği; Ondan sonra normal işlerini yaparlar - tamamlanan yapı üzerinde manuel ve yarı otomatik test.
tdammers

Ah evet,% 100 katılıyorum Bir kontrol noktası gibi sıralama, oradalar mı, geçtiler mi, vb.
dardo

@tdammers - Test, kalite güvencesinin sadece küçük bir kısmıdır.
Matthew Flynn

2
Mükemmel cevap, ancak testlerin görülmesi gerektiği konusunda hemfikir değilim an authoritative source of technical specifications. Testler şartnamelerin bir onayı olmalı, ancak kesinlikle değiştirilmemelidir. Bu aynı zamanda büyük bir ön spekülasyon için de savunuculuk yaptığımı söylemek değil, bunun yerine, bir sistemin nasıl davranması gerektiğine dair bilmemiz gereken şeyleri doğrulamak için testler uyguladığımız ayrımını yapıyorum. Testler davranışı tanımlar. Belki de bilgisel bir ayrım, ancak yine de önemlidir.
S.Robins

10

Bence sizin için en önemlisi, bu rapora niye ihtiyaç duyduğunu açıklamak olacaktır .

Çok farklı stratejiler gerektiren farklı açıklamalar olabilir (birkaç cevapla önerildiği gibi).

  • Makul bir kişi ise, sadece test ekibinin çalışmasına yardımcı olmak için bilgi edinmek isteyen ortak bir anlayışa sahip olmak ve her ikinize de uygun bir çözüm bulmak mantıklı olacaktır. Birim testlerinin mahiyeti ve birim - fonksiyonel / sistem / kabul testleri arasındaki temel farkı onunla tartışabilirsiniz. Umarım bu çalışmaların çok farklı seviyelerde olduğunu ve ikisinin de yerini alamayacağını anlayabilirsiniz.
  • eğer bir kontrol manyağı ya da bürokrat ise, sadece onun uğruna bir rapor talep ederek, kaprislerini en az çaba ile karşılamak için bir şeyler üretebilirsiniz (örneğin, @Doc'un önerdiği :-).
  • eğer biraz güç oyunu oynuyorsa, geliştiricilerden rapor talep etme hakkına sahip olup olmadığını sorgulayabilirsiniz. Tecrübelerime göre, geliştiricilerin genellikle KG departmanına rapor vermemeleri gerekiyor.

Güzel nokta. Mantıklı bir insana benziyor. Çok net bir şekilde anlamadığım korkum, ünite testlerinin test edicilere ihtiyaç duydukları ve test etmeleri gerekmeyen şeyleri yanlış yöne ve yanlış güvenliği yöneltmesidir.
Rubio

2
@Rubio, ona, birim testlerinin sistem testlerinin yerini alamayacağını netleştirmelisin. Aslında, belirli bir modülün yüksek ünite test kapsamı, bu modülün sistem testi sırasında ekstra dikkat gerektirdiği konusunda bile bir uyarı işareti olabilir! Geliştiriciler birçok testin yapılması için fazladan acı çektiyse, kod son zamanlarda büyük ölçüde değiştirilmiş / uzatılmış ve / veya hatalarla dolu olabilir.
Péter Török

7

Kalite Güvencesi ve Gelişim'in rolü ile etkileşimin kuruluşlar arasında çok çeşitli olduğunu düşünüyorum. Ancak genel olarak ekibimde, üyelere katılmayı temel olarak bir QA ekibi yokmuş gibi yapıp, üretime soktukları değişikliklerden sorumlu oldukları anlamında söylüyorum. Sırasıyla, Kalite Güvence ekibimiz geliştirici testleri konusunda pek fazla bir fikre sahip değil ve sistemi işlevsel bir bütün olarak test etmek için yeterli miktarda çalışıyor.

Bu nedenle, QA ekibimiz, teste başlamadan önce ünite testli olan ve olmayan şeyler hakkında pek fazla umrunda değil.

QA ekibinin ünite testlerinin ne yaptığını ve üst düzeyde kapsamadığını anlamalarının yararlı olduğunu düşünüyorum, böylece boşlukları ve daha fazla titizlik gerektiren alanları tespit etmek için toplu olarak çalışabiliriz. Belki meslektaşınız, kanlı ayrıntıların aksine yüksek bir özetin peşindedir.


5

Devs, neyin ve entegrasyon testlerinin ne olduğunu ve nasıl test edildiğini bildirmek için ısrar etti.

Gerçekten bu tür bir testin aslında “geliştirme” alanında olup olmadığını tartışmaya mı çalışıyor, yoksa sadece kodunuzun birim testiyle ne kadar iyi karşılandığını anlamaya mı çalışıyor? Verdiğiniz bilgilere bakarak, kodun hangi kısımlarının kapsandığını ve ekibinin çabasını nereye odaklaması gerektiğini bilmek istiyor gibi görünüyor.

Gelişim rolüne geçmeden önce okul dışında bir test ekibinde çalıştım ve bunun onun ve ekibinin ne kadar değerli olabileceğini görebiliyorum.


1
Ancak odak özelliklerden gelmemeli mi? Kod değişikliklerinin beklenmeyen sonuçlara neden olduğu durumlar vardır ve bu durumda geliştiricinin testin de bunu ve bunu kapsaması gerektiğini bildirmesi çok önemlidir.
Rubio

1
@Rubio: Elbette, ama tamamen pratik bir bakış açısıyla, ona bakış açısıyla bakmaya çalış. Uygulamanın tüm bölümlerinin, birim testlerinin kapsadığı tamamen eşit miktarda koda sahip olmayacağını varsayarak, sınırlı kaynaklarınızdan daha fazlasını, daha az kapsanan uygulama bölümlerine ayırmak istemez misiniz? Bana göre, bu sadece rapora bakmak ve ekibime şunu söylemek meselesi, "Hey beyler, Alan X, Alan X'ten daha az kod içeriyor gibi görünüyor, Alan X üzerinde testler yapmaya odaklanmaya çalışalım"
Jason

@Rubio: evet, fakat eğer TDD'yi (yani BDD) düzgün bir şekilde yapıyorsanız, testleriniz ilk etapta özelliklere karşı olmalıdır. Şirketiniz gerçekten aydınlanmışsa, test ekibi dev ekibi için testleri yazabilir.
gbjbaanb

2
Ne test edildi: otomatik olarak oluşturulan kod kapsama raporu. Nasıl test edilir: birim test kodunu okuyun. @gbjbaanb: "Test ekibi dev ekibi için testleri yazabilir." Bu ifadede yanlış olan çok şey var, nereden başlayacağımı bilmiyorum, Çok Kötü Bir Fikir .
BryanH

5

Bunun çok önemli olduğunu anlamıyorum.

Onları KG / Test'e sağlamazsanız ve uygun testler yapmazlarsa ve üretimde başarısız olurlarsa, KG'nin belirtilen şekilde çalıştığını doğrulamadan üretime sokmasını sağlamak onların hatasıdır.

Onları KG / Test'e sağlarsanız ve uygun testler yapmazlarsa, vermemiş olmanızla aynı sonucu verir.

Ancak, eğer bunları sağlarsanız, bunları teknik özelliklerle de karşılaştırabilirler ve / veya hangi testlerin hatalı olabileceğini veya bir hata buldukları için değiştirilmesi gerekebileceğini önerebilirler.

Gerçekten, onları sağlamada pek dezavantaj göremiyorum. Spesifikasyonu doğrulamak için hala QA / test yapılıyor. Eğer tembel bir şekilde ilerlerlerse ve sadece testlerinizin yeterince iyi olduğuna güvenirlerse, çünkü hepsi geçtiler, işlerinde başarısız olan onlar. Spesifikasyona hala sahip oldukları sürece, ünite / entegrasyon testlerinin sonuçları tamamen kabarıktır ve size bir şekilde zarar vermemelidir. Dev ve QA'nın nedeni budur. Uygulamanın belirtildiği gibi yaptığı birden çok kontrol.

Devs hatalar yapar, QA hata yapar, ideal olarak ikisi de aynı maddede hata yapmazlar ... ve yaparlarsa, topu belirsiz bir şekilde yazıp düşüren bir analist olabilir.


2
Benim dezavantajı hiçbir değer veya az değer sağlayan ekstra bir iştir.
Rubio

@ Rio, ne ek iş? Sadece sonucu yazdırın. İyi adlandırılmışlarsa, onlara ne test ettiğinizi söyler. Asıl koda veya yöntemin nasıl çalıştığının açıklamasına ihtiyaç duyulmaması gerekir. Eğer yaparlarsa, kendileri arayabilirler.
CaffGeek

1
Geçen 3500 ünite / entegrasyon testinden oluşan bir rapor oluşturmak, testler iyi isimlendirilmiş olsa bile (ki bunlar yapılmalı fakat olmamalıdır) teste çok yardımcı olacaktır. Test cihazlarına birim testi hakkında anlamlı bilgiler sağlamak için, dev belirli bir özellik ile ilişkili birim testini incelemeli ve bir şekilde test ediciye gerçekte ne test edildiğini ve nasıl iddia edildiğini test etmelidir. Çok fazla iş var.
Rubio

1
@Rubio - otomasyon senin arkadaşın. Bir check-in yapıldığında herhangi bir zamanda raporları postalayan sürekli bir entegrasyon sunucusu kurabilirsiniz (bu da size yardımcı olacaktır). Eğer QA testlerin ve kodların açıklanmasını istiyorsa, mantıksızlık seviyesinin ötesine geçtiler ve "kavramı kavramadaki başarısızlık" alemine girdiler. Kodu okuyamazlar veya okuyamazlarsa, yararsızdırlar. Bu noktada, yöneticinizle bir sohbet yapmak faydalı olacaktır ve "QA zamanımın% x'ini kod okumalarına yardım etmemi istiyor," diyor.
BryanH

1
+1 , yazılımı bağımsız olarak test etmenin QA'nın sorumluluklarından vazgeçmediğini söylediği için .

2

Birim testi, kod parçalarının kendi başlarına nasıl çalıştığını anlamak için testlerin faydalı olabileceği geliştiricilerin sorumluluğundadır. Bazıları bunu bir dokümantasyon şekli olarak görebilir ve bu nedenle birimin testleri düzenli olarak değiştirilirse genel gider olmasına rağmen bazı değerleri vardır.

Testlerin geçilmesinde bir diğer değer, bunun, temel işlevselliği sağlama açısından gereksiz olabilecek testleri iki katına çıkarmaktan kaçınabileceğidir.

Son kullanıcı bir sistemin nasıl işleyeceği konusunda kendi anlayışına sahip olabileceğinden, bunlardan ayrı bir kullanıcı kabul testi de vardır.


1
Gereksiz test, genellikle bir argüman olarak kullanılan ve bazen doğru olabilir. Bununla birlikte, sistem testi her zaman tüm sistemde gerçekleştirilirken, birim / entegrasyon testi belirli bir birime odaklanır. Burada bir tehlike görüyorum.
Rubio

2

Şirketinizin ürünlerinin kalitesini sağlamak için tanımlanmış bir metodolojisi varsa (eğer SOX ile uyumlularsa veya CMMI seviyelerini yükseltmeye çalışıyorlarsa, muhtemelen yaparlar), o zaman ürünler, sürecin gösterilmesi için denetlemeye dayanabilmelidirler. Takip edildi.

Genelde, tanımlanan işlem birim testini içerir (bu iyi bir şeydir). Ne yazık ki, bu aynı zamanda birim testlerinizi belgelemeniz ve denetlemeye ayak uydurmak için çalıştıklarını kanıtlamanız gerektiği anlamına gelir. Bu, birim testlerinizi rapor etmek için bir yola ihtiyacınız olduğu anlamına gelir.

Size yardımcı olmak için Sonar gibi bir araca bakın; kod kapsamı düzeyini ve birim testinizin sonuçlarının sonuçlarını bildirir.


SOX hayır, CMMI evet. Birim / entegrasyon testlerimiz kod inceleme sürecinin bir parçasıdır ve denetime dayanmaktadır. Bir birim / entegrasyon test çalışmasından üretilmiş bir rapor alabilirim, ancak bu bir test cihazı için oldukça şifreli. Kapsam da raporda yer almaktadır ancak bu kendi başına hiçbir şey ifade etmez.
Rubio

İlk olarak, testlerinize şifreli adlar vermeyin. Check dannorth.net/introducing-bdd . İkincisi, kod kapsamı testlerin kalitesi hakkında fazla bir şey ifade etmeyebilir, ancak en azından test edilen ünitelerin kodun çoğu için çalıştırıldığında patlama yapmadığını gösterir.
Matthew Flynn 19

İyi bağlantı, teşekkürler. Birim testlerine isim vermenin farklı yollarını araştıran mükemmel bir dergi makalesi okuduğumu hatırlıyorum ama benden ötürü bulamıyorum. Visual Studio Dergisi veya Code Magazine olabilir.
Rubio

2

Bu gerçekten şirkete bağlı, ancak benim tecrübeme göre hem geleneksel bir yaklaşımda hem bir sistem testcisi hem de CD modelinde çevik bir ekipte çalışan bir test cihazı olarak çalıştığımdan beri, ünitenin ne olduğunu ve test edilmesinin ne kadar yararlı olduğunu bilmek çok yararlı.

Kalite ekibin sorumluluğundadır - hem geliştiriciler, hem test edenler hem de Ürün Yönetimi ve birlikte çalışmak, bunu sağlamanın en iyi yoludur.

Bu nedenle test yöneticisi neyin ve entegrasyonun test edildiğini bilmek istiyor ve geliştiriciler için biraz daha fazla iş yapıyor ama proje için genel çalışmayı kurtarıyor! Bilgileri test yöneticisine vererek, test ekibi çabalarını neyin kritik ve önemli olduğuna odaklayabilirler. Daha önce de belirtildiği gibi, eğer bir kod alanı birim test edilmemişse, ekip burada yoğun bir şekilde test edilen bir alana kıyasla çabalarını odaklayabilir - neden bu çabayı yineliyorsunuz? Hepiniz zamanında yayımlanan daha yüksek kalitede yazılımın aynı nihai hedefi için çalışıyorsunuz.


1

Bu tür bir şeyi sağlamanın yararlı olacağını düşünüyorum. Birim test kapsamı, bunu hesaba katmak için geliştirme ve test etme ile bilinen bir şey olmalıdır.

Açıkçası, ne olursa olsun işle ilgili kritik konuları test etmeniz gerekiyor. Sık kullanılan ünite kapsamına sahip olup olmadığına bakılmaksızın yaygın olarak kullanılan işlevselliği zor test etmeniz gerekir. Başka hangi yerlerin ünite testleri ile kapsandığını bilmelerini sağlamak incinemezdi. Bu küçük kontrolde kod zaten son durumları kontrol ediyor mu? Bu tür şeyler işin her tarafında bilmek yardımcı olur.


Benzer bir cevap yazmak üzereydim. Birim testi yazılım geliştirici alanında olsa da, test ekibine kod kapsamı hakkında bir fikir vermek test ekibinin test uzmanlarının daha fazla dikkat gerektirebilecek belirli alanları anlamalarına ve hedeflemelerine yardımcı olabilir. Ayrıca, geliştiricilerin oyunlarını, maliyet açısından uygun olduğu kadar çok sayıda yeni olayı hesaba katmalarını sağlama konusunda sağlamalarının bir yolu olabilir. Bu, test ekibinin yalnızca sistemin bütünlüğünü doğrulamasını değil, aynı zamanda test etmenin maliyetli olabileceği düşünülen tüm şeyleri hesaba katmasını sağlar.
S.Robins

1

"Google Yazılımı Nasıl Test Ediyor" kitabında tartışılan yaklaşımdan bahsetmeye değer: Test ve Kalite Kontrol herkesin sorumluluğundadır ve standartlar çok katıdır.

Gerçek geleneksel olarak "Test" bölümü denen rolü aslında geliştirici verimliliği olduğu; Örn. ekonomik olarak kurumun istenen titizlik seviyesine ulaşmasını sağlamak için otomasyon.

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.