第一次个人编程作业
| 所属课程 | 软件工程导论 |
|---|---|
| 作业要求 | 个人项目 |
| 作业目标 | 学会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项目管理工具,希望在这门课程以后的学习中能够对软件工程有更深的了解。
浙公网安备 33010602011771号