Supporting Test-Driven Development of Graphical User Interfaces

advertisement
Third International Conference on Software Testing, Verification, and Validation Workshops
2010 IEEE ICSTW.
SUPPORTING TEST-DRIVEN
DEVELOPMENT OF GRAPHICAL USER
INTERFACES USING AGILE
INTERACTION DESIGN
Theodore D. Hellmann, Ali Hosseini-Khayat, Frank Maurer
報告人: 歐陽玉慧
2011/5/30
outline








Abstract
I. INTRODUCTION
II. PROBLEM
III. RELATED WORK
IV. OUR APPROACH
V. LIMITATIONS
VI. FUTURE WORK
REFERENCES
Abstract

TDD of GUIs 目前的兩難:
1.
2.

TDD 需要發展中的app有一定的穩定度, 來避免
tests 去頻繁變動, 但 GUIs 在開發過程中卻很有
可能要常變.
建立GUI tests 最簡單的方法就是用capturereplay tool , 但必須GUI先存在才能使用.
本文介紹一種新的user interface TDD (UITDD)
方法, 利用CRT 由 low-fidelity prototypes 紀
錄 test scripts.
 可使
GUI tests 更好寫 且 不需要先有GUI
I. INTRODUCTION

TDD的好處與欠缺

好處:
encourages communication between customers and developers,
 increases programmer confidence,
 increases software quality,
 decreases bug density without decreasing productivity [1][2]


欠缺: 大部分的TDD 研究仍未解決TDD of graphical user
interfaces (GUIs), 兩個最大的挑戰:
GUIs 在開發過程中很有可能要常變  使得tests要經常修改
(很不直覺)
 建立GUI tests 最簡單的方法 capture-replay tool (CRT), 必須GUI
先存在才能定義 tests.

I. INTRODUCTION (cont’)

本文的作法與好處
 作法:
1.
2.
3.
4.
5.
6.
利用CRT結合 low-fidelity prototyping tool
收集 details of user stories
用這些stories建立系統的 low-fidelity prototype.
進行prototype的usability evaluations找出且修復UI
flaws
重複 repeated 上述流程直到 prototype 夠stable.
用最後的prototype 加上預期的GUI behavior 資訊, CRT
就能記錄複雜的 acceptance tests.
此tests 就能被發展中的GUI去run確保符合user期待(在
prototype 上的定義)
I. INTRODUCTION (cont’)

本文的作法與好處
 好處:
利用夠明確的prototype進行agile interaction
design 能得到兩大好處
1.
2.
開發初期就能找出usability concerns, 最後的GUI就比
較不用常改
若prototype 能加上一些自動化資訊(用來識別與確認
widgets), 同時這些資訊實際實作中又可維護,  tests就
能用prototype紀錄 且 在實際GUI上replayed .
II. PROBLEM

TDD核心優勢與應用在GUI-based app之屏障
 核心優勢:
 tests不用code存在就可先寫,
之後就可以寫讓 tests pass
的code.
 要能重整既有的code, 而不用擔心會破壞 tests.
 兩大屏障讓TDD無法有效應用在GUI-based
 重整或修改GUIs就會破壞其tests
app:
(even 改變跟semantic 無
關)
 GUI tests 很難用人工撰寫, 雖可用CRT簡化但GUI一定要
先存在, 這代表UITDD一定只能靠人工撰寫.
II. PROBLEM (cont’)

GUI tests之問題與可能的solutions
 雙重負擔:
1.
2.
(GUI常變, 其test suite就要重複維護)
維護費用會持續不斷(substantial)
若開發者視錯誤為“the test’s fault”而非程式可能的
bugs就會更不願意改程式且不會認真看待 failing
tests ( 這比上一個問題更嚴重, 因為TDD之核心
benefits 就是 developer confidence)
 Solutions
可試著減小GUI及其test suite必要的改變
 現已有可自動修改或夠簡單的方法可修改 broken GUI
tests (他人作法: Section III, 作者方法: Section IV)
 Team
III. RELATED WORK

A. Capture-Replay Tools
CRTs:運用紀錄 GUI的interactions並且存成 a sequence of actions可在
GUI上replayed (但根本的難題就是 widgets 無法被 test code 存取)
1. 初版CRTs解法: 只用 keyboard input 及 screen position of mouse clicks
來紀錄的 test script可簡單的replay這些動作, 但卻無法驗證正確的
系統行為, 且依賴screen coordinates有很大的缺點(對GUI之nonsemantic changes非常敏感,如重排 widgets 都會造成 test failures)
2. 次版CRTs作法: 用object maps(存夠多的widget資訊測試時就可作
fuzzy match [5], [3])的 testing, 可使tests應變力更強, test時可存取
widgets去測試其behavior, 但此法很難寫code(因為要正確定位
widget所需的資訊量太大)
3. Keyword-based testing是最近發展的GUI testing技術, 利用給每個
widgets設定unique keyword(而非儲存大量的widgets資訊),好處就是
測試時只要找一個keyword 且與特定widget之interact(可視為一個透
過CRTs寫test的簡單且健全的方法)

