吳世競
(中興通訊股份有限公司,天津 300000)
敏捷開發強調的主要是迭代、循序漸進的開發方式,其核心是測試驅動開發,整個開發過程靈活可變。敏捷開發可以快速的將項目推入實質開發階段,開發、測試人員直接與客戶溝通,需求確定快速準確,能很快的給出一個用戶可見的V1.0產品,根據用戶需求快速修改軟件問題,縮短軟件發布周期。同時測試和用戶介入早,產品的不合理及問題能盡早暴露,方便及時修改,甚至能及時更正產品需求。但是敏捷開發注重人員溝通,文檔留存相對較少,可是大型軟件的開發往往項目時間長、人員流動大,那么傳統的敏捷開發將不再適用。
大型軟件開發特點:功能模塊多、開發交付周期長、性能及穩定性要求高。項目時間長不可避免的會出現人員流失,如果完全按照簡單的敏捷開發測試的方式進行就有可能會因為文檔不全面出現交接時間長、交接不清楚的問題。功能模塊多就對各模塊之間的交互測試要求較高,需要進行大量的探索性測試,這樣依靠自動化測試就不能滿足要求了,必須進行一定程度的系統性的探索測試。
大型軟件敏捷開發的核心就是要把一個長時間、多功能的項目分為多個可以短時間完成且可以獨立執行的小故事,并保證整體軟件一直良好運行。敏捷的重點一般體現在需求確定階段、各子功能各自的開發階段、交付測試階段。
大型軟件項目各個階段的目標不同,敏捷測試的策略及方法的選擇側重也不盡相同。
(1)需求分析及產品設計階段
測試人員,包括系統測試經理、各主要功能模塊測試負責人,盡早參與需求分析及產品設計,了解需求來源,直接接觸客戶,深入了解客戶需求。
大型軟件開發必須需求文檔,需求文檔要經過測試人員測試,提出需求缺陷并跟蹤修改,這樣可大大減少開發完成后的各測試階段發現需求不合理導致的需求修改。保證可以根據需求文檔得出明確可執行的需求驗收準則,尤其系統級別,如軟件的性能、穩定性、可移植性等非功能性的要求,并為此輸出項目組、用戶認可的系統測試文檔。
(2)功能模塊劃分階段
各功能模塊測試負責人參與,項目組組織,遵循高內聚、低耦合的準則劃分功能模塊,并保證各功能模塊的可測試性。功能模塊劃分的好壞直接決定著功能模塊能否敏捷開發。之后測試人員根據需求文檔及功能說明,形成詳細的測試通過準則(AC)及測試用例(TC),甚至用詳盡的TC 代替AC,減少工作量。
(3)功能模塊開發及交付階段
敏捷測試中需求驅動開發、測試驅動開發的典型應用階段。自動化測試代碼先行、迭代開發等敏捷測試策略及方法均能在此過程中完美適用。
開發人員實現功能代碼之前先實現測試代碼,測試代碼須覆蓋功能代碼的每個分支流程,實現自動化的白盒測試。測試人員根據功能TC,在開發功能完成之前先完成黑盒(功能)自動化用例的編寫。每個迭代開發完成后都經過白盒+黑盒自動化測試,之后再由測試人員執行手動測試,跟蹤故障并根據故障更新TC及黑盒自動化測試用例。如此測試、開發迭代進行,直至功能完全交付。此階段,開發人員自測或者測試人員結對開發,一定要注意工作角色的轉變,開發人員白盒測代碼一定不能代替黑盒測試代碼。測試人員尤其是同時承擔測試工作的開發人員一定要秉承專業的測試素養,依據AC、遵從TC 進行測試,避免受到開發思維的干擾。
(4)集成測試階段
分支模式開發,采用自動化冒煙的方式,為每個新合入到主干的功能做第一道防護,保證不影響主干分支已有功能,否則直接回退。在新合入功能之后,選擇典型測試場景實現自動化用例,增加至原有的冒煙用例中。如此循環迭代,快速有效的完成集成測試。
(5)系統測試階段
敏捷測試中,系統測試階段完全可以精簡測試計劃,主要針對系統的穩定性、可移植性、抗壓性等進行測試,并且完全可以采用自動化的方法。當然,大型軟件的系統測試單純依靠敏捷測試手法并不能完全滿足要求,必要的探索性測試、多場景的交叉測試、異常測試都是不可或缺的。
(6)發布測試階段
對于多用戶軟件而言,發布測試要重點考慮真實用戶,可以做出試用版本,邀請部分用戶試用并提出建議。
敏捷測試要求測試人員具備分析、測試及代碼編寫能力,這也是敏捷測試不同與傳統測試的一個重點要求,要求測試人員根據需求不斷調整測試重點及方法。總體而言,大型軟件的敏捷測試就是要求一群高素質測試人員,依據大型軟件的特點,在軟件開發測試的各個階段盡可能合理的精簡文檔,盡量多的采用TDD、早介入、自動化等敏捷測試手段,指導軟件開發、完成測試任務。