日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第四周作业wcPro

發(fā)布時(shí)間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四周作业wcPro 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

PSP2.1表格

PSP2.1

PSP階段

預(yù)估耗時(shí)

(分鐘)

實(shí)際耗時(shí)

(分鐘)

Planning

計(jì)劃

?40  ?20

· Estimate

· 估計(jì)這個(gè)任務(wù)需要多少時(shí)間

?30?20

Development

開發(fā)

?300?

· Analysis

· 需求分析 (包括學(xué)習(xí)新技術(shù))

?60?40

· Design Spec

· 生成設(shè)計(jì)文檔

?10?10

· Design Review

· 設(shè)計(jì)復(fù)審 (和同事審核設(shè)計(jì)文檔)

?10?10

· Coding Standard

· 代碼規(guī)范 (為目前的開發(fā)制定合適的規(guī)范)

?20?10

· Design

· 具體設(shè)計(jì)

?40?30

· Coding

· 具體編碼

?120?100

· Code Review

· 代碼復(fù)審

?10?10

· Test

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

?40?50

Reporting

報(bào)告

?20?20

· Test Report

· 測試報(bào)告

?10?10

· Size Measurement

· 計(jì)算工作量

?10?10

· Postmortem & Process Improvement Plan

· 事后總結(jié), 并提出過程改進(jìn)計(jì)劃

?10?10

?

??

?接口實(shí)現(xiàn):

我們小組講這個(gè)工程分成類7大模塊:

? ? ? ? ? ? param:參數(shù)解析模塊

? ? ? ? ? ? ? ?in? ? ?:輸入模塊

? ? ? ? ? ? ? ?core? :核心處理模塊

? ? ? ? ? ? ? ?out? ? ?:輸出模塊

? ? ? ? ? ? ? ? ui? ? :圖形界面模塊

? ? ? ? ? ? ? ? util? :工具類模塊

? ? ? ? ? ? ? ? start: 模塊集成模塊

? ? 我主要負(fù)責(zé)的是輸出模塊,各個(gè)模塊如下圖所示:

????

輸出控制模塊:

public class WordPrinter {
private List<Entry<String, Integer>> res;
private PrintWriter writer;

public WordPrinter(List<Entry<String, Integer>> res,PrintWriter writer) {
this.res = res;
this.writer=writer;
}
public void print() {
int sz=res.size();
Entry<String, Integer> tmp=null;
for(int i=0;i<sz-1;++i) {
tmp=res.get(i);
writer.write(tmp.getKey()+" "+tmp.getValue()+"\r\n");
}
tmp=res.get(sz-1);
writer.write(tmp.getKey()+" "+tmp.getValue());
writer.flush();//刷新緩沖
}
}

為了方便輸出,使用Map.Entry類來保存字符的名稱,以及出現(xiàn)的頻率。

使用Print Writer將要輸出的數(shù)據(jù)寫入文件中。

?

測試用例:

?

測試用例的設(shè)計(jì)主要分模塊內(nèi)測試和模塊間測試(集成測試)可以點(diǎn)擊查看。

? ? ? ?

?

單元測試截圖:

start:

in:

core:

評(píng)價(jià)單元測試用例效果:

  感覺我做的單元測試用例挺好的大部分都符合單元測試的集合要素(貌似是:自動(dòng)化,靈活,數(shù)據(jù)集合,報(bào)告記錄)。start模塊主要采用的是黑盒測試,因?yàn)閟tart模塊集成了所有的模塊,白盒測試部分只是做了一部分的判斷邏輯等。in模塊應(yīng)該來說是測試最為復(fù)雜的模塊,內(nèi)部方法比較多,針對(duì)每一個(gè)方法進(jìn)行測試然后使用套包的方法測試,效率還是挺不錯(cuò)的。core模塊相應(yīng)的邏輯比較少,因?yàn)閏ore模塊的很多東西都依賴與in模塊,所以就對(duì)接口的相關(guān)地方進(jìn)行的白盒測試。

