第一次个人编程作业

所属课程 软件工程导论
作业要求 个人项目
作业目标 学会github的使用,熟悉markdown格式,熟悉个人开发流程,了解项目单元测试

Github链接: https://github.com/KinsonLin/3121004707

1.PSP表格

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

2.模块接口设计

2.1流程图

2.2算法实现

通过SimHash和海明距离,具体分析与实现依靠海明距离测算文本内容相似度

算法关键

1、分词:引用糊涂工具包的TokenizerEngine,通过hankc当作引分词处理,遍历词和词频的结果树,计算cos值。
2、计算文本相似度:使用如下向量余弦计算模型

参考资料:SimHash原理

2.3类

类名 分类
Main 主函数类
FileUtil 工具类
SimHashUtil 工具类

2.4函数

函数名 功能 归属的类
readFile() 读取文件 FileUtil类
writeFile() 写入文件 FileUtil类
getHash() 计算字符串的hash值并输出字符串 SimHashUtil类
getSimHash() 计算simHash值并输出字符串 SimHashUtil类
getHammingDistance() 比较两个simHash值,计算它们的海明距离 SimHashUtil类
getSimilarity() 计算相似度 SimHashUtil类

函数之间的关系

getSimHash()内部会调用getHash()函数,getHammingDistance()的输入是getSimHash()的输出结果。

关键函数流程图(SimHashUtil函数)

3代码性能分析图

观看性能分析图,对代码进行了小调整实现程序的优化

4单元测试展示

4.1测试代码

工具类

点击查看代码
//工具类测试
class FileUtilTest {
 
    @Test
    void readFile() throws IOException {
        FileUtil.readFile("D:\\test.txt");
    }
 
    @Test
    void writeFile() throws IOException {
        FileUtil.writeFile("dshjc");
    }
}

核心类

点击查看代码
// 核心类测试
class SimHashUtilTest {
 
    @Test
    void getHash() {
        System.out.println(SimHashUtil.getHash("213123"));
    }
 
   @Test
    void getSimHash() {
       System.out.println(SimHashUtil.getSimHash("124123123"));
    }
 
    @Test
    void getHammingDistance() {
    }
 
    @Test
    void getSimilarity() {
        String simHash1 = SimHashUtil.getSimHash("hasdoihasiodhoiasd");
        String simHash2 = SimHashUtil.getSimHash("hasdoihasiodhoiasd");
        System.out.println(SimHashUtil.getSimilarity(simHash1,simHash2));
    }
}

4.2测试结果

4.3测试覆盖率

5.异常处理

文件不存在

点击查看代码
public void test01(){
        try {
            FileUtils.readFile("D://aaa.txt");
        } catch (IOException e) {
            System.out.println("文件不存在");
        }catch (FileIsNotTxtException e){
            System.out.println("文件格式不对");
        }
    }

文件格式异常

点击查看代码
    public void test02(){
        try {
            FileUtils.readFile("D://ans.doc");
        } catch (IOException e) {
            System.out.println("文件不存在");
        }catch (FileIsNotTxtException e){
            System.out.println("文件格式错误");
        }
    }

6.作业总结

本次作业通过翻阅资料学会了GitHub的使用,已经熟悉了软件项目的基本流程,通过PSP表格对于自己的时间分配有了更清晰的了解,而且了解如何去使用Jprofiler性能测试工具,maven项目管理工具,希望在这门课程以后的学习中能够对软件工程有更深的了解。

posted @ 2023-09-17 17:17  KinsonLin  阅读(30)  评论(0编辑  收藏  举报