《程序編碼》PPT課件.ppt_第1頁(yè)
《程序編碼》PPT課件.ppt_第2頁(yè)
《程序編碼》PPT課件.ppt_第3頁(yè)
《程序編碼》PPT課件.ppt_第4頁(yè)
《程序編碼》PPT課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩99頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、程序編碼,結(jié)構(gòu)化程序設(shè)計(jì) 程序設(shè)計(jì)風(fēng)格 程序效率 程序復(fù)雜性度量,做為軟件工程過(guò)程的一個(gè)階段,程序編碼是設(shè)計(jì)的繼續(xù)。 程序設(shè)計(jì)語(yǔ)言的特性和程序設(shè)計(jì)風(fēng)格會(huì)深刻地影響軟件的質(zhì)量和可維護(hù)性。 為了保證程序編碼的質(zhì)量,程序員必須深刻理解、熟練掌握并正確地運(yùn)用程序設(shè)計(jì)語(yǔ)言的特性。此外,還要求源程序具有良好的結(jié)構(gòu)性和良好的程序設(shè)計(jì)風(fēng)格。,結(jié)構(gòu)化程序設(shè)計(jì),結(jié)構(gòu)化程序設(shè)計(jì)主要包括兩方面: 在編寫(xiě)程序時(shí),強(qiáng)調(diào)使用幾種基本控制結(jié)構(gòu),通過(guò)組合嵌套,形成程序的控制結(jié)構(gòu)。盡可能避免使用GOTO語(yǔ)句。 在程序設(shè)計(jì)過(guò)程中,盡量采用自頂向下和逐步細(xì)化的原則,由粗到細(xì),一步步展開(kāi)。,結(jié)構(gòu)化程序設(shè)計(jì)的主要原則,使用語(yǔ)言中的順序、

2、選擇、重復(fù)等有限的基本控制結(jié)構(gòu)表示程序邏輯。 選用的控制結(jié)構(gòu)只準(zhǔn)許有一個(gè)入口和一個(gè)出口。 程序語(yǔ)句組成容易識(shí)別的塊,每塊只有一個(gè)入口和一個(gè)出口。 復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)進(jìn)行組合嵌套來(lái)實(shí)現(xiàn)。,語(yǔ)言中沒(méi)有的控制結(jié)構(gòu),可用一段等價(jià)的程序段模擬,但要求該程序段在整個(gè)系統(tǒng)中應(yīng)前后一致。 嚴(yán)格控制GOTO語(yǔ)句,僅在下列情形才可使用: 用一個(gè)非結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言去實(shí)現(xiàn)一個(gè)結(jié)構(gòu)化的構(gòu)造。 若不使用GOTO語(yǔ)句就會(huì)使程序功能模糊。 在某種可以改善而不是損害程序可讀性的情況下。,例1 打印A, B, C三數(shù)中最小者程序,程序1 if ( A B ) goto 120; if ( B C ) goto 110

3、; 100 write ( C ); goto 140; 110 write ( B ); goto 140; 120 if ( A C ) goto 130; goto 100; 130 write ( A ); 140 end,程序2 if ( A B ) and ( A C ) then write ( A ) else if ( A B ) and ( B C ) then write ( B ) else write ( C ) endif endif,例2 用二分法求方程 f (x)0 在區(qū)間a.b中的根的程序,假設(shè)在閉區(qū)間a.b上函數(shù) f (x) 有唯一的一個(gè)零點(diǎn),f0 = f

4、(a); f1 = f (b); /程序1 if ( f0 * f1 0 ) x0 = xm; f0 = fm; else x1 = xm; ,finish:printf (“n The root of this equation is %dn”,xm ); 單入口,兩出口 正常出口是循環(huán)達(dá)到 n 次,非正常出口是循環(huán)中途控制轉(zhuǎn)出到標(biāo)號(hào) finish 所在位置 可讀性好,f0 = f (a); f1 = f (b); /程序2 if ( f0 * f1 = 0 ) x0 = a;x1 = b; for ( i = 1;i = n;i+ ) xm = ( x0 x1) / 2;fm = f (x

5、m); if (abs( fm )eps | abs( x1x0 )eps) break; if ( f0 * fm0) x0 = xm;f0 = fm; else x1 = xm; ,f0 = f (a);f1 = f (b); /程序3 if ( f0 * f1 = 0) x0 = a;x1 = b;i = 1;finished = 0; while (i = n i = n; i+ ) for ( j = 1; j = n; j+ ) Vij ( ij ) * ( ji )除法運(yùn)算()在除數(shù)和被除數(shù)都是整型量時(shí),其結(jié)果只取整數(shù)部分,而得到整型量。,當(dāng) ij 時(shí), i / j = 0 當(dāng)

