預培訓-我的項目(地鐵線路規劃)

地鐵線路項目

2019.7.21
   完成了程序構思與模塊劃分;填寫PSP表計劃時間;完成了模塊設計;異常處理說明;測試用例等部份內容,下一步進行單元測試、黑盒測試和並完成程序的分析與優化。

程序構思與模塊劃分

本項目核心問題實質上是無向無權圖中,求最短路徑,經過對此項目進行分析,整個程序大體劃分爲以下幾個模塊:
  • 命令解析模塊:提取命令行輸入的參數類型和參數值。
  • IO操做模塊:讀入地鐵線路圖數據文件爲字符串數組,將輸出的數據轉換爲多行字符串寫入輸出文件。
  • 地鐵地圖解析模塊:將字符串數組轉換爲地鐵線、地鐵站,並提取其中的換乘站,構建一個地鐵線路圖對象。
  • 線路查詢模塊:接受輸入的線路信息,在地鐵線路圖對象中查詢到對應的線路,輸出查詢線路的所有站點列表。
  • 線路搜索模塊:接受輸入的起始點和終點站點信息,經過最短路徑搜索算法,查找最短線路路徑。
  • 主控模塊:協調各個模塊,保證程序正確運行。主控模塊調用命令解析模塊,等到響應的命令和參數;根據不一樣的命令分別調用地鐵解析模塊構建地鐵線路圖對象,調用線路查詢模塊返回查詢到的線路站點信息,調用線路搜索模塊獲取起點到終點的最短換乘線路。

估計項開發須要的時間,並經過下面的PSP表記錄:git

PSP2.1 Personal Software Process Stages Time Real Time
Planning 計劃 1h
  · Estimate    · 估計這個任務須要多少時間 1h
Development 開發 21h
  · Analysis    · 需求分析 (包括學習新技術) 2h
  · Design Spec   · 生成設計文檔 2h
  · Design Review    · 設計複審 (和同事審覈設計文檔) 1h
  · Coding Standard   · 代碼規範 (爲目前的開發制定合適的規範) 2h
  · Design    · 具體設計 2h
  · Coding    · 具體編碼 6h
  · Code Review   · 代碼複審 2h
  · Test    · 測試(自我測試,修改代碼,提交修改) 4h
Reporting 報告 6h
  · Test Report   · 測試報告 2h
  · Size Measurement   · 計算工做量 2h
  · Postmortem & Process Improvement Plan   · 過後總結, 並提出過程改進計劃 2h
合計 28h

模塊設計與實現

1.地圖文件格式設計 爲了使得文件簡單易維護,同時也可以方便程序解析地圖文件的數據,我設計的文件格式形式爲:github

地鐵線1,站點1,站點2,站點3,...,站點n\r\n
地鐵線2,站點1,站點2,站點3,...,站點n\r\n
說明:文件中的每一行表示一條地鐵線,經過\r\n分割
      經過逗號分割每一行字符串,分割後的字符串數組的第一個字符串爲線路名稱,後面的字符串爲地鐵線路按順序的對應站點。

2.模塊設計算法

  • 命令解析模塊:接受命令行運行時帶入的參數,正確提取參數,而且可以忽略錯誤的參數,必要時給與響應的提示。數組

    具體流程:遍歷全部參數,判斷是否屬於一種命令,若是是對應的命令,則提取命令後面對應的參數值,若是沒有提取到必須的參數值在提示命令錯誤信息,以此處理完全部的參數,最後返回提取到的命令和對應的參數值。框架

  • 地鐵地圖解析模塊:單元測試

    (1)分析項目中涉及到的對象,包括站點、地鐵線、地鐵線路圖、路徑(一條線上的兩個站點),分別定義了以下的結構。學習

    站點測試

class Station {
        public:
            string StationName;//站點名稱
            vector<string> BelongTo ;//地鐵線的名稱
            vector<int> IndexOfLine;//對應的地鐵線上的站序號
            bool Visited;//是否已被訪問
     };
地鐵線路
template<class T> class Line 
    {
    public:
        string LineName;
        vector<T> Stations;
    };
地鐵線路圖
class Map {
        public:
            //全部的站點
            map<string, Station> Stations;
            //全部的地鐵線
            map<string, Line<Station>> Lines;
    };
