Hata ayıklama ve test arasındaki fark nedir?


11

Yazılım Testine Giriş (Ammann & Offutt) s.32 5 seviyeli bir test olgunluk modelinde bahseder:

Seviye 0 Test ve hata ayıklama arasında fark yoktur.

Seviye 1 Testin amacı yazılımın çalıştığını göstermektir.

Seviye 2 Testin amacı yazılımın çalışmadığını göstermektir.

Seviye 3 Testin amacı belirli bir şeyi kanıtlamak değil, yazılımı kullanma riskini azaltmaktır.

Seviye 4 Test, tüm BT profesyonellerinin daha kaliteli yazılım geliştirmesine yardımcı olan zihinsel bir disiplindir.

Her ne kadar daha fazla ayrıntıya girmeseler de. Hata ayıklama ve test arasındaki farklar nelerdir?


1
Vikipedi'nin Hata Ayıklama sayfasının hangi bölümü sizi şaşırttı? tr.wikipedia.org/wiki/Debugging Lütfen kafa karıştırıcı bulduğunuz belirli ifadeleri veya alıntıları gönderin.
S.Lott

4
Bir programcının testi geçirdiği ortalama süre: 10 dakika. Bir programcının test etmesi gereken bir şeyi hata ayıklamak için harcadığı ortalama süre: 2.5 saat.
Craige

1
Tüm mağazaların% 80'inin hiç çalışma testi olmadığında testin resmileştirilmesi gerçekten gerekli mi?
İş

@Craige: Test genellikle 10 dakikadan fazla sürer. Hata ayıklama için harcanan toplam süreden daha uzun sürebilir. Bununla birlikte, test için harcanan zaman proaktiftir (testlerin sadece birkaç yüzdesi kusurları ortaya çıkarsa bile kapsamlı kapsam elde etmek), hata ayıklamaya harcanan zaman reaktiftir (kusur, programcıya en rahatsız edici zamanda atlar ve hatadan kurtulmak için baskı altında ve düzeltmenin bir parçası olarak ek hatalar ekleyerek sona erer.)
rwong

Yanıtlar:


21

Test, koddaki hataları veya farklı bir açıdan, programın yapması gereken şeyi yaptığını uygun bir seviyeye (asla% 100 olamaz) kanıtlamak içindir. Manuel veya otomatik olabilir ve birim, entegrasyon, sistem / kabul, stres, yük, ıslatma vb. Testler gibi birçok farklı çeşidi vardır.

Hata ayıklama, programdan belirli bir hatayı bulma ve kaldırma işlemidir. Tüm hatalar farklı olduğu için her zaman manuel, tek seferlik bir işlemdir.

Benim tahminim yazarın, Seviye 0'da, testin gerçekten test edilen özelliği iyice test etmesini sağlamak için bir test planı veya herhangi bir şey olmadan, sadece manuel olarak, geçici bir şekilde yapıldığı ve testlerin yapılabileceği anlamına gelir. güvenilir bir şekilde tekrarlanır.


Bu bağlamda bir hatanın, programın yapması amaçlanan ile gerçekte ne yaptığı arasındaki fark olduğunu unutmayın.

1
Bu "Test" bir Birim Testi anlayışımdır. Hata ayıklama, özellikle de kendi kodunuzsa, deneme yanılma yöntemidir.
ott--

4

Hata ayıklama, ilgili, yapılandırılmamış ve güvenilir olmayan adım adım manuel bir işlemdir. Hata ayıklama yoluyla test ederek tekrarlanamayan senaryolar oluşturursunuz, bu nedenle regresyon testi için işe yaramaz. 0 dışındaki tüm düzeyler (örneğin), bu nedenle hata ayıklamayı hariç tutuyor.