6、ji 時(shí), j / i = 0 得到的數(shù)組 當(dāng)ij時(shí) Vij = ( ij ) * ( ji ) = 0 當(dāng)ij時(shí) Vij = ( ij ) * ( ji ) = 1 這樣得到的結(jié)果 V 是一個(gè)單位矩陣。,寫(xiě)成以下的形式,就能讓讀者直接了解程序編寫(xiě)者的意圖。 for ( i1; i = n; i+ ) for ( j1; j = n; j+ ) if ( i = j ) Vij 1.0; ELSE Vij 0.0;,4. 除非對(duì)效率有特殊的要求, 程序編寫(xiě)要做到清晰第一,效率第二。不要為了追求效率而喪失了清晰性。事實(shí)上,程序效率的提高主要應(yīng)通過(guò)選擇高效的算法來(lái)實(shí)現(xiàn)。 5.首先要保證程序正確,

7、然后才要求提高速度。反過(guò)來(lái)說(shuō),在使程序高速運(yùn)行時(shí),首先要保證它是正確的。,6.避免使用臨時(shí)變量而使可讀性下降。例如,有的程序員為了追求效率,往往喜歡把表達(dá)式 AI1AI; 寫(xiě)成 AIAI; XAI1AI; 這樣將一句分成兩句寫(xiě),會(huì)產(chǎn)生意想不到的問(wèn)題。,7. 讓編譯程序做簡(jiǎn)單的優(yōu)化。 8. 盡可能使用庫(kù)函數(shù) 9. 避免不必要的轉(zhuǎn)移。同時(shí)如果能保持程序可讀性,則不必用 GO TO語(yǔ)句。 例如,有一個(gè)求三個(gè)數(shù)中最小值的程序:,IF ( X Y ) GOTO 30 IF (Y Z) GOTO 50 SMALLZ GOTO 70 30 IF ( X Z)GOTO 60 SMALLZ GOTO 70 50

8、 SMALLY GOTO 70 60 SMALLX 70 CONTINUE,程序只需編寫(xiě)成: smallx; if ( y small ) smally; if ( z small ) smallz; 所以程序應(yīng)當(dāng)簡(jiǎn)單,不必過(guò)于深?yuàn)W, 避免使用GOTO語(yǔ)句繞來(lái)繞去。 10.盡量只采用三種基本的控制結(jié)構(gòu)來(lái)編寫(xiě)程序。除順序結(jié)構(gòu)外,使用 if-then-else來(lái)實(shí)現(xiàn)選擇結(jié)構(gòu);使用 do-until或do-while來(lái)實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。,11. 避免使用空的ELSE語(yǔ)句和IF THEN IF的語(yǔ)句。這種結(jié)構(gòu)容 易使讀者產(chǎn)生誤解。例如, if ( char = a ) if ( char = z ) co

9、ut “This is a letter?!? else cout “This is not a letter?!? 可能產(chǎn)生二義性問(wèn)題。,12.避免采用過(guò)于復(fù)雜的條件測(cè)試。 13.盡量減少使用“否定”條件的條件語(yǔ)句。例如,如果在程序中出現(xiàn) if ( !( char0 | char 9 ) ) 改成 if ( char = 0 & char = 9 ) 不要讓讀者繞彎子想。,14. 盡可能用通俗易懂的偽碼來(lái)描述程序的流程,然后再翻譯成必須使用的語(yǔ)言。 15. 數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡(jiǎn)化。 16. 要模塊化,使模塊功能盡可能單一化,模塊間的耦合能夠清晰可見(jiàn)。 17. 利用信息隱蔽,確保每一個(gè)模塊

