1. 程式人生 > >wordcount第四周小組作業

wordcount第四周小組作業

try get rec 大小 阿裏 col end 推薦 操作

一、小組GitHub地址

https://github.com/muzhailong/wcPro.git

二、PSP表格

PSP2.1

PSP階段

預估耗時

(分鐘)

實際耗時

(分鐘)

Planning

計劃

30

30

· Estimate

· 估計這個任務需要多少時間

20

20

Development

開發

480

480

· Analysis

· 需求分析 (包括學習新技術)

30

30

· Design Spec

· 生成設計文檔

30

30

· Design Review

· 設計復審 (和同事審核設計文檔)

30

30

· Coding Standard

· 代碼規範 (為目前的開發制定合適的規範)

20

30

· Design

· 具體設計

30

30

· Coding

· 具體編碼

240

240

· Code Review

· 代碼復審

30

30

· Test

· 測試(自我測試,修改代碼,提交修改)

180

240

Reporting

報告

90

90

· Test Report

· 測試報告

60

60

· Size Measurement

· 計算工作量

30

30

· Postmortem & Process Improvement Plan

· 事後總結, 並提出過程改進計劃

30

30

三、模塊編寫和測試

這次的小組作業我負責的是UI和util類。

3.1 UI設計

功能:實現一個方便交互的UI。

實現:這個就比較簡單,這裏采用了文件選擇器,可以很方便的制作一個UI界面。

 1 package com.ui;
 2 import java.io.File;
 3 import javax.swing.JFileChooser;
4 5 /** 6 * ui界面模塊類 7 * @author wangyuzhe 8 * 9 */ 10 public class WordSelector { 11 /** 12 * 文件選擇器 13 */ 14 JFileChooser jfc = new JFileChooser(); 15 16 /** 17 * 設置界面ui 18 */ 19 public WordSelector() { 20 jfc.setCurrentDirectory(new File("c:\\")); 21 22 } 23 /** 24 * @return 使用ui界面選擇的文件 25 */ 26 public File select() { 27 jfc.setFileSelectionMode(0); 28 int state = jfc.showOpenDialog(null); 29 if (state == 1) { 30 return null; 31 } else { 32 return jfc.getSelectedFile(); 33 } 34 } 35 }

3.2 util設計

功能:生成隨機的文件供測試使用

實現:這裏是對於指定的文件(如果不存在會自動新建)和給定一個文件大小進行操作,下面的代碼中文件大小設置成了1KB,然後產生的隨機文件。文件內的所有字符均是符合作業要求的字符,即英文大小寫字母、數字和常用字符。

 1 package com.util;
 2 
 3 import java.io.BufferedWriter;
 4 import java.io.File;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 import java.util.Random;
 8 
 9 /**
10  * 工具類
11  * @author wangyuzhe
12  *
13  */
14 public class Utils {
15 
16     private Utils() {
17     }
18 
19     /**
20      * 隨機數類
21      */
22     private static Random random = new Random();
23     /**
24      * 合法字符集合
25      */
26     private static String str = "abcddefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!"
27             + "#%^&*_…()[]+=-:‘\"|<>,./? \n\t\r0123456789";
28 
29     /**
30      * @param fn 文件名
31      * @param sz 文件的大小 單位字節
32      */
33     public static void randomFile(String fn, int sz) {
34         File f = new File(fn);
35         StringBuilder sb = new StringBuilder(sz * 2 / 3);
36         BufferedWriter writer = null;
37         try {
38             writer = new BufferedWriter(new FileWriter(f));
39             char c = 0;
40             int len = str.length();
41             for (int i = 0; i < sz; ++i) {
42                 c = str.charAt(random.nextInt(len));
43                 sb.append(c);
44             }
45             writer.write(sb.toString());
46         } catch (IOException e) {
47             e.printStackTrace();
48         } finally {
49             try {
50                 writer.close();
51             } catch (IOException e) {
52                 e.printStackTrace();
53             }
54         }
55     }
56     
57     /**
58      * 測試生成隨機文件
59      * @param args 命令參數
60      */
61     public static void main(String[] args) {
62         String fn="1.txt";
63         int sz=1024*1;// 1k    
64         randomFile(fn,sz);
65     }
66 }

