Yazılım test ederken bir kullanıcının yazılım üzerinde bu kadar aptalca eylemler gerçekleştirmeyeceğini varsayabilir miyiz?


71

Örneğin: Bir web uygulamasında bir formun işlevsel testlerini gerçekleştirirken, farklı rasgele girdi değerleri girerek alanları test edeceğiz.

Genel olarak, biz web uygulaması kullanıcıları olarak alanlara rastgele değerler girmeyiz.

Öyleyse, bu tür sorunların üretimde ortaya çıkma olasılığı çok az olduğunda, hataya yol açabilecek / açmayacak tüm bu test evrelerini dahil etmenin anlamı nedir?

Not: Yukarıdaki örnek sadece örnek bir durumdur; bu tür sorunlar herhangi bir özellik / modülde ortaya çıkabilir.

Bu soruyu yalnızca standart uygulamaların takip edilip edilmeyeceğini veya tamamen ürüne, etki alanına ve tüm diğer faktörlere bağlı olup olmadığını bilmek istiyorum.


4
Belki ilgili: lehte ve aleyhte olanlar ile maymun testleri
Christophe

Yanıtlar:


190

Bir web uygulamasının alanlarına rastgele değerler girmeyebilirsiniz, ancak kesinlikle orada bunu yapan insanlar var.

Bazı insanlar tesadüfen rastgele giriyor, diğerleri ise kasıtlı olarak uygulamayı kırmaya çalışıyor. Her iki durumda da, uygulamanın çökmesini veya istenmeyen diğer davranışları sergilemesini istemezsiniz.
İlk kullanıcı türü için bunu istemezsiniz, çünkü bu onlara kötü bir deneyim sunar ve onları geri çevirebilir.
İkinci kullanıcı türü için, genellikle onurlu niyetleri yoktur ve gerçek kullanıcıların hizmetlerinize erişimini reddetmelerine izin vermemeleri veya erişememeleri gereken bilgilere erişmelerine izin vermek istemezsiniz.

Test için standart uygulama yalnızca iyi hava koşullarının işe yaradığını değil, aynı zamanda olağandışı durumların potansiyel sorunları bulmak ve saldırganların sisteminize kolayca erişemeyeceğinden emin olmak için araştırıldığını doğrulamaktır. Uygulamanız zaten rasgele girdiyle kilitleniyorsa, bir saldırganın özel hazırlanmış girdiyle neler yapabileceğini bilmek istemezsiniz.


16
Ve sonra bunu yapan insanlar olmayan şeyler var . 👽
kojiro

110
Veya “O'Malley”, “姓名” veya “Robert ” gibi gerçek yasal adlarını girmeye çalışıyor olabilirler ; DROP TABLO Öğrencileri; - ” .
l0b0

90
Veya belki de orijinal şirket isimleri ; DAMLA TABLO "ŞİRKETLER"; - LTD .
Ben

25
Son paragrafın, bir programın klavyeden geçen bir kedinin rastgele girişleriyle çökmesi durumunda , kötü niyetli girişlerle neredeyse kesinlikle çarpışacağını (ve daha da kötüleşeceğini) vurgulayarak daha da güçlenebileceğini düşünüyorum .
phihag

11
Ayrıca, birçok kişi rastgele girdilere girer çünkü gerçek verileri (isimleri, doğum günü vb. Gibi) sağlamak istemezler. Bazıları, bilgisayarın bir görevli kadar akıllı olduğunu ve “2016” yerine “geçen yıl” gibi bir şey yazdığını ve başvurunuzun tıpkı bir insan gibi yapmasını beklediğini varsayabilir.
Luaan

102

Asla bir şey varsayma

Herhangi bir kullanıcının yazılımınızla "aptal" bir şey yapmadığını varsaymak yasaktır. Kullanıcılar yanlışlıkla yanlış düğmeye basabilir, kedi klavyede yürüyebilir, sistem arızalanabilir, bilgisayarları kötü amaçlı yazılımlar tarafından kaçırılabilir.

