Test türleri ve bunların nasıl kullanılacağı

Tamamlandı

Bir test stratejisi geliştirirken, farklı test türleri bazı karışıklıklara neden olabilir. Bu tür testlerin ne olduğunu ve birbirlerinden ne kadar farklı olduklarını bilmek, sağlam bir test stratejisi uygulamanın sağlam bir yoludur.

Dekont

Birim, tümleştirme ve işlevsel test arasındaki fark tartışmalı olabilir. Bu açıklamalar kılavuz olarak amaçlanıyor. En önemli şey proje ve diğer geliştiricilerle tutarlı olmaktır.

Birim testi

Birim testinin birincil odağı, mümkün olan en küçük kod mantığı parçasını test etmedir. Bu tür testlerin yan etkisi hızdır. Veritabanları, web siteleri veya ağ çağrıları gibi dış kaynaklar gerekli olmadığından (ideal olarak) birim testleri genellikle hızlı bir şekilde çalışır.

Birden çok mantıksal koşula sahip uzun ve karmaşık işlevlerin ve yöntemlerin birim testi yapılması zor olacaktır. Birim testi, geliştiricileri koddaki karmaşıklığı düşünmeye ve en düşük düzeyde tutmaya zorlar. Genel olarak işlev veya yöntem ne kadar kısa olursa test etmek o kadar kolay olur.

Birim testiyle ilgili kesin kurallar yoktur, ancak genel olarak birim testleri hakkında yaygın olarak kabul edilen normlar şunlardır:

  • Mümkün olan en küçük mantık parçasını test ederler.
  • İşlevler, yöntemler veya sınıflar mümkün olduğunca yalıtılmış olarak test edilir ve gereksinim olarak diğer işlevleri, yöntemleri veya sınıfları ayarlama gereğinden kaçınılır.
  • Veritabanları veya ağ hizmetleri gibi dış hizmetlerin çalışması gerekmez.

Tümleştirme testi

Tümleştirme testi genellikle bir kod projesindeki diğer mantık parçalarıyla etkileşime geçen test mantığına odaklanır. Bazen bu testler bir veritabanına veya başka bir dış hizmete bağlanmayı gerektirir.

Örneğin, kullanıcı adı ve parolayı denetleen bir işlevin var olan verileri doğrulamak için veritabanına bağlanması gerekebilir. Bu işleve yönelik bir test, mevcut bilgilere sahip bir veritabanı gerektirebilir. Bu tür testler, birim testlerinden biraz daha karmaşık kurulumlar gerektirir ve yürütülmesi daha uzun sürebilir.

Tümleştirme testiyle ilgili bazı kabul edilen normlar şunlardır:

  • Birim testleri kadar hızlı değildir ve çalıştırmadan önce daha fazla kuruluma ihtiyaç duyma eğilimindedir.
  • İşlevler, yöntemler veya sınıflar diğer işlevler, yöntemler veya sınıflardaki işlevlerle test edilir.
  • Dış hizmet kullanılabilir, ancak uygulamanın tüm hizmetleri kullanılamaz.

İşlevsel test

İşlevsel test genellikle bir uygulamanın bir bütün olarak çalıştırılmasını gerektirir. Bir web sitesi için, işlevsel bir test için bir web sunucusuna, veritabanına ve uygulamanın çalışması için gereken diğer hizmetlere ihtiyaç duyulabilir. Fikir, üretim ortamında çalışan uygulamayı mümkün olduğunca yakın bir şekilde çoğaltmaktır.

Bir üretim ortamını doğru bir şekilde çoğaltmak her zaman mümkün olmadığından, kurulumun dezavantajlarına özel bakım yapılması gerekir. Örneğin, bir web sitesinin üretimde 1 terabayt verisi varsa, büyük olasılıkla üretim verilerinin bir alt kümesiyle test etmek uygun olur. Ancak, üretimde kullanılan PostgreSQL veritabanı yerine SQLite gibi ekli bir veritabanı kullanmanız önerilmez. Veritabanları gibi dış hizmetlerin sürüm farklılıkları testin geçmesine neden olabilir ancak üretimde başarısız olabilir.

