Birim testleri ve İşlevsel testler


Yanıtlar:


254

Birim Testi - bir sınıftaki yöntem (işlev) gibi tek bir birimin, tüm bağımlılıklar alay edilerek test edilmesi.

Fonksiyonel Test - AKA Entegrasyon Testi, bir sistemdeki bir dilim işlevselliği test eder. Bu, birçok yöntemi test eder ve Veritabanları veya Web Hizmetleri gibi bağımlılıklarla etkileşime girebilir.


170
"AKA Entegrasyon Testi" ne katılmama izin verin. Bir entegrasyon testi, kodunuzdaki 2 veya daha fazla sistem / alt sistem arasındaki entegrasyonu kontrol eder. Örneğin, bir SQL sorgusunun ORM üzerinden kontrol edilmesi, ORM ve veritabanının birlikte iyi çalıştığını kontrol eder. Fonksiyonel Testler AKA Uçtan Uca IMHO.
graffic

7
@Graffic Functional Test! 'E katılıyorum! = Entegrasyon Testi Sistemin alt bileşenlerinin sürekli durum vb. Gibi birbirleriyle "entegrasyonunu" karıştırmanız gerekir. Ancak genel anlamda Entegrasyon testinin kapsamı daha geniştir.
nabster

4
Hayır, hiçbir şeyle karıştırılmadı.
bpapa

3
Entegrasyon Testi IS-A Fonksiyonel Testi. Ama tam tersi değil. Google "işlevsel ve işlevsel olmayan testleri" yapın ve "Görseller" i kontrol edin.
Andrejs

4
Bu cevap sadece YANLIŞ! Fonksiyonel test entegrasyon testine bile yakın DEĞİLDİR ..
sotn

517

Birim testleri, geliştiriciye kodun işleri doğru yaptığını söyler; fonksiyonel testler geliştiriciye kodun doğru şeyleri yaptığını söyler .

Daha fazla bilgiyi Fonksiyon Testine Karşı Birim Testinde okuyabilirsiniz.


Birim test ve fonksiyonel testin iyi açıklanmış gerçek yaşam benzeşimi aşağıdaki gibi açıklanabilir,

Çoğu zaman bir sistemin gelişimi bir evin inşasına benzetilir. Bu benzetme tam olarak doğru olmasa da, birim ve fonksiyonel testler arasındaki farkı anlamak amacıyla genişletebiliriz.

Ünite testi, bir evin şantiyesini ziyaret eden bir bina müfettişine benzer. Evin çeşitli iç sistemleri, temel, çerçeveleme, elektrik, sıhhi tesisat vb. Evin parçalarının doğru ve güvenli bir şekilde çalışmasını, yani bina kodunu karşılamasını sağlar (test eder).

Bu senaryodaki fonksiyonel testler, aynı şantiyeyi ziyaret eden ev sahibine benzer. İç sistemlerin uygun davranacağını, bina müfettişinin görevini yerine getirdiğini varsayar. Ev sahibi bu evde yaşamanın nasıl olacağına odaklanmıştır. Evin nasıl göründüğü ile ilgileniyor, çeşitli odalar rahat bir boyutta, evin ailenin ihtiyaçlarına uyuyor mu, sabah güneşini yakalamak için iyi bir noktada pencereler.

Ev sahibi evde fonksiyonel testler yapıyor. Kullanıcının perspektifi var.

Bina müfettişi evde birim testleri yapıyor. İnşaatçının perspektifi var.


Özet olarak,

Birim Testleri bir programcı perspektifinden yazılır . Bir sınıfın belirli bir yönteminin (veya birimin ) bir dizi belirli görevi yerine getirmesini sağlamak için yapılırlar .

Fonksiyonel Testler kullanıcının bakış açısından yazılır . Bunlar sistem sağlamak işleyen kullanıcılar için bekliyor gibi.


18
Alıntı konsepti yeni biri için biraz belirsiz.

2
@ fig-gnuton, umarım belirsiz olarak açıklama yapmamaya özen göstermeye çalıştım. Bağlantı içinde iyi bir örnek sağlarlar, eğer OP'ye yardımcı olabileceğini düşünüyorsanız cevabı alıntı ile güncelleyebilirim.
Anthony Forloney

148
Belki de bunu söylemenin başka bir yolu, "Birim testi kodun programcının istediğini yaptığını, Fonksiyonel testler programcının müşterinin istediğini yaptığını doğruladığını" söyleyebilir.
JS.