Ayrıca, kullanıcının kendileri kötü niyetli olabilir, kasıtlı olarak, yazılımın avantajlarından yararlanmanın bir yolunu bulabileceklerini umarak yazılımınızı kırmanın yollarını ararlar. Yararlanamayacakları bir böcek bulsalar bile, buldukları herhangi bir şey, QA prosedürlerinizin eksik olduğunu bilerek, sisteminize saldırabilecekleri bir şeyi araştırmak için onları teşvik edebilir.

Test söz konusu olduğunda, rastgele girdilere karşı korunmak faydalıdır, ancak test girdilerinin tamamen rastgele seçilmesi (yani, herhangi bir kullanım durumu veya kenar durumlarına yönelik özel bir dikkate alınmadan) yararsızdır. Testin amacı, çözümünüzü işvereninizin / müşterilerinizin / kullanıcıların gereksinimlerine ve beklentilerine göre doğrulamak; Bu, kullanıcının beklenen iş akışına uymayan tüm kenar durumlarını ve sınır koşullarını ve ayrıca 'dejenere' durumları hedeflemeye odaklanmanız gerektiği anlamına gelir.

Elbette, daha sonra düzeltmeye değmediğine karar verdiğiniz hataları ortaya çıkaran testler uygulayabilirsiniz; bu her türlü nedenden ötürü olabilir - hata, kullanıcı üzerindeki etkisine bağlı olarak düzeltilemeyecek kadar pahalı olabilir veya kimsenin kullanmadığı özelliklerde hataları keşfedebilirsiniz veya hata sisteme çok iyi bir şekilde yerleştirilmiş olabilir. kullanıcılar bir özellik olarak görüyorlar.

Alternatif olarak, sık sık sınırlı bir 'uzman' kullanıcı kitlesine sahip olan ısmarlama yazılımlar yazıyor olabilirsiniz, bu sayede hataların giderilmesi için ticari bir fayda yoktur, çünkü bu kullanıcılar işlerini buggy yazılımıyla yapabilirler (örneğin, bir tanı aracı dahili BT ekibi tarafından kullanılan herhangi bir gelir sağlamaz, bu nedenle zaman zaman çökerse, o zaman kimse düzeltmek için gereken süreyi ödemek istemez - BT ekibine böceklerle yaşamasını söylerler. .

Ancak, bu kararları ancak bu hataları bildiğiniz takdirde verebilirsiniz. Örneğin, bir kullanıcı tüm veritabanını silen kötü amaçlı bir girdi girebilir - bu senaryoya karşı açıkça korunmamış ve test edilmemişse, bunun gerçekleşip gerçekleşmeyeceğinden emin olmanız mümkün değildir. Keşfedilmemiş böcekleri sistemde bırakma riski, bu böceklerden birinin gerçek dünyada ortaya çıkması ve kullanıcılarınız üzerinde büyük bir etkisi olması durumunda potansiyel olarak kendinizi gerçek sorunlara açık bırakmanız anlamına gelir.

Böylelikle hataları düzeltip düzeltmeme kararı, yazılımın sahibinden bir miktar girdi gerektirebilirken (genellikle maaşınızı kim ödüyorsa), böcek testi yapıp yapmama kararı ve test edilmesi gereken durumlar mühendislik gerektiren bir sorundur. Hedef, zaman / para / kaynaklar üzerindeki kısıtlamalar göz önüne alındığında, hedefin mümkün olduğunca tam kapsamaya yakın bir şey için olması gereken tahminler ve proje planlamasına dahil edilmiştir.


12
Tamamen rastgele test yapmak faydalı olmamakla birlikte, kesinlikle düşündüğünüz kadar fazla sayıda olayı kesin olarak test etmelisiniz, ancak belli bir miktar rastgele belirsizleştirme, önceden görmediğiniz sorunları kontrol etmek için de yararlı olabilir.
Sean Burton,

10
Bir deyişimiz var: "Salak geçirmez bir yazılım yazmak çok zor çünkü salaklar çok zeki insanlar." Yani, "saçma" girişleri için test yapın!
Ralf Kleberhoff,

For example, a user may enter a malicious input which wipes the entire database - if you haven't explicitly protected against and tested for this scenario, then there's no way you can be sure whether or not this can happen.Bu XKCD çizgi romanındaki küçük Bobby Tables gibi mi? ;)
nick012000 17:17

