Geliştiriciler, birim testleri dışındaki testlerden sorumlu olmalı mı, eğer hangisi daha yaygınsa?


35

Şu anda oldukça büyük bir proje üzerinde çalışıyorum ve JUnit ve EasyMock'ı oldukça kapsamlı bir şekilde birim test işlevselliği için kullandım. Şimdi başka hangi tür testlerden endişe etmem gerektiğiyle ilgileniyorum. Bir geliştirici olarak, işlevsel ya da regresyon testi gibi şeyler için endişelenmek benim sorumluluğum mu? Maven / Ant / Gradle gibi araçlara bunları kullanışlı bir şekilde entegre etmenin iyi bir yolu var mı? Bunlar bir Test Cihazı veya BA için daha uygun mudur? Kaçırdığım başka faydalı testler var mı?


2
Pratikte basit olsa da, pratikte izole edilmiş, yani tipik olarak var olan konuşmada konuşmaya devam ederken, çevrenizde izin verilen ölçüde dışarı doğru ölçeklendirin. Uçtan uca takımın ayrışmadan daha fazla ve beceri seti hakkında daha fazla olduğunu düşünün, her takım baştan sona başarı için kaldıraçlı olması gereken değişken bir beceri setini temsil eder. Takım testleri gerçekleştirmek için gerekli olan başarı için sorumlu olmalıdır. Uygulama ile nasıl başa çıkıldıkları, beceri kümesine dayalı bir uygulama detayıdır.
Aaron McIver

1
Bu sorunun cevabı, diğer takım üyelerinin yetenek seviyesine de bağlı olacaktır. Örneğin, KG'nın güçlü programlama becerisine sahip olmadığı bir ekipte, geliştiriciler kendilerini KG'nin kendi test donanımlarını yazabilecekleri bir ekipten daha fazlasını yaparken bulabilirler.
neontapir

İyi bir kriter, testlerin ne kadar otomatik yapılabildiğidir . Programcılar kodla bir şeyleri otomatikleştirme konusunda iyidir.
40'ta

Yanıtlar:


44

Kusursuz kod göndermeye çalışmak sizin sorumluluğunuzdadır. Gönderdiğiniz koda güven duymak için yazmalı, yardım yazmalı veya testlerin yazılmasını veya yapılmasını sağlamalısınız.

Not: Kusursuz kod vermeniz gerektiğini söylemiyorum. Aksine, size verilen gereksinimler için bulabileceğiniz en iyi kodu yazmaya çalışmalısınız. Bunu yapabilmenin bir kısmı, kodun test edilmesi gerektiği anlamına gelir.

Bunun, işlevsel ve regresyon testlerinden şahsen sorumlu olduğunuz anlamına gelip gelmediği, çoğunlukla şirketinizin nasıl örgütlendiğinin bir işlevidir. Tanıdığım en yüksek vasıflı programcıların hepsi "X tipi testler yazmak benim sorumluluğum mu?" Diye sormuyorlar. Bunun yerine kendilerine "kodumun doğru bir şekilde test edildiğinden emin olmak için ne yapmalıyım?" Diye soruyorlar. Cevap, birim testleri yazmak veya regresyona testler eklemek olabilir veya bir KG uzmanıyla konuşmak ve hangi testlerin yazılması gerektiğini anlamalarına yardımcı olabilir. Bununla birlikte, her durumda, doğru bir şekilde test edildiğinden emin olmak için yazdıkları kod hakkında yeterince özen gösterdikleri anlamına gelir.

Alt satır: yüksek kalitede kod sağlamaktan sorumlu olmalısınız. Bu, bazı fonksiyonel veya regresyon testleri yazmanız gerektiği anlamına gelirse, yapın.


Tamamen yürekten yüksek kalitede kod sunumu ile aynı fikirdeyim. İyi koddan "yukarıda ve öteye" daha fazlasını kastediyordum. Örneğin, bakış açınızdaki "hatasız" kabul edilen değişiklikler başka bir yerde negatif performans gösteriyor. Aklıma gelen en iyi örnek, bir gereksinimin yük için uygun şekilde onaylanmamasıdır. Bu yüzden kodum "hatasız" olmasına rağmen sunucuda yük sorunlarına neden oluyor (tamam, yani argüman beni değil mizahı yapabilir). PS Güven kısmınızın burada önemli olduğunu düşünüyorum.
Jackie,

10
Hatasız kodunun dağıtılması için sizin sorumluluğunuzdadır O ne sürüme geliştirici sorumluluğundadır istedi . Kusur kötü toplandı / yorumlanır, belli bir dağıtım çevre sorunları, bir işletim sistemi içinde çatışmalar, vs ... kök neden analizi her kusur yapılır sürece, gereklerinden yüzeyini yapabilirsiniz ve hatasız kod işletmeyle araçlar bekliyoruz kullanıcının beklediği şeyi yapmak ve daha az olan herhangi bir şey bir kusurdur. Bir geliştiricinin tüm SDLC'de yer almaya devam edebileceğini varsaymak gerçekçi değildir; Bu ölçeklenmez.
Aaron McIver

2
"Program testi, hataların varlığını göstermenin çok etkili bir yolu olabilir, ancak bunların yokluğunu göstermesi için umutsuzca yetersiz kalıyor." - Edsger W. Dijkstra, "Mütevazi Programcı" (Turing Ödülü dersi), 1972.
John R. Strohm

1
"Kusursuz kod sağlamak sizin sorumluluğunuzdadır." peri ülkesidir. Kapsamın gerektirdiği şeyleri sunabilirsiniz, ancak son vakalar ve iş mantığı yorumlamaları ifadenizi gerçekleştirmeyi imkansız hale getirir. Yazılımın her büyük sürümünün neden sürümleri ve yamaları olduğunu düşünüyorsunuz? Çünkü iş mantığı dahil hepimiz kusurluyuz.
Jason Sebring

4
Misiniz herkes kimin Bryan bunu ifadeli olsaydı daha mutlu bu cevabın ilk cümle ile konuyu sürüyor "Bu sizin olan hedef hatasız kodunun dağıtılması için"?
Carson63000

13

Bu size yardımcı olabilir:

Çevik test kadranları

S1 geliştiriciler tarafından yazılmıştır.

S2 geliştiriciler tarafından otomatikleştirilir ve işletme ve / veya test uzmanları ile birlikte yazılır.


Geliştiriciler sıklıkla Q4 testine de katılırlar.
neontapir

Bağlantılı dosya artık bulunamıyor.
Dušan Rychnovský

3

Kaçırdığım başka faydalı testler var mı?

Gherkin dilini kullanan BDD tarzı çerçeveler önerdiğim kabul testleri var : JBehave (Java), Salatalık (Ruby), Behat (PHP), vb. Bu tür testlerin birim testlerine göre bazı avantajları vardır:

  • Testler geliştiriciler tarafından kolayca okunabilir, bu yüzden müşterilere gösterebilirsiniz
  • Testler, uygulama ayrıntılarına girmeden iş süreçlerini açıkça tanımlamaktadır (Ben uygulamanın önemli olmadığını kastetmiyorum - kesindir - ancak iş gereksinimlerini kodun kendisinden ayırdığınızda daha iyidir)
  • Testler, kullanıcıların uygulamanızı kullanarak yapacakları işlemleri yapar
  • Yazmaları daha kolay (IMHO, dile ve çerçeveye bağlı olabilir): alaycı değil, daha az teknik detay

3

İşlevsel test, tıpkı testler gibi otomatikleştirilebilir ve projenizin farklı bileşenlerinin birlikte nasıl çalıştığını ve sisteminizin iş kurallarını ne kadar iyi yansıttığını test etmek için çok kullanışlıdır.

Ayrıca, bu otomatik test, yazılıma yapacağınız tüm önemli (veya küçük) değişiklikler için (hata düzeltme, refaktör, işletme değişikliği, yeni işlevsellik, vb.) Regresyon ve kabul testi paketi görevi görür. Bu, geliştiricilere bunu yapma konusunda daha fazla güven verir.

Bu tür testler için çeşitli çerçeveler var, çok iyi sonuçlar veren fitnes kullanıyoruz . Web sayfalarını test etmek için çok iyi bir kütüphaneye sahiptir (web uygulamamızı ve web hizmetlerimizi test etmek için kullanıyoruz) ve Maven ve Jenkins ile çok iyi bütünleşiyor .

Ayrıca, geliştiriciler arasında "çapraz fonksiyonel test" yapmak için kullanılır, ancak bu tür bir test "tekrarlanabilir" değildir, bu yüzden faydası sınırlıdır ...


2

Bir geliştirici olarak, tüm kodumu birim testinden sorumlu olduğumu düşünüyorum ve kusurlu olma ihtimallerimin en iyisini garanti ediyorum. Bu nedenle, alay etme gibi elimizde çok fazla araç var. Testlerinizde alaycı nesneler yaratmanın amacı, kodunuzu "dış" dünyadan tamamen uzak tutmaya çalışın ve iyi çalıştığını ve başarısız bir şey varsa "sizin suçunuz değil" olduğunu garanti etmektir.

