提高軟件測試效率方法探討
關鍵詞:可測試性;軟件測試;測試人員;
引言
自從上世紀七八十年代全面爆發軟件危機起,軟件產業的發展過程中始終伴隨著巨大的管理難題。整個軟件產業存在著軟件代價高、難于控制開發進度、軟件工作 量估計困難、質量低,以及軟件修改、維護困難等問題。而要解決這些問題,在很大程度上取決于提高軟件的設計、開發和測試質量。
隨著軟件開發規 模的增大,軟件的質量問題越來越突出。軟件測試是提高軟件質量的有效途徑在軟件測試工作中投入的人力、物力、財力逐漸加大,國外有些軟件公司的測試人員和 開發人員的比例甚至達到1:1或者2:1的程度,因此如何提高軟件測試效率是每個軟件研發單位和研發項目面臨的嚴峻問題。
本文結合工程實踐,從軟件的可測試性和軟件測試組織兩個方面進行分析,探討提高軟件測試效率的方法。
1、影響軟件測試效率的因素
影響軟件測試效率的因素很多,文本只論述被測軟件質量和軟件測試組織對軟件測試效率的影響。
通過軟件測試可以發現軟件中的某些問題,軟件中存在的某些潛在問題由于受測試工具、測試方法和測試時間的限制而無法發現,測試中發現的問題最終需要通過 軟件開發人員進行糾正,從某種角度來看,軟件測試并不能從根本上提高軟件質量,軟件質量的高低直接取決于軟件開發人員的設計與編程水平,好的軟件開發人員 編寫完成的軟件具有問題少、易維護等特點,但是有時會出現修改完成了一個軟件缺陷,同時又引入多個軟件缺陷的情況,需要經過多輪回歸測試才能夠完成問題歸 零。所以,雖然軟件測試時提高質量的有效途徑,但提高軟件開發人員的水平,提高反映軟件設計質量和開發質量的軟件的可測試性是提高軟件質量的根本途徑。
軟件測試人員對項目需求的理解程度,對測試理論、測試工具和測試方法的掌握程度,以及對測試軟件模塊在項目中的重要程度和成熟程度的認識,對軟件測試效率同樣有很大的影響,所以在工程中需要合理組織軟件測試,提高軟件測試效率。
2、軟件的可測試性
2.1 可測試性軟件的特征
可測試軟件具有以下特征:
(1)可操作性。可操作性是指:被測軟件的錯誤很少,可以避免重復測試的開銷;沒有阻礙測試連續執行的錯誤;在軟件設計時應允許在開發階段進行部分測試活動。
(2)可觀察性。
可觀察性包括:每個輸入有唯一的輸出;系統狀態和變量可見,或在運行中可查詢;過去的系統狀態和變量可見,或在運行中可查詢;所有影響輸出的因素都可見;容易識別錯誤輸出;自動報告內部錯誤;可獲取源代碼;
(3)可控制性??煽刂菩允侵福核锌赡艿妮敵龆籍a生于某種輸入組合;通過某種輸入組合,所有代碼都可能被執行;軟件測試人員可直接控制軟件和硬件的狀態及變量;輸入和輸出格式保持一致且有規范的構成;能夠便利地對測試進行說明,以及方面地執行和重構測試。
?。?)可分解性。軟件系統由眾多獨立模塊構成。每個軟件模塊均可獨立進行測試。
?。?)簡單性。簡單性包括功能簡單性、結構簡單性、代碼簡單性。
(6)穩定性。軟件的變化是不經常的,變化時可控制的,軟件的變化不形象已有的測試,失效后能夠得到良好的回復。
?。?)易理解性。易理解性包括:設計能夠被很好的理解;內部、外部和共享構件之間的依賴性能夠很好地被理解;測試人員可方便的獲取技術文檔,并及時掌握設計更改清空;技術文檔組織合理,明確詳細。
2.2 提高軟件可測試性的途徑
在實際工作中,可通過以下幾個途徑提高軟件的可測試性:減少并控制需求的變更;加強軟件可測試性的設計;重視并規范技術文檔的編寫。
2.2.1 減少并控制需求的變更
用戶需求可以分為如下三個層次:基本需求、預期需求和擴展需求三類。七宗預期需求是明示的。而基本需求和擴展需求是非明示的。所謂擴展需求是指這些特征 在用戶的期望范圍之外,并且當其存在時將是非常令人滿意的。由于種種原因,軟件的需求不確定性事客觀存在的,是不可避免的,軟件規模越大,研制周期越長, 需求的不確定性就越大。軟件需求不確定性原因主要包括:用戶在表述需求時常常帶有不確定性與模糊性;隨著開發進程的推進,用戶對所建應
用系統的理解不斷深入,對原來模塊或是非明示的需求有了新的認識。隨時會提出需求的變更;由于開發人員的領域知識的局限性,導致引發對需求的誤解;用戶需求的獲取過程與描述形式往往采用非形式化的自然語言,以及自然概念中存在的本質矛盾,使需求的規范描述發生困難。
識別項目需求
識別項目需求是項目成功的關鍵,為了減少需求的不確定性,首先應充分認識確定需求的重要性,通過與用戶的溝通,使用戶能充分認識到軟件需求變更對軟件質 量、進度和成本的影響,積極參與到確定軟件需求的活動中,達到現有進行軟件設計前盡量確定軟件需求的目的。同時在識別項目需求時,除了用戶明示的需求外, 還需關注用戶基本需求,用戶基本需求常常體現在項目的領域知識、項目所在行業的相關標準等方面。實踐證明,開發人員對領域知識掌握的程度直接影響到項目需 求的確定,開發人員通過對領域知識的積累有助于項目需求的確定。
按照軟件工程化需求,用戶應該向研制方正是提交需求文檔,研制方根據用戶需求進行需求分析形成產品需求,用戶需求及產品需求均需文檔化并經過評審,以盡早發現不合理的需求。
需求管理、需求變更的控制
在系統研制過程中應對需求進行管理,首先建立需求庫以及需求跟蹤矩陣,在需求跟蹤矩陣中反映研制跟階段工作產品與需求的對應關系,并對需求進行需求的雙向跟蹤。
采用軟件需求管理工具
采用需求管理工具,可以提高需求管理工作流程的自動化程度,使需求管理可以在項目實施過程中得到有效地推行。需求管理工具可以在整個項目生命周 期內,幫助團隊有效地協作,將需求的變更信息及時傳送到團隊的每個成員,可以使跨項目團隊的所有成員都能掌握必要的需求詳細信息,并對軟件項目規劃、項目 跟蹤與監督實施管理。
2.2.2 加強軟件可測試性設計
在項目設計階段應注重對軟件可測試性的設計。項目負責人可根據項目具體情況對軟件可測試性提出具體要求,對軟件注視率、軟件模塊規模、模塊圈復 雜度、基本圈復雜度、操作數的個數以及過程出口個數等進行規定,在軟件設計以及編程階段嚴格按照規范執行,可有效地提高軟件測試效率。實踐證明,如果在項 目設計階段不進行軟件可測試性的設計,待軟件完成后再根據可測試性要求對軟件進行修改完善常常需要花費巨大的人力和物力,同時大量的修改對軟件質量也會帶 來不利影響。
2.2.3 重視并規范技術文檔的編寫
技術文檔不僅是開發人員進行信息交流的手段,也是測試人員進行測試的依據。所以軟件相關文檔應描述明確詳細,組織合理,并根據需求和設計的變更 及時更新。同時為了給獨立測試人員提供更多的信息,在技術文檔中可增加各軟件模塊的重要程度、重用性以及測試歷史等信息,使得獨立測試人員可以合理分配經 理,對重要軟件進行重點測試,減少不必要的重復勞動,提高測試效率。
3、軟件測試方法與組織
3.1 軟件測試方法
軟件模塊級測試分為白盒測試和黑盒測試。黑盒測試注重于測試軟件的功能性需求,試圖發現功能缺陷或遺漏、界面錯誤、數據結構或外部數據庫訪問錯 誤、性能錯誤以及初始化和中止等類型的錯誤。百合測試依賴對程序細節的嚴密檢驗,對軟件的邏輯路徑進行測試,在不同的程序點檢驗“程序的狀態”以判定預期 狀態或待驗證狀態與真實狀態是否項目。在軟件測試中,常常結合黑盒與白盒兩種測試方法,相互補充。
3.2 軟件測試人員
軟件測試可以有軟件開發人員、獨立測試人員或者用戶進行。在組織軟件測試時,可根據不同人員的得點進行組織,使得各類測試相互補充。軟件開發人員熟悉軟件需求以及被測軟件,清除各軟件模塊的重要程度和相互關系,了解各
軟件模塊以前的測試及修改等歷史情況,可以有針對性地進行測試;軟件開發人員和用戶交流較為方便,在測試中能夠發現與需求不一致的軟件錯誤。但 是開發人員急于證明他們的程序是毫無錯誤的,是按照用戶的需求開發的,而且完全能夠按照預定的進度和預算完成,這將影響開發人員完成相關測試任務。
獨立測試人員應具備較強的測試理論水平和測試經驗,熟練掌握軟件測試工具,并知悉被測軟件的功能需求才能夠對軟件進行系統全面的測試。但獨立測 試人員有時會缺乏相應領域的專業知識,主要測試依據是用戶的技術要求以及開發人員在軟件研制過程中形成的文檔,一方面這些文檔中缺乏對用戶基本需求的描 述;另一方面,獨立測試人員常常需通過開發人員來進行需求的解釋,因此在軟件測試中優勢無法發現軟件不滿足需求方面的錯誤,但這種錯誤往往從用戶角度看來 是最嚴重。同時,獨立測試人員由于對各軟件模塊的重要性及相互關系了解不深,有時會影響測試效率。
在條件允許的情況下,軟件完成后可提交用戶試用,用戶在試用中根據實際使用需求進行操作,其中包括各種正常操作流和非正常操作流。用戶試用可有 效驗證軟件是否滿足用戶用戶需求,同時在用戶試用中對軟件的可靠性等方面也同步進行了測試。因為用戶試用方式同實際使用方式非常接近,所以通過用戶試用獲 得好評的軟件基本可以滿足今后的實際使用要求。
3.3 提高軟件測試效率的方法
為了提高軟件測試效率,測試人員需要熟悉掌握軟件涉及的領域知識,了解軟件各項功能的重要程度和成熟程度,掌握測試理論和工具;用戶是炎癥需求正確性的主導力量,應允許發揮用戶的積極作用。
在組織軟件測試時,可通過以下幾個方面提高軟件測試效率:
?。?)根據不同測試人員的特點進行測試分工,單元測試應以軟件開發人員為主進行,以保證每個單元能夠完成設計的功能。在很多情況下,集成測試也可以開發人員為主進行。當軟件體系結構完成后,獨立測試人員機構計入;
?。?)軟件測試人員應注重與用戶溝通,及早發現需求分析、理解不合理的問題,避免今后花費大量的資源和時間進行修改;
?。?)對于軟件開發人員,需加強測試方法的培訓,提高自我測試的效率;
?。?)在選擇獨立測試人員是,盡量選擇比較熟悉了解被測試軟件相關領域知識的人員;
?。?)獨立測試人員應該在軟件開發的需求階段就參與項目的研制,以便更好地制定測試計劃、確定測試目標以及便攜測試用例。通過找出項目中關鍵的 模塊和錯誤率高的模塊,可使用測試首先集中在重要的部分,避免發生把過多的時間花費在非重要模塊的測試而沒有時間測試重要的模塊的情況;
?。?)被測試軟件在測試中發現了問題,需要進行有組織的分析研究,然后權衡利弊進行規范化修改,避免反復修改,反復測試;
?。?)規范軟件配置管理,通過管理及技術手段,對軟件和文檔版本進行控制,保障軟件測試的有效性。
4、結束語
實踐證明,通過提高被測軟件的可測試性,以及合理組織軟件測試工作,可以有效地提高軟件測試效率。隨著軟件測試的重要性得以承認,軟件測試階段 在整個軟件開發周期中占得比重也日益增大。為了將缺陷和錯誤消滅在萌芽之中,軟件測試將逐步發展成為軟件開發每一階段都要進行而且需要反復進行的活動。軟 件測試中大量的工作是機械的、重復的、枯燥的和非智力的,但逐步加強軟件自動化測試的研究與推廣將是今后軟件產業的發展趨勢。
posted on 2013-05-22 10:19 順其自然EVO 閱讀(201) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