3
Bunu beğendim ama ayarlayacağım. Bir Fonksiyonel Testi emin uygulama kullanıcının bir eylemi gerçekleştirmek için izin verir hale getirir. Bir Birim Test emin nasıl kod davranır programcı beklediği yapar.
Adam

2
Programcının istediği son kullanıcının istediklerine uymuyor mu? Neden müşterinin beklediğini karşılamayan bir test yazmalıyım?
O.Badr

140
  • Birim testi bağımsız bir davranış birimini test eder . Davranış birimi nedir? Sistemin bağımsız olarak birim testine tabi tutulabilen en küçük parçasıdır. (Bu tanım gerçekten bir tanım değil, IOW aslında daire şeklinde hiç ama pratikte oldukça iyi iş gibi görünüyor, çünkü sıralama-sezgisel anlamak can.)

  • İşlevsel bir test, bağımsız bir işlev parçasını test eder.


  • Bir davranış birimi çok küçük: Ben bu aptal "yöntem başına bir birim test" mantrasından kesinlikle hoşlanmıyorum, boyut açısından bakıldığında doğru. Bir davranış birimi, bir yöntemin bir parçası ile belki de birkaç yöntem arasında bir şeydir. En fazla bir nesne, ancak birden fazla değil.

  • Bir işlevsellik parçası genellikle birçok yöntem içerir ve çeşitli nesneler arasında ve genellikle birden çok mimari katman boyunca keser.


  • Bir birim testi şöyle bir şey olurdu: Ben validate_country_code()fonksiyonu çağırmak ve ülke kodunu geçmek zaman 'ZZ'dönmelidir false.

  • İşlevsel bir test: gönderim formunu ülke koduyla doldurduğumda ZZ, ülke kodumu bir menüden seçmeme izin veren bir yardım sayfasına yönlendirilmeliyim.


  • Birim testleri geliştiriciler tarafından geliştiriciler için geliştiricinin bakış açısından yazılır.

  • İşlevsel testler kullanıcı tarafından karşılanabilir, bu durumda geliştiriciler tarafından kullanıcılar ile birlikte (veya belki de doğru araçlar ve hatta kullanıcılar tarafından bile doğru kullanıcılar ile) kullanıcılar için kullanıcının bakış açısından yazılırlar. Veya geliştirici ile karşı karşıya olabilirler (örneğin, kullanıcının umursamadığı bir iç işlevsellik parçasını tanımladıklarında), bu durumda geliştiriciler tarafından geliştiriciler için yazılır, ancak yine de kullanıcının bakış açısından.


  • İlk durumda, fonksiyonel testler aynı zamanda kabul testleri olarak ve fonksiyonel gereksinimlerin ya da işlevsel bir spesifikasyonun yürütülebilir bir kodlaması olarak kullanılabilir, ikinci durumda, entegrasyon testleri olarak da işlev görebilirler.

  • Birim testleri sık sık değişir, fonksiyonel testler büyük bir sürümde asla değişmemelidir.



mükemmel cevap! bir şey - "fonksiyonel testler asla büyük bir sürümde değişmemelidir" neden bu?
Lazer

5
@Lazer, @cdeszaq: Birçok projede, ana sürüm sayısında bir değişiklik ana sürüm yoksa geriye doğru uyumsuzluğu ve OTOH belirtmek için kullanılır değil değişim, geriye doğru uyumluluk olduğu garanti . "Geriye dönük uyumluluk" ne anlama geliyor? "Kullanıcı tarafından görülebilir davranışı değiştirmez" anlamına gelir. Ve fonksiyonel testler, kullanıcının görebileceği davranışın spesifikasyonunun yürütülebilir bir kodlamasıdır. Büyük sayı değişmez Yani, daha sonra fonksiyonel testler değişim ya ve fonksiyonel tets eğer tersine, izin verilmez yapmak değişikliği, daha sonra büyük sayı olmalıdır de değişir.
Jörg W Mittag

2
Not: Fonksiyonel testler ekleme hakkında bir şey söylemedim ! Daha önce orada olmayan işlevsellik eklemenin, geriye dönük olarak uyumsuz bir değişiklik oluşturup oluşturmadığı, projeye bağlıdır. Son kullanıcı yazılımı için, muhtemelen değil. Ama bir programlama dili için mi? Belki: yeni bir anahtar kelime eklemek, o anahtar kelimeyi değişken adı olarak kullanan şu anda çalışan programları geçersiz kılar ve bu nedenle geriye dönük olarak uyumsuz bir değişikliktir.
Jörg W Mittag

