第一次個人作業


這個作業屬於哪個課程 <信安1912-軟件工程 (廣東工業大學 - 計算機學院)>
這個作業要求在哪里 <個人項目作業>
這個作業的目標1 <熟悉使用GitHub、Markdown語法>
這個作業的目標2 <完成PSP表格記錄>
這個作業的目標3 <鍛煉個人打碼能力>

文章導航

代碼鏈接(Golang)


  • 寫在前面的話:本次作業原本的要求為使用c++、Java、Python中的一種語言進行程序的編寫,但是由於本人目前正在進行區塊鏈的學習,僅能熟練地使用Golang語言,故而本項目為Golang語言編寫(已在取得老師的允許下使用Golang語言)
  • GitHub鏈接
  • 可運行的exe文件已發布至倉庫的release包內

PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(分鍾) 實際耗時(分鍾)
Planning 計划 30 45
· Estimate · 估計這個任務需要多少時間 30 45
Development 開發 180 345
· Analysis · 需求分析 (包括學習新技術) 20 20
· Design Spec · 生成設計文檔 15 30
· Design Review · 設計復審 15 15
· Coding Standard · 代碼規范 (為目前的開發制定合適的規范) 5 10
· Design · 具體設計 20 50
· Coding · 具體編碼 60 150
· Code Review · 代碼復審 15 20
· Test · 測試(自我測試,修改代碼,提交修改) 30 45
Reporting 報告 75 85
· Test Repor · 測試報告 15 20
· Size Measurement · 計算工作量 10 15
· Postmortem & Process Improvement Plan · 事后總結, 並提出過程改進計划 50 50
· 合計 285 475

計算模塊接口的設計與實現過程


整體流程

  1. main函數會接收到三個參數
  2. 將兩個等待對比的文本內容分別轉換為字符串數組
  3. 將字符串先進行哈希運算
  4. simhash函數計算兩者之間的海明距離
  5. 再計算兩者之間的相似度

工程分包的截圖


一共有兩個包:main(主函數所在的包)、utils(工具函數所在的包)

1、整體流程

2、函數方法

  • main函數:主函數
  • Simhash函數:計算simhash值(核心算法)
  • Hash函數:md5加密哈希文本
  • HammingDistance函數:計算海明距離
  • Similarity函數:相似度計算

3、核心算法

simhash+海明距離

參照simhash流程圖:

性能分析




此處使用的性能分析工具是golang自帶的pprof,因此需要在原本代碼的基礎上進行一些修改

這是針對CPU進行的一個性能分析
在圖中不難看出,在本程序中運行時間最長的函數方法為simhash
因為在simhash中既完成了文本的切割
又完成了md5的哈希加密,因此運行10ms,也是屬於正常范圍
因此性能上基本不需要進行改進

單元測試展示

  1. 讀寫模塊測試
  • 基本思路:
  • 1、測試正常讀取
  • 2、測試正常寫入
  • 3、測試錯誤讀取
  • 4、測試錯誤寫入
    測試結果如下圖所示,運行時間為230ms,代碼覆蓋率為100%
  1. Simhash模塊測試
    測試結果如下圖所示,運行時間為243ms,代碼覆蓋率為92.25%
    此處的代碼覆蓋率無法達到100%:
  • 1、一部分原因是文本輸入出錯代碼方法未設計
  • 2、另一部分原因是simhash內部循環回避
  1. 海明距離以及相似度模塊
    因為此處的函數實現均為數學運算,本人認為較容易達到100%的代碼覆蓋率,故而沒有進行測試

異常處理說明

首先介紹一下異常處理保護模塊Protect

這是一個異常處理機制,可以捕獲異常,類似於Java中的try/catch
有兩個地方應用到了該保護機制

第一處在文本讀取的模塊,針對此處進行測試,如下對應的錯誤已經捕獲


第二處在文本划分模塊,如果划分的文本為空,也會導致錯誤,針對此處進行測試,如下對應的錯誤已經捕獲

測試


寫在最后面的話

首先需要對老師進行道歉
由於本人個人原因,僅能使用golang對作業進行程序編寫,給老師添麻煩了
其次就是由於時間原因本程序的實現還不是特別完善

  1. 對代碼的審計查重還無法實現
  2. 輸出時會對上一次記錄進行覆蓋
  3. 由於golang設計時不允許main函數帶參數和返回值,因此無法對exe文件在其后面直接攜帶參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM