个人项目-论文查重

news/2024/11/15 21:53:38/文章来源:https://www.cnblogs.com/chocohql/p/18403329
这个作业属于哪个课程 班级链接
这个作业要求在哪里 个人项目 - 作业 - 计科22级12班 - 班级博客 - 博客园 (cnblogs.com)
这个作业的目标 准备、创建、开发、管理、测试个人项目

GitHub项目链接

https://github.com/chocohQL/3122004348-01

可运行 jar 已发布在最新 releases

项目设计

项目分为主函数、参数解析运行工具、查重算法工具、异常提示信息、Junit单元测试5部分:

  • 主函数(Main):主函数负责接收命令行参数,调用参数解析运行工具并捕获打印可能发送的异常。
  • 参数解析运行工具(DuplicateCheck):负责解析命令行参数、加载源文件和目标文件、调用查重算法工具得到查重结果、输出结果文件,出现异常抛出不同的异常信息。
  • 查重算法工具(HammingUtil):实现SimHash海明距离算法。
  • 异常提示信息(ExceptionResult):统一管理不同异常对应不同提示信息。
  • Junit单元测试(MainTest):集成Junit单元测试工具调用主函数run方法,模拟命令行输入不同参数得到的结果。

项目调用流程:Main(run) -> DuplicateCheck(check) -> HammingUtil(getSimilarity)

项目结构

src
├── main 
│       └── java
│       │       └── DuplicateCheck	// 参数解析运行工具
│       │       └── ExceptionResult	// 异常提示信息
│       │       └── HammingUtil		// 查重算法工具
│       │       └── Main		// 主函数
│       └── resources			// 测试输入输出文件
│       │       └── result
│       │       └── orig.txt
│       │       └── ...
├── test							
│       └── java
│       │       └── MainTest.java	// 测试样例

性能分析

黄色部分为项目函数的消耗,紫色部分为junit框架本身的消耗,需要关注运行事件和相较父级的占用时间,不需要观察全部的占用。项目核心最耗时的是计算SimHash码的部分。

异常和测试

通过模拟参数为空、参数为null、参数不全、错误文件地址、正确文件地址等不同情况验证程序运行。

不同的异常可以总结为三种:

public static final String UNABLE_LOAD_FILE = "无法加载文件";
public static final String UNABLE_EXPORT_FILE = "无法输出文件";
public static final String PARAMETER_EXCEPTION = "请深入参数:java -jar main.jar [原文文件] [抄袭版论文的文件] [答案文件]";

参数不全:

if (args.length != 3) {throw new RuntimeException(ExceptionResult.PARAMETER_EXCEPTION);
}
@Test
public void test1() {Main.run(new String[]{});
}

参数为空:

for (int i = 0; i < 3; i++) {if (args[i] == null) {throw new RuntimeException(ExceptionResult.PARAMETER_EXCEPTION);}
}
@Test
public void test4() {Main.run(new String[]{null, null, null});
}

无法加载文件:

try {sourceFile = new String(Files.readAllBytes(Paths.get(args[0])));targetFile = new String(Files.readAllBytes(Paths.get(args[1])));
} catch (IOException e) {throw new RuntimeException(ExceptionResult.UNABLE_LOAD_FILE);
}
@Test
public void test5() {Main.run(new String[]{"a","b","c"});
}

项目模拟了大部分输入情况,Main函数不是100%是由于命令行是通过主函数main调用run方法,而junit直接调用run方法没用调用主函数main。

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 5 5
· Estimate · 估计这个任务需要多少时间 5 5
Development 开发 95 80
· Analysis · 需求分析 (包括学习新技术) 20 10
· Design Spec · 生成设计文档 10 10
· Design Review · 设计复审 10 5
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 5
· Design · 具体设计 10 10
· Coding · 具体编码 20 20
· Code Review · 代码复审 5 5
· Test · 测试(自我测试,修改代码,提交修改) 10 15
Reporting 报告 20 20
· Test Repor · 测试报告 10 10
· Size Measurement · 计算工作量 5 5
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 5 5
合计 120 105

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794148.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加油站视频监控智能识别分析

