在本篇論文中,我們介紹並實作了兩個針對線性程式實施軟體測試與模型合成的方法,分別基於學習與抽樣。利用這兩個全新的方式,我們希望能夠在提供一個量化的保證與合理的資源耗用下,減低軟體測試與正規驗證之間的分別。 本篇論文中,基於學習機制的方式的進行,是從學習一個程式所有可行的執行軌跡之集合開始,得出一模擬此集合的模型,再利用測試來觀察此模型是否包含了錯誤的行為。準確的學習演算法需要保證模型與程式的完全相似,而此問題基本上是無法決定的。因此,我們的學習機制利用了Probably Approximately Correct (PAC)學習架構,其特色為應用抽樣來解決模型與程式是否相同的問題,並且利用名為錯誤率(error probability)與信心水平(confidence level)的參數來提供正確性的保證。除此之外,我們的基於學習機制之方式也會將模擬程式行為的模型輸出,此模型也保有上述之正確性保證。 我們並提出了另外一個基於取樣來實作的方式。此法也是根據PAC學習機制來提供正確性的保證。我們利用了具象符號測試(Concolic Testing)工具來作為我們的取樣者,並從程式中抽取特定數量的執行軌跡。最終,再從已抽取之執行軌跡的集合中分析,來提供關於正確性的保證,從中找到錯誤執行軌跡,或是因為計算資源的不足而無法完成分析。 我們實作了一個稱為Pac-Man 的工具,此工具提供兩種運行模式,分別實作了上述所提及之兩種機制。除此之外,我們在實驗中所獲得的初步結果中,Pac-Man的表現相當優異,在某些範例上甚至超越了一些已經成熟的軟體驗證工具。因此,我們將Pac-Man 提交至2016年軟體驗證競賽(Software Verification Competition)。在競賽中的...