Repro olmayan böcekler ile ne yapmalı?


22

Test sırasında bir hata oluşacağına dair bir test cihazına sahibim (şimdiye kadar tamam), ancak daha sonra derhal bildirir. Biz (geliştiriciler) daha sonra test edicinin sorunu yeniden üretmeye çalışmadığını ve (istendiğinde) tekrar gerçekleştirmenin bir yolunu bulamadığını tespit ettik.

Şimdi bunlar hala böcek, onları görmezden gelmek istemiyorum. Ama repro adımları olmadan biraz sıkışıp kaldım. Bazen bir yığın izi vardır (sık sık yararlı olmamakla birlikte, çünkü bu kompakt çerçevedir ve satır numarası yoktur). Ancak bir tane olduğunda yığın izini alıp kodu açıp tahminde bulunmaya başlayabilirim, ancak bu test edilebilir "düzeltmeler" anlamına gelmez.

Böyle senaryolarda ne yaparsınız?


"kompakt çerçeve ve satır numarası yok" Huh? Bu hangi dil?
TheLQ

1
@TheLQ - C # (Visual Studio 2008) Ne yazık ki, kompakt çerçevenin hiçbir yığın izinde satır numarası yok. (Daha fazla bilgi için bu soruya bakın stackoverflow.com/questions/3507545/…
Vaccano

7
zaman harcayacak ilk şey, programın yararlı yığın izleri oluşturmasını sağlamaktır.

2
Resimler, yoksa olmadı. : P
Cameron MacFarland

4
Bilirsiniz, tarif ettiğiniz gibi bir şey hemen hemen her zaman tetiklenir, çünkü kullanıcı girişi doğrulanmadı. Önce oraya bakmayı denerdim. Muhtemelen yuvarlak bir deliğe kare yazıyorlar.
Tim Post

Yanıtlar:


51

Bağlam içermeyen bir hata, bir hata değildir; bu bir şanstır. Sorun sizin kodunuz olabilir, bir üçüncü taraf kütüphanesi olabilir, donanım olabilir ya da tek bir bitin kendi kendine dönmesine neden olan güneş ışınımı olabilir. En azından bir düzenlilik ile çoğaltamazsanız (sadece "her X, her 10 veya 20 kez bir olur" olsa bile), test cihazınızın size "Bir yerde bir şeyler ters gittiğini - düzeltin" demekten daha iyi değil .

Test cihazınıza, işinin bir şey kırılıncaya kadar sadece girdi üretmek olmadığını açıklamanız gerekebilir. Öyle olsaydı, onu rasgele bir sayı üreteci ile değiştirebilirdiniz. İşinin bir kısmı, nasıl üretileceğini belirlemeyi gerektiren böcekleri tespit etmektir.


19

Sonuçta, ne geliştirici ne de test cihazı hatayı çoğaltamazsa, kapatılmalı ancak bu şekilde işaretlenmelidir.

Ancak, bu noktaya gelmeniz ne kadar sürdüğü tartışmalıdır.

Bazı insanlar derhal yeniden üretilemezlerse derhal kapatılmaları gerektiğini savunuyorlardı.

Genelde problemin kaynağından daha fazla bilgi almaya çalışıyorum. Orijinal raporda unuttukları bir şey olabilir. Gerekli adımlar hakkında bir konuşma yapmak, genellikle eksik bilgileri ortaya çıkarabilir.

Son bir düşünce - "no-repro" olarak kapalı sabit demek değildir . Gerçek bir sorun varsa, er ya da geç kendini ortaya çıkaracak ve nihayetinde sorunu yeniden oluşturabileceğiniz zaman yardımcı olabileceğiniz tüm bilgilere sahip olacaksınız.


16

Birkaç öneri:

  1. Ürün kodunuza günlüğe kaydetme ekleyin (yalnızca bir keylogger değil:}). "Repro yok" hataları şanssızlık olabilir, ancak yalnızca beklenmeyen şekillerde (örneğin bir müşteri bilgisayarı gibi) kullanılan kirli bir sistemde meydana gelen bellek veya durum bozulması olabilir. Bilgilerin kaydedilmesi veya izlenmesi , test cihazı parayı bulduğunda neyin yanlış olduğunu bulmanıza yardımcı olabilir .

  2. Veritabanındaki "no repro" hatalarının geri kalanını tarayın (veya hata izleme için ne kullanıyorsanız). Çoğunlukla, parazitler ürünün bir alanında bir araya toplanır. Bir bileşenin hatalı olduğu görülüyorsa, kod olası döküntüleri incelemek için kod gözden geçirin, bu bileşene ek bir günlük kaydı ekleyin - veya her ikisi de.

  3. Yarım saat kadar sürün ve test testinizi izleyin. Yaklaşımları size neyin yanlış gittiği hakkında bir fikir verebilir (örneğin "ilginç - bu diyaloga bu şekilde varabileceğinizi bilmiyordum"). Ayrıca istemeden bir diyalog veya yapılandırma adımını atladıklarını da bulabilirsiniz. Başlarına biraz girmek için zaman ayırmaya değer.