加油站视频监控智能识别分析根据AI视频识别的加油站智能监控解决方案:依据加油站现场已经存在的高清摄像头搜集加油站视频在此基础上加油站视频监控智能识别加油站监控画面中的人的行为或者车的视频图象。智能识别工作人员行为状态,是否存在违规操作,系统自动识别员工,不戴…

Windows NoiLinux

在 Windows 下使用 NoiLinux ubuntu-noi-v2.0.iso下载 ubuntu-noi-v2.0.iso打开 VMWare,创建新的虚拟机 -> 自定义(高级)-> 下一步 -> 下一步 -> 安装程序光盘映像文件(iso),选择下载的 ubuntu-noi-v2.0.iso后面直接跳过就行了,可能需要你留意的是分配处理器内…

通用加工软件 PowerNC

可以取代维宏的NCStudio软件 除了支持标准NC文件外,还可以集成一个CAM软件;

视野修炼-技术周刊第100期 | CSS observer

① style-observer - 监听 CSS 变化 ② Jimp - JS 图片处理库 ③ yocto-spinner - 终端旋转 loading ④ revideo - Code 生成视频 ⑤ button-stealer - 按钮收藏 ⑥ 免费头像合集 ⑦ 应该使用的HTML TOP5 特性 ⑧ 3.78MB 大小的 JS 服务 Docker 镜像欢迎来到第 100 期的【视野修…

CTF逆向:将数组作为函数代码执行

例题 攻防世界 BABYREflag判定条件为这个 if ( v5 == 14 && (*judge)(s) )注意judge本质上是一个数组,(*judge)(s)则说明judge数组中的内容被当做代码执行 但前面又有for ( i = 0; i <= 181; ++i )judge[i] ^= 0xCu;judge数组中的内容进行加密 所以需要进行patchsta…

11-HashSet

HashSet 特点放入Integer类型数据//创建一个HashSet集合:HashSet<Integer> hs = new HashSet<>();hs.add(19);hs.add(5);hs.add(20);hs.add(19);//存重复数据hs.add(41);hs.add(0);System.out.println(hs.size());//6个数据,只存了5个System.out.println(hs);//[…

VoceChat - 发现私有云社交的魅力

VoceChat使用反馈:发现私有云社交的魅力 在这个信息浩如烟海的时代,如何保持有效的沟通与信息共享,成为了我们每一个人都需要面对的挑战。很高兴在这段时间里,体验了VoceChat这款支持独立部署的个人云社交媒体聊天服务。作为一个高度灵活且保护用户数据隐私的通讯工具,Vo…

ChatGPT windows桌面版

下载 以下是综合版本,包括多个AI产品。https://github.com/lencx/Noi在download中找到适合自己的版本。 截图设置呼出快捷键左上角标志 noi 设置 快捷键 全局快捷键 输入一个快捷键(如:shift+ctrl+C) √可参考下图:版权木有,侵权不究,欢迎转载

南沙信C++陈老师解一本通题:1310:【例2.2】车厢重组

​ 【题目描述】在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小…

做题小结---进制专题

第一个是进制转换的问题 十进制转换n进制 进制转化最需要明白的就是这个图了得到的数字再取反就是转化的数字了 先取余后除就行了 牛客 周赛刚好考了这个 题 进制的好题了 考的很好 题这题很有思维难度 首先我们可以想到2个k 从一个k入手 一个k满足的 再看另一个k是否满足 这种…

Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404

Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404 在学习共享库时使用通过git拉取jenkinsfile时,报错在排查gitlab服务状态,网络通讯,防火墙规则以及Jenkins凭据均可以正常使用,最后发现的时在URL填写中缺少 .git 结尾所导致的,在…

入门pytorch

### 卷积神经网络模型卷积神经网络(简称 CNN)是一种专为图像输入而设计的网络。它最明显的特征就是具有三个层次,卷积层,池化层,全连接层。借用一张图,下图很好的表示了什么是卷积(提取特征),什么是池化(减少数据量),而全连接层就是一个简单普通的神经网络。如下代…