?評(píng)價(jià)被評(píng)測模塊的質(zhì)量水平:

  start模塊:中

  in模塊:高

  core模塊:高

開發(fā)規(guī)范說明:

開發(fā)規(guī)范采用的是《阿里巴巴Java開發(fā)手冊(cè)終極版v1.3.0.pdf》

  選定的開發(fā)規(guī)范以及理解(我用以下的規(guī)范檢查我的代碼):

? ? ? ?常量定義

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

      理解:就是說常量不能使用變量拼接而成的。

        反例:int c;static int A=c;

?

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

      理解:很簡單不解釋

      舉例:long k=123L;

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

      理解:有時(shí)候我們會(huì)專門寫一個(gè)類來維持常量,這樣是不好的因?yàn)閷⑺械某A糠旁谝黄鹁拖褚粋€(gè)大雜燴一樣。應(yīng)該根據(jù)功能進(jìn)行放置,比如說和單詞容量有關(guān)的常量可以放在單詞的工廠類中。

  代碼格式

    1. 【強(qiáng)制】大括號(hào)的使用約定。如果是大括號(hào)內(nèi)為空,則簡潔地寫成{}即可,不需要換行;如果 是非空代碼塊則:

      1) 左大括號(hào)前不換行。

       2) 左大括號(hào)后換行。

       3) 右大括號(hào)前換行。

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

      理解:就是字面意思,不用解釋。

      舉例:while(i){

          ......

         }

    2. 【強(qiáng)制】 左小括號(hào)和字符之間不出現(xiàn)空格;同樣,右小括號(hào)和字符之間也不出現(xiàn)空格。

      舉例:void king();

    3. 【強(qiáng)制】if/for/while/switch/do 等保留字與括號(hào)之間都必須加空格。

      說明:格式上看的清晰一點(diǎn)。

      反例:if(t<0){

          .......

         }

    4. 【強(qiáng)制】任何二目、三目運(yùn)算符的左右兩邊都需要加一個(gè)空格。

      舉例:k = i + j;

    5. 【強(qiáng)制】采用 4 個(gè)空格縮進(jìn),禁止使用 tab 字符。

      說明:很多IDE都可以講tab設(shè)置為4個(gè)空格。

    6. 【強(qiáng)制】注釋的雙斜線與注釋內(nèi)容之間有且僅有一個(gè)空格。

      舉例:// fjei

    7. 【強(qiáng)制】方法參數(shù)在定義和傳入時(shí),多個(gè)參數(shù)逗號(hào)后邊必須加空格。

      舉例:void f(int a, int b, int c)

