皇家方舟

          工作總結

          ??????三個月來,一直都在學習楊博的編程思想,也閱讀了他推薦的幾本好書,通過這一段時間的學習,覺得自己確實在編程方面有了比較大的提高,對編程中最為重要的兩個環節(單元測試、重構)也都有了一定的了解;另外一個收獲是作為一個團隊的成員,應該如何與隊友進行交流并表達自己的想法。
          ??????現在,談談如何進行團隊合作。首先,應該為自己定位,自己在團隊中處于什么位置,應該做哪些事情?其次,當自己有什么新的想法(不管是否正確)時,一定要與團隊成員進行交流。如果自己的想法是正確的,那團隊就很可能采用自己的新想法;當然有的時候想法也不一定正確,但是卻肯定會引起大家的討論,也許就可能從新的想法中得到其它的什么提示,而產生另外的好的想法也不一定。
          ???????接著,講講自己在這段時間的學習成果吧!雖然不多,但卻非常有用。首先,學習了使用TDD(測試驅動開發)模式進行軟件開發;其次,學習如何寫好注釋;另外,還學習了怎樣嗅出代碼中的臭味,并進行重構。
          ??????

          posted on 2006-12-07 08:57 阿輝 閱讀(256) 評論(4)  編輯  收藏 所屬分類: 學習日志

          Feedback

          # 學習測試(TDD) 2006-12-07 12:47 阿輝

          在編程的過程中肯定會用到外部包的方法(即除自己寫的程序以外的程序,可以是團隊中其他同事編寫的,也可以是jdk的,等等),在自己并不是非常清楚該方法的功能之前,應該為它編寫一個小測試,通過測試了解該方法的功能。在確定該方法符合自己的要求后再去使用它。當然,該測試并不需要放置到我們的單元測試代碼中,在我們確定它符合我們的要求之后,必須將它從單元測試代碼中刪除。同時也可以把該測試存放到自己的學習文件夾中,用這個文件夾在專業存放一些對外部包方法的小測試程序,因此當你第二次再使用某個方法而忘了怎么使用時就可以從該文件夾中找到該方法對應的測試程序,也許再看一次測試的注釋并將它運行一下就可以明白了該方法的用法。如果再不明白的話,則需要另外編寫自己需要的功能對應的單元測試,并加入到該文件夾中。  回復  更多評論   

          # 數值對象 2006-12-08 14:16 阿輝

          數值對象一經創建,其狀態永不改變。即類中沒有set方法,只能通過構造方法賦值,必須實現equals(),且對它的操作均必須返回一個新的對象。  回復  更多評論   

          # 談重構之“以查詢取代臨時變量” 2006-12-08 14:48 阿輝

          這種重構方法是最近學習的,感覺實用性比較大,而且想起自己常常在程序代碼中到處出現的if-else沒法處理。學習些項重構后,可以將程序中很多的類似的條件判斷代碼去除掉,使代碼更為優美。下面舉個例子說明該項重構的好處:方法getMessage()的功能是得到類名和異常信息組成的字符串。其中有兩個對null的判斷。由于該方法中的空值判斷只有兩個,所做的重構并沒有體現出其特別的價值,但是當在你的程序中出現很多這種代碼時,你就會覺得心里不舒服,并且會發現這樣重構是非常值去做的,最重要的是它提高了程序的可讀性。
          注:該例子并不會在實際編程中存在,僅用它來說明這項重構而已。
          public String getMessage(Object object,Exception e)
          {
          String className;
          if(object != null)
          {
          className = object.getClass().getName();
          }
          else
          {
          className = "the object is null";
          }
          String exceptionMessage;
          if(e != null)
          {
          exceptionMessage = e.toString();
          }
          else
          {
          exceptionMessage = "there is no exception";
          }
          String message = className + exceptionMessage;
          return message ;
          }

          重構后的代碼如下:

          public String getMessage(Object object,Exception e)
          {
          String message = getClassName(object) + getExceptionMessage(e);
          return message;

          /**
          * 獲得對象的類名。
          */
          private String getClassName(Object object)
          {
          return object != null ? object.getClass().getName() : "the object is null";
          }
          /**
          * 獲得異常的信息。
          */

          private String getExceptionMessage(Exception e)
          {
          return e!= null ? e.toString() : "there is no exception";
          }

          從上面可以看到臨時變量message只使用了一次,因此其沒有存在的必要了,我們可以將其內聯。
          最終代碼如下:
          public String getMessage(Object object,Exception e)
          {
          return getClassName(object) + getExceptionMessage(e);


          很明顯,重構后的代碼比最初的代碼要清晰許多,而且可讀性也要強出不少。  回復  更多評論   

          # 創建對象時注意set方法的使用順序 2006-12-08 17:36 阿輝

          在單元測試中,很多時候需要對一個對象進行初始化,且該初始化對象會在多個測試中使用到。因此這個工作不能很隨便,在初始化該對象時一定要注意一些細節上的問題,我個人認為最好是按照該類中字段的定義順序來初始化,這樣不容易漏掉,但是在實際中常常是沒有按一定的順序來設置字段值的,不僅容易漏掉,而且可能會導致同一個set方法使用多次(在程序中我就見過這種情況),致使前面的set方法設置的字段值無效。因此就可能導致在后面的測試出錯時無法定位錯誤,檢查測試數據時要是只看到第一個set方法,并將其修改,但事實上該對象中的字段并未改變,因為后面誤用了set方法,其值實際上為最后一個使用set方法的地方賦值的。
          按順序初始化對象還有另外一個好處,讓閱讀的人看得清晰,以及為該類增加方法時需要用到該測試數據時也易讀,可以很好的使用該對象。  回復  更多評論   


          My Links

          Blog Stats

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 贡嘎县| 兰溪市| 贵港市| 忻城县| 衡阳县| 井陉县| 姚安县| 平阴县| 江山市| 灵璧县| 萍乡市| 沙洋县| 涞水县| 桂林市| 屯门区| 株洲县| 加查县| 喜德县| 石屏县| 海晏县| 巴楚县| 黄平县| 达州市| 全州县| 蛟河市| 莱芜市| 浑源县| 庆阳市| 象州县| 新巴尔虎右旗| 岳池县| 平定县| 泗水县| 浙江省| 南开区| 宁化县| 永胜县| 万全县| 嘉禾县| 瓮安县| 灵璧县|