4

KG'yi büyük bir ticari kod üzerinde yapıyorum, bu rahatsız edici senaryo çok sık ortaya çıkıyor. Genellikle bu ikiliyi desteklediğimiz tüm platformlarda oluşturmak için ironclad işlemlerinin olmadığını gösterir. Dolayısıyla, geliştirici kendi kodunu (hata ayıklamak ve düzeltmek için yapması gereken) oluşturur ve aynı oluşturma işlemini mektuba uygulamazsa, sisteme bağlı hataların sihirli bir şekilde ortadan kalkması (veya görünmesi) olasılığı vardır. . Tabii ki bu şeyler genellikle hata veritabanında "benim için çalışır" ile kapatılırlar ve bir dahaki sefere bu başarısız olunca hata yeniden açılabilir. Bir hatanın sisteme bağlı olabileceğinden şüphelendiğimde, onu çeşitli platformlarda test etmeye ve hangi şartlar altında olduğunu bildirmeye çalışıyorum. Çoğu zaman, bir bozuk bellek sorunu, bozuk verinin çökmeye neden olacak kadar büyük olup olmadığını gösterir. Bazı platformlar (HW ve OS kombinasyonları) yolsuzluğun asıl kaynağına daha yakın çökebilir ve bu hata ayıklaması gereken zavallı adam için çok değerli olabilir.

Test edicinin, katma değerinin sadece bir arıza gösterdiğini bildirmesinin ötesinde bir şeyler yapması gerekir. Yanlış pozitifleri taramak için çok zaman harcıyorum - söz konusu platformun aşırı yüklenmesi veya ağın bir aksaklığı olabilir. Ve evet, bazen rastgele zamanlama olaylarından gerçekten etkilenen bir şey elde edebilirsiniz, donanım hataları genellikle proto örneği gibi olabilir: İki veri talebi tamamen aynı saat periyodunda geri gelirse ve olası çatışmayı ele almak için donanım mantığı hatalıysa, o zaman böcek sadece zaman zaman ortaya çıkacaktır. Benzer şekilde, paralel işlemeyle de, dikkatli bir tasarımla, hangi işlemcinin daha hızlı olacağından bağımsız olarak çözümü kısıtlamadığınız sürece, mavi ayda yalnızca bir kez meydana gelen hataları elde edebilirsiniz ve bunların istatistiksel önemi bir kabus gibi hata yapar.

Ayrıca kodumuz güncelleniyor, genellikle günde birçok kez, güneye gittiğinde kesin bir kaynak kodu revizyon numarası izlenmesi hata ayıklama çabası için çok yararlı bilgiler olabilir. Test cihazı, hata ayıklayıcılar ve geliştiricilerle ters bir ilişkide olmamalıdır, ürünün kalitesini artıracak bir ekibin parçası olarak oradadır.


3

Yeniden üretilemeyen iki tür hata vardır:

1) Bir test cihazının (veya kullanıcının) bir kez gördüğü, ancak yeniden üretme girişiminde bulunamadığı veya yapamadığı kişiler.

Bu durumlarda yapmanız gerekenler:

  • Kısaca, tekrarlanabilir olmadığından emin olmak için kusur gösteren eylemlerin ana yolunu kısaca kontrol edin.

  • Yardımcı olabilecek herhangi bir bilgi olup olmadığını görmek için test cihazı / kullanıcı ile konuşun.

  • Birden fazla örneğe dayanarak bunlara bakmak için yeterli bilgiye sahip olup olmadığınızı görmek için ilişkili olabilecek diğer kusurlarla çapraz referans verin. Bu sorunun size devam etmek için yeterli bilgi vermediğini fark edebilirsiniz, ancak birkaç başka konuyla birleştiğinde, araştırmaya değer bir şey olmadığını size önerebilir.

  • Hala devam edecek kadar bilginiz yoksa, kullanıcı / test uzmanına yeterli bilginiz olmadığını açıklamanız gerekir. Onlara kibarca ne kadar bilginin nasıl görüneceğini ve niçin ihtiyaç duyulduğunu açıklayın.

