kaiti

来源:互联网 发布:china linux 编辑:程序博客网 时间:2024/06/16 05:51

开题报告

基于转换的程序分析技术的研究与应用

报告人:李广强

导师:    吴伟民

1  课题的选取、研究的意义

经过六年的扩招,我国的高等教育的规模从1998年的643万人增加到2004年的2000多万人,净增长1400万人[1];而全国普通高等学校教职工仅从1998年的102.96万人增加到2004年的161.07万人,净增长58万人[2],教职工的增长速度远远落后于高等教育扩招的速度。

以广东工业大学计算机学院为例,本科规模从1998年的不到200人猛增至现在的900多人,而教职工增长远远没跟上这个增长速度,扩招日渐暴露出问题。对于计算机的学生,动手能力十分重要,上机编程练习应当是学习的一个重要环节。但是由于种种因素,学生未能得到上机编程方面足够的指导,导致不少学生毕业之后编程能力低下。

我院虽然拥有数据结构的作业系统,学生可以在通过该系统做编程作业,但对学生的编程指导仍依赖于老师。而由于条件限制,老师不可能实现对学生的一对一的辅导,因而程序的自动分析诊断对于辅导学生、实现程序作业系统的作业、辅导一体化是十分必要的。

 

2  对国内外研究现状的分析

国内对程序分析、评价这方面的研究不多。

1992年,东南大学计算机科学与工程系研制了一种C源程序分析及理解的辅助工具——CAAT[11],其主要通过对源程序的逐级抽象理解对没有注释的反编译源代码进行添加注释、格式化显示,分析显示各类变量的使用情况,提供对宏、变量、结构、联合等定义说明的查询显示,另外可输出模块调用关系及源程序中的函数调用关系图。

我院正在使用的数据结构作业系统侧重于提供一个做程序作业的环境。该系统内嵌了一个编译器,通过检查输出结果来判断程序的正误,但并未在程序分析、语义查错方面做工作。

我们实验室02级学生樊敏[12]在毕业论文中,基于程序表达,程序转换,和程序比较等技术,对程序作业自动测评进行了研究,提出了程序对等结构,等价结构和程序结构规范化的概念,以及确定对等结构的方法和比较确定等价结构的规则。但是整个系统的设计很大程度上停留于理论阶段,缺乏实验验证。设计的测评目标语言是C语言的子集,没有指针,不允许递归,属于内部函数的测评,且只有基本类型和基本运算,尚不具有很大的实际应用价值。

国外有不少类似程序的分析评分系统。

C-Marker[3]是一个C语言的测评软件,它通过分析程序的结构和检查程序输入的正确性,实现对程序的测评。但是它对不同的作业进行评分十分不方便,而且只能编译和执行一个C文件,评分的规则也固定在 C-Marker 里面,不能轻易修改。

Generic Automated Marking Environment,简称GAME[4],是一个通用的wuhuif程序的测评工具。它针对C-Marker进行了改进,可以动态地对不同类型、不同语言的程序作业进行测评,而且还可以方便地修改评分测策略。但是GAME是建立在比较程序输出的基础上的,对于编译未通过的程序则无法分析和评分;学生也有可能通过虚假输出来作弊。

类似地,An Online Programming Assessment Tool[5],Online Judge[6], ASAP[7]也是通过匹配程序的输出结果判断程序的正误,只能处理语法级的错误,无法定位语义级的错误,缺乏分析、查错等辅导学生的功能。

国立新加坡大学计算机学院的SONGWEN XU等研制出SIPLeS-II[8,9]系统来分析学生程序,查找其中错误并提供出错提示,从而提供一个更为智能化的编程学习环境。其主要采用了下列一些新技术:采用了一种名为面向对象程序依赖关系图(AOPDG)的结构;基于转换的程序标准化方法;语义级程序比较;基于最大可能性的程序查错方法。

1. SIPLeS-II系统的工作流程

但是SIPLeS-II系统是针对SmallTalk语言的,而SmallTalk在我国并不普及,而且SIPLeS-II系统只能分析内部函数(intra-procedure),不能对交互函数(inter-procedure)和类的层次结构(class hierarchy)进行分析。

美国德州理工大学的Susan A. Mengel教授[13]描述了一个使用商用静态分析工具Verilog Logiscope对学生程序进行静态分析的实验,通过对程序风格(metrics)的统计分析,包括一致性(程序的大小、复杂度)、函数的数量、语句的数量、注释、调用图的质量等,从而判断程序的质量。这个实验的目的是探讨这种方法是否适用于程序质量的自动评分,但是这种方法的可行性一般[15]

Hristova[14]联系了58US News中列举的大学的计算机科学教授和ACMSIGCSE专家,收集了一系列wuhuif编程的常见错误(分类成语法错误、语义错误、逻辑错误),开发了Expresso。它具有较一般编译器高的分析查错功能,能为产生有用的错误信息并提供修改代码的建议。但是该系统的语义分析查错能力不强,只能分析出少量语义错误,例如不使用“.”号的类方法调用。

