Tam olarak bir entegrasyon testi nedir?


110

Arkadaşlarım ve ben bir entegrasyon testinin tam olarak ne olduğunu sınıflandırmak için uğraşıyoruz.

Şimdi, eve döndüğümde, farkına vardım ki, gerçek bir dünyaya bir entegrasyon testi örneği vermeye her çalıştığımda, bunun bir kabul testi olduğu ortaya çıktı. Bir işadamının yüksek sesle söyleyeceği, sistemin neyi sağlaması gerektiğini belirten bir şey.

Ruby on Rails belgelerini bu test türlerinin sınıflandırılması için kontrol ettim ve şimdi tamamen atıldı.

Bana gerçek dünyadan bir örnekle bir entegrasyon testinin kısa bir akademik tanımını verebilir misiniz?


76
BTW, bir isim cümlesine ("Ben ve bazı arkadaşlar") sahip olduğunuzda, hangi tekil kişiyi kullandığınıza dikkat etmeniz gerekir. İşte test. Arkadaşları bırak ve hala çalışıp çalışmadığını kontrol et. "Ben mücadele ediyorum " vs "Ben mücadele ediyorum". Bu test size "Ben ve arkadaşlarım ..." olduğunu söylüyor. Kibar olmak için önce diğerlerini listeledik. "Arkadaşlarım ve ben". Test önemlidir.
S.Lott,

58
Sanırım S.Lott az önce size bir dilbilgisi -> toplum entegrasyon testi yaptı.
Ürdün

Yanıtlar:


78

Şu anda bu ifadeyi beğendim: Bu makalede Gojko Adziç tarafından yapılan "Bu ne dediğiniz önemli değil, ne yaptığı önemli" .

Gerçekten test etmeyi düşündüğünüz testlerden bahseden kişilerle belirtmeniz gerekir.

Rollerinin ne olduğuna bağlı olarak farklı görüşlere sahip birçok insan var.

Test edenler için Hollanda'da kabul görmüş genel bir test metodolojisi TMap'tır . TMap aşağıdaki ayrımı yapar.

  • ünite testi
  • birim entegrasyon testi
  • sistem testi
  • sistem entegrasyon testi
  • Kabul testi (her çeşit / seviye)
  • fonksiyonel kabul testi
  • Kullanıcı kabul testi
  • üretim kabul testi

Yukarıda belirtilen testlerde yapılabilecek daha spesifik testlere sahiptirler. Genel bakış için bu kelimeye bakınız .

Wikipedia'da ayrıca güzel bir genel bakış var .

Kitap pragmatik programcı diyor ki:

  • Birim testi, bir modülü çalıştıran bir testtir
  • entegrasyon testleri, sistemin ana bölümlerinin birlikte iyi çalıştığını göstermektedir

Bu farklı kaynaklara bakmak ve kendi deneyimlerimi ve görüşlerimin bir kısmını koymak, üç kategoriye göre ayrım yaparak başlayacağım

  • genel olarak testi kim yapar
  • ne test edildi
  • testin amacı nedir

    • Birim testi : sınıflarda kod seviye doğruluğunu göstermek için programcılar tarafından test mantığı. Hızlı olmalılar ve test etmek istemediğiniz sistemin diğer bölümlerine bağlı olmamalıdırlar.
    • İşlevsel kabul testi : Test kullanım senaryosu, belirtilen her senaryonun belirtilen şekilde çalıştığını göstermek için test departmanı tarafından yapılan sınırlı (özel olarak oluşturulmuş) bir veri üzerindedir.
    • Kullanıcı kabul testi : Kullanıcıların resmi olarak kabul etmelerini sağlamak için kullanıcıların temsilcileri tarafından yapılan veriler gibi üretimde kullanım senaryosunu test etme
    • Entegrasyon testi : Tüm modüllerin birlikte doğru çalıştığını göstermek için, test departmanı tarafından veya modül tarafından yapılan modülün farklı parçaları arasındaki iletişim yollarını test edin.

