系統分析與設計結對項目
阿新 • • 發佈:2018-10-17
技術 with 結束 報告 nds 入參 java 不同 結對編程
作業成果
作業源碼-java-gitee.
作業要求
老師源作業要求
根據WordCount的需求描述,先編程實現,再編寫單元測試,最後撰寫博客。
合作夥伴
201631062120 201631062220
編碼過程
PSP表格
PSP2.1 | PSP階段 | 預估耗時(分鐘) | 實際耗時(分鐘) |
· Planning | · 計劃 | 60 | 50 |
· Estimate | · 估計這個任務需要多少時間 | 20 | 20 |
· Development | · 開發 | 330 | 330 |
· Analysis | · 需求分析 (包括學習新技術) | 30 | 30 |
· Design Spec | · 生成設計文檔 | 0 | 0 |
· Design Review | · 設計復審 (和同事審核設計文檔) | 20 | 20 |
· Coding | · 代碼規範 (為目前的開發制定合適的規範) | 0 | 0 |
· Code Review | · 具體設計 | 20 | 20 |
· Test | · 具體編碼 | 180 | 100 |
· Reporting | · 代碼復審 | 20 | 20 |
· Test Report | · 報告 | 140 | 140 |
· Size Measurement | · 測試報告 | 60 | 60 |
· Postmortem & Process | · 計算工作量 | 20 | 20 |
· Improvement Plan | · 事後總結, 並提出過程改進計劃 | 60 | 60 |
· 合計 | 520 | 540 |
互審代碼
李欣 TO 王筱哲 :邏輯寫的非常不錯,唯一不足的是註釋有點少,希望以後多寫註釋
王筱哲 TO 李欣 :思路很清楚,感覺還不錯
基本功能基本一樣,擴展功能主要是分成幾個class,都有點困擾,代碼不是那麽清楚,都有所改動,最後基本一致
UML類圖
屬性方法
文件對象
public class Wc { public int chars; public int words; public int lines; public int codeLines; //代碼行數 public int empLines; //空行數 public int comLines; //註釋行數 public int getChars() { return chars; } public int getWords() { return words; } public int getLines() { return lines; } public int getCodeLines() { return codeLines; } public int getEmpLines() { return empLines; } public int getComLines() { return comLines; } }
命令對象
public static String inputFile;
public static String outputFile;
public static boolean needC;
public static boolean needW;
public static boolean needL;
public static boolean needO;
public static boolean needS; //輸入參數中是否有“-s”
public static boolean needA; //輸入參數中是否有“-a”
public static boolean needE; //輸入參數中是否有“-e”
查找代碼行、註釋行、空行
此處不同於最終項目,是最初時,對於註釋行的檢測的初試
public static Count wc(String inputFile) throws IOException {
boolean isNote = false;
int notNote=0;
String lineString = "";
Count count=new Count(0,0,0,0,0,0);
String txt = "";
String[] buffer = null;
String[] buffer2;
File dir=new File(inputFile);
BufferedReader bf = new BufferedReader(new FileReader(dir));
while((txt=bf.readLine())!=null){
buffer2=txt.split(",| |\t|\n");
for(int i=0;i<buffer2.length;i++){
if(!buffer2[i].equals(""))
count.WordCount++;
}
count.LineCount++;
count.CharCount+=txt.length();
}
while((lineString=bf.readLine())!=null){
//遇到 , 空格 就結束賦值
/*buffer=lineString.split(",| ");
for(int i=0;i<buffer.length;i++){
if(!buffer[i].equals("")){
count.WordCount++;
}
}*/
lineString=lineString.trim();
//空行,一個字符的也算空行
if (lineString.matches("^[//s&&[^//n]]*$")||lineString.length()==1) {
count.EmptyCount++;
}
//註釋/*的開始
else if (lineString.startsWith("/*") && !lineString.endsWith("*/")||((lineString.startsWith("{/*")
||lineString.startsWith("}/*"))&&!lineString.endsWith("*/"))){
count.NoteCount++;
isNote=true;
}
//沒有遇到*/
else if(isNote&&!lineString.endsWith("*/")&&!lineString.startsWith("*/")) {
notNote++;
count.NoteCount++;
}
//遇到*/
else if (isNote == true && (lineString.endsWith("*/")||lineString.startsWith("*/"))) {
count.NoteCount++;
isNote=false;
}
//註釋行
else if (lineString.startsWith("//")|| lineString.startsWith("}//")||lineString.startsWith("{//")||
((lineString.startsWith("{/*") ||lineString.startsWith("}/*")||lineString.startsWith("/*"))
&& lineString.endsWith("*/"))) {
count.NoteCount++;
}
else{
count.CodeCount++;
}
}
bf.close();
count.NoteCount-=notNote;
count.CodeCount+=notNote;
return count;
}
測試
命令
wc.exe -l -c -w -a D:\\Desktop\\123.c"
結果
123.c, 字符數: 44
123.c, 單詞數: 30
123.c, 行數: 7
123.c, 代碼行/空行/註釋行: 2/4/1
總結
停用詞表的檢測存在些許問題,沒有達到預期效果。因為時間有限,高級功能最終也沒有真正實現。希望後續時間可以完成
另外結對編程相比自己編程來說,可以更好的討論和研究需求和具體實現,但是也存在雙方意見不同、爭執的時候。但總體來說,1+1>2,遇到問題時,有人可以商量,比一個人思索更有效些。
系統分析與設計結對項目