路徑
class Path{
        public:
         	int Start;//線路段開始序號
            int End;//線路段結束序號
            int Next;//下一段序號
            Line<Station> PathLine;//當前地鐵線
    };
(2)讀入地圖文件中的字符串數據,進行字符串分割並建立上面列出的一系列對象,做爲後續線路查詢和線路搜索任務的數據。
  • 線路查詢模塊:優化

    vector<Station> stations。具體流程以下:編碼

    (1)遍歷地鐵線路圖對象lines,

    (2)判斷當前線路的StationName是否與輸入的線路名稱相等,

    (3)若是相等則返回Line對象。

  • 線路搜索模塊: 接受輸入的起點站和終點站的名字,輸出多段地鐵線路路徑vector<vector<Path>> paths,可能存在多條相同長度的線路。具體的流程以下:

    (1)首先經過地鐵線路圖對象的Stations,經過名字直接找到對應的地鐵線路,

    (2)以對應的站點爲起點進行深度遍歷:向其所在線路的兩個方向搜索,每一輪搜索前進一個站點,記錄路徑與通過的站點數量,經過換乘點時增長新的路徑(換乘線路的兩個方向),直到搜索到對應的終點,

    (3)記錄通過的每條地鐵線路的路徑,返回一個路徑的數組,便是咱們要搜索的最短路徑。這樣的路徑可能不止一條。

  • IO操做模塊:

    (1)讀取地圖文件:輸入地圖的文件路徑,輸出文件中的每一行數據的字符串數組。

    (2)結果寫入文件:將處理模塊輸出的結果(vector<Station> stations 或者vector<vector<Path>> paths),轉爲需求要求的結果格式,寫入輸出文件。

  • 主控模塊: 該模塊的主要做用是將各個模塊聯繫起來,構成一個完整的程序,其大體框架以下圖所示:

    總體框架

程序分析與優化

//TODO:分析思路、優化手段

單元測試

單元測試部分,咱們將每一個模塊視爲一個單元,對模塊暴露的接口進行測試,在進行單元測試的時候,頗有必要根據模塊的具體功能需求,按照白盒測試用例的設計思路採用語句覆蓋、斷定覆蓋、條件覆蓋、斷定條件覆蓋、條件組合、路徑覆蓋等方法儘量對代碼的邏輯路徑進行覆蓋測試。

//TODO:列舉設計的單元測試用例

異常處理說明

  • 參數錯誤異常:對於不支持的命令類型給出響應的提示;對於命令對應參數數量不全的狀況給出響應的提示。
  • IO異常:對於文件的操做,先對文件進行存在性檢測,再打開文件;在對文件進行寫入時捕獲響應的異常,並進行提示。
  • 空指針異常:對全部指針類型進行空指針檢查,而後再使用。

測試用例

1.測試用例設計

黑盒測試用例的設計方法多種多樣,本次項目主要採用了等價類劃分法、邊界值分析法、錯誤推測法等進行用例的設計。
  • 等價類劃分法:將測試的範圍劃分爲幾個不想交的子集,他們的並集就是全集,從每一個子集選出若干具備表明性的值做爲測試用例。

  • 邊界值分析法:大量的測試經驗告訴咱們,大量的錯誤是發生在輸入範圍的邊界上,而不是發生在輸入輸出範圍的內部。所以針對各類邊界狀況設計測試用例,能夠查出更多的錯誤。

  • 錯誤推測法:在測試程序時,人們能夠根據經驗或直覺推測程序中可能存在的各類錯誤,從而有針對性地編寫檢查這些錯誤的測試用例的方法。 這種方法沒有固定的形式,依靠的是經驗和直覺,不少時候,咱們都會不知不覺的使用到。

2.測試用例