Yukarıdaki listem sadece bir başlangıç ​​ve öneri ama gerçekten düşünüyorum: "Ne dediğiniz değil, ne dediği önemli değil"

Bu yardımcı olur umarım.

26-10-2016 Düzenleme: Yakın zamanda YouTube Ünite testlerine ve Entegrasyon testlerine çok hoş bir giriş yapıldı - MPJ'in Musings - FunFunFunction # 55


3
+1 "Ne dediğiniz önemli değil" için. Ne yazık ki, herhangi bir testin evrensel bir tanımı yoktur. İyi ol birim testi bile biraz değişkendir. DOM'u bir web uygulaması için test etmek birim testi olarak mı kabul edilir? Bazıları evet, bazıları hayır der.
Laurent Bourgault-Roy,

2
Doc kelimesinin bağlantısı mevcut değil.
Paul Rougieux

6
"Buna ne dediğiniz önemli değil" tüm bilgisayar bilimleri ve aslında hemen hemen tüm alanlar için geçerlidir. İnsanların girdiği ısıtılmış argümanların birçoğunu "keyfi bir cümle tanımı üzerinde tartıştık" olarak kaynaştırabilirim.
gardenhead,

+1 tanımları kabul ediyor: "Unit Test" in programcının sistemi en az bir numune girişi ile denediğini ... manuel olarak ... ve "doğru görünüyorsa" çıkışını görsel olarak kontrol ettiği bir yerdeyim. . Beklenilen şeyle ilgili bir sözleşme yok, kontrol edilen girdiler vb.
Yok

: Goyko link Burada bir arşiv erişebileceği bir 404. dönen web.archive.org/web/20150104002755/http://gojko.net/2011/01/12/...
Eduardo copat

32

entegrasyon testi, bir kabul testi olduğu ortaya çıkıyor

Açıkçası.

Bu ikisi neredeyse aynı şey. Ancak, test tanımında biraz farklı boyutlar vardır.

Entegrasyon == sistemi bir bütün olarak.

Kabul == sistemi bir bütün olarak.

Tek fark - ve bu ince - test durumlarının tanımıdır.

Entegrasyon == entegrasyonun derinliğini ve derecesini test etmek için test durumları. Tüm kenar kasaları ve köşe kasaları için işe yarıyor mu? Test durumları tasarımcı ve kodlayıcılar tarafından yazılmış teknik olma eğilimindedir.

Kabul == özellik setinin sadece son kullanıcı odaklı% 80'ini uygulamak için test durumları. Tüm kenar ve köşe kılıfları değil. Test durumları teknik olmayan ve son kullanıcılar tarafından yazılmış olma eğilimindedir.


7
Buna ekleyeceğim tek şey, entegrasyon testlerinin aynı zamanda sistemin bir bölümünü, ancak bir defada birden fazla parçayı test edebilmesidir. Sistemin birlikte çalışan iki veya daha fazla parçasının (birlikte entegre) neden olduğu hataları aradığınız zaman, entegrasyon testi yapıyorsunuz. Entegrasyon iki bileşenden gerçek ve diğer her şeyle alay ediyor, birlikte çalışan tüm uygulama paketine kadar uzanıyor ve hatta diğer uygulamalarla entegrasyon için kontrol kadar ileri gidebilir (örneğin, "MS Office Internet Explorer ile nasıl çalışır?").
Ethel Evans

1
@Ethel Evans: İyi nokta. Sistemin sadece bir kısmı dahil olsa bile, test entegrasyon ve kabul arasında hala bulanık olacaktır. Test, kabul ve entegrasyonun benzer hissedeceği kadar yüksek bir düzeyde gerçekleşir.
S.Lott

