這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
---|---|
這個作業要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146 |
這個作業的目標 | 實現論文查重算法,學會使用PSP表格估計,學會 Git commit 規范,學會單元測試 |
目錄
1. Github倉庫
https://github.com/graceon/checkArticle
2. PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鍾) | 實際耗時(分鍾) |
---|---|---|---|
Planning | 計划 | 20 | 20 |
· Estimate | · 估計這個任務需要多少時間 | 20 | 20 |
Development | 開發 | 465 | 525 |
· Analysis | · 需求分析 (包括學習新技術) | 30 | 30 |
· Design Spec | · 生成設計文檔 | 60 | 60 |
· Design Review | · 設計復審 | 60 | 60 |
· Coding Standard | · 代碼規范 (為目前的開發制定合適的規范) | 15 | 15 |
· Design | · 具體設計 | 30 | 30 |
· Coding | · 具體編碼 | 180 | 240 |
· Code Review | · 代碼復審 | 60 | 60 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 30 | 30 |
Reporting | 報告 | 60 | 60 |
· Test Report | · 測試報告 | 30 | 30 |
· Size Measurement | · 計算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后總結, 並提出過程改進計划 | 20 | 20 |
Total | · 合計 | 545 | 605 |
3. 計算模塊接口的設計與實現過程。
- CommandParse創建Article對象加載原始論文和待檢測論文,並使用ArticleCompare.compare進行比較
- 論文特征在Article構造函數中計算過程
- 將文章中所有可能存在的雙字詞的hash值作為特征保存到排序集合中
- ArticleCompare.compare
- 由於特征是以整數形式從小到大排序存儲到集合中的,采用雙指針法,計算2個整數集合共同元素的個數
4. 計算模塊接口部分的性能改進。
占用時間最多函數展示
public Article(String pathname) throws IOException, ZeroFeature {
//省略大部分初始化代碼
while ((line = reader.readLine()) != null) {
//使用正則表達式分割這一行,分割這一行的短句
String[] subSentence=line.split(splitSymbol);
//逐個短句分析
for(String word:subSentence){
//每2個漢字作為雙字詞
for (int i = 0; i < word.length()-1; i++) {
//獲取雙字詞的Hash值作為,添加到特征集合sortedHashFeature中
int hash = word.substring(i, i + 2).hashCode();
sortedHashFeature.add(hash);
}
}
}
}
分析可得Article構造函數中計算特征的過程占用時間最多,並且使用正則表達式分割逗號句號和分割雙字詞使用時間較多。
但都是 Java 語言自帶方法優化難度較大。
5. 計算模塊部分單元測試展示。
單元測試的測試覆蓋率截圖
命令行輸入參數不足
測試非抄襲文件查重率
測試正常功能