12
"Asla hiçbir şey varsayma." Bunun iyi bir tavsiye olduğunu varsayıyorum.
candied_orange 18:17

Tüm "hataların" "düzeltmeler" olmadığına işaret ettiğiniz için teşekkür ederiz. Bir uç vakanın farkında olmak ve bir uç vakayı sabitlemek için zaman ve para harcamak konusunda büyük bir fark var. Herhangi bir girişin bir web formuna girmesine izin vermek ve tüm durumlar için belirlenmiş bir yanıt almak kesinlikle iyi olacaktır, ancak bu belki de sizin yazılımınızla ilgili olmayabilir. Belki de girişiniz yalnızca ön uçtaki sayılara izin verdiğinden, arka uçtan sayı olmayan numaralar almak imkansızdır. Sayıların sayı biçiminde olmayan potansiyel hata "sadece sabitlenmesi" zaman ve para kaybıdır.
EvSunWoodard

60

Dikkate alınması gereken birkaç faktör var. Bu noktaları göstermek için, görevin ne kadar disk alanı kullanabileceği konusunda, kullanıcının belirli bir görev için tanımlanmış bir kota bağlamında yüzde girmesi gereken bir alan örneği kullanacağım. % 0, görevin diske hiçbir şey yazamayacağı anlamına gelir; % 100, görevin tüm disk alanını doldurabileceği anlamına gelir. Aradaki değerler ne anlama geldiklerini ifade eder.

Bir geliştirici olarak, muhtemelen kabul edilebilir değerlerin [0, 1, 2, 3, ⋯ 99, 100] olduğunu ve diğer her şeyin saçma olduğunu düşünüyorsunuz. Kullanıcıların neden bu “aptal” değerleri girdiğini görelim.

Yazım hataları

%^

Kullanıcı 56 değerini giriyordu, ancak Shiftbunları girerken yanlışlıkla basıldı (örneğin, Fransızca klavyede, Shiftrakam girmek için basmanız gerekir ve kullanıcı sürekli bir Fransızca klavyeyle bir QWERTY arasında geçiş yapıyordu).

Aynı şekilde, ondan önce veya sonra veya arasında bir şey olan bir sayı alabilirsiniz:

56q

Burada, kullanıcı muhtemelen rakamları giriyordu, ardından bir sonraki alana geçmek için bir sekme takip ediyordu. Basmak yerine   ⇆  , kullanıcı komşu tuşa basar.

Yanlış anlamalar ve yanlış yorumlar

Boş bir giriş muhtemelen en yaygın olanıdır. Kullanıcı, alanın isteğe bağlı olduğunu veya bu alana ne koyacağımızı bilmiyordu.

56.5

Kullanıcı kayan nokta değerlerinin kabul edilebilir olduğunu düşünüyordu. Kullanıcı yanlış, uygulama niye kibarca sadece tamsayı değerlerinin kabul edildiğini veya ilk gereksinimlerin yanlış olduğunu açıklamalı ve kullanıcıların kayan nokta değerlerini girmelerine izin vermek mantıklı olmalı.

none

Kullanıcı, görevin alabileceği alan sorulduğunda uygulamanın bir sayı beklediğini yanlış anladı. Bu, zayıf bir kullanıcı arayüzü olduğunu gösteriyor olabilir. Örneğin, kullanıcıya “Görev ne kadar disk alanı kullanmalı?” Sorusunu bu tür girişlere davet ederken, izleyen yüzde işaretli bir alan bu tür girişlerden daha az alır, çünkü “hiçbiri” yapmaz çok mantıklı.

150

Kullanıcı, bu durumda yüzdesinin ne demek olduğunu yanlış anladı. Belki kullanıcı, görevin şu anda kullanılan alanın% 150'sini alabileceğini söylemek istedi, yani 2 TB'lık bir diskte 100 GB kullanılıyorsa, görev 150 GB kullanabilir. Yine, daha iyi bir kullanıcı arayüzü yardımcı olabilir. Örneğin, yüzde işareti eklenmiş çıplak bir giriş alanına sahip olmak yerine, şunlara sahip olabilir:

[____] % of disk space (2 TB)

Kullanıcı yazmaya başladığında, şu anda olması gereken anında metni değiştirir:

