第三次作業


1、

結對使用的Github項目地址 https://github.com/Cherish599/WordCount.git
作業地址  https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2879
結對伙伴的作業地址

 

 

 

 

2、我這次結對編程是和我室友胡楊帥一起進行的。我主要負責代碼的編寫部分,他負責測試部分。

 

 PSP表格

PSP2.1

Personal Software Process Stages

預估耗時(分鍾)

實際耗時(分鍾)

Planning

計划

 20  22

· Estimate

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

   

Development

開發

 270  320

· Analysis

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

 20  20

· Design Spec

· 生成設計文檔

   

· Design Review

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

   

· Coding Standard

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

 20  20

· Design

· 具體設計

   

· Coding

· 具體編碼

 240  260

· Code Review

· 代碼復審

 20  25

· Test

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

 20  20

Reporting

報告

   

· Test Report

· 測試報告

 10  10

· Size Measurement

· 計算工作量

   

· Postmortem & Process Improvement Plan

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

 20  15
 

合計

 400  432

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、計算模塊接口的設計與實現過程:

  首先,我們倆先對這個項目進行了分工。我主要負責代代碼編寫這一塊。經過我們倆的討論,我們倆列出了一個程序的整體框架。對於程序的基本功能部分,由於比較簡單,實現起來也不復雜。就分別寫了幾個函數,然后在Main()函數中調用即可。如下圖所示:

 對於解題思路:

  在CountChars()這個函數中,我們把整個文檔遍歷了一遍,然后篩選每個Ascii碼字符,並統計總的字符個數;

  在Countlines()這個函數中,我們統計文章中的換行符,每統計一個,lines++;

  在CountWords()這個函數中,我們先去掉了文檔中的所有的特殊符號,然后把所有的字符轉換成了小寫,這樣就不用區分大小寫的問題了,然后遍歷以空格來分隔每個單詞;最后看每個單詞是否至少以4個英文字母開頭,跟上字母數字符號,如果滿足條件,words++;

  在CoutWords()這個函數中,因為要輸出的是單詞出現的頻率,並且要輸出前幾個出現頻率最高的單詞和相應的頻率,因為之前我做過相同功能的程序,上次做的就是用的字典類型,所以這次做這個功能有點經驗。至於排序的問題,我之前是寫了一個排序的方法,不過這次我了解到,原來C#的字典類型中有自帶的排序的方法,這次就直接用了自帶的方法。比上次實現好了很多。

 

我們使用了著名的戲劇作品《哈姆雷特》英文版作為測試。運行結果如下:

 

  接下來就是作業的第二個要求,用一個接口來封裝不同功能的函數:

 

 1 interface library
 2     {
 3         string ReadFile(string path);   //用於打開文件
 4         int CountChars(string text);    //用於統計文檔中的字符個數
 5         int CountLines(string text);    //用於統計文檔行數
 6         int CountWords(string Text);    //用於統計文檔中單詞的個數
 7         Dictionary<string, int> Countphrase(string text, int n);    //用於統計文檔中的短語的頻率
 8         Dictionary<string, int> CoutWords(string text, int n);      //用於統計文檔中的單詞的頻率
 9         void WreteFile(string path);    //用於創建一個文件,將統計結果保存在文件中
10 
11     }

  在第二步的基礎上,我們便開始了第三個要求的編碼。第三個要求是在cmd命令行中傳入參數,然后按照不同的參數,實現不同的功能。並且在第一步的基礎上增加了詞組統計和自定義輸出兩個新的功能。詞組的統計其實是和單詞的統計是差不多的,還是要用到字典類型。我在Countphrase()中新增了一個數組,用來記錄每一定長度的詞組,然后統計它出現的頻率。至於自定義輸出功能,是比較簡單的文件操作,就不在詳細說明了。

 

同樣選著名戲劇作品《哈姆雷特》英文版,運行結果如下:(由於文本較長,沒有將所有的詞組全部截屏)

 

 

 

4、代碼規范與代碼復審過程 :

  當我寫完代碼給胡楊帥看的時候,他看了之后給我提了幾個意見。第一個就是代碼空的行數太多的問題,使得代碼看起來不怎么美觀;其次就是代碼的命名有一些不妥,尤其體現在變量名的命名上面。就像這樣:

 

之后我對所有的代碼進行了規范,嚴格按照鄒欣老師書中的代碼規范與代碼復審的方法,把所有的代碼都改了一遍。

 

5、 測試運行通過:

測試部分由胡楊帥完成

單元測試:(這次我們倆測試了幾個重要的函數,可以看到全部通過)

 

 

 

 

 性能測試:

 

 

  從上面的分析可以看到主程序和CoutWords()這個函數所消耗的CPU是最大的。這個也可以理解,一方面是因為CoutWords()這個函數是用來統計hamlet.txt中的所有單詞的出現頻率的,要不停的遍歷整個文檔,並且這個函數用到了字典類型。我暫時還沒有想到更佳的優化方法。另一方面是因為hamlet.txt中有着數萬個的單詞,本身單詞數量比較多。

6、git提交部分:(有了以上一次的經驗之后,對git的使用相對還是比較熟練了)

這是對基礎功能部分的提交:

 

 

這是增加新功能的一部分的提交:

 

7、總結:

  結對編程確實能夠在一定程度上提高兩個人編程的效率。提高了更好的設計質量,畢竟兩個人考慮的要比一個人全面一點。不過由於是第一次結對編程,我們倆在配合的過程中還出現了一點問題,比如說溝通方面的問題,有時候會為了一個不一致的意見爭論半天。總體來說,本次結對編程還是比較成功的,確實是1+1>2。

 


免責聲明!

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



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