跳到主要內容

發表文章

目前顯示的是 3月, 2008的文章

2.0.0α檢討

其實在α末期就該寫了,後來在看writing solid code就想說看完在寫,應該會有不同的想法。 掛我的名字的有107個,真的是暴表。舊bug、新、舊需求、規格問題不記,其餘bug我把他分為幾類: Unit test沒測到。 這應該是最不允許發生的bug,有很多很明顯的bug,幾乎佔了一半以上,不是字打錯,就是這畫面沒有測到。非常容易找,只要一一核對規格書,這bug就找到了。我想這次較容易發生這種bug的原因,有兩個。 1.沒有一個一個字對仔細,其實這很難控制,有些地方我對了兩輪以上,結果還是有錯。這次改介面的地方實在太多了,唉!一個一個測還是很容易漏掉,或者沒有觀察到的錯誤。 2.全部功能完成後,沒有完整的在回頭重測一遍。這次是做完一部分我就會先測這一部份的功能,最後所有功能完成,沒有回頭重測,就只有跟俊賢交互測試了。造成了兩個結果,部份功能漏作與後面改的影響前面,像在右鍵選單的部份,因為先作右鍵選單,國際指數資料出來後,中間先停住,先作國際指數,再回來作右鍵選單,結果後來發現中間銜接的選單功能,好像很多都漏作了。並且後面做的部份好像改到前面邏輯,造成bug。在中間轉換開發做的不夠細膩,也是形成這些bug的原因。 改底層,影響到繼承類別或使用函式。 雖然之前就知道會有這樣的問題,但似乎還是無法避免,大概還是沒有意識到只要變動,就要查所有的引用類別,這會花許多額外的時間,但似乎沒有更好的作法。 未改完整,下一個測試circle測到上個circle改出的bug。 這次發生了幾次,為了解一個bug,但是卻產生更多的bug的問題,多是畫面顯示的問題還有繼承引用的問題。尤其在那段circle結束前當天改的更容易發生,因為沒有更仔細的測試就放上去了,結果第二天就發現沒改好。Bug就又多了幾條。在改畫面顯示時應該多注意,放大縮小,重劃,symbol update等問題。 其他比較特別就是post message的那個問題吧!好像重點就只有改完後,作更仔細的測試再放上去這像要點XD。

Writing Solid Code

這本書真的很棒!改變了我很多的想法,也教了我很多避免錯誤的方法,其實看我們的程式碼,會發現其實很多地方有遵守這些規則,當然有些地方沒有。有些原則,我認為不需要,而有些原則我持不一樣的看法。這都值得拿來討論。 有幾點感想: 1. 不僅要有防禦機制,還要有紀錄與防止錯誤的維護機制,例如輸入函式的資料流超出預定範圍,除了得考慮是讓函式無作用,我覺得更重要的是進一步,紀錄錯誤,通常只有在使用者輸入資料方面,我們會作警告的對話框,若是資料讀錯,或程式自己計算出未預期的錯誤,通常會吃下來,不動作。但更好的作法應該是把他記錄下來,並且注意為什麼錯!c++的throw catch或許是個很好機制,應該試著建立起類似的維護機制。 2. 有範例的註解,並且注明可能誤用的狀況。 3. 逐步Trace 寫過的code,所有的分支判斷都要跑過避免,只測到單一狀況。這有另一像好處,為了少跑一次分枝測試,會試著把不需要的if去掉,或將特例集中處理,增進效率。 4. 不要寫通殺的程式,亦造成歧異的函式越容意造成bug。 5. 注意需求的語意,不要利用其他功能的特性來達到需求的目的,容易發生不要的副作用。例如將nStep+(i==j),將true當作數字來使用。 6. 較短的程式不一定跑的比較快,KISS原則。 7. 關於態度的章節,有非常深的感慨,因為我有不少他講的缺點。49-61條每一條都是金玉良言啊! 8. 程式開發準則的優先順序,之前似乎有想過這樣的問題,有些時候我也拿捏不了那個準則應該優先,我會想兩個以上的解決方案,請俊賢替我決定,當然我也不知道他的準則是什麼,哈哈。我覺得在每個不同的開發專案,可能因為不同的需求特性,開發準則優先順序會有所變動。這在開發前,PM應給予適當的提示,講白話一點,就是你要寫的有彈性點,還是這只是暫時方案,後續維護不干我們的事或下一版就會全面更新了,這樣寫法會有很大的不一樣。通常我是覺得要做的很彈性很麻煩,我才會問到底想要作怎樣,我預設都是將來改變規格,我也可以很快的應變,但是最近我發現,之後變動處都不是我預期變動的地方XD。 以下是書中提到的各要點: 1. 啟動所有編譯器中的預警功能。 這點我就認為不需要了,適當等級除錯便可。 2. 利用lint找出那些編譯器所找不到的錯誤。 可移植性的測試,我們的系統大概沒有這樣的計畫,如果要跑也絕對改不完。 3. 有單元測試