Birim, işlevsel, kabul ve entegrasyon testi (ve bahsetmediğim diğer test türleri) arasındaki fark nedir?
Birim, işlevsel, kabul ve entegrasyon testi (ve bahsetmediğim diğer test türleri) arasındaki fark nedir?
Yanıtlar:
Nereye baktığınıza bağlı olarak, biraz farklı cevaplar alırsınız. Konu hakkında çok şey okudum ve işte benim damıtmam; yine, bunlar biraz yünlü ve diğerleri aynı fikirde olmayabilir.
Birim Testleri
Genellikle bir yöntem / işlev olan en küçük işlevsellik birimini test eder (örneğin, belirli bir duruma sahip bir sınıf verildiğinde, sınıfta x yönteminin çağrılması y'nin gerçekleşmesine neden olmalıdır). Birim testleri belirli bir özelliğe odaklanmalıdır (örneğin, yığın boşken pop yöntemini çağırmak bir atmalıdır InvalidOperationException
). Dokunduğu her şey bellekte yapılmalıdır; bu, test kodunun ve test edilen kodun:
Yavaş / anlaşılması / başlatılması / manipüle edilmesi zor olan her türlü bağımlılık, uygun teknikler kullanılarak kesilmeli / alay edilmeli / ne olursa olsun, bağımlılıklarının ne yaptığına değil, kod biriminin ne yaptığına odaklanabilirsiniz.
Kısacası, birim testleri olabildiğince basit, hata ayıklaması kolay, güvenilir (azaltılmış dış etkenler nedeniyle), hızlı bir şekilde yürütülür ve programınızın en küçük yapı taşlarının bir araya getirilmeden önce istendiği gibi çalıştığını kanıtlamaya yardımcı olur. Uyarı, tek başına mükemmel bir şekilde çalıştıklarını kanıtlayabilmenize rağmen, kod birimleri birleştiğinde patlayabilir ve bu da bizi ...
Entegrasyon Testleri
Entegrasyon testleri, kod birimlerini birleştirerek ve ortaya çıkan kombinasyonun doğru çalışıp çalışmadığını test ederek birim testleri üzerine kuruludur. Bu, bir sistemin iç kısımları olabilir veya yararlı bir şey yapmak için birden fazla sistemi bir araya getirebilir. Ayrıca, entegrasyon testlerini birim testlerden ayıran başka bir şey de ortamdır. Entegrasyon testleri, tüm kodların ve farklı ortam değişikliklerinin doğru bir şekilde çalışmasını sağlamak için iş parçacıkları kullanabilir, veritabanına erişebilir veya gereken her şeyi yapabilir .
Biraz serileştirme kodu oluşturduysanız ve ünite, disklerini diske dokunmadan test ettiyseniz, yükleme ve diske kaydettiğinizde çalışacağını nasıl anlarsınız? Belki de akarsuları yıkayıp atmayı unuttun. Belki dosya izinleriniz yanlış ve bellek akışlarında kullanarak doğası test ettiniz. Kesin olarak öğrenmenin tek yolu, üretime en yakın ortamı kullanarak 'gerçek için' test etmektir.
Ana avantajı, birim testlerinin kablolama hataları (örneğin, A sınıfı bir örnek beklenmedik bir şekilde B boş bir örneği alır) ve ortam hataları (tek CPU makinemde iyi çalışır, ancak benim meslektaşının 4 çekirdekli makinesi testleri geçemez). Ana dezavantaj, entegrasyon testlerinin daha fazla koda dokunması, daha az güvenilir olması, arızaların teşhis edilmesinin ve testlerin sürdürülmesinin daha zor olmasıdır.
Ayrıca, entegrasyon testleri, tam bir özelliğin çalıştığını kanıtlamak zorunda değildir. Kullanıcı programlarımın iç detaylarını umursamayabilir, ama ben!
Fonksiyonel Testler
Fonksiyonel testler, belirli bir girişin sonuçlarını spesifikasyonla karşılaştırarak belirli bir özelliği doğruluğunu kontrol eder. İşlevsel testler, ara sonuçlar veya yan etkilerle kendilerini ilgilendirmez, sadece sonuç (x'i yaptıktan sonra y nesnesinin z durumuna sahip olması umurumda değildir). Bunlar, "Kare (x) işlevinin 2 döndürme 4 bağımsız değişkeniyle çağrılması" gibi belirtimin bir kısmını test etmek için yazılmıştır.
Kabul testleri
Kabul testi iki türe ayrılmıştır:
Standart kabul testi, uygulamanın işlevselliğinin teknik özellikleri karşılayıp karşılamadığını görmek için tüm sistemde testler yapılmasını içerir (örn. Web sayfanızı bir web tarayıcısı aracılığıyla kullanma). Örneğin, bir yakınlaştırma simgesine tıklamak belge görünümünü% 25 büyütmelidir. " Sonuçların gerçek bir sürekliliği yoktur, sadece başarılı veya başarısız bir sonuç vardır.
Avantajı, testlerin basit İngilizce olarak tanımlanması ve yazılımın bir bütün olarak özelliklerin eksiksiz olmasını sağlar. Dezavantajı ise test piramidinde bir seviye daha ilerletmiş olmanızdır. Kabul testleri kod dağlarına dokunur, bu nedenle bir arızayı izlemek zor olabilir.
Ayrıca, çevik yazılım geliştirmede, kullanıcı kabul testi, geliştirme sırasında yazılım müşterisi tarafından / müşterisi için oluşturulan kullanıcı hikayelerini yansıtmak için testler oluşturulmasını içerir. Testler başarılı olursa, yazılımın müşterinin gereksinimlerini karşılaması gerektiği ve hikayelerin tamamlandığı düşünülebilir. Kabul sınama paketi, temel olarak, sistem kullanıcıları tarafından kullanılan dilde sınamaları tanımlayan, etki alanına özgü bir dilde yazılmış yürütülebilir bir belirtimdir.
Sonuç
Hepsi tamamlayıcı. Bazen bir türe odaklanmak veya tamamen kaçınmak avantajlıdır. Benim için temel fark, bazı testlerin bir şeye programcının bakış açısıyla bakması, diğerlerinin ise müşteri / son kullanıcı odağı kullanmasıdır.
Önemli olan, bu terimlerin meslektaşlarınız için ne anlama geldiğini bilmenizdir. Farklı gruplar, örneğin "tam uçtan uca" testleri derken neyi kastettiklerini biraz farklı tanımlarlar.
Son zamanlarda testleri için Google'ın adlandırma sistemine rastladım ve bundan hoşlanıyorum - sadece Küçük, Orta ve Büyük kullanarak argümanları atlıyorlar. Bir testin hangi kategoriye uyduğuna karar vermek için birkaç faktöre bakarlar - çalışması ne kadar sürer, ağa, veritabanına, dosya sistemine, harici sistemlere vb.
http://googletesting.blogspot.com/2010/12/test-sizes.html
Mevcut iş yeriniz için Küçük, Orta ve Büyük arasındaki farkın Google'ınkinden farklı olabileceğini hayal ediyorum.
Ancak, bu sadece kapsamla ilgili değil, amaçla da ilgilidir. Mark'ın testler için farklı bakış açıları, örneğin programcı ve müşteri / son kullanıcı gibi noktaları gerçekten önemlidir.
http://martinfowler.com/articles/microservice-testing/
Martin Fowler'in blog yazısı, kodu test etme stratejilerinden bahseder (Özellikle bir mikro hizmetler mimarisinde), ancak çoğu herhangi bir uygulama için geçerlidir.
Özet slaytından alıntı yapacağım:
- Birim testleri - beklendiği gibi davranıp davranmadıklarını belirlemek için uygulamadaki en küçük test edilebilir yazılım parçalarını kullanın.
- Entegrasyon testleri - arayüz hatalarını tespit etmek için bileşenler arasındaki iletişim yollarını ve etkileşimleri doğrulayın.
- Bileşen testleri - kullanılan yazılımın kapsamını test edilen sistemin bir bölümü ile sınırlayın, sistemi dahili kod arabirimleri aracılığıyla manipüle edin ve test edilen kodu diğer bileşenlerden izole etmek için test çiftlerini kullanın.
- Sözleşme testleri - harici bir hizmetin sınırındaki etkileşimleri, tüketen bir hizmetin beklediği sözleşmeyi karşıladığını iddia ederek doğrulayın.
- Uçtan Uca testler - bir sistemin harici gereksinimleri karşıladığını ve hedeflerine ulaştığını ve tüm sistemi uçtan uca test ettiğini doğrulayın.
Birim Testi - Adından da anlaşılacağı gibi, bu yöntem nesne düzeyinde test eder. Bağımsız yazılım bileşenleri herhangi bir hata açısından test edilir. Bu test için program bilgisi gereklidir ve yazılımın amaçlandığı gibi davranıp davranmadığını kontrol etmek için test kodları oluşturulur.
Fonksiyonel Test - Sistemin dahili çalışması hakkında bilgi sahibi olmadan gerçekleştirilir. Test cihazı, farklı girişler sağlayarak ve üretilen çıkışları test ederek sistemi sadece gereksinimleri takip ederek kullanmaya çalışacaktır. Bu test, kapalı kutu testi veya kara kutu olarak da bilinir.
Kabul Testi - Yazılım istemciye teslim edilmeden önce yapılan son testtir. Geliştirilen yazılımın tüm müşteri gereksinimlerini karşıladığından emin olmak için gerçekleştirilir. İki tür kabul testi vardır - biri geliştirme ekibi üyeleri tarafından gerçekleştirilen, iç kabul testi (Alfa testi) olarak bilinen ve diğeri (Beta testi) olarak bilinen müşteri veya son kullanıcı tarafından gerçekleştirilen
Entegrasyon Testi - Ünite testine tabi tutulmuş bağımsız modüller birbirleriyle entegre edilmiştir. Genellikle iki yaklaşım takip edilir:
1)
Yukarıdan Aşağıya 2) Aşağıdan Yukarıya
Bu çok basit.
Birim testi: Bu aslında kodlama bilgisine sahip geliştiriciler tarafından yapılan testtir. Bu test kodlama aşamasında yapılır ve beyaz kutu testinin bir parçasıdır. Bir yazılım geliştirme için geldiğinde, kod parçası veya birim olarak bilinen kod dilimlerine dönüştürülür. Ve bu birimlerin tek tek test edilmesi, geliştiriciler tarafından ifade kapsamı eksikliği gibi bir tür insan hatasını bulmak için yapılan birim testi olarak adlandırılır.
Fonksiyonel test: Bu test test (QA) aşamasında yapılır ve kara kutu testinin bir parçasıdır. Daha önce yazılmış test senaryolarının fiili yürütülmesi. Bu test aslında test kullanıcıları tarafından yapılır, sitedeki herhangi bir işlevin gerçek sonucunu bulur ve bu sonucu beklenen sonuçla karşılaştırır. Eğer herhangi bir eşitsizlik bulmuşlarsa, bu bir hatadır.
Kabul testi: UAT olarak bilinir. Ve bu aslında test edicinin yanı sıra geliştiriciler, yönetim ekibi, yazar, yazarlar ve bu projeye katılan herkes tarafından yapılır. Projenin sonunda hatalar olmadan teslim edilmeye hazır olmasını sağlamak.
Entegrasyon testi: Kod birimleri (1. maddede açıklanmıştır) projeyi tamamlamak için birbiriyle entegre edilmiştir. Bu kod birimleri farklı kodlama teknolojisinde yazılabilir veya bunlar farklı sürümlerde olabilir, bu nedenle kodun tüm birimlerinin diğerleriyle uyumlu olmasını ve herhangi bir entegrasyon sorunu bulunmamasını sağlamak için bu test geliştiriciler tarafından yapılır.
Aşırı alay ve saf birim testine karşı bazı (nispeten) yeni fikirler:
Bunu pratik bir örnekle açıklayacağım ve teorik bir şey yok:
Bir geliştirici kodu yazar. Henüz bir GUI uygulanmadı. Bu düzeydeki test, işlevlerin doğru çalıştığını ve veri türlerinin doğru olduğunu doğrular. Testin bu aşamasına Birim testi denir.
Bir GUI geliştirildiğinde ve bir test kullanıcısına uygulama atandığında, bir müşteriyle iş gereksinimlerini doğrular ve farklı senaryoları yürütür. Buna fonksiyonel test denir. Burada, istemci gereksinimlerini uygulama akışlarıyla eşleştiriyoruz.
Entegrasyon testi: Diyelim ki uygulamamızın iki modülü var: İK ve Finans. HR modülü daha önce teslim edilmiş ve test edilmiştir. Şimdi Finans geliştirildi ve test edilebilir. Birbirine bağımlı özellikler de mevcut, bu nedenle bu aşamada, ikisi arasındaki iletişim noktalarını test edecek ve gereksinimlerde istendiği gibi çalıştıklarını doğrulayacaksınız.
Regresyon testi, herhangi bir yeni geliştirme veya hata düzeltmesinden sonra yapılan bir başka önemli aşamadır. Amacı, daha önce çalışan fonksiyonları doğrulamaktır.
Birim testi: Bir uygulamadaki bağımsız modüllerin veya bağımsız bileşenlerin testlerinin birim testi olduğu bilinmektedir, birim testi geliştirici tarafından yapılacaktır.
entegrasyon testi: modüller arasındaki iletişim ve veri akışının düzgün çalışıp çalışmadığını doğrulamak için tüm modülleri birleştirmek ve uygulamayı test etmek, bu test geliştiriciler tarafından da gerçekleştirildi.
funcional Test uygulamanın bireysel işlevselliğini kontrol fonksiyonel test için ortalama bir
Kabul testi Bu test, derleme uygulamasının müşteri gereksinimine göre olup olmadığını son kullanıcı veya müşteri tarafından yapılır ve müşteri spesifikasyonu bunun kabul testi olarak bilinir