第一次個人項目-地鐵出行路線規划程序


 源代碼地址:https://github.com/qingchanghan/Software-engineering

1)開始實現程序之前,使用下列PSP表格估計將在程序的各個模塊的開發上耗費的時間。

PSP 2.1

Personal Software Process Stages

Time

Planning

計划

 

  · Estimate

  · 估計這個任務需要多少時間

 26.5h

Development

開發

 

  · Analysis

  · 需求分析 (包括學習新技術)

 5h

  · Design Spec

  · 生成設計文檔

 1h

  · Design Review

  · 設計復審 (和同事審核設計文檔)

 1h

  · Coding Standard

  · 代碼規范 (為目前的開發制定合適的規范)

 1h

  · Design

  · 具體設計

 5h

  · Coding

  · 具體編碼

 8h

  · Code Review

  · 代碼復審

 2h

  · Test

  · 測試(自我測試,修改代碼,提交修改)

 2h

Reporting

報告

 

  · Test Report

  · 測試報告

 1h

  · Size Measurement

  · 計算工作量

 0.5h

  · Postmortem & Process Improvement Plan

  · 事后總結, 並提出過程改進計划

 1h

 

合計

 26.5h

 2)實現完程序之后,使用下列PSP表格記錄在各個模塊上實際花費的時間。

PSP 2.1

Personal Software Process Stages

Time

Planning

計划

 

  · Estimate

  · 估計這個任務需要多少時間

 

Development

開發

 

  · Analysis

  · 需求分析 (包括學習新技術)

 4h

  · Design Spec

  · 生成設計文檔

 1h

  · Design Review

  · 設計復審 (和同事審核設計文檔)

 1h

  · Coding Standard

  · 代碼規范 (為目前的開發制定合適的規范)

 4h

  · Design

  · 具體設計

 6h

  · Coding

  · 具體編碼

 12h

  · Code Review

  · 代碼復審

 3h

  · Test

  · 測試(自我測試,修改代碼,提交修改)

 3h

Reporting

報告

 

  · Test Report

  · 測試報告

 1h

  · Size Measurement

  · 計算工作量

 0.5h

  · Postmortem & Process Improvement Plan

  · 事后總結, 並提出過程改進計划

 1h

 

合計

 36.5h

 3)先貼一張性能分析圖。

從這張圖上可以看出,熱路徑中transfer2()函數占了85.14%,其中調用transfer3()函數占了80.09%,transfer3()調用自己又占了68.93%。為什么占了這么多呢?原因就是它是一個遞歸函數。

簡單介紹一下我的算法吧,換乘最少的最短路線的算法。設起始點為sta1,目標點為sta2,首先求出sta1可直接到達的站點(即不經過換乘,下面不再重復),計算出sta2可直接到達的站點,看二者有沒有交集。若沒有,求出sta1必須換乘一次才能到達的站點,再看看有沒有交集,重復此過程,直到有交集為止。但是有了交集以后,由於我們要求的是換乘最少的最短路徑,所以要從終點回溯,這也就是這個遞歸函數的由來。正因為有了這個遞歸函數,程序執行相對較慢。一般換乘2-3次還可以無延遲出結果,4次就得等個幾秒鍾。

想過改進這個算法,但是一是時間比較緊張,二是也沒有想出來好的辦法,所以無奈就這樣了。

其他的一些地方倒是改進了一點,主要是代碼復用來減少了代碼量。

4)測試用例

地鐵四號線
地鐵十號線
地鐵機場線
-c 張郭庄 善各庄
-b 張郭庄 善各庄
-c 知春路 東直門
-b 知春路 東直門
-c 沙河 土橋
-b 沙河 土橋
-c 蘇庄 俸伯
-b 蘇庄 俸伯
-c 安河橋北 亦庄火車站
-b 安河橋北 亦庄火車站
-c 沙河 南鑼鼓巷
-b 沙河 南鑼鼓巷

這些用例涵蓋了地圖的大部分線路,也涵蓋了幾種要求,且結果都和百度地圖的結果比對過,應該是正確的。

5)這次項目是第一次,老師當堂布置的任務。當時一看作業要求,必須用C++或C#,整個人都有點懵。好在C++的語法和C幾乎一樣,陸續花了幾個小時,補充了C++的知識。

以前的OO和別的程序,我都是先想一點寫一點,然后邊寫邊想邊修改。以前這樣的方法還好,但是這次完成起來就顯得尤為吃力。

所以我覺得以后在寫代碼之前,一定要認真完成分析和設計的工作,然后再動手寫代碼,這樣的效率才更高。


免責聲明!

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



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