WordCount結對項目
合作者:201631062429,201631062413
隊友博客地址:http://www.cnblogs.com/wdqznb/
代碼地址:https://gitee.com/gitdq/WC2.0
本次作業的鏈接地址:https://edu.cnblogs.com/campus/xnsy/2018Systemanalysisanddesign/homework/2188
一、PSP表格
PSP |
PSP階段 |
預估耗時 (分鐘) |
實際耗時 (分鐘) |
Planning |
計劃 |
45 |
30 |
Estimate |
估計這個任務需要多少時間 |
20 |
30 |
Development |
開發 |
420 |
600 |
Analysis |
需求分析 (包括學習新技術) |
90 |
60 |
Design Spec |
生成設計文檔 |
0 |
0 |
Design Review |
設計復審 (和同事審核設計文檔) |
30 |
15 |
Coding Standard |
代碼規範 (為目前的開發制定合適的規範) |
30 |
20 |
Design |
具體設計 |
60 |
30 |
Coding |
具體編碼 |
420 |
480 |
Code Review |
代碼復審 |
90 |
120 |
Test |
測試(自我測試,修改代碼,提交修改) |
120 |
120 |
Reporting |
報告 |
120 |
90 |
Test Report |
測試報告 |
15 |
30 |
Size Measurement |
計算工作量 |
30 |
30 |
Postmortem & Process Improvement Plan |
事後總結, 並提出過程改進計劃 |
30 |
15 |
|
合計 |
1520 |
1670 |
二、代碼審核及合並
代碼風格:阿裏巴巴公司 java 規範的官方網站:https://github.com/alibaba/p3c
代碼自審 | 代碼互審 | 代碼合並 |
檢查關鍵部分代碼邏輯是否有問題,跟蹤參數的值的變化是否存在問題 | 運行代碼,進行基本功能的審查 |
將各自自審穩定的部分進行選擇性地功能整合,再對合並後的版本進行共審,確定為將要使用的基礎版本 |
檢查在非法輸入時是否有異常拋出 | 測試代碼的穩定性,看程序對異常輸入或者其他異常操作能否拋出異常或做相應處理 |
三、設計過程
(1)、結構設計
1.類:
a.Client 客戶端
b.Command 命令處理及功能實現
c.WcGUI 界面
2.方法分別為處理命令行參數,對各部分功能實現,讀文件函數,以及界面顯示等。
如下:
(2)、算法設計流程圖
四、代碼說明
我負責的部分是擴展功能中的停用詞表,返回更復雜的數據的實現。
這裏只貼出了關鍵部分代碼,其他功能代碼詳見gitee。
停用詞表
/**
* 計算字符串是否在停用詞表的方法
* @param word 需要計算是否在停用詞表內的字符串
*/
public boolean inStopList(String word) {
try{
File file = new File(this.stopList);
BufferedReader br=null;
br = new BufferedReader(new FileReader(file));
String temp;
while ((temp=br.readLine())!= null) {
String[] des = temp.split(" |,");
for (String de : des) {
if(!"".equals(de)){
//停用詞表內逐個單詞與傳入參數對比,如果相等,說明當前參數是在停用詞表內
if (de.equals(word)){
br.close();
return true;
}
}
}
}
br.close();
}
catch(Exception e){
System.out.println("文件不存在");
}
//如果上面所以單詞對比完成都沒有觸發if條件,則說明不在停用詞表內
return false;
}
返回復雜數據
/**
* 代碼行/空行/註釋行 的計算方法
* @param file 需要計算 代碼行/空行/註釋行 的文件
*/
public String complexStat(File file) {
//多行註釋正則表達式
String regexNodeBegin = "\\s*/\\*.*";
String regexNodeEnd = ".*\\*/\\s*";
//單行註釋正則表達式
String regexNode = "\\s*/{2}.*";
//空行正則表達式
String regexSpace = "\\s*";
String str="";
try {
notesNum=0;
spaceNum=0;
codeNum=0;
BufferedReader br=null;
BufferedWriter bw=null;
br = new BufferedReader(new FileReader(file));
String temp;
while ((temp = br.readLine()) != null) {
if (temp.matches(regexNodeBegin)) {
//當前行匹配多行註釋行首時執行
do {
notesNum++;
temp = br.readLine();
//直到讀取當多行註釋行尾前,沒讀取一行內容說明註釋行加一
} while (!temp.matches(regexNodeEnd));
//行尾也算註釋行,所以此處再加一
notesNum++;
} else if (temp.matches(regexSpace)) {
//當前行匹配空行時空行行加一
spaceNum++;
} else if (temp.matches(regexNode)) {
//當前行匹配單行註釋時註釋行加一
notesNum++;
} else{
//如果當前行既不是註釋行也不是空行那就是代碼行
codeNum++;
}
}
System.out.println(file.getName()+",代碼行/空行/註釋行:" + codeNum + "/" + spaceNum + "/" + notesNum);
str+=(file.getName()+",代碼行/空行/註釋行:" + codeNum + "/" + spaceNum + "/" + notesNum+"。\n");
File outFile = new File(this.outFile);
bw = new BufferedWriter(new FileWriter(outFile,true));
bw.write(file.getName()+",代碼行/空行/註釋行:" + codeNum + "/" + spaceNum + "/" + notesNum+"。\r\n");
bw.close();
br.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("文件不存在");
}
return str;
}
五、總結
在這次結對編程項目中,有一些出乎意料的地方,也有一些沒有達到預期的地方。在項目計劃以及需求分析的過程中,我們已經把工作分配好了。但是在實際開發過程中,各種遇到問題對方都會來幫忙解決,所以使得本來應該是獨立的代碼,最後也變成了一個整體,變成了共同創作出的東西,所以並沒有達到預期的情況。但是也正因為在這個過程中,有隊友不斷地幫助,使我得到了很大提高,學到了很多東西。而且在一開始計劃的時候,把一些需要交互的地方溝通好,其實並不會出現“兩個人思想不一樣,不如我一個人開發快”的情況。所以,經過這個結對項目,我明顯感覺到1+1>2。
WordCount結對項目