10、的獨(dú)立性。,18. 從數(shù)據(jù)出發(fā)去構(gòu)造程序。 19. 不要修補(bǔ)不好的程序,要重新編寫(xiě)。也不要一味地追求代碼的復(fù)用,要重新組織。 20. 對(duì)太大的程序,要分塊編寫(xiě)、測(cè)試,然后再集成。 21. 對(duì)遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使用遞歸過(guò)程。,輸入和輸出,輸入和輸出信息是與用戶(hù)的使用直接相關(guān)的。輸入和輸出的方式和格式應(yīng)當(dāng)盡可能方便用戶(hù)的使用。一定要避免因設(shè)計(jì)不當(dāng)給用戶(hù)帶來(lái)的麻煩。 因此,在軟件需求分析階段和設(shè)計(jì)階段,就應(yīng)基本確定輸入和輸出的風(fēng)格。系統(tǒng)能否被用戶(hù)接受,有時(shí)就取決于輸入和輸出的風(fēng)格。,不論是批處理的輸入輸出方式,還是交互式的輸入輸出方式,在設(shè)計(jì)和編碼時(shí)都應(yīng)考慮下列原則: 1. 對(duì)所有的輸入數(shù)據(jù)都要

11、進(jìn)行檢驗(yàn),識(shí)別錯(cuò)誤的輸入,以保證每個(gè)數(shù)據(jù)的有效性;2. 檢查輸入項(xiàng)的各種重要組合的合理性,必要時(shí)報(bào)告輸入狀態(tài)信息;3. 使得輸入的步驟和操作盡可能簡(jiǎn)單,并保持簡(jiǎn)單的輸入格式;,4. 輸入數(shù)據(jù)時(shí),應(yīng)允許使用自由格式輸入; 5. 應(yīng)允許缺省值; 6. 輸入一批數(shù)據(jù)時(shí),最好使用輸入結(jié)束標(biāo)志,而不要由用戶(hù)指定輸入數(shù)據(jù)數(shù)目; 7. 在交互式輸入輸入時(shí),要在屏幕上使用提示符明確提示交互輸入的請(qǐng)求,指明可使用選擇項(xiàng)的種類(lèi)和取值范圍。同時(shí),在數(shù)據(jù)輸入的過(guò)程中和輸入結(jié)束時(shí),也要在屏幕上給出狀態(tài)信息;,8. 當(dāng)程序設(shè)計(jì)語(yǔ)言對(duì)輸入輸出格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式與輸入語(yǔ)句的要求的一致性;9. 給所有的輸出加注解

12、,并設(shè)計(jì)輸出報(bào)表格式。輸入輸出風(fēng)格還受到許多其它因素的影響。如輸入輸出設(shè)備(例如終端的類(lèi)型,圖形設(shè)備,數(shù)字化轉(zhuǎn)換設(shè)備等)、用戶(hù)的熟練程度、以及通信環(huán)境等。,程序效率,討論效率的準(zhǔn)則程序的效率是指程序的執(zhí)行速度及程序所需占用的內(nèi)存的存儲(chǔ)空間。程序編碼是最后提高運(yùn)行速度和節(jié)省存儲(chǔ)的機(jī)會(huì),因此在此階段不能不考慮程序的效率。讓我們首先明確討論程序效率的幾條準(zhǔn)則,效率是一個(gè)性能要求,應(yīng)當(dāng)在需求分析階段給出。軟件效率以需求為準(zhǔn),不應(yīng)以人力所及為準(zhǔn)。 好的設(shè)計(jì)可以提高效率。 程序的效率與程序的簡(jiǎn)單性相關(guān)。 一般說(shuō)來(lái),任何對(duì)效率無(wú)重要改善,且對(duì)程序的簡(jiǎn)單性、可讀性和正確性不利的程序設(shè)計(jì)方法都是不可取的。,算法

13、對(duì)效率的影響,源程序的效率與詳細(xì)設(shè)計(jì)階段確定的算法的效率直接有關(guān)。在詳細(xì)設(shè)計(jì)翻譯轉(zhuǎn)換成源程序代碼后,算法效率反映為程序的執(zhí)行速度和存儲(chǔ)容量的要求。 設(shè)計(jì)向程序轉(zhuǎn)換過(guò)程中的指導(dǎo)原則:, 在編程序前,盡可能化簡(jiǎn)有關(guān)的算術(shù)表達(dá)式和邏輯表達(dá)式; 仔細(xì)檢查算法中的嵌套的循環(huán),盡可能將某些語(yǔ)句或表達(dá)式移到循環(huán)外面; 盡量避免使用多維數(shù)組; 盡量避免使用指針和復(fù)雜的表; 采用“快速”的算術(shù)運(yùn)算;, 不要混淆數(shù)據(jù)類(lèi)型,避免在表達(dá)式中出現(xiàn)類(lèi)型混雜; 盡量采用整數(shù)算術(shù)表達(dá)式和布爾表達(dá)式; 選用等效的高效率算法; 許多編譯程序具有“優(yōu)化”功能,可以自動(dòng)生成高效率的目標(biāo)代碼。,影響存儲(chǔ)器效率的因素,在大中型計(jì)算機(jī)系統(tǒng)