3  课题的研究的目标、内容和创新点

程序分析的对象是目前最普及的编程语言之一:C语言。

31 研究目标:

研究对C语言的学生程序的分析技术,向数据结构作业系统中嵌入自动分析学生程序并实时地向学生提供程序分析结果和辅导信息的功能,以减轻老师的工作负担,提高学生的实际编程能力。

32 研究内容和关键技术:

由于C语言程序的表达形式很丰富,同一个语义可以用不同形式的语句来表示,因此,要通过模板比较分析学生程序,需要对模板程序和学生程序进行规范化的转换,

2. 程序分析的整体架构

 

3.2.1          交互函数转换引擎

使用内联技术和程序切割技术实现对交互函数到内部函数的转换[10]。在C语言中,交互函数到内部函数的转换涉及到四个主要问题:多重定义、传值的参数传递、传指针的参数传递和递归。

(1)      多重定义

不同的函数内部可能使用了相同的变量名,因此如果直接将交互函数展开的话,会产生变量重名的问题。以一定的命名规则对交互函数的变量进行重命名,使其展开之后仍拥有唯一的变量名。

(2)      传值的参数传递

对于传值的参数,在函数内部对其修改,不影响变量在函数外的原值。因此,在展开交互函数时,应以一定的命名规则对交互函数的变量进行重命名。

(3)      传指针的参数传递

对于传指针的参数,在函数内部对其修改,直接影响变量在函数外的原值。因此,可以直接展开交互函数。

(4)      递归

使用内联技术,将间接递归转换成直接递归。

递归函数独立出来当作内部函数分析,并不展开。

 

3.2.2          内部函数分析引擎

(1)      将程序用抽象语法树(AST)表示

消除学生程序与模板程序在源代码水平的差异。学生程序和模板程序可能只有源代码级的差别,例如,空格、注释等的使用,在解析程序的时候,这些差别可以消除。

 

(2)      程序的基本转换

对学生程序和模板程序进行语句分离,临时变量声明,算术表达式标准化,控制结构标准化,布尔表达式标准化的处理。

 

