源代碼地址: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和別的程序,我都是先想一點寫一點,然后邊寫邊想邊修改。以前這樣的方法還好,但是這次完成起來就顯得尤為吃力。
所以我覺得以后在寫代碼之前,一定要認真完成分析和設計的工作,然后再動手寫代碼,這樣的效率才更高。