Saff sıkıştırın çok, çok güvenilir değildir, özellikle yer ve muhtemelen en azından kısmen otomatikleştirilebilir yapılandırılmış bir hata giderme yöntemidir. Bunu, aslında, test ile hata ayıklama arasında hiçbir fark olmadığını fark ederek başarır .
Jörg W Mittag

Hata ayıklama "yapılandırılmamış, güvenilmez ve manuel" ise, doğru yapmıyorsunuz! Veya açıkça bu iki kelimeyi farklı şeyler ifade etmek için kullanıyoruz.
MemeDeveloper

3

Hata ayıklama, yöntemsel olarak kodun üzerinden geçerek bilinen ve bilinmeyen sorunları gidermeye yönelik bir girişimdir. Hata ayıklama yaparken, genellikle bir bütün olarak koda odaklanmazsınız ve neredeyse her zaman arka uçta, gerçek kodda çalışırsınız.

Test, daha sonra hata ayıklanabilecek kodu kullanmanın çeşitli yollarıyla bir sorun yaratma girişimidir. Neredeyse her zaman kodu son kullanıcının çalıştıracağı şekilde çalıştırdığınız ve kırmaya çalıştığı kullanıcı alanında yapılır.


1
Katılıyorum ve sadece insanların otomatik test ve TDD koymak eğilimi vurgulamak için "son kullanıcı çalıştırır gibi kodunu çalıştırmak" hakkında fikrinizi vurgulamak istiyorum. Özellikle web tabanlı uygulamalar için - daha bilgilendirici, kod test kodu veya web sayfalarını test eden kişiler nedir?
MemeDeveloper

2

Basit bir ifadeyle, programınız, yürütme sırasında olması gerektiği gibi davranmadığında bir "hata" oluştuğu söylenir. Yani beklenen çıktıyı veya sonuçları üretmez. Bu hatanın kaynağını bulma, davranışı düzeltmenin yollarını bulma ve sorunu düzeltmek için kodda veya yapılandırmada değişiklik yapma girişimleri hata ayıklama olarak adlandırılabilir.

Test, programın veya kodun farklı koşullar altında doğru ve sağlam bir şekilde çalıştığından emin olduğunuz yerdir: Girişler, standart doğru girişler, bilerek yanlış girişler, sınır değerleri, değişen ortam (OS, yapılandırma dosyası) sağlayarak kodunuzu "test edersiniz" . Temel olarak, hataları keşfetmeye çalıştığınızı ve sonunda test sürecinde "hata ayıkladığınızı" söyleyebiliriz. Umarım yardımcı olur.


1

Hiç yok. Doğru yaparsanız:

Hit 'em High, Hit' em Low :

Regresyon Testi ve Saf Sıkma

Kent Beck, Three Rivers Enstitüsü

Özet: Bir arızayı etkin bir şekilde izole etmek için, sistem düzeyinde bir testle başlayın ve arızayı gösteren mümkün olan en küçük teste ulaşıncaya kadar aşamalı olarak satır içi ve budama yapın.


Örneğin, Smalltalk gibi bazı sistemlerde hiçbir fark yoktur, çünkü yazma testi / çalıştırma testi / yazma kodu çevriminizi tamamen hata ayıklayıcının içinde gerçekleştirebilirsiniz.
Frank Shearar

@FrankShearar: Yukarıdaki yazının eski bir Smalltalker tarafından yazılması muhtemelen tesadüf değildir. TDD döngüsü (tabii ki Kent Beck tarafından da) temelde Smalltalk kodunun zamanın başlangıcından beri nasıl yazıldığının bir açıklamasıdır: çalışma alanına bir örnek kod yazın, hata ayıklayıcının yöntem istisnasını yakalamamasına izin verin, oluştur'a tıklayın yöntemi , kodu yazın, yürütmeyi sürdür (devam edilebilir istisnalar için yay!), tekrarlayın.
Jörg W Mittag

1

Test, müşteriye salıvermeden önce hoşlandığınız bir ayrıcalıktır.

