结构语义相似的程序识别方法研究
详细信息    本馆镜像全文|  推荐本文 |  |   获取CNKI官网全文
摘要
程序识别使用一个已知模式分析给定程序,从而识别给定程序的意图。程序识别在程序理解、软件系统分析、编译器优化、重复代码检查和软件缺陷检测等领域中有着广泛的应用。
     本文提出结构语义相似的程序识别方法。主要研究内容包括以下四部分:
     针对代码多样化给程序分析带来困难的问题,提出基于系统依赖图的程序标准化方法。改进了传统的系统依赖图表示,使其充分表示程序的语法结构与语义。并针对已有的指针分析算法不适合于程序标准化的问题,基于控制依赖树和改进的指向表示方法提出流敏感和上下文敏感的指针分析算法,提高指针分析和数据流分析的准确性,并使得指针分析结果可直接应用于程序标准化转换中。最后将改进的系统依赖图、指针分析算法与程序标准化过程有机结合,提出基于系统依赖图的程序标准化模型,根据程序标准化转换规则,对系统依赖图进行语义不变的转换,从而消除代码多样化。实验结果表明,本文提出的指针分析算法准确性高于已有的Emami指针分析算法的准确性,并且应用于程序标准化时可显著提高代码多样化消除率。本文的程序标准化方法的代码多样化消除率高于已有的Hattori与Ishi方法的代码多样化消除率,可以有效地消除代码多样化,提高程序分析的灵活性,为判定程序的结构语义相似奠定良好的基础。
     针对基于图提取子程序时间与空间开销巨大的问题,提出结构度量相似的候选子程序提取方法。在已有的代码相似度及编辑距离的定理和推论的基础上提出新的推论,将特征向量聚类应用于候选子程序提取中。首先,将代码表示为控制依赖树,通过基本代码标准化,消除影响度量值计算的代码多样化。然后,采用特征向量描述程序的结构信息,将复杂的图的相似度求解问题转换为简单的相似向量的聚类问题,快速提取可能与给定模式相似的候选子程序。实验结果表明,该方法能够过滤掉大部分不相似代码,并且可以识别含有代码多样化的代码,为大规模软件在语义级别上的程序识别奠定基础。
     针对已有的程序识别方法不能较好地在语义级别上识别程序,并且不能定量地衡量代码的语义相似度的问题,提出基于系统依赖图的语义级别的程序识别方法。在此基础上提出基于程序转换和语义分析的编程题自动评分方法,克服了传统的基于动态测试自动评分和基于软件度量分析的自动评分方法没有考虑学生程序是怎样实现编程任务的缺陷,为编程题自动评分提供新思路。实验结果表明,基于系统依赖图的语义级别的程序识别方法能够准确计算代码的语义相似度,较好地解决程序识别结果的表示和准确性问题。
     针对传统基于度量值的程序识别方法准确率低和基于图的程序识别方法复杂度高的问题,在上述研究的基础上,提出度量值和图相结合的程序识别方法。首先,将模式程序和用户程序表示为改进的系统依赖图。然后,以模块为单位,采用结构度量相似的候选子程序提取方法,缩小语义级别程序识别的搜索空间,提高算法的效率。最后,对可能相似的候选子程序进行高级代码多样化和精确的语义级别的程序匹配,识别语义相似的子程序。在此基础上提出语义级别的相似代码检测方法,为相似代码检测提供新思路。实验结果表明,度量值和图相结合的程序识别方法可以有效地处理大规模代码,不但能识别完全相同的代码,还可以识别包含代码多样化的相似代码,实现语义级别的程序识别,准确率和效率高于GPlag和integrated logic-domain model两种方法。
     综上所述,本文提出了结构语义相似的程序识别方法,解决了代码多样化的识别、识别结果的表示和准确性、识别方法的可扩展性等关键技术问题。