四、測試設計過程

需要實現的目標:UI類:可以正確的與用戶交互即可。

util類:正確運行,且運行時間不應過長;

生成的文件中,所包含的字符應是屬於3.2中str字符串中的某一個字符,即要滿足作業的要求;

同時要保證生成的文件內容是隨機的,這樣用於測試其他的模塊可以保證實驗結果的隨機性與正確性。

本模塊需要測試的內容並不是很多。

對於UI界面,文件選擇器的使用十分方便;

對於工具類,在該方法可以正確運行的情況下,我們只需要通過判斷生成的文件的內容就可以得出結果。

技術分享圖片

五、開發規範說明

 開發規範采用的是《阿裏巴巴Java開發手冊終極版v1.3.0.pdf》

 選定的開發規範:

常量定義

    1. 【強制】不允許任何魔法值(即未經定義的常量)直接出現在代碼中。

    2. 【強制】long 或者 Long 初始賦值時,使用大寫的 L,不能是小寫的 l,小寫容易跟數字 1 混 淆,造成誤解。

    3. 【推薦】不要使用一個常量類維護所有常量,按常量功能進行歸類,分開維護。 說明:大而全的常量類,非得使用查找功能才能定位到修改的常量,不利於理解和維護。

 代碼格式

    1. 【強制】大括號的使用約定。如果是大括號內為空,則簡潔地寫成{}即可,不需要換行;如果 是非空代碼塊則:

      1) 左大括號前不換行。

       2) 左大括號後換行。

       3) 右大括號前換行。

      4) 右大括號後還有 else 等代碼則不換行;表示終止的右大括號後必須換行。

    2. 【強制】 左小括號和字符之間不出現空格;同樣,右小括號和字符之間也不出現空格。

    3. 【強制】if/for/while/switch/do 等保留字與括號之間都必須加空格。

    4. 【強制】任何二目、三目運算符的左右兩邊都需要加一個空格。

    5. 【強制】采用 4 個空格縮進,禁止使用 tab 字符。

    6. 【強制】註釋的雙斜線與註釋內容之間有且僅有一個空格。

    7. 【強制】方法參數在定義和傳入時,多個參數逗號後邊必須加空格。

OOP 規約

    1. 【強制】避免通過一個類的對象引用訪問此類的靜態變量或靜態方法,無謂增加編譯器解析成 本,直接用類名來訪問即可。

    2. 【強制】所有的覆寫方法,必須加@Override 註解。

    3. 【強制】不能使用過時的類或方法。

    4. 【強制】構造方法裏面禁止加入任何業務邏輯,如果有初始化邏輯,請放在 init 方法中。

    5. 【推薦】循環體內,字符串的連接方式,使用 StringBuilder 的 append 方法進行擴展。

    6. 【推薦】類成員與方法訪問控制從嚴:

       1) 如果不允許外部直接通過 new 來創建對象,那麽構造方法必須是 private。

       2) 工具類不允許有 public 或 default 構造方法。

       3) 類非 static 成員變量並且與子類共享,必須是 protected。

      4) 類非 static 成員變量並且僅在本類使用,必須是 private。

       5) 類 static 成員變量如果僅在本類使用,必須是 private。

       6) 若是 static 成員變量,必須考慮是否為 final。

       7) 類成員方法只供類內部調用,必須是 private。

       8) 類成員方法只對繼承類公開,那麽限制為 protected。

集合處理

    1. 【推薦】集合初始化時,指定集合初始值大小。

    2. 【推薦】使用 entrySet 遍歷 Map 類集合 KV,而不是 keySet 方式進行遍歷。

六、交叉代碼評審

對於17056同學的代碼評審:

以我的水平的來說的話,他的代碼都是很優秀的那種,非常值得我去學習。如果真要說問題的話,正如他自己所說:為了測試,他的類全是public那種。

七、作業小結

由於是小組作業,每個人都有具體的分工,也都完成了自己的任務,各得其所,也是很棒的。

在每個成員遇到困難的時候也可以尋求隊友的幫助,也是一種非常好的團隊體驗。

wordcount第四周小組作業