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