Hatalar, müşteriye bıraktıktan sonra katlandığınız bir kabus.


haha. En gerçekçi / pratik yanıt ... eğer oy kullanabilseydim x 100.
MemeDeveloper

1

Diğerleri, test ve hata ayıklama arasındaki farkların neler olduğunu belirtti .

Ortak bir noktaya vurgu yapmak istiyorum . Bir test cihazı bir kusur bulduğunda, izole edilmelidir. Hata ayıklama, uygulama durumunu ve çalışma zamanında kodunu analiz ederek sorunu yalıtmak ve kök nedenleri bulmak için kullanılan tekniklerden biridir . Aslında, hata ayıklama Oxford Sözlükleri tarafından " bilgisayar donanımı veya yazılımındaki hataları tanımlama ve kaldırma işlemi" olarak tanımlanır .

İster bir test cihazı ister geliştirici olsun, bir kusuru kim izole edecek (veya özellikle hata ayıklayacak) ikincil bir sorudur.


0

Listelediğiniz test olgunluğu modeli, geliştirme ekibinin zihniyetinin tanımlarıdır.

Listenin açıkça ifade etmediği, zihniyetteki değişimin testin yapılma şeklini nasıl etkilediğidir.

Bir geliştirme ekibi bir sonraki seviyeye ilerledikçe, testin kapsamı genişletilir.

Seviye 0'da test yapılmaz, çünkü takım gerekli olmadığını düşünür.

Seviye 1'de, temel işlevlerin nominal bir kapsamını sağlamak için test yapılır.

Seviye 2'de, test Seviye 1'deki her şeyi içerecek şekilde genişletilir ve yıkıcı testlere eklenir (kaynak kodu ve ikili dosyalar dahil olmak üzere geliştiricilerin erişebildiği tüm bilgilere erişimi olan özel bir test ekibi ve olabilecek hataları bulmaya çalışır) bir kullanıcı rolünden tetiklenir)

Seviye 3'te Seviye 1-2'deki her şeye ek olarak fonksiyonel olmayan tabanlı test / doğruluk tabanlı olmayan test (performans özellikleri gibi) eklenir.

Seviye 4'te, yazılım testinin amaçları, müşteriye dönük BT personeli de dahil olmak üzere herkes tarafından iyi anlaşılmıştır. Böylece, BT personeli hangi senaryoların test edileceği hakkında geri bildirimde bulunarak Seviye 4'ün risk kapsamını geliştirebilecektir.

(Feragatname: Ders kitabına erişimim yok, bu nedenle terminolojim yanlış olabilir.)


0

Hatalar görünür hatalardır. Hata ayıklama, test senaryosu tasarımından sonra başlatılan işlemdir. Testten daha zor bir iştir, çünkü hata ayıklama işleminde hatanın kaynağını bulmamız ve kaldırmamız gerekir, bu nedenle bazen hata ayıklama kullanıcıyı hayal kırıklığına uğratır.


0

Günlük, pratik terimlerle konuşmak gerekirse, tamamen bağlama bağlı olduğunu düşünüyorum .

Med-büyük bir ekipte, yüksek / çok yüksek standartlarda (bankacılık, askeri, büyük ölçekli, yüksek bütçeli veya iş açısından kritik sistemleri düşünün) çalışmak, o zaman açıkça "hata ayıklama" nın "testin bir sonucu" olması gerektiğini düşünüyorum ve bunlar açıkça çok farklı şeyler . İdeal olarak test, hata ayıklamaya (bir hazırlama ortamında) yol açar ve üretimde ikisinden birine sıfır gerekir.

Test kapsamı geniştir, düzenli ve çok resmidir - hata ayıklama, belirli bir arızayı düzeltmeye ihtiyaç duyulduğunda zaman zaman meydana gelen belirli bir süreçtir - bu açık değildir ve bir sistemin işleyişi ve sonuç çıktılarının daha derin bir incelemesini gerektirir.

