符號執行

符號執行  是一種計算機科學領域的程序分析技術 ， 通過採用抽象的符號代替精確值作爲程序輸入變量 ， 得出每個路徑抽象的輸出結果 。 這一技術在硬件 、 底層程序測試中有一定的應用 ， 能夠有效的發現程序中的漏洞 。 這一思想最初由IBM托馬斯 · J · 華森研究中心的詹姆斯 · C.金 （ James C. King ） 於1976年6月在論文Symbolic Execution and Program Testing中提出 ， 文中 “ 解析程序的路徑後 ， 用符號模擬通過路徑並獲得輸出 ” 的方法如今被稱爲 “ 經典符號執行 ” 。 由於20世紀80年代的研究追求分析的完備性 ， 而大型程序的路徑複雜 ， 不可能完全遍歷 ， 符號執行這一研究領域遇冷 。 21世紀後 ， 該領域研究有了新的進展 ： 2006年 ， 克里斯蒂安 · 卡達爾 （ Cristian Cadar ） 在論文中設計了一種 “ 先進行符號執行 ， 後根據符號執行結果生成測試用例 ” 的 “ 執行生成測試 ” 技術 ， 並隨後將其發展爲應用在GNU / Linux內核錯誤檢查中的KLEE ； 2007年 ， 庫希克 · 森 （ Koushik Sen ） 在當年的軟件工程自動化 （ Automated Software Engineering ） 會議提出將符號執行和實際執行結合的 “ 混合執行 （ Concolic testing ） ” 方法 ； 2009年 ， 維塔利 · 奇波諾夫 （ Vitaly Chipounov ） 提出 “ 選擇性符號執行 ” 方法 ， 通過選擇 “ 對程序設計者有意義 ” 的執行分支進行符號執行測試來提高對大型程序應用符號執行測試的可行性 。 符號模擬技術  則把類似的思想用於電路分析 ； 符號計算  則用於數學表達式分析 。