Cem Kaner neden bir testin bir hatayı açığa vurmadığını zaman kaybı olarak görüyor?


15

Olumlu testlerde işlevselliği onaylamaya, çalıştığını kanıtlamaya ne dersiniz - zaman kaybı olduğunu söylemeliyim? Bu teklifin arkasında nasıl bir kavram var?

Başarısız testler, yani hata bulamayan testler zaman kaybıdır.

Web Mühendisliği: Cem Kaner'den alıntı yapan Web Uygulamalarının Sistematik Gelişimi Disiplini .


2
Pek sayılmaz. Kaner, testin genel olarak sadece kusurları bulması gerektiğini iddia ediyor.
John V

4
Bu çok akademik bir konum. Bay Kaner ve Bay Schrödinger'in bir ara bir fincan kahve içmek için oturmaları gerekiyor.
Blrfl

2
@Blrfl bununla ilgili tek sorun, Bay Schrödinger'in öldüğü. Oh, bekle ... hmm ...
ikmac

1
Bağlamsız bu ifade delicesine aptalca geliyor ...
Rig

1
“Pozitif testlerde işlevselliği doğrulamak” - Bu temelde imkansız. Sen olamaz sadece yanlış kanıtlayabilirim, doğru bir şey kanıtlamak.
Konrad Rudolph

Yanıtlar:


37

Test Bilgisayar Yazılımlarının çoğunu 25 yıl önce yazdım. O zamandan beri kitabın eski ya da sadece yanlış olduğunu düşündüğüm birkaç bölümüne işaret ettim. Bkz. Http://www.kaner.com/pdfs/TheOngoingRevolution.pdf

