預培訓-我的項

所屬課程 2019北航軟件工程暑期師資培訓(北京航空航天大學)
做業要求 預培訓-我的項目
做業目標 實現一個幫助進行地鐵出行路線規劃的命令行程序。

要求:git

  1. 使用Visual Studio Community 2019 或 IDEA 進行開發,採用C++, C# 或 Java 語言實現,運行環境爲64-bit Windows 10。
  2. 提交的代碼要求通過Code Quality Analysis工具的分析並消除全部的警告。Code Quality Analysis工具的用法參見:
    http://msdn.microsoft.com/en-us/library/dd264897.aspx
  3. 請使用性能分析工具來找出代碼中的性能瓶頸並進行改進。
  4. 寫出至少10個測試用例確保你的程序可以正確處理各類狀況。
  5. 使用Github來管理源代碼和測試用例。



一、模塊構思

(1)POJO部分

站點是以線路爲順序進行組織的,考慮到可維護性(方便修改、添加、刪除站點)和語義性使用xml來進行地鐵線路的存儲:github

其中station包含屬性:id、站點名稱、站點所屬線路、還有鄰接站點。算法

一條線路line包含多個站點、一個地鐵站包含多個線路。小程序

爲了方便進行xml文件和Java對象的映射,使用了JAXB庫來實現這種映射:數據結構

SubwayPojo
函數

Line
工具

Station:
性能

三個POJO類實現了一系列get、set方法,而且使用相應的註解和XML進行了映射。單元測試

(2)主程序部分

主程序部分包含一個類:
subway
主要包括如下函數功能:




學習

主要的思路是,儘量的解耦,把命令行參數獲取解耦出來,這樣之後要擴展出新的調用方式只要新增一個函數就好,
不用修改原來的代碼。

(3)工具類部分

工具類部分主要包含一個類:
Util
爲了方便對數據進行錄入,Util實現了一個簡單的命令行錄入小程序:
有兩種錄入方式,一種是按線路進行錄入:

一種是按站點進行錄入:

同時還實現了從文件中讀取地鐵信息,和存地鐵信息到文件:

(4)單元測試部分

單元測試部分主要包括一個類:
SubwayTest
使用了Junit來實現單元測試,經過比對預期文件結果和輸出文件結果來判斷正確性:

二、PSP表格

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 30 20
 • Estimate  • 估計這個任務須要多少時間 30 20
Development 開發 300 370
 • Analysis  • 需求分析 (包括學習新技術) 90 90
 • Design Spec  • 生成設計文檔 60 30
 • Design Review  • 設計複審 30 10
 • Coding Standard  • 代碼規範 (爲目前的開發制定合適的規範) 0 0
 • Design  • 具體設計 120 240
 • Coding  • 具體編碼 400 500
 • Code Review  • 代碼複審 50 50
 • Test  • 測試(自我測試,修改代碼,提交修改) 50 50
Reporting 報告 50 40
 • Test Repor  • 測試報告 0 0
 • Size Measurement  • 計算工做量 20 10
 • Postmortem &
 Process Improvement Plan
 • 過後總結, 並提出過程改進計劃 30 30
All 合計 880 1030

三、核心算法

核心算法使用Dijkstra算法,實現圖的數據結構採用鄰接矩陣:

算法流程圖:

四、單元測試和覆蓋率

五、性能分析

主要性能瓶頸在JAXB上。

六、總結

經過此次我的項目,熟悉了JAXB的使用,更深刻的瞭解了Djkstra算法的原理。

github:https://github.com/numb-men/subway

相關文章
相關標籤/搜索