Bu sizin suçunuz olmadığı ve kodunuzun olması gerektiği gibi çalıştığı gerçeğine rağmen, bu testlerin geri kalanında yardımcı olamayacağınız anlamına gelmiyor. Çalışmalarınızı, başkaları tarafından yapılan çalışmalara entegre etmenin sizin sorumluluğunuzda olduğuna inanıyorum. BT Geliştirme ekipleri her zaman iyi yağlanmış bir makine olarak çalışmalı, güvenilir yazılımlar sağlamak için diğer bölümlerle (QA gibi) daha büyük bir ekip olarak çalışmalıdır.

Ama bu bir takımın işi, sadece senin değil.


1

Açıkçası entegrasyon testleri ; ünite testlerinden daha önemli ve yazmak daha zordur. Bir ev inşa etmek gibidir; ünite testlerinde, yalnızca tuğlaların sağlam olduğu ve basınç, sıcaklık, nem ve diğer koşullara dayandığı garanti edilir. Ancak, evin bir araya getirilmiş tuğlalarla nasıl göründüğü ve nasıl davrandığı hakkında hiçbir fikriniz yok.

Büyük projelerle ilgili sorun, özellikle Java'nın bir konteynırda ikamet etmesi, entegrasyon testinin zor olması. Bu nedenle, büyük projelerde sistem entegrasyon testlerini kolaylaştırmak için, geliştiricinin kodlaması gereken proje için özel olarak yapılmış bir test çerçevesi gereklidir. Son zamanlarda bu alanda büyük gelişmeler kaydedilmiştir ve Arquillian gibi platformlar bir test çerçevesinin yazılmasını büyük ölçüde kolaylaştırmaktadır (hatta değiştirmektedir).


1

Gerçek dünyada, yalnızca ekibinizin / patronunuzun sizi sorumlu tuttuğu kadar sorumlu olursunuz. Her köşe başı ve huysuz kenar vakasını bulmak için hiç durmadan para harcamak veya ihbar etmek ve patronunuzun (veya daha kötü pazarlamanın) ticari mantık hatalarını yorumlamak için hevesine atlamak durumundaysanız, her şeyden öte, her şeyden siz sorumlusunuz.

Başka bir deyişle, size verilen kapsamın gerektirdiği şeyi yapın. Bazı genel anlamıyla atmak veya başkalarının oluşturduğunuz ürünü, kullanım durumları ve düzeltilmesi muhtemel sorunları anlamak için kullandıklarını görmek, ancak bunları "sabitlemeden" önce ekibinize veya patronunuza getirmek için kullanmak güzel bir ekstradır. Bu, seçtiğiniz araçları içerir. Tüm çabalarınız herkesin üzerinde olduğu bir şey olmalıdır.

Sorunuz yararlı hata takibi ise, iletişim sistemleri açısından bugzilla, google docs, zendesk veya basecamp'ı severim.


1

Bunun zaten kapsandığını sanmıyorum - kaçırdıysam özür dilerim.

Bir sorun, geliştiricilerin zamanının verimli kullanılmasıdır.

Geliştiriciler genellikle belirli test türlerinde iyi olma becerilerinden yoksundur. Kısmen, bu sadece doğal. Yazarların editörlere sahip olmalarının aynı nedeni. Eğer bir şeyde eksiklikleri görmek çok yakınsa çok zor. Ancak farklı yetenekler ve farklı özellikler ile de ilgilidir.

Durum böyle olunca, geliştiricinin zaman testi testinin maliyeti düşüktür: Fayda şartları. Bu geliştirici başka şeyler yaparken daha üretken olur ve uzman bir testçi testi yaparken daha üretken olur.

Tabii ki bu mutlaka geçerli olmayan çeşitli varsayımlarda bulunuyor. Örneğin, küçük bir şirkette test konusunda uzman kişilerin işe alınması mantıklı gelmeyebilir. Her ne kadar, fazladan destek personeli istihdam etmek ve bazı testler yaptırmalarını sağlamak veya en azından insanların kendilerinin yazmadığı kodları test etmek için daha anlamlı olabilir.


0

KG için yayınlanmadan önce olası tüm test senaryolarını kapsamamızın (aynı zamanda bir geliştirici) sorumluluğumuz olduğuna inanıyorum. KG'nin amacı yazılımı doğrulamaktır . Artı, hatalar için kendi kodunuzu kırmak her zaman QA zamanında iyi görünmenizi sağlar.


