2016年1月15日 星期五

Testing: 測試自動化(二): 測試流程

在先前的簡介中,提到Cucumber與Calabash,在此章節便是要進入這兩個工具的流程,下圖則呈現了使用這兩個工具的主流程。

428343_02
 
從上圖可看出測試自動化可分三個階段:
A. 描述操作行為
B. Ruby實作
C. 執行
    - 測試成功
    - 測試失敗
        - 修正,重複Step 2.

# 描述操作行為
主要是進行測試案例的功能與操作情境描述。開發或測試者可以用自然語言描述欲進行的測試案例,包含Feature(功能描述)與Scenario(情境)兩種描述,範例如下所示:
    1. Feature: 描述你所要測試的功能、角色與條件。
    2. Scenario: 描述該功能的測試情境、操作步驟與預期結果。

428343_03

該範例在Feature的部份描述了欲測試的功能,開發者(測試者)預期該應用程式可以提供使用者在首頁的商品瀏覽,測試者則為該App的會員;Scenario則定義了測試的相關步驟與預期結果。

# Ruby實作
這階段是配合Step1的測試案例進行程式實作,先前的章節有介紹過Calabash是以Ruby on Rails為基礎,所以這部份的實作自然也是用Ruby來進行。除了支援Ruby語法以外,實際上測試手機應用程式的操作,還是需使用Calabash提供的API來進行。範例如下所示:

428343_04

# 執行
執行主要是運行我們的測試案例,並且觀察實際結果。實際結果可以藉由Calabash產生的報告來觀察,若是每項測試皆通過,則是以綠燈顯示,表示所有測試情境皆完成,範例如圖一所示;反之則是紅燈,範例如圖二所示;若是紅燈,則表示當中有錯誤或是測試案例失敗,需要回去修改程式碼、測試情境或是Ruby的測試實作,範例如圖三所示,不斷重複以上步驟,直至每個測試皆能順利通過。範例如圖一所示:

圖一
428343_07
圖二
428343_05

圖三
428343_06

2016年1月13日 星期三

Testing: 測試自動化(一): Cucumber及Calabash簡介

在專案執行的過程中,由於時間、人力與各種資源的限制下,有時開發團隊無在對遞交的產品作完整的測試,因為使用者的情境過於複雜,狀況也不一,在有限的資源下,測試時間總是被壓縮,專案經理與測試人員不是刪減測試案例,就是沒有時間測試全部的案例。在測試的時間被壓縮之下,由於測試的工作被任意刪減,開發團隊完全很難掌握遞交出去的軟體品質如何?當團隊面臨兩難的處境時,測試自動化則是不錯的解決方案,使用人力與測試自動化的比較如下:

428343_01

經由上述的比較,測試自動化也並非【銀彈】。測試自動化較適用於重複性、冗餘和人為易判斷錯誤的問題,除去這些,人力的支援也是必要的,測試自動化僅是輔助人力,增加軟體品質的工具,並非完全取代人工測試的絕對方法。

測試的主要類型有單元測試(Unit Testing)、整合測試(Integration Testing)與回歸測試(Regression Testing),當然還有其他測試方式,但測試自動化的工具對於這三種測試有很大的助益。

1. 單元測試: 一種軟體測試方法,藉由程式內獨立的單元或元件進行的測試。
2. 整合測試: 軟體的測試方法,從獨立的軟體模組測試到相關的模組,直至包含所有的模組。分為由上而下、由下而上、大爆炸測試。
3. 回歸測試: 在軟體開發後,用來找尋或是複測軟體臭蟲的測試方法。

簡略介紹以上三種測試類型後,該進入今天的主題 - 測試自動化的工具: Cucumber與Calbash。以下為工具的主要特性:

    - A framework for writing software specifications
    - A tool for executing those specifications
    - Specifications are written in a readable language that is close to natural language.
    - Scenarios – user behavior driven tests
    - Steps – combine mobile operation and logic

    - A tool
- Predefined and custom steps
    - Reuse of tests across platform possible
    - For BDD-style acceptance testing
    - Run on physical devices or simulators
    - Support for webview
    - Ruby based
    - Cross-platform mobile testing tool
    - Cucumber: Android or IOS testing

了解上述這兩種工具的基本特性後,可以歸納出Cucumber其實就是為了執行測試案例的事前準備,也就是軟體功能的描述與測試案例的撰寫工具,然而Cucumber最方便之處,便是能用自然語言的方式表達(中文亦可),可以讓團隊在軟體開發初期或是功能描述上更為便利、直覺;Calabash則是在測試案例撰寫後進行的案測試實作,由於Calabash能夠支援Web, Android和IOS,加上各種平台皆用Ruby on Rails語言來實作,對於開發人員或是測試人員來說,都能減輕負擔,無需學習多種語言便能恣意地完成測試功能的實作。簡介完這兩種工具後,下個章節將進入Cucumber與Calabash的流程。