在進行 scrum 時, 有一個常見困擾大家的問題, 就是什麼叫做一個功能已經完成. 如果不是真的做完, 或者做完的結果並不是讓人滿意, 我們需要早點知道, 以做出因應的事情.
那我們會怎麼處理呢? 常見的做法如下:
1. 靜態檢查
也就是沒有"借由執行"這個功能來確認是否做完. 通常是流程面要做的事情, 是否都已經有處理了. 例如:
check-in 程式碼到原始碼控制系統
設計文件要被檢視
程式碼要被檢視
開發人員或是相關的人員要簽字確認
通過靜態分析工具的確認
…...
2. 動態驗證
(1) . 手動執行測試個案
在功能做完時, 開發人員要執行一些驗收測試個案, 如果全部都通過, 我們就可以說這個功能完成. 對於沒有自動化測試的團隊來說, 這是很必要的步驟
(2). CI 檢查
如果有建置 CI (continuous integration) 的團隊, 當功能寫完後能夠通過 CI 的, 我們也可以說是寫完了. CI 通常會執行單元測試, 或是測試人員所撰寫的 end to end 測試.
3. 展示功能
前面的項目只是確認 do the thing right, 但是對於 do the right thing 並沒有太多著墨. 也許你可以花個 30 分鐘或是 1 個小時, 展示給經理, 測試人員或客戶看, 他們會很快跟你說明這功能有沒有用, 有沒有哪些地方需要調整. 重點不在是否有沒有bug, 而是在於方向是否正確. 這件事需要先做, 不需要等到 review meeting 或是測試完畢, 因為如果方向錯誤, 那後面有很多事情再做下去可能沒有意義.
文章標籤
全站熱搜

David, 上面所說到的驗證是屬於 functional 的, 在不 release 的狀態下可以這樣, 一旦 release 面對的品質檢驗標準相差非常多; 也就是說, 每個 feature 都完成, 品質卻無法恭維的狀況. 通常這樣我們怎麼解決呢?
好問題, 我想我花點時間整理一下我的想法, 再回你. 當然那只是我目前專案常見的做法, 不一定是用在你的環境
確實功能做完, 並不代表可以 release. 原因有很多種, 可能之前的步驟不夠扎實, 或是做的範圍不夠廣. 亦或是時間壓力, 或是經驗不足. 所以我們能做的是在開發過程中, 埋了一大堆practice, 來確認我們做的事情對不對. 這些是我們專案常見用來"確保品質"的做法, 並非是純 agile 實踐方法. 參考看看.... 1. 預防重於治療 品質不好, 有可能源頭就錯了, 所以我們希望在編碼或是測試之前, 就用力確認我們的方向是否正確. 以下這些是我們有試過的 (1) 需求確認: 我們至少會有 UI 畫面和規格書. 是不是要有詳盡的內容, 可能不是我們的重點, 但是我們重點是希望 UI designer, developer 和專案經理對於要做的需求有共識, 此外 tester 也借此機會, 提出想要釐清的一些 user case, 讓大家知道這些是否要處理, 以及如何處理. (2) 檢視產出: 我們花了很大的精力, 對於開發人員的產出作檢視. 像是 design review, 每個功能都會做個 2-3 次. code review 會做到 6-7 次. 所以寫的人不敢隨便, 做出來的結果也會確認再確認. 2. 多道防護網 沒有一招可以解決所有問題, 因此我們會有很多測試的活動, 希望透過重重關卡, 可以攔下最多的 bug. (1) unit testing/TDD: 這是良心事業, 會做這件事的開發人員不多. 可是這是效果最大的, 因為你可以把一些基本的錯誤給排除掉. (2) BVT(Build verification test): 自動化去檢查測試程式, 主功能是否正確. 以確保之後可以進行大量測試, 或是確保 check-in 進來的東西沒有大問題. (3) 測試人員的自動化測試: 做的量不是很多, 但是要求配合 CI 一起執行. 重點也是確保基本功能運作正常. 但是不是用來抓更多的錯誤. (4) 開發人員進行整合測試, 確保大家程式合在一起, 還能卻運作, 並且這個功能的主要 scenarios 都正確. (5) 測試人員進行手動測試 (每個功能寫完後) (6) static testing: 我們會有專門的部門, 利用一些工具去 scan 受測程式. 利用複雜度, security vulnerability 或是 coding standard等等. (7) non functional testing: 像是 performance testing, stress testing 等等. 3. 專門的測試階段 agile 雖然有 ATDD, TDD, CI 這些東西, 但是就看你的自動化 scenario 可以包含多少, 以及能多快能完成. 但是這些面向都是偏向功能正確性, 對於以下項目並沒有包含太多 (1) non functional testing (2) 功能和功能之間的組合使用 (3) 實際環境測試 因此還需要一個專門的測試階段, 來補足我們在 iteration 做不好的部分.