3
@ JörgWMittag şu fikre bayılıyor: 'fonksiyonel testler, kullanıcının görebileceği davranışın şartnamesinin yürütülebilir bir kodlamasıdır' ... diğer süper uzmanların gerçekten katılıp katılmadığı, orijinal soru ile bana yardımcı olur, 'em "
mike kemirgen

1
"İşlevsel bir test: gönderim formunu ZZ ülke koduyla doldurduğumda, ülke kodumu bir menüden seçmeme olanak tanıyan bir yardım sayfasına yönlendirilmem gerekir." Bu bir tür nit-seçici, ama buna "kabul testi" diyebilirim. İşlevsel test, gönderim formuna ZZ girmenin kullanıcıyı doğru URL'ye yönlendirdiğini veya belirli bir istisna veya hata attığını test eder.
Bob Ray

98

TLDR:

Soruyu cevaplamak için: Birim Testi , İşlevsel Testin bir alt türüdür .


İki büyük grup vardır: Fonksiyonel ve Fonksiyonel Olmayan Test. Bulduğum en iyi (kapsamlı olmayan) örnek bu (kaynak: www.inflectra.com ):

resim açıklamasını buraya girin

(1) Birim Testi: Küçük kod snippet'lerinin testi (işlevler / yöntemler). (Beyaz kutu) fonksiyonel test olarak düşünülebilir.

İşlevler bir araya getirildiğinde, muhtemelen test edilebilecek bir Kullanıcı Arayüzü ile bir modül = bağımsız bir parça oluşturursunuz (Modül Testi). En az iki ayrı modülünüz olduğunda, bunları birbirine yapıştırırsınız ve sonra gelir:

(2) Entegrasyon Testi: İki veya daha fazla (alt) modül veya (alt) sistem parçasını bir araya getirip birlikte güzel oynadıklarını görün.

Daha sonra 3. modülü entegre edersiniz, ardından 4. ve 5. modları sizin veya ekibinizin uygun gördüğü sırayla birleştirirsiniz ve tüm yapboz parçaları bir araya getirildiğinde gelir

(3) Sistem Testi: SW'yi bir bütün olarak test etmek. Bu hemen hemen " Tüm parçaların entegrasyon testi " dir.

Bu uygunsa, o zaman gelir

(4) Kabul Testi: Müşterinin gerçekten istediğini oluşturduk mu? Tabii ki, Kabul Testi sadece müşterinin bir spor araba istediğini ve bir minibüs inşa ettiğinizi fark ettiğiniz son aşamada değil , yaşam döngüsü boyunca yapılmalıdır .

resim açıklamasını buraya girin


2
Google'da, "Birim testi" ni bir tür "İşlevsel test" olarak tanımlayan birçok resim gördüm. Peki neden buradaki diğer cevaplar kesinlikle farklı bir kavram tanımlamaktadır: "İşlevsel test" uçtan uca testtir ve birim test fonksiyonel bir test değildir ? Kafam karıştı. "İşlevsel test" terimini farklı şekilde tanımlayan iki farklı "din" vardır ya da ne?
Ruslan Stelmachenko

Cevaplar (yüksek oranda oylananlar bile) yanlış olabilir;)
Andrejs

1
Resmi beğendim, ancak Sistem Entegrasyon Testi için bulmacanın, diğer parçaların bağlanacağı daha fazla yer olmadan "eksiksiz" görünmesi gerekir.
Jonathon Reinhart

4
@JonathonReinhart - illa ki değil. Açık kenarlar, özellikle Agile gibi bir geliştirme yaklaşımı kullanıldığında yararlı olan yeni özelliklerle sistemin kolay genişletilebilirliğini temsil edebilir.
Myles

Yukarıdaki birden fazla çelişkili cevaptan, açık Functional Testbir şekilde standart bir terim değildir ve farklı insanlar için farklı anlamları vardır.
Penghe Geng

12

"İşlevsel test", kodunuzda bir işlevi (yöntemi) test ettiğiniz anlamına gelmez. Bu, genel olarak, sistem işlevselliğini test ettiğiniz anlamına gelir - çalıştırdığımdafoo file.txt komut satırında çalıştığımda file.txt, belki de satırlar tersine çevrilir. Buna karşılık, tek bir ünite testi genellikle tek bir yöntemin tek bir vakasını kapsar - length("hello")5 döndürmeli ve length("hi")2 döndürmelidir.

Ayrıca bkz. IBM'in birim test ve işlevsel test arasındaki çizgiyi ele alması .


