所屬課程 | 2019北航軟件工程暑期師資培訓(北京航空航天大學) |
---|---|
做業要求 | 預培訓-我的項目 |
做業目標 | 實現一個幫助進行地鐵出行路線規劃的命令行程序。 |
要求:git
- 使用Visual Studio Community 2019 或 IDEA 進行開發,採用C++, C# 或 Java 語言實現,運行環境爲64-bit Windows 10。
- 提交的代碼要求通過Code Quality Analysis工具的分析並消除全部的警告。Code Quality Analysis工具的用法參見: http://msdn.microsoft.com/en-us/library/dd264897.aspx
- 請使用性能分析工具來找出代碼中的性能瓶頸並進行改進。
- 寫出至少10個測試用例確保你的程序可以正確處理各類狀況。
- 使用Github來管理源代碼和測試用例。
<br>github
一、模塊構思
(1)POJO部分
站點是以線路爲順序進行組織的,考慮到可維護性(方便修改、添加、刪除站點)和語義性使用xml來進行地鐵線路的存儲:算法
其中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 &<br> Process Improvement Plan | • 過後總結, 並提出過程改進計劃 | 30 | 30 |
All | 合計 | 880 | 1030 |
三、核心算法
核心算法使用Dijkstra算法,實現圖的數據結構採用鄰接矩陣:
算法流程圖:
四、單元測試和覆蓋率
五、性能分析
主要性能瓶頸在JAXB上。
六、總結
經過此次我的項目,熟悉了JAXB的使用,更深刻的瞭解了Djkstra算法的原理。