14、中,存儲(chǔ)限制不再是主要問(wèn)題。在這種環(huán)境下,對(duì)內(nèi)存采取基于操作系統(tǒng)的分頁(yè)功能的虛擬存儲(chǔ)管理。存儲(chǔ)效率與操作系統(tǒng)的分頁(yè)功能直接有關(guān)。,采用結(jié)構(gòu)化程序設(shè)計(jì),將程序功能合理分塊,使每個(gè)模塊或一組密切相關(guān)模塊的程序體積大小與每頁(yè)的容量相匹配,可減少頁(yè)面調(diào)度,減少內(nèi)外存交換,提高存儲(chǔ)效率。,在微型計(jì)算機(jī)系統(tǒng)中,存儲(chǔ)器的容量對(duì)軟件設(shè)計(jì)和編碼的制約很大。因此要選擇可生成較短目標(biāo)代碼且存儲(chǔ)壓縮性能優(yōu)良的編譯程序,有時(shí)需采用匯編程序。 提高存儲(chǔ)器效率的關(guān)鍵是程序的簡(jiǎn)單性。,影響輸入輸出的因素,輸入輸出可分為兩種類(lèi)型: 面向人(操作員)的輸入輸出 面向設(shè)備的輸入輸出 如果操作員能夠十分方便、簡(jiǎn)單地錄入輸入數(shù)據(jù),或者

15、能夠十分直觀、一目了然地了解輸出信息,則可以說(shuō)面向人的輸入輸出是高效的。,關(guān)于面向設(shè)備的輸入/輸出,可以提出一些提高輸入/輸出效率的指導(dǎo)原則: 輸入/輸出的請(qǐng)求應(yīng)當(dāng)最小化; 對(duì)于所有的輸入/輸出操作,安排適當(dāng)?shù)木彌_區(qū),以減少頻繁的信息交換。 對(duì)輔助存儲(chǔ)(例如磁盤(pán)),選擇盡可能簡(jiǎn)單的,可接受的存取方法;,對(duì)輔助存儲(chǔ)的輸入/輸出,應(yīng)當(dāng)成塊傳送; 對(duì)終端或打印機(jī)的輸入/輸出,應(yīng)考慮設(shè)備特性,盡可能改善輸入/輸出的質(zhì)量和速度; 任何不易理解的,對(duì)改善輸入/輸出效果關(guān)系不大的措施都是不可取的; 任何不易理解的所謂“超高效”的輸入/輸出是毫無(wú)價(jià)值的;,程序復(fù)雜性度量,程序復(fù)雜性主要指模塊內(nèi)程序的復(fù)雜性。它

16、直接關(guān)聯(lián)到軟件開(kāi)發(fā)費(fèi)用的多少,開(kāi)發(fā)周期的長(zhǎng)短和軟件內(nèi)部潛伏錯(cuò)誤的多少。 減少程序復(fù)雜性,可提高軟件的簡(jiǎn)單性和可理解性,并使軟件開(kāi)發(fā)費(fèi)用減少,開(kāi)發(fā)周期縮短,軟件內(nèi)部潛藏錯(cuò)誤減少。,復(fù)雜性度量需要滿(mǎn)足的假設(shè),為了度量程序復(fù)雜性,要求: 它可以用來(lái)計(jì)算任何一個(gè)程序的復(fù)雜性; 對(duì)于不合理的程序,例如對(duì)于長(zhǎng)度動(dòng)態(tài)增長(zhǎng)的程序,或者對(duì)于原則上無(wú)法排錯(cuò)的程序,不應(yīng)當(dāng)使用它進(jìn)行復(fù)雜性計(jì)算; 如果程序中指令條數(shù)、附加存儲(chǔ)量、計(jì)算時(shí)間增多,不會(huì)減少程序的復(fù)雜性。,代碼行度量法,源代碼行數(shù)度量法基于兩個(gè)前提: 程序復(fù)雜性隨著程序規(guī)模的增加不均衡地增長(zhǎng); 控制程序規(guī)模的方法最好是采用分而治之的辦法。將一個(gè)大程序分解成若

