嵌入式軟體的測試(三)
針對與時間因素有關處理的潛在錯誤而設計的測試案例,可能是嵌入式軟體測試的另一個精華表現。譬如,不少人都有如此的經驗:只要不規則地亂按一些按鍵,有時就可把手機或其他手持設備弄當掉,必須重新開機才行;但若要詳細說明如何才把那個機器弄當掉的,卻又說清不楚,也不一定有把握每次都可以把機器弄當掉。 我們都知道在硬體沒有問題的前提下,如果發生當機狀況就是因為軟體中有錯誤存在(反過來則不一定,即軟體中有錯誤卻不一定會造成當機)。但是,在看似相同的使用過程(或給予相同的輸入資料)中,有的時候可以正常運作,而有的時候卻發生當機,那是怎麼回事呢?一般來說,是因為受到時空因素不同的影響才可能產生這種現象。先舉一個類似的例子來說明:如果一個星期以前用"ABCD"為關鍵字在 Google 上搜尋所得到的結果,與一個星期之後同樣用"ABCD"為關鍵字在 Google 上搜尋所得到的結果,兩者不一定是相同的;因為網路上那麼多人在創造資訊,只要時空因素有改變,雖然其他同樣的處理程序及條件不變,輸出的結果就可能會不一樣。如果需要掌握輸出結果,就必須能掌握時空因素的描述,譬如當清楚指明使用 Google 搜尋的確切時間以及地區別時,也許 Google 就能再度輸出一份完全相同的結果(當然這要看 Google 提供的服務功能到底有多強才行,在此只是個協助說明的例子)。 一個成功的、以找出可能與時間因素有關錯誤為目的的嵌入式軟體測試案例,是可以清楚地描述如何用一組輸入資料(包含輸入順序、或時間間隔等等說明)來把機器弄當掉的。只要依照測試案例的內容來執行測試,如果實際輸出結果與預期的輸出不同(譬如當機了),那這個版本的軟體就存在著某種(即測試案例的目的所描述的)時間因素有關錯誤。另外一個重點是,不會發生有時正常、有時卻不正常的狀況,因為成功的測試執行結果必須要能隨時再產生(reproduce)。 獲得這樣一個測試案例設計的費用,若相當於一個軟體工程師半個月的薪水,你覺得是便宜還是貴呢?(再提醒一次,相對而言,嵌入式軟體的測試是比較簡單的軟體工程技術應用。)