軟件測(cè)試與改錯(cuò)-掌握有效測(cè)試的方法與技術(shù)課件
,Title Holder,First bullet sentence case,Second bullet sentence case,Third Bullet,Fourth bullet,第,*,頁(yè),軟件測(cè)試與改錯(cuò),掌握有效測(cè)試的方法與技術(shù),王曉輝,maconi126.co,,華北電力大學(xué)計(jì)算機(jī)系,軟件測(cè)試與改錯(cuò)華北電力大學(xué)計(jì)算機(jī)系,目錄,1.,測(cè)試的常識(shí)與道理,2.,測(cè)試的分類與比較,3.,測(cè)試人員的組織,4.,企業(yè)的測(cè)試策略,5.,測(cè)試規(guī)范,6.軟件產(chǎn)品的主要測(cè)試內(nèi)容及技術(shù),7.改錯(cuò)的方法,8.小結(jié),世上不存在沒(méi)有缺陷的軟件,目錄1.測(cè)試的常識(shí)與道理 世上不存在沒(méi)有缺陷的軟件,1.測(cè)試的常識(shí)與道理,1.1,你真的懂測(cè)試嗎,編程大師說(shuō):沒(méi)有錯(cuò)誤的程序世間難求。(編程之道),你在學(xué)校里學(xué)過(guò)測(cè)試嗎?(讀到博士可能也不懂測(cè)試),你所在的企業(yè)重視測(cè)試嗎?(小公司程序員的技能更加全面),臨時(shí)抱佛腳行嗎?,你以為有文檔模板就會(huì)測(cè)試了嗎,?,如果不懂得有效地進(jìn)行測(cè)試,你不僅得不到功勞,也沒(méi)人欣賞你的苦勞,你擁有最多的將只是疲勞。,職業(yè)軟件工程師應(yīng)當(dāng)掌握需求開(kāi)發(fā)、系統(tǒng)設(shè)計(jì)、編程、測(cè)試、維護(hù),所有技能。,1.測(cè)試的常識(shí)與道理1.1 你真的懂測(cè)試嗎,1.2 測(cè)試的目的是什么,測(cè)試的目的是為了發(fā)現(xiàn)盡可能多的缺陷,,不是,為了說(shuō)明軟件中沒(méi)有缺陷。,推論:成功的測(cè)試在于發(fā)現(xiàn)了迄今尚未發(fā)現(xiàn)的缺陷。所以測(cè)試人員的職責(zé)是設(shè)計(jì)這樣的測(cè)試用例,它能有效地揭示潛伏在軟件里的缺陷。,千萬(wàn)不要將“測(cè)試”與“演示”混為一談。例如科研鑒定會(huì)。,如果產(chǎn)品通過(guò)了嚴(yán)格的測(cè)試,大家不要不吭氣,應(yīng)當(dāng)好好地宣傳一把,。,1.2 測(cè)試的目的是什么,1.測(cè)試的常識(shí)與道理,1.3 一些常識(shí)和經(jīng)驗(yàn)之談,測(cè)試能提高軟件的質(zhì)量,但是提高質(zhì)量不能依賴測(cè)試。,測(cè)試只能證明缺陷存在,不能證明缺陷不存在。“徹底地測(cè)試”難以成為現(xiàn)實(shí),要考慮時(shí)間、費(fèi)用等限制,不允許無(wú)休止地測(cè)試。我們應(yīng)當(dāng)祈禱:軟件的缺陷在產(chǎn)品被淘汰之前一直沒(méi)有機(jī)會(huì)發(fā)作。,測(cè)試的主要困難是不知道如何進(jìn)行有效地測(cè)試,也不知道什么時(shí)候可以放心地結(jié)束測(cè)試。,每個(gè)開(kāi)發(fā)人員應(yīng)當(dāng)測(cè)試自己的程序(份內(nèi)之事),但是不能作為該程序已經(jīng)通過(guò)測(cè)試的依據(jù)(所以項(xiàng)目需要獨(dú)立測(cè)試人員)。,80-20原則:80的缺陷聚集在20的模塊中,經(jīng)常出錯(cuò)的模塊改錯(cuò)后還會(huì)經(jīng)常出錯(cuò),測(cè)試應(yīng)當(dāng)循序漸進(jìn),不要企圖一次性干完,注意“欲速則不達(dá)”。,1.測(cè)試的常識(shí)與道理1.3 一些常識(shí)和經(jīng)驗(yàn)之談,2.測(cè)試的分類與比較,2.1 測(cè)試方式,白盒測(cè)試:關(guān)心軟件內(nèi)部設(shè)計(jì)和程序?qū)崿F(xiàn),主要測(cè)試依據(jù)是設(shè)計(jì)文檔,黑盒測(cè)試:不關(guān)心軟件內(nèi)部,只關(guān)心輸入輸出,主要測(cè)試依據(jù)是需求文檔,2.2 測(cè)試階段,單元測(cè)試、集成測(cè)試、,系統(tǒng)測(cè)試、,驗(yàn)收測(cè)試。是,“從小到大”、“由內(nèi)至外”、“循序漸進(jìn)”的測(cè)試過(guò)程,體現(xiàn)了“分而治之”的思想。,單元測(cè)試的粒度最小,一般由開(kāi)發(fā)小組采用白盒方式來(lái)測(cè)試,主要測(cè)試單元是否符合“設(shè)計(jì)”。,集成測(cè)試界于單元測(cè)試和系統(tǒng)測(cè)試之間,起到“橋梁作用”,一般由開(kāi)發(fā)小組采用白盒加黑盒的方式來(lái)測(cè)試,既要驗(yàn)證“設(shè)計(jì)”又要驗(yàn)證“需求”。,系統(tǒng)測(cè)試的粒度最大,一般由獨(dú)立測(cè)試小組采用黑盒方式來(lái)測(cè)試,主要測(cè)試系統(tǒng)是否符合“需求規(guī)格說(shuō)明書(shū)”。,驗(yàn)收測(cè)試與系統(tǒng)測(cè)試非常相似,主要區(qū)別是測(cè)試人員不同,驗(yàn)收測(cè)試由用戶執(zhí)行。,2.測(cè)試的分類與比較2.1 測(cè)試方式,2.測(cè)試的分類與比較,2.3 開(kāi)發(fā)與測(cè)試的,V,型關(guān)系,如果軟件開(kāi)發(fā)過(guò)程采用嚴(yán)格的瀑布模型,那么開(kāi)發(fā)與測(cè)試有“,V”,型的對(duì)應(yīng)關(guān)系,。,需求開(kāi)發(fā),高層設(shè)計(jì),詳細(xì)設(shè)計(jì),編程,單元測(cè)試,集成測(cè)試,系統(tǒng)測(cè)試,驗(yàn)收測(cè)試,2.測(cè)試的分類與比較2.3 開(kāi)發(fā)與測(cè)試的 V 型關(guān)系需求開(kāi),2.測(cè)試的分類與比較,2.4 測(cè)試內(nèi)容,接口與路徑測(cè)試。,功能測(cè)試、健壯性測(cè)試、性能測(cè)試、用戶界面測(cè)試、安全性測(cè)試、壓力測(cè)試、可靠性測(cè)試、安裝/反安裝測(cè)試,測(cè)試階段,主要依據(jù),測(cè)試人員、測(cè)試方式,主要測(cè)試內(nèi)容,單元測(cè)試,系統(tǒng)設(shè)計(jì)文檔,由開(kāi)發(fā)小組執(zhí)行白盒測(cè)試,接口測(cè)試、路徑測(cè)試,集成測(cè)試,系統(tǒng)設(shè)計(jì)文檔,需求文檔,由開(kāi)發(fā)小組執(zhí)行白盒測(cè)試和黑盒測(cè)試,接口測(cè)試、路徑測(cè)試,功能測(cè)試、性能測(cè)試,系統(tǒng)測(cè)試,需求文檔,由獨(dú)立測(cè)試小組執(zhí)行黑盒測(cè)試,功能測(cè)試、健壯性測(cè)試、性能測(cè)試、用戶界面測(cè)試、安全性測(cè)試、壓力測(cè)試、可靠性測(cè)試、安裝,/,反安裝測(cè)試,驗(yàn)收測(cè)試,需求文檔,由用戶執(zhí)行黑盒測(cè)試,2.測(cè)試的分類與比較2.4 測(cè)試內(nèi)容測(cè)試階段 主要依據(jù) 測(cè),2.測(cè)試的分類與比較,2.5 問(wèn)題,問(wèn)題1:有了“黑盒”測(cè)試為什么還要“白盒”測(cè)試?,黑盒測(cè)試只能觀察軟件的外部表現(xiàn),即使軟件的輸入輸出都是正確的,卻并不能說(shuō)明軟件就是正確的。因?yàn)槌绦蛴锌赡苡缅e(cuò)誤的運(yùn)算方式得出正確的結(jié)果,例如“負(fù)負(fù)得正,錯(cuò)錯(cuò)得對(duì)”,只有白盒測(cè)試才能發(fā)現(xiàn)真正的原因。,(,舉一個(gè)學(xué)生作業(yè)的例子,),白盒測(cè)試能發(fā)現(xiàn)程序里的隱患,象內(nèi)存泄漏、誤差累計(jì)問(wèn)題。在這方面,黑盒測(cè)試存在嚴(yán)重的不足。,問(wèn)題2:由于單元測(cè)試要寫(xiě)測(cè)試驅(qū)動(dòng)程序,非常麻煩,能否等到整個(gè)系統(tǒng)全部開(kāi)發(fā)完后,再集中精力進(jìn)行一次性地單元測(cè)試呢?,如果這樣做,在開(kāi)發(fā)過(guò)程中,缺陷會(huì)越積越多并且分布得更廣、隱藏得更深,反而導(dǎo)致測(cè)試與改錯(cuò)的代價(jià)大大增加。最糟糕的是無(wú)法估計(jì)測(cè)試與改錯(cuò)的工作量,使進(jìn)度失去控制。因此為圖眼前省事而省略單元測(cè)試或者“偷工減料”,是“得不償失”的做法。,2.測(cè)試的分類與比較2.5 問(wèn)題,問(wèn)題3:如果每個(gè)單元都通過(guò)了測(cè)試,把它們集成一起難道會(huì)有什么不妥嗎?集成測(cè)試是否多此一舉?,要把,N,個(gè)單元集成一起肯定靠接口耦合,這時(shí)可能會(huì)產(chǎn)生在單元測(cè)試中無(wú)法發(fā)現(xiàn)的問(wèn)題。例如:數(shù)據(jù)通過(guò)不同的接口時(shí)可能出錯(cuò);幾個(gè)函數(shù)關(guān)聯(lián)在一起時(shí)可能達(dá)不到預(yù)期的功能;在某個(gè)單元里可以接受的誤差可能在集成后被擴(kuò)大到無(wú)法接受的程度。所以集成測(cè)試是必要的,不是多此一舉。,問(wèn)題4:在集成測(cè)試的時(shí)候,已經(jīng)對(duì)一些子系統(tǒng)進(jìn)行了功能測(cè)試、性能測(cè)試等等,那么在系統(tǒng)測(cè)試時(shí)能否跳過(guò)相同內(nèi)容的測(cè)試?,不能!因?yàn)榧蓽y(cè)試是在仿真環(huán)境中開(kāi)展的,那不是真正的目標(biāo)系統(tǒng)。再者,單元測(cè)試和集成測(cè)試通常由開(kāi)發(fā)小組執(zhí)行。根據(jù)測(cè)試心理學(xué)的分析,開(kāi)發(fā)人員測(cè)試自己的工作成果雖然是必要的,但不能作為成果已經(jīng)通過(guò)測(cè)試的依據(jù)。,問(wèn)題3:如果每個(gè)單元都通過(guò)了測(cè)試,把它們集成一起難道會(huì)有什么,2.測(cè)試的分類與比較,2.5 問(wèn)題,問(wèn)題5:既然系統(tǒng)測(cè)試與驗(yàn)收測(cè)試的內(nèi)容幾乎是相同的,為什么還要驗(yàn)收測(cè)試?,首先是“信任”問(wèn)題。對(duì)于合同項(xiàng)目而言,如果測(cè)試小組是開(kāi)發(fā)方的人員,客戶怎么能夠輕易相信“別人”呢?所以當(dāng)項(xiàng)目進(jìn)行系統(tǒng)測(cè)試之后,客戶再進(jìn)行驗(yàn)收測(cè)試是情理之中的事。否則,那是客戶失職。,不論是合同項(xiàng)目還是非合同項(xiàng)目,軟件的最終用戶各色各樣(如受教育程度不同、使用習(xí)慣不同等等)。測(cè)試小組至多能夠模仿小部分用戶的行為,但并不具有普遍的代表性。,問(wèn)題6:能否將系統(tǒng)測(cè)試和驗(yàn)收測(cè)試“合二為一”?,系統(tǒng)測(cè)試不是一會(huì)兒就能做完的,比較長(zhǎng)時(shí)間的用戶測(cè)試很難組織。用戶還有自己的事情要做,他們?yōu)槭裁匆獮閯e人測(cè)試呢?即使用戶愿意做系統(tǒng)測(cè)試,他們消耗的時(shí)間、花費(fèi)的金錢(qián)大多比測(cè)試小組的高。,系統(tǒng)測(cè)試時(shí)會(huì)找出相當(dāng)多的軟件缺陷,軟件需要反反復(fù)復(fù)地改錯(cuò)。如果讓用戶發(fā)現(xiàn)“內(nèi)幕”,一是丟臉,二是會(huì)嚇跑買(mǎi)主。所以還是關(guān)起門(mén)來(lái),先讓測(cè)試小組做完系統(tǒng)測(cè)試的好。,2.測(cè)試的分類與比較2.5 問(wèn)題,3.,測(cè)試人員的組織,3.1 了解開(kāi)發(fā)人員的測(cè)試心理,測(cè)試的目的是找出盡可能多的缺陷。所以測(cè)試是“破壞性”的,而開(kāi)發(fā)卻是“建設(shè)性”的。開(kāi)發(fā)人員總是喜歡欣賞程序的成功之處,而不愿看到失敗之處。讓開(kāi)發(fā)者去做“蓄意破壞”的測(cè)試,就象殺自己的孩子一樣難以接受。,開(kāi)發(fā)者對(duì)自己的程序印象深刻,并總以為是正確的(自信是應(yīng)該的)。倘若在設(shè)計(jì)時(shí)就存在理解錯(cuò)誤,或因不良的編程習(xí)慣而流下了隱患,他本人很難發(fā)現(xiàn)這類錯(cuò)誤.,開(kāi)發(fā)者對(duì)自己的程序的功能、接口十分熟悉,他自己幾乎不可能因?yàn)槭褂貌划?dāng)而引發(fā)錯(cuò)誤,這與大眾用戶的情況不太相似,所以測(cè)試自己的程序不具備典型性。,結(jié)論:開(kāi)發(fā)人員應(yīng)當(dāng)測(cè)試自己的程序,這是他分內(nèi)的工作。但是開(kāi)發(fā)人員在測(cè)試自己的程序時(shí),很難做到客觀、公正,所以自我測(cè)試不具有說(shuō)服力。,3.測(cè)試人員的組織3.1 了解開(kāi)發(fā)人員的測(cè)試心理,3.2 如何組織測(cè)試人員:應(yīng)當(dāng)視企業(yè)的人力資源而定,條件特別好的公司,,,可以為每一個(gè)開(kāi)發(fā)人員分配一名獨(dú)立的測(cè)試人員。這樣的測(cè)試人員職業(yè)化程度很高,可以完成單元測(cè)試、集成測(cè)試和系統(tǒng)測(cè)試工作,能夠?qū)崿F(xiàn)開(kāi)發(fā)與測(cè)試同步進(jìn)行。,條件比較好的公司,可以設(shè)置一個(gè)獨(dú)立的測(cè)試小組,該測(cè)試小組輪流參加各個(gè)項(xiàng)目的系統(tǒng)測(cè)試。而單元測(cè)試、集成測(cè)試工作由項(xiàng)目的開(kāi)發(fā)小組承擔(dān)。,條件一般的公司,養(yǎng)不起獨(dú)立的測(cè)試小組。單元測(cè)試、集成測(cè)試工作由項(xiàng)目開(kāi)發(fā)小組承擔(dān)。當(dāng)項(xiàng)目進(jìn)展到系統(tǒng)測(cè)試階段,可以從項(xiàng)目外抽調(diào)一些人員,加上開(kāi)發(fā)人員,臨時(shí)組織系統(tǒng)測(cè)試小組。,條件比較差的公司,也許只有一個(gè)項(xiàng)目和為數(shù)不多的一些開(kāi)發(fā)人員。那么就讓開(kāi)發(fā)人員一直兼任測(cè)試人員的角色,相互測(cè)試對(duì)方的程序。如果人員實(shí)在太少了,只好讓開(kāi)發(fā)者測(cè)試自己的程序,有測(cè)試總比沒(méi)有測(cè)試好吧!,3.2 如何組織測(cè)試人員:應(yīng)當(dāng)視企業(yè)的人力資源而定,3.,測(cè)試人員的組織,3.3 避免開(kāi)發(fā)人員與測(cè)試人員產(chǎn)生矛盾,開(kāi)發(fā)人員的注意事項(xiàng):,不要敵視測(cè)試人員。要理解測(cè)試的目的就是發(fā)現(xiàn)缺陷,是測(cè)試人員的工作職責(zé)。不要以為測(cè)試人員吃飽了沒(méi)事干,存心找茬。,不要輕視測(cè)試人員,別說(shuō)人家技術(shù)水平差,不配搞開(kāi)發(fā)只好搞測(cè)試。,測(cè)試人員的注意事項(xiàng):,發(fā)現(xiàn)缺陷時(shí)不要嘲笑開(kāi)發(fā)人員,別說(shuō)他的程序真臭、到處是,Bug。,在開(kāi)發(fā)人員壓力太大時(shí)或心情不好時(shí)不要火上澆油,發(fā)現(xiàn)缺陷時(shí)別大聲嚷嚷。,請(qǐng)留意另一種極端:如果測(cè)試人員與開(kāi)發(fā)人員的關(guān)系非常好,可能會(huì)導(dǎo)致在測(cè)試的時(shí)候“手下留情”,這對(duì)項(xiàng)目也是一種傷害。,3.測(cè)試人員的組織3.3 避免開(kāi)發(fā)人員與測(cè)試人員產(chǎn)生矛盾,4.,企業(yè)的測(cè)試策略,4.1 理念:,企業(yè)的主要目的是獲取利潤(rùn),降低測(cè)試成本也是盈利的一種方式。,用較低的代價(jià)實(shí)現(xiàn)有效的測(cè)試,不應(yīng)為了追求完美的測(cè)試而不失一切代價(jià)。,4.企業(yè)的測(cè)試策略4.1 理念:,4.2 如何合理地減少測(cè)試工作量,減少冗余的測(cè)試,白盒測(cè)試與黑盒測(cè)試的方式雖然不同,但往往有“異曲同工”之妙。在很多地方,白盒測(cè)試與黑盒測(cè)試會(huì)產(chǎn)生一模一樣的效果(或者能推理出來(lái)),這樣的測(cè)試是冗余的。,在集成測(cè)試、系統(tǒng)測(cè)試階段,可能要執(zhí)行多次“回歸測(cè)試”。每一次“回歸測(cè)試”都會(huì)存在不少的冗余,應(yīng)當(dāng)設(shè)法剔除不必要的重復(fù)測(cè)試工作。,減少無(wú)價(jià)值的測(cè)試,無(wú)價(jià)值的測(cè)試通常是由于不懂得測(cè)試技術(shù)引起的。例如功能測(cè)試,在等價(jià)區(qū)間之中,本來(lái)只要測(cè)試一個(gè)典型的輸入就行了,如果有人在此區(qū)間測(cè)試了100次,那么其中99次就是無(wú)價(jià)值的。,如何“偷工減料”,有一些“短、平、快”的項(xiàng)目,經(jīng)費(fèi)本來(lái)就少,用戶對(duì)質(zhì)量要求也馬馬虎虎。為了能多掙一點(diǎn)錢(qián),開(kāi)發(fā)方不得不采用“偷工減料”的方式來(lái)降低測(cè)試代價(jià)。偷工減料的途徑無(wú)非就是減少測(cè)試的內(nèi)容和頻度。但不能砍得太狠,否則軟件拿不出手?;痉椒ㄊ钦页鲕浖行枰獌?yōu)先測(cè)試的部分(見(jiàn)下表),其它次要部分可以忽略或?qū)?lái)再測(cè)試。,4.2 如何合理地減少測(cè)試工作量,4.,企業(yè)的測(cè)試策略,“偷工減料”方法的測(cè)試優(yōu)先級(jí):,哪些功能是軟件的特色?,哪些功能是用戶最常用的?,如果系統(tǒng)可以分塊賣(mài)的話,哪些功能塊在銷(xiāo)售時(shí)最昂貴?,哪些功能出錯(cuò)將導(dǎo)致用戶不滿或索賠?,哪些程序是最復(fù)雜、最容易出錯(cuò)的?,哪些程序是相對(duì)獨(dú)立,應(yīng)當(dāng)提前測(cè)試的?,哪些程序最容易擴(kuò)散錯(cuò)誤?,哪些程序是全系統(tǒng)的性能瓶頸所在?,哪些程序是開(kāi)發(fā)者最沒(méi)有信心的?,4.企業(yè)的測(cè)試策略“偷工減料”方法的測(cè)試優(yōu)先級(jí):,4.3 測(cè)試何時(shí)結(jié)束,基于測(cè)試用例的規(guī)則,基于“測(cè)試期缺陷密度”的規(guī)則,基于“運(yùn)行期缺陷密度”的規(guī)則,4.4 測(cè)試獎(jiǎng)勵(lì)機(jī)制,根據(jù)缺陷的危害程度,把獎(jiǎng)金分等級(jí)。,每個(gè)新缺陷對(duì)應(yīng)一份獎(jiǎng)金,把獎(jiǎng)金發(fā)給第一個(gè)發(fā)現(xiàn)該缺陷的人。獎(jiǎng)金額要適當(dāng),太低了人們不感興趣,太高了會(huì)讓項(xiàng)目破產(chǎn)的。,4.3 測(cè)試何時(shí)結(jié)束,5.,測(cè)試規(guī)范,5.1 測(cè)試流程,第一步:制