資源描述:
《軟件分析技術進展》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、《計算機學報》2009年9期Vol.32,No.9軟件分析技術進展*資助項目:國家重點基礎研究發(fā)展規(guī)劃973項目(No.2009CB320703);國家自然科學基金委創(chuàng)新研究群體研究科學基金項目(No:60821003);國家863高技術項目(No.2006AA01Z175)梅宏1王千祥1張路1王戟21.北京大學信息科學技術學院,高可信軟件教育部重點實驗室,北京1008712.國防科技大學計算機學院,并行與分布處理國防科技重點實驗室,長沙410073摘要軟件分析技術的研究已有較長歷史,相關成果也在軟件生命周期的不同階段中
2、得到了廣泛應用。軟件生命周期中不同活動所需要的軟件分析技術既不完全相同,又有許多交疊,且不同的分析技術之間互相影響。文章在討論了軟件分析的基本概念之后,主要從靜態(tài)分析與動態(tài)分析兩個方面介紹了一些主要的軟件分析技術,以及部分相關分析工具。結合軟件的質(zhì)量問題,文章還探討了一些分析技術與軟件質(zhì)量屬性的相關性,以便于人們在分析特定的軟件質(zhì)量屬性時,選取合適的技術與工具。最后,文章展望了軟件分析技術的發(fā)展趨勢。關鍵詞軟件分析,靜態(tài)分析,動態(tài)分析,軟件質(zhì)量中圖法分類號TP3011.引言軟件是一種十分特殊的人工制品:它是人類“智力活動
3、”的產(chǎn)物,是對客觀事物的虛擬反映,是知識的固化與凝練。盡管軟件迄今已有50多年的發(fā)展歷史,但目前人們對于軟件的許多認識還十分有限。例如:對于任何一個給定的軟件,我們能否完全了解它的特性?軟件分析就是一個以軟件特性為關注點的研究領域?!胺治觥?,通俗來說,是以某種方式將復雜對象分解為更小的部分,以更好地理解該對象的過程。分析技術很早就被應用于數(shù)學、邏輯等方面的研究,近代以來逐步被更多的學科(例如:化學、物理等)所大量采用。軟件作為一個新發(fā)展起來的學科,在研究過程中引入分析技術是十分自然的。目前軟件生命周期中的許多活動(分析、
4、設計、實現(xiàn)、測試、部署、維護等)都離不開分析技術。然而,軟件分析的能力是有限的:對于任何一個有一定規(guī)模的軟件,希望獲得關于它的完備描述通常是不現(xiàn)實的[18]。特別是,對于自動分析而言,許多問題是不可判定的。其中最典型的例子是停機不可判定問題:不存在一個這樣的算法,對于任意的圖靈機以及任意的輸入,可以判斷該圖靈機是否停機[64]。但從軟件分析這么多年所取得的進展可以看出,盡管軟件分析的能力有限,它仍然是軟件領域十分有用的技術:將程序從高級語言向機器語言的翻譯過程需要分析,判斷一個程序是否符合需求規(guī)約需要分析技術,想了解程序
5、是否存在安全漏洞需要分析技術,維護過程更是需要大量的分析技術,等等。本文將軟件分析定義為“對軟件進行人工或者自動分析,以驗證、確認、或發(fā)現(xiàn)軟件性質(zhì)(或者規(guī)約、約束)的過程或活動”。下面對上述定義中幾個術語進行解釋。首先是“軟件”:軟件最初主要是指程序,后來逐步擴大到文檔等其它形態(tài)軟件制品。軟件分析也從程序分析發(fā)展到了更大的范圍,例如:對文檔(含需求規(guī)約、設計文檔、代碼注釋等)的分析、對運行程序的分析,等等?!白詣印币彩呛苤匾母拍睿很浖治龅臍v史幾乎與軟件的歷史一樣長:自從有了軟件就有了軟件分析。最初的分析主要是人工進行
6、的,但人工分析往往需要花費大量的時間與精力,因此,后來人們越來越多地關注自動分析。其中,編譯技術的發(fā)展大大帶動了軟件的自動分析技術,目前的許多分析技術都可以在編譯技術中找到基本雛形。所謂“驗證”(Verification),是要回答“軟件制品是否與軟件需求規(guī)約一致”的問題,而“確認”(Validation)則要回答“軟件的特性是否符合用戶需求”的問題。在英文中,人們經(jīng)常用“Dothethingright”來解釋“驗證”,而用16《計算機學報》2009年9期Vol.32,No.9“Dotherightthing”來解釋“確
7、認”。“發(fā)現(xiàn)”(Discover)是指在沒有事先設定軟件某個性質(zhì)的前提下,通過分析發(fā)現(xiàn)軟件的某種性質(zhì)。之所以強調(diào)“性質(zhì)”,是因為分析的結果通常表示為軟件是否符合或者具有某種性質(zhì)(或者規(guī)約、約束),而這種性質(zhì)不是軟件本身自明的。在本文討論的軟件分析中,分析對象僅限于軟件制品,不涉及對軟件過程、軟件人員與軟件組織等的分析。目前與軟件分析相關的綜述性文獻中,多數(shù)只對軟件分析的一個子集進行比較深入的介紹。例如[1]集中在對源代碼分析的介紹,[2]主要介紹形式化的分析方法,[53]著重從語義的角度介紹程序分析,[54]集中在模型為
8、中心的程序分析上。本文在這些工作的基礎之上,嘗試對軟件分析涉及的主要方法進行盡可能全面的總結、分類。另外,考慮到近年來軟件質(zhì)量為人們所熱切關注,本文在介紹分析技術之外,特別關注那些與質(zhì)量相關的分析技術,并結合不同的軟件質(zhì)量屬性,探討不同的質(zhì)量屬性適合運用什么類型的分析技術。最后,文章結合軟件形態(tài)、軟件運行環(huán)境等幾個驅(qū)