İlginç, ancak gösterdiğiniz bağlantı farklı bir şey anlamına gelir: fonksiyonel, uygulama boyunca gerçekleştirilecek işlevle ilgilidir, yani kullanıcı açısından test etmek, bu kullanıcı için bir işlevdir.
Stefano Scarpanti

8

Temel ayrım, fonksiyonel testlerin uygulamayı dışarıdan kullanıcı açısından test etmesidir. Birim testleri uygulamayı içeriden, programcının bakış açısından test eder. İşlevsel testler, doğru işlevlere sahip bir uygulama oluşturmanıza yardımcı olmalı ve yanlışlıkla yanlışlıkla kırmamanızı garanti etmelidir. Birim testleri, temiz ve hatasız kod yazmanıza yardımcı olmalıdır.

Harry Percival'ın "Python TDD" kitabından alınmıştır


8

ISTQB'ye göre bu ikisi karşılaştırılamaz. Fonksiyonel test, entegrasyon testi değildir.

Birim testi, test düzeylerinden biridir ve fonksiyonel test, test türüdür.

Temelde:

Bir sistemin (veya bileşenin) işlevi 'ne yaptığıdır'. Bu tipik olarak bir gereksinim spesifikasyonunda, fonksiyonel bir spesifikasyonda veya kullanım durumlarında tarif edilir.

süre

Birim, modül ve program testi olarak da bilinen bileşen testi, ayrıca test edilebilen yazılımın (örn. Modüller, programlar, nesneler, sınıflar, vb.) Hatalarını arar ve çalıştığını doğrular.

ISTQB bileşen / birim testine göre fonksiyonel veya fonksiyonel olmayabilir:

Bileşen testi, işlevselliğin ve kaynak davranışı (örneğin bellek sızıntıları), performans veya sağlamlık testi gibi yapısal olmayan özelliklerin yanı sıra yapısal testlerin (örn. Karar kapsamı) test edilmesini içerebilir.

Yazılım testinin temellerinden alıntılar - ISTQB sertifikası


Çok fazla kabartmak konusunda hemfikirim, ama yine de oradaki en büyük oyuncu ve bu soru teori ile ilgiliydi, bu yüzden ISTQB'nin yeterince iyi olması gerektiğini düşünüyorum.
Dominik

6

Rails'te, birim klasörünün modelleriniz için testler yapması, fonksiyonel klasörün ise denetleyicileriniz için testler yapması ve entegrasyon klasörünün, herhangi bir sayıda etkileşimde bulunan denetleyiciyi içeren testleri tutması amaçlanmıştır. Fikstür, test verilerini düzenlemenin bir yoludur; demirbaşlar klasöründe bulunurlar. Test_helper.rb dosyası, testleriniz için varsayılan yapılandırmayı içerir. u ziyaret edebilir bu .


3

Ben böyle düşünüyorum: Bir birim testi kod yapmak istediğiniz şeyi yaptığını (örneğin a ve b parametresi eklemek istedim, aslında onları eklemek ve çıkarma yok), fonksiyonel testler, tüm kodların doğru bir sonuç almak için birlikte çalıştığını test eder, böylece kodun aslında yapmasını istediğiniz şey sistemde doğru sonucu alır.


3

AFAIK, birim testi fonksiyonel test DEĞİLDİR. Küçük bir örnekle açıklayayım. Bir e-posta web uygulamasının oturum açma işlevinin, bir kullanıcının yaptığı gibi çalışıp çalışmadığını test etmek istersiniz. Bunun için fonksiyonel testleriniz böyle olmalıdır.

1- existing email, wrong password -> login page should show error "wrong password"!
2- non-existing email, any password -> login page should show error "no such email".
3- existing email, right password -> user should be taken to his inbox page.
4- no @symbol in email, right password -> login page should say "errors in form, please fix them!" 

İşlevsel testlerimiz geçersiz girişlerle giriş yapıp yapamayacağımızı kontrol etmeli mi? Örneğin. E-postada @ simgesi yok, kullanıcı adında birden fazla nokta var (yalnızca bir noktaya izin verilir), @ vb. Genellikle hayır! Bu tür testler birim testlerinize girer.

Aşağıdaki testlerde gösterildiği gibi, birim girişlerin içinde geçersiz girişlerin reddedilip reddedilmediğini kontrol edebilirsiniz.

class LoginInputsValidator
  method validate_inputs_values(email, password)
    1-If email is not like string.string@myapp.com, then throw error.
    2-If email contains abusive words, then throw error.
    3-If password is less than 10 chars, throw error.