??OOP 規(guī)約

    1. 【強(qiáng)制】避免通過一個(gè)類的對(duì)象引用訪問此類的靜態(tài)變量或靜態(tài)方法,無謂增加編譯器解析成 本,直接用類名來訪問即可。

      理解:靜態(tài)方法屬于類,和類是綁定的,通過對(duì)象還要先找到類,在從類找到方法。

      舉例:

        public class Test{

          public static int a;

        }

        使用Test.a即可。不需在定義一個(gè)引用。

    2. 【強(qiáng)制】所有的覆寫方法,必須加@Override 注解。

      理解:Override注解貌似是編譯時(shí)檢查,如果重載出現(xiàn)問題編譯時(shí)不會(huì)通過的。

      舉例:

        public class Animal{

          public void voice(){}

        }

        public class Duck extends Animal{

          @Override

          public void voice(){}

        }

    3. 【強(qiáng)制】不能使用過時(shí)的類或方法。

      理解:一般來說過時(shí)的方法都會(huì)有風(fēng)險(xiǎn),或者效率問題。

      舉例:acm中最喜歡用的StreamTokenizer

    4. 【強(qiáng)制】構(gòu)造方法里面禁止加入任何業(yè)務(wù)邏輯,如果有初始化邏輯,請(qǐng)放在 init 方法中。

      理解:講邏輯放在構(gòu)造方法中會(huì)造成構(gòu)造對(duì)象浪費(fèi)大量的時(shí)間,有些對(duì)象構(gòu)造了但不一定會(huì)使用。

      舉例:略。

    5. 【推薦】循環(huán)體內(nèi),字符串的連接方式,使用 StringBuilder 的 append 方法進(jìn)行擴(kuò)展。

      理解:+相當(dāng)于使用多個(gè)StringBuilder對(duì)象,效率很低下。

      舉例:String a="asd";

         a=a+"few"+"few";

      正例:StringBuilder a=new StringBuilder();

         a.append("fewf");

         a.append("dsfew"); 

    6. 【推薦】類成員與方法訪問控制從嚴(yán):

       1) 如果不允許外部直接通過 new 來創(chuàng)建對(duì)象,那么構(gòu)造方法必須是 private。

      ?2) 工具類不允許有 public 或 default 構(gòu)造方法。

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

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

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

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

       7) 類成員方法只供類內(nèi)部調(diào)用,必須是 private。

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

    理解:這個(gè)符合最小訪問原則。

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

      理解:ArrayList默認(rèn)大小是10 Map的默認(rèn)大小是16,他們一般都會(huì)在容量達(dá)到75%的時(shí)候進(jìn)行擴(kuò)容處理,所以如果初始時(shí)候知道了容量可以避免擴(kuò)容的開銷,提升效率。

      舉例:

        List<String> a = new ArrayList<String>(100);?

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

      理解:看過Map源碼就知道,HashMap在內(nèi)部維持了一個(gè)Entry的數(shù)組,使用entrySet遍歷其實(shí)就是遍歷數(shù)組,如果使用keySet就行遍歷,是講所有的key打包成一個(gè)set然后再通過遍歷key從map中獲取相應(yīng)的value,效率低下。

      舉例:

      for(Map.Entry<String,Integer>e : map.entrySet()){

         .....

      }

?

存在的問題:

代碼的注釋比較少,讓人摸不著頭腦。

變量命名意義不是很明顯。

優(yōu)化環(huán)境
文件大小:40M
默認(rèn)時(shí)間:3.911

優(yōu)化策略:
in模塊
1.改變緩沖區(qū)大小,減少讀文件次數(shù) 默認(rèn)是1個(gè)字節(jié) 改變?yōu)?k
CACHE_CAPACITY=4*1024;
時(shí)間:2.178
2.StringBuilder對(duì)象設(shè)置為靜態(tài)的 實(shí)現(xiàn)重用
時(shí)間:2.124
3.設(shè)置StringBuilder對(duì)象較大的容量,從而避免頻繁的擴(kuò)展容量:
WORD_LENGTH=10
時(shí)間:2.156
WORD_LENGTH=10
時(shí)間:2.113
影響不是很大
core模塊
1.設(shè)置Map較大的容量,從而減少?zèng)_突;
默認(rèn)是16
MP_CAPACITY=1M 時(shí)間:2.012 最優(yōu)
MP_CAPACITY=40M 時(shí)間:3.296
MP_CAPACITY=20M 時(shí)間:2.581
MP_CAPACITY=16M 時(shí)間:2.473
MP_CAPACITY=4M 時(shí)間:2.427
MP_CAPACITY=1K 時(shí)間:2.241
2.改變排序方法
默認(rèn)采用堆排序 最優(yōu)
使用快速排序:慢

總結(jié):

沒有軟件開發(fā)就沒有測試,軟件開發(fā)提供軟件測試的對(duì)象。

軟件開發(fā)和軟件測試都是軟件生命周期中的重要部分。

軟件開發(fā)和軟件測試都是軟件過程的重要活動(dòng)。

軟件測試是保證軟件開發(fā)產(chǎn)物質(zhì)量的重要手段。

參考:

PrintWriter用法:https://www.cnblogs.com/xiaotiaosi/p/6394147.html

博客排版:http://www.cnblogs.com/kangzhishi0203/p/8691939.html

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/liqia/p/8747829.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的第四周作业wcPro的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。