201671010454張琳-實驗四軟件工程結對項目
課程名稱: | 2016級計算機科學與工程學院軟件工程(西北師範大學) |
---|---|
所屬課程: | 軟件工程 |
課程要求: | 實驗四 軟件工程結對項目 |
實驗目標: | (1)體驗軟件項目開發中的兩人合作,練習結對編程(Pair programming)熟悉軟件開發整體流程。 (2)掌握Github上增量發布軟件的操作方法。 |
實驗內容:
(一)任務一:互評
- 博客點評內容:
- GitHub中源碼點評:
- 點評心得:
- 結對夥伴:博客以及GitHub
軟件結構清晰,代碼規範,每個模塊實現一個確定的功能,但是人機交互界面對於用戶來講不夠直觀,還需繼續完善。
想要完成一個項目,除了要會分析,會設計,還要會實現。這就需要我去掌握更多的開發技術,學會積累經驗並提高自己的開發能力。 對比結對夥伴的編程能力,我還有很多需要學習和補充的地方。
(二)任務二:結對項目源碼:GitHub
- 需求分析:
- 程序可以讀入任意英文文本文件,能讀取容納10萬詞以上的文章,程序需要很壯健。
- 指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,可顯示對應單詞在文本中出現的次數和柱狀圖,由柱狀圖顯示單詞出現的頻率 的高低。
- 高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。
- 統計該文本所有單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。
- 統計該文本行數以及字符數。
- 各種統計功能提供計時功能,顯示程序統計所消耗的時間(單位:ms)。
- 處理任意用戶導入的任意英文文本。
- 實現良好的人機交互界面。
- 程序設計:本程序共包含5個類,9個jsp頁面。
- founction.java類:實現讀入文本的功能。
- wordServlet.java類:實現指定單詞詞頻統計功能,並通過柱狀圖顯示出來。
- highCountServlet.java類:實現高頻詞統計並按降序排序。
- outServlet.java類:實現按字典順序輸出到result.txt的功能。
- allCountSevlet.java類:實現文本行數以及字符數的統計功能。
- 核心功能代碼展示:
本段代碼為統計文本行數以及字符數的代碼,在之前的項目中未實現,所以展示出來。
public Map<String, Integer> allCount(String fileName) throws IOException {
Map<String, Integer> Map2 = new TreeMap<String, Integer>();
String line = fileName;
File file = new File(line);
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
BufferedReader br = new BufferedReader(isr);
int charNum = 0;// 字符數
int wordsNum = 0;// 單詞數
int lineNum = 0;// 行數
// 以流的形式讀入文件
while (br.read() != -1) {
String s = br.readLine();
charNum += s.length();
wordsNum += s.split(" ").length;
lineNum++;
}
isr.close();// 關閉
Map2.put("字符數", charNum);
Map2.put("單詞數", wordsNum);
Map2.put("行數", lineNum);
return Map2;
}
這段代碼實現了計時功能。
founction f = new founction();
long st = System.currentTimeMillis();
Map<String, Integer> wordsCount = f.allCount(fileName);
long end = System.currentTimeMillis();
Long time = end-st;
HttpSession session = request.getSession();
session.setAttribute("wordsCount", wordsCount);
session.setAttribute("time", time);
- 程序運行:
- 結對過程描述:
- 首先,我們對項目整體要求進行了分析和理解,並根據要求對實驗二進行補充和完善。同時,我們草擬了一份計劃 (包括未實現的功能、需要進一步完善的功能、要用到的技術、具體分工等)。
- 關於具體分工,我們是根據各自的能力進行了任務分配,我主要負責測試工作和交互界面的實現,結對小夥伴主要負責核心 功能的開發和異常處理。當然,在此基礎上,我們也會對彼此的工作根據實際情況提出小的意見和建議。
- 關於技術實現,我們分為前臺和後臺。前臺主要用到了EasyUI和JSP技術,後臺主要用到了servlet。
- 在前期的準備工作(功能模塊設計、代碼規範<百度“java代碼規範”> 了解等)結束後,我們開始編程。首先我們對實驗二中已經完成的功能進行了完善,然後根據前期草擬的計劃對未實現的功能進 行初步設計(核心模塊設計主要由結對小夥伴完成),同時設計合理清晰的人機交互界面(該部分主要由我完成設計)。
- 雙方工作基本完成後,進行對接,實現前臺後臺交互。由於設計過程中比較仔細,且溝通較好,在對接時沒有浪費不必要的 時間。
- 最後,我們進行了幾輪叠代,完善各功能模塊。通過單元測試和回歸測試保證了模塊的正確性。然後進行文檔編寫。
- PSP:
- 小結感受:
高頻單詞數統計
指定單詞詞頻統計
按字典順序輸出到result.txt
統計文本行數字符數
PSP2.1 | 任務內容 | 計劃共完成需要的時間(min) | 實際完成需要的時間(min) |
Planning | 計劃 | 10 | 10 |
Estimate | 估計這個任務需要多少時間,並規劃大致工作步驟 | 10 | 10 |
Development | 開發 | 250 | 300 |
Analysis | 需求分析 (包括學習新技術) | 15 | 15 |
Design Spec | 生成設計文檔 | 15 | 17 |
Design Review | 設計復審 (和同事審核設計文檔) | 2 | 4 |
Coding Standard | 代碼規範 (為目前的開發制定合適的規範) | 8 | 8 |
Design | 具體設計 | 20 | 23 |
Coding | 具體編碼 | 200 | 260 |
Code Review | 代碼復審 | 10 | 10 |
Test | 測試(自我測試,修改代碼,提交修改) | 15 | 15 |
Reporting | 報告 | 20 | 20 |
Test Report | 測試報告 | 5 | 5 |
Size Measurement | 計算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事後總結 ,並提出過程改進計劃 | 5 | 8 |
閱讀關於結對編程的闡述http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html 之前我們做過的項目大都是以個人或者在老師的帶領下完成的,這次的結對編程是一個新的體驗。“在結對編程中,任何一段代碼都至少被兩雙眼睛看過, 兩個腦袋思考過。”真正實現了“1+1>2”。結對是一個互相促進、互相監督、互相完善的過程,這種形式的編程不但可以提高代碼質量減少程序錯誤,而且 在一定程度上也提高了自己的團隊協作能力,在結對過程中也能從對方身上學到好的編程思想和行為。
201671010454張琳-實驗四軟件工程結對項目