本站簡介作品介紹購買指南發布作品訂做說明專業誠信
本站收錄了大量的畢業設計和論文 [vison]       本站提供這些設計的初衷 [vison]      
管理系統 學生 計算機 教學 信息 電路 汽車 模具 網站 建筑
您現在的位置:首頁 >> 信息資訊開題報告

基于LLVM的JavaScript程序切片系統開題報告

編輯:admin 來源:papersay.com   客服QQ:281788421 (為了更好的為您服務,請先加好友再咨詢)

基于LLVM的JavaScript程序切片系統開題報告
一、課題任務的學習與理解
1、設計內容
  在程序分析測試時,由于程序段代碼量大,針對不同程序變量、接口的測試分析起來較為困難,費時費力,還容易出錯。LLVM是構架編譯器的框架系統,以C++編寫而成,用于優化以任意程序語言編寫的程序的編譯時間、鏈接時間、運行時間以及空閑時間,對開發者保持開放,并兼容已有腳本,它可以作為多種語言的后端,它可以提供可編程語言無關的優化和針對很多種CPU的代碼生成功能。JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基于原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,他是一種廣泛用于客戶端的腳本語言,最早是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能。
  本課題需要設計一個系統,應用LLVM工具對一個較長的JavaScript代碼進行切片,根據用戶所給出的條件,將源程序中相關的程序代碼分解出來,在系統中可以查看源代碼以及分解出來的切片代碼。
2、技術要求
(1)了解LLVM架構編譯器系統的運用;
(2)掌握程序切片的基本原理并能運用;
(3)熟練掌握Java編程技能,結合LLVM工具完成程序切片。
3、成果形式
(1)對程序切片的相關步驟進行分析;
(2)提交畢業設計報告及其相關電子文檔。
二、閱讀文獻資料進行調研的綜述
 1.LLVM是low level virtual machine的簡稱,其實是一個編譯器框架。LLVM隨著這個項目的不斷的發展,已經無法完全的代表這個項目了,只是這種叫法一直延續下來。
  LLVM是一個開源的項目。它最早的時候是Illinois的一個研究項目,主要負責人是Chris Lattner,他現在就職于Apple。 Apple 目前也是LLVM項目的主要贊助者之一。
  LLVM的主要作用是它可以作為多種語言的后端,它可以提供可編程語言無關的優化和針對很多種CPU的代碼生成功能。此外LLVM目前已經不僅僅是個編程框架,它目前還包含了很多的子項目,比如最具盛名的clang。
  LLVM的優點是開源,有一個表達形式很好的IR語言,模塊化作的特別好。
  對關注編譯技術的開發人員,LLVM提供了很多優點:
    (1)現代化的設計LLVM的設計是高度模塊化的。這使得其代碼更為清晰和便于排查問題所在。
   (2)語言無關的中間代碼。一方面,這使得透過LLVM能夠將不同的語言相互連結起來;也使得LLVM能夠緊密地與IDE交互和集成。另一方面,發布中間代碼而非目標代碼能夠在目標系統上更好地發揮其潛能而又不傷害可調試性(在目標系統上針對本機的硬件環境產生目標代碼,但又能夠直接通過中間代碼來進行行級調試)。
   (3)可作為工具和函數庫使用。使用LLVM提供的工具可以比較容易地實現新的編程語言的優化編譯器或VM,或為現有的編程語言引入一些更好的優化/調試特性。
