軟件測試過程
軟件測試過程包括單元測試扫腺、集成測試硼啤、系統(tǒng)測試和驗(yàn)收測試。
單元測試
單元測試是對軟件設(shè)計(jì)的最小單元——模塊進(jìn)行正確性檢驗(yàn)的測試工作斧账,主要測試模塊在語法谴返、格式和邏輯上的錯誤。單元必須是可測的咧织,其行為或輸出是可觀測的嗓袱,且有明確的可定義的邊界或接口。確定單元的最基本原則是“高內(nèi)聚习绢,低耦合”渠抹。
- 單元測試原則
(1)單元測試越早越好。
(2)單元測試應(yīng)該依據(jù)《軟件詳細(xì)設(shè)計(jì)規(guī)格說明》進(jìn)行闪萄。
(3)修改過的代碼應(yīng)該重做單元測試梧却,保證對已發(fā)現(xiàn)錯誤的修改沒有引入新的錯誤。
(4)當(dāng)測試結(jié)果與預(yù)期結(jié)果不一致時败去,測試人員應(yīng)如實(shí)記錄實(shí)際的測試結(jié)果放航。
(5)單元測試應(yīng)注意選擇好被測軟件單元的大小。
(6)一個完整的單元測試說明應(yīng)該包含正面測試和負(fù)面測試圆裕。正面測試驗(yàn)證程序應(yīng)該執(zhí)行的工作广鳍,負(fù)面測試驗(yàn)證程序不應(yīng)該執(zhí)行的工作荆几。
(7)注意使用單元測試工具。單元測試工具的使用能很好地把握測試進(jìn)度赊时,避免大量的重復(fù)勞動吨铸,降低工作強(qiáng)度,提高測試效率祖秒。 - 單元測試的主要任務(wù)
單元測試的主要任務(wù)包括模塊接口測試诞吱、模塊局部數(shù)據(jù)結(jié)構(gòu)測試、模塊中所有獨(dú)立執(zhí)行路徑測試竭缝、模塊邊界條件測試房维、各種錯誤處理測試。 - 單元測試主要技術(shù)
單元測試的依據(jù)是詳細(xì)設(shè)計(jì)描述歌馍。
單元測試步驟:
(1)人工靜態(tài)檢查握巢,保證代碼算法的邏輯正確性晕鹊、清晰性松却、規(guī)范性、一致性溅话、算法高效性晓锻,并盡可能地發(fā)現(xiàn)程序中沒有發(fā)現(xiàn)的錯誤。
(2)動態(tài)執(zhí)行跟蹤飞几。通過設(shè)計(jì)測試用例砚哆,執(zhí)行待測程序,跟蹤比較實(shí)際結(jié)果與預(yù)期結(jié)果來發(fā)現(xiàn)錯誤屑墨。
(3)狀態(tài)轉(zhuǎn)換測試躁锁。當(dāng)單元可能處于不同狀態(tài)轉(zhuǎn)換時,應(yīng)根據(jù)單元可能進(jìn)入的狀態(tài)卵史、這些狀態(tài)之間的轉(zhuǎn)換战转、引起轉(zhuǎn)換可能導(dǎo)致的狀態(tài)等進(jìn)行測試。 - 單元測試工具簡介
單元測試工具借助于驅(qū)動模塊與樁模塊工作以躯,運(yùn)行被測軟件單元以檢查輸入的測試用例是否按軟件詳細(xì)設(shè)計(jì)規(guī)格說明的規(guī)定執(zhí)行相關(guān)操作槐秧。分為下列一些種類:靜態(tài)分析工具、代碼規(guī)范審核工具忧设、內(nèi)存和資源檢查工具刁标、測試數(shù)據(jù)生成工具、測試框架工具址晕、 測試結(jié)果比較工具膀懈、測試度量工具、測試文檔生成和管理工具谨垃。
常用的單元測試自動化工具包括:(1)基于XUnit測試框架的測試工具吏砂,如Java編程中使用的JUnit撵儿,.NET程序編程中使用的NUnit等。(2)常用的C語言單元測試工具VcTester和C++Test狐血。VcTester主要功能包括腳本化測試驅(qū)動(包括修改變量與調(diào)用函數(shù))淀歇、腳本樁、在線測試匈织、支持持續(xù)集成測試浪默、測試覆蓋率統(tǒng)計(jì)、測試管理缀匕、生成測試報告纳决、測試消息編輯器等。C++Test可以自動測試任何C/C++函數(shù)乡小、類阔加,自動生成測試用例、測試驅(qū)動函數(shù)或樁函數(shù)满钟,在自動化的環(huán)境下極其容易快速地使單元級的測試覆蓋率達(dá)到100%胜榔。(3)Visual Unit單元測試工具。其功能特性包括自動生成測試代碼湃番、快速建立功能測試用例夭织、高效完成白盒覆蓋、快速排錯調(diào)試吠撮、生成詳盡的測試報告尊惰。VU具有極高的測試完整性,能夠?qū)崿F(xiàn)單元測試中的功能測試泥兰、語句覆蓋弄屡、條件覆蓋、分支覆蓋鞋诗、路徑覆蓋等測試膀捷。(4)分析覆蓋率的工具。常見的LogiScope师脂、TrueCoverage担孔、PurecOverage等。(5)靜態(tài)分析工具如pc_lint等吃警。
集成測試
- 集成測試的主要任務(wù)
(1)模塊間調(diào)用時數(shù)據(jù)是否丟失糕篇。
(2)模塊組合后能否實(shí)現(xiàn)預(yù)期功能。
(3)模塊是否對其他模塊產(chǎn)生負(fù)面影響酌心。
(4)全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否被異常修改拌消。
(5)模塊的誤差是否累積達(dá)到不可接受的程度。 - 集成測試實(shí)施方案
分為非增量式集成測試和增量式集成測試、三明治集成測試墩崩、核心集成測試氓英、分層集成測試、基于使用的集成測試等鹦筹。
(1)非增量集成測試:對所有模塊進(jìn)行個別的單元測試后铝阐,按程序結(jié)構(gòu)圖將各模塊連接起來,把連接后的程序當(dāng)作一個整體進(jìn)行測試铐拐。
(2)增量式集成測試:包括自頂向下增量式集成測試和自底向上增量式集成測試徘键。
自頂向下增量式集成測試表示逐步集成和逐步測試是按結(jié)構(gòu)圖自上而下進(jìn)行的,即模塊集成的順序是首先集成主控模塊(主程序)遍蟋,然后按照軟件控制層次結(jié)構(gòu)向下進(jìn)行集成吹害。從屬于主控模塊的模塊按深度優(yōu)先策略(縱向),或者廣度優(yōu)先策略(橫向)逐步集成到結(jié)構(gòu)中去虚青。自頂向下測試的主要優(yōu)點(diǎn)在于它可以自然地做到逐步求精它呀,一開始便能讓測試者看到系統(tǒng)的框架。它的主要缺點(diǎn)是需要提供被調(diào)用模擬子模塊棒厘,被調(diào)用模擬子模塊可能不能反映真實(shí)情況纵穿,因此測試有可能不充分。并且在輸入/輸出模塊接入系統(tǒng)以前绊谭,在被調(diào)用模擬子模塊中表示測試數(shù)據(jù)有一定困難政恍。由于被調(diào)用模擬子模塊不能模擬數(shù)據(jù)汪拥,如果模塊間的數(shù)據(jù)流不能構(gòu)成有向的非環(huán)狀圖达传,一些模塊的測試數(shù)據(jù)便難以生成。同時迫筑,觀察和解釋測試輸出往往也是困難的宪赶。
自底向上增量式集成測試是從最底層的模塊開始,按結(jié)構(gòu)圖自下而上逐步進(jìn)行集成并逐步進(jìn)行測試工作脯燃。自底向上測試的優(yōu)點(diǎn)在于搂妻,由于驅(qū)動模塊模擬了所有調(diào)用參數(shù),能夠輕易地生成測試數(shù)據(jù)辕棚。缺點(diǎn):直到最后一個模塊被加入進(jìn)去之后才能看到整個程序(系統(tǒng))的框架欲主。
(3)三明治集成測試:三明治集成測試是將自頂向下測試與自底向上測試兩種模式有機(jī)結(jié)合起來,采用并行的自頂向下逝嚎、自底向上集成方式扁瓢,形成改進(jìn)的三明治方法。
(4)核心系統(tǒng)先行集成測試:核心系統(tǒng)先行集成測試法的思想是先對核心軟件部件進(jìn)行集成測試补君,在測試通過的基礎(chǔ)上再按各外圍軟件部件的重要程度逐個集成到核心系統(tǒng)中引几。
(5)高頻集成測試:高頻集成測試是指同步于軟件開發(fā)過程,每隔一段時間對開發(fā)團(tuán)隊(duì)的現(xiàn)有代碼進(jìn)行一次集成測試挽铁。
系統(tǒng)測試
系統(tǒng)測試的目的在于將通過集成測試的軟件系統(tǒng)與系統(tǒng)的需求定義作比較伟桅,發(fā)現(xiàn)軟件與系統(tǒng)定義不符合或矛盾的地方敞掘。
- 系統(tǒng)測試的測試技術(shù)
(1)驗(yàn)證測試。驗(yàn)證系統(tǒng)是否正確無誤的實(shí)現(xiàn)了用戶需求規(guī)格說明書的內(nèi)容中的全部內(nèi)容楣铁。
(2)功能測試玖雁。通過對系統(tǒng)進(jìn)行黑盒測試,測試系統(tǒng)的輸入盖腕、處理茄菊、輸出等各個方面是否滿足需求。主要包括需求規(guī)格定義的功能系統(tǒng)是否都已實(shí)現(xiàn)赊堪、各功能項(xiàng)的組合功能的實(shí)現(xiàn)情況面殖、業(yè)務(wù)功能間存在的功能沖突情況等,比如共享資源訪問以及各子系統(tǒng)的工作狀態(tài)變化對其他子系統(tǒng)的影響等哭廉。
(3)性能測試脊僚。性能測試檢驗(yàn)安裝在系統(tǒng)內(nèi)的軟件的運(yùn)行性能。
(4)可靠性遵绰、穩(wěn)定性測試辽幌。在一定負(fù)荷的長期使用環(huán)境下,測試系統(tǒng)的可靠性椿访、穩(wěn)定性乌企。
(5)兼容性測試。測試系統(tǒng)中軟件與各種硬件設(shè)備的兼容性成玫、與操作系統(tǒng)的兼容性加酵、與支撐軟件的兼容性等。
(6)恢復(fù)測試哭当≈硗螅恢復(fù)測試是要采取各種人工方法使軟件出錯(而不是能正常工作),進(jìn)而檢驗(yàn)系統(tǒng)的恢復(fù)能力钦勘。
(7)安全測試陋葡。安全測試是檢查系統(tǒng)對非法侵入行為的防范能力,就是設(shè)置一些企圖突破系統(tǒng)安全保密措施的測試用例彻采,檢驗(yàn)系統(tǒng)是否有安全保密的漏洞腐缤。
(8)強(qiáng)度測試。強(qiáng)度測試檢驗(yàn)系統(tǒng)的能力最高能達(dá)到什么實(shí)際限度肛响。
(9)面向用戶支持方面的測試岭粤。主要是面向軟件系統(tǒng)最終的使用操作者的測試。主要檢查測試軟件系統(tǒng)對用戶支持的情況终惑,用戶界面的規(guī)范性绍在、友好性、可操作性以及數(shù)據(jù)的安全性等。
(10)其他限制條件的測試偿渡。如可使用性臼寄、可維護(hù)性、可移植性溜宽、故障處理能力的測試等吉拳。
驗(yàn)收測試
驗(yàn)收測試通常以用戶或用戶代表為主體來進(jìn)行,按照合同中預(yù)定的驗(yàn)收原則進(jìn)行測試适揉,實(shí)質(zhì)上是用戶用大量的真實(shí)數(shù)據(jù)試用軟件系統(tǒng)留攒。
- 驗(yàn)收測試的主要內(nèi)容
主要測試工作包括配置復(fù)審、合法性檢查嫉嘀、文檔檢查炼邀、軟件一致性檢查、軟件功能和性能測試與測試結(jié)果評審等幾項(xiàng)工作剪侮。
(1)配置復(fù)審的目的在于保證軟件配置齊全拭宁、分類有序,并且包括軟件維護(hù)所必需的細(xì)節(jié)瓣俯。
(2)合法性檢查:檢查開發(fā)者使用的開發(fā)工具是否合法杰标。對在編程中使用的一些非本單位自己開發(fā)的,也不是由開發(fā)工具提供的控件彩匕、組件腔剂、函數(shù)庫等,檢查其是否有合法的發(fā)布許可驼仪。
(3)軟件文檔檢查:包括項(xiàng)目實(shí)施計(jì)劃掸犬、詳細(xì)技術(shù)方案、軟件需求規(guī)格說明書(STP)(含數(shù)據(jù)字典)谅畅、 概要設(shè)計(jì)說明書(PDD)登渣、詳細(xì)設(shè)計(jì)說明書(DDD)(含數(shù)據(jù)庫設(shè)計(jì)說明書)噪服、軟件測試計(jì)劃(STP)(含測試用例)毡泻、軟件測試報告(STR)、用戶手冊(SUM)(含操作粘优、使用仇味、維護(hù)、應(yīng)急處理手冊)雹顺、 源程序(SCL)(不可修改的電子文檔)丹墨、 項(xiàng)目實(shí)施計(jì)劃(PIP)、項(xiàng)目開發(fā)總結(jié)(PDS)嬉愧、軟件質(zhì)量保證計(jì)劃(SQAP)贩挣、 軟件配置計(jì)劃(SCMPP)、項(xiàng)目進(jìn)展報表(PPR)、階段評審報表(PRR)等王财。
(4)軟件代碼測試:包括源代碼一般性檢查和軟件一致性檢查卵迂。源代碼一般性檢查僅對系統(tǒng)關(guān)鍵模塊的源代碼進(jìn)行抽查,檢查模塊代碼編寫的規(guī)范性绒净、批注的準(zhǔn)確性见咒、是否存在潛在性錯誤以及代碼的可維護(hù)性;軟件一致性檢查主要包括編譯檢查挂疆、裝/卸載檢查改览、運(yùn)行模塊檢查。
(5) 軟件功能和性能測試:對軟件開發(fā)設(shè)計(jì)的再確認(rèn)缤言。包括界面(外觀)測試宝当、可用性測試、 功能測試胆萧、穩(wěn)定性測試今妄、性能測試、 強(qiáng)壯性測試鸳碧、 邏輯性測試盾鳞、 破壞性測試、 安全性測試瞻离。
(6)測試結(jié)果交付內(nèi)容:測試結(jié)束后腾仅,由測試組填寫軟件測試報告,并將測試報告與全部測試材料一并交給用戶代表套利。測試報告包括下列內(nèi)容:軟件測試計(jì)劃推励、軟件測試日志、軟件文檔檢查報告肉迫、軟件代碼測試報告验辞、軟件系統(tǒng)測試報告、測試總結(jié)報告喊衫、測試人員簽字登記表跌造。 -
、
測試
測試是在軟件開發(fā)公司內(nèi)模擬軟件系統(tǒng)的運(yùn)行環(huán)境下的一種驗(yàn)收測試族购,即軟件開發(fā)公司組織內(nèi)部人員壳贪,模擬各類用戶行為對即將面市的軟件產(chǎn)品(稱為
版本)進(jìn)行測試,試圖發(fā)現(xiàn)并修改錯誤寝杖。經(jīng)過
測試測試調(diào)整的軟件產(chǎn)品稱為
版本违施。緊隨其后的
測試是指軟件開發(fā)公司組織各方面的典型用戶在日常工作中實(shí)際使用
版本,并要求用戶報告異常情況瑟幕,提出批評意見磕蒲,一般包括功能性留潦、安全可靠性、易用性辣往、可擴(kuò)充性愤兵、兼容性、效率排吴、資源占用率秆乳、用戶文檔等方面的內(nèi)容,然后軟件開發(fā)公司再對β版本進(jìn)行改錯和完善钻哩。
回歸測試
回歸測試是指軟件系統(tǒng)被修改或擴(kuò)充(如系統(tǒng)功能增強(qiáng)或升級)后重新進(jìn)行的測試屹堰,回歸測試是為了保證對軟件修改以后,沒有引入新的錯誤而重復(fù)進(jìn)行的測試街氢〕都回歸測試應(yīng)保證數(shù)據(jù)中可能影響測試的因素與未經(jīng)修改擴(kuò)充的原軟件上進(jìn)行測試時的那些因素盡可能一致,否則要想確定觀測到的測試結(jié)果是由于數(shù)據(jù)變化引起的還是很困難珊肃。
回歸測試有選擇的執(zhí)行以前的測試用例荣刑,常用的用例選擇方法可以分為以下3種:(1)局限在修改范圍內(nèi)的測試;(2)在受影響功能范圍內(nèi)回歸伦乔;(3)根據(jù)一定的覆蓋率指標(biāo)選擇回歸測試厉亏。該方法一般是在相關(guān)功能影響范圍難以界定的時候使用。最簡單的策略是規(guī)定修改范圍內(nèi)的測試是100%烈和,其他范圍內(nèi)的測試規(guī)定一個用例覆蓋閾值爱只,例如60%。
系統(tǒng)排錯
系統(tǒng)排錯的任務(wù)是根據(jù)測試時所發(fā)現(xiàn)的錯誤招刹,找出原因和具體的位置恬试,并進(jìn)行改正。
- 排錯過程
排錯過程有兩種可能疯暑,一種是能確定錯誤原因并進(jìn)行了糾正训柴,為了保證錯誤已排除,需要重新執(zhí)行暴露該錯誤的原測試用例以及某些回歸測試妇拯;另一種是未找出錯誤原因幻馁,那么只能對錯誤原因進(jìn)行假設(shè),根據(jù)假設(shè)設(shè)計(jì)新的測試用例證實(shí)這種推測乖阵,若推測失敗宣赔,需進(jìn)行新的推測,直至找到錯誤并糾正瞪浸。 - 排錯方法和策略
常用的系統(tǒng)排錯方法主要有原始類排錯法、試探法吏祸、回溯法对蒲、對分查找法钩蚊、歸納法和演繹法等。