[5___] % of disk space (102.4 GB of 2 TB)

Beyanlar

Kayan noktalı büyük sayılar veya sayılar farklı şekilde gösterilebilir. Örneğin, bir numara 1.234,56 böyle yazılmış olabilir: 1,234.56. Kültüre bağlı olarak, aynı sayının metin gösterimi farklı olacaktır. Fransız olarak, aynı sayıda böyle yazılır: 1 234,56. Bakın, beklemeyeceğiniz bir virgül ve bir boşluk.

Belirli bir yerel ayar kullanarak her zaman belirli bir format beklemek er ya da geç başınızı belaya sokar, çünkü farklı ülkelerden gelen kullanıcılar sayı, tarih ve saat gibi farklı yazma alışkanlıklarına sahip olurlar.

İnsanlara karşı bilgisayar

Twenty-four

Sıradan insanlar, bilgisayarlarla aynı şekilde düşünmezler. “Yirmi dört” , bir PC'nin size söyleyeceğinden bağımsız olarak gerçek bir sayıdır.

Her ne kadar (1) çoğu sistem bu tür bir giriş ile başa çıkmasa ve (2) hemen hemen her kullanıcı tam harflerle yazılmış bir sayı girmeyi düşünmese de, bu girişin aptalca olduğu anlamına gelmez. In Yüz 3 Hakkında Alan Cooper böyle girişlerini işleyen bir nokta insanlara uyum sağlamak ve ideal, arayüz doğru bu girdileri işlemek gerekir bilgisayarların yetersizlik göstergesidir yapar.

Alan Cooper'ın kitabına eklemem gereken tek şey, birçok durumda, sayıların yanlışlıkla rakamlarla yazılmasıdır . Bilgisayarların kullanıcılarının hata yapmasını beklemesi (ve doğru yazan bir kullanıcıya tolerans göstermemesi) can sıkıcıdır.

Unicode

5𝟨

Unicode kendi sürprizlerini saklı tutar: aynı görünebilecek karakterler aynı değildir. İkna olmadınız mı? "5𝟨" === "56"Tarayıcınızın geliştirici araçlarına kopyalayıp yapıştırın ve tuşuna basın Enter.

Bu dizginin eşit olmama nedeni, Unicode karakterinin karakterle 𝟨aynı olmamasıdır 6. Bu, öfkeli bir müşterinin arayacağı, uygulamanızın çalışmadığını söyleyen, okunaklı görünen bir girişin ekran görüntüsünü sağlayan ve girişinizin geçersiz olduğunu iddia eden uygulamanızın ortaya çıkacağı bir durum yaratacaktır.

Neden biri rakam gibi görünen bir Unicode karakterine girsin ki, neden sorarsın? Kullanıcının istemeden girmesini beklememize rağmen, farklı bir kaynaktan kopyala yapıştır işlemi buna neden olabilir ve kullanıcının aslında Unicode karakteri içermeyen bir dize gibi bir kopya yapıştırması yaptığı bir durum vardı. ekranda belirir.

Sonuç

Temel numara giriş alanı için aldığınız davalar bunlar. Tarih veya adres gibi daha karmaşık formlar için neler yapabileceğinizi hayal etmenize izin veririm.

Cevabım, "saçma" girdisi olarak adlandırdığınız şeye odaklanır. Test etmek, mutlu yolları kontrol etmekle ilgili değildir; Ayrıca, kötü niyetli bir kullanıcı kasıtlı olarak garip şeylere girdiğinde, kırmaya çalışırken uygulamanın kırılmadığını kontrol etmekle de ilgilidir. Bunun anlamı, yüzde istemeniz durumunda, kullanıcının 1.000.000 karakter içeren bir dize veya negatif sayı veya bir bobby tabloyla yanıt vermesi durumunda ne olacağını test etmeniz gerektiği anlamına gelir .


9
Ah, U + 1D7E8: MATEMATİKSEL SANS-SERIF DİJİT ALTI.
Andreas Rejbrand

