Upgrade to Pro — share decks privately, control downloads, hide ads and more …

淺談自動化測試

 淺談自動化測試

開發過程中常遇見需求溝通或理解不一致等問題,或每次要手動測試全部功能。自動化測試可以幫你解決這些問題。
本次簡述自動化測試,了解基本觀念。

James Wang

July 01, 2021
Tweet

More Decks by James Wang

Other Decks in Programming

Transcript

  1. 你是否遇過以下問題 • 擔心害怕改 A 壞 B。 • 功能一直疊加測試不完。 • 想的與程式執行結果不一致,哪裡錯了?

    • 系統越來越難改,改動牽一髮動全身。 • 系統可以正常運行,但不敢償還累積的技術債。 • 花費大量時間處理 BUGS。 • 無法測試(譬如串接 JCIC)。 • 平行開發,別人沒寫完我無法測試。
  2. 實務流程常見問題 SA 與 PG 溝通困難 PG 開發的不是 SA 想要的 需求變更程式大改

    看不懂規格書 程式改不動了 不知道要測試什麼? 越後面要測試的項目越來越多 BUGS 很多頻繁被退件 這不是使用者要的功能 溝通不良
  3. 錄製 GUI 優缺點 優點 • Simple(簡單):點擊錄製,進入 網頁,操作畫面,關閉錄製,選擇 驗證項目。 • Auto(自動):錄製好的可以儲存

    或匯出,可以一直重複播放錄製內 容。 • Fast(快速):不管是錄製速度和 播放速度都很快。 • Export(匯出):可以將錄製結果 轉成程式碼,複製貼到測試專案內, 版控進 CI 就能一直跑一直跑了。 缺點 • 無法錄製 IE Only 的網頁。 • Export 出來的程式碼很醜,不夠語 意化,每次調整畫面勢必要調整這 些很醜的程式碼,不好維護。
  4. 整合 / GUI 測試存在意義 • 明明有了單元測試,為什麼還要整合測試或 GUI 測試呢? • 每個單元都正常,不代表整合起來會正常。

    • 減少團隊溝通問題。 • PO / SA 和開發人員雞同鴨講,沒有交集。 • PO / SA 和開發人員間花費太多時間溝通。 • 開發完才被告知「這不是使用者要的功能,不符合需求」。
  5. 整合 / GUI 測試存在意義 • 缺點: • 因高度相依於環境,執行速度慢。 • 若

    GUI 是瀏覽器時,當瀏覽器版本更新,程式中操作瀏覽器的套件可能要 更新。 • 因測試顆粒粗,很大機率只能發現問題而無法詳細定位發生問題的位置。 • 若頁面頻繁改版,可以考慮不要使用 GUI 測試,整合測試就變成非常重要。 • 雖然有缺點,但還是要整合 / GUI 測試來保護我們系統。
  6. 三種測試總結 • Unit Tests(單元測試):基於每個工作單元進行測試,顆粒最小, 有異常能馬上發現問題點。 • Integration Tests(整合測試):用於模組間或各分層間的測試, 顆粒次粗。在有 Unit

    Tests 下,若 Integration Tests 異常代表夾 縫接合處有問題,或 Unit Tests 案例有缺漏,需馬上補上。 • End-to-End GUI Tests(端到端測試):顆粒最粗的測試,串接 所有重要的流程,確保所有模組與分層串接上沒有問題。
  7. 自動化測試導入/學習流程 • 基礎功 OOD 與 OOP。 • 先學單元測試。 • 再學

    SOLID 原則與 Clean Code 與重構技巧。 • 然後學習 TDD。 • 最後學習 BDD。
  8. 觀念釐清:Checking vs. Testing • 已知的情境驗證稱之為 Checking,建議這種的寫成測試程式。讓 系統自動去驗證,不應該浪費人力反覆做這種驗證。 • 從未知中探索問題稱之為 Testing,全名為

    Exploratory Testing (探索性測試),QA 應具備的技能。 • 一般探索性測試都會搭配 Recording Tool。 • 探索出的問題記得要回頭補上測試程式。
  9. 推薦書籍 • 單元測試的藝術, 2/e (The Art of Unit Testing: with

    examples in C#, 2/e) • 無瑕的程式碼-敏捷軟體開發技巧守則 (Clean Code: A Handbook of Agile Software Craftsmanship) • 無瑕的程式碼-敏捷完整篇-物件導向原則、設計模式與 C#實踐 (Agile principles, patterns, and practices in C#) • Specification by Example 中文版:團隊如何交付正確的軟體 (Specification by Example: How Successful Teams Deliver the Right Software) • Working Effectively with Legacy Code : 管理、修改、重構遺留程式碼的藝術 (中文版) • 重構|改善既有程式的設計, 2/e (繁中平裝版)(Refactoring: Improving The Design of Existing Code, 2/e) • Kent Beck 的測試驅動開發:案例導向的逐步解決之道 (Test-Driven Development: By Example)(TDD)