軟測第四周作業 wordcount 優化

2022-07-16 14:36:15 字數 3844 閱讀 5878

psp2.1

psp階段

預估耗時

(分鐘)

實際耗時

(分鐘)

planning

計畫30

20· estimate

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

3020

development

開發470

550· analysis

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

3020

· design spec

· 生成設計文件

2020

· design review

· 設計複審 (和同事審核設計文件)

3020

· coding standard

· **規範 (為目前的開發制定合適的規範)

3030

· design

· 具體設計

3040

· coding

· 具體編碼

6080

· code review

· **複審

3030

· test

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

120150

reporting

報告90

90· test report

· 測試報告

3030

· size measurement

· 計算工作量

3030

· postmortem & process improvement plan

· 事後總結, 並提出過程改進計畫

3030

合計470

500在討論過後,我們將任務劃分為四個模組,具體模組和分工如下:

1. 詞頻統計

功能描述:統計各個單詞的出現次數

介面描述:輸入乙個字串,輸出乙個map結構

負責該模組的小組成員:庹舒月

2. 詞頻排序

功能描述:將統計結果進行排序

介面描述:輸入乙個map結構,輸出乙個vector結構

負責該模組的小組成員:俞亮

3. 輸出模組、構造和析構函式、檔案長度函式

功能描述:

(1). 輸出模組:輸出結果到result.txt檔案

(2). 構造和析構函式:類的構造和析構函式

(3). 檔案長度函式:獲取輸入檔案長度

介面描述:

(1). 輸出模組:輸入乙個vector結構,輸出乙個result.txt檔案

(2). 構造和析構函式: 無

(3). 檔案長度函式:輸出檔案長度

負責該模組的小組成員:辜之皓

4. 輸入模組、主函式和架構設計

功能描述:

(1). 輸入模組:讀取文字為乙個字串物件

(2). 主函式:呼叫其他小組成員的介面,是主要邏輯

介面描述:

(1). 輸入模組:輸出乙個字串物件

(2). 主函式: 無

負責該模組的小組成員:唐明華

負責將統計結果輸出到指定檔案,構造和析構函式,檔案長度函式。

輸出模組十分簡單,乙個迴圈直接把資料輸出到檔案就行了:

void output_result(const wc::wordset&ws) 

}

構造和析構函式、檔案長度部分的工作主要是初始化整個類,開啟輸入檔案,設定檔案長度,關閉檔案等:

explicit wc(const

char*filename)

: _fp(std::fopen(filename, "r

")), _pool(10

) {}

~wc()

intfile_length()

使用了google test框架進行測試

設計了三個測試用例來測試檔案長度是否能夠正常獲取,以及輸入錯誤檔案時是否能夠正常處理

設計了十乙個測試用例測試詞頻計數部分,覆蓋了特殊字元,多個-字元等等各種情況

設計了六個測試用例測試詞頻排序部分,測試了大小寫,單詞長度等等各種情況

測試用例列表如圖所示:

執行單元測試,如圖所示:

經過討論,各個小組成員根據自己的參與情況、**質量和**量得出了如下評分:

庹舒月:   0.28   

辜之皓:   0.26

唐明華:   0.23

俞亮:   0.23

因為我們選擇了c++語言進行開發,所以參考了google style guide

我對其中關於類的標準進行了了仔細閱讀,了解了「不要在建構函式中呼叫虛函式, 也不要在無法報出錯誤時進行可能失敗的初始化」,」不要定義隱式型別轉換. 對於轉換運算子和單引數建構函式, 請使用explicit關鍵字「等等規則

這讓我對c++類的編寫有了新的認識

使用了google官方提供的cpplint工具進行測試

經過一定的討論,我們決定唐明華和庹舒月之間進行**互評,辜之皓和俞亮之間進行**互評

因為我們都使用了一些**格式化的工具,所以在**風格方面十分統一

我對俞亮的**進行了閱讀,在設計方面,有少量冗餘**,總體來說沒有重大問題

俞亮對我的**進行了評審之後,指出我在迭代器使用方面的問題,我對此進行了修改

使用cpplint工具的輸出結果如圖所示:

重新執行了單元測試輸出結果如圖所示:

迭代器迴圈的條件判斷應使用!=符號,而不是<=符號

在其他方面上,我了解到了**格式化工具的方便性和重要性,以及閱讀goole style guide讓我對c++**規範有了新的認識

我們找了莎士比亞全集的英文版txt文件,有5mb大小

使用這個資料,我們測試後發現大致需要3秒的時間才能處理完整個檔案,執行截圖如下:

針對可能影響程式效能(制約因素),我們小組進行了組內評審,討論。

主持:

庹舒月評審:

唐明華、辜之皓、俞亮

評審主題:

1.影響程式效能的主要因素

2.有何建議

討論結果:

我們討論之後認為,主要的效能瓶頸在於需要讀取整個檔案之後再開始統計,因為磁碟讀寫的速度非常慢,導致了整個程式執行效率低

解決方案:

使用多執行緒,一邊讀取資料,一邊開始統計讀取部分的資料,之後再將各個部分的統計結果合併,可以大大提高效能

修改之後程式效能有了成倍的提高,執行時間大概在0.7秒左右,提高了大約4倍的效能

執行截圖如下:

經過這次作業,我深深地感受到軟體開發、軟體測試、軟體質量三個過程是密不可分、息息相關的

1. goole style guide:

第四周作業

第四周實驗作業 1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 1.1求自然對數e的近似值 include using namespace std int main cout 1.2求圓周率 的近似值 include using name...

第四周作業

實驗作業1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 2.程式設計求 百錢百雞 問題。雞翁一值錢五,雞母 一值錢三,雞雛三值錢一。百錢買百雞,問雞翁 雞母 雞雛各幾何?3.程式設計輸入乙個整數,計算它是幾位數字,分別輸出每一位數字,並輸...

第四周作業

實驗作業1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 2.程式設計求 百錢百雞 問題。雞翁一值錢五,雞母 一值錢三,雞雛三值錢一。百錢買百雞,問雞翁 雞母 雞雛各幾何?3.程式設計輸入乙個整數,計算它是幾位數字,分別輸出每一位數字,並輸...