3
Entegrasyon testleri kesinlikle "sistemi bir bütün olarak" test etmiyor (ve muhtemelen de yapmamalı). İki veya daha fazla bileşenin birlikte test edildiği her yerde, özellikle dış bileşenlere (veritabanı, ağ vb.) Karşı test yaparken entegrasyon testi yapıyorsunuz. "Tüm sistem" testlerinin yüksek maliyetlerinden dolayı, mümkün olduğu kadar kaçınmak istiyorsunuz, bunun yerine daha fazla kısmi sistem entegrasyon testi yapın (bkz. Test piramidi
Schneider

1
@Schneider iyi diyor, entegrasyon testleri "sistemi bir bütün olarak" test etmemelidir. Bu tür testler, projenizde hangi kapsamda değerlendirdiğinize bağlı olarak "uçtan uca testler" veya "sistem testleri" olarak kabul edilir. Uçtan uca testler, birden fazla sistemde çalışan "bir bütün olarak" veri akışını ve sistem yalnızca "bir bütün olarak bir sistemi" test edebilir.
RoyB,

Onları, "Bütünleşme" testinin geniş kullanımı etrafındaki karışıklıktan kaçınmaları için nasıl tanımladığımı aşağıda açıklıyoruz. Birim testleri -> en küçük çalışma birimini, bir sınıftaki bir yöntemle, o yöntemin dışındaki başka bir koda çağrı yapmaz (gerekirse bağımlılıkları aştırarak) test eder. ve birlikte çalışan bir uygulamanın katmanlarını test etmelidir, ancak tüm uygulama bir yere dağıtılmamalıdır.) İşlevsel Testler / kabul testi -> uygulamanın dağıtılmış sürümünü test eden testler
Kevin M

16

Şahsen sistemin her bileşeni gerçek olduğunda , sahte nesneler olmadığında bir entegrasyon testini bir özellik testi olarak düşünmeyi seviyorum .

Gerçek bir depo, gerçek bir veritabanı, gerçek bir kullanıcı arayüzü. Sistem tamamen monte edildiğinde ve devreye alındığında olması gerektiği gibi olduğunda belirli işlevleri test edersiniz.


4
“Tamamen monte edilmiş” bir sistem olması gerekmediği sürece aynı fikirdeyim. Bütün sistemin alt kümeleriyle entegrasyon testi yapabilirsiniz (ve yapmanız gerekir), bu genellikle daha ucuz / daha kolaydır.
Schneider,

Gerisi hala alay ederken 2 ünite / bileşen arasındaki entegrasyon da "entegrasyon testinden geçirilmiş" olabilir. Bu nedenle, pek çok entegrasyon test çerçevesi alay
etmeye

1
Bir Spring konteynerindeki ön ucu (api sözleşmesi) test eden ancak depo / veri katmanını aştıran bir Spring Boot uygulamasında testlerim var. Bu yüzden alaylı depoları / verileri kullanıyor, ancak denetleyici katmanını birleştiriyor ve jackson marshalling, vb. Yapıyor. Bütünleşme testi.
Kevin M

8

Çok az deneyime sahip olduğumda, entegrasyon kelimesinin gerçekten yanlış anlamalara yol açabileceğini anladım: gerçekten, bir sistemde tamamen yalıtılmış bir şey bulmak zor, bazı elementlerin kesin bir entegrasyona ihtiyacı olacak.

Böylece, aşağıdaki ayrımları yapmaya alıştım:

  • Test ettiğim sınıfın başarmasından sorumlu olduğu tüm davranışları tanımlamak, belgelemek ve vurgulamak için birim test kullanıyorum .
  • Sistemimde başka bir " harici " sistemle sohbet eden bir bileşen (belki birden fazla) olduğunda entegrasyon testleri yapıyorum . (aşağıda devam ediyor ...)
  • Sistemin beklediği belirli bir iş akışını tanımlamak, belgelemek ve vurgulamak için bir kabul testi yapıyorum .

