1. 程式人生 > >軟件質量與測試 第4周個人作業

軟件質量與測試 第4周個人作業

是否一致 需求 產生 ima detail 配置 find 規範 git

一、項目地址

  https://github.com/changjiang666/WcPro

二、PSP

技術分享圖片

三、設計思路

  我負責main函數的編寫和print輸出模塊的編寫。

  1.main函數

int
main(/*int argc, char **argv*/)
{
    char *textBuf = readfile("test.txt"); // 讀取輸入文件
    WcPro wcpro(textBuf);// 將輸入文件放入緩沖區
    wcpro.processText();// 分析文本,各種統計功能的實現
    wcpro.print();// 打印輸出統計結果
    return
0; }

  main函數由於是高度封裝的函數的集合,因此特別簡短,邏輯十分清晰。readfile函數由楊松(17166)同學編寫,WcPro類以及wcpro函數,還有processText函數都由組長劉長江(17167)編寫和實現,我(17171)負責了print函數的實現,將這些排列起來就構成了完整的main函數,整個程序的功能就在這些函數中實現。

  

  2.print函數

void WcPro::print()
{
    freopen("result.txt", "w", stdout);// 輸出重定向到result.txt文件
    for(int i = 0; i != this
->word_count_vec.size() && i < OUTPUT_SIZE; ++i) cout << word_count_vec[i].first << " " << word_count_vec[i].second << endl; }

  print函數遍歷分析的結果數據,再逐一打印輸出,將輸出流重定向到result.txt。

四、測試設計過程

  由於main函數已被高度封裝,因此程序主要是對自定義函數模塊的測試。對於print函數,它所完成任務的關鍵步驟是實現輸出的重定向——即將本應打印在控制臺的輸出流打印到result.txt文件中。因此測試這一函數的思路應該是比較正常的cmd窗口輸出和重定向後result.txt文件內容是否一致。

  為了還原成原先的cmd控制臺輸出,修改print函數,註釋其重定向語句:

void WcPro::print()
{
    //freopen("result.txt", "w", stdout);
    for(int i = 0; i != this->word_count_vec.size() && i < OUTPUT_SIZE; ++i)
        cout << word_count_vec[i].first << " " << word_count_vec[i].second << endl;
}

  再次編譯產生用於比較的WcProCMD.exe。

除了要比較窗口輸出和文件輸出是否一致外,還要比較對於各種字符,包括各種不常見字符,函數是否能正確輸出。因此測試用例主要針對輸入文本,改變其中會被統計的單詞,要能覆蓋所有需求中提到的字符。

測試用例舉例: 1.文本中全部是常見字符;

         2.文本中全部是常見字符和非常見字符;

         3.文本中是常見字符和少量英文字母;

         4.文本中全部是數字;

         5.文本中是數字和少量英文字母;

         6.文本中包含Let‘s和Let‘‘s;

         ······

五、測試運行和評價

  對比CMD輸出和result.txt輸出,完全一致:

技術分享圖片 技術分享圖片

技術分享圖片技術分享圖片

技術分享圖片

  並且向已有的result.txt寫入新結果時,之前的舊數據會被覆蓋,符合使用場景。

  評價:采用黑盒測試的方法,但由於print函數沒有判定節點和分支,所以也能達到白盒測試的要求。

五、擴展任務

  通過閱讀《C++ Primer》,並且和組內同學交流,了解了一些代碼規範,大有收獲:

    * 縮進:4空格

    * 行寬:100字符

    * 括號:表明邏輯優先級

    * 斷行與空白{}行:程序模塊{}分割,{}各占單行

    * 分行:一句一行,變量定義各自成行

   * 命名:“匈牙利命名法”,從命名中可以直接理解該命名的含義

* 下劃線:作用域_名稱

* 書寫:所有的類型/類/函數名都用Pascal形式,所有的變量都用Camel形式。

*類/類型/變量:名詞或組合名詞,如Member、ProductInfo等。

*函數則用動詞或動賓組合詞來表示,如get/set; RenderPage()。

* 註釋:註釋代碼都采用ASCII碼,不要使用中文等,提高可移植性

註明做什麽,為什麽,不需要解釋怎麽做

程序開頭註明變量含義

設置字體風格

  采用了Visual Studio自帶的cppcheck靜態測試工具對詞頻計數模塊進行了代碼的靜態測試:

技術分享圖片

問題1:(style) Class ‘WcPro‘ has a constructor with 1 argument that is not explicit.

風格警告 :風格有關問題的代碼清理(未使用的函數、冗余代碼、常量性等等)

該問題是說構造函數參數不明確。這是代碼中構造函數沒有設置默認輸入所導致的,在參數列表加入默認值即可。

問題2:(information) Cppcheck cannot find all the include files (use --check-config for details)

信息消息 :配置問題,建議在配置期間僅啟用這些。

該問題表示沒有找到所有的include文件。經小組討論認為是cppcheck自己的配置問題。

  整體小組代碼質量比較滿意,雖然只有三人但我們明確分工,積極學習,最後也能完成其他四人組的工作。

六、高級任務

最後組長(17167)把3個人的代碼做了集成,拿5M的英語名著做了性能測試,包括I/O時間,總共花了不到3s。 周末全組做了評審,組長講了代碼的主幹,我們對一些可能出錯的部分提出了質疑, 組長針對我們的疑問做了解釋。組長對代碼的規範性提前做了要求,比如變量的命名,函數書寫的格式,函數名的規範, 最後大家的代碼格式基本一致,就像是一個人寫的,說明了磨刀不誤砍柴工。

這次小組作業讓我覺得團隊合作的重要性,學會怎麽凝聚大家的力量。還有代碼開發與軟件測試並行,確保每一個模塊沒有錯誤的時候再往下面進行。在寫代碼的時候,一定要多註釋,這樣不管自己維護還是別人閱讀,都會減少不少麻煩。

根據組內協商,我個人的小組貢獻為30%。

軟件質量與測試 第4周個人作業