跳到主要內容

Re: 配合修改介面的心得

單元測試終於結束了,雖然之前就預期介面修改會很麻煩,在寫測試計畫與測試時,才真正的體會真的是suffer。僅僅改小小的一段,得了解這段程式碼到底在幹什麼,才知道改了這段對程式有什麼影響,程式碼嘛大家也知道,有時候看半天也不知道到底他為什麼這樣寫,或者他這樣寫會有什麼影響,甚至是自己以前寫的也要花點時間回想為什麼要這樣寫。在寫測試計畫時,在找這段改完會有什麼特徵可以觀察的到。有時候寫在特殊的檢查機制,正常來說不會發生,要測通常得bk配合給錯誤資料或自己在程式碼中作手腳。總之寫測試計畫跟花在改的時間可不遑多讓,有時還覺得毛毛的,有種「這段真的這樣測就好嗎?」的想法。
我一直在想,如果下次要作類似改介面的事,要怎樣作,才能減少測試的成本與錯誤發生的情況。我又重看「重構」這本書有關介面修改和測試的部份。配合「重構」所介紹的方法與我們開發現況,我有幾點建議。
1.舊有的介面暫時不要移除,等整體連結測試完成,再看是否需要移除。
不移除的原因主要有幾點。
a.可階段性修改,測試。
在大幅度翻修介面時,像這次多對多的介面修改,改的初期希望可以先對同樣介面修改
處先作測試,在一步一步修改不同的介面,如果拿掉舊介面,我們必須一次就把他改完才能測試。
b.比對測試。
當舊介面與新介面產生的結果不同時,可以馬上就知道哪裡不一樣,也可利額外的測試函式來進行比對。
c.配合舊有程式邏輯
有時候舊程式邏輯是配合舊介面所得出的資料,而且大部來說更改舊有程式邏輯並不是好的修改方法(太複雜了),通常我們會把新介面的資料改成跟舊介面所得資料一樣,當有舊介面時,我們就可以較容易比對、產生相同邏輯的資料。
當然把舊介面移除有時是控制舊介面的遺毒不要殘留,在「重構」這本書建議說有時介面替換太複雜或牽扯太多,無法一次移除介面,可以利用thorw
error的方式並標注不建議使用,來強迫使用介面者必須使用新介面或catch error。不過書中改介面的流程也是在測試完才把舊介面移除。

2.利用中介(轉藉)函式作二段式修改,像GetTWSECategoryIndex(TWSE_SERVID, CBK_CAT_ALL,
vcsCat)這這舊函式,vector同時回傳包含長名和短名的資料,遺憾的新介面並沒有提供這樣的功能,因此在改的時候我們通常要將他轉為我們需要的格式,而有時不是傳回的vector資料格式不符,有時是回傳的bool直改變,舊介面再沒抓到資料會回傳false,而新介面則是傳回一個空vector。這種情形我想到利用中介函式來修改,共同創一個中介函式或類別來轉藉新函式至舊函式的邏輯,例如寫一個類別叫newBkTalk裡面包含GetTWSECategoryIndex這函式,但是他實際的工作是將新介面轉換成舊介面的處理邏輯,而在修改時也很好修改只要把需要換介面處將bktalk的指標轉成newbkTalk即可。
這有兩個好處,1.集中管理,當我們修改時不用再一個個對照,想要換成什麼,並作測試,而當一個錯誤發生,又得重新測試相同的舊介面轉換之處,對每個地方修改只要作一次即可。2.可寫測試函式來測試轉換邏輯是否正確。通常會遇到某些參數帶入時,才發現竟然會與原來預想不同。利用中介函式,可以列舉所有可能進行比對測試,避免轉換出我們未預期的結果,這筆我們在測試還要找各種資料來測所有的結果好很多吧!但是這是在寫測試計畫時才想到的,都已經改完了所以就沒有用了。

暫時寫到這,腦袋裡好像還有一些東西沒表達出來,有點亂,等釐清在繼續寫下去。

