İnsanlar test paketlerini nasıl koruyorlar?


17

Özellikle, aşağıdaki hususları merak ediyorum:

  1. Test durumlarınızın yanlış (veya eski) olduğunu ve onarılması (veya atılması) gerektiğini nasıl anlarsınız? Yani, bir test durumu geçersiz olsa bile, yine de geçebilir ve sessiz kalabilir, bu da yazılımınızın iyi çalıştığına yanlış bir şekilde inanmanıza izin verebilir. Peki test takımınızın bu tür problemlerini nasıl fark ediyorsunuz?

  2. Test takımınızın artık yeterli olmadığını ve yeni test senaryolarının eklenmesi gerektiğini nasıl anlarsınız? Bunun gereksinim değişiklikleriyle bir ilgisi olduğunu tahmin ediyorum, ancak test paketinin yeterliliğini kontrol etmek için sistematik bir yaklaşım var mı?


4
Yorumlamak için: testleri kim test eder?
Konrad Rudolph

Yanıtlar:


11

Kısa cevap: Aşağıdaki kod kapsamı ve kod kalitesi araçları gibi test senaryolarının kalitesini korumaya yardımcı olan bilinen araçları kullanın: programın kritik bir bileşeni yeterince test edilmediğinde fark etmenize yardımcı olacak Cobertura, PMD, Sonar vb. Ayrıca, bir şey ters gittiğinde ilk önce kırılması muhtemel olan entegrasyon testlerini yazın.

Uzun cevap:

