Ruddy Lee 分享空間

Emergent Design 演化設計

中央大學軟體工程課程 — 軟體測試之道

leave a comment »

這篇文章是獻給犧牲了連續四個星期六;來上課的同學們的(包括:中央大學、輔仁大學、海洋大學、台北科技大學、台中教育大學)。

我想跟你們說:  能跟你們在一起上課是我的榮幸,你們在課堂上問的問題,讓我又覺得自己跟我的三個孩子之間的距離變近了許多。這些問題好像是他們早該提出來問我的。但卻錯過了,這都應該歸咎於我的疏忽吧! 沒能做好一個父親應該扮演的角色;沒能及時跟他們一起討論未來,但;或許還來的及…,這一點要特別感謝大家。

首先;我決定開始留長髮了! 背負著這個所謂的『國父的形象』好多年了,今天感受到你們的朝氣,好舒服、真愉快,年輕真好…,很想再年輕一次,雖然這是完全不可能的,但心智上卻是一定要做到的,所以就讓那一簇還能長長的髮根,繼續爭扎的活下去,變長吧!

上課時;有一些個問題是我即時回答後,自己一直覺得沒能好好描述的,藉著這篇文章,希望整理出一些規則來,讓有相同困擾的同學有所依循,請參考。

問題: 面對一個龐大的軟體程式(原始碼),我該從哪裡開始呢?

問的真實在,作為一個軟體工作者而言,我們大概都會有經常遇到這種問題的機會,到底該如何處裡呢? 說來話長;底下這本書就是完全在談這件事的,一定要看。

『 軟體構築美學 』

原文:  Brownfield Application Development in .Net

作者:  Kyle Baley ‧ Donald Belcham

中譯: 蔡煥麟、張簡才祿

 

我不想長篇大論來談閱讀這本書後的心得,這一點就留給你們自己來吧! 我只想分享一下自己多年來的習慣,供大家參考。

步驟一、先從外觀開始,先了解它的基本設計理念,弄清楚它為何會長成這個樣子。這一點如果可以直接從文件或是輔助說明上看到,那可以算是相當幸運的事了。雖然正確與否難免還要花上一番手腳之後才能見真章,但有文件可以閱讀已經可以算是一個好的開始了。

步驟二、接下來便是運用『探索性測試』的時機了。先由主要功能試起,一路玩到次要功能,再到不起眼、容易被忽略的邊界問題去走走,記得一定要做筆記,記下你探索後的發現,千萬不要急著做一些破壞性的測試,企圖很快找出問題的作法,往往會演變成見樹不見林的效應,反而把時間花在一些個不起眼的細微錯誤上,相當浪費時間。所以要先記下來,事後再看筆記時就比較容易分析問題的輕重及影響的大小了。

※ 埋下I/O的觀察點(就是Output Log 的輸出點),慢慢的在程式中增加一些 Log 的觀察點,等到了一定的數量時,就可以透過Log的分析來看出程式的內部流程了,千萬不要加太多,因為有時輸出過多反而會漏掉一些重點,或是影響到程式執行的速度,反而掩蓋了真正的 Bug。

※ 接著是加入 Unit test的routine, 通常我會用 Console 模式的TestProject ,(只因為他可以適用在雲端的 AP)用 WinForm 可以更明確些,可以清楚的測出邏輯部分的層次性(記得在Log 中加入階段說明,則層次便會自動浮現出來了,這時候;你可能會把一些 private 的功能函示改成 public,千萬要記的註記!)。

步驟三、試著降低程式的相依性,然後才是減少程式的複雜性。在動手改程式之前,一定要先有單元測試來支撐你的重構動作。所以先針對想要拆解的程式模組,進行所謂的單元測試,再做好單元測試之後便可以大膽的進行重構了。千萬不要一次就做一大堆單元測試,然後才去做程式的重構動作。最好是針對相關的模組,一次做完三、五個單元測試後便進行一次重構,才不會發生浪費一再的重複對同樣的程式重疊的作重構的現象。

步驟四、試著問自己,如果採用相同的程式架構(framework)下,重寫一次需要花你多少時間? 若是重新改個新架構時,是不是會更好或是更省時間呢?這是我一向最喜歡採用的徘徊在抽象與明確之間的交錯判斷方式,這種在巨觀與微觀之間的來回思索方式,往往可以讓人對整個專案看得更清楚更容易客觀的做出決定。

步驟五、一定要不斷持續的進行整合與部署。不要一意按部就班的在進行大幅度的程式修改,經常回過頭來將整個程式做一個完整的整合的動作,絕對是值得的一件事,它可以讓你及早發現不該犯的錯誤,並即時的回頭。

甚麼時候才可以開始大改特改他的 function name 呢?!

必須要有Unitest 的 routine 才可以開始做 重構Refactor的動作,千萬別急著犯錯.

步驟說完了,但好像意猶未盡,有緣的話;下回見了… 不知道;到時候我的頭髮可以長到多長了,哈!

Written by ruddyllee

2010 年 11 月 12 日 於 04:29:46

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: