、邇(nèi)容耦合:內(nèi)容耦合指兩上模塊之間出現(xiàn)了下列情況之一:
一個(gè)模塊訪問另一個(gè)模塊的內(nèi)部數(shù)據(jù);
一個(gè)模塊不通過正常入口轉(zhuǎn)到另一模塊的內(nèi)部;
兩個(gè)模塊有一部分程序代碼重疊;
一個(gè)模塊有多個(gè)入口。
(2)內(nèi)聚
模塊的內(nèi)聚種類通?煞殖7種,下面按內(nèi)聚度從低到高的次序依次作介紹。
①偶然內(nèi)聚:如果一個(gè)模塊完成一組任務(wù),這組任務(wù)彼此間即使有關(guān)系,其關(guān)系也是很松散的,這個(gè)模塊屬于偶然內(nèi)聚。
、谶壿媰(nèi)聚:如果一個(gè)模塊完成邏輯上相關(guān)的一組任務(wù),這個(gè)模塊是邏輯內(nèi)聚的。例如,產(chǎn)生與類型無關(guān)的全部輸出的模塊。
③瞬時(shí)內(nèi)聚(temporal cohesion):如果一個(gè)模塊所包含的任務(wù)必須在同一時(shí)間間隔內(nèi)執(zhí)行,這個(gè)模塊屬于瞬時(shí)內(nèi)聚。例如初始化模塊。
、苓^程內(nèi)聚:如果一個(gè)模塊的處理元素是相關(guān)的,而且必須按特定的次序執(zhí)行,這個(gè)模塊屬于過程內(nèi)聚。
、萃ㄐ艃(nèi)聚:如果一個(gè)模塊的所有處理元素集中在一個(gè)數(shù)據(jù)結(jié)構(gòu)的區(qū)域上,該模塊屬于通信內(nèi)聚。例如,一個(gè)模塊中的所有處理元素使用同一輸入數(shù)據(jù)。
、揄樞騼(nèi)聚:如果一個(gè)模塊的處理元素是相關(guān)的,而且必須順序執(zhí)行,這個(gè)模塊屬于順序內(nèi)聚。
⑦功能內(nèi)聚:如果一個(gè)模塊完成一個(gè)單一的功能,模塊中的各部分在此目標(biāo)下協(xié)同工作,而且都是為完成這一功能而不可缺少的,那么這個(gè)模塊是功能內(nèi)聚的。
5.模塊分解時(shí)應(yīng)遵循的準(zhǔn)則
(1)滿足信息隱蔽原則
。2)盡量使得模塊的內(nèi)聚度高,模塊間的耦合度低。
。3)模塊的大小適中(通常一個(gè)模塊以50~100個(gè)語句行為適宜)。
。4)模塊的調(diào)用深度不宜過大。一個(gè)模塊A可以調(diào)用另一模塊B,模塊B還可調(diào)用模塊C,稱模塊A直接調(diào)用模塊B,模塊A間接調(diào)用模塊C,被間接調(diào)用的模塊還可調(diào)其他模塊,這樣可形成一棵調(diào)用樹,我們把以某個(gè)模塊為根結(jié)點(diǎn)的調(diào)用樹的深度稱為該模塊的調(diào)用深度。
。5)模塊的扇入應(yīng)盡量大,扇出不宜過大。一個(gè)模塊的扇入是指直接調(diào)用該模塊的上級模塊個(gè)數(shù)。一個(gè)模塊的扇出是指該模塊直接調(diào)用的下級模塊的個(gè)數(shù)。扇入大表示模塊的復(fù)用程序高,扇出大表示模塊的復(fù)雜度高。
。6)設(shè)計(jì)單入口和單出口的模塊。
。7)模塊的作用域應(yīng)在控制域之內(nèi)。模塊的作用域是指受該模塊內(nèi)一個(gè)判定影響的所在模塊的集合。模塊的控制域是指該模塊本身以及被該模塊直接或間接調(diào)用的所有模塊的集合。在設(shè)計(jì)時(shí),作用域應(yīng)是控制域的子集,作用域最好是做出判定的模塊本身以及它的直屬下級模塊(直接調(diào)用的模塊)。
(8)模塊的功能應(yīng)是可以預(yù)測的,功能可預(yù)測是指對相同的輸入數(shù)據(jù)能產(chǎn)生相同的輸出。
三、軟件測試
在軟件開發(fā)的一列活動(dòng)中,為了保證軟件的可靠性,人們研究并使用了很多方法進(jìn)行分析、設(shè)計(jì)及編碼實(shí)現(xiàn)。但是由于軟件產(chǎn)品本身無形態(tài),它是復(fù)雜的、知識高度密集的邏輯產(chǎn)品,其中不可能沒有錯(cuò)誤。物理產(chǎn)品在出廠前都要進(jìn)行嚴(yán)格的檢驗(yàn),軟件產(chǎn)品也不例外。軟件開發(fā)總伴隨著軟件質(zhì)量保證的活動(dòng),而軟件測試是主要活動(dòng)之一。軟件測試代表了需求分析、設(shè)計(jì)、編碼的最終復(fù)審。測試是一項(xiàng)很艱苦的工作,其工作量約占軟件開發(fā)總工作量的40%以上,特別對一些關(guān)系到人的生命安全的軟件,共測試成本可能相當(dāng)于開發(fā)階段總成本的3~5倍。
。ㄒ唬 測試的基本概念
1.測試的目的
軟件測試的目的是盡可能多地發(fā)現(xiàn)軟件產(chǎn)品(主要是指程序)中的錯(cuò)誤和缺陷。明確測試的目的是一件非常重要的事,因?yàn)樵诂F(xiàn)實(shí)世界中對測試工作存在著許多模糊或者錯(cuò)誤的看法,這些看法嚴(yán)重影響著測試工作的順利進(jìn)行。有人認(rèn)為測試是為了證明程序是正確的,也就是說程序不再有錯(cuò)誤,事實(shí)證明這是不現(xiàn)實(shí)的。因?yàn)橐ㄟ^測試來發(fā)現(xiàn)程序中的所有錯(cuò)誤就要窮舉所有可能的輸入數(shù)據(jù),檢查它們是否產(chǎn)生正確的結(jié)果。例如,一個(gè)需要3個(gè)16位字長的整型輸入數(shù)據(jù)的程序,輸入數(shù)據(jù)的所有組合情況大約有3×10 14 種,若每組數(shù)據(jù)的測試時(shí)間為1ms,那么即使一年365天,每天24小時(shí)地測試,也大約需要1萬年的時(shí)間。
2.測試用例
要進(jìn)行測試,除了要有測試數(shù)據(jù)(或稱輸入數(shù)據(jù))外,還應(yīng)同時(shí)給出該組測試數(shù)據(jù)應(yīng)該得以怎樣的輸出結(jié)果,我們稱它為預(yù)期結(jié)果。在測試時(shí)將實(shí)際的輸出結(jié)果與預(yù)期結(jié)果比較,若不同則表示發(fā)現(xiàn)了錯(cuò)誤,因此測試用例是由測試數(shù)據(jù)和預(yù)期結(jié)果構(gòu)成的。為了發(fā)現(xiàn)程序中的錯(cuò)誤,應(yīng)竭力設(shè)計(jì)能暴露錯(cuò)誤的測試用例。一個(gè)好的測試用例是極有可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試用例。一次成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試。
希望與更多計(jì)算機(jī)等級考試的網(wǎng)友交流,請進(jìn)入計(jì)算機(jī)等級考試論壇
更多信息請?jiān)L問:考試吧計(jì)算機(jī)等級考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |