嵌入式軟體的測試(三)
針對與時間因素有關處理的潛在錯誤而設計的測試案例,可能是嵌入式軟體測試的另一個精華表現。譬如,不少人都有如此的經驗:只要不規則地亂按一些按鍵,有時就可把手機或其他手持設備弄當掉,必須重新開機才行;但若要詳細說明如何才把那個機器弄當掉的,卻又說清不楚,也不一定有把握每次都可以把機器弄當掉。
我們都知道在硬體沒有問題的前提下,如果發生當機狀況就是因為軟體中有錯誤存在(反過來則不一定,即軟體中有錯誤卻不一定會造成當機)。但是,在看似相同的使用過程(或給予相同的輸入資料)中,有的時候可以正常運作,而有的時候卻發生當機,那是怎麼回事呢?一般來說,是因為受到時空因素不同的影響才可能產生這種現象。先舉一個類似的例子來說明:如果一個星期以前用"ABCD"為關鍵字在 Google 上搜尋所得到的結果,與一個星期之後同樣用"ABCD"為關鍵字在 Google 上搜尋所得到的結果,兩者不一定是相同的;因為網路上那麼多人在創造資訊,只要時空因素有改變,雖然其他同樣的處理程序及條件不變,輸出的結果就可能會不一樣。如果需要掌握輸出結果,就必須能掌握時空因素的描述,譬如當清楚指明使用 Google 搜尋的確切時間以及地區別時,也許 Google 就能再度輸出一份完全相同的結果(當然這要看 Google 提供的服務功能到底有多強才行,在此只是個協助說明的例子)。
一個成功的、以找出可能與時間因素有關錯誤為目的的嵌入式軟體測試案例,是可以清楚地描述如何用一組輸入資料(包含輸入順序、或時間間隔等等說明)來把機器弄當掉的。只要依照測試案例的內容來執行測試,如果實際輸出結果與預期的輸出不同(譬如當機了),那這個版本的軟體就存在著某種(即測試案例的目的所描述的)時間因素有關錯誤。另外一個重點是,不會發生有時正常、有時卻不正常的狀況,因為成功的測試執行結果必須要能隨時再產生(reproduce)。
獲得這樣一個測試案例設計的費用,若相當於一個軟體工程師半個月的薪水,你覺得是便宜還是貴呢?(再提醒一次,相對而言,嵌入式軟體的測試是比較簡單的軟體工程技術應用。)
我們都知道在硬體沒有問題的前提下,如果發生當機狀況就是因為軟體中有錯誤存在(反過來則不一定,即軟體中有錯誤卻不一定會造成當機)。但是,在看似相同的使用過程(或給予相同的輸入資料)中,有的時候可以正常運作,而有的時候卻發生當機,那是怎麼回事呢?一般來說,是因為受到時空因素不同的影響才可能產生這種現象。先舉一個類似的例子來說明:如果一個星期以前用"ABCD"為關鍵字在 Google 上搜尋所得到的結果,與一個星期之後同樣用"ABCD"為關鍵字在 Google 上搜尋所得到的結果,兩者不一定是相同的;因為網路上那麼多人在創造資訊,只要時空因素有改變,雖然其他同樣的處理程序及條件不變,輸出的結果就可能會不一樣。如果需要掌握輸出結果,就必須能掌握時空因素的描述,譬如當清楚指明使用 Google 搜尋的確切時間以及地區別時,也許 Google 就能再度輸出一份完全相同的結果(當然這要看 Google 提供的服務功能到底有多強才行,在此只是個協助說明的例子)。
一個成功的、以找出可能與時間因素有關錯誤為目的的嵌入式軟體測試案例,是可以清楚地描述如何用一組輸入資料(包含輸入順序、或時間間隔等等說明)來把機器弄當掉的。只要依照測試案例的內容來執行測試,如果實際輸出結果與預期的輸出不同(譬如當機了),那這個版本的軟體就存在著某種(即測試案例的目的所描述的)時間因素有關錯誤。另外一個重點是,不會發生有時正常、有時卻不正常的狀況,因為成功的測試執行結果必須要能隨時再產生(reproduce)。
獲得這樣一個測試案例設計的費用,若相當於一個軟體工程師半個月的薪水,你覺得是便宜還是貴呢?(再提醒一次,相對而言,嵌入式軟體的測試是比較簡單的軟體工程技術應用。)
一直很想回應,但一直在拖,雖然一點久,可是還是感謝劉教授提出這非常有趣的主題,畢竟嵌入式系統的應用廣泛,軟體開發的確是有一些值得注意的事項,包括如有無OS的系統,或是SoPC等平台上的軟體開發。
回覆刪除如果案例設計的費用是一個軟體工程師半個月的薪水,當然是非常值得。可是多少時候,我們在許多project同時到期的壓力下,『沒有辦法』投資這重要的代價。
這讓我聯想到另外一個問題,嵌入式軟體通常被視為platform-dependent。那麼我們有多少東西能reuse呢?如果測試案例每次都得重新設計,那麼感覺太浪費了。這會回來讓我們思考,如何作好知識的傳承。不只是軟體的開發,還包括測試的know-how。
是否能提供一些經驗呢?
這個星期一參加了一個嵌入式軟體的座談會,討論了一個類似的議題:需不需要成立一個『嵌入式軟體的測試中心』,提供公正的測試驗證結果。基本上產官學都十分希望有這樣的組織,討論也很熱烈。會中我提出了兩個問題,但因為時間的關係,並沒有討論到,或許可以從這裡得到一些答案。
回覆刪除第一如何確認一個測試中心的正確性?因為沒有人可以保證軟體是沒有錯的。第二,台灣有IC測試(硬體)的公司,為什麼沒有軟體測試的公司?嵌入式可說是軟硬體通吃的產業,他在建立測試中心時應該注意什麼呢?
真的有很多東西想寫,雖然沒整理,甚至還有點亂七八糟:
回覆刪除一、立頌兄提的軟體開發與軟體測試,在我個人認知就是像在 security 相關研究裡的攻方與守方;乍看之下似乎是各有出發立場,但實際上最後是一樣的(攻的人想盡辦法攻,守的人想盡辦法守;最後才會共同瞭解問題的 lower bound 所在)。我是認為軟體測試最後就是與軟體開發(需求分析、設計)共同建置出好的軟體,其 competence 是一樣的。
二、薛教授提的兩個問題,可能還先要有前題才好討論。譬如:測試(testing)與認證(certification)究竟有何不同?硬體與軟體的測試究竟有何不同?這些都是值得先吵一吵的,否則答案寫完了才發現題目沒看清楚,那考試分數不會好看的。一般的直覺想法都是要"通過測試取得認證",但如同薛教授所說,軟體測試的目的是要證明軟體中有錯誤存在,並不是要證明軟體的正確性,那這裡不是很矛盾嗎?軟體測試應該是不會去管認證的,除非是專門發放"軟體有錯誤"的認證。其實有心人好好坐下來想一想,軟體測試中心的功能是可以浮現的,譬如專門設計各種有效的測試案例可能就是一大德政。
三、再強調一次,嵌入式系統軟體的測試(非硬體)是屬於比較簡單的軟體測試,容易上手,也是很好的起點。