Program recognition recognizes the intention of a given program, by analyzing this program with a known pattern. It has wide application such as program comprehension, software system analysis, compiler optimizing, duplicated code detection, and bug detection.
     This dissertation proposes a structural semantic similar program recognition approach. The major original works in the research are listed in details as follows.
     Code variations are widely believed to impede program analysis. To solve this problem, a program normalization approach based on system dependence graph is proposed. The traditional representation of system dependence graph is augmented to sufficiently represent the syntactical structure and the semantic of programs. Existing pointer analysis algorithms usually adopt a low-level intermediate representation which can not sufficiently represent the syntactical structure and the semantic of programs. This makes them difficult to be applied to program normalization. To solve this problem, a flow-sensitive and context-sensitive pointer analysis algorithm based on control dependence tree is presented. The control dependence tree is used as the intermediate representation for the source program, and an improved point-to representation is proposed to represent alias information. Based on this, data flow equations are defined to compute the point-to information by traversing the control dependence tree. The point-to information can be directly used in program normalization to improve the accuracy of data flow analysis. Finally, the augmented system dependence graph, the pointer analysis, and the program normalization process are combined to form the model of program normalization. Semantic-preserving transformations are performed on the system dependence graphs of programs according to a set of predefined rules. As a result, code variations are removed. Experimental results show that the accuracy of our pointer analysis approach is higher than that of Emami’s approach, and our pointer analysis approach can greatly improve the variation removal rate of the program normalization. The variation remove rate of our normalization approach is higher than that of the normalization approach proposed by Hattori and Ishi. Our normalization approach establishes a good framework for testing the semantic equivalence of source codes, and it can facilitate program analysis.
     The approach of extracting sub-programs based on graphs is high in space and time complexity. To solve this problem, a candidate sub-program extraction approach based on structural metrics similarity is proposed. Based on the existing theorems and corollaries of tree similarity and editing distance, new corollaries are proposed to apply the vector clustering to the candidate sub-programs extraction. First, source codes are represented as control dependence trees, and basic code normalization is performed to eliminate basic code variations that affect the calculation of metrics. Then, vectors are computed to describe the structural information of source codes, and the difficult graph similarity problem is reduced to a simpler vector clustering problem. Candidate sub-programs are quickly extracted. Experimental results show that most of the dissimilar sub-programs can be filtered out, and sub-programs with code variations can be recognized. This approach lays a good foundation for large-sized program recognition on the semantic level.
     Most of the traditional program recognition approach can not analyze code on the semantic level and can not evaluate the semantic similarity quantitatively. To solve this problem, a program recognition approach based on system dependence graph on the semantic level is proposed. Based on this approach, an automatic grading approach based on program transformation and semantic analysis is proposed. It can conquer the problem of the traditional automatic grading approaches which do not take into account how a student program answers a given programming task. Experimental results show that the program recognition approach based on system dependence graph can well solve the problem of the representation and accuracy of the recognition results.
     The graph-based program recognition approach can well recognize structurally and semantically similar programs, but it has a high computation complexity. On the contrary, the metrics-based program recogniton approach has a lower computation complexity but a lower precision. To take advantages of these two approaches, a metrics-based and graph-based combined approach for program recognition is proposed based on the above researches. First, source codes are represented as augmented system dependence graphs. Then, the candidate sub-program extraction based on structural metrics similarity according to a granularity of module is performed to filter out most of the dissimilar code pairs so as to lower the computational complexity. After that, advanced code normalization is performed on the candidate sub-programs to remove code variations so as to recognize similar sub-programs on the semantic level. Finally, program matching is performed on the normalized control dependence trees to output semantically similar sub-programs. A semantically similar code detection approach is proposed based on this approach, to provide a new insight into similar code detection. Experimental results show that this approach can be applied to large softwares, and it can recognize not only identical sub-programs but also sub-programs with code variations. The precision of this approach is higher than those of GPlag and integrated logic-domain model.
     In conclusion, this dissertation has proposed a structural semantic similar program recognition approach, and solved the following key problems: code variation recognition, the representation and precision of the results, the scalability.
