本站简介作品介绍购买指南发布作品订做说明专业诚信
本站收录了大量的毕业设计和论文 [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