İşlevsel test aşağıdaki yönlerden bazılarını içerir:

  • Birim testleri kadar hızlı değildir ve çalıştırmadan önce daha fazla kuruluma ihtiyaç duyma eğilimindedir.
  • İşlevler, yöntemler veya sınıflar diğer işlevler, yöntemler veya sınıflardaki işlevlerle test edilir.
  • Dış hizmet kullanılabilir, ancak uygulamanın tüm hizmetleri kullanılamaz.

İşlevsel testler daha fazla hizmet, üretim ortamının çoğaltılması ve test türlerinin en karmaşık kurulumu gerektirdiğinden, genellikle zaman alan ve yoğun kaynak kullanan bir test olacaktır.

Çevrimiçi perakende mağazası için tek bir işlevsel test aşağıdaki adımların tamamlanmasına neden olabilir:

  1. Yeni bir kullanıcı için kaydolun.
  2. Belirli bir ürünü seçin ve sanal alışveriş sepetine ekleyin.
  3. Sevkiyat ve fatura bilgilerini tamamlayın.
  4. Satın alma işlemini tamamlamak için "satın al" düğmesini seçin.
  5. Yeni hesabın mevcut olduğunu, fatura ve sevkiyat bilgilerinin doğru olduğunu ve envanterin güncelleştirildiğini doğrulayın.

Sürekli Tümleştirme

CI (Sürekli Tümleştirme) bir test türü olmasa da, her test türüyle ilgili önemli bir parçadır. Bir test planı uygulandığında, testleri otomatik bir şekilde çalıştıracak bir şeyin olması önemlidir. CI ortamı, testleri otomatik olarak çalıştırmak için doğru yerdir. Bu testler bir zamanlamaya göre çalıştırılabilir, bir olay tarafından tetiklenebilir veya el ile yürütülebilir. Bu ortam genellikle kodun veya projenin çalıştırılması gereken yerle tutarlı olacaktır.

İyi bir CI işleminin temeli otomasyondur. Otomasyon, tutarlı (ve iyi bilinen) bir ortam ayarlayacak olandır. Yinelenen ve bilinen bir test ortamı olmadan, hata ayıklama sorunları ve başarısız testler zaman alabilir, hatta imkansız olabilir.

Bir olay tarafından tetiklenen

Örneğin, bir geliştirici değişiklikleri ana dalda birleştirmek istiyorsa değişikliklerin kırılmaya neden olmayacağından emin olmak idealdir. CI sistemi, bir geliştiricinin dalından testleri otomatik olarak çalıştırabilir ve bir hata olduğunda onları uyarır. CI'nin birleştirilmemesini engelleyen kod, projede güvenilirliği ve sağlamlığı artırmanın iyi bir yoludur.

Bir zamanlamaya göre çalıştırma

Daha önce de belirtildiği gibi, otomasyon bir CI işleminin önemli bir parçasıdır. Genellikle, herhangi bir test türünün kurulumuyla, testlerin çalışması için bağımlılıkların yüklenmesi gerekir. Bir test çalıştırması için zamanlama (örneğin, gecelik çalıştırma) kullanmak, bağımlılıklar değiştiğinde bile projenin doğru şekilde derlendiğinden emin olur.

Yinelenen zamanlanmış test çalıştırması, tamamlanması uzun süren testleri çalıştırırken de yararlı olabilir. Bir yazılım projesinin tamamlanması birkaç saat sürecek işlevsel testleri varsa, bu testleri gece çalıştırmak daha verimli olacaktır. böylece ekip sabah ilk iş olarak hatalar üzerinde çalışabilir.

El ile tetikleme

Son olarak, zamanlanmış ve olay odaklı test çalıştırmaları yararlı olsa da, bir test paketini el ile çalıştırabilmek iyi olur. Örneğin, bir test paketinin bir sorunu olduğu bilindiğinde, bir geliştirici daha önce başarısız olan bir çalıştırmayı yeniden çalıştırarak bir düzeltme deneyebilir. Bu geri bildirim döngüsü, düzeltmelerin belirli bir olay veya zamanlamaya gerek kalmadan test edilmesini sağlar. Ayrıca CI çalıştırması, belirli koşulların karşılandığından emin olmak için geçici olarak değiştirilebilen bir testin çalıştırılması için yapılandırma değişikliklerine izin verebilir.