17、干個(gè)簡(jiǎn)單的可理解的程序段。,方法的基本考慮是統(tǒng)計(jì)一個(gè)程序模塊的源代碼行數(shù)目,并以源代碼行數(shù)做為程序復(fù)雜性的度量。 設(shè)每行代碼的出錯(cuò)率為每100行源程序中可能有的錯(cuò)誤數(shù)目。 Thayer曾指出,程序出錯(cuò)率的估算范圍是從0.047之間,即每100行源程序中可能存在0.047個(gè)錯(cuò)誤。他還指出,每行代碼的出錯(cuò)率與源程序行數(shù)之間不存在簡(jiǎn)單的線性關(guān)系。,Lipow指出,對(duì)于小程序,每行代碼出錯(cuò)率為1.31.8;對(duì)于大程序,每行代碼的出錯(cuò)率增加到2.73.2之間,這只是考慮了程序的可執(zhí)行部分,沒(méi)有包括程序中的說(shuō)明部分。 Lipow及其他研究者得出一個(gè)結(jié)論:對(duì)于少于100個(gè)語(yǔ)句的小程序,源代碼行數(shù)與出錯(cuò)率是線

18、性相關(guān)的。隨著程序的增大,出錯(cuò)率以非線性方式增長(zhǎng)。,McCabe度量法,McCabe度量法,又稱(chēng)環(huán)路復(fù)雜性度量,是一種基于程序控制流的復(fù)雜性度量方法。 它基于一個(gè)程序模塊的程序圖中環(huán)路的個(gè)數(shù),因此計(jì)算它先要畫(huà)出程序圖。 程序圖是退化的程序流程圖。流程圖中每個(gè)處理都退化成一個(gè)結(jié)點(diǎn),流線變成連接不同結(jié)點(diǎn)的有向弧。,程序圖僅描述程序內(nèi)部的控制流程,完全不表現(xiàn)對(duì)數(shù)據(jù)的具體操作,以及分支和循環(huán)的具體條件。 計(jì)算環(huán)路復(fù)雜性的方法:根據(jù)圖論,在一個(gè)強(qiáng)連通的有向圖G中,環(huán)的個(gè)數(shù)由以下公式給出: V(G)mnp其中,V(G)是有向圖G中環(huán)路個(gè)數(shù),m是圖G中弧數(shù),n是圖G中結(jié)點(diǎn)數(shù),p是圖G中的強(qiáng)連通分量個(gè)數(shù)。,M

19、yers建議,對(duì)于復(fù)合判定,例如,(A0)(CD)(XA) 算做三個(gè)判定。 為使圖成為強(qiáng)連通圖,從圖的入口點(diǎn)到出口點(diǎn)加一條用虛線表示的有向邊,使圖成為強(qiáng)連通圖。這樣就可以使用上式計(jì)算環(huán)路復(fù)雜性。 在例示中,結(jié)點(diǎn)數(shù)n11,弧數(shù)m13,p1,則有 V(G)mnp131113. 等于程序圖中弧所封閉的區(qū)域數(shù)。,幾點(diǎn)說(shuō)明,環(huán)路復(fù)雜度取決于程序控制結(jié)構(gòu)的復(fù)雜度。當(dāng)程序的分支數(shù)目或循環(huán)數(shù)目增加時(shí)其復(fù)雜度也增加。環(huán)路復(fù)雜度與程序中覆蓋的路徑條數(shù)有關(guān)。 環(huán)路復(fù)雜度是可加的。例如,模塊A的復(fù)雜度為3,模塊B的復(fù)雜度為 4,則模塊A與模塊B的復(fù)雜度是7。,McCabe建議,對(duì)于復(fù)雜度超過(guò)10的程序,應(yīng)分成幾個(gè)小程