Entegrasyon testi tanımında, dışsal anlamda, geliştirme alanım dışında kalan bir sistem kastedildi : Herhangi bir nedenden ötürü hemen davranışlarını değiştiremiyorum. Bir kütüphane olabilir, sistemin değiştirilemeyen bir bileşeni olabilir (örn. Şirketteki diğer projelerle paylaşılır), bir dbms, vb. Bu testler için sistemin gerçek ortamına çok benzer bir şey kurmam gerekiyor. çalışacak: harici bir sistem başlatılmalı ve belirli bir duruma getirilmelidir; gerçekçi veriler db'ye kaydedilmelidir; vb.

Bunun yerine, kabul testini yaparken, sahte şeyler yapıyorum : Farklı bir şey üzerinde çalışıyorum, sistemin özellikleri üzerinde çalışıyorum, dış varlıklar ile işbirliği yapma yeteneği üzerinde değil.

Bu, KeesDijk'in daha önce anlattıklarına kıyasla daha dar bir görüş, ancak şimdiye kadar üzerinde çalıştığım projeler bu basitleştirme seviyesine izin verecek kadar küçüktü.


6

Bir entegrasyon testi , karmaşık bir sistemin bileşenlerinin (örneğin yazılım, uçak, elektrik santrali) tasarlandığı gibi birlikte çalıştığını doğrular.

Bir uçaktan bahsettiğimizi hayal edelim (yazılımla farkı daha soyut ve fark etmesi zor). Entegrasyon testleri şunları doğrular:

  • Bazı bileşenler arasında doğru etkileşim. Örnek: start düğmesine basıldığında motor çalışır ve pervane beklenen dönme hızına ulaşır (uçak hala yerde kalır)
  • dış bileşenlerle doğru etkileşim. Örnek: gömülü radyonun sabit bir telsizle iletişim kurabildiğini kontrol edin (uçak hala yerde)
  • İlgili tüm bileşenler arasındaki doğru etkileşimi, böylece bir bütün olarak sistem beklendiği gibi çalışır. Örnek: Test pilotları ve mühendislerinden oluşan bir ekip uçağı başlatır ve onunla uçar (hepsi paraşüt giyerler ...).

Entegrasyon testi Teknik bir sorunu giderir sistem bileşenlerine onun alt bölümü rağmen çalışır yani o. Yazılımda bileşenler kullanım durumları, modüller, fonksiyonlar, arayüzler, kütüphaneler vb. Olabilir.

Kabul testi ürün amaca uygun olduğunu doğrular. Prensip olarak müşteri tarafından gerçekleştirilirler. Uçak analojisini alarak, şunları doğrulamayı içerir:

  • Öngörülen iş senaryoları, neredeyse gerçek bir durumda beklenen sonuca yol açmaktadır. Örnek: Personelin binişleri çalışma prosedürlerinde beklendiği gibi izleyebildiğini kontrol etmek için test yolcuları ile bir biniş provası. Bazı senaryolar ünite testi gibi görünecek kadar basit olabilir, ancak kullanıcı tarafından gerçekleştirilirler (örn. Elektrik fişlerini firmaların ekipmanıyla deneyin).
  • sistem neredeyse gerçek bir iş durumunda çalışıyor. Örnek: iki gerçek varış noktası arasında boş bir deneme uçuşu yapın, yakıt tüketiminin vaat edildiği gibi olup olmadığını kontrol etmek için havayolundan yeni eğitilmiş pilotlarla.

Kabul testi daha bir sorumluluk sorununu giderir . Bir müşteri / tedarikçi ilişkisinde, sözleşmeye bağlı bir sorumluluk olabilir (tüm gerekliliklere uygun). Ancak, her durumda, görevlerini sistemle sürdürebilmelerini sağlamak ve öngörülmeyen herhangi bir sorunu ihtiyatlı bir şekilde önlemek (örneğin, bazı quaileri kısaltmak zorunda kaldıklarını tespit eden bu demiryolları şirketi gibi) kullanmaktan kullanan kurumun sorumluluğundadır. Yeni vagonlar 5 cm büyüktü - şaka yapılmadı!).

