UI自動化測試與軟體測試開發工程師所面臨的挑戰

shbwf發表於2009-07-01

對於任何一個需要開發有持久生命力軟體的組織來說,軟體測試至關重要,同時,自動化測試技術也顯得必不可少。比如像Windows這樣的產品,通常的生命週期可以長達10年以上。試想一下,沒有軟體測試的質量保證,沒有自動化測試技術的話,任何一次的產品改動、升級、補丁、導致的成本有多大?

之所以說自動化測試是尖端技術,原因在於自動化測試的技術難度,特別是UI測試自動化。 跟軟體產品一樣,自動化測試程式也講究效能、穩定性、可伸縮性等指標。測試程式除了要實現目標程式一樣的功能才能夠進行結果檢驗以外,測試程式還要實現額外的功能去觀察目標程式的行為。比如要自動化測試 dir C\*.txt 這個命令,測試程式除了要實現跟dir一樣的檔案讀取,萬用字元展開的功能外,還需要讀取dir命令的輸出結果才能夠進行結果的比對。同時也要支援跟dir命令一樣的靈活性和擴充套件性。這使得自動化測試在實現起來有可能比其測試目標的實現更加困難。而對於UI產品的自動化,實現起來就牽涉到讀取GUI的影像輸出(比如檢查是否正確彈出了MessageBox),模擬使用者的滑鼠鍵盤輸入(比如模擬使用者在儲存檔案的時候選擇正確的儲存路徑),同步測試產品和使用者的交流等等。這些技術門檻使得自動化測試成為一把雙刃劍,成敗不在於是不是去做它,而是有沒有能力把它做好。接下來的介紹會讓你對微軟的UI測試自動化和軟體測試開發工程師(Software Development Engineer in Test以下簡稱SDET)有更深入詳細的瞭解。

舉一個十分具體的UI自動化的例子:

1. 啟動計算器程式(calc.exe

2. 模擬使用者進行選單輸入,從普通模式切換到科學模式

3. 模擬使用者計算(4+6/2)的階乘

4. 檢查計算結果是否正確

要求:

1. 整個流程的執行在4秒以內完成

2. 能夠適應於不同解析度和語言 (不同語言的選單項文字是不同的!)

3. 能夠穩定執行,若非產品本身的確有bug,該序列不允許失敗

4. 如果下一版本的calc.exe修改UI風格 Win7中已經修改了),或者改為WPF實現,要求現有的測試程式碼僅做簡單修改即可繼續使用

對於剛入職的SDET來說,其實現難度已經足夠大得讓其寧願去寫一個calc.exe程式本身。無論是學校的教學還是課外的研究,針對UI自動化的資料幾乎是零。上訴功能和需求,需要工程師結合已知的知識和技能,研究出解決問題的最佳辦法。

UI自動化其實是一種程式與程式之間的通訊。測試程式需要跟目標程式通過某種程式通訊方式來獲取目標程式的資訊,包括UI元素的位置,顯示的文字內容,然後再模擬使用者的操作比如在特定位置點選滑鼠。就程式之間通訊方式來說,Windows平臺上有很多選擇,比如管道,TCPIPWindows訊息,共享檔案,RPC等等。對於UI自動化,最容易想到的解決方案是Windows訊息。通過Windows訊息以及跟Windows相關的API可以獲取計算器視窗,選單和按鈕位置。但真正開始用Windows訊息來實現UI自動化測試的時候,就會發現Windows訊息的一些不足,比如Windows訊息無法用於WPF程式,無法獲取Excel或者IE裡面的UI子元素。

所以,除了Windows訊息外,工程師還需要更深入地考慮其它技術。其間就需要研究微軟內部的各種UI Test Framework,瞭解不同Framework的實現技術,優劣以及和測試目標的匹配程度。在進行不斷的摸索,嘗試,原始碼分析後,工程師才會對微軟平臺各種技術有深入的瞭解,整個過程是把基礎的理論知識轉換為產品相關的生產力的過程。

UI自動化對於SDET來說有兩層含義。其一,對該技術的熟悉程式決定測試工作的質量。另外,由於UI自動化涵蓋的技術範圍和深度,使得該技術是鍛鍊 SDET的一個很好的平臺。微軟對工程師的技術技能要求不是限制在某一固定領域的,而是要求工程師鍛鍊能夠通用的核心競爭力。比如,作為SDET,通過2 年的努力,在Visual Studio的介面測試上取得了90分的成功,那麼,如果該工程師願意換一個專案做SDESoftware Development Engineer,即軟體開發工程師)的話,比如到SQL Server開發儲存過程的圖形化設計,他在前兩年所積累的技術技能,要能夠確保他在新的專案和職位上,取得同級別的90分。而UI自動化,對於鍛鍊這樣的核心競爭力是一個非常好的平臺,因為它至少包括了:

1. 精通微軟通用的開發工具和技術,比如C#NET Framework,多執行緒。把開發技巧運用到實際的專案中。

2. 熟悉Windows平臺的系統知識,比如程式間通訊,Win32訊息機制。站在微軟工程師的角度,通過具體的專案和程式碼充分了解Windows平臺。

3. 鍛鍊在壓力環境下解決實際問題的能力,比如深入分析COM/DCOM,研究UI Automation Framework的底層實現來解決技術上的細節問題。

4. 熟練掌握除錯技巧。UI自動化的開發過程牽涉到測試程式和目標程式,在除錯的時候需要處理兩者的同步問題。同時,UI自動化的穩定性是比較難解決的問題。除錯一個偶爾發生的錯誤是一個非常有挑戰性的任務。

5. 在自動化測試的開發過程中熟悉微軟的專案流程,最後,給SDET帶來的不僅僅是測試技能的飛躍,同時也讓工程師更加熟悉所測試的產品,更好地保證產品質量。

當一個SDET經歷了UI自動化測試,武裝上了上述技能,就意味著他熟知微軟平臺的開發技巧,體驗過程式開發過程中通常是如何犯錯,如何除錯,工程師在怎樣的情況下容易做出錯誤的判斷和假設,那麼,他就能夠很輕鬆地破壞別人的程式,找出漏洞。這不僅僅對測試工作來說是一個很好的起點,這樣的堅實技術背景還能夠讓工程師學習和發展其它技能的時候事半功倍。換言之,自動化測試對微軟的產品來說,是保證其可以持續成功的重要技術;對於優秀的SDET來說,是一項必不可少的重要的技能;對於剛入職的工程師來說,親身體驗和研究自動化測試,特別是UI自動化,能夠讓你實現學生生涯到職業生涯的轉變。

在後續的文章中,我打算介紹自動化測試和手動測試的比較,看看自動化測試所達到的效果是否等同於手動測試的錄製和重複。同時,也會具體介紹UI自動化測試開發的有趣細節。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11323760/viewspace-608007/,如需轉載,請註明出處,否則將追究法律責任。

相關文章