Burada aklımda test yapmak önemli bir şeyken, hata ayıklama sadece bir başarısızlığın çözümü opak olduğunda gerekli olan özel bir araçtır.

Büyük ekipler ve / veya sistemler için TDD'deki bariz faydayı "buggy" olarak karşılayamayacağından tamamen anlıyorum . Ayrıca, karmaşık (genellikle "arka uç") sistemler için veya kodda çıktıya kıyasla yüksek oranda karmaşıklık olması durumunda çok mantıklıdır. Daha sonra "test etme" işleminin, hataların ne zaman ve neden oluştuğunu bildirme konusunda gerçekçi bir şansı vardır. Çok karmaşık işler yapan veya açıkça ölçülebilir çıktılarla sonuçlanan sistemler genellikle kolaylıkla test edilebilir ve bu nedenle testler hata ayıklamadan farklıdır. Bu gibi durumlarda testler, beklentilerle fiili çıktıların eşleşmesini doğrulamak veya onaylamamak için prosedüre dayalı, resmileştirilmiş bir yöntemi kuvvetle ima eder. Test her zaman gerçekleşir ve zaman zaman hata ayıklama ihtiyacını bize bildirir.

Bu her yerde bulunan bir gerçek olsaydı çok güzel olurdu, dev döngülerim açıkça tanımlanmış ikili çıktı (kırmızı, yeşil) ile sınırlandırılmış olsaydı çok isterdim ama ...

Benim durumumda (kuşkusuz - küçük-orta ölçekli, yetersiz finanse edilmiş web tabanlı, veri odaklı kurumsal yönetim sistemlerinde% 98 yalnız çalışan) TDD'nin bana nasıl yardımcı olabileceğini gerçekten göremiyorum. Daha doğrusu, "hata ayıklama" ve "test etme" hemen hemen aynıdır.

Esas olarak, "test" teriminin kullanımı TDD metodolojisi ile ilgilidir / yakından ilişkilidir.

Bunun tamamen, tamamen Zeitgeist olmayan bir "inanmayanlardan uzak dur, shun, shun" olduğunu söyleyebilirim. Ama bağlamımı düşünerek, pratik bir şapka ile belirsiz bir şekilde bile değilim, en vahşi hayal gücümde TDD'nin müşterilerime para için daha fazla değer sunmama nasıl yardımcı olabileceğini görün.

Ya da daha doğrusu, "test etmenin" resmi kod tabanlı bir süreç olduğu ortak varsayımına kesinlikle katılmıyorum.

Temel itirazım (benim özel * bağlamımda geçerlidir ) ...

Eğer güvenilir çalışan kod yazamıyorsanız - o zaman nasıl cehennem am güvenilir muhtemelen alt standart kod test etmek için çalışır kod yazmak gerekiyordu .

Bana göre ben bile rahatsız yeterince beni enthused (benim özel bağlamda) Herhangi bir örnek ne de bir argüman olduğunu görmedim düşünme konusunda tek testi yazma , şu anda, belki "Kullanıcı benim depo dönüşü yapan bazı gülünç temelsiz test kod yazmadan olabilir Adı == X olan bir varlık, tam olarak - ve sadece - bunu istediğimde? ", ancak muhtemelen bu akışı yazarken daha fazla yardımcı program var, belki de internet-gerçekten-sadece-saf-aptal-spouting- kendi kendine sevindirici-çılgınca bilgili-kan-kaynar-imha edici-savurgan-saçma çöp, ama burada sadece şeytanın avukatı oynama ihtiyacını hissediyorum. (Birisinin bana ışığı göstermesini ve beni dönüştürmesini umuyorsunuz, belki de bu müşterilerime para için daha iyi değer verir mi?).