依據上面的用例設計方法,設計了一些測試用例,下表中列舉了部分用例:
序號 標題 前置條件 輸入 操做步驟 預期結果
1 正確查詢線路 1.能在當前測試系統上運行<br>2.查詢的線路存在於地圖文件中 subway.exe -a 1號線 -map subway.txt -o station.txt 1.輸入命令<br> 2.觀察命令行輸出及程序文件夾目錄的station.txt文件<br> 3.對比結果 1.程序沒有出錯<br>2.命令行沒有錯誤提示信息<br>3.station.txt文件中正確按格式寫入了1號線的全部站點,而且順序正確(此處省略了全部站點信息)
2 查詢線路錯誤,線路不存在 1.能在當前測試系統上運行<br>2.查詢的線路不存在於地圖文件中 subway.exe -a 20號線 -map subway.txt -o station.txt 1.輸入命令<br> 2.觀察命令行輸出及程序文件夾目錄的station.txt文件<br> 3.對比結果 1.程序沒有出錯<br>2.命令行提示"沒有要查找的地鐵線"<br>3.station.txt文件不存在或者數據爲空
3 查詢線路錯誤,缺乏必要參數-o 1.能在當前測試系統上運行 subway.exe -a 1號線 -map subway.txt 1.輸入命令<br> 2.觀察命令行輸出及程序文件夾目錄的station.txt文件<br> 3.對比結果 1.程序沒有出錯<br>2.命令行提示"缺乏必要的參數-o"<br>3.station.txt文件不存在或者數據爲空
4 查詢線路錯誤,缺乏必要參數,地圖文件路徑 1.能在當前測試系統上運行 subway.exe -a 1號線 -map -o station.txt 1.輸入命令<br> 2.觀察命令行輸出及程序文件夾目錄的station.txt文件<br> 3.對比結果 1.程序沒有出錯<br>2.命令行提示"缺乏地圖文件路徑"<br>3.station.txt文件不存在或者數據爲空
5 查詢線路錯誤,缺乏必要參數,輸出結果文件路徑 1.能在當前測試系統上運行 subway.exe -a 1號線 -map subway.txt -o 1.輸入命令<br> 2.觀察命令行輸出<br> 3.對比結果 1.程序沒有出錯<br>2.命令行提示"缺乏輸出結果文件路徑"<br>
6 正確搜索路徑,單條地鐵線 1.能在當前測試系統上運行 subway.exe -b 劉園 洪湖裏 -map subway.txt -o routine.txt 1.輸入命令<br> 2.觀察命令行輸出<br> 3.對比結果 1.程序沒有出錯<br>2.命令行無錯誤信息<br>3.routine.txt文件中正確按格式輸出了1號線及從劉園到洪湖裏的全部站點信息
7 正確搜索路徑,兩條地鐵線 1.能在當前測試系統上運行 subway.exe -b 洪湖裏 復興路 -map subway.txt -o routine.txt 1.輸入命令<br> 2.觀察命令行輸出<br> 3.對比結果 1.程序沒有出錯<br>2.命令行無錯誤信息<br>3.routine.txt文件中正確按格式輸出了:1號線 洪湖裏 西站 6號線 復興路
8 正確搜索路徑,沒有可達的線路 1.能在當前測試系統上運行 <br>2.地圖文件中新增一條線路20號線,裏面的線路與其餘線路都沒有換乘站,且該線路上有一個站爲世紀城 subway.exe -b 洪湖裏 世紀城 -map subway.txt -o routine.txt 1.輸入命令<br> 2.觀察命令行輸出<br> 3.對比結果 1.程序沒有出錯<br>2.命令行"沒有可達的線路"<br>3.routine.txt文件不存在或者爲空
9 搜索路徑出錯,缺乏必要參數-o 1.能在當前測試系統上運行 subway.exe -b 洪湖裏 復興路 -map subway.txt 1.輸入命令<br> 2.觀察命令行輸出<br> 3.對比結果 1.程序沒有出錯<br>2.命令行提示"缺乏必要的參數-o"<br>
10 搜索路徑出錯,缺乏必要參數,輸出結果文件路徑 1.能在當前測試系統上運行 subway.exe -b 洪湖裏 復興路 -map subway.txt 1.輸入命令<br> 2.觀察命令行輸出<br> 3.對比結果 1.程序沒有出錯<br>2.命令行提示"缺乏輸出結果文件路徑"<br>

心得體會

//TODO:培訓完後再補充心得體會。

效果展現

查詢線路

路線規劃

目前測試還不全名和還需優化,點擊打開GitHub項目地址

相關文章
相關標籤/搜索