Kara Kutu Yazılım Test Kursu (videolar ve slaytlar ücretsiz olarak kullanılabilir) için sitemde daha fazla (mevcut görünümler, ancak TCS'ye açık işaretçiler olmadan) görebilirsiniz, www.testingeducation.org/BBST

O zamanlar test kültürü büyük ölçüde doğrulayıcıydı.

Modern testlerde, birim test yaklaşımı büyük ölçüde doğrulayıcıdır - yazılımın istendiği gibi çalışmaya devam ettiğini doğrulayan büyük otomatik test koleksiyonları yazıyoruz. Testler değişiklik dedektörleri olarak hizmet eder - eğer kodun diğer kısımlarında bir şey varsa ve bu kısımda şimdi problemler varsa veya gerçek dünyada imkansız olan veri değerleri artık uygulamaya ulaşıyorsa, değişiklik dedektörleri tetiklenir ve bir bakım problemi.

Doğrulayıcı zihniyet birim testi için uygun olduğunu düşünüyorum, ancak tüm sistem testlerinin doğrulayıcı olduğu bir dünya hayal edin (ayrım yapan insanlar için lütfen sistem hakkındaki yorumlarımda yer alan "sistem entegrasyon testi" ve "kabul testi" ni yorumlayın Testin amacı, programın özelliklerini karşıladığını doğrulamaktı ve baskın yaklaşım, özelliğin parçalarını programın davranışlarıyla eşleştiren bir milyon (veya en az birkaç yüz) sistem düzeyinde regresyon testi oluşturmaktı. (Bence davranışa uygunluk teyidi yararlıdır, ancak daha büyük bir hedefin küçük bir kısmı olduğunu düşünüyorum.)

Hala bu şekilde çalışan test grupları var, ama artık baskın görüş değil. O zamanlar öyleydi. Kesin bir şekilde yazdım ve bu zihniyette sürekli olarak eğitilen insanlara bir nokta koymak için keskin kontrastlar çizdim. Bugün, bazı keskin kontrastlar (burada alıntılananlar dahil) modası geçmiş. Yanlış görüşlere saldırı olarak yanlış yorumlanıyorlar.

Gördüğüm gibi, yazılım testi, bir yazılım ürünü veya hizmeti hakkında kalite ile ilgili bilgileri öğrenmek için ampirik bir süreçtir.

Yararlı bilgileri ortaya çıkarmak için bir test tasarlanmalıdır.

O zamanlar, bu arada, hiç kimse "bilgi" yi ortaya çıkarmak için bir yöntem olarak testten bahsetmedi. O zamanlar testler, hataların (bazı sürümleri) bulunması ya da programın spesifikasyonlara göre doğrulanması (kontrol edilmesi) içindi. Testlerin yararlı bilgileri ortaya koyma iddiasının bu yüzyıla kadar test kelime dağarcığına geldiğini düşünmüyorum.

Bilgi değerlerine göre derecelendirme testlerini hayal edin. Bize yazılım hakkında bilmediğimiz bir şeyi öğretme olasılığı yüksek olan bir testin çok yüksek bir bilgi değeri olacaktır. Beklediğimiz bir şeyi teyit etme olasılığı yüksek olan ve daha önce defalarca gösterilmiş olan bir test, düşük bir bilgi değerine sahip olacaktır. Testlere öncelik vermenin bir yolu, daha düşük bilgi değeri testlerinden önce daha yüksek bilgi değeri testleri yapmaktır.

Bu önceliklendirmeyi, yazılım testi hakkında clueless olan bir programcı, proje yöneticisi veya süreç yöneticisinin dikkatini çekecek şekilde basitleştirecek olsaydım, "Bir HATAYI GEREKTİRMEK İÇİN TASARLANMAYAN BİR TEST ZAMANIN ZAMANI ." Mükemmel bir çeviri değil, ancak herhangi bir inceliği veya niteliği anlayamayan veya anlayamayan okuyucular için, bu elde edilebilecek kadar yakın.

O zamanlar burada tekrar görüyorum ki, testi anlamayan bazı insanlar, köşe vakalarını bulmak için tasarlanan bir testin, büyük bir fonksiyonun büyük bir kullanım testine kıyasla zaman kaybı olduğunu yanıtlayacaktır. İki şeyi anlamıyorlar. İlk olarak, test kullanıcıları sınır değerlerini kontrol etmek için zaman bulduğunda, ana fonksiyonların ana kullanımları zaten birkaç kez uygulanmıştır. (Evet, istisnalar vardır ve çoğu test grubu bu istisnalara dikkat eder.) İkincisi, aşırı değerlerle test etmenin nedeni, programın aşırı değerlerle başarısız olma olasılığının daha yüksek olmasıdır. Aşırı derecede başarısız olmazsa, başka bir şey test edersiniz. Bu etkili bir kuraldır. Öte yandan, aşırı bir değerde başarısız olursa, test cihazı durup bir hata rapor edebilir veya test cihazı daha fazla sorun giderebilir, daha normal değerlerde programın aynı şekilde başarısız olup olmadığını görmek için. Bu sorun gidermeyi kim yapıyor (test eden veya programlayan) kurum kültürü meselesidir. Bazı şirketler test edenin bunun için zaman ayırmasını sağlarken, bazıları programcıların bütçesini, bazıları ise programcıların genelleştirilebilir olup olmadıklarını ya da sorun gidermenin uygun olmaması için köşe kutusu hatalarını düzeltmelerini bekler. Yaygın yanlış testler - test uzmanlarının aşırı değerleri test ederek (verimliliği en üst düzeye çıkarmak yerine) zaman kaybettiklerinin bir diğer nedeni de "Bir hatayı ortaya çıkarmak için tasarlanmamış bir test zaman kaybıdır" test kullanıcıları için uygun bir mesajdır. Bu, bazı programcıların (aslında) asla programa meydan okuyabilecek testler yapmaya teşvik edilmesinin bir karşılığıdır. İleti aşırı basitleştirildi, ancak tüm tartışma aşırı basitleştirildi.

Bu arada, "bilgi değeri" tek önceliklendirme sistemi olamaz. Birim test takımları tasarlarken benim kuralım değil. İnşa doğrulama testleri (akıl sağlığı kontrolleri olarak da adlandırılır) tasarladığımda bu benim kuralım değil. Her iki durumda da, münferit testlerin gücünden ziyade kapsam türleri ile ilgileniyorum. Bireysel testlerin gücünün tasarımımla alakasız olduğu diğer durumlar (örn. Kurulumu, çalıştırılması ve izlenmesi ucuz olan yüksek hacimli otomatik testler) vardır. Eminim ek örnekler düşünebilirsiniz.

Ancak genel bir kural olarak, sadece bir kuralı belirleyebilseydim (örneğin, başı birden fazla cümleyi işlemeye çalışırsa patlayan bir yöneticiye konuşmak), düşük bir bilgi-değer testinin genellikle zaman kaybı olduğu anlamına gelir.


4
Sen bir soruya cevap için zaman ayırdığınız için 1 için yetkili kaynak, hem de insanları görmek için ... her zaman güzel kullanmak için komik kadar çok insan bana bak dönem "Yapı Doğrulama Testleri" benim kullanımını doğrularken buradaki insanlara yardım etmek için zaman ayırdığınız
Jimmy Hoffa

1
Eric G: Sanırım Cem'i tekrar okursanız, okuyucuların bir parçası olarak konuya ilişkin görüşünün zaman içinde geliştiğini anladığını söyler. Ya da Cem'i yorumlamak için incelik ve nitelikleri devam ettirebilir ve görmezden gelebilirsiniz. (ve "yeterlilikleri" kimlik bilgileri olarak değil, istisnalar olarak alıyorum.)
Jim Holmes

Sözün bana bilimle ilgili gözlemlediğim bir şeyi hatırlatıyor: kişi teori ile tutarlı sonuçlar vermeyi umduğu deneyler yaparak bilimsel bir teoriyi kanıtlayamaz (hatta anlamlı bir şekilde destekleyemez); Bir teoriyi desteklemek için bir yol aygıt deneylere iyi niyetli çaba olduğunu olmaz bunu destekleyecek ama duramayacak bunu.
supercat

@supercat bir teori teori ile tutarlı bir şey için bir test ile destekleyebilir eğer test teori önce size olmazdı (örneğin bir boşlukta düşen bir nesnenin ivmesini göstermek gibi hesaplamak gibi düştüğünü göstermekten daha fazlasını söylüyor). Uç-durum testleri benzerdir; Yazılımın aşırı değerlerle uğraşırken doğru davranmasını bekleyebilirim, ancak bunun bir hata bulma olasılığının yanı sıra geliştirme sırasında muhtemelen gördüğü giriş değerlerini tekrarlamaktan daha kaliteli olduğunu güvence altına alır.
Jon Hanna

@JonHanna: İfadem zayıftı: sorun beklenti değil, çaba. Birisi bir teoriyi geçeceği testleri bulmaya çalışarak kanıtlayamaz ; geçersiz olması halinde başarısız olacağı testleri bulmak için iyi niyetli çaba sarf edilmelidir.
supercat

11

Fikir, Kaner'e göre, "test senaryoları tükenmeden zamanınız tükeneceğinden, mevcut zamanı mümkün olduğunca verimli kullanmak önemlidir."

Sorduğunuz teklifin arkasındaki konsept , " Kanunların Amaçları ve Testleri " bölümünde, Hung Kanoc Nguyen, Jack Kanalk , Cem Kaner tarafından Test Bilgisayar Yazılımı makalesinde ayrıntılı olarak sunulmuştur ve açıklanmıştır :

NEDEN TEST?

Tüm hataları bulamazsınız. Programı doğru bir şekilde kanıtlayamazsınız ve istemezsiniz. Pahalı, sinir bozucu ve popülerlik yarışmaları kazanmıyor. Peki, neden test ettiniz?

PROGRAMIN TEST EDİLMESİNİN AMACI BT'DEKİ SORUNLARI BULMAK

Sorun bulmak işinizin özüdür. Mümkün olduğunca çok şey bulmak istersiniz; sorun ne kadar ciddi olursa, o kadar iyidir.

Test senaryoları bitmeden zamanınız tükeneceğinden, mevcut zamanı mümkün olduğunca verimli kullanmak önemlidir. 7,8,12 ve 13 bölümleri öncelikleri ayrıntılı olarak ele almaktadır. Yol gösterici ilke basitçe şu şekilde ifade edilebilir:


Bir problemi ortaya çıkaran bir test başarıdır. Sorun göstermeyen bir test zaman kaybıdır.


Myers'ın (1979) aşağıdaki benzetmesini düşünün. Diyelim ki seninle ilgili bir sorun var. Bir doktora gidiyorsun. Testler yapması, neyin yanlış olduğunu bulması ve düzeltici eylem önermesi gerekiyordu. Testten sonra testten sonra test yapar. Her şeyin sonunda yanlış bir şey bulamıyor. Harika bir testçi mi yoksa yetersiz bir teşhisçi mi? Gerçekten hastaysanız, o beceriksizdir ve tüm bu pahalı testler zaman, para ve çaba kaybıdır. Yazılımda, tanı uzmanısınız. Program (emin) hasta bir hasta ...


Görüyorsunuz, yukarıdaki nokta, testinize akıllıca öncelik vermeniz gerektiğidir. Testin sınırlı bir süre alması beklenir ve verilen sürede her şeyi test etmek imkansızdır .

Testler yapmak için bir gün (hafta, ay) harcadığınızı, hiçbir hata bulamadığınızı ve bazı hataların geçmesine izin verdiğini düşünün, çünkü bunu ortaya çıkaracak bir testi çalıştırmak için zamanınız yoktu. Bu olursa, bu özlemi haklı göstermek için "bu benim hatam değil çünkü başka testler yapmakla meşguldüm" diyemezsiniz - eğer böyle yaparsanız, yine de sorumlu tutulacaksınız.

Hataları ortaya çıkaran testler yaparak zaman kaybettiniz ve bu nedenle bir hata bulan bir testi kaçırdınız.

(Merak ediyorsanız, yukarıdaki gibi özlemler nasıl denerseniz deneyin genellikle kaçınılmazdır ve bunlarla başa çıkmanın yolları vardır , ancak bu daha ayrı bir soru için bir konu olacaktır ... ve muhtemelen SQA için daha iyi bir uyum olacaktır. SE).


12
Bu cevap pozisyonunu doğru bir şekilde temsil ediyor, ancak birçok insanın pozisyonunun yanlış olduğunu düşündüğüne dikkat çekiyor. Uygulamadaki en önemli işlevi gösteren bir testin doğru çalıştığını (eğer kabul ederseniz kabul testi) ve uygulamanın nadiren kullanılan bir köşesinde önemsiz bir hata (bir piksel ile hizalama) bulan bir test arasındaki seçim göz önüne alındığında, ben sınırlı zamanımda hangisini seçeceğimi biliyorum. Ve doktor benzetmesi için: semptomlara cevap vermek yerine bir CHECKUP İÇİN gidiyorum, kalbin iyi olduğunu onaylamak, akciğerler iyi vb. Bu yüzden orada.
Kate Gregory

@KateGregory Aynı fikirdeyim. Ben onun görüşünü yanlış buluyorum, esas olarak bilgi toplamak için test ediyoruz ..
John V

2
@KateGregory hemfikir - Geçilen herhangi bir testi toplam atık olarak etiketlemenin doğru olduğunu düşünmüyorum. Yine de, yaptığı bir noktanın zamansız olduğunu düşünüyorum : hata sürüm testinden geçerse, QA'nın "oh ama diğer testleri çalıştırmakla meşguldük" . Bunu geçmişte kendim bir testçi olarak yaşadım ve şimdi bir geliştirici olduğumu görüyorum ve hiç kaybolmayacağını sanmıyorum
gnat

4

Bay Caner'ı tanımıyorum, ama IMHO

potansiyel olarak hata bulamayan testler

zaman kaybıdır. Bu, zaten bazı testlerinizin olduğu durumu içerir (otomatik veya sadece bir kontrol listesinde olması önemli değildir) ve zaten sahip olduğunuz durumları doğrulayan yeni testler eklersiniz. Böylece yeni testleriniz mevcut olanlardan daha fazla hata bulamaz.

Böyle bir durum, örneğin, sadece rastgele bir listeden geçerseniz - "beyinsizce" de söyleyebilirim (beni bu kelimeyi affet) - yeni kenar durumu, yeni eşdeğerliği kontrol edip etmediklerini düşünmeden programınızda test vakalarını seçti giriş verilerinizin sınıfları veya zaten yazılan testlerle ilişkili olarak kod kapsamını artırıyorsa.


-1

Bence bu alıntı çok genel veya sapkınlık testlerine atıfta bulunuyor.

E-postaları doğrulayan bir işlev için test yaparsanız ve testte yalnızca geçerli e-postalar sağlarsanız, bu test tamamen işe yaramaz. Bu işlevi "herhangi bir" dize için olası, geçersiz e-postalar, çok uzun e-postalar, unicode karakterler (áêñç ....) için test etmeniz gerekir.

Yalnızca name@dom.com'un true döndürdüğünü ve name @ com'nun false döndürdüğünü kontrol eden bir testi kodlarsanız, bu test hiç bir testle aynı değildir.

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.