2.一般而言,程序切片可定義為:影響變量v在程序P中某一點狀態的所有語句和斷言的集合,程序片實際上是得到了程序P的一個有效子集,而省略了其它不相關代碼。一個程序切片是由程序中的一些語句和判定表達式組成的集合。這些語句和表達式可能會影響在程序中的某個位置i上所定義的或使用的變量v的值。而<i,v>就稱為切片準則。
     程序切片的方法主要有一下幾種:
  (1)靜態切片:對于程序P中某一點s,變量v的相對于靜態標準(s,v)的切片包括程序P中與v在s狀態相關的所有語句。為了構造程序切片,通常的算法均是采用基于程序依賴圖的的方法。程序依賴圖中節點之間存在兩種有向邊,控制依賴與數據依賴。前者描述程序中條件語句,循環語句等對嵌入其中的語句的控制關系。后者描述在賦語句中左值對右值的數據依賴。
  (2)動態切片:對于變量v,程序中某一點n,輸入序列x時,影響變量v在n狀態的語句與斷言。構造動態切片可以通過以下兩個途徑:a.執行記錄,將程序的執行記錄記為有n(I)(n代表語句,I代表執行次數)組成的記錄串,通過分析記錄串中元素的依賴關系,對記錄串著步削減,從而得到動態圖片。b.依賴圖,通過在執行中記錄程序依賴圖中的結點或邊的執行次數的方法,將記錄數為零的結點或邊去除,從而得到動態切片。
   (3)條件切片:有一些切片標準在動態切片和靜態切片之間采取了折中的態度。條件切片,對于變量v,程序中一點n,輸入序列x,關于輸入序列的斷言W,相對于條件切片標準(v,n,x,w)的切片包括當x使W為真時,影響v在n狀態的語句與斷言。
   (4)前向切片與后向切片:如果切片S有程序P中可能影響S處變量v的值得所有語句組成,這是一種前向切片。而后向切片S是程序P中興趣點s處變量v的值影響到的語句和謂詞組成的集合。
程序切片的應用也是十分廣泛的,比如進行軟件測試時它有著很高的效率:
基于程序切片的軟件測試是一種以程序或程序和需求相結合為基礎的測試,它根據程序的不同切片來縮小軟件的測試范圍,并提高軟件測試的效率。同時由于程序切片考慮程序存在各種依賴關系,使得測試的準確性得到提高。因為任何一個程序都可以和一組程序切片的并集等價,所以測試每個切片實際就是測試了整個程序,從而保證測試的充分性。軟件測試中,測試數據生成是至關重要的一步。引入切片技術的目的是,計算程序在某一具體輸入下興趣點處變量的當前值,以輔助測試數據的生成,提高測試數據的生成效率。
結合已有的研究,下面將大致描述今后的主要工作重點和步驟:
今后主要工作重點和步驟
1)因為對LLVM工具的不熟悉,必須繼續了解LLVM工具的應用及含義。以便后續程序的編寫。
2)學習和理解程序切片的應用,以及了解程序切片是如何實現的。
3)學習程序切片算法的編寫,程序切片算法的都是通過對圖的可達性求解來實現的,因此,我必須了解如何實現控制流圖,程序依賴圖和系統依賴圖等。
4)深刻學習程序切片算法的源程序代碼的實現,了解,如何將大段代碼通過程序切片,分解成一小段代碼,并且通過LLVM工具編譯出來。
5)對本設計課題深入研究過后,明確自己的研究方向和研究內容,提出算法或方案。
三、根據任務書的任務及文獻調研結果,初步擬定的執行(實施)方案(含具體進度計劃)
    1.認真了解LLVM和程序切片相關知識完成開題報告                          3 周
2.深入理解程序切片相關算法、LLVM中間表示結構                           5 周
3.重點研究JavaScript代碼切片方法等                                    5 周
4.實現一種基于LLVM的程序切片工具,并做相關實驗                        6 周
5.整理資料,論文寫作,準備答辯                                         3周  
四、主要參考文獻和資料
[1] Weiser M. Program slicing[J]. IEEE Transactions on Software Engineering , 1984, 16(5): 498-509
[2] Binkley D. and Gallagher K. B. Program slicing [J]. Advances in Computers, 1996, 43: 1-50
[3] 李必信. 程序切片技術及其應用[B]. 北京:科學出版社, 2006
[4] 陳振強. 基于依賴性分析的程序切片技術研究[D]. 東南大學, 2002
[5] The LLVM Compiler Infrastructure [E]. http://www.llvm.org.
[6] 董峰. LLVM編譯系統結構分析與后端移植[D]. 上海交通大學,2007
[7] 沈達宇. 基于LLVM框架的非控制數據保護[D]. 南京大學,2012
[8] 劉希. 面向Java程序錯誤定位的動態切片技術的研究與應用[D]. 湖南大學,2011
[9] 梁關林.基于LLVM的編譯器的設計與實現[D].太原科技大學,2012
[10]蔡素梅.程序切片技術及其應用的研究[D].華南師范大學增城學院,2010
竞彩交流群