个人项目

第一次个人编程作业

作业所属课程 软件工程19网工34班
作业要求 作业要求
这个作业的目标 学会使用PSP表格 学会用Github来管理源代码和测试用例 学会使用论文查重性能分析工具改进性能,完成论文查重项目的实现后进行测试并按以上要求使用Github进行版本发布及源码和测试用例管理

一、github地址

二、PSP表格

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

三、计算模块接口的设计与实现过程

1.工程结构

一共有两个类,算法的核心主要在SimHash类中

2.算法原理
·首先基于传统的IR方法,将文章转换为一组加权的特征值构成的向量。

·初始化一个f维的向量V,其中每一个元素初始值为0。

·对于文章的特征向量集中的每一个特征,做如下计算:

利用传统的hash算法映射到一个f-bit的签名。对于这个f- bit的签名,如果签名的第i位上为1,则对向量V中第i维加上这个特征的权值,否则对向量的第i维减去该特征的权值。

·对整个特征向量集合迭代上述运算后,根据V中每一维向量的符号来确定生成的f-bit指纹的值,如果V的第i维为正数,则生成f-bit指纹的第i维为1,否则为0。

流程:

3.程序流程图:

4.程序结果

四、计算模块接口部分的性能

性能分析:

内存消耗:

五、计算模块部分单元测试展示

1.测试代码

public class FileToStringTest {

@Test
public void toStringTest(){
    FileToString fileToString = new FileToString();
    fileToString.toString("");

}
}

import org.junit.Test;
public class SimHashTest {
SimHash simHash;
@Test
public void simHashTest(){
SimHash simHash = new SimHash("123");
simHash.simHash();
}
@Test
public void hashTest(){
SimHash simHash = new SimHash("123");
simHash.hash("123");
}

@Test
public void subByDistanceTest(){
    SimHash simHash=new SimHash("123");
    simHash.subByDistance(simHash,3);
}


@Test
public void getDistanceTest(){
    SimHash simHash=new SimHash("123");
    simHash.getDistance("123","234");
}

@Test
public void hammingDistanceTest(){
    SimHash simHash=new SimHash("123");
    simHash.hammingDistance(simHash);
}

代码覆盖率

2.单元测试截图:

------------恢复内容结束------------

posted @ 2021-09-19 20:51  LLe00  阅读(67)  评论(0编辑  收藏  举报