III. RELATED WORK

B. User Interface Test Driven Development

近年來已有發展出可支援UITDD的工具


提供 framework 支援 widgets identification 與interaction更簡單
且健全作法,簡化人工 GUI test (更健全的做法還有把測試存到
intermediate form 及用來測試 widgets 的 intermediate
representation 以輔助 test maintenance [6].)
缺點:

雖可減少UITDD的effort,但仍要用人工撰寫code(容易產生錯誤,
且有agile team證實此法要一直修改tests, 用CRTs重新紀錄tests
都比修改原本的tests還要快)
III. RELATED WORK

C. Support for Test Script Maintenance

支援 test maintenance 的tool也是最近的研究主題:




Compiler-inspired approach[9]: 不需要人工互動就能建立一個 legal的
test steps sequence自動取代 broken test 事件
TIGOR system[5]: 利用加入明確的 GUI test scripts type 資訊來簡化
manual maintenance
REST[3]: 產生App程式內widgets與test內的使用之 關聯資訊來建議
test script where and why 可能 fail
Actionable Knowledge Models [10]: 把 tests 存在中間 model中, 可把導
致test failure 的根源紀錄在single location而不用人工放在 individual
test scripts.
IV. OUR APPROACH

A. Tools
 ActiveStory
Enhanced (supports agile interaction design)
 讓usability
engineers能建立 low-fidelity prototypes.
 這些prototypes是由一組有各式各樣UI states 及“hot
zones”(涵蓋了引起states間轉換的特定範圍的 clear
transparent buttons)的pictures所構成
 可很便宜的建構及調整low-fidelity prototypes, 讓
ActiveStory Enhanced 可以用很便宜且分散進行多人的
可用性測試(usability tested)
IV. OUR APPROACH(cont’)

A. Tools
 LEET (利用 Microsoft’s User Interface Automation Framework (UIAF) 所發開發
的CRT [12])
 此Framework
可提供 keyword-based testing (此法基本)
 唯一可用來辨識widget的屬性就是利用其AutomationID,
所以就可能從ActiveStory Enhanced prototype 來記錄
test 並且可replay在actual GUI上.
 這可利用在每個hot zone附加一個AutomationID 並確定
GUI上相對的 widget 也會使用同一個ID來達成.
IV. OUR APPROACH(cont’)

B. Process

1.
Process
建 User stories: 用ActiveStory Enhanced 建GUI low-fidelity
prototype
2.
Usability evaluations: 進行此prototypes的可用性評估, 可減少最
後的GUI所需的改變(low-fidelity prototypes 可快速建構且少成本, 對
iterated agile usability evaluations最為理想)
3.
加入自動化資訊: 把2.得到的 stable prototype加上自動化資訊
就可進行複雜的verifications
4.
建tests: 用LEET紀錄prototype上的互動為一組 acceptance tests
5.
Run: 此 tests就能在開發GUI-based app過程中執行testing
IV. OUR APPROACH(cont’)

B. Process

好處:



UITDD沒有了附加限制: 可用最簡單的工具CRT來建立tests, 代
表不用人工撰寫 test code--用既有工具就可建UITDD
降低維護成本: 因為實作前已經先做了usability testing, 這個
部分來來回回的設計工作可因為這項好處及user購買量的增
加來得到補償
減少broken tests: 雖有工具可輔助修正broken tests, 但最佳的
作法還是在broken tests第一次發生時就減少之(這可避免上述
其他UITDD方法的遇到的問題)
IV. OUR APPROACH(cont’)

C. Example
 UITDD以Windows
7 calculator為例, 設計考量含:
 keys
representing numbers,
 keys representing operators,
 a display 放在最上面顯示輸入的數字或運算結果
 此例目前就只先考慮addition
 In
feature.
this story, the five button, plus button, nine button, and
equals button are clicked in that order, and we expect that
the display should read “14” at the end.
IV. OUR APPROACH(cont’)

