項目 | 內容 |
---|---|
這個做業屬於哪一個課程? | 2016級計算機科學與工程學院軟件工程(西北師範大學) |
這個做業的要求在哪裏? | 實驗四 軟件工程結對項目 |
我在這個課程的目標是? | 熟悉軟件開發總體流程,提高自身能力 |
本次做業在哪一個具體方面幫助咱們實現目標 | 第一次體驗一個完整的工程 |
本次項目代碼 | GitHub連接 |
點評內容:
在閱讀了你的博文後,我學到了不少,下面時個人一些想法:
1.博文結構排版佈局井井有條,排版合理,認真學習了Markdown編輯器語法使用,是我該學習的地方。
2.博文內容按照老師的要求以需求分析、功能設計、設計實現、測試運行、關鍵代碼、總結、PSP展現的步驟分別書寫,字體大小適宜,讓閱讀的人能夠方便快捷、清楚明瞭地找到本身想看的部分。
3.在PSP表中「計劃共完成須要的時間」與「實際完成須要的時間」兩列數據差異較大的是開發和具體編碼兩個階段,而且都是實際完成須要的時間相比更多,我也有這個問題,分析緣由多是對JAVA編程不熟練,或是在編碼運行過程當中遇到了困難和阻礙。
4.運行代碼時瞭解到你的代碼習慣是主函數一個類,其他功能爲一個類。我的以爲將每一個功能單獨爲一個類,這樣後續若是想對單個功能的代碼進行優化,或者添加刪除功能的時候,能夠方便直接更改。這點也是我須要改進的地方。代碼編寫符合基本的代碼規範,能夠繼續優化。
5.功能中的柱狀圖是用符號的長短代替了,若是能使用可視化界面顯示會更好。符號代替在詞頻相差很少的時候符號長度同樣,就不能顯示出來哪一個單詞詞頻更多。git
點評心得:
經過此次點評,我認識到本身的不少不足。排版不夠美觀大方,須要繼續學習。編寫代碼時對類的劃分不明確,不少功能都是在Main()函數中完成的,這樣編寫在後面有錯誤或者進行復審的時候找代碼要先後滑動會很麻煩,個人代碼編寫不是很規範,這是我須要改進的一個很重要的點。實驗二中仍是有不少功能作的太簡單,柱狀圖也沒有用可視化界面作出來,這點咱們會在實驗四的結對項目中改進完善。github
經過對項目要求的分析,本次結對項目的需求爲:
(1)實驗2要求的功能;
(2)繪製單詞頻數可視化柱狀圖;
(3)統計該文本行數及字符數;
(4)各類統計功能均提供計時功能,顯示程序統計所消耗時間(單位:ms);
(5)可處理任意用戶導入的任意英文文本;
(6)人機交互界面要求GUI界面(WEB頁面、APP頁面均可);
(7)附加分功能:統計文本中除冠詞、代詞、介詞以外的高頻詞。算法
計算查詢單詞詞頻的時間編程
long time=System.currentTimeMillis() - start; JOptionPane.showConfirmDialog(null,print+"\n"+"所用時間爲:"+(System.currentTimeMillis() - start)+"ms","結果",JOptionPane.DEFAULT_OPTION); Histogram histogram=new Histogram(map1,input.length);
統計文本行數、字符數、大小寫字母、漢字、數字、字節數等功能數組
while ((str = in.readLine())!= null) {//readLine()方法, 用於讀取一行,只要讀取內容不爲空就一直執行 i++;//每循環一次就進行一次自增,用於統計文本行數 c += str.length();//用於統計總字符數 byte[] bytes=str.getBytes();//求出該行的字節數組 d += bytes.length;//用於統計總字節數 for (int j = 0; j < str.length(); j++) {//for循環的條件,當j小於該行長度時就一直循環並自增 b = Character.toString(str.charAt(j));//返回一個字符串對象 if (b.matches("[\\u4e00-\\u9fa5]")) {//if語句的條件,判斷是否爲漢字 c1++;//若爲漢字則c1自增 } else if(b.matches("[A-Z]")){//if語句的條件,判斷是否爲大寫字母 c2++;//若爲大寫字母則c2自增 } else if(b.matches("[a-z]")){//if語句的條件,判斷是否爲小寫字母 c3++;//若爲小寫字母則c3自增 } else if(b.matches("[0-9]")){//if語句的條件,判斷是否爲數字 c4++;//若爲數字則c4自增 } else {//不然可判斷爲其餘字符 c5++;//若爲其餘字符則c5自增 } }
詞頻柱狀圖部分代碼數據結構
public void paint(Graphics g) { int Width = getWidth(); int Height = getHeight(); int leftMargin = 50;//柱形圖左邊界 int topMargin = 50;//柱形圖上邊界 Graphics2D g2 = (Graphics2D) g; int ruler = Height-topMargin; int rulerStep = ruler/20;//將當前的高度平分爲20個單位 g2.setColor(Color.WHITE);//繪製白色背景 g2.fillRect(0, 0, Width, Height);//繪製矩形圖 g2.setColor(Color.BLACK); for(int i=0;i<rulerStep;i++){ g2.drawString((30000-1500*i)+"個", 8, topMargin+rulerStep*i);//繪製Y軸上的數據 } g2.setColor(Color.YELLOW); int m=0; for (Entry<String, Integer> entry : map.entrySet()) { int value =entry.getValue(); int step = (m+1)*40;//設置每隔柱形圖的水平間隔爲40 g2.fillRoundRect(leftMargin+step*2,Height-value/50-5, 40, value, 40, 10);//繪製每一個柱狀條 g2.drawString(entry.getKey(), leftMargin+step*2, Height-value/50-5); //標識每一個柱狀條 m++; } }
主界面編輯器
輸入要查詢詞頻的單詞,用「,」隔開函數
點擊輸出詞頻和柱狀圖,顯示單詞及詞頻數,以及運行時間佈局
點擊肯定後彈出柱狀圖界面
輸入要查詢的高頻詞個數
點擊輸出前N個高頻詞,彈出單詞及詞頻個數,以及運行時間
點擊詞頻導出到文件,彈出運行時間
點擊肯定後彈出「寫入文件成功...」
點擊各項統計,彈出統計的文本行數、字符數、大小寫字母、漢字、數字、字節數及運行時間等
將單詞及詞頻按字典順序輸出到文件中
1.在實驗二的基礎上,分析了還需添加的功能。
2.分別實現統計文本行數、字符數、大小寫字母、漢字、數字、字節數、運行時間、柱狀圖等功能。
3.完成附加功能1。
4.最後的GUI界面由咱們兩人共同編寫。
PSP2.1 | 任務內容 | 計劃完成時間(min) | 實際完成時間(min) |
---|---|---|---|
Planning | 計劃 | 15 | 10 |
Estimate | 規劃工做步驟 | 8 | 10 |
Development | 開發 | 130 | 150 |
Analysis | 需求分析 | 18 | 20 |
Design Spec | 生成文檔 | 10 | 12 |
Design Review | 設計複審 | 15 | 10 |
Coding Standard | 代碼規範 | 20 | 15 |
Design | 具體設計 | 15 | 20 |
Coding | 具體編碼 | 250 | 280 |
Code Review | 代碼複審 | 20 | 20 |
Test | 測試 | 25 | 30 |
Reporting | 報告 | 20 | 20 |
Test Report | 測試報告 | 10 | 15 |
Size Measurement | 計算工做量 | 12 | 15 |
Postmortem & Process Improvement Plan | 過後總結 | 20 | 20 |
本次實驗是第一次結對項目,相比以前的我的項目,此次實驗的方法步驟都有很大改變。兩我的一塊兒編程時,須要在方法、數據結構甚至是變量和函數名上達成一致。這減小了其中一方隨意編寫代碼的可能性,結對編程時也選擇了更加標準的語法、格式。每一個人獨自進行設計、實現軟件的過程當中不免要犯這樣那樣的錯誤。若是是結對編程的話,解決問題的能力就提升了,程序中的錯誤就會少不少,設計質量和代碼質量也會高不少,還會省下不少之後修改、測試的時間。由於有隨時的複審和交流,並且程序各方面的質量都會由於實力較強的同伴而變得更高。還有就是兩我的一塊兒合做一件事的時候,精神力更能集中、更專一,從而更能快速高效的完成任務。結對編程時我瞭解到了不一樣的解決問題的思路和算法,知道了一些還未接觸到的鍵盤快捷鍵和調試技巧。和同伴在一塊兒工做讓我更好地相互瞭解對方,從而更加理解她,加強了團隊凝聚力。一個成功的軟件團隊須要不少合做,有效地交流、相互學習和傳遞經驗是頗有必要的。