İşlevsel test 4'ün aslında birim test 1'in yaptığı şeyi yaptığına dikkat edin. Bazen, fonksiyonel testler, birim testlerle yapılan testlerin bazılarını (hepsi değil) farklı nedenlerle tekrarlayabilir. Örneğimizde, geçersiz giriş girerken belirli bir hata mesajının görünüp görünmediğini kontrol etmek için fonksiyonel test 4'ü kullanıyoruz . Tüm kötü girişlerin reddedilip reddedilmediğini test etmek istemiyoruz. Birim testlerin işi budur.


1
İşlevsel test hakkında genellikle birim testten çok daha dar bir kapsama sahip olan iyi bir nokta (fonksiyonel testin esasen beklenen işleve ulaşıldığını kanıtlamaya odaklanması açısından), ancak farklı boyutları ( birim testlerde kompozisyon ) tanımladıklarını söyleyebilirim v amacı fonksiyonel testler); bazı birim testleri işlevsel testlerdir ve bazı fonksiyonel testler birim testlerdir, ancak aynı zamanda üst üste gelmeyen çok sayıda Venn de vardır.
Myles

Fonksiyonel testler için neyin dahil ve neyin kapsam dışı olduğuna dair iyi örnekler.
Myles

2

BİRİM TESTİ

Birim testi, genellikle işlevler veya yöntemler olan en küçük kod biriminin test edilmesini içerir. Birim testi çoğunlukla birim / yöntem / işlev geliştiricisi tarafından yapılır, çünkü bir işlevin özünü anlarlar. Geliştiricinin temel amacı kodları birim testlerle kapsamaktır.

Bazı fonksiyonların birim testlerle test edilememesi sınırlıdır. Tüm birim testlerinin başarıyla tamamlanmasından sonra bile; ürünün doğru çalışacağını garanti etmez. Ünite testi yalnızca bir kullanım için yazılırken aynı işlev sistemin birkaç bölümünde kullanılabilir.

FONKSİYONEL TEST

Koda bakmadan bir ürünün fonksiyonel yönleri üzerinde testlerin yapılacağı bir Kara Kutu testi türüdür. Fonksiyonel testler çoğunlukla özel bir Yazılım test cihazı tarafından yapılır. Ürünün belirtilen işlevselliğini test etmek için standartlaştırılmamış veriler kullanan pozitif, negatif ve BVA tekniklerini içerecektir. Test kapsamı, fonksiyonel testlerle birim testlerden daha iyi bir şekilde gerçekleştirilir. Test için uygulama GUI'sini kullanır, bu nedenle bir kodun hangi işlevden sorumlu olduğunu belirlemek yerine arayüzün belirli bir bölümünün tam olarak neyin sorumlu olduğunu belirlemek daha kolaydır.



1

Ünite testi : - Birim testi, özellikle ürün geliştirilirken ürün bileşenini bileşene göre test etmek için kullanılır. Junit ve Nunit tipi aletler de ürünü Üniteye göre test etmenize yardımcı olacaktır. ** Entegrasyon sonrası sorunları çözmek yerine, geliştirme sürecinin başlarında çözülmesi her zaman rahattır.

Fonksiyonel Test: - Test söz konusu olduğunda, 1.Fonksiyonel Test 2.Fonksiyonel Test olarak iki ana Test türü vardır.

Fonksiyonel Olmayan Test, Test Cihazının ürünün müşterinin bahsetmediği tüm kalite niteliklerini yerine getireceğini test edeceği bir testtir, ancak bu kalite nitelikleri orada olmalıdır. Gibi: -Performans, Kullanılabilirlik, Güvenlik, Yük, Stres vb.Ama Fonksiyonel Test : - Müşteri zaten gereksinimleri ile mevcut ve bunlar düzgün bir şekilde belgelenmiştir, test görevlisi Uygulama İşlevselliğinin uygun olup olmadığını çapraz kontrol etmektir. Teklif Edilen Sistem ile ilgili. Bu amaçla Test Cihazı, önerilen Sistem ile Uygulanan işlevselliği test etmelidir.


0

Birim testi genellikle geliştiriciler tarafından yapılır. Aynı şeyi yapmanın amacı, kodlarının düzgün çalıştığından emin olmaktır. Genel kural, birim testini kullanarak koddaki tüm yolları kapsamaktır.

Fonksiyonel Test : Bu iyi bir referanstır. Fonksiyonel Test Açıklaması


6
Lütfen en önemli metni cevabınıza yapıştırın, sayfanın ne zaman kaldırılabileceğini asla bilemezsiniz.
Andrejs
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.