Heisenbug - Heisenbug

Gelen bilgisayar programlama jargon, bir heisenbug bir olan yazılım hata kaybolur ya da bir girişimleri incelemeye zaman onun davranışını değiştirmek gibi görünüyor. Terimi bir olan cinas adını Werner Heisenberg , fizikçi ilk iddia gözlemci etkisi ait kuantum mekaniği ve durumuyla değişiklikler gösterirse kaçınılmaz bir sistemi gözlemleyerek o eylemi belirtir. Elektronikte geleneksel terim, bir cihaza bir test sondası takmanın davranışını değiştirdiği sonda etkisidir .

Gibi benzer terimler, bohrbug , mandelbug , hindenbug ve schrödinbug (Bkz ilgili terimler ) bazen bazen jest içinde, sıradışı yazılım hataları diğer tür için önerilmiştir; ancak heisenbug teriminin aksine, yaygın olarak bilinmemekte veya kullanılmamaktadır.

Örnekler

Heisenbug'lar , çıktı ifadeleri eklemek veya bir hata ayıklayıcı ile çalıştırmak gibi bir programda hata ayıklamaya yönelik yaygın girişimlerin , genellikle programın davranışını değişkenlerin bellek adreslerini ve zamanlamasını değiştirmek gibi ince yollarla değiştirme yan etkisine sahip olması nedeniyle oluşur. yürütülmesinden.

Heisenbug'un yaygın bir örneği, program bir optimize edici derleyici ile derlendiğinde ortaya çıkan , ancak aynı program optimizasyon olmadan derlendiğinde ortaya çıkan bir hatadır (genellikle bir hata ayıklayıcı ile incelemek amacıyla yapıldığı gibi). Hata ayıklama sırasında, optimize edilmiş bir programın normalde kayıtlarda tutacağı değerler genellikle ana belleğe gönderilir. Bu, örneğin, kayan nokta karşılaştırmalarının sonucunu etkileyebilir, çünkü bellekteki değer, kayıttaki değerden daha küçük aralığa ve doğruluğa sahip olabilir. Benzer şekilde, C ve C++ gibi dillerdeki çalışma zamanı onaylarında kullanılan test ifadelerindeki yan etkiler de heisenbug'lara neden olabilir; burada, makro kullanılarak üretim kodunda onaylamalar kapatıldığında test ifadesi değerlendirilmez . NDEBUG

Heisenbug'ların diğer yaygın nedenleri, başlatılmamış bir değişkenin değerini kullanmak (bu, hata ayıklama sırasında adresini veya başlangıç ​​değerini değiştirebilir) veya geçersiz bir işaretçiyi (hata ayıklama sırasında farklı bir yere işaret edebilir) takip etmektir. Hata ayıklayıcılar ayrıca genellikle kesme noktalarının kullanımına izin verir veya ek kaynak kodunun (özellik erişimcileri gibi) gizlice yürütülmesine neden olan diğer kullanıcı arabirimleri sağlar ve bu da programın durumunu değiştirebilir.

Zaman, özellikle çok iş parçacıklı uygulamalarda heisenbug'larda da bir faktör olabilir. Bir hata ayıklayıcının kontrolü altında bir programın yürütülmesi, normal yürütmeye kıyasla programın yürütme zamanlamasını değiştirebilir. Program hata ayıklayıcıdaki tek adımlı kaynak satırları tarafından yavaşlatıldığında yarış koşulları gibi zamana duyarlı hatalar oluşmayabilir. Bu, özellikle, iki makine arasında ağ paketi işlemede hata ayıklarken ve yalnızca bir tanesi hata ayıklayıcı denetimi altındayken olduğu gibi, davranış bir hata ayıklayıcının denetimi altında olmayan bir varlıkla etkileşimi içerdiğinde geçerlidir.

Heisenbug'lar, bilgi teknolojisindeki gözlemci etkisinin örnekleri olarak görülebilir . Sinirli programcılar mizahi bir şekilde ayın evresi için bir heisenbug'ı suçlayabilirler veya (sadece bir kez meydana geldiyse) donanımı etkileyen alfa parçacıkları veya kozmik ışınlar nedeniyle hafif bir hata olarak açıklayabilirler .

İlgili terimler

Bir bohrbug , muhalefet tarafından, "iyi, sağlam bir böcek" dir. Deterministik Bohr atom modeli gibi , davranışlarını değiştirmezler ve nispeten kolay tespit edilirler.

Bir mandelbug (adını Benoît Mandelbrot 'ın fraktal ) olan nedenleri çok karmaşık o onarım meydan okuyan, ya da davranış görünmesini sağlayan bir hata olduğunu kaotik hatta olmayan deterministik . Terim ayrıca, daha fazla hata ortaya çıkararak fraktal davranış (yani, kendine benzerlik ) sergileyen bir hatayı ifade eder (bir geliştirici, kodu düzeltmek için kodu ne kadar derine inerse, o kadar çok hata bulur).

Bir schrödinbug veya schroedinbug (adını Erwin Schrödinger ve onun düşünce deneyinden almıştır ), bir programcının kodun asla çalışmaması gerektiğini fark etmesinden sonra yazılımı çalıştırırken kendini gösteren bir hatadır.

Bir hindenbug (adını Hindenburg felaketinden alır ) yıkıcı davranışa sahip bir hatadır.

Bir Higgs-bugson (adını Higgs bozonu parçacığı) diğer gözlenen koşullara bağlı dayanarak var öngören bir hata olduğunu (en sık, belli belirsiz ilgili günlük girişleri ve anekdot kullanıcı raporları) ama zor, hatta olanaksızdır, yapay içinde çoğaltmak bir geliştirme veya test ortamı. Terim aynı zamanda kodda bariz olan (matematiksel olarak kanıtlanmış), ancak uygulamada görülemeyen (yine de varlığını gerçekten bulması zor veya imkansız olan) bir hatayı ifade edebilir.

etimoloji

Terim 1985'te Jim Gray tarafından yazılım arızaları hakkındaki bir makalede (ve bazen bu yayın nedeniyle yanlışlıkla ona atfedilir) ve ayrıca 1986'da Jonathan Clark ve Zhahai Stewart tarafından posta listesinde (daha sonra Usenet haber grubu) kullanıldı. riskler .

IBM'de araştırmacı olan Bruce Lindsay, 2004 ACM Queue röportajında, Heisenbug ilk tanımlandığında kendisinin de orada olduğunu doğruladı .

ACM yayınlarında daha önceki bir görünüm 1983'ten.

Çözünürlük

Heisenbug'ları tespit etmek ve düzeltmek zordur; genellikle onları çözmeye çalışmak daha fazla beklenmedik davranışa yol açar. Sorun, ayrı, destekleyici bir hatanın sonucu olarak ortaya çıktığından, hata ayıklama sırasında davranışı tahmin etmek ve analiz etmek zor olabilir. Genel olarak tanımlanan heisenbugs sayısı, bir yazılım parçası olgunlaştıkça azalmalıdır.

Ayrıca bakınız

Referanslar

Dış bağlantılar