freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

外文資料翻譯軟件測(cè)試的藝術(shù)畢業(yè)論文(編輯修改稿)

2024-07-19 20:56 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 調(diào)試。 代碼檢查與走查已經(jīng)廣泛運(yùn)用了很長(zhǎng)時(shí)間。我們認(rèn)為,它們的成功與本書第2章所述的一些原則有關(guān)。 在代碼走查中,一組開發(fā)人員(三至四人為最佳)對(duì)代碼進(jìn)行審核。參加者當(dāng)中只有一個(gè)人是程序編寫者。因此,軟件測(cè)試的主要工作是有其他人,而不是軟件編寫者本人來(lái)完成,這符合“軟件編寫者往往不能有效地測(cè)試自己編寫的軟件”的測(cè)試原則。 代碼檢查與走查是對(duì)過(guò)去桌面檢查過(guò)程(在提交測(cè)試前由程序員閱讀自己程序的過(guò)程)的改進(jìn)。與原方法相比,代碼檢查與走查更為有效,同樣是因?yàn)樵趯?shí)施過(guò)程中,除了軟件編寫者本人,還有其他人參與進(jìn)來(lái)。 菜嗎走查的另一個(gè)有點(diǎn)在于,一旦發(fā)現(xiàn)錯(cuò)誤,通常就能在代碼中對(duì)其進(jìn)行精確定位,這就是降低了調(diào)試(錯(cuò)誤修改)的成本。另外,這個(gè)過(guò)程通常發(fā)現(xiàn)成批的錯(cuò)誤,這樣錯(cuò)誤就可以一同得到修改。而基于計(jì)算機(jī)的測(cè)試通常只能暴露出錯(cuò)誤的某個(gè)表征(程序不能停止,或打印出了一個(gè)無(wú)意義的結(jié)束),錯(cuò)誤通常是逐個(gè)地被發(fā)現(xiàn)并的得到糾正的。 在典型的程序中,這些方法通常會(huì)有效地查找出30%~70%的邏輯設(shè)計(jì)和編碼錯(cuò)誤。但是,這些方法不能有效地查找出高層次的設(shè)計(jì)錯(cuò)誤,例如在軟件需要分析階段的錯(cuò)誤。請(qǐng)注意,所謂30%~70%的錯(cuò)誤發(fā)現(xiàn)率,并不是說(shuō)所有錯(cuò)誤中多達(dá)70%可能會(huì)被找出來(lái),而是講這些方法在測(cè)試過(guò)程結(jié)束時(shí)可以有效地查找出多大70%的已知錯(cuò)誤。請(qǐng)記住,地2章告訴我們,程序中的錯(cuò)誤總數(shù)始終是未知的。 當(dāng)然,可能存在對(duì)這些統(tǒng)計(jì)數(shù)字的批評(píng),即人工方法只能發(fā)現(xiàn)“簡(jiǎn)單”的錯(cuò)誤(即與基于計(jì)算機(jī)的測(cè)試方法相對(duì)比,所發(fā)現(xiàn)的問(wèn)題顯得微不足道),而困難的、不明顯的或微妙的錯(cuò)誤只能用于計(jì)算機(jī)的測(cè)試方法才能找到。然而,一些測(cè)試人員在使用了人工方法之后發(fā)現(xiàn),對(duì)于某些特定的錯(cuò)誤,人工方法比基于計(jì)算機(jī)的方法更有效,而對(duì)于其他錯(cuò)誤類型,基于計(jì)算機(jī)的方法更有效。這就意味著,代碼檢查/走查與基于計(jì)算機(jī)的測(cè)試是互補(bǔ)的。缺少其中任何一種,錯(cuò)誤檢查的效率都會(huì)降低。 最后,不但這些測(cè)試過(guò)程對(duì)于測(cè)試新開發(fā)的程序有著不可估量的作用,而且對(duì)于測(cè)試更改后的程序,這些測(cè)試過(guò)程具有相同的作用,甚至更大。根據(jù)我們的經(jīng)驗(yàn),修改一個(gè)現(xiàn)存的程序比編寫一個(gè)新程序更容易產(chǎn)生錯(cuò)誤(以每寫一行代碼測(cè)錯(cuò)誤數(shù)量計(jì))。因此,出來(lái)回歸測(cè)試方法之外,更改后的程序還要進(jìn)行這些人工方法的測(cè)試。 代碼檢查 所謂代碼檢查,是以組為單位閱讀代碼,它是一些列規(guī)程和錯(cuò)誤檢查技術(shù)的集合。對(duì)代碼檢查的大多數(shù)討論都集中在規(guī)程,所要填寫的表格等。這里對(duì)整個(gè)規(guī)程進(jìn)行簡(jiǎn)短的概述,之后我們將重點(diǎn)討論實(shí)際的錯(cuò)誤檢查技術(shù)。一個(gè)代碼檢查小組通常由四人組成,其中一個(gè)人發(fā)揮著協(xié)調(diào)作用。協(xié)調(diào)人應(yīng)該是個(gè)職稱的程序員,但不是該程序的編碼人員,不需要對(duì)程序的細(xì)節(jié)了解的很清楚,協(xié)調(diào)人的職責(zé)包括以下幾點(diǎn):u 為代碼檢查分發(fā)材料、安排進(jìn)程。u 在代碼檢查中起主導(dǎo)作用。u 紀(jì)錄發(fā)現(xiàn)的所有錯(cuò)誤。u 確保所有錯(cuò)誤隨后得到改正。協(xié)調(diào)人就像是質(zhì)量控制工程師。小組中的第二個(gè)成員是該程序的編碼人員。小組中的其他成員通常是程序的設(shè)計(jì)人員(如果設(shè)計(jì)人員不同于編碼人員的話),以及一名測(cè)試專家。 在代碼檢查之前的幾天,協(xié)調(diào)人將程序清單和設(shè)計(jì)規(guī)范分發(fā)給其他成員。所有成員應(yīng)在檢查之前熟悉這些材料。在檢查進(jìn)行時(shí),主要進(jìn)行兩項(xiàng)活動(dòng):1.由程序編碼人員逐條語(yǔ)句講述程序的邏輯結(jié)構(gòu)。在講述的過(guò)程中,小組其他成員應(yīng)提問(wèn)題、判斷是否存在錯(cuò)誤。在講述中、很可能是程序編碼人員本人而不是其他小組成員發(fā)現(xiàn)了大部分錯(cuò)誤。換句話說(shuō),對(duì)著大家大聲朗讀程序,這種簡(jiǎn)單的做法看來(lái)是一個(gè)非常有效的錯(cuò)誤檢查方法。 (該列表將在下一節(jié)中介紹) 協(xié)調(diào)人負(fù)責(zé)確保檢查回憶的討論高效地進(jìn)行、每個(gè)參與者都將注意力集中于查找錯(cuò)誤而不是修改錯(cuò)誤(錯(cuò)誤的修改正由程序員在檢查會(huì)議之后完成)。 會(huì)議結(jié)束之后,程序員會(huì)得到一份已發(fā)現(xiàn)錯(cuò)誤的清單。如果發(fā)現(xiàn)的錯(cuò)誤太多,或者某個(gè)錯(cuò)誤涉及對(duì)程序做根本的改動(dòng),協(xié)調(diào)人可能會(huì)在錯(cuò)誤修改后安排對(duì)程序進(jìn)行再次檢查。這份錯(cuò)誤清單也要進(jìn)行分析、歸納,用以提煉錯(cuò)誤列表,以便提高以后代碼檢查的效率。 如上所述,這個(gè)代碼檢查過(guò)程通常將注意力集中在發(fā)現(xiàn)錯(cuò)誤上,而不是糾正錯(cuò)誤。然而,有些小組可能會(huì)發(fā)現(xiàn),當(dāng)檢查出某個(gè)小問(wèn)題之后,有兩三個(gè)人(包括負(fù)責(zé)該代碼的程序本人)會(huì)建議對(duì)設(shè)計(jì)進(jìn)行明顯的修補(bǔ)以解決這個(gè)特例。那么,對(duì)這個(gè)小問(wèn)題的討論,反過(guò)來(lái)會(huì)將整個(gè)小組的注意力集中在設(shè)計(jì)的某個(gè)部分。在探討修補(bǔ)設(shè)計(jì)來(lái)解決這個(gè)小問(wèn)題的最佳方法時(shí),有人可能會(huì)注意到另外的問(wèn)題。既然小組已經(jīng)發(fā)現(xiàn)了設(shè)計(jì)中同一部分的兩個(gè)相關(guān)問(wèn)題,那么每隔幾段代碼就可能需要密集的注釋。幾分鐘之內(nèi),整個(gè)設(shè)計(jì)就被徹底檢查完,任何問(wèn)題都會(huì)一目了然。 在代碼檢查的時(shí)間及地點(diǎn)的選擇上,應(yīng)避免所有的外部干擾。代碼檢查會(huì)議的理想時(shí)間應(yīng)在90~120分鐘之間。由于開會(huì)是一項(xiàng)繁重的腦力勞動(dòng),會(huì)議時(shí)間越長(zhǎng)效率越低。大多數(shù)的代碼檢查是都是按每小時(shí)大約閱讀150行代碼的數(shù)度進(jìn)行。因此,對(duì)大型軟件的檢查應(yīng)安排多個(gè)代碼檢查會(huì)議同時(shí)進(jìn)行,每個(gè)代碼檢查會(huì)議處理一個(gè)或幾個(gè)模塊或子程序。 請(qǐng)注意,要是檢查過(guò)程有效,必須樹立正確的態(tài)度。如果宣傳員將代碼檢查視為對(duì)其人格的攻擊、采取了防范的態(tài)度,那么檢查過(guò)程就不會(huì)有效果。正確的做法是,程序員必須懷著非自我本位的態(tài)度來(lái)對(duì)待檢查過(guò)程,對(duì)整個(gè)過(guò)程采取積極和建設(shè)性的態(tài)度:代碼檢查的目標(biāo)是發(fā)現(xiàn)程序中的錯(cuò)誤,從而改進(jìn)軟件的質(zhì)量。正是因?yàn)檫@個(gè)原因,大多數(shù)人建議應(yīng)對(duì)代碼檢查的結(jié)果進(jìn)行保密,僅限于參與者范圍內(nèi)部。尤其是如果管理人員想利用代碼檢查結(jié)果,那么就與檢查過(guò)程的目的背道而馳了。 出了可以發(fā)現(xiàn)錯(cuò)誤這個(gè)主要作用之外,代碼檢查還有幾個(gè)有益的附帶作用。其一,程序員通常會(huì)得到編程風(fēng)格、算法選擇及編程技術(shù)等方面的反饋信息 。其他參與者也可以通過(guò)接觸其他程序員的錯(cuò)誤和編程風(fēng)格而同樣受益匪淺。還有,代碼檢查還是早期發(fā)現(xiàn)程序中最容易出錯(cuò)部分的方法之一,有助于在基于計(jì)算機(jī)的測(cè)試過(guò)程中將更多的注意力集中在這些地方(本書地2章中的測(cè)試原則之一)。 用于代碼檢查的錯(cuò)誤列表 代碼檢查過(guò)程的一個(gè)重要部分就是對(duì)照一份錯(cuò)誤列表,來(lái)檢查程序發(fā)、是否存在常見錯(cuò)誤。遺憾的是,有些錯(cuò)誤列表更多地注重編程風(fēng)格而不是錯(cuò)誤(例如,“注釋是否準(zhǔn)確且有意義?”,“IF—ELSE代碼段和DO—WHILE代碼段是否縮進(jìn)對(duì)齊?”),錯(cuò)誤檢查太過(guò)模糊而實(shí)際上沒(méi)有用(例如,“代碼是否滿足設(shè)計(jì)的需求?”)。本節(jié)鎮(zhèn)南關(guān)討論的錯(cuò)誤列表是經(jīng)多年對(duì)軟件錯(cuò)誤的研究編輯而成的。該錯(cuò)誤列表在很大程度上是獨(dú)立于編程的,也就是說(shuō),大多數(shù)的錯(cuò)誤都可能出現(xiàn)在任意語(yǔ)言編寫的程序中。讀者可以把自己使用的編程語(yǔ)言中特有的錯(cuò)誤,以及代碼檢查發(fā)現(xiàn)的錯(cuò)誤補(bǔ)充到這份錯(cuò)誤列表中去。 數(shù)據(jù)引用錯(cuò)誤1. 是否有引用的變量未賦值或未初始化?這可能是最常見的編程錯(cuò)誤,在各種環(huán)境中都可能發(fā)生。在引用每個(gè)數(shù)據(jù)項(xiàng)(如變量、數(shù)據(jù)元素、結(jié)構(gòu)中的域)時(shí),應(yīng)試圖非正式地“證明”該數(shù)據(jù)項(xiàng)在當(dāng)前位置具有確定的值。2. 對(duì)于所有的數(shù)組引用,是否每一個(gè)下標(biāo)的值都在相應(yīng)維規(guī)定的界限內(nèi)?3. 對(duì)于所有的數(shù)組的引用,是否每個(gè)下標(biāo)的值都是整數(shù)?雖然在某些語(yǔ)言中這不是錯(cuò)誤,但這樣做是危險(xiǎn)的。4.對(duì)于所有的通過(guò)指針或引用變量的引用,當(dāng)前引用的內(nèi)存單元是否分配?這就是所謂的“虛調(diào)度(dangling reference)”錯(cuò)誤。當(dāng)指針的生命期大于所引用內(nèi)存單元的生命期時(shí),錯(cuò)誤就會(huì)發(fā)生。當(dāng)指針引用了過(guò)程中的一個(gè)局部變量,而指針的值有被賦給一個(gè)輸出參數(shù)或一個(gè)全局變量,過(guò)程返回(釋放了引用的內(nèi)存單元)結(jié)束,爾后程序試圖使用指針的值時(shí),這種錯(cuò)誤就會(huì)發(fā)生。與前面檢查的方法類似,應(yīng)試圖非正式地“證明”,對(duì)于每個(gè)使用指針值的引用,引用的內(nèi)存單元都存在。,當(dāng)通過(guò)別名進(jìn)行引用時(shí),內(nèi)存域中的數(shù)據(jù)值是否具有正確的屬性?在FORTRAN語(yǔ)言中對(duì)EQUIVALENCE語(yǔ)句而成為同一內(nèi)存域的別名。如果程序先對(duì)A賦值,然后又引用變量B,由于機(jī)器可能會(huì)將內(nèi)存中用浮點(diǎn)位表示的實(shí)數(shù)當(dāng)作整數(shù),在這種情況下錯(cuò)誤就可能發(fā)生。?當(dāng)C、C++或COBOL程序?qū)⒛硞€(gè)記錄讀到內(nèi)存中,并使用一個(gè)結(jié)構(gòu)來(lái)引用它時(shí),由于記錄的物理表示與結(jié)構(gòu)定義在差異,這種情況下錯(cuò)誤就可能發(fā)生。,當(dāng)內(nèi)存分配的單元小于內(nèi)存可尋址的單元大小時(shí),是否存在直接或間接的尋址錯(cuò)誤?例如,在某些條件下,定長(zhǎng)的位串不必以字節(jié)邊界為起點(diǎn),但是地址又總是指向字節(jié)邊界的。如果程序計(jì)算一個(gè)位串的地址,稍后又通過(guò)該地址引用這個(gè)位串,可能會(huì)指向錯(cuò)誤的內(nèi)存位置。將一個(gè)位串參數(shù)傳送給一個(gè)子程序時(shí),也可能發(fā)生這種情況。,被引用的內(nèi)存的屬性是否編譯所預(yù)期的一致?這種錯(cuò)誤的一個(gè)例子是,當(dāng)一個(gè)指向某個(gè)數(shù)據(jù)結(jié)構(gòu)的C++指針,被賦值為另為的數(shù)據(jù)結(jié)構(gòu)的地址。,那么每個(gè)過(guò)程或子程序?qū)υ搨€(gè)、結(jié)果的定義是否都相同?,當(dāng)對(duì)數(shù)組進(jìn)行索引操作或下標(biāo)引用,字符的邊界取值是否有“僅差一個(gè)”(off—by—one)的錯(cuò)誤?,是否所有的繼承需求都在實(shí)現(xiàn)類中得到了滿足? 數(shù)據(jù)申明錯(cuò)誤1. 是否所有的變量都進(jìn)行了明確的聲明?沒(méi)有明確聲明雖然不一定是錯(cuò)誤,但通常卻是麻煩的源頭。舉例來(lái)說(shuō),如果一個(gè)程序的子程序接收一個(gè)數(shù)組參數(shù),卻未將該參數(shù)定義為數(shù)組(如用DIMENSION 語(yǔ)句),對(duì)該數(shù)組的引用(如C=A (I))會(huì)被解釋為一個(gè)函數(shù)調(diào)用,導(dǎo)致計(jì)算機(jī)試圖將此數(shù)組當(dāng)作程序執(zhí)行。另外,如果某個(gè)變量在一個(gè)內(nèi)部過(guò)程或程序壞中沒(méi)有明確聲明,是否可以理解為該變量在這個(gè)程序塊中被共用?2. 如果變量所有的屬性在聲明中沒(méi)有明確說(shuō)明,那么說(shuō)明默認(rèn)的屬性能否被正確理解?舉例來(lái)說(shuō),在JAVA語(yǔ)言中,程序接收到的惡魔人屬性往往是導(dǎo)致意外發(fā)生的源頭。3. 如果變量在聲明語(yǔ)句中被初始化,那么它的初始化是否正確?在很多語(yǔ)言中,數(shù)組和字符串的初始化比較復(fù)雜,因此也成為容易錯(cuò)誤的地方。4. 是否每個(gè)變量都被賦予了正確的長(zhǎng)度和數(shù)據(jù)類型?5. 變量的初始化是否與其存儲(chǔ)空間的類型一致?舉例來(lái)說(shuō),如果FORTRAN語(yǔ)言子程序中的一個(gè)變量在每次調(diào)用子程序時(shí)都需要重新初始化一次,那么必須使用賦值語(yǔ)句對(duì)其初始化,而不應(yīng)該用DATA語(yǔ)句。6. 是否存在著相似名稱的變量(如VOLT和VOLTS)?這種情況不一定是錯(cuò)誤、但應(yīng)被視為警告,這些名稱可能會(huì)在程序中發(fā)生混淆。 運(yùn)算錯(cuò)誤1. 是否存在不一致的數(shù)據(jù)類型(如非算術(shù)類型)的變量的運(yùn)算?2. 是否有混合模式的運(yùn)算?例如,將浮點(diǎn)變量與一個(gè)整形變量做加法運(yùn)算。這種情況并不一定是錯(cuò)誤,但應(yīng)該謹(jǐn)慎使用,確保程序語(yǔ)言的轉(zhuǎn)換規(guī)則能夠被正確理解。卡看下面的JAVA程序片段,顯示了整數(shù)運(yùn)算中可能發(fā)生的取整誤差:int x = 1。int y = 2。int z = 0。z = x/y。(“z = “+ z)。Output。Z = 0。3. 是否有相同數(shù)據(jù)類型、不同字長(zhǎng)變量間的運(yùn)算?4.賦值語(yǔ)句的目標(biāo)變量的數(shù)據(jù)類型是否小于右邊表達(dá)的數(shù)據(jù)類型或結(jié)果?5. 在表達(dá)式的運(yùn)算中是否存在表達(dá)向上或向下溢出的情況?也就是說(shuō),最終的結(jié)果看以來(lái)是個(gè)有效的值、但中間結(jié)果對(duì)于編程 語(yǔ)言的數(shù)據(jù)類型可能過(guò)大或過(guò)小。6. 除法運(yùn)算中的除數(shù)是否可能為0?7 如果計(jì)算機(jī)表達(dá)變量的基本方式是基于二進(jìn)制的,那么運(yùn)算結(jié)果是否不精確?也就是說(shuō),在一個(gè)二進(jìn)制計(jì)算機(jī)上,10* 。.8. 特定場(chǎng)合,變量的值是否超出了有意義的范圍?例如,對(duì)變量PROBABILITY賦值的語(yǔ)句可能需要進(jìn)行檢查。9. 對(duì)于包含一個(gè)以上操作符的表達(dá)式,賦值順序和操作符的優(yōu)先順序是否正確?10. 整數(shù)的運(yùn)算是否有使用不當(dāng)?shù)那闆r,尤其是除法?舉例來(lái)說(shuō),如果i是一個(gè)整形變量,表達(dá)式2*i/2= =i是否成立,取決于i是奇數(shù)還是偶數(shù),或是先運(yùn)算乘法,還是先運(yùn)算除法。,例如,將字符串與地址、日期或數(shù)字相比較?,或不同長(zhǎng)度的變量間的比較運(yùn)算?如果有,應(yīng)確保程序能正確理解轉(zhuǎn)換規(guī)則。?程序員經(jīng)?;煜爸炼唷薄ⅰ爸辽佟薄ⅰ按笥凇?、“不大于”、“小于”和“等于”等比較關(guān)系。?在編寫涉及“與”、“或”或“非”的表達(dá)式時(shí),測(cè)試員經(jīng)常犯錯(cuò)。?比較運(yùn)算符和布爾運(yùn)算符是否錯(cuò)誤地混在了一起?這是一類經(jīng)常會(huì)犯的錯(cuò)誤,這里我們描述幾個(gè)典型錯(cuò)誤的例子。如果想判斷i是否在2~10之間,表達(dá)式2i 10是不正確的;相反,正確的應(yīng)該是(2 i)amp。amp。( i 10)。如果想判斷i是否大于x或y,表達(dá)式ix||y也是不正確的,正確的應(yīng)該是(ix)||(i)y。如果要比較三個(gè)數(shù)字是否相等,表達(dá)式if(a= =b = = c)的實(shí)際意思卻大相徑庭。如果許啊喲驗(yàn)證數(shù)學(xué)關(guān)系xyz,正確的表達(dá)式應(yīng)該是(xy)amp。amp。(yz)。,是否有二進(jìn)制表示的小數(shù)或浮點(diǎn)數(shù)的比較運(yùn)算?由于四舍五入,以及用二進(jìn)制表示十進(jìn)制數(shù)的近似度,這往往是錯(cuò)誤的根源。,賦值順序以及運(yùn)算的優(yōu)先級(jí)是否正確?也就是說(shuō),如果碰到如同(if ( (a = =2)amp。amp。(b = =2))||(c= = 3))的表達(dá)式,程序能否正確理解是“與”運(yùn)算在先還是“或”運(yùn)算在先??例如,語(yǔ)句if(x = =0 amp。amp。( x/y)z)對(duì)于有的編譯來(lái)說(shuō)是可接受的,因?yàn)槠湔J(rèn)為一旦“與”運(yùn)算的一側(cè)為FALSE時(shí),另一側(cè)就不用計(jì)算;但是對(duì)于其他編譯來(lái)說(shuō),卻可能起一個(gè)被0除的錯(cuò)誤。 控制流錯(cuò)誤 1. 如果測(cè)試包好多條分支路徑,比如有計(jì)算GO TO語(yǔ)句,索引變量的值是否會(huì)大于可能的分支數(shù)量?例如,在語(yǔ)句GO TO (200 ,300,400),i?應(yīng)設(shè)計(jì)一個(gè)非正式的證明或論據(jù)來(lái)證明每一個(gè)循環(huán)打擊都會(huì)終止。、模塊或子程序是否最終終止了?,循環(huán)是否有可能從未執(zhí)行過(guò)?如果確實(shí)發(fā)生這種情況,這里是否是一處疏漏?例如,如果循環(huán)一下的語(yǔ)句作為開頭:For (I = =x。 i=z。i ++){…}While (NOTFOUND){…}當(dāng)NOTFOUND初始時(shí)就為假,或者x大于z時(shí),情況會(huì)如何呢?(如一個(gè)搜索循環(huán)),如果循環(huán)越界(fallthrough)了,后果會(huì)如何?例如,偽指令循環(huán)以 DO I=1 TO TABLESIZE WHILE (NOTFOUND)開頭,如果NOTFOUND永不為假,會(huì)發(fā)生什么結(jié)果呢?6.是否存在“僅差一個(gè)”的錯(cuò)誤,如迭代數(shù)量恰恰多一次或少一次?這在從0開始
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1