測(cè)試簡(jiǎn)介
軟件測(cè)試是使用人工操作或者軟件自動(dòng)運(yùn)行的方式來(lái)檢驗(yàn)它是否滿(mǎn)足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別的過(guò)程。
它是幫助識(shí)別開(kāi)發(fā)完成(中間或最終的版本)的計(jì)算機(jī)軟件(整體或部分)的正確度(correctness) 、完全度(completeness)和質(zhì)量(quality)的軟件過(guò)程;是SQA(software quality assurance)的重要子域。
Glenford J.Myers曾對(duì)軟件測(cè)試的目的提出過(guò)以下觀點(diǎn):
(1)測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程。
(2)好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試方案。
(3)成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。
(4)測(cè)試并不僅僅是為了找出錯(cuò)誤。通過(guò)分析錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤的發(fā)生趨勢(shì),可以幫助項(xiàng)目管理者發(fā)現(xiàn)當(dāng)前軟件開(kāi)發(fā)過(guò)程中的缺陷,以便及時(shí)改進(jìn)。
(5)這種分析也能幫助測(cè)試人員設(shè)計(jì)出有針對(duì)性的測(cè)試方法,改善測(cè)試的效率和有效性。
(6)沒(méi)有發(fā)現(xiàn)錯(cuò)誤的測(cè)試也是有價(jià)值的,完整的測(cè)試是評(píng)定軟件質(zhì)量的一種方法。
(7)另外,根據(jù)測(cè)試目的的不同,還有回歸測(cè)試、壓力測(cè)試、性能測(cè)試等,分別為了檢驗(yàn)修改或優(yōu)化過(guò)程是否引發(fā)新的問(wèn)題、軟件所能達(dá)到處理能力和是否達(dá)到預(yù)期的處理能力等。
測(cè)試原則
一,測(cè)試應(yīng)該盡早進(jìn)行,最好在需求階段就開(kāi)始介入,因?yàn)樽顕?yán)重的錯(cuò)誤不外乎是系統(tǒng)不能滿(mǎn)足用戶(hù)的需求。
二,程序員應(yīng)該避免檢查自己的程序,軟件測(cè)試應(yīng)該由第三方來(lái)負(fù)責(zé)。
三,設(shè)計(jì)測(cè)試用例時(shí)應(yīng)考慮到合法的輸入和不合法的輸入以及各種邊界條件,特殊情況下要制造極端狀態(tài)和意外狀態(tài),如網(wǎng)絡(luò)異常中斷、電源斷電等。
四,應(yīng)該充分注意測(cè)試中的群集現(xiàn)象。
五,對(duì)錯(cuò)誤結(jié)果要進(jìn)行一個(gè)確認(rèn)過(guò)程。一般由A測(cè)試出來(lái)的錯(cuò)誤,一定要由B來(lái)確認(rèn)。嚴(yán)重的錯(cuò)誤可以召開(kāi)評(píng)審會(huì)議進(jìn)行討論和分析,對(duì)測(cè)試結(jié)果要進(jìn)行嚴(yán)格地確認(rèn),是否真的存在這個(gè)問(wèn)題以及嚴(yán)重程度等。
六,制定嚴(yán)格的測(cè)試計(jì)劃。一定要制定測(cè)試計(jì)劃,并且要有指導(dǎo)性。測(cè)試時(shí)間安排盡量寬松,不要希望在極短的時(shí)間內(nèi)完成一個(gè)高水平的測(cè)試。
七,妥善保存測(cè)試計(jì)劃、測(cè)試用例、出錯(cuò)統(tǒng)計(jì)和最終分析報(bào)告,為維護(hù)提供方便。
測(cè)試目標(biāo)
1.發(fā)現(xiàn)一些可以通過(guò)測(cè)試避免的開(kāi)發(fā)風(fēng)險(xiǎn)。
2.實(shí)施測(cè)試來(lái)降低所發(fā)現(xiàn)的風(fēng)險(xiǎn)。
3.確定測(cè)試何時(shí)可以結(jié)束。
4.在開(kāi)發(fā)項(xiàng)目的過(guò)程中將測(cè)試看作是一個(gè)標(biāo)準(zhǔn)項(xiàng)目。
測(cè)試過(guò)程
第一步:對(duì)要執(zhí)行測(cè)試的產(chǎn)品/項(xiàng)目進(jìn)行分析,確定測(cè)試策略,制定測(cè)試計(jì)劃。該計(jì)劃被審核批準(zhǔn)后轉(zhuǎn)向第二步。測(cè)試工作啟動(dòng)前一定要確定正確的測(cè)試策略和指導(dǎo)方針,這些是后期開(kāi)展工作的基礎(chǔ)。只有將本次的測(cè)試目標(biāo)和要求分析清楚,才能決定測(cè)試資源的投入。
第二步:設(shè)計(jì)測(cè)試用例。設(shè)計(jì)測(cè)試用例要根據(jù)測(cè)試需求和測(cè)試策略來(lái)進(jìn)行,進(jìn)度壓力不大時(shí),應(yīng)該設(shè)計(jì)的詳細(xì),如果進(jìn)度、成本壓力較大,則應(yīng)該保證測(cè)試用例覆蓋到關(guān)鍵性的測(cè)試需求。該用例被批準(zhǔn)后轉(zhuǎn)向第三步。
第三步:如果滿(mǎn)足“啟動(dòng)準(zhǔn)則”(EntryCriteria),那么執(zhí)行測(cè)試。執(zhí)行測(cè)試主要是搭建測(cè)試環(huán)境,執(zhí)行測(cè)試用例。執(zhí)行測(cè)試時(shí)要進(jìn)行進(jìn)度控制、項(xiàng)目協(xié)調(diào)等工作。
第四步:提交缺陷。這里要進(jìn)行缺陷審核和驗(yàn)證等工作。
第五步:消除軟件缺陷。通常情況下,開(kāi)發(fā)經(jīng)理需要審核缺陷,并進(jìn)行缺陷分配。程序員修改自己負(fù)責(zé)的缺陷。在程序員修改完成后,進(jìn)入到回歸測(cè)試階段。如果滿(mǎn)足“完成準(zhǔn)則”(ExitCriteria),那么正常結(jié)束測(cè)試。
第六步:撰寫(xiě)測(cè)試報(bào)告。對(duì)測(cè)試進(jìn)行分析,總結(jié)本次的經(jīng)驗(yàn)教訓(xùn),在下一次的工作中改。
軟件測(cè)試過(guò)程管理,主要包括軟件測(cè)試是什么樣的過(guò)程,如何評(píng)價(jià)一個(gè)軟件測(cè)試過(guò)程,如何進(jìn)行配置管理和測(cè)試風(fēng)險(xiǎn)分析以及測(cè)試成本的管理。
心理依據(jù)
人類(lèi)行為具有高度目標(biāo)性,確立一個(gè)正確的目標(biāo)有著重要的心理學(xué)影響。軟件測(cè)試的心理學(xué)問(wèn)題就是如何擺正測(cè)試的兩個(gè)目標(biāo)的關(guān)系,使得測(cè)試活動(dòng)更加富有成效。
1.程序測(cè)試的過(guò)程具有破壞性
每當(dāng)測(cè)試一個(gè)程序時(shí),人們總希望為程序增加一些價(jià)值。利用測(cè)試來(lái)增加程序的價(jià)值,是指通過(guò)測(cè)試,找出并修改盡可能多的程序缺陷,從而提高程序的可靠性或質(zhì)量。
因此,不要只是為了證明程序能夠正確運(yùn)行而去測(cè)試程序。相反,應(yīng)該一開(kāi)始就假設(shè)程序中隱藏著錯(cuò)誤(這種假設(shè)幾乎對(duì)所有的程序都成立),然后測(cè)試程序,發(fā)現(xiàn)盡可能多的錯(cuò)誤。
事實(shí)上,如果把測(cè)試目標(biāo)定位于要證明程序中沒(méi)有缺陷,那么就會(huì)在潛意識(shí)中傾向于實(shí)現(xiàn)這個(gè)目標(biāo)。也就是說(shuō),測(cè)試人員會(huì)傾向于挑選那些使程序失效的可能性較小的測(cè)試數(shù)據(jù)。另一方面,如果把測(cè)試目標(biāo)定位于要證明程序中存在缺陷,那么就會(huì)選擇一些容易發(fā)現(xiàn)程序缺陷的測(cè)試數(shù)據(jù)。而后一種態(tài)度會(huì)比前者給程序增加更多的價(jià)值。
事實(shí)上,如果在測(cè)試某個(gè)程序段時(shí)發(fā)現(xiàn)了可以糾正的缺陷,或者測(cè)試最終確定再?zèng)]有其他缺陷,則應(yīng)將這次合理設(shè)計(jì)并得到有效執(zhí)行的測(cè)試稱(chēng)作是"成功的"。而所謂"不成功的"測(cè)試,僅指未能適當(dāng)?shù)貙?duì)程序進(jìn)行檢查,未能找出程序中潛藏缺陷的測(cè)試。
"軟件測(cè)試就是證明軟件不存在錯(cuò)誤的過(guò)程"。對(duì)幾乎所有的程序而言,甚至是非常小的程序,這個(gè)目標(biāo)實(shí)際上是無(wú)法達(dá)到的。因?yàn)榧词钩绦蛲耆珜?shí)現(xiàn)預(yù)期要求,仍可能包含有缺陷。也就是說(shuō),如果程序不按要求工作,它顯然有缺陷,但如果程序做了不要它做的事,它也有缺陷。
心理學(xué)研究告訴我們,當(dāng)人們?cè)诟梢患呀?jīng)知道是不合適的或不可能做到的事時(shí),往往他們的表現(xiàn)就相當(dāng)糟糕。把程序測(cè)試定義為在程序中找出錯(cuò)誤的過(guò)程,就使測(cè)試成了可以做到的任務(wù),從而克服了心理上存在的問(wèn)題。雖然這看起來(lái)像是個(gè)微妙的文字游戲,但對(duì)成功地進(jìn)行軟件測(cè)試有很大的影響。
總之,軟件測(cè)試更適宜被視為試圖發(fā)現(xiàn)程序中錯(cuò)誤(假設(shè)其存在)的破壞性的過(guò)程。一個(gè)成功的測(cè)試,通過(guò)誘發(fā)程序發(fā)生錯(cuò)誤,可以在這個(gè)方向上促進(jìn)軟件質(zhì)量的改進(jìn)。當(dāng)然最終人們還是要通過(guò)軟件測(cè)試來(lái)建立某種程度的信心:軟件做了其應(yīng)該做的,而沒(méi)有做其不應(yīng)該做的。
2.程序員應(yīng)避免測(cè)試自己的程序
由開(kāi)發(fā)人員來(lái)測(cè)試自己的代碼是一件很不妥當(dāng)?shù)氖虑椤i_(kāi)發(fā)和測(cè)試生來(lái)就是不同的活動(dòng)。開(kāi)發(fā)是創(chuàng)造或者建立某種事物的行為,如一個(gè)功能模塊或整個(gè)系統(tǒng)。而測(cè)試的重要目的是證實(shí)一個(gè)模塊或者一個(gè)系統(tǒng)工作不正常。這兩個(gè)活動(dòng)之間有著本質(zhì)的矛盾。一個(gè)人不太可能把兩個(gè)截然對(duì)立的角色都扮演地很好,因此應(yīng)當(dāng)限制開(kāi)發(fā)人員在測(cè)試中的參與,給他們比較合適的任務(wù)是進(jìn)行最底層的測(cè)試--單元測(cè)試。
當(dāng)一個(gè)程序員完成了設(shè)計(jì)與編寫(xiě)程序的建設(shè)性工作后,要一夜之間突然改變他的觀點(diǎn),設(shè)法對(duì)程序形成一個(gè)完全否定的態(tài)度,那是非常困難的。所以,大部分程序員都由于不能使自己進(jìn)入必要的精神狀態(tài)(不是抱著要揭露出自己程序中錯(cuò)誤的態(tài)度),就不能有效的測(cè)試自己的程序。除了這個(gè)心理學(xué)問(wèn)題之外,還有一個(gè)重要的問(wèn)題:程序中可能包含由于程序員對(duì)問(wèn)題的敘述或說(shuō)明的誤解而產(chǎn)生了錯(cuò)誤。如果是這種情況,當(dāng)程序員測(cè)試自己的程序時(shí),往往還會(huì)帶著同樣的誤解致使問(wèn)題難以發(fā)現(xiàn)。
3.程序設(shè)計(jì)組織不應(yīng)測(cè)試自己的程序
在宏觀意義上,一個(gè)程序設(shè)計(jì)組織或一個(gè)工程項(xiàng)目是個(gè)有生命的有機(jī)體,它同樣有心理學(xué)問(wèn)題。在大多數(shù)情況下,人們都以"在給定日期內(nèi),以一定代價(jià)完成程序編制任務(wù)的能力"來(lái)衡量程序設(shè)計(jì)組織和項(xiàng)目管理人員的。這樣做的理由是時(shí)間和成本指標(biāo)便于衡量,而程序的質(zhì)量很難度量。要程序設(shè)計(jì)組織在測(cè)試自己的程序時(shí)持客觀態(tài)度是很困難的,因?yàn)槿绻谜_的定義看待測(cè)試,就不大可能按預(yù)定計(jì)劃完成測(cè)試,也不大可能把耗費(fèi)的代價(jià)限制在要求的范圍以?xún)?nèi)。
軟件生產(chǎn)的三個(gè)最重要的因素是:質(zhì)量、進(jìn)度和費(fèi)用。由于費(fèi)用和進(jìn)度的限制,要開(kāi)發(fā)一種高質(zhì)量、快速交付和低成本的軟件產(chǎn)品并不容易。也就是說(shuō)要同時(shí)達(dá)到三個(gè)目標(biāo)是困難的。因此在軟件產(chǎn)品的開(kāi)發(fā)中要權(quán)衡它們之間的關(guān)系,使軟件的特性能滿(mǎn)足用戶(hù)的要求,這意味著軟件產(chǎn)品的特性的度量和預(yù)計(jì)是必要的。
軟件測(cè)試由獨(dú)立測(cè)試機(jī)構(gòu)承擔(dān)有很多好處。獨(dú)立測(cè)試是指軟件測(cè)試工作由在經(jīng)濟(jì)上和管理上獨(dú)立于開(kāi)發(fā)機(jī)構(gòu)的組織進(jìn)行。獨(dú)立測(cè)試可以避免軟件開(kāi)發(fā)者測(cè)試自己開(kāi)發(fā)的軟件,由于心理學(xué)上的問(wèn)題,軟件開(kāi)發(fā)者難以客觀、有效的測(cè)試自己的軟件,要找出那些因?yàn)閷?duì)問(wèn)題的誤解而產(chǎn)生的錯(cuò)誤就更加困難。獨(dú)立測(cè)試還可以避免軟件開(kāi)發(fā)機(jī)構(gòu)測(cè)試自己的軟件,軟件產(chǎn)品的開(kāi)發(fā)過(guò)程受到時(shí)間、成本和質(zhì)量三者的制約,在軟件開(kāi)發(fā)的過(guò)程中,當(dāng)時(shí)間、成本和質(zhì)量三者發(fā)生矛盾時(shí),質(zhì)量最容易被忽視,如果測(cè)試組織與開(kāi)發(fā)組織來(lái)自相同的機(jī)構(gòu),測(cè)試過(guò)程就會(huì)面臨來(lái)自于開(kāi)發(fā)組織同一來(lái)源的管理方面的壓力,使測(cè)試過(guò)程受到干擾。
客觀性--對(duì)軟件測(cè)試和軟件中的錯(cuò)誤抱著客觀的態(tài)度,這種客觀的態(tài)度可以解決測(cè)試中的心理學(xué)問(wèn)題,既能以揭露軟件中錯(cuò)誤的態(tài)度工作,也能不受發(fā)現(xiàn)的錯(cuò)誤的影響。經(jīng)濟(jì)上的獨(dú)立性使測(cè)試有更充分的條件按測(cè)試要求去完成。
專(zhuān)業(yè)性--獨(dú)立測(cè)試作為一種專(zhuān)業(yè)工作,在長(zhǎng)期的工作過(guò)程中勢(shì)必能夠積累大量實(shí)踐經(jīng)驗(yàn),形成自己的專(zhuān)業(yè)知識(shí)。同時(shí)軟件測(cè)試也是技術(shù)含量很高的工作,需要有專(zhuān)業(yè)隊(duì)伍加以研究,并進(jìn)行工程實(shí)踐。專(zhuān)業(yè)化分工是提高測(cè)試水平、保證測(cè)試質(zhì)量、充分發(fā)揮測(cè)試效應(yīng)的必然途徑。
權(quán)威性--由于專(zhuān)業(yè)優(yōu)勢(shì),獨(dú)立測(cè)試工作形成的測(cè)試結(jié)果更具信服力,而測(cè)試結(jié)果常常和對(duì)軟件的質(zhì)量評(píng)價(jià)聯(lián)系在一起,專(zhuān)業(yè)化的獨(dú)立測(cè)試機(jī)構(gòu)的評(píng)價(jià),更客觀、公正和具有權(quán)威性。
資源有保證--獨(dú)立測(cè)試機(jī)構(gòu)的主要任務(wù)是進(jìn)行獨(dú)立測(cè)試工作,這使得測(cè)試工作在經(jīng)費(fèi)、人力和計(jì)劃方面更有保證,不會(huì)因?yàn)殚_(kāi)發(fā)的壓力減少對(duì)測(cè)試的投入,降低測(cè)試的有效性可以避免開(kāi)發(fā)單位側(cè)重軟件開(kāi)發(fā)而對(duì)測(cè)試工作產(chǎn)生不利的影響。