20、序,以減少程序中的錯(cuò)誤。Walsh用實(shí)例證實(shí)了這個(gè)建議的正確性。在McCabe復(fù)雜度為10的附近,存在出錯(cuò)率的間斷躍變。 McCabe環(huán)路復(fù)雜度隱含的前提是:錯(cuò)誤與程序的判定加上例行子程序的調(diào)用數(shù)目成正比。加工復(fù)雜性、數(shù)據(jù)結(jié)構(gòu)、錄入與打亂輸入卡片的錯(cuò)誤可以忽略不計(jì)。,這種度量的缺點(diǎn)是: 對(duì)于不同種類(lèi)的控制流的復(fù)雜性不能區(qū)分 簡(jiǎn)單IF語(yǔ)句與循環(huán)語(yǔ)句的復(fù)雜性同等看待 嵌套IF語(yǔ)句與簡(jiǎn)單CASE語(yǔ)句的復(fù)雜性是一樣的 模塊間接口當(dāng)成一個(gè)簡(jiǎn)單分支一樣處理 一個(gè)具有1000行的順序程序與一行語(yǔ)句的復(fù)雜性相同,Halstead的軟件科學(xué),Halstead軟件科學(xué)研究確定計(jì)算機(jī)軟件開(kāi)發(fā)中的一些定量規(guī)律,它采用

21、以下一組基本的度量值。 這些度量值通常在程序產(chǎn)生之后得出,或者在設(shè)計(jì)完成之后估算出。,程序長(zhǎng)度(預(yù)測(cè)的Halstead長(zhǎng)度)令n1表示程序中不同運(yùn)算符(包括保留字)的個(gè)數(shù),令n2表示程序中不同運(yùn)算對(duì)象的個(gè)數(shù),令H表示“程序長(zhǎng)度”,則有 H=n1log2 n1+n2 log2n2 這里,H是程序長(zhǎng)度的預(yù)測(cè)值,它不等于程序中語(yǔ)句個(gè)數(shù)。,在定義中,運(yùn)算符包括: 算術(shù)運(yùn)算符 賦值符(=或:=) 邏輯運(yùn)算符 分界符(,或;或:) 關(guān)系運(yùn)算符 括號(hào)運(yùn)算符 子程序調(diào)用符 數(shù)組操作符 循環(huán)操作符等。 特別地,成對(duì)的運(yùn)算符,例如 “beginend”、“forto”、 “repeat until”、“while

22、do”、 “ifthenelse”、“()”等都當(dāng) 做單一運(yùn)算符。,運(yùn)算對(duì)象包括變量名和常數(shù)。 實(shí)際的Halstead長(zhǎng)度設(shè)N1為程序中實(shí)際出現(xiàn)的運(yùn)算符總個(gè)數(shù),N2為程序中實(shí)際出現(xiàn)的運(yùn)算對(duì)象總個(gè)數(shù),N為實(shí)際的Halstead長(zhǎng)度,則有 N = N1 + N2,程序的詞匯表Halstead定義程序的詞匯表為不同的運(yùn)算符種類(lèi)數(shù)n1和不同的運(yùn)算對(duì)象種類(lèi)數(shù)n2的總和。若令n為程序的詞匯表,則有 n = n1+n2例如,用FORTRAN語(yǔ)言寫(xiě)出的交換排序的例子 SUBROUTINE SORT ( X, N ) DIMENSION X( N ),IF ( N .LT. 2 ) RETURN DO 20 I

23、=2, N DO 10 J=1, I IF ( X(I) .GE. X(J) ) GO TO 10 SAVE = X(I) X(I) = X(J) X(J) = SAVE10 CONTINUE20 CONTINUE RETURN END,程序量 程序量 V 可用下式得到 V = N log2n 它表明了程序在詞匯上的復(fù)雜性。其最小值為 V* = (2+n2*) log2(2+n2*)V 這里,2表明程序中至少有兩個(gè)運(yùn)算符:賦值符 = 和函數(shù)調(diào)用符 f ( ) ,n2*表示輸入輸出變量個(gè)數(shù)。,對(duì)于上面的例子,利用n1,N1,n2,N2,可以計(jì)算得 H = 10 log210+7 log27 = 52.87 N = 28+22 = 50 V = (28+22) log2(10+7) = 204 等效的匯編語(yǔ)言程序的V328。這說(shuō)明匯編語(yǔ)言比FORTRAN語(yǔ)言需要更多的信息量(以bit表示)。,程序量比率 (語(yǔ)言的抽象級(jí)別) L = V* / V 或 L = (2 / n1)(n2 / N2) 它表明了一個(gè)程序的最緊湊形式的程序量與實(shí)際程序量之比,反映了程序的效率。其倒數(shù) D = 1 / L 表明了實(shí)現(xiàn)算法的困難程度。,程序員工作量 E = V / L 程序的潛在錯(cuò)誤Halstead度量可以用來(lái)預(yù)測(cè)程序中的錯(cuò)誤。預(yù)測(cè)公式為 B = (N1+N2)log2(n1+n2) / 300

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論