對了告訴大家一個方法可以不用登入論壇就能回覆相同主題的方法,只要回覆同一主題至F61RShare@googlegroups.com這裡就可以了。而大家也不需要登入論壇就可以看到論壇討論的文章,只要登入後選擇訂閱論壇文章即可。只有有新主題或文章就會寄信至大家的信箱了。而要發表新主題也只要寄信至F61RShare@googlegroups.com即可。希望論壇能多些水,都乾掉了。

在 2007/3/8,河馬 <hippo_su@yahoo.com.tw> 撰寫:
> 呵呵...原本就有排時間呀.....
> 之前是漏排了吧.....所以我才提醒要特別注意呀....
>
> On 3月6日, 下午11時26分, cccm...@gmail.com wrote:
> > 今天配合bk修改介面,將sysset裡面有用到的函式都改完了,具統計sysset也才僅僅"65"個要改介面的地方,但就搞了我一個下午,才剛剛進
> > 入測試而已。原本看起來只是要換一下函式而已,就像更名一樣,嘿嘿!改第一個,就明顯的體會出沒那麼簡單,除了要找到對應的函式,裡面所該帶的函式也要
> > 稍稍想一下,有時不是一眼就看得出來到底該帶那一個參數,上下程式碼要稍微看一下,就算sysset我幾乎改過一半以上,在改的時候也會稍微猶豫一下。
> > 果不其然,全部修改完成後,編譯後,開始測試時,果然輕易發現一個bug,天知道還有多少bug藏在裡面。有時候某些函式只是特殊的檢查機制,只在特定
> > 時候才可能發生,有可能出了一兩個版本才會發現吧。嘿嘿!最近又找到一個至少是180版本之前就存在的bug,這種bug可是四處存在的。我可以想
> > 像,IMMain此版bug爆增的慘狀了。
> > 這是我改完的建議,是類似這種重構,應該正式的排入時程,而且時程還短不得,正常來講應該是改一個測試一個,而且像這次是多介面轉成同一介面的,要帶入
> > 適當的參數,程式碼有時要還要稍微理解一下,可不是簡單的替換,如果以改一個測試一個來說,一個大概平均也要十分鐘吧,那麼sysset要650分鐘,
> > 也就是大約11個小時,1個半天,當然這是最佳狀況,如果從與熊共舞所提出奈米完成度來看,大概乘以2是合理認為70%有可能達成的機會。所以
> > sysset光改介面應該可以排三天吧。不知道IMMain要排多久?
> > 其實我有另一個想法,應該先開新介面,將舊介面先轉藉到新介面上,等於是說舊介面底子是用新介面的函式,先看看運行是否有問題,沒問題的話,就可以利用
> > 舊介面轉藉新介面的原理一對一對轉,也就不用一個一個測試了。這是重構那本書提供的作法。
> > 不過如果依重構的正常作法來說的話,得先預想所有測試案例,對每次重構都得保證和原來程式運算出來的結果需一致,當然我們是沒有作這種事。重構的兩難是
> > 沒有新增新功能,看不出實際的效果,但他的確會把系統架構改的更好,但所花的時間並沒有想像中的少,尤其花在測試的時間。
>
> --~--~---------~--~----~------------~-------~--~----~
> 您收到此郵件,是因為您訂閱了 Google 網上論壇的「個金產品研發處分享論壇」
> 群組。
> 如要在此群組張貼留言,請寄電子郵件至 F61RShare@googlegroups.com
> 如要取消訂閱此群組,請寄電子郵件至 F61RShare-unsubscribe@googlegroups.com
> 如需更多選項,請造訪此群組:http://groups.google.com/group/F61RShare?hl=zh-TW
> -~----------~----~----~----~------~----~------~--~---
>
>

留言

這個網誌中的熱門文章

勝券在握

其實這本書,感覺上寫的有點雜,比上一本講巴非特的書更難懂,兩個講的東西其實是一致的。投資原則便是先選產業,再選公司,慎選時機進場。只買了解的企業是價值投資一貫的原則。價值投資的書大概就先看到這裡了,彼得林區不知道是屬於那一類的,接下來大概會看這部份的書。暫時的目標是把杜金龍介紹的書單看完,真的還不少。接下來的投資會以巴菲特的方法來做,感覺上這比較適合我,練習把漲跌不當一回事,對我而言真的很重要。期權大概不會再玩了,買了以後一直在看漲跌,令人受不了。工作時都不能專心。 就價值投資人而言,真的不需要我們的產品,因為第一點就把我們程式特性打死,不理會股票市場的漲跌,這樣報價功能就沒什麼意義了,價值投資根本不需要技術分析,除非我們能提供相關價值投資的資訊,但我們基本分析真的很爛,看不到什麼資料。有機會我來思考一下價值投資到底要什麼資料,能不能把他寫成一個可運用的程式。 以下是我認為重要的書摘,其實這也只包含最後一章,我認為也只有這章值得做書摘。 巴非特相信使用短期價格來判斷一家公司的成功與否是愚蠢的。取而代之的是,他要公司向他報告因經濟實力成長所獲得的價值,一年一次,他固定檢查幾個變數: 初始的股東權益報酬率。 營運毛利、負債水準與資本支出需求的變化。 該公司的現金產生能力。 如果這些經濟指標正在進展,他知道長期下來,結果會反應在股價上。短期之內,股價所發生的是是不合常理的。 投資策略 不理會股票市場每日的漲跌 不擔心經濟情勢。 買下一家公司,而不是股票 管理企業的投資組合 巴非特原則 企業原則 這家企業是簡單且可以了解的 了解一家企業如何產生利潤的相關經濟活動。 這家企業的營運歷史是否穩定 他必須經得起時間的考驗。 這家企業的長期發展前景是否看好 市場特許權,五力分析 經營原則 經營者是否理性 理性的經營者將只會把多餘的現金,投資在那些產生較資本成本報酬率為高的計畫裡。 經營者對他的股東是誠實坦白的 報告時能知道營業部門如何營業,坦承失敗,了解公司的目的是使股東權益報酬率達到最大。 經營者是會盲從其他法人機構的行為 當心『其他公司也這麼做,一定沒問題』為自己行為辯護的經營者。衡量經營者競爭力的一個方法是,看他們如何運用自己的思考能力以避免依附群眾心理。 財務原則 把重點集中

Slim Diray 1/15

飲食:早餐/麵包;午餐/自助餐;晚餐/蘋果*1+柿乾*1+蛋糕*2。晚餐八點前吃。 運動:Boot camp1+Boot camp3 +腹部運動*1 體重: -7.8 公斤 (與前日同重) 74.2 公斤 大腿圍:57cm(+-0) 腰圍:88.5cm(+-0cm) 就寢時間: 02:00 檢討:今天晚上吃的也不多,運動量也不少,但是減不下來,人體真是奇妙啊!一點都搞不懂。 今天下班回來,經過健身工廠,想去看看他們免入會費後費用如何,結果一個長得很像浩角翔起阿翔的教練叫DJ,來推銷,還蠻會說話的,也很活潑,看起來瘦瘦的,但是他說他是海陸的,說他也是練得很厲害,胸肌還動了一下,秀一下胸大肌。他講解的感覺上是不錯啦!我也想知道我要怎樣減下肢與腹部,只是這個分館,太小了,預計4/1開幕,綁一年約月繳1000左右,還要繳手續費1000元,並不便宜,一直跟我說1000/30一天也才30幾元。但是我又不是每天報到,一禮拜去2-3天就不錯了,一個月最多十幾次,這樣一次就7-80了吧。這還是比較有空一點的時候,如果工作忙的時候,可能那個月就泡湯了。可見只要不是美女推銷員,我的智力正常多了。我跟他說看公司可不可以簽約,當作員工福利,我就先參考看看。對了Emma姊,要去看一下胸大肌跳動嗎!你不是要減肥嗎?要尋找春天嗎?我覺得DJ很適合ㄟ,會搞笑,最近剛結束三個月戀情,他正在尋找戀情。他是引誘我說他們已經很多女會員簽約了,跟我講一起找。 普魯斯特問卷 11.你最奢侈的是什麼? 我骨子裡是一個很強調C/P的人,基本上我覺得我的花費值得這個價的話,我就不會覺得奢侈了,我最大的單一消費也就是出國旅遊吧!但是我覺得這是值得的,每一趟旅遊,我都盡量讓他成為我人生不可磨滅的一部分。所以只要有出去我就寫遊記。如果在別人眼中,大概會覺得我花在腳踏車上的費用太高了,但是有在騎腳踏車的人,就會覺得我都買入門級和便宜貨。全身上下的腳踏車裝備也都是最便宜等級的。其實我覺得我最奢侈的是,我只做短暫不明的分析,就決定購買某種投資商品。賠了不少學費。卻每次都覺得沒學到什麼投資概念。這才是最奢侈的。 補一個現在我覺得最奢侈的幸福,就是女朋友躺在我懷中一起在床上看影片,(妄想課長上身,發春中)。