引文
1 K. Kontogiannis, R. DeMori, E. Merlo, M. Galler and M.Bernstein. Pattern Matching for Clone and Concept Detection. Automated Software Engineering. 1996,3(1-2):77~108
    2 R. Metzger, Z. Wen. Automatic Algorithm Recognition: A New Approach to Program Optimization. MIT Press. 2000
    3 M. Balazinska, E. Merlo, M. Dagenais, B. Lague and K. Kontogiannis. Advanced Clone-Analysis to Support Object-Oriented System Refactoring. Proceedings of the Seventh Working Conference on Reverse Engineering, Brisbane, Australia, 2000:98~107
    4 T. Kamiya, S. Kusumoto and K. Inoue. CCFinder: A Multi-Linguistic Token-based Code Clone Detection System for Large Scale Source Code. IEEE Trans. on Software Engineering. 2002,28(7):654~670
    5 R. Komondoor, S. Horwitz. Eliminating Duplication in Source Code via Procedure Extraction. Technical Report 1461, UW-Madison Dept. of Computer Sciences, December 2002
    6 E. Duala-Ekoko, M. P. Robillard. Tracking Code Clones in Evolving Software. Proceedings of the 1st Conference on India Software Engineering Conference, Hyderabad, India, 2008:19~20
    7 L. Jiang, Z. Su and E. Chiu.Context-based Detection of Clone-Related Bugs. Proceedings of the 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering, Dubrovnik, Croatia, 2007:55~64
    8 E. Juergens, B. Hummel, F. Deissenboeck and M. Feilkas. Static Bug Detection through Analysis of Inconsistent Clones. Software Engineering (Workshops), 2008:443~446
    9 Z. Li, S. Lu, S. Myagmar, Y. Zhou. CP-Miner: a Tool for Finding Copy-Paste and Related Bugs in Operating System Code. Proc of Operating System Design and Implementation, 2004:289~302
    10 Z. Li, S. Lu, S. Myagmar and Y. Zhou. CP-Miner: Finding Copy-Paste and RelatedBugs in Large-Scale Software Code. IEEE Trans. on Software Engineering. 2006, 32(3):176~192
    11 Y. Hayase, Y. Y. Lee and K. Inoue. A Criterion for Filtering Code Clone Related Bugs. Proceedings of the 2008 Workshop on Defects in Large Software Systems, Seattle, Washington, 2008:37~38.
    12 F. Rosales, A. Garcia, S. Rodriguez, J. L. Pedraza, R. Mendez and M. M. Nieto. Detection of Plagiarism in Programming Assignments. IEEE Trans. on Education, 2008,51(2),174~183
    13 J. Ji, G. Woo and H. Cho. A Source Code Linearization Technique for Detecting Plagiarized Programs. Proceedings of the 12th annual SIGCSE Conference on Innovation and Technology in Computer Science Education, Dundee, Scotland, 2007:73~77
    14 L. Zhang, Y. Zhuang and Z. Yuan. A Program Plagiarism Detection Model Based on Information Distance and Clustering. 2007 International Conference on Intelligent Pervasive Computing, 2007:431~436
    15邓爱萍.程序源代码复制检测技术研究.湖南大学硕士论文. 2008
    16 K. Kaijiri. Program diagnosis system using World Wide Web. Proc. of the 3rd JCKBSE, 1998:157~164
    17 V. Kozaczynski, J. Ning and A. Engberts. Program Concept Recognition and Transformation. IEEE Trans. on Software Engineering. 1992,18(12):1065~1075
    18 A. Quilici. A Hybrid Approach to Recognizing Programming Plans. Working Conference on Reverse Engineering, New York, 1993:126~133
    19 D. Chin, A. Quilici. DECODE: A Cooperative Program Understanding Environment. Journal of Software Maintenance. 1996,8(11):3~33
    20 T. J. Biggerstaff, B. G. Mitbander and D .E.Webster. Program Understanding and the Concept Assignment Problem. Communications of the ACM. 1994,37(5):72~82
    21 R. Finkbine. Pattern Recognition of the Selection Sort Algorithm. Proceedings of the First IEEE International Conference on Cognitive Informatics, 2002:313~316
    22钱剑飞.基于特征符号的程序理解研究.浙江大学博士学位论文. 2006
    23 L. Wills. Flexible Control for Program Recognition. IEEE Working Conference on Reverse Engineering, 1993:134~143
    24 H. Ueno. A Generalized Knowledge-Based Approach to Comprehend Pascal and C programs. IEICE Transactions on Information and Systems. 2000,83(4):591~598
    25 C. Alias, D. Barthou. Algorithm Recognition Based on Demand-Driven Data-Flow Analysis. Proceedings of the 10th Working Conference on Reverse Engineering, 2003:296~305
    26 S. Duscasse, M. Rieger and S. Demeyer. A Language Independent Approach for Detecting Duplicated Code. Int’l Conf. on Software Maintenance, 1999:109~118
    27 C. K. Roy, J. R. Cordy. NICAD: Accurate Detection of Near-Miss Intentional Clones Using Flexible Pretty-Printing and Code Normalization. The 16th IEEE International Conference on Program Comprehension, 2008:172~181
    28 B. Baker. On Finding Duplication and Near-Duplication in Large Software Systems. IEEE Working Conference on Reverse Engineering, 1995:86~95
    29 B. Baker. Parameterized Duplication in Strings: Algorithms and an Application to Software Maintenance. SIAM Journal on Computing. 1997,26(5):1343~1362
    30 H. Yoshiki, K. Toshihiro, K. Shinji and I. Katsuro. Method and Implementation for Investigating Code Clones in a Software System. Information and Software Technology. 2007,49:985~998
    31 S. Livieri, Y. Higo, M. Matsushita and K. Inoue. Very-large Scale Code Clone Analysis and Visualization of Open Source Programs Using Distributed CCFinder. IEEE Proceedings of the 29th International Conference on Software Engineering, 2007:106~115
    32 E. Juergens, F. Deissenboeck and B. Hummel. CloneDetective– A Workbench for Clone Detection Research. 31st International Conference on Software Engineering, Vancouver, Canada, 2009:1~4
    33 R. Smith, S. Horwitz. Detecting and Measuring Similarity in Code Clones. 3rd International Workshop on Software Clones, Kaiserslautern, Germany, 2009:8~14
    34于海英,赵俊岚.最长公共子序列算法在程序代码相似度度量中的应用.内蒙古大学学报. 2008,39(2):225~229
    35张鹏. C程序相似代码识别方法的研究与实现.大连理工大学硕士学位论文. 2007
    36邓爱萍.程序代码相似度度量算法研究.计算机工程与设计. 2008,29(17): 4636~4639
    37 S. Schleimer, D. S. Wilkerson and A. Aiken. Winnowing: Local Algorithms for Document Fingerprinting. SIGMOD2003, 2003:76~85
    38 L. Prechelt, G. Malpohl and M. Philippsen. JPlag: Finding Plagiarisms among a Setof Programs. Technical Report No. 1/00, University of Karlsruhe, Department of Informatics, 2000
    39 J. Mayrand, C. Leblanc and E. Merlo. Experiment on the Automatic Detection of Function Clones in a Software System Using Metrics. Proceedings of the International Conference on Software Maintenance, 1997:314~321
    40 J. F. Patenaude, E. Merlo, M. Dagenais and B. Lague. Extending Software Quality Assessment Techniques to Java Systems. In Proceedings of the 7th International Work-shop on Program Comprehension, Pittsburgh, PA, USA, 1999:49~56
    41苏舟.基于向量空间范围搜索的大型软件相似度检测.浙江大学硕士学位论文. 2008
    42 M. Balazinska, E. Merlo, M. Dagenais, B. lague and K.A. Kontogiannis. Measuring Clone based Reengieering Opportunities. IEEE Int’l Conf. on Software Maintenance, 1999:326~336
    43 E. L. Jones. Metrics Based Plagarism Monitoring. Proceedings of the Sixth Annual CCSC Northeastern Conference on The journal of Computing in Small Colleges, Middlebury, Vermont, United States, 2001:253~261
    44 I. D. Baxter, A. Yahin, L. Moura, M. Sant’Anna and L. Bier. Clone Detection Using Abstract Syntax Trees. International Conference on Software Maintenance, 1998:368~377
    45 A. Raza, G. Vogel and E. Plodereder. A Tool Suite for Program Analysis and Reverse Engineering. Proceedings of the 11th Ada-Europe International Conference on Reliable Software Technologies, Porto, Portugal, 2006:71~82
    46 P. Bulychev, M. Minea. An Evaluation of Duplicate Code Detection using Anti-unification. 3rd International Workshop on Software Clones, Kaiserslautern, Germany,2009:15~20
    47李亚军,徐宝文,周晓宇.基于AST的克隆序列与克隆类识别.东南大学学报. 2008,38(2):228~232
    48 W. Yang. Identifying Syntactic Differences between Two Programs. Software: Practice and Experience. 1991,21(7):739~755
    49 G. Fischer, J. W. Gudenberg. Simplifying Source Code Analysis by an XML Representation. Softwaretechnik Trends, 2003,23(2):49~50
    50 W. S. Evans, C. W. Fraser and F. Ma. Clone Detection via Structural Abstraction. Proceedings of the 14th Conference on Reverse Engineering, Vancouver, BC,2007:150~159
    51 R. Koschke, F. Ralke and P. Frenzel. Clone Detection using Abstract Syntax Suffix Trees. WCRE, 2006:253~262.
    52 L. Jiang, M. Ghassan, Z. Su and G. Stephane. DECKARD: Scalable and Accurate Tree-Based Detection of Code Clones. .29th International Conference on Software Engineering, 2007:96~105
    53 G. Mishne. Source Code Retrieval using Conceptual Graphs. Master of Logic Thesis. Institute for Logic, Language and Computation (ILLC) University of Amsterdam. 2003
    54 G. Mishne, M. Rijke. Source Code Retrieval using Conceptual Similarity. Proc. 2004 Conf. Computer Assisted Information Retrieval, 2004:539~554
    55 J. Krinke. Identifying Similar Code with Program Dependence Graphs. Proceedings Eighth Working Conference on Reverse Engineering, 2001:301~309
    56 R. Komondoor, S. Horwitz. Using Slicing to Identify Duplication in Source Code. Eighth International Static Analysis Symposium, 2001:40~56
    57 C. Liu, C. Chen and J. Han. GPLAG: Detection of Software Plagiarism by Program Dependence Graph Analysis. Proceedings of the 12th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, Philadelphia, PA, USA, 2006:872~881
    58 W. Qu, M. Jiang. Software Reuse Detection using an Integrated Space-Logic Domain Model. IEEE International Conference on Information Reuse and Integration, 2007:638~643
    59 M. Gabel, L. Jiang and Z. Su. Scalable Detection of Semantic Clones. Proceedings of the 30th International Conference on Software Engineering, 2008:321~330
    60 M. Rieger. Effective Clone Detection Without Language Barriers. Dissertation, University of Bern, Switzerland. 2005
    61 N. Hattori, N. Ishii. A Method to Remove Variations in Source Codes. Information and Software Technology. 1996,38:25~36
    62 H. Ueno. A Program Normalization to Improve Flexibility of Knowledge-based Program Understander. IEICE Transaction on Information and Systems. 1998,81:1323~1329
    63 M. Jonge, E. Visser and J. Visser. XT: a Bundle of Program Transformation Tools. Workshop on Language Descriptions, Tools and Applications, 2001
    64 E. Visser. A Survey of Strategies in Rule-based Program Transformation Systems. Journal of Symbolic Computation. 2005,40:831~873
    65 J. Ferrante, K. J. Ottenstein and J. D. Warren. The Program Dependence Graph and its Use in Optimization. ACM Transactions on Programming Languages and Systems. 1987,9:319~349
    66 P. E. Livadas, T. Johnson. An Optimal Algorithm for the Construction of the System Dependence Graph. Information Sciences. 2000,125:99~131
    67 S. Horwitz, T. Reps and D. Binkley. Interprocedural Slicing using Dependence Graphs. ACM Transactions on Programming Languages and Systems. 1990:26~60
    68 P. Matsumoto, P. Saito and P. Fujita. Equivalence Checking of C Programs by Locally Performing Symbolic Simulation on Dependence Graphs. IEEE Proceedings of the 7th International Symposium on Quality Electronic Design, 2006:370~375
    69 F. Ricca, P. Tonella. Construction of the System Dependence Graph for Web Application Slicing. Proceeding of the Second IEEE International Workshop on Source Code Analysis and Manipulation, 2002:123~132
    70 M. Harman, D. Binkley and S. Danicic. Amorphous Program Slicing. The Journal of Systems and Software. 2003,68:45~64
    71 M. Sridharan, P. J. Fink and R. Bodik. Thin Slicing. Proceedings of the 2007 ACM SIGPLAN Conference on Programming Language Design and Implementation, 2007:112~ 122
    72 P. Anderson, T. Reps and T. Teitelbaum. Design and Implementation of a Fine-Grained Software Inspection Tool. IEEE Transactions on Software Engineering. 2003,29:721~733
    73 P. Anderson, M. Zarins. The CodeSurfer Software Understanding Platform. Proceedings of the 13th International Workshop on Program Comprehension, 2005:147~148
    74 J. Miller, M. Reformat and H. Zhang. Automatic Test Data Generation using Genetic Algorithm and Program Dependence Graphs. Information and Software Technology. 2006,48:586~605
    75 S. Horwitz. Tool Support for Improving Test Coverage. Proceedings of the 11th European Symposium on Programming Languages and Systems, 2002:162~177
    76 G. Snelting, T. Robschink, J. Krinke. Efficient Path Conditions in Dependence Graphs for Software Safety Analysis. ACM Transactions on Software Engineeringand Methodology. 2006,15(4):410~457
    77 J. Dolby, M. Vaziri and F. Tip. Finding Bugs Efficiently with a SAT Solver. Proceedings of the the 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering, Dubrovnik, Croatia, 2007:195~204
    78 R. Chang, A. Podgurski, J. Yang. Finding What's not There: a New Approach to Revealing Neglected Conditions. Software. Proceedings of the 2007 International Symposium on Software Testing and Analysis, London, 2007:163~173
    79 M. H. Williams, H. L. Ossher. Conversion of Unstructured Flow Diagrams to Structured. Computer Journal. 1975,21(2):161~167
    80 Z. Ammarguellat. A Control-flow Normalization Algorithm and its Complexity. Software Engineering. 1992,18(3):237~251
    81 M. Hind. Pointer Analysis: Haven't We Solved this Problem yet?. Proceedings of the 2001 ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering. 2001:54~61
    82 S. Z. Guyer, C. Lin. Error Checking with Client-Driven Pointer Analysis. Science of Computer Programming. 2005,58(1-2):83~114
    83 D. J. Pearce, P. H. J. Kelly and C. Hankin. Efficient Field-Sensitive Pointer Analysis of C. ACM Transactions on Programming Languages and Systems. 2007,30(1): 4:1~4:42
    84 M. Emami, R. Ghiya and L. J. Hendren. Context-Sensitive Interprocedural Points-to Analysis. Function Pointers Proceedings of the ACM SIGPLAN 1994 Conference on Programming Language Design and Implementation, 1994:242~256
    85 R. P. Wilson, M. S. Lam. Efficient Context-Sensitive Pointer Analysis for C Programs. Proceedings of the ACM SIGPLAN 1995 Conference on Programming Language Design and Implementation, 1995:1~12
    86黄波,臧斌宇,俞一峻,朱传琪.指针数组的过程内别名分析.软件学报. 1999,10(6):600~607
    87黄波,臧斌宇,俞一峻,朱传琪.上下文敏感的过程间指针分析.计算机学报. 2000,23(5):477~485
    88 B. Hardekopf, C. Lin. The Ant and the Grasshopper: Fast and Accurate Pointer Analysis for Millions of Lines of Code. Proceedings of the 2007 ACM SIGPLAN Conference on Programming Language Design and Implementation, California,2007:290~299
    89 J. D. Silva, J. G. Steffan. A Probabilistic Pointer Analysis for Speculative Optimizations. Proceedings of the 12th International Conference on Architectural Support for Programming Languages and Operating Systems. California, 2006:416~425
    90 S. Horwitz, J. Prins and T. Reps. On the Adequacy of Program Dependence Graph for Representing Programs. Fifteenth ACM Symposium on Principles of Programming Language, San Diego, CA, 1988:146~157
    91 D. Binkley, S. Horwitz and T. Reps. The Multi-Procedure Equivalence Theorem. TR-890, Computer Sciences Department, University of Wisconsin, Madison, WI, 1989
    92 S. W. Xu, Y. S. Chee. Transformation-based Diagnosis of Student Programs for Programming Tutoring Systems. IEEE Trans. on Software Engineering. 2003,29(4):360~384
    93 M. Arnold, S. Fink, V. Sarkar and P. F. Sweeney. A Comparative Study of Static and Profile-based Heuristics for Inlining. Proceedings of the ACM SIGPLAN Workshop on Dynamic and Adaptive Compilation and Optimization, 2000:52~64
    94 P. P. Chang, S. A. Mahlke and W. Y. Chen. Profile-Guided Context-Sensitive Program Analysis. Software-Practice and Experience. 1992:349~369
    95 K. D. Cooper, M. W. Hall and L. Torczon. An Experiment with Inline Substitution. Software-Practice and Experience. 1991:581~601
    96 D. Das. Function Inlining versus Function Cloning. ACM SIGPLAN Notices. 2003:23~29
    97 K. Hazelwood, D. Grove. Adaptive Online Context-Sensitive Inlining. First Annual IEEE/ACM Interational Conference on Code Generation and Optimization, 2003:253~264
    98 O. Kaser, C. R. Ramakrishnan. Evaluating Inlining Techniques. COMPUT LANG. 1998:55~72
    99 D. R. Chakrabarti, S. M. Liu. Inline Analysis: beyond Selection Heuristics. Proceedings of the International Symposium on Code Generation and Optimization, 2006:221~232
    100 J. Cavazos, M. F. P. O'Boyle. Automatic Tuning of Inlining Heuristics. Proceedings of the 2005 ACM/IEEE Conference on Supercomputing, 2005:14~24
    101 M. Datar, N. Immorlica, P. Indyk and V. S. Mirrokni. Locality-Sensitive HashingScheme based on p-Stable Distributions. Proceedings of the Twentieth Annual Symposium on Computational Geometry, New York, 2004:253~262.
    102 K. Zhang, D. Shasha. Simple Fast Algorithms for the Editing Distance between Trees and Related Problems. SIAM Journal on Computing. 1989,18:1245~1262
    103 K. Ala-Mutka. A Survey of Automated Assessment Approaches for Programming Assignments. Computer Science Education. 2005,16(2):83~102
    104 E. L. Jones. Grading Student Programs-a Software Testing Approach. Journal of Computing Sciences in Colleges. 2001,16:187~194
    105 R. Saikkonen, L. Malmi and A. Korhonen. Fully Automatic Assessment of Programming Exercises. 6th Annu. Conf. on Innovation and Technology in Computer Science Education, Canterbury, 2001:133~136
    106 D. S. Morris. Automatic Grading of Student’s Programming Assignments: an Interactive Process and Suit of Programs. 33rd Annu. Frontiers in Education, Boulder, 2003:1~6
    107 C. Brenda, K. Andy, L. Andrew O. W. Chong. On Automated Grading of Programming Assignments in an Academic Institution. Computers and Education. 2003,41:121~131
    108 C. E. Ellsworth, J. B. Fenwick B. L. Kurtz. The Quiver System. 35th SIGCSE Technical Symp. on Computer Science Education, Virginia, 2004:205~209
    109 C. Daly, J. M. Horgan. An Automated Learning System for Java Programming. IEEE Trans. on Education. 2004,47:10~17
    110 M. Farrow, P. J. B. King. Experiences with Online Programming Examinations. IEEE Trans. on Education.2008,51:251~255
    111许又泉. FOXBASE自动阅卷程序设计的探讨.邵阳高等专科学校学报. 1999, 12(2):119~121
    112李久仲.计算机上机考试阅卷系统BASIC模块软件设计.信阳师范学院学报. 1999,12(3):345~349
    113黄生叶.编程考试中源程序的机器评卷算法.烟台师范学院学报. 2000,16(4):268~271
    114段汉周,凌捷,郑衍衡. VB程序设计考核自动评阅系统中若干问题的研究.计算机工程, 2001,27(4),167~168.
    115李文新,郭炜.北京大学程序在线评测系统及其应用.吉林大学学报. 2005,23(2):170~177
    116贺志明.学生程序的柔性自动测试与评分系统.上海工程技术大学学报. 2005,19(2):145~149
    117苑文会,彭四伟.源代码在线评测系统的设计与实现.计算机与数学工程. 2006,34(9):156
    118 A. Lake. STYLE: an Automated Program Style Analyzer for Pascal. SIGCSE Bulletin. 1990,22(3):29~33
    119 S. A. Mengel, J. Ulans. Using Verilog LOGISCOPE to Analyze Student Programs. Frontiers in Education Conference. 1998,3(2):1213~1218
    120 K. Ala-Mutka, T. Uimonen. Supporting Students in C++ Programming Courses with Automatic Program Style Assessment. Journal of Information Technology Education. 2004,3:245~262
    121 C. A. Higgins, G. Gray, P. Symeonidis and A. Tsintsifas, Automated Assessment and Experiences of Teaching Programming. ACM Journal of Educational Resources in Computing. 2005,5(5):1~21
    122 M. Joy, N. Griffiths and R. Boyatt. The Boss Online Submission and Assessment System. ACM Journal on Educational Resources in Computing. 2005,5(2):1~28
    123 N. Truong, P. Roe and P. Bancroft. ELP–a Web Environment for Learning to Program. The 19th Annual Conference of the Australasian Society for Computers in Learning in Tertiary Education, Auckland, 2002:661~670
    124黄思先.程序设计考试中填空题的自动评分.福建电脑. 2003,13(7):26~27
    125王邯,肖俊,冯刚.网络教学中C程序设计填空题机器批改的实现.计算机与数字工程. 2003,31(1):37~41
    126 S. Demeyer, S. Ducasse and O. Nierstrasz. Object-Oriented Reengineering Patterns. Morgan Kaufmann, 2002
    127 A. Chou, J. Yang, B. Chelf, S. Hallem and D.R. Engler. An Empirical Study of Operating System Errors. Proc. Symp. Operating Systems Principles, 2001:73~88
    128 W. G. Griswold. Program Restructuring as an Aid to Software Maintenance. University of Washington. 1991

© 2004-2018 中国地质图书馆版权所有 京ICP备05064691号 京公网安备11010802017129号

地址:北京市海淀区学院路29号 邮编:100083

电话:办公室:(+86 10)66554848;文献借阅、咨询服务、科技查新:66554700