23
Diğer unicode karakterleri: Japonca klavyelerde, normal rakamlardan tam basamaklı rakamlara geçmek, bir rakamın kanji kadar geniş olduğu yerlerde çok yaygındır. Bu nedenle, bir Japon kullanıcı (İngilizce yerine) Japonca giriş yapmış ve yanlışlıkla tam genişlikte rakamlar girmiş olabilir.
Ocak

3
Aynı homoglif konuya ilişkin 5𝟨 bölümünüzü görmeden önce, aslında bir sayı bekliyordum 1 234,56(bu sayı işaretleyicilerini kodlamanın doğru yolu olan U + 0020 SPACE yerine U + 00A0 NO-BREAK SPACE kullanarak). NARROW NO-BREAK UZAY, peroahps). Değeri, kullanıcıya sunmadan önce sayıları yerel ayarlara göre biçimlendiren herhangi bir uygulamadan kopyalamak, bunu çok kolay bir şekilde üretir.
Ángel

4
kopya yapıştırmak çok daha büyük bir sorun. Yaygın olarak yapıştırma alanlarını, satır sonlarını, görünmeyen karakterleri kopyalamaktır ...
Sulthan

7
@Arseni Mourzenko Şanslı olmalısın. Örneğin bir PDF'den kopyalamak ve yapıştırmak, çevrelere bağlı olarak istenmeyen karakterleri yapıştırmakla yükümlüdür, örneğin bitişik harfler (fi vb.), Akıllı tırnak işaretleri, en veya ASCII eksi'nin istendiği çizgi vb.
Rosie F

12

Burada, bunun neden önemli olduğunu açıklayan çok sayıda iyi cevap var, ancak başvurunuzu mantıklı bir şekilde nasıl koruyacağınız konusunda çok fazla tavsiye yok. "Standart uygulama", hem istemcide hem de sunucuda sağlam giriş doğrulaması kullanmaktır . Mantıklı olmayan girişlere karşı savunmak kolaydır; bu bağlamda anlam ifade etmeyen her şeyi reddediyorsunuz. Örneğin, bir sosyal güvenlik numarası yalnızca tire ve rakamlardan oluşur; Kullanıcının yazdığı herhangi bir şeyi sosyal güvenlik numarası alanına güvenle reddedebilirsiniz.

Yazdığınız her başvuruda yapılması gereken iki tür test vardır ve bunların her birinin farklı amaçları vardır. Kendi uygulamanızda yaptığınız testler pozitif testlerdir; amacı, programın çalıştığını kanıtlamaktır. Test edicilerinizin uygulamanızda ek olarak yaptıkları testler negatif testlerdir; amacı programınızın işe yaramadığını kanıtlamaktır. buna ne için ihtiyacın var? Çünkü kendi yazılımınızı test edecek en iyi kişi siz değilsiniz. Sonuçta, sen bir şey yazdın, bu yüzden zaten işe yarıyor, değil mi?

Giriş onayını yazdığınızda, onayınızın işe yaradığını kanıtlamak için pozitif testler uygulayacaksınız. Test cihazları, çalışmadığını ispatlamak için rastgele girdileri kullanacak. Rastgele girişler için sorunlu alanın esasen sınırsız olduğuna dikkat edin; Amacınız her olası müsaadeyi test etmek değil, geçersiz girdiyi reddederek sorunlu alanı sınırlamaktır.

Ayrıca, son kullanıcının programınıza giriş sağlayan tek kişi olmadığını unutmayın. Yazdığınız her sınıfın kendi API'si ve geçerli girdi olarak kabul edilen şeyle ilgili kendi sınırlamaları vardır, bu nedenle sınıflarınız için de güçlü doğrulama (yani "kod sözleşmeleri") önemlidir. Buradaki amaç, yazılımınızı sertleştirmektir, böylece beklenmeyen davranışlar mümkün olduğu kadar az bulunur veya bulunmaz.

Son olarak, iş akışı önemlidir. Kullanıcıların duyarlı olmayan bir şey girdiği için değil, uygulamada beklenmedik bir sırayla uygulama yaptıkları için uygulamaları düştüğünü gördüm. Uygulamanız bu olasılığın farkında olmalı ve beklenmedik iş akışlarını dikkatle ele almalı veya kullanıcının işlemleri belirtilen sırada gerçekleştirmesini gerektirmelidir.