Slim Diray 1/13

飲食:早餐/麵包*2;午餐/大板條;晚餐/蘋果*1+魚肉*30g+餅乾*1。晚餐八點前吃。 運動:Boot camp2+Boot camp3 +腹部運動*1 體重: -6.8 公斤 (與前日同重) 75.2 公斤 大腿圍:57cm(+-0) 腰圍:88.5cm(+-0cm) 就寢時間: 02:00 檢討:晚上吃的很少,運動也超量,但就是沒減下來。又到了停滯期了嗎? 昨天講馥菁是大魔王,我就想到電車男中的陣釜大魔王,嗯!的確有那股味道在。今天一整天都在為昨天知道的消息煩惱。先靜下心吧!還是什麼都別想。 昨天一直想寫一個點,昨天又跟之前台北的美麗保險推銷員通電話了,嗯!要繳保險了,打電話來關心一下。她也是我遇到美女智力會下降的證明,簽約的時候根本就是失神狀,講哪裡就簽哪裡,被賣了都不知道。她是高雄人,這次過年會回來,一定要照張像留個念。當初判斷她好像結婚了(無名指戴戒指),但是看她的習性,應該是還沒有,這次一定要問出來,如果他在高雄工作,我一定追她。(謎之聲...明明就是嘴砲,她又不會在高雄工作)。 想到她,我就想到我當初在台北想追的女孩,這件事過了很久,我也離職了,可以解密了。他是同部門的助理,她很可愛,因為不同樓層,很少見面,所以當初是用msn進攻,不過他都打火星文,看她的字,傷透腦筋,要拐超多彎。那時她有男朋友了,經過兩個多月的聊天,忘記當初怎樣問到她男友的,她說他男友一直打魔獸不理她,很不高興(魔獸真是去死去死團的好友啊!),我就心想喔!時機到了,那個禮拜六,就打電話給她,想請她這個士林在地人帶我逛士林夜市,這是之前在msn承諾我的。結果她說沒空。我就想說好吧!下禮拜吧! 結果下禮拜一,她就..........消失了,禮拜三的時候,主管開會的時候,就問我們有沒有跟她連絡,她什麼都不講就消失三天了,問是不是我們某人害的,那時我心裡就想,靠!不會吧!不想履約,也不用連工作都不要了吧!因為那時是msn聊天,所以沒有人知道我跟她超熟的。是的,到我離職也沒有人知道這個秘密。之後msn上,也沒看到她了。我一直以為他封鎖我了,(造成'我打電話約女生的陰影...)。過了一、兩個月後,突然看到她上msn,原來她上線的時間,剛好跟我相反,那時我下班都不會注意msn,所以都沒注意到她上線,後來聊了才知道其實他當初離職,是主