C. Example
AutomationID 會設成“Five”(當實際的GUI也把實際的“5”按鍵
設為一樣的ID, test 就會找到並且按下它(如prototype所設計))
1.建 storyboard (Fig1): 此 test sequence 可在
ActiveStory Enhanced上的prototype建構出的
storyboard
2. 建test(Fig2): 用 LEET 紀錄此prototype之
sequence of interactions 作為 test script
在UIAF, 用來顯示text的widgets會設Name屬性
對應該text
IV. OUR APPROACH(cont’)

C. Example
5. 當 interface 被完成後, 此測試仍
可適當地運作 Fig4.
3. 實作GUI: 用WPF實作可將每個widget name
屬性設定的值視為自動 AutomationIDs.
4. Run test: 先修改 Fig2.的 Start動作指向實際
的GUI 結果如 Fig3.
(因為還沒寫邏輯所以再跑Fig2第二行到最後test會
先失敗, 讓test可找到並執行動作是因為keywordbased的測試,容許widgets resized, moved, even
改成相似types都不會破壞test script,)
V. LIMITATIONS

Evaluation is upcoming (本法可用在UITDD上, 但尚未證
實其 practicality or usefulness)


短期: 要求開發者進行簡單應用系統的不同功能的UITDD, 提供本

長期: 實際用在業界一段時間確認本法對開發團隊的實際可用性
未可證實之假設:


法對於個人是否實用及對應用系統發展有多少幫助之相關資訊
對GUI之prototype重複進行usability evaluations, 開發過
程中開發者對GUI要修改的量就會比較少
本法測試所用之low-fidelity prototype 有其限制:

除了 buttons, hyperlinks 其他如text boxes, draggable items,
gestures還沒有工具支援,還是必須人工撰寫測試
VI. FUTURE WORK



完成evaluation後, 就開始探索mixed-fidelity
UITDD (結合low-fidelity prototypes 的手繪元件與
實際的widgets)
建立prototype widgets與app實際功能的橋梁
漸進式的替換 low-fidelity prototype 成 functional
widgets, GUI就能由這些 prototype 漸進地開發
(此法可避免用 low-fidelity prototype 紀錄的tests
但卻在不同GUI 上執行的gap)
REFERENCES
[1] R Jeffries and G. Melnik, "Guest Editors' Introduction: TDD - The Art of Fearless Programming," IEEE Software, pp. 24-30, 2007.
[2] N. Nagappan, E. M. Maximilien, T. Bhat, and L. Williams, "Realizing Quality Improvement through Test Driven Development: Results and Experiences of
Four Industrial Teams," in Empirical Software Engineering, 2008, pp. 289-302.
[3] M. Grechanik, Q. Xie, and F. Chen, "Maintaining and Evolving GUIDirected Test Scripts," in IEEE 31st International Conference on Software Engineering,
2009, pp. 408-418.
[4] A. Holmes and M. Kellogg, "Automating Functional Tests Using Selenium," in AGILE 2006, 2006, pp. 270-275.
[5] C. Fu, M. Grechanik, and Q. Xie, "Inferring Types of References to GUI Objects in Test Scripts," in International Conference on Software Testing,
Verification, and Validation, 2009, pp. 1-10.
[6] W. Chen, T. Tsai, and H. Chao, "Integration of Specification-Based and CR-Based Approaches for GUI Testing," in 19th International Conference on
Advanced Information Networking and Applications,2005, pp. 967-972.
[7] A. Ruiz and Y. W. Price, "GUI Testing Made Easy," in Testing: Academic and Industrial Conference - Practice and Research Techniques, 2008, pp. 99-103.
[8] A. Ruiz and Price Y. W., "Test-Driven GUI Development with TestNG and Abbot," in IEEE Software, 2007, pp. 51-57.
[9] A. M. Memon and M. L. Soffa, "Regression Testing of GUIs," in ACM SIGSOFT International Symposium on Foundations of Software Engineering, 2003,
pp. 118-127.
[10] Z. Yin, C. Miao, Z. Shen, and Y. Miao, "Actionable Knowledge Model for GUI Regression Testing," in IEEE/WIC/ACM International Conference on
Intelligent Agent Technology, 2005, pp. 165-168.
[11] Ali Hosseini-Khayat, Yaser Ghanam, Shelly Park, and Frank Maurer, "ActiveStory Enhanced: Low-Fidelity Prototyping and Wizard of Oz Usability
Tool," in Agile Processes in Software Engineering and Extreme Programming, 2009, pp. 257-258.
[12] Theodore D. Hellmann. (2010) LEET (LEET Enhances Exploratory Testing) - CodePlex. [Online]. http://leet.codeplex.com/
Download