搜尋此網誌

2011年1月24日

測試自動化 & 自動化測試 (Test automation / Automatic test)

五年前一直在 cook 和推動測試自動化,最近剛好要準備投影片,所以想把概念整理下來。
本篇討論概念,另外會寫一篇關於 Android automatic test 的文章。本篇希望涵蓋各種執行方法,有彈性的運用在系統測試面。

本篇純粹是個人經驗,非業界專業用語或教科書用語。
也不用太狹隘的去解釋自動化這個字眼,例如 dir 是個指令,廣義來說也是個自動化的執行方法或環境。

在我的規畫,是希望自動化方式能提高工作量穩定且降低人為失誤,最重要是將測試人員的能力與層次做提升,而非用來取代人力或減少人事成本的考量。其中特別要注意的是,自動化的前提是 DUT (系統、軟體、GUI...) 是處在可以被測試的狀態,而非僅處在可以用的狀態軟體 Guys 最奇怪的想法之一就是東西可以動了,你們就可以測了。這是不對的,是要可以被測試,然後才可以進行測試。如果開發前,沒有將測試的需求放入,到時候就沒有"軟體測點",那請問要如何進行控制? 一個沒有鎖的門,卻要鎖將去開鎖,不是很奇怪嗎? 所以我提倡的是開發前一定要將測試需求放入,這也就是所謂的 TDD (Test-driven Development)。

思考起點:
  • 任何事情都遵守一個 model => Pre-condition -> Input -> Process -> Output
  • 將 Process 用非人工方式處理,就稱為自動化。當然也分 Full / Semi / 全手工三種模式。

定義: (本篇以測試自動化為思考原點) 
  • 測試自動化: 將事情,透過軟體來達成自動化的執行。範圍將在下面做定義。
  • 自動化測試: 狹義解釋為針對 Code 本身的驗證自動化。廣義的定義跟測試自動化一樣。
測試自動化的定義

 

目的:
  • Routine job (類似系統備份、自動安裝、Server 設定等項目)
  • Long run / Stress test
  • 產線測試程式
  • System benchmark / Performance test
  • 資料分析 / Data mining
  • Unit test
  • 儀測 (NI 的 Labview 就是個好例子)
  • Network 產品測試 (能用 protocol 觸發進行測試)
  • 自動手臂 (環測、機器手臂、治具控制等)
  • GUI test / System test (這塊比較難)
  • Regression test
  • Parameter test (各種組態、執行路徑、變數、環境改變的測試自動化)
  • Infomration check
  • Diagnostic test (Memory leakage, CPU usage, ...)
  • Data input

SEARCH 處理原則: (參考 1992 一篇論文)
  1. Setup
  2. Execution
  3. Analysis
  4. Reporting
  5. Cleanup
  6. Help

好處:
  • 固定流程 (穩定性、長時間續航力、變異性低、可靠度高) => 特定領域的好處,非全部
  • 自動化 (節省人力)
  • 若能實現一對多控制,將更能節省時間
  • 用時間和次數分攤成本 (可重複使用)
  • Routine jobs

壞處:
  • 並非所有事情都可以自動化,需要人眼判斷的部分,若由 Sensor 或影像處理判讀,其可靠度值得商議。
  • 公信力 (沒有工業標準,容易被挑剔)
  • 準確度 (誤判的機率比較高 - False positive / False negative)
  • 開發的成本
  • 一對多控制 implement 困難度高
  • 純 GUI 部分難以自動化。就微軟的經驗,他們會忽略 GUI 的展現層,直接呼叫底層的物件模型,或者用類似的方法來進行控制。
    • Method1: Keyboard / Mouse record and replay
    • Method2: Inspection test (參考 NI 機器視覺與影像處理)
    • Method3: 呼叫底層 DOM or function call => 與使用者實際執行路徑可能不同,有些 Bug 會找不到

Link Topology - 連結方式:
  • Client - Server (Server: 控制者 / Client: 代測端)
  • Loop mode (Test-Station-Output -> DUT1 -> DUT2 -> Test-Station-Input) => Smartbit 就是一個例子
Topology Examples

使用對象:
  • Network appliance
  • CPE device
  • Telecom device
  • Software component / Software application
  • Electronics analysis / Instrument control
  • GUI automation
  • Server maintenance

Test Scope & Layer mapping


Test Scope from Layer View

實現方法:
  • 程式撰寫進行控制 (High level language / Scripts)
  • 套裝測試軟體
  • Keyboard / Mouse 攔截
  • Keyboard / Mouse 錄製 & replay
  • 軟體單元測試
  • 軟體動態測試 / 靜態測試
  • DOM 控制

特定 OS provider 提供的自動化測試軟體:
  • Google Chrome or Chromium: Auto test
  • Ubuntu: Checkbox
  • Android: CTS
  • Android: Monkey / Monkeyrunner
  • Meego: MCTS / QA tool / Compliance program / mnts / ui-automation / OTS (搞不清楚它到底在定義啥...ps. Meego Wiki 內容有些不錯,但是排版方式真是爆爛的,找資料真的會找到吐血)
  • Microsoft: LTK
  • Adobe DCTS (For Flash feature)

常用工具: (有的是軟體、有的是測試 framework)
  • Labview
  • QualiSystems
  • Codenomicon / Nessus
  • AutoIt
  • AutoHotKey
  • Sikuli
  • Visual Studio
  • Chickenfoot
  • Macro (巨集)
  • Scripts (Bash / Power shell / Batch / Android - ASE / Python / Perl / Ruby / ...)
  • Android - Monkey / Android - Robotium / Android - JamoSolution / Android - Autoandroid
  • JUnit
  • JMeter
  • SOAPUI
  • OpenSTA
  • Testkit / Testrunner
  • QTP
  • Rational
  • Selenium
  • Watir 
  • LoadRunner
  • STAF
  • QMetry
  • Loadstorm
  • TestComplete
  • SmarteSoft
  • OProfile
  • strace
  • ...

關鍵字:
  • Auto test / Automatic test / Test automation / Automative
  • Clicking monkey
  • GUI test
  • keystrokes / Keyboard / Mouse record and replay
  • Distributed execution environment

參考網頁:

沒有留言:

張貼留言