(3)      将程序用程序依赖图(PDG[16,17]表示

消除语义级的差别,如不同的语句顺序。

 

(4)      程序的高级转换

前向替换,删除死代码,消除临时变量使用数目上的差别。

 

(5)      比较模板程序和学生程序

通过以上的转换处理之后,学生程序与模板程序已经规范化,可以通过比较学生程序与模板程序的差异判断,分析程序的正误。

 

3.3 创新点:

1.         分析出程序在语义级的错误

有些程序虽然语法没有错误并通过编译,但是语义上存在问题。例如一个排序的程序,程序编译通过,但是排序结果不正确,很明显是程序的语义出现了错误。程序分析的目标是分析出程序在语义上的错误,并予以指出。

2.         采用多模板解决程序在算法级的差异

程序算法的不同会导致程序表达的巨大的差异。针对同一个问题,不同的解决问题的逻辑会导致程序的控制结构上很大的差异。通过提供多个程序模板,尽量多地涵盖所有可能使用到的算法。

3.         实现对交互程序的分析

实际的程序通常都包含交互函数调用。交互函数是指调用了其他过程或函数的程序。一个交互函数的调用图如下图所示:

3. 交互函数的调用图

同一个程序可以以不同的形式编写,有的学生可能将所有代码写在main函数中,有的则可能划分若干小函数,也有可能划分的函数数目不同。即使是具有一定的程序分析能力的SIPLeS-II系统对这样的交互函数也是无能为力的。

本课题提出对交互函数进行保留语义的转换处理,再使用内部函数分析方法对其进行分析。

这种程序技术可以较容易地扩展应用到C++wuhuif的程序分析,为系统的进一步开发和完善提供了可能;也可以应用到软件的版权检测等。

 

5  本课题开发平台的选择

VC++6.0作为程序分析的开发平台,生成DLL文件,嵌入到用DELPHI6开发的数据结构作业系统中。

 

6  本课题阶段任务划分

 

第一阶段:20064月一20066

查资料,调研,理论学习、分析;

第二阶段:20066月一200610

基本实现内部函数分析引擎;

第三阶段:200610月一2007 1

基本实现交互函数转换引擎;

第四阶段:20071月-2007 2

跟数据结构作业系统整合、测试;

第五阶段:20072月一2007 4

系统试运行,撰写毕业论文;

第六阶段:20075月;

论文答辩。

 

参考文献

[1]    1998年全国教育事业发展统计公报. 1999.4.

[2]    2004年全国教育事业发展统计公报. 2005.4.

[3]    M. Ghosh, B. Verma, and A. Nguyen, “An Automatic Assessment Marking and Plagiarism Detection”, First International Conference on Information Technology and Applications (ICITA 2002), Bathurst, Australia, (2002).

[4]    Michael Blumenstein, Steve Green, Ann Nguyen and Vallipuram Muthukkumarasamy. GAME: A Generic Automated Marking Environment for Programming Assessment. Proceedings of the International Conference on Information Technology: Coding and Computing (ITCC’04).

[5]    Graham H.B. Roberts and Janet L.M. Verbyla. An Online Programming Assessment Tool. Australasian Computing Education Conference (ACE2003), Adelaide, Australia. Conferences in Research and Practice in Information Technology, Vol. 20.

[6]    Brenda Cheanga, Andy Kurniaa, Andrew Limb, Wee-Chong Oonc. On automated grading of programming assignments in an academic institution. Computers & Education 41 (2003) 121–131.

[7]    Christopher Douce, David Livingstone, James Orwell,Steve Grindle and Justin Cobb. A Technical Perspective on ASAP – Automated System for Assessment of Programming. 9th International Conference on Computer Aided Assessment, July, Loughborough, (2005).

[8]    Songwen Xu and Yam san Chee. IPLeS-II: An Automatic Program Diagnosis System for Programming Learning Environments. Proceedings of AI-ED 99: 9th International Conference on Artificial Intelligence in Education, Le Mans, France, pp. 397-404.

[9]    Songwen Xu and Yam san Chee. Transformation-based Diagnosis of Students Programs for Programming Tutoring Systems. IEEE Transactions on Software Engineering, Volume 29, Issue 4 (April 2003). Pages: 360–384.

[10]George C. Necula, Scott McPeak, S.P. Rahul and Westley Weimer. CIL: Intermediate Language and Tools for Analysis and Transformation of C Programs. Proceedings of Conference on Complier Construction, 2002.

[11]林阿龙.C源程序分析及理解的辅助工具——CAAT.小型微型计算机系统,13(1) ,1992.

[12]樊敏.程序作业自动测评的研究与实现.广东工业大学工学硕士学位论文.2005.

[13]Susan A. Mengel, Vinay Yerramilli: A case study of the static analysis of the quality of novice student programs. SIGCSE 1999: 78-82.

[14]Hristova, M., Misra, A., Rutter, M. and Mercuri, R. (2003): Identifying and Correcting wuhuif Programming Errors for Introductory Computer Science Students. Proc.the 34th SIGCSE technical symposium on Computer science education, Reno, Nevada, USA, 34:153-156,ACM Press.

[15]Web-CAT Reading List. http://web-cat.cs.vt.edu/WCWiki/ReadingList. 2006,2.

[16]J. Ferrante, K. Ottenstein, and J. Warren, “The Program Dependence Graph and its Use in Optimization,” ACM Transactions on Programming Languages, Vol. 9, no. 3, pp. 319-349, 1987.

[17]W. Yang, S. Horwitz, and T. Reps, “A Program Integration Algorithm that Accommodates Semantics-preserving Transformations,” ACM Transactions on Software Engineering and Methodology, Vol. 1, no. 3, pp. 310-354, 1992.

[18]Nghi Truong, Peter Bancroft & Paul Roe. ELP – A WEB ENVIRONMENT FOR LEARNING TO PROGRAM.ASCILITE 2002 conference proceeding.

[19]James Jackson, Michael Cobb, and Curtis Carver. Identifying Top wuhuif Errors for Novice Programmers.35th ASEE/IEEE Frontiers in Education Conference.

[20]Edmund Clarke, Daniel Kroening, and Flavio Lerda. A Tool for Checking ANSI-C Programs. TACAS 2004, LNCS 2988, pp. 168–176, 2004.

[21]Yichen Xie and Alex Aiken. Saturn: A SAT-based Tool for Bug Detection. Computer Science Department, Stanford University.

[22]Mike Joy. Overview of Automatic Assessment Computer Science Education. Department of Computer Science, University of Warwick.

[23]Nghi Truong, Paul Roe, Peter Bancroft. Static Analysis of Students’ wuhuif Programs. The sixth Australian Computing Education Conference (ACE2004).

[24]Yichen Xie, Alex Aiken. Scalable Error Detection using Boolean Satisfiability. POPL’05, January 12–14, 2005, Long Beach, California, USA.

[25]刘英,刘磊,张乃孝.基于线程的wuhuif 程序自动并行转换技术.软件学报,2001,12(3).

[26]张有为,罗军宏,汪永红.通用的汇编源程序框架分析技术研究.计算机工程与设计,20061,27(2).

[27]Fred DePiero. NETEXAM: A WEB-BASED ASSESSMENT TOOL FOR ABET2000. 31st ASEEREEE Frontiers in Education Conference.

[28]李莹,张琴燕.程序理解.计算机应用研究,2001,6.

[29]周欣,孙家骕,杨芙清.青鸟C++程序理解工具.计算机工程,26(11) ,200011.

[30]纳荣.在程序理解中使用切片技术.计算机工程与设计,24(1) ,20031.

[31]徐宝文,张挺,陈振强.递归子程序的依赖性分析及其应用.计算机学报,24(11),200111.

[32]魏志广.基于C语言的逆向工程的分析与实现.河北工业大学,计算机应用技术硕士学位论文,20042.

 
原创粉丝点击