Belirli bir sipariş bekleyen bir uygulamanın yaygın bir örneği, hiç ayrılmayan tutamaçları serbest bırakan bir "parçalama" işlevidir.
wizzwizz4

2
Ne yazık ki, standart uygulama mantıklı olmayan herhangi bir şeyi reddetmek ve kullanıcıyı şaşkın ve sinirli bırakmaktır. Doğru uygulama, girişin neden reddedildiğini (örneğin hata mesajlarını / geri bildirimlerini kullanarak) doğru şekilde açıklamaktır, böylece kullanıcı girişlerini nasıl düzelteceğini ve kabul edileceğini bilir. Basit bir "1 - 100 arasında tamsayı", en az 4 farklı hata mesajı gerektirir (boş dize, desteklenmeyen karakter, çok büyük, çok küçük); artı her durumda doğru geri bildirimi sağlamak için test.
Brendan,

2
@Brendan: Sadece bir mesaj gerekli: "Bu 1 ile 100 arasında bir sayı olmalıdır." Kullanıcı bir dizgenin ne olduğunu veya "desteklenmeyen karakterlerin" ne anlama geldiğini bilmez (ve bilmeniz gerekmez) . Bunlar programcının çıkarılması, kullanıcı yardımı değil.
Robert Harvey,

@RobertHarvey Muhtemelen bu açıklamaya "basamaklardan oluşan" satırları boyunca bir şeyler eklerdim. Çünkü "Yetmiş Dokuz" girişi 1 ile 100 arasında bir sayıdır, ancak çoğu programın çalışabileceği bir girdi değildir.
Delioth

1
@Delioth: Aptal düzeltemezsin.
Robert Harvey,

11

Genellikle 'rastgele' değerler rastgele değildir. "Bilinmeyen bilinmeyen" en son vakaları yakalamaya çalışıyorsunuz.

Mesela # karakter sizin için çökecek. Bunu önceden bilmiyorsunuz ve mümkün olan her giriş için test senaryoları yazmak imkansız olacak. Ama bir test yazabiliriz "¬!"£$%^&*()_+-=[]{};'#:@~,./<>?|\"ve kırılıp kırılmadığını görebiliriz.


2
+1 İlk bakışta şaşırtıcı bir şekilde bu rastgele karakterlerin ne sıklıkta hata bulacağı açıktır. Kullanıcı girişindeki veriler birçok bileşen / hizmet üzerinden çok fazla seyahat yapabilir. Sadece zincirindeki bir bileşeni alır değil bir hata olması doğru sistem için işleniyor.
Lan

4
ESP. şimdi mobil klavyelerin hepsinin ifadeleri var
Ewan

Net geliştiricileri için IntelliTest aracı (eski adıyla Pex), son durumları bulmak için kod yolları kullanmak için gerçekten iyi bir yoldur, özellikle girdi doğrulama ve iyi kod kapsamı elde etmek için kullanışlıdır.
James Snell,

7

Bir keresinde, 60 öğrenciyle birlikte laboratuarda yaşadığım testten bir program yazdım. 60 bilgisayar ekranının arkasında durup onları kullandıklarını gördüm. Yaptıkları saçma şeylerin miktarı saç döküyordu. Onların "yaratıcılıklarını" izlerken terden sıkıldım. Her bir bireyin yaşam boyu hayal edebileceğinden çok daha fazlasını yaptılar. Elbette onlardan biri kırdı.

Ondan sonra bir yaklaşımı takip ediyorum: if "a very specific use case" do, else show error

Birkaç kullanım durumum varsa, onları kesinlikle tanımlarım ve yukarıdakileri zincirlerim.


