个人项目:Java实现论文查重

发布时间 2023-09-13 15:22:42作者: 变成七秒记忆的鱼
这个作业属于哪个课程 软件工程
这个作业要求在哪里 个人项目
这个作业的目标 熟悉maven等框架搭建,jprofiler观察资源消耗与调用情况,junit单元测试,熟悉开发流程

正文

1.GitHub仓库

2.PSP

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

3.计算模块接口的设计与实现过程

  • MainPaperCheck
    只有一个main函数,顺序进行文件读入,并将内容写到字符串中,具体是按行读的,可以减少对内存的瞬间占用(详见读写模块)
    参数的设定样式使其能在cmd运行

    然后调用模块计算结果并返回,逻辑比较朴素

  • SimHashUtils
    作用:计算simhash
    有getHash与getSimHash方法
    getHash流程图:

    详细注解:

    getSimHash流程图:

    详细解析:

  • TxtIOUtils
    作用:处理读写
    有readTxt与writeTxt模块,按行读的,可以减少对内存的瞬间占用,写时用\r\n适应多平台
    流程图:

    详细注解:

  • HammingUtils
    作用:用于计算汉明距离
    有getHammingDistance与getSimilarity方法
    getHammingDistance:根据simhash计算并返回海明距离
    流程图:

    代码中有详细的注释:

    getSimilarity:传入simhash调用getHammingDistance得到distance并计算相似度
    流程图:

    代码与详细注解:

  • ShortStringException
    作用:自定义一个异常,应对字符串过短
    详细解析:

  • pom配置
    作用:从中央仓库或镜像仓库下载外部依赖包
    用maven进行项目管理 pom中加入汉化包与测试工具

4.计算模块接口部分的性能改进

jprofiler overview:

调用:

可以看到 调用最多的是汉化包 程序的优化已经需要依赖于数学理论的突破与汉化算法内部的优化 已经达到瓶颈。

5.计算模块部分单元测试展示

  • MainTest
    作用:测试项目总体运行情况

    测试结果:


  • TxtIOUtilsTest
    在案例中设置路径不存在的情况
    作用:测试正常读写与文件路径为空的情况


    测试结果:

  • SimHashUtilsTest
    设计一个字符串 检查能否得到simhash
    作用:测试这个类中的两个方法


    覆盖率:

  • HammingUtilsTest
    设计了哈希值长度不相等的情况
    作用:检查哈希值不相等是否有在较短字符串前补0,并检查正常运行

    结果:

    覆盖率:

  • ShortStringExceptionTest
    设计了str长度小于200的情况
    作用:检查这个自定义的异常处理是否生效

    结果:

    覆盖率:

6.计算模块部分异常处理说明

  • 读写文件异常
    针对路径不存在等情况捕捉


    测试结果已经在上文测试部分给出

  • 字符串过短异常ShortStringException
    汉化包无法处理长度在200以下的字符串 所以要自定义一个异常 在str长度小于两百时抛出
    异常的自定义:

    测试代码:

    测试结果已经在上文测试部分给出