Tartışmalı olarak "hata ayıklama" bazen "test" ile aynıdır. Bununla, günlük çalışma hayatımda, zamanımın en az üçte birini farklı tarayıcılarda sistemimin yerel sürümü ile oynayarak, işimi kırmak ve sonra araştırmak için çaresizce çeşitli farklı tuhaf şeyler denemek için harcadığımı gerçekten kastediyorum. başarısız olmasının nedenleri ve düzeltilmesi.

Ben% 100 TDD mantra "kırmızı / yeşil / refactor" bariz yarar katılıyorum, ama benim için (düşük med bütçe, solo dev RIA arazi çalışma) Gerçekten bana nasıl olabileceğini göstermek için gerçekten isterim Muhtemelen , mantıksal ve hayati olarak gerçekçi bir şekilde, gerçek insan etkileşimlerine bağlı olan çabalarımın tam (ve esasen sadece) çıktısıyla etkileşime girmekten daha fazla ( potansiyel olarak kusurlu test kodu gibi) yazmaktan herhangi bir ek değer elde edin .

Benim için geliştiriciler "test" hakkında konuştuğunda, bu genellikle TDD anlamına gelir.

Testler varmış gibi kodlamaya çalışıyorum, tüm bu test odaklı geliştirmenin teşvik ettiği tüm desen / uygulamalar ve trendlerin harika ve güzel olduğunu düşünüyorum, ancak benim için küçük dünyamda "test" daha fazla kod yazmıyor, aslında gerçek dünyayı test etmek, onu gerçekçi bir şekilde ortaya çıkarır ve bu, hata ayıklama ile hemen hemen aynıdır veya buradaki aktif değişiklik, insan, çıktı merkezli otomatik olmayan "testlerin" doğrudan bir sonucu olan "hata ayıklama" dır. Bu, otomatik ve biçimsel bir şey olarak "test etme" ve insani ve geçici veya yapılandırılmamış bir şey olarak "hata ayıklama" görüşünün aksine.

Hedef gerçekten para / çaba için değerse ve web tabanlı etkileşimli uygulamalar yapıyorsanız, çabanın çıktısı web sayfalarıdır ve en temelde insan girdisine nasıl tepki verdiğidir - bu nedenle "test" en iyi şekilde test edilerek elde edilir bu web sayfalarını, gerçek insan etkileşimi yoluyla. Bu etkileşim beklenmedik veya istenmeyen çıktılara yol açtığında "hata ayıklama" meydana gelir. Hata ayıklama, program durumunun gerçek zamanlı denetimi fikriyle de yakından ilgilidir. Testler genellikle talihsiz bir ilişki olduğunu düşündüğüm otomasyonla ilişkilidir.

Hedef gerçekten çaba için değerse ve otomatik test etkili ve son derece faydalıysa, hata ayıklama sadece bu testin bir çıktısı veya otomatik testin zayıf bir alternatifi ise, neden dünyanın en çok ziyaret edilen ikinci web sitesi (Facebook) ) sık sık körü körüne belirgin (kullanıcılara, ancak test ekibi ve test kodu açıkça değil) hatalar ile bilmece?

Belki de güven verici yeşil ışıklara odaklandıkları ve işlerinin çıktılarını gerçekten kullanmayı unuttukları için mi?

Çok fazla geliştirici, testin kodla yaptığınız bir şey olduğunu düşünüyor mu ve hata ayıklama, bir simge kırmızıya döndüğü ve nedenini çözemediğiniz için IDE ile ara sıra yaptığınız bir şey mi? Bu kelimelerin kendileriyle ilişkili talihsiz değer yargıları olduğunu düşünüyorum, bu da genellikle beklentiler ve çıktılar arasındaki boşlukları kapatmak için odaklanmamız gereken şeylerin pratik gerçekliğini gizliyor.


-3

basitçe,

Test etme, bir yazılımın hata ayıklama sırasında başarısız olmasına neden olan girişlerin bulunması, verilen bir hatanın hatasını bulma işlemidir.


Bu, önceki 10
cevapta
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.