Sonuç: Entegrasyon ve kabul testleri örtüşüyor. Her ikisi de sistemin bir bütün olarak çalıştığını göstermeye niyetli. Ancak “bütün” müşteri için daha büyük olabilir (çünkü sistemin kendisi daha büyük bir organizasyon sisteminin parçası olabilir) ve sistem entegratörü için daha teknik olabilir:

görüntü tanımını buraya girin


1

Entegrasyon testi, iki modül arasında veri akışının bağlantısını ve doğruluğunu kontrol etmekten başka bir şey değildir.

Örneğin: Bir posta (bir modül) oluşturup bazı geçerli kullanıcı kimliğine (ikinci modül) gönderdiğimizde entegrasyon testi, gönderilen postanın gönderilen öğelerde olup olmadığını kontrol etmektir.


3
Programcılara Hoşgeldiniz. Cevabınız, mevcut cevaplar tarafından daha önce sunulmamış olanlara ne ekler? Programcılar.SE geleneksel forumlara benzemez. Çok fazla geveze yerine yüksek kaliteli soru-cevap odaklı. Sitenin nasıl çalıştığı hakkında daha fazla bilgi için lütfen tur sayfasına bakınız.

0

Bir entegrasyon testinin pratik bir tanımı: İşlem dışı bir şeyle etkileşimi gerektiren herhangi bir test.

Örneğin:

  • Dosya sistemi
  • Bir veritabanı
  • Harici bir API

Sürecinizle dış dünya arasında bir çeşit sözleşme mevcut ve asgari olarak bir entegrasyon testinin hedefi olması gerektiğini doğrulamak. yani sözleşmeyi doğrulamaktan daha fazlasını yapmamalıdır. Eğer öyleyse, sistem / uçtan uca boşluğa doğru ilerliyorsunuzdur.

Birim testleri, işlem sınırınızdaki tüm mantığı test edebilir ve yavaş / kırılgan / karmaşık "dış dünya" ya bağımlı olmadığından kesin olarak kolayca yapabilirler .

Entegrasyon testleri varken, bu tanım kapsamaz (bu nedenle neden pratik bir tanım olarak adlandırdım ) daha az yaygın / yararlı olduklarını düşünüyorum.

Not: Açıkça söylemek gerekirse, bu tanım, sistem / uçtan uca testleri de kapsayacaktır. Benim felsefemde, onlar 'aşırı' bir entegrasyon testi şeklidir, bu yüzden isimleri neden başka bir yönü vurgulamaktadır. Diğer bir yönde, bir birim testi sıfır bileşenli bir entegrasyon testi olarak kabul edilebilir, yani tüm testlerin 0-n bileşenler arasında entegrasyonla entegrasyon spektrumunda bir yerde olduğu düşünülebilir. :-)


İki üniteniz varsa, her birini ünite testi ile test edersiniz. Bu iki ünite birbiriyle entegre olduğunda, entegrasyonu bir entegrasyon testi ile test edersiniz. “İşlem dışı” olmaları gerekmez ve bu tür testler son derece yaygındır.
Bryan Oakley

Kesinlikle haklısın - bir entegrasyon testi olmak için işlerin süreç dışında olması gerekmiyor. Bu yüzden cevabımın daha çok "temel bir kural" olduğunu açıklamaya çalıştım (ama belki de başarısız oldu). Birimler arasındaki entegrasyon testlerinin "son derece yaygın" olmasına rağmen katılmıyorum. Süreç dışı entegrasyon testleri benim deneyimimde çok daha yaygın ve sıklıkla çok değerli, bu nedenle cevabım entegrasyon testinin bu yönünü vurgulamaktadır.
Schneider,
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.