2016年8月29日 星期一

什麼是多型 (polymorphism)

所謂的"多型",指的是 runtime 時期執行的內容
在C#當中,有下列四種多型的意義,其中最常提及的就是OO的繼承式多型:
1). 繼承式多型 (inclusion)
在design time,可以用父類別型態容納子類別的物件,在 run time 進行函數呼叫時會呼叫到子類別的函數,重寫 (override) 父類方法

2). 泛型
List<T> 中的 T 就是參數型別,依據參數的型別決定實作的內容

3). 運算子多載 (overloading)
C#可以多載運算子 (ex: 可以重寫 == 的行為)

4). 強制同型 (coercions)
自動將型別轉換,ex: 在 run time 時 int 轉成double



"多型"與"動態繫結(Dynamic Binding)"是相關的, dynamic binding可利用(virtual function)來達。

1). 晚期繫結也稱之動態繫結(dynamic binding)。
簡單的說,就是物件的行為並不是在編譯時期 (compileir-time,就已經決定了。而是在程式執行時期於(晚期)(run-time)才動態地決定 的。如何動態地決定。就看物件當時的狀態(state)而定,物件封裝了所有可能的狀態處理 方法,並且根據外邊送來的訊息做出適當的反應。這也就是晚期連結的意義,這是物件導向 一個很重要的精神。

2).繫結
是將程式中所使用到的各名稱(包括程式名稱及變數名稱),分配到適當的記憶體位置。
其中在編譯過程中即完成連結的稱為靜態繫結(Static Binding),又稱為早期繫結(Early Binding)。如果是在程式執行過程中才完成繫結的,則稱為動態繫結(Dynamic Binding),又稱為延後繫結(Late Binding)。

2016年8月28日 星期日

專業主義

大概在今年6月底收到MTD team的需求,希望開發一個Tool,把所有machine test reports 做一個資料分析,彙整成一份報告(csv格式)。

以下是一開始從MTD team收到的資訊:

  • 目前大約有200台machines, 都放置在 ~\machine_data 資料夾裡面
  • 每個machine有60個test report要分析
  • 每個test report 依據test name,存放在~\mXXXX\test_results\YS@prepship\Test
  • 每個test report的xml格式都很類似


時程估算方面,依據之前工程師用matlab開發MAS的經驗,一個test report大約一個小時,所以粗估60個test reports大約要7天。

然後,我就開始做了...災難也開始了...

首先,根據MTD team的說法,由於我先前已經做了一個parsing tool,所以"只要修改一下"原本的parsing tool,便可以符合他們的需求。
這個認知整慘我了...
因為 input 與 output已經不同了,我幾乎是重寫整個parsing tool,這部分大概花4天,絕對不是"只要修改一下"

再來,MTD team給我的資訊只有部分正確,詳述如下:
  1. 目前大約有200台machines, 都放置在 ~\machine_data 資料夾裡面
    • 錯! 200台machines的資料放置在 ~\machine_data 與\\172.xxx.xxx.xxx\d 資料夾裡面
    •  ~\machine_data 不需要 Id/Password ,但是\\172.xxx.xxx.xxx\d 需要Id/Password才可連線,這部分大概花了1天
  2. 每個machine有60個test report要分析
    • 錯! 60個test report是200/250的machine,後來又新增加了12個350的test reports
    • 這12個新增加的test reports是全新格式,這部分大概花2天
  3. 每個test report 依據test name,存放在~\mXXXX\test_results\YS@prepship\Test
    • 錯!~\mXXXX\test_results\YS@prepship\Test 這個資料夾結構是人工後續手動輸入,因此有很多錯誤,造成test report 找不到
    • 因此,只好加入log,針對找不到的test report手動把資料夾結構調整成正確
    • 手動把資料夾結構調整再加上log機制,就花了3天
  4. 每個test report的xml格式都很類似
    • 錯!xml schema只要有一點點不同就必須"特別處理" (special handle)。幾乎每個test report都要個別處理,共通性的test report少之又少...
    • "特別處理"意味著需要額外的effort,大概花了6天
另外,最後彙整產出的csv檔案還需要加上:

  • 顯示machine type (從CM_Options.xml讀取)
  • 顯示單位(從HTML而來)
  • test report (xml) 與CS 習慣閱讀的HTML,KPI顯示的字串不同,必須一個一個檢查

這些零零總總又多花了3天...

總結上述天數是19天,是原本粗估(7天)的2.7倍...
在開始專案之前,我應該要審慎評估的,這才是專業!