作业要求
• 主要任务
• 获取代码源文件,可以从ACM题库、OJ系统上爬取,比如:https://codeforces.com/
或者其他一些开源网站上可以拿到的开源项目,GitHub、Gitee等
• 从代码文件中自动识别出调用代码库中的函数的语句,在该语句的下一行添加一个处理函数,将返回值的对象和方法参数写入文件。(即测试相同代码相同输入参数在不同代码库版本下的输出是否不同)
例如:
TreeSet
for(int i = 0; i<10; i++) ts.add(i); ----line2
SortedSet
程序需要识别出第三行是代码库(不是自定义的函数)的调用,并且有对象接收了返回值,最后插装的处理函数实现将SortedSet对象s中的内容写入文件1中,将调用函数的参数内容写到文件2中,文件1的命名为:
源代码名称_文件Id_line调用出现的行序号_类名_方法名_代码库版本号.txt
文件2的命名为:
Input_源代码名称_文件Id _line调用出现的行序号_类名_方法名_代码库版本号.txt
例如UtkarshAndSubarrayXor.java_187_2_line29_java.util.HashSet_iterator()_1.8.0_231.txt
• 比较在参数内容相同的情况下不同代码库版本的运行输出是否有不同。
• 实现方法
提示:
• 识别是否是代码库调用的语句,可以使用正则表达式(如果代码库中有)逐行匹配,也可以使用JavaParser工具类解析Java文档(如果做Jdk1.7和Jdk1.8的比较)
• 代码插装涉及到文件读写,可以先将内容分块存到一个对象中,最后再一次性写入。
• 比较输出是否相同时,需要先判断文件名除版本号都相同的两个文件的Input文件是否一致,不一致直接忽略,如果一致,比较结果内容是否一致
• 提交材料
• 你写的代码工程文件
• 测试用的源代码文件
• 产生的所有结果文件
• 比较后有差异的结果文件。