三級(jí)信息管理技術(shù)分章節(jié)考試要點(diǎn):第二章
5.模塊分解時(shí)應(yīng)遵循的準(zhǔn)則
(1)滿(mǎn)足信息隱蔽原則。
(2)盡量使得模塊的內(nèi)聚度高,模塊間的耦合度低。
(3)模塊的大小適中(通常一個(gè)模塊以50~100個(gè)語(yǔ)句行為適宜)。
(4)模塊的調(diào)用深度不宜過(guò)大。一個(gè)模塊A可以調(diào)用另一模塊B,模塊B還可調(diào)用模塊C,稱(chēng)模塊A直接調(diào)用模塊B,模塊A間接調(diào)用模塊C,被間接調(diào)用的模塊還可調(diào)其他模塊,這樣可形成一棵調(diào)用樹(shù),我們把以某個(gè)模塊為根結(jié)點(diǎn)的調(diào)用樹(shù)的深度稱(chēng)為該模塊的調(diào)用深度。
(5)模塊的扇入應(yīng)盡量大,扇出不宜過(guò)大。一個(gè)模塊的扇入是指直接調(diào)用該模塊的上級(jí)模塊個(gè)數(shù)。一個(gè)模塊的扇出是指該模塊直接調(diào)用的下級(jí)模塊的個(gè)數(shù)。扇入大表示模塊的復(fù)用程度高,扇出大表示模塊的復(fù)雜度高。
(6)設(shè)計(jì)單入口和單出口的模塊。
(7)模塊的作用域應(yīng)在控制域之內(nèi)。模塊的作用域是指受該模塊內(nèi)一個(gè)判定影響的所在模塊的集合。模塊的控制域是指該模塊本身以及被該模塊直接或間接調(diào)用的所有模塊的集合。在設(shè)計(jì)時(shí),作用域應(yīng)是控制域的子集,作用域最好是做出判定的模塊本身以及它的直屬下級(jí)模塊(直接調(diào)用的模塊)。
(8)模塊的功能應(yīng)是可以預(yù)測(cè)的,功能可預(yù)測(cè)是指對(duì)相同的輸入數(shù)據(jù)能產(chǎn)生相同的輸出。
三、軟件測(cè)試
在軟件開(kāi)發(fā)的一列活動(dòng)中,為了保證軟件的可靠性,人們研究并使用了很多方法進(jìn)行分析、設(shè)計(jì)及編碼實(shí)現(xiàn)。但是由于軟件產(chǎn)品本身無(wú)形態(tài),它是復(fù)雜的、知識(shí)高度密集的邏輯產(chǎn)品,其中不可能沒(méi)有錯(cuò)誤。物理產(chǎn)品在出廠前都要進(jìn)行嚴(yán)格的檢驗(yàn),軟件產(chǎn)品也不例外。軟件開(kāi)發(fā)總伴隨著軟件質(zhì)量保證的活動(dòng),而軟件測(cè)試是主要活動(dòng)之一。軟件測(cè)試代表了需求分析、設(shè)計(jì)、編碼的最終復(fù)審。
測(cè)試是一項(xiàng)很艱苦的工作,其工作量約占軟件開(kāi)發(fā)總工作量的40%以上,特別對(duì)一些關(guān)系到人的生命安全的軟件,共測(cè)試成本可能相當(dāng)于開(kāi)發(fā)階段總成本的3~5倍。
(一)測(cè)試的基本概念1.測(cè)試的目的
軟件測(cè)試的目的是盡可能多地發(fā)現(xiàn)軟件產(chǎn)品(主要是指程序)中的錯(cuò)誤和缺陷。
明確測(cè)試的目的是一件非常重要的事,因?yàn)樵诂F(xiàn)實(shí)世界中對(duì)測(cè)試工作存在著許多模糊或者錯(cuò)誤的看法,這些看法嚴(yán)重影響著測(cè)試工作的順利進(jìn)行。
有人認(rèn)為測(cè)試是為了證明程序是正確的,也就是說(shuō)程序不再有錯(cuò)誤,事實(shí)證明這是不現(xiàn)實(shí)的。因?yàn)橐ㄟ^(guò)測(cè)試來(lái)發(fā)現(xiàn)程序中的所有錯(cuò)誤就要窮舉所有可能的輸入數(shù)據(jù),檢查它們是否產(chǎn)生正確的結(jié)果。例如,一個(gè)需要3個(gè)16位字長(zhǎng)的整型輸入數(shù)據(jù)的程序,輸入數(shù)據(jù)的所有組合情況大約有3×10 14 種,若每組數(shù)據(jù)的測(cè)試時(shí)間為1ms,那么即使一年365天,每天24小時(shí)地測(cè)試,也大約需要1萬(wàn)年的時(shí)間。
2.測(cè)試用例
要進(jìn)行測(cè)試,除了要有測(cè)試數(shù)據(jù)(或稱(chēng)輸入數(shù)據(jù))外,還應(yīng)同時(shí)給出該組測(cè)試數(shù)據(jù)應(yīng)該得以怎樣的輸出結(jié)果,我們稱(chēng)它為預(yù)期結(jié)果。在測(cè)試時(shí)將實(shí)際的輸出結(jié)果與預(yù)期結(jié)果比較,若不同則表示發(fā)現(xiàn)了錯(cuò)誤,因此測(cè)試用例是由測(cè)試數(shù)據(jù)和預(yù)期結(jié)果構(gòu)成的。
為了發(fā)現(xiàn)程序中的錯(cuò)誤,應(yīng)竭力設(shè)計(jì)能暴露錯(cuò)誤的測(cè)試用例。一個(gè)好的測(cè)試用例是極有可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試用例。一次成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。
3.測(cè)試的原則
基于上述測(cè)試目的,我們可以考慮以下有關(guān)測(cè)試的原則:
(1)確定預(yù)期輸出結(jié)果是測(cè)試用例必不可少的一部分。如果只有測(cè)試數(shù)據(jù)而無(wú)預(yù)期結(jié)果,那么就不易判斷測(cè)試結(jié)果是否正確。
(2)程序員應(yīng)避免測(cè)試自己的程序,程序設(shè)計(jì)機(jī)構(gòu)不應(yīng)測(cè)試自己的程序。這是因?yàn)槌绦蛑械腻e(cuò)誤往往是由于程序員對(duì)問(wèn)題說(shuō)明的誤解,由他來(lái)測(cè)試自己的程序就不易找出因這種誤解而產(chǎn)生的錯(cuò)誤。此外,開(kāi)發(fā)程序是一項(xiàng)建設(shè)性的工作,而測(cè)試則是一項(xiàng)破壞性的工作(證明程序有錯(cuò)),這對(duì)開(kāi)發(fā)人員或機(jī)構(gòu)來(lái)說(shuō)在心理上是難以容忍的。為了證明自己的程序沒(méi)有錯(cuò)誤或錯(cuò)誤很少,他們往往不去選擇容易發(fā)現(xiàn)錯(cuò)誤的測(cè)試用例,而選擇容易通過(guò)的測(cè)試用例。當(dāng)然,這并不意味著程序員都不能測(cè)試自己的程序,如單元測(cè)試通常就是由程序員自己測(cè)試的。
(3)徹底檢查每個(gè)測(cè)試結(jié)果。如果不仔細(xì)檢查測(cè)試結(jié)果,有些已經(jīng)測(cè)試出來(lái)的錯(cuò)誤也可能被遺漏掉。
(4)對(duì)非法的非預(yù)期的輸入數(shù)據(jù)也要像合法的和預(yù)期的輸入數(shù)據(jù)一樣編寫(xiě)測(cè)試用例。
(5)檢查程序是否做了應(yīng)做的事是成功的一半,另一半是看程序是否做了不該做的事。
(6)除了真正沒(méi)有用的程序外,一定不要扔掉測(cè)試用例。因?yàn)樵诟恼e(cuò)誤或程序維護(hù)后還要進(jìn)行重新測(cè)試。
(7)在規(guī)劃測(cè)試時(shí)不要設(shè)想程序中不會(huì)查出錯(cuò)誤。
(8)程序模塊經(jīng)測(cè)試后,殘存的錯(cuò)誤數(shù)目往往與已發(fā)現(xiàn)的錯(cuò)誤數(shù)目成比例。實(shí)踐證明,程序中的大量錯(cuò)誤僅與少量的程序模塊有關(guān),因此當(dāng)A模塊找出的錯(cuò)誤比B模塊多得多時(shí),很可能A模塊殘存的錯(cuò)誤仍比B模塊殘存的錯(cuò)誤多多。
4.白盒測(cè)試和黑盒測(cè)試
測(cè)試的關(guān)鍵是測(cè)試用例的設(shè)計(jì),其方法可分成兩類(lèi):白盒測(cè)試和黑盒測(cè)試。
白盒測(cè)試是把程序看成裝在一只透明的白盒子里,測(cè)試者完全了解程序結(jié)構(gòu)和處理過(guò)程。它根據(jù)程序的內(nèi)部邏輯來(lái)設(shè)計(jì)測(cè)試用例,檢查程序中的邏輯通路是否都按預(yù)定的要求正確地工作。黑盒測(cè)試是把程序看成一只黑盒子,測(cè)試者完全不了解(或不考慮)程序的結(jié)構(gòu)和處理過(guò)程。它根據(jù)規(guī)格說(shuō)明書(shū)規(guī)定的功能來(lái)設(shè)計(jì)測(cè)試用例,檢查程序的功能是否符合規(guī)格說(shuō)明的要求。
(二)測(cè)試步驟
軟件測(cè)試的主要步驟有單元測(cè)試、集成測(cè)試和確認(rèn)測(cè)試。
1.單元測(cè)試(unit testing)
單元測(cè)試也稱(chēng)模塊測(cè)試。通常單元測(cè)試可放在編碼階段,程序員在編寫(xiě)好一個(gè)模塊后,總會(huì)(也應(yīng)該)對(duì)自己編寫(xiě)的模塊進(jìn)行測(cè)試,檢查它是否實(shí)現(xiàn)了詳細(xì)設(shè)計(jì)說(shuō)明書(shū)中規(guī)定的模塊功能和算法。單元測(cè)試主要發(fā)現(xiàn)編碼和詳細(xì)設(shè)計(jì)中產(chǎn)生的錯(cuò)誤,通常采用白盒測(cè)試。
測(cè)試一個(gè)模塊時(shí)需要編寫(xiě)一個(gè)驅(qū)動(dòng)模塊和若干個(gè)樁(stub)模塊,如下圖所示。驅(qū)動(dòng)模塊的功能是向被測(cè)試模塊提供測(cè)試數(shù)據(jù),驅(qū)動(dòng)(即調(diào)用)被測(cè)模塊,并從被測(cè)模塊中接受測(cè)試結(jié)果。樁模塊的功能是模擬被模塊所調(diào)用的子模塊,它接受被測(cè)模塊的調(diào)用,檢驗(yàn)調(diào)用參數(shù),模擬被
調(diào)用的子模塊功能,把結(jié)果送回給被測(cè)模塊。在模塊結(jié)構(gòu)圖中,頂層模塊測(cè)試時(shí)不需要驅(qū)動(dòng)模塊,最底層的模塊測(cè)試時(shí)不需要樁模塊。
2.集成測(cè)試(integration testing)
集成測(cè)試也稱(chēng)組裝測(cè)試,它是對(duì)由各模塊組裝而成的程序進(jìn)行測(cè)試,主要檢查模塊間的接口和通信。集成測(cè)試主要發(fā)現(xiàn)設(shè)計(jì)階段產(chǎn)生的錯(cuò)誤,通常采用黑盒測(cè)試。
集成的方式可分成非漸增式集成和漸增式集成。非漸增式集成是先測(cè)試所有的模塊,然后把這些模塊集成在一起對(duì)整個(gè)程序進(jìn)行測(cè)試。漸增式集成是將單元測(cè)試和集成測(cè)試合并在一起,它根據(jù)模塊結(jié)構(gòu)圖,按某種次序選一個(gè)尚未測(cè)試的模塊,把它同已經(jīng)測(cè)試好的模塊組合在一起對(duì)整個(gè)程序進(jìn)行測(cè)試,每次增加一個(gè)模塊,直至所有模塊全部集成在程序中。
漸增式集成又可分成自頂向下集成和自底向上集成。自頂向下集成先測(cè)試上層模塊,再測(cè)試下層模塊。由于測(cè)試下層模塊時(shí)它的上層模塊已測(cè)試過(guò),所以可以用其上層模塊作為它的驅(qū)動(dòng)模塊,而不必另編驅(qū)動(dòng)模塊。自底向上集成先測(cè)試下層模塊,再測(cè)試上層模塊。同樣道理,在自底向上集成時(shí)可用下層模塊作為上層模塊的樁模塊,而不必另外編寫(xiě)樁模塊。
3.確認(rèn)測(cè)試(walidation testing)
確認(rèn)測(cè)試的任務(wù)是檢查軟件的功能、性能及其他特征是否與用戶(hù)的需求一致,它是以需求規(guī)格說(shuō)明書(shū)(即需求規(guī)約)作為依據(jù)的測(cè)試。確認(rèn)測(cè)試通常采用黑盒測(cè)試。
確認(rèn)測(cè)試首先測(cè)試程序是否滿(mǎn)足需求規(guī)格說(shuō)明書(shū)所列的各項(xiàng)要求,然后要進(jìn)行軟件配置復(fù)查,特別是文檔是否齊全,各方面的質(zhì)量是否符合要求等。如果一個(gè)軟件是為某個(gè)客戶(hù)定制的,那么最后由客戶(hù)來(lái)實(shí)施驗(yàn)收測(cè)試(acceptance testing),以便客戶(hù)確認(rèn)該軟件是否他所需要的。如果一個(gè)軟件是作為產(chǎn)品被許多客戶(hù)使用的話,那不可能為每個(gè)客戶(hù)進(jìn)行驗(yàn)收測(cè)試。大多數(shù)軟件生產(chǎn)者使用一種Alpha測(cè)試和Beta測(cè)試的過(guò)程,來(lái)揭露僅由最終用戶(hù)才能發(fā)現(xiàn)的錯(cuò)誤。
Alpha測(cè)試是在開(kāi)發(fā)者的現(xiàn)場(chǎng)由客戶(hù)來(lái)實(shí)施的,被測(cè)試的軟件是在開(kāi)發(fā)者從用戶(hù)的角度進(jìn)行常規(guī)設(shè)置的環(huán)境下運(yùn)行的。Beta測(cè)試是在一個(gè)或多個(gè)客戶(hù)的現(xiàn)場(chǎng)由該軟件的最終用戶(hù)實(shí)施的。與Alpha測(cè)試不同的是,Beta測(cè)試時(shí)開(kāi)發(fā)者通常是不在場(chǎng)的。Alpha測(cè)試和Beta測(cè)試除了進(jìn)一步發(fā)現(xiàn)程序中的錯(cuò)誤外,還能發(fā)現(xiàn)使用上的問(wèn)題。經(jīng)過(guò)確認(rèn)測(cè)試后的軟件通常就可交付使用了。
文章責(zé)編:ak47
看了本文的網(wǎng)友還看了