2) Güvenilir bir şekilde çoğaltılamayanlar, ancak kusurun var olduğunu öne sürecek yeterli kanıt var (tekrarlanan olaylar açısından), o zaman bunların geliştirici sorunları olduğunu ve geliştiricinin test cihazı tarafından desteklendiğini görme eğilimindeyim. / user - araştırması gerekiyor.

Bunun yavaş ve acı verici olması muhtemeldir, muhtemelen kodu yürümek, daha fazla günlük eklemek, verilere bakmak ve test edenlerle / kullanıcılarla derinlemesine konuşmak zorunda kalacaksınız, ancak bunun mümkün olduğunu gösteren yeterli kanıt varsa sahipliğini almanız ve düzeltmek için ne gerekiyorsa yapmanız gereken bir konudur.


2

Kulağa nispeten sık geliyor gibi geliyor - ki bu beni meraklandırıyor, böceklerin çoğunun yeniden sorgulanması gerçekten zor mu, yoksa denememesi için başka bir nedenden mi? Neden sorunu yeniden üretmeye çalışmadığını biliyor musunuz ? Bunun senin için ne kadar önemli olduğunun farkında değil mi? Veya belki de başka baskıları var - tahsis edilen testlerden hızlıca geçmesini ve hataları duvarın üstüne atmasını isteyen bir test yöneticisi? Ya da belki nasıl gideceğinden emin değil mi?

Diğerleriyle daha iyi bir kayıt tutmaya çalışmanın bir öncelik olduğunu kabul ediyorum. Bu arada, test etme becerisinin / güveninin eksikliğinin bir sorun olabileceğinden şüpheleniyorsanız, o zaman Danny'nin bu hatadan haberi izole etmekten gerçekten hoşlandım - onu başlangıçta işaret edebilirsin.

Eğer sorun yönetim baskısı nedeniyle ortaya çıkıyorsa - benim de semptomlarım var; bu zorlu bir durumdur, çünkü test ediciler ve programcılar farklı yöneticilere rapor verirse ve yöneticiler başka bir ekibe "yardım" etme eğiliminde değillerse.


1

Tipik olarak, yeniden üretilemediğini not ederim, ancak test veya yineleme partisi tamamlanıncaya kadar açık bırakın.

Bu noktaya kadar çoğaltılmadıysa, kapalıdır, ancak tekrar karşılaşıldığında tekrar açılabilir.


1

Bu test cihazının iş istasyonuna bir keylogger ekleyin!


2
Gerçekten şanslıysanız, klavye günlüğü hatayı bu makinede çoğaltmayı imkansız kılan bazı yan etkiler yaratabilir. Hiç printfkodun içine ekstraların konmasının hatanın kaybolmasına neden olduğu bir durum oldu mu? :)
Scott Whitlock,

3
Bir video kameranın varlığı da bir hataya neden olur mu?
İş

1
Video kamera - hayır, fakat JING veya HyperCam2 - kesinlikle EVET;)
quetzalcoatl 22.03.2013

1

İlk görev tekrarlanabilir bir test sistemine sahip olmak. Kişisel tester gerekir mümkünse eğer otomatik - iyi tanımlanmış süreç var.

Bu üç şartı var:

  • Aynı ikili
  • Aynı adımlar
  • Aynı makine

Hata, yukarıdaki 3 koşulda düzensiz olarak ortaya çıkıyorsa, daha fazla yalıtmaya başlayın. Sistem yığınının her düzeyini ve yapılandırmasını göz önünde bulundurun.

Bellek yönetimi hatalarını tespit etmenin bir yolu, programı birden fazla derleyiciye sahip birden fazla işletim sisteminde çalıştırmaktır. Valgrind de yardımcı olabilir.

Bununla birlikte, tipik olarak paralel sistemler, repro olmayan böcekleri uyarmakla yükümlüdür. Tampon boyutları ve işlem hızları, eşzamansız, veri tabanı kilitleri, değişken bellek yazma serpiştirmeleri; bunların hepsi sorun yaratabilir. Ve benzeri ve benzerleri.


0

Her şeyden önce, sıkı bir test prosedürünüz olmalıdır (ama benim anladığım kadarıyla, şirketimde tarif ettiğiniz şeyler çok sık olur).

Böceğin ciddiyetine bağlı olarak, repro adımları sağlanana kadar biraz zaman harcayabilir veya (daha iyi) görmezden gelebilirsiniz.

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.