細說敏捷測試-敏捷實戰中的探索
1 什么是敏捷?
敏捷開發是一種思想或方法論,就是通過不斷迭代開發和增量發布,最終交付符合用戶價值的產品
敏捷思想源于最初的《敏捷宣言》:
【敏捷軟件開發宣言】
- 個體和互動高于流程和工具;
- 工作的軟件高于詳盡的文檔;
- 客戶合作高于合同談判;
- 響應變化高于遵循計劃;
《敏捷宣言》代表敏捷的價值觀,敏捷開發原則則幫助我們通過更靈活的方式思考開發方法和組織;具體十二條敏捷開發原則:
- 我們最重要的目標是通過持續不斷地快速交付有價值的軟件使客戶滿意;
- 欣然面對需求變化,即使在 開發后期也一樣。為了客戶的競爭優勢,敏捷過程掌控變化。
- 經常地交付可工作的軟件,相隔幾星期或一兩個月,傾向于采取較短的周期。
- 業務人員和開發人員必須相互合作,項目中的每一天都不例外。
- 激發個體的斗志,以他們為核心搭建項目。提供所需的環境和支援,輔以信任,從而達成目標。
- 不論團隊內外,傳遞信息效果最好、效率最高的方式是面對面交談。
- 可工作的軟件是進度的首要度量標準。
- 敏捷過程倡導可持續開發。責任人、開發人員和用戶要能夠共同維持其不掉穩定、延續。
- 堅持不懈地追求技術卓越和良好設計,敏捷能力由此增強。
- 以簡潔為本,它是激勵減少不表要工作量的藝術。
- 最好的架構、需求和設計出自自組織團隊。
- 團隊定期地反思如何提高成效,并依此調整自身的舉止表現。
敏捷開發模式
2 什么是敏捷測試?
‘敏捷測試’既不是一種測試方法,又不是一種測試方式,而是為了適應敏捷開發而特別設計的一套完整的軟件測試解決方案。這個解決方案應該能夠支持持續交付,涵蓋所需的、正確的價值觀、思維方式、測試流程,一系列優秀的測試實踐和更適合的測試環境,以及自動化測試框架和工具。
敏捷測試可以采用目前已有的各種測試方式,與傳統測試相比,側重點有所不同,主要的差別是價值觀、思維方式、流程和實踐等。
敏捷測試包括(但不限于)的測試活動:在工作中用具體的實例指導開發人員做測試,評審測試想法和假設,開發測試自動化,執行探索性測試,執行驗證質量屬性的測試,如性能、可靠性、安全性等。
2.1 傳統測試和敏捷測試的差別
3 敏捷思維方式
包括 成長性思維、團隊對質量負責的思維 上下為驅動的思維與用戶思維
3.1 成長性思維
成長性思維其宗旨是“請相信,你可以進步”,擁有成長性思維的人相信人的能力是可以被培養的,總是努力并不斷成長;可以接受失敗,但不會成為失敗者,充滿自信,內心有力量,認為今天的失敗不代表明天會失敗,相信自己的潛力是未知的,一定能克服困難,于是越戰越勇,最終走向成功;
擁有成長性思維的測試工程師和擁有固定性思維的測試工程師的對比
3.2 對團隊質量負責的思維
敏捷中,我們強調的是共擔
測試人員守護質量,提供質量信息,甚至幫助團隊改進質量,自然很有價值,但是如果依賴測試來保證質量,那么其實是很難保證質量的,而且成本很高。應該讓整個團隊關注質量,從需求開始盡可能一次把事情做對,從而構建出高質量的產品,這對企業來講更有價值效率更高成本更低。
3.3 上下文驅動的思維
在敏捷測試中要認識到上下文是一直在變的,測試策略和方法也要根據上下文幾時調整,不斷優化,盡可能達到更有效、更高效的測試狀態;上下文可以簡單地理解為項目所處的環境,包括人員、風險變化、研發狀態和質量標準等。
3.4 用戶思維
從用戶視角出發,從用戶故事角度思考的思維方式;
4 scrum 模式下的 測試流程
Scrum模式下的敏捷測試六層有7項活動:測試的分析與定義、測試計劃、測試設計、BVT、持續測試、版本驗收測試以及測試交付與反思,但是不能理解位7個階段,許多互動都是并行的,包括計劃、設計都是貫穿整個迭代的。
- 測試分析與定義,對用戶故事進行需求評審,為每一個用戶故事建立驗收標準,確保它具有可測試性,并從業務需求觸發,了解要做哪些測試,初步界定測試范圍
- 測試計劃,這里指當前迭代的測試計劃,包括進一步明確具體的業務要求和質量標準,制定測試目標,明確測試范圍和測試項,分解測試字母表識別出測試風險并制定測試策略等。計劃是一個覆蓋整個迭代的過程,也就是前面所說的,要基于上下文不斷調整或優化測試計劃,只是在迭代計劃時先寫出初步的測試計劃,按照計劃開始執行后續的測試過程。
- 測試設計,這里強調的是粗粒度的測試設計,包括事件流圖、狀態圖等
- BVT(build verification testing)版本構建測試,每日構建或代碼提交觸發的軟件版本構建,需要對軟件版本進行自動驗證,只有高成功率的持續集成才有意義。
- 不但包括傳統的冒煙測試,也包括代碼掃描,檢查代碼規范性,安全性等 靜態代碼分析。
- 持續測試是在迭代中的主要活動,包括設計評審、單元測試、用戶故事實現的驗證和集成測試等,也包含持續的新功能測試和持續的回歸測試,以及性能測試、安全測試、兼容性測試等專項測試
- 版本驗收測試。敏捷的驗收測試通常是指對用戶故事的驗收標準驗證。
- 測試交付與反思。測試交付還包括質量分析,并要回顧、審視整個測試過程,找到測試不加的地方,從而在下一個迭代版本中改進。
5 敏捷模式下如何開展測試?
5.1 構建強大的敏捷測試基礎設計
持續集成和持續測試
持續集成(continuous integration,CI),在1998年就被列入極限編程的核心時間。2006年 馬丁 福勒提出了比較完善的方法和實踐:
持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員每天至少集成一次,這也就意味著每天可能會發生多次集成,每次集成都通過自動化的構建(測試)來驗證,從而盡快發現集成錯誤。
持續交付(continuous delivery CD ),持續交付是一種能力,能夠以可持續方式,安全、快速底把代碼編程(包括特性、配置、缺陷和試驗)部署到生產環境上,讓用戶使用。
在持續集成中的測試活動
通過與自動化測試工具/框架的集成,在持續集成環境中執行自動化測試,但是這里需要考慮持續集成中測試范圍和提供快速反饋之間的平衡,一般持續集成自動化測試活動應該只包含 單元測試、代碼靜態測試和BVT(基本功能驗證)
測試左移:代碼評審,有助于提前發現缺陷,提高代碼規范性進而促進研發團隊知識共享。
5.2 敏捷測試的設計和執行
1)創建DOD
用戶故事DOD維度
迭代DOD 維度
發布版本DOD維度
DoD(definition of done) 任務完成的定義。在迭代初為一個迭代建立DOD,并且在迭代完成時檢查完成情況。
- 所有代碼通過靜態檢測,嚴重問題都已修改;
- 所有新增代碼得到人工評審;
- 所有完成的用戶故事都有對應的測試用例;測試用例都已執行;
- 所有完成的用戶故事得到Product Owner的驗證。
- ……
2)將用戶故事轉化成測試場景
3)探索式測試和角色扮演的場景挖掘
4)自動化測試、UI自動化測試
5.3 測試右移
把軟件測試從研發階段延伸到運維階段,從研發階段的持續測試延伸到部署上線后的在線監控和在線測試。
1)在線性能測試
- 全鏈路壓測
- 在線性能監控
- 流量回放
2)AB測試
運營分析手段根據用戶的不同反饋采取進一步的產品設計方案。
3)監控警告系統
4)安全性監控
5)混沌工程
在受控的情況下,提前發現生產環境中的薄弱環節,提高系統的可用性。但可用性的提高不能完全依賴混沌工程,更為重要的是為系統彈性做好設計。
6)智能運維與測試
6 分析測試結果和評估測試工作的質量
1)需要度量哪些方面:
測試質量(測試覆蓋率,bug遺漏率)和測試效率(測試用例設計、執行、自動化轉化率,缺陷驗證周期等)
2)數據驅動改進
- 做好測試過程、產品質量相關的數據收集工作
- 做好數據的抽取與分析
- 度量結果的數據可視化呈現
- 更深入地進行數據挖掘,找出更有價值的數據。
作者:京東物流 史松浩
來源:京東云開發者社區
敏捷開發是一種思想或方法論,就是通過不斷迭代開發和增量發布,最終交付符合用戶價值的產品
浙公網安備 33010602011771號