1
Ancak, bu belirli kullanım durumları çok iyi olabilir çok spesifik. Her zaman geçerli girdilerin alanını küçümsüyoruz . (O'Hara, yerel olarak biçimlendirilmiş ondalık sayılar vb.) Negatif faiz oranlarını ele almak için kaç finansal rutin hazırlanmıştır?
Guran

6

Tanımladığınız şey Fuzzing veya Fuzz Testing : sisteme rastgele ve geçersiz girdiler atıp ne olduğunu görün. Bunu yapmazsınız çünkü bir kullanıcının yapmasını beklersiniz. Ne olduğunu görmek için sisteminizin kenarlarını vurgulamak için kendi varsayımlarınızı ve önyargılarınızı göstermek için yaparsınız .

Bir insan tarafından yazılmış normal test girişi, varsayımlar ve önyargılar ile gelecek. Bu önyargılar, test yoluyla asla bulunamayan belirli sınıflar olabilir.

Örneğin, girişinizin çoğu ASCII güvenli Unicode aralığındaysa, koddaki karakter kodlaması ile ilgili varsayımlar uygulanmaz. Ya da belki her zaman belirli bir büyüklüğün altındadır, bu nedenle sabit büyüklükte bir alan ya da arabellek çarpılmaz. Veya belki de, kullanıcı girişinin bir kabuğa beslendiğini veya güvenli olmayan bir şekilde sorgular oluşturmak için kullanılan, şaşırtıcı yollarla yorumlanan özel karakterler vardır. Ya da belki sadece çok fazla "mutlu yol" testi vardır ve hata yönetimi için yeterli girişimde bulunulmaz.

Fuzzing'in girdiyle ilgili önyargıları yoktur. Herhangi bir olası "geçerli" giriş kombinasyonu ile sisteminizi acımasızca kullanacaktır. Unicode, ASCII, büyük, küçük ve çok ve çok sayıda hata. Sisteminiz hepsine incelikle cevap vermelidir. Asla çarpmamalı. Kullanıcı neyin yanlış gittiği ve nasıl düzeltileceği hakkında her zaman mantıklı bir mesaj almalıdır. Çöp Kutusu / Çöp Kutusu değil, Çöp Kutusu / Hatası Çıktı .

Biri, ortaya çıkan patlamaları reddedebilir, çünkü “gerçek kullanıcı bunu yapmaz”, bu egzersizin amacını özlüyor. Fuzzing, olası girdiler hakkındaki önyargılarınızı ortadan kaldırmanın ucuz bir yoludur. Kullanıcıların sisteminizde yapmaya çalıştıkları tuhaf şeyleri atmanın ucuz bir yoludur. Mühendis olarak, işiniz sisteminizin incelikle başarısız olmasını sağlamaktır.


Dahası, "giriş" fuzzing sadece kullanıcılar ile ilgili değil. Bir 3. şahıs servisine yapılan bir API sorgusunun sonucu olabilir, peki ya karışık sonuçlar yollamaya başlarsa? Sisteminiz bununla nasıl başa çıkıyor? Uygun bir sistem, bir bileşene kötü gittiğini bildiren bir yönetici uyarmalıdır. Yanlış bir sistem, hatalı sorguyu sessizce reddeder veya daha kötüsü, iyi veri olarak kabul eder.

Son olarak, bazı kullanıcılar kötü amaçlıdır. Eğer sisteminizi test etmeyi ihmal etmezseniz başkası alır. Sık rastlanan hatalar için sisteminizin kenarlarını arayacaklar ve bunları güvenlik delikleri olarak kullanmaya çalışacaklar. Fuzz testi, bir dereceye kadar bunu simüle edebilir ve sorun olmadan önce keşfedilen olası güvenlik açıklarıyla başa çıkabilirsiniz.


Ve benzer şeyler yapan Hızlı Kontrol test araçları var
icc97

4

Amacınız kaliteli bir ürün oluşturmaksa, kullanıcının fiziksel olarak gönderebileceği her türlü girdiyi test edin. Aksi halde, yalnızca birinin teste ihtiyaç duymadığını düşündüğünüz bir giriş türünü gönderdiği günü bekliyorsunuz.

Çalıştığım yerel bir makamda yeni bir e-açık artırma yazılımının büyük bir gösterimi sırasında yöneticim (kuşkusuz bazı yaramazlıklarla), negatif bir değerde bir açık artırma teklifi verdiğinde ne olduğunu görmesi gerektiğini hissetmeye karar verdiğine karar verdi. Gerçek sürprizime göre, açık artırma yazılımı bu saçma teklifin ve tüm açık artırma sürecinin durmasına izin verdi. Gösterilmekte olan açık artırma türü, negatif miktarların sunulmasına asla izin vermemelidir.

Büyük bir grup toplanmış tedarik ve finans görevlisinden bazıları, saçma bir değer verdikleri için yöneticime rahatsız edildi. Ancak, kendim de dahil olmak üzere diğerleri, böyle bir geçersiz girdi türünü test edip reddetmedikleri için yazılım geliştiricilerine kızdılar. Yazılımın yalnızca diğer geçersiz giriş türlerini (kod enjeksiyon girişimleri, veritabanı tablosunda gösterilemeyen egzotik karakterler, vb.) Saptırmakta ne kadar zayıf olduğunu hayal edebiliyorum.

Bana kalsaydı, yazılımı iade etmiş ve amacına uygun olmadığını düşünmüştüm. Zayıf ve güçlü bir yazılım ürünü arasındaki fark, maruz kaldığı test düzeyidir.


2
test every possible type of input that a user will be physically able to submit.- Bu problem alanı aslında sonsuzdur ve hepsini test etmeye çalışarak zamanınızı boşa harcıyorsunuz. Negatif girişlerin kontrolü tek bir çatallanmadır; bu sadece mantıklı değil, aynı zamanda yetkin geliştiricilerden de beklenen bir durumdur. Böyle bir onaylamanın işe yaradığını kanıtlamak için her olumsuz numarayı kontrol etmeniz gerekmez.
Robert Harvey,

13
Bu yüzden her tür girişi söyledim , mümkün olan her girişi değil. Ve ben noktayı tekrarlayacağım: eğer her tür girişi test etmezseniz, kullanıcılar sonunda sonuç verecektir.
Arkanon

1

Örneğin: Bir web uygulamasında bir formun işlevsel testlerini gerçekleştirirken, farklı rasgele girdi değerleri girerek alanları test edeceğiz.

Evet. Bu bir çeşit test ama işlevsel bir test değil . Buna stres testi denir . Bunu yapıp yapamayacağını görmek için bir sisteme baskı uygulamaktır.

Öyleyse, bu tür sorunların üretimde ortaya çıkma olasılığı çok az olduğunda, hataya yol açabilecek / açmayacak tüm bu test evrelerini dahil etmenin anlamı nedir?

Stres testi yazılımı olduğunda , yazılımın sınırlarının ne olduğunu sınırlamaya çalışın.

Testler doğası gereği ayrıntılıdır. Kullanım sınırlarını keşfetmeniz, noktaları kırmanız, tüm mantıksal dalları kontrol etmeniz veya kısmi arızaların tüm sistemi nasıl etkilediğini görmeniz gereken yerler.

Tüm fonksiyonel testlerinizi geçebilirsiniz, ancak yine de stres testinde başarısız olabilirsiniz .

Bu soruyu yalnızca standart uygulamaların takip edilip edilmeyeceğini veya tamamen ürüne, etki alanına ve tüm diğer faktörlere bağlı olup olmadığını bilmek istiyorum.

Evet, bu standart bir uygulamadır.

Test yazılımı, beklenen davranışla ilgili bir soru sormakla ilgilidir ve tüm testler geçtiğinde bu, yazılımın amaçlandığı şekilde çalıştığını bildirir. Bu nedenle testler, güncellemeleri dağıtırken iyi ön koşullar sağlar.

Stres testi, belirli özel başarılı veya başarısız göstergeler sağlamaz. Sonuçlar daha bilgilendirici. Sisteminizin neler yapabileceğini ve bu bilgilerden kararlar aldığınızı gösterir.

Gelişimdeki bir sonraki aşamaya devam etmek için geçirilmesi gereken stres testi için özel hedefler tanımlayabilirsiniz. Bunlar kalite güvence sürecinizin bir parçası olarak dahil edilebilir, ancak ortamdaki değişiklikler stres testinin sonuçlarını değiştirebilir. Bu yüzden insanlar sistemin değişen koşulları nasıl idare ettiğini görmek için farklı zamanlarda stres testleri uygularlar.

Demek istediğim, yazılımınızın yeni bir sürümünü her çalıştırdığınızda yalnızca stres testi yapamazsınız ve bunun her şeyin daha sonra stres testini geçeceği anlamına geldiğini varsayalım.

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.