1. 程式人生 > >WordCount結對項目

WordCount結對項目

stat 停用 條件 while gui ret 不存在 src for

合作者: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結對項目