這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024 |
---|---|
這個作業要求在哪裡 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13136 |
這個作業的目標 | 完成第一次專案作業 |
1.github連結:https://github.com/xingyun158979/xingyun158
2.PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 30 | 35 |
Estimate* | 估計這個任務需要多長時間 | 800 | 745 |
Development | 開發 | 500 | 650 |
Analysis | 需求分析(包括學習新技術) | 60 | 80 |
Design Spec | 生成設計文件 | 30 | 40 |
Design Review | 設計複審 | 10 | 20 |
Coding Standard | 程式碼規範 | 5 | 15 |
Design | 具體設計 | 60 | 90 |
Coding | 具體編碼 | 200 | 300 |
Code Review | 程式碼複審 | 20 | 15 |
Test | 測試 | 90 | 90 |
Reporting | 報告 | 70 | 70 |
Test Report | 測試報告 | 20 | 10 |
Size Measurement | 計算工作量 | 20 | 20 |
Postmortem & Process Improvment Plan | 事後總結,並提出過程的改進計劃 | 30 | 30 |
合計 | 620 | 745 |
3.計算模組介面的設計與實現過程
設計流程圖:
演算法參考:https://blog.csdn.net/wolflxiaolu/article/details/116558711?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171030650416800185896718%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171030650416800185896718&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~hot_rank-9-116558711-null-null.142^v99^pc_search_result_base6&utm_term=simhash演算法算相似度&spm=1018.2226.3001.4187
結構:
4.效能分析
5.部分單元測試
@Test
public void getHaiMingDistanceFailTest() {
// 測試str0.length()!=str1.length()的情況
String str0 = "111100";
String str1 = "1000";
System.out.println(HaiMing.getHaiMing(str0, str1));
}
@Test
public void getSimilarityTest() {
//測試相似度的計算
String str0 = Txt_IO.readTxt("txt/orig.txt");
String str1 = Txt_IO.readTxt("txt/orig_0.8_dis_10.txt");
String str2 = Txt_IO.readTxt("txt/orig_0.8_dis_1.txt");
int distance1 = HaiMing.getHaiMing(SimHash.getSimHash(str0), SimHash.getSimHash(str1));
int distance2= HaiMing.getHaiMing(SimHash.getSimHash(str0), SimHash.getSimHash(str2));
double similarity1 = HaiMing.getSimilarity(SimHash.getSimHash(str0), SimHash.getSimHash(str1));
double similarity2 = HaiMing.getSimilarity(SimHash.getSimHash(str0), SimHash.getSimHash(str2));
System.out.println("str0和str1的海明距離: " + distance1);
System.out.println("str0和str1的相似度:" + df.format(100*similarity1)+"%");
System.out.println("str0和str2的海明距離: " + distance2);
System.out.println("str0和str2的相似度:" + df.format(100*similarity2)+"%");
}
}
測試結果:
測試覆蓋率:
6.異常處理
路徑不存在處理:
@Test
public void readTxtFailTest() {
// 路徑不存在,讀取失敗
String str = readTxt("txt/none.txt");
}
文字過短處理:
@Test
public void shortStringExceptionTest(){
//測試文字長度小於300的情況
System.out.println(SimHash.getSimHash("今天是週二,明天是週三"));
}