Bu, Symbolic Execution'un wiki girişinde yazılmıştır , ancak bunun için herhangi bir referans bulamıyorum. Biri bana bir işaretçi gösterebilir mi? Teşekkür ederim.
Bu, Symbolic Execution'un wiki girişinde yazılmıştır , ancak bunun için herhangi bir referans bulamıyorum. Biri bana bir işaretçi gösterebilir mi? Teşekkür ederim.
Yanıtlar:
Sembolik uygulama ile soyut yorumlama arasındaki karşılaştırmayla ilgili bir makalenin farkında değilim. Ben de buna ihtiyaç olmadığını düşünüyorum. Bu iki tekniğin orijinal tanımlarını okumak yeterli olmalıdır.
(Tersine, beklenmedik bir bağlantı olursa, bu açıklamaya değer olacaktır. Ama durumun bu olduğundan şüpheliyim.)
Sembolik yürütmenin ana fikri, yürütmedeki keyfi bir noktada, tüm değişkenlerin değerlerini başlangıç değerlerinin işlevleri olarak ifade edebilmenizdir. Soyut yorumlamanın ana fikri, bir programın tüm uygulamalarını bir dizi aşırı yaklaşımla sistematik olarak araştırabilmenizdir. (Önceki yaklaşımda inleyen birkaç AI meraklısını duyabiliyorum.)
Dolayısıyla, en azından orijinal formülasyonda, sembolik yürütme tüm olası yürütmeleri araştırmakla ilgili değildi. Bunu başlıkta bile görebilirsiniz: 'test' kelimesini içerir. Ancak burada Bölüm 8'den daha fazlası var: "Sonsuz yürütme ağaçlarına sahip programlar için, sembolik test tam kapsamlı olamaz ve kesin doğruluk kanıtı oluşturulamaz."
Buna karşılık, soyut yorum tüm infazları araştırmayı amaçlamaktadır. Bunu yapmak için, biri sembolik yürütme ana fikrine çok benzeyen birkaç bileşen kullanır. Bu bileşenler (1) soyut durumlar, (2) birleşme ve genişleme (dolayısıyla başlıkta 'kafes').
Soyut durumlar.Bir programın belirli bir zamandaki somut durumu temel olarak bellek içeriğinin (program kodunun kendisi ve program sayacı dahil) bir anlık görüntüsüdür. Bu, izlenmesi zor olan çok fazla ayrıntıya sahiptir. Belirli bir mülkü analiz ettiğinizde, somut durumun büyük bölümlerini göz ardı etmek isteyebilirsiniz. Veya yalnızca belirli bir değişkenin negatif, sıfır veya pozitif olmasına dikkat etmek isteyebilirsiniz, ancak tam değerini umursamayabilirsiniz. Genel olarak, somut durumun soyut bir versiyonunu düşünmek istersiniz. Bunun işe yaraması için bir değişme özelliğine sahip olmanız gerekir: Somut bir durum alırsanız, bir deyim yürütür ve sonra da sonuçtaki durumu soyutlarsanız, ilk durumu soyutlamış gibi aynı sonucu elde etmeli ve sonra da aynısını uygulamalısınız. ancak soyut durumda. Bu değişebilirlik diyagramı her iki makalede de yer almaktadır. Ortak fikir budur. Yine, soyut yorum daha geneldir, çünkü bir devletin nasıl soyutlanacağını dikte etmez - sadece bunu yapmanın bir yolu olması gerektiğini söyler. Aksine, sembolik yürütme başlangıç değerlerinden bahseden (sembolik) ifadeler kullandığınızı söyler.
Birleştirme ve Genişletme. Program yürütme belirli bir ifadeye iki farklı yolla ulaşırsa, sembolik yürütme iki analizi birleştirmeye çalışmaz. Bu yüzden yukarıdaki alıntı dags yerine yürütme ağaçlarından bahsediyor. Ancak, soyut yorumun tüm infazları kapsamak istediğini unutmayın. Bu nedenle, aynı program sayacına sahip oldukları noktada iki yürütmenin analizlerini birleştirmenin bir yolunu ister. ( Katılmaçok aptal olun ({a} join {b} = {a, b}), sembolik yürütmenin yaptığı şeye eşit olacak şekilde.) Genel olarak, katılmak, sonunda tüm yürütmeleri analiz etmeyi bitireceğinizi garanti etmek için yeterli değildir. (Özellikle, daha önce bahsedilen aptal birleşim çalışmaz.) Döngüleri olan bir program düşünün: "n = input (); (n) aralığında i için: dostuff ()". Döngünün etrafında kaç kez dolaşmalı ve katılmaya devam etmelisiniz? Sabit cevap yok. Böylece, sezgisel olarak görülebilecek başka bir şeye ihtiyaç vardır ve bu genişlemektedir . Döngünün etrafında 3 kez dolaştığınızı ve "i = 0 veya i = 1 veya i = 2" olduğunu öğrendiğinizi varsayalım. Sonra diyorsun ki: hmmm, ... genişleyelim ve "i> = 0" elde edersin. Yine soyut yorumlama nasıl genişleyeceğini söylemez - sadece genişlemenin hangi özelliklerin çalışması gerektiğini söyler.
(Bu uzun cevap için özür dilerim: Kısaltmak için gerçekten zamanım yoktu.)
Bunun çok sığ bir anlamda kastedildiğini düşünüyorum. Soyut yorumlamanın ilk adımı somut bir toplama semantiği tanımlamaktır. Anlambilimin toplanması, tek bir devletin evrimini tanımlamak yerine, devlet kümelerinin evrimini tanımlar. Devlet kümelerinin temsillerini sembolik olarak yürüttüğü için, programın somut anlambilimini temsil ettiği iddia edilebilir. Daha kesin bir yazışma olduğunun farkında değilim.
Bakınız Patrick Cousot. İnşaat ve mühendislik yaklaşımları, tekdüze monoton sur un treillis'i düzeltir, sémantique des programlarını analiz eder. Thèse ès Sciences Mathématiques, Université Joseph Fourier, Grenoble, Fransa, 21 Mart 1978. https://cs.nyu.edu/~pcousot/publications.www/CousotTheseEsSciences1978.pdf (ne yazık ki Fransızca), sayfa (3) -27 ila (3) -29