Sanırım ne almaya çalıştığım, etkili "çekiç" sayılan şey.
Jackie,

Bu kesinlikle özneldir. Projeniz için geçerli olan herhangi bir sınama türünü söyleyebilirim (elbette tüm sınama türleri tüm projeler için geçerli değildir). İşte iyi bir liste: softwaretestinghelp.com/types-of-software-testing . Kendiniz yaptığınız ve tabii ki ne yapmayı seçeceğiniz kendi zamanınıza, kaynaklarınıza ve yeteneğinize bağlıdır. Örneğin, Kabul Testini yapamayabilirsiniz, çünkü yalnızca bir kullanıcının takip edebileceği belli kurallar vardır. Kısacası, elinizden geldiğince elinizden geleni yapın.
Honus Wagner

Çoğunlukla web olan projelerim için genellikle ne olursa olsun Birim, İşlevsel, Kullanılabilirlik, Regresyon ve Performans'ı dahil etmeye çalışıyorum. Zamanım varsa, yeterince bilirsem Beyaz Kutu, Stres, Uyumluluk ve hatta Kabul için giderim. Genel kodlama tarzım son derece performanslıdır, bu yüzden önceliğimi düşürdüm. Bunların hiçbiri KG'nin bu test türlerinin hiçbirinde yanlış bir şey bulamayacağı anlamına gelmez, sadece daha az bulup daha kolay bir tur elde etmeleri anlamına gelir 2.
Honus Wagner

0

Bir geliştiriciden daha iyi kim, hangi test durumlarının en alakalı olduğunu bilir. Geliştirici, tüm birim testlerini yapmaktan sorumlu olmalı, mümkünse, geliştirici test komut dosyalarının yazılmasına ve yürütülmesine yardımcı olmalıdır. Bu nadiren büyük projelerde mümkün olduğundan, geliştiriciye tüm test durumlarını gözden geçirmesi için zaman verilmelidir. Ayrıca geliştirici bilgisine sahip olmalı ve mevcut çok çeşitli otomatik test araçlarını kullanmalıdır.

Geliştirme kariyerimde, projelerin daha iyi sonuçlarla sonuçlandığını ve geliştirme ekipleriyle test ekipleri arasında sıkı bir entegrasyon olduğunu buldum.

Her takımdan en az bir üye diğerlerinin de planlama ve uygulama toplantılarına katılmalıdır.


1
Bununla ilgili tek sorunum, geliştiricilerle test ekibi arasında bir dereceye kadar izolasyon olması gerektiği, aksi takdirde test ekibinin geliştiricinin "kod çalışmaları" fikrine dayanması. KG ve geliştiricilerin karşı hedefleri vardır; geliştirici, çalışmasını sağlamaya çalışıyor, KG ekibi bunu bozmaya çalışıyor ve geliştirici her zaman testin alaka düzeyi konusunda en iyi perspektife sahip değil .
Robert Harvey,

Yüzde yüz aynı fikirde değilim, ancak son zamanlarda yine mobil uygulamalarla ilgileniyorum ve geleneksel olanın biraz ötesinde bir entegrasyon seviyesi gerektirdiklerini düşünüyorum. Dikkat entegrasyon terimini kullanıyorum. izolasyon olabilir ancak her iki takım da test durumlarını gözden geçirmeli ve katkıda bulunmalıdır. Geliştiricilerin uygun testler yapmak için gerekli tüm test kaynaklarına erişimi olması muhtemel değildir, ayrıca test cihazlarının hücresel ağlar üzerinden video akışı gibi gelişmiş bir şey için test senaryoları geliştirme bilgisine sahip olma olasılığı düşüktür. çok fazla izolasyon = sorun.
Michelle Cannon,

Dahası, pazarın ne kadar dikey olduğunu ve ekipler arasında daha fazla entegrasyonun gerekli olduğunu düşünüyorum. Aslında herkes kodun bazı test koşulları altında çalıştığı ancak daha sonra kusurlu olduğu düşüncesiyle test aşamasına girmelidir
Michelle Cannon

Bu işe yarıyor gibi görünüyor, test ekibi fonksiyonel özellikleri kullanarak bir kullanım örneği belgesi üretiyor. Geliştirme ekibi, teknik ve fonksiyonel özellikleri temel alan kullanım dokümanını gözden geçirir ve gerektiğinde vaka ekler. Test ekibi, kullanım durumlarından test senaryoları geliştirir. Geliştirme testi inceleme testi vakaları. Zaman alıcı emin, ancak daha sonra dağıtım veya üretim aşamasında test ettikten sonra daha iyi.
Michelle Cannon,
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.