第一次个人编程作业
|   作业所属课程   |   https://edu.cnblogs.com/campus/gdgy/Networkengineering1834  |
| ---- | ---- | ---- |
|   作业要求   |   https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146    |
|这个作业的目标| 学会使用PSP表格 学会用Github来管理源代码和测试用例 学会使用论文查重性能分析工具改进性能|
一、Github地址:https://github.com/catwithcute/catwithcute
二、PSP表格记录估计及实际在程序的各个模块的开发上耗费的时间
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | 
|---|---|---|---|
| Planning | 计划 | 60 | 80 | 
| Estimate | 估计这个任务需要多少时间 | 10 | 5 | 
| Development | 开发 | 300 | 360 | 
| Analysis | 需求分析 (包括学习新技术) | 60 | 90 | 
| Design Spec | 生成设计文档 | 60 | 90 | 
| Design Review | 设计复审 | 10 | 10 | 
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 30 | 
| Design | 具体设计 | 60 | 60 | 
| Coding | 具体编码 | 300 | 360 | 
| Code Review | 代码复审 | 10 | 30 | 
| Test | 测试(自我测试,修改代码,提交修改) | 30 | 60 | 
| Reporting | 报告 | 90 | 120 | 
| Test Report | 测试报告 | 15 | 10 | 
| Size Measurement | 计算工作量 | 10 | 10 | 
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 30 | 
| Total | 合计 | 1035 | 1335 | 
三、计算模块接口的设计与实现过程
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.单元测试截图:


3.单元测试得到的测试覆盖率截图:

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号