Test durumlarınızın yanlış (veya eski) olduğunu ve onarılması (veya atılması) gerektiğini nasıl anlarsınız? Yani, bir test durumu geçersiz olsa bile, yine de geçebilir ve sessiz kalabilir, bu da yazılımınızın iyi çalıştığına yanlış bir şekilde inanmanıza izin verebilir. Peki test takımınızın bu tür problemlerini nasıl fark ediyorsunuz?

  • Cobertura gibi kod kapsamı araçlarını kullanarak , belirli bir sınıf için test senaryolarının veya karmaşık yöntemlerin artık yeterli olmadığını algılayabilirsiniz. Her yerde% 100 kod kapsamına ulaşmanıza gerek yoktur ve çoğu durumda başarılması zor olacaktır ve her zaman yararlı olmayabilir; ancak bir programın en kritik yönlerine yönelik testler, kod kapsamının en az% 80'i kadar bir amaçla sürdürülmelidir.
  • Sonar eklentisiyle birlikte, çok sevdiğim Jenkins gibi sürekli oluşturma ve entegrasyon araçlarını kullanarak , en son değişikliklerden sorumlu kişilere e-posta ve diğer uyarı türlerini gönderen tetikleyiciler ayarlayabilirsiniz. Çeşitli grafikler ve istatistikler (Sonar, Cobertura'yı diğer birçok araç arasında da kullanır), gözden geçirenlerin ve test senaryosu geliştiricilerinin kritik olana odaklanmasına yardımcı olur.

Test takımınızın artık yeterli olmadığını ve yeni test senaryolarının eklenmesi gerektiğini nasıl anlarsınız? Bunun gereksinim değişiklikleriyle bir ilgisi olduğunu tahmin ediyorum, ancak test paketinin yeterliliğini kontrol etmek için sistematik bir yaklaşım var mı?

İlk soru için yazdım, ikinci sorunuzun cevabının bir parçası. Buraya aşağıdaki noktaları da ekleyeceğim:

  • Test senaryolarına ek olarak entegrasyon test senaryolarını (veya isterseniz "iş" vakalarını) yazın. Bunların ilk önce büyük olasılıkla değişmesi / kırılması muhtemeldir, çünkü bunlar genellikle birden fazla sınıfa / yönteme bağlıdır. Sık sık kırıldıkları için unutulması daha az olasıdır. Kişisel deneyimlerime göre, iyi testler yazmaya yardımcı olan tek yaklaşım / metodoloji Test Odaklı Gelişimdir . Özellikle test senaryosunu yazan kişi, bunun kodunu yazan kişi DEĞİLSE. TDD kullanarak iyi test vakaları yazmak da zaman alır, ancak en azından benim için sonuçlar son derece tatmin ediciydi.
  • Bir hata çıktığında, düzeltmeyi ve beraberinde gelen test senaryosunu yazın. Test durumu yalnızca bu hatayı kapsamalıdır. Hatadan sorumlu kodu tamamen kapsadığınız için, tekrar çıkmaması gerekir.

Testin yazıldığı kişi hariç, aynı kişinin kod yazması dışında hepsine katılıyorum. Bu teoride kulağa hoş geliyor ve eğer bu kadar verimsiz olmasaydı iyi olurdu. Kod tabanınız ne kadar harika olursa olsun, herhangi bir boyutta ise, bir bölümünün nasıl çalıştığına aşina olmak birkaç saat sürer. işe yarıyor, bir başkası içeri girip biraz içeri girip çıkmayı öğrenmeli ve sonra bir test yazmalı. Kod kalitesi en iyi değilse, kapsamlı bir test yazmak günler sürebilir
Earlz

@Earlz İki kişi aynı proje üzerinde çalışmazsa size katılıyorum. İki geliştirici, aynı çerçeveyi, kütüphaneleri ve geliştirme metodolojisini tartışmalı olarak tutarlı bir şekilde kullanan aynı proje üzerinde çalışıyorsa, karmaşık bir iş gereksinimi hariç, herhangi bir sorun yaşamamalıdır.
Jalayn

@ Davam için çalış, ürün sadece çok karmaşık. Kod kalitesi en iyisi değil, ama kesinlikle en kötüsü değil (düzenli olarak yeniden düzenleme yapıyoruz). Ayrı bir test cihazına sahip olmayı zorunlu kılıyoruz, ancak birim testleri için işi tamamlayan kişi bunu yapıyor. Ürünümüz karmaşık bir konuyu ele alan yüzlerce (belki binlerce?) Sınıftan oluşur.
Earlz

@Jalayn Bu araçlardan bahsettiğiniz için teşekkürler. Ancak kapsama aracında olduğu gibi, her zaman çalıştıramazsınız, değil mi? Peki bu noktada hangi aracı çalıştırmak gerekiyor? Kaynak kodda birkaç değişiklik yaptıktan sonra? Ya da birkaç test güncellemesinden sonra? Bunun için ortak bir kılavuz var mı?
Ida

1
Sürekli bir derleme sunucunuz varsa, havuzunuz için her işlem yapıldığında uygulamalarınız oluşturulabilir ve test edilebilir (bunu işyerinde yaparız). Yapılandırılabilir, örneğin her 15 dakikada bir inşa edebilirsiniz. Kod kapsamına gelince, test durumları sırasında etkinleştirilir ve fazla ek yük eklemez. Ancak, Sonar gibi tam kod kalite denetimleri etkinleştirilmiş derlemeler genellikle çok uzun zaman alır, bunlar örneğin her gece çalıştırılır. İdeal olarak, bu araçları manuel olarak çalıştırmanız gerekmez.
Jalayn

9

Test senaryolarınızın doğru olduğundan emin olmanın hiçbir yolu yoktur , ancak bunları oluştururken gerçekten iyi konsantre olmak - gereksinimi anlamak, kodu anlamak ve kabul ettiklerinden emin olmak. Bir test takımına sahip olmanın amacı, bunu yalnızca bir kez yapmanız gerektiğidir ve bundan sonra testleri yeniden yürütebilir ve geçtiklerini kontrol edebilirsiniz, oysa bir test paketi olmadan her zaman çok yoğun konsantre olmanız gerekir. , yani kod tabanınıza bir şey yaptığınızda. Ancak ilk etapta doğru şeyi yaptığınızdan emin olmanızın temel sorunu kalır - bilgisayarlar bizi bu görevden kurtaracak kadar zeki değildir.

Bu nedenle, (1) test takımınız eksikse, bunu görmenin basit bir yolu yoktur. Kod kapsamı analizi, bazı kod satırlarının hiçbir zaman yürütülmediğini, yani paketin bir şekilde eksik olduğunu, ancak eksikliğin ne kadar şiddetli olmadığını kanıtlayabilir ve asla yeterli olduğunu kanıtlayamaz. % 100 kod kapsamı ile bile, tüm ilgili durumlarınSistemin uygulanması ve mevcut durumun birleştirici sayısı nedeniyle gerçekçi bir sistem için tam bir devlet kapsamı sağlanamaz. Test senaryosunun en azından kontrol etmek istediğiniz şeyi kontrol etmek için doğru olduğundan emin olmanın iyi bir tekniği, testi yazmak, gerçekten başarısız olduğunu doğrulamak, kodu yazmak / değiştirmek ve daha sonra geçtiğini doğrulamaktır. Bu nedenle test odaklı geliştirmeye duyulan heyecan: bireysel bir testin doğru şeyi yaptığından emin olmanızı sağlar ve tüm kod tabanınızı bu şekilde oluşturursanız, büyük bir sistemde bile benzer bir güven seviyesine sahip olabilirsiniz.

(2) Bir test paketi normalde yetersiz hale ne zaman gereksinimleri değişiklik - Tahmin etmek gerekmez. Müşteri belirli bir davranışın değişmesini istiyorsa ve testleriniz değişiklikten önce ve sonra başarılı olursa, o giriş / çıkış ilişkisini açıkça kullanamıyordu.

Test kapsamı olmayan ya da kapsamın ne olduğunu bilmediğiniz eski sistemlere gelince, resmi bir kanıt yoktur, ancak (ebeveyn danışma: kişisel görüş takip eder!) Deneyimlerden bahsederken, testlerin büyük ölçüde muhtemel olması muhtemeldir. Var değil yeterli. Testler, gerçeğe uygun, isteğe bağlı, kaliteyi artıran, ancak gerçekten gerekli olmayan bir etkinlik olarak görüldüğünde, testlerin kod tabanına uymasını sağlamak için teşvik, sadece orada değil.

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.