第一次个人编程作业
|作业课程|软件工程2024 |
|作业要求| 个人项目 |
|作业目标|体会个人软件开发过程|
Github链接:https://github.com/zh0701/3122004591
一.PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 60 |
| · Estimate | · 估计这个任务需要多少时间 | 60 | 60 |
| Development | 开发 | 600 | 800 |
| · Analysis | · 需求分析 (包括学习新技术) | 300 | 360 |
| · Design Spec | · 生成设计文档 | 70 | 60 |
| · Design Review | · 设计复审 | 30 | 30 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
| · Design | · 具体设计 | 90 | 90 |
| · Coding | · 具体编码 | 300 | 360 |
| · Code Review | · 代码复审 | 60 | 60 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 240 | 300 |
| Reporting | 报告 | 240 | 250 |
| · Test Repor | · 测试报告 | 60 | 70 |
| · Size Measurement | · 计算工作量 | 60 | 60 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 120 | 120 |
| · 合计 | 900 | 1110 |
二.接口设计
| 模块 | 功能 |
|---|---|
| main | 实现类 |
| SimHash | 计算SimHash值 |
| Hamming | 计算海明距离 |
| TxtIOUtils | 文本的读写 |
三.性能分析


四.单元测试
1.TxtIOUtils
点击查看代码
public class TxtIOUtilsTest {
@Test
public void readTxtTest() {
// 路径存在,正常读取
String str = TxtIOUtils.readTxt("D:/test/orig.txt");
String[] strings = str.split(" ");
for (String string : strings) {
System.out.println(string);
}
}
@Test
public void writeTxtTest() {
// 路径存在,正常写入
double[] elem = {0.11, 0.22, 0.33, 0.44, 0.55};
for (int i = 0; i < elem.length; i++) {
TxtIOUtils.writeTxt(elem[i], "D:/test/ans.txt");
}
}
@Test
public void readTxtFailTest() {
// 路径不存在,读取失败
String str = TxtIOUtils.readTxt("D:/test/none.txt");
}
@Test
public void writeTxtFailTest() {
// 路径错误,写入失败
double[] elem = {0.11, 0.22, 0.33, 0.44, 0.55};
for (int i = 0; i < elem.length; i++) {
TxtIOUtils.writeTxt(elem[i], "User:/test/ans.txt");
}
}
}
测试结果


2.SimHash_text
点击查看代码
public class SimHashUtilsTest {
@Test
public void getHashTest(){
String[] strings = {"余华", "是", "一位", "真正", "的", "作家"};
for (String string : strings) {
String stringHash = SimHashUtils.getHash(string);
System.out.println(stringHash.length());
System.out.println(stringHash);
}
}
@Test
public void getSimHashTest(){
String str0 = TxtIOUtils.readTxt("D:/test/orig.txt");
String str1 = TxtIOUtils.readTxt("D:/test/orig_0.8_add.txt");
System.out.println(SimHashUtils.getSimHash(str0));
System.out.println(SimHashUtils.getSimHash(str1));
}
}
测试结果


3.Hamming_text
点击查看代码
public class HammingUtilsTest {
@Test
public void getHammingDistanceTest() {
String str0 = TxtIOUtils.readTxt("D:/test/orig.txt");
String str1 = TxtIOUtils.readTxt("D:/test/orig_0.8_add.txt");
int distance = HammingUtils.getHammingDistance(SimHashUtils.getSimHash(str0), SimHashUtils.getSimHash(str1));
System.out.println("海明距离:" + distance);
System.out.println("相似度: " + (100 - distance * 100 / 128) + "%");
}
}
测试结果


4.main_text
点击查看代码
public class MainTest {
@Test
public void origAndAllTest(){
String[] str = new String[6];
str[0] = TxtIOUtils.readTxt("D:/test/orig.txt");
str[1] = TxtIOUtils.readTxt("D:/test/orig_0.8_add.txt");
str[2] = TxtIOUtils.readTxt("D:/test/orig_0.8_del.txt");
str[3] = TxtIOUtils.readTxt("D:/test/orig_0.8_dis_1.txt");
str[4] = TxtIOUtils.readTxt("D:/test/orig_0.8_dis_10.txt");
str[5] = TxtIOUtils.readTxt("D:/test/orig_0.8_dis_15.txt");
String ansFileName = "D:/test/ansAll.txt";
for(int i = 0; i <= 5; i++){
double ans = HammingUtils.getSimilarity(SimHashUtils.getSimHash(str[0]), SimHashUtils.getSimHash(str[i]));
TxtIOUtils.writeTxt(ans, ansFileName);
}
}
}
测试结果

浙公网安备 33010602011771号