軟件工程和開發(fā)技術(shù)第5章 軟件編碼ppt課件_第1頁
軟件工程和開發(fā)技術(shù)第5章 軟件編碼ppt課件_第2頁
軟件工程和開發(fā)技術(shù)第5章 軟件編碼ppt課件_第3頁
軟件工程和開發(fā)技術(shù)第5章 軟件編碼ppt課件_第4頁
軟件工程和開發(fā)技術(shù)第5章 軟件編碼ppt課件_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第5章 軟件編碼 第5章 軟件編碼 5.1 程序設(shè)計(jì)語言程序設(shè)計(jì)語言 5.2 編碼風(fēng)格及軟件效率編碼風(fēng)格及軟件效率 5.3 程序復(fù)雜度的概念及度量方法程序復(fù)雜度的概念及度量方法 5.4 小結(jié)小結(jié) 第5章 軟件編碼 5.1 5.1 程序設(shè)計(jì)語言程序設(shè)計(jì)語言5.1.1 5.1.1 程序設(shè)計(jì)語言的分類程序設(shè)計(jì)語言的分類 隨著計(jì)算機(jī)技術(shù)的發(fā)展,目前已經(jīng)出現(xiàn)了數(shù)百種程序設(shè)計(jì)語隨著計(jì)算機(jī)技術(shù)的發(fā)展,目前已經(jīng)出現(xiàn)了數(shù)百種程序設(shè)計(jì)語言,但被廣泛應(yīng)用的只有幾十種。由于不同種類的語言適用于不言,但被廣泛應(yīng)用的只有幾十種。由于不同種類的語言適用于不同的問題域和系統(tǒng)環(huán)境,因此了解程序設(shè)計(jì)語言的分類可以幫助同的問題域和

2、系統(tǒng)環(huán)境,因此了解程序設(shè)計(jì)語言的分類可以幫助我們選擇出合適的語言。通常可將程序設(shè)計(jì)語言分為面向機(jī)器語我們選擇出合適的語言。通??蓪⒊绦蛟O(shè)計(jì)語言分為面向機(jī)器語言和高級(jí)語言兩大類。言和高級(jí)語言兩大類。第5章 軟件編碼 1. 面向機(jī)器語言 面向機(jī)器語言包括機(jī)器語言(Machine Language)和匯編語言(Assemble Language)兩種。機(jī)器語言是計(jì)算機(jī)系統(tǒng)可以直接識(shí)別的程序設(shè)計(jì)語言。機(jī)器語言程序中的每一條語句實(shí)際上就是一條二進(jìn)制形式的指令代碼,由操作碼和操作數(shù)兩部分組成。由于機(jī)器語言難以記憶和使用,通常不用機(jī)器語言編寫程序。匯編語言是一種符號(hào)語言,它采用了一定的助記符來替代機(jī)器語言中

3、的指令和數(shù)據(jù)。匯編語言程序必須通過匯編系統(tǒng)翻譯成機(jī)器語言程序,才能在計(jì)算機(jī)上運(yùn)行。匯編語言與計(jì)算機(jī)硬件密切相關(guān),其指令系統(tǒng)因機(jī)器型號(hào)的不同而不同。由于匯編語言生產(chǎn)效率低且可維護(hù)性差,所以目前軟件開發(fā)中很少使用匯編語言。第5章 軟件編碼 2. 高級(jí)語言 高級(jí)語言中的語句標(biāo)識(shí)符與人類的自然語言(英文)較為接近,并且采用了人們十分熟悉的十進(jìn)制數(shù)據(jù)表示形式,利于學(xué)習(xí)和掌握。高級(jí)語言的抽象級(jí)別較高,不依賴于實(shí)現(xiàn)它的計(jì)算機(jī)硬件,且編碼效率較高,往往一條高級(jí)語言的語句對(duì)應(yīng)著若干條機(jī)器語言或匯編語言的指令。高級(jí)語言程序需要經(jīng)過編譯或解釋之后,才能生成可在計(jì)算機(jī)上執(zhí)行的機(jī)器語言程序。 高級(jí)語言按其應(yīng)用特點(diǎn)的不同

4、,可分為通用語言和專用語言兩大類。第5章 軟件編碼 1) 通用語言 通用語言是指可用于解決各類問題、可廣泛應(yīng)用于各個(gè)領(lǐng)域的程序設(shè)計(jì)語言。從較早出現(xiàn)的基礎(chǔ)語言Basic、FORTRAN等,到后來出現(xiàn)的結(jié)構(gòu)化語言P、C等,再到現(xiàn)在被廣泛使用的面向?qū)ο笳Z言Visual C、Java等都屬于通用語言的范疇。第5章 軟件編碼 2) 專用語言 專用語言是為了解決某類特殊領(lǐng)域的問題而專門設(shè)計(jì)的具有獨(dú)特語法形式的程序設(shè)計(jì)語言。如專用于解決數(shù)組和向量計(jì)算問題的APL語言;專用于開發(fā)編譯程序和操作系統(tǒng)程序的BLISS語言;專用于處理人工智能領(lǐng)域問題的LISP語言和PROLOG語言等。這些語言的共同特點(diǎn)是可高效地解

5、決本領(lǐng)域的各種問題,但難以應(yīng)用于其他領(lǐng)域。第5章 軟件編碼 6.1.2 6.1.2 程序設(shè)計(jì)語言的特性程序設(shè)計(jì)語言的特性1. 1. 心理特性心理特性 程序體現(xiàn)的是編程者解決問題的思路,不同的人有不同程序體現(xiàn)的是編程者解決問題的思路,不同的人有不同的解題思路,同一個(gè)人在不同心理狀態(tài)下的解題思路往往也的解題思路,同一個(gè)人在不同心理狀態(tài)下的解題思路往往也會(huì)有所不同。所謂程序設(shè)計(jì)語言的心理特性,就是指能夠影會(huì)有所不同。所謂程序設(shè)計(jì)語言的心理特性,就是指能夠影響編程者心理的語言性能。這種影響主要表現(xiàn)在以下幾個(gè)方響編程者心理的語言性能。這種影響主要表現(xiàn)在以下幾個(gè)方面。面。第5章 軟件編碼 1) 歧義性 歧

6、義性指程序設(shè)計(jì)語言中的某些語法形式使不同的人產(chǎn)生不同的理解。如FORTRAN語言中的表達(dá)式x*y*z有人理解為(x*y)*z,有人卻理解為x*(y*z)。當(dāng)然,這只是由于某些人對(duì)語言中某些語法規(guī)則的不了解所導(dǎo)致的,對(duì)于語言編譯系統(tǒng)來說只有確定的一種解釋。第5章 軟件編碼 2) 簡潔性 簡潔性指編程者要使用該語言所必須記住的各種語法規(guī)則(包括語句格式、數(shù)據(jù)類型、運(yùn)算符、函數(shù)定義形式等)的信息量。需記憶的信息量越大,簡潔性越差,人們掌握起來也就越難。但若程序設(shè)計(jì)語言的語法成分太少,過于簡潔,又會(huì)給閱讀程序帶來麻煩,不利于人的理解。因此對(duì)于一個(gè)好的程序設(shè)計(jì)語言來說,既應(yīng)具有一定的簡潔性,又要具有較高

7、的可理解性。第5章 軟件編碼 3) 局部性和順序性 局部性是指語言的聯(lián)想性,即相關(guān)內(nèi)容的相對(duì)集中性。在編程過程中,我們將實(shí)現(xiàn)某一功能的語句集中書寫在一個(gè)模塊中,由模塊組裝成完整的程序,并要求模塊具有高內(nèi)聚、低耦合的特點(diǎn),其目的就是希望加強(qiáng)程序的局部性。順序性指語言的線性特征。例如對(duì)于順序結(jié)構(gòu)的程序人們很容易理解,而如果程序中存在大量的分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),人們理解起來就比較困難了。語言的局部性和順序性是由人類習(xí)慣于用聯(lián)想的方式及按邏輯上的線性序列記憶事物的特性所決定的,局部性和順序性的加強(qiáng)可提高程序的可理解性。第5章 軟件編碼 2. 工程特性1) 可移植性 可移植性反映了程序在不同機(jī)器環(huán)境下的通

8、用性和適應(yīng)性。不同機(jī)器環(huán)境包括不同的機(jī)型、不同的操作系統(tǒng)版本及不同的應(yīng)用軟件包。若一個(gè)程序可不加修改或稍加修改就可以應(yīng)用于不同的機(jī)型、運(yùn)行于高版本的操作系統(tǒng)或集成到不同的應(yīng)用軟件包中,則稱這個(gè)程序具有較高的可移植性。第5章 軟件編碼 2) 語言編譯器的實(shí)現(xiàn)效率 不同語言的編譯器在將源程序代碼翻譯成目標(biāo)代碼的過程中,由于編譯程序設(shè)計(jì)質(zhì)量的不同導(dǎo)致生成的目標(biāo)代碼的大小和執(zhí)行效率不盡相同。為了獲得高效率的目標(biāo)代碼,選擇語言時(shí)應(yīng)充分考慮到語言編譯器的實(shí)現(xiàn)效率。第5章 軟件編碼 3) 開發(fā)工具的支持 為了縮短編碼階段所花費(fèi)的時(shí)間以及提高編碼的質(zhì)量,應(yīng)選擇具有良好開發(fā)工具支持的程序設(shè)計(jì)語言。這些開發(fā)工具主

9、要包括:編譯程序、連接程序、交互式調(diào)試器、交叉編譯器、圖形界面及菜單系統(tǒng)生成程序、宏處理程序等。 4) 可維護(hù)性 程序的維護(hù)是軟件工程活動(dòng)中的一項(xiàng)重要內(nèi)容。為了提高程序的可維護(hù)性,即方便對(duì)源程序的修改,程序中采用的語言必須具有良好的可讀性和易于使用的特點(diǎn)。第5章 軟件編碼 3. 技術(shù)特性 在確定了軟件開發(fā)項(xiàng)目的需求后,根據(jù)項(xiàng)目的特性選擇具有相應(yīng)技術(shù)特性的程序設(shè)計(jì)語言對(duì)保證軟件的質(zhì)量具有非常重要的作用。不同的語言具有不同的技術(shù)特性,例如有的語言提供了豐富的數(shù)據(jù)類型或復(fù)雜的數(shù)據(jù)結(jié)構(gòu);有的語言具有很強(qiáng)的實(shí)時(shí)處理能力;有的語言可方便的實(shí)現(xiàn)大量數(shù)據(jù)的查詢及增、刪、改的功能。根據(jù)語言的技術(shù)特性為項(xiàng)目選擇合

10、適的程序設(shè)計(jì)語言,不但可以使編寫的程序很好地滿足項(xiàng)目的要求,而且對(duì)后期的測(cè)試和維護(hù)工作也是非常有益的。第5章 軟件編碼 5.1.3 5.1.3 程序設(shè)計(jì)語言的選擇程序設(shè)計(jì)語言的選擇 要為待開發(fā)項(xiàng)目選擇合適的程序設(shè)計(jì)語言,應(yīng)充分考慮到要為待開發(fā)項(xiàng)目選擇合適的程序設(shè)計(jì)語言,應(yīng)充分考慮到項(xiàng)目的各種需求,結(jié)合各種語言的心理特性、工程特性、技術(shù)項(xiàng)目的各種需求,結(jié)合各種語言的心理特性、工程特性、技術(shù)特性以及應(yīng)用特點(diǎn),盡量選取實(shí)現(xiàn)效率高且易于理解和維護(hù)的特性以及應(yīng)用特點(diǎn),盡量選取實(shí)現(xiàn)效率高且易于理解和維護(hù)的語言。由于程序設(shè)計(jì)語言的選擇往往會(huì)受到各種實(shí)際因素的制語言。由于程序設(shè)計(jì)語言的選擇往往會(huì)受到各種實(shí)際因

11、素的制約和限制,因此選擇語言時(shí)不能只考慮理論上的標(biāo)準(zhǔn),而是要約和限制,因此選擇語言時(shí)不能只考慮理論上的標(biāo)準(zhǔn),而是要同時(shí)兼顧理論標(biāo)準(zhǔn)和實(shí)用標(biāo)準(zhǔn)。下面分別簡要地對(duì)選擇語言的同時(shí)兼顧理論標(biāo)準(zhǔn)和實(shí)用標(biāo)準(zhǔn)。下面分別簡要地對(duì)選擇語言的主要理論標(biāo)準(zhǔn)和實(shí)用標(biāo)準(zhǔn)進(jìn)行介紹。主要理論標(biāo)準(zhǔn)和實(shí)用標(biāo)準(zhǔn)進(jìn)行介紹。第5章 軟件編碼 1. 理論標(biāo)準(zhǔn) 1) 理想的模塊化機(jī)制、易于閱讀和使用的控制結(jié)構(gòu)及數(shù)據(jù)結(jié)構(gòu) 模塊化、良好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)可以降低編碼工作的難度,增強(qiáng)程序的可理解性,提高程序的可測(cè)試性和可維護(hù)性,從而減少軟件生存周期中的總成本,并縮短軟件開發(fā)所需的時(shí)間。 2) 完善、獨(dú)立的編譯機(jī)制 完善的編譯系統(tǒng)可盡可能多地

12、發(fā)現(xiàn)程序中的錯(cuò)誤,便于程序的調(diào)試和提高軟件的可靠性,并且可以使生成的目標(biāo)代碼緊湊、高效;獨(dú)立的編譯機(jī)制便于程序的開發(fā)、調(diào)試和維護(hù),可以降低軟件開發(fā)和維護(hù)的成本。第5章 軟件編碼 2. 實(shí)用標(biāo)準(zhǔn) 1) 系統(tǒng)用戶的要求 由于用戶是軟件的使用者,因此軟件開發(fā)者應(yīng)充分考慮用戶對(duì)開發(fā)工具的要求。特別是當(dāng)用戶要負(fù)責(zé)軟件的維護(hù)工作時(shí),用戶理所應(yīng)當(dāng)?shù)貢?huì)要求采用他們熟悉的語言進(jìn)行編程。第5章 軟件編碼 2) 工程的規(guī)模 語言系統(tǒng)的選擇與工程的規(guī)模有直接的關(guān)系。例如,F(xiàn)oxpro與Oracal及Sybase都是數(shù)據(jù)庫處理系統(tǒng),但Foxpro僅適用于解決小型數(shù)據(jù)庫問題,而Oracal和Sybase則可用于解決大型數(shù)

13、據(jù)庫問題。特別是在如果工程的規(guī)模非常龐大,并且現(xiàn)有的語言都不能完全適用時(shí),為了提高開發(fā)的效率和質(zhì)量,就可以考慮為這個(gè)工程設(shè)計(jì)一種專用的程序設(shè)計(jì)語言。第5章 軟件編碼 3) 軟件的運(yùn)行環(huán)境 軟件在提交給用戶后,將在用戶的機(jī)器上運(yùn)行,在選擇語言時(shí)應(yīng)充分考慮到用戶運(yùn)行軟件的環(huán)境對(duì)語言的約束。此外,運(yùn)行目標(biāo)系統(tǒng)的環(huán)境中可以提供的編譯程序往往也限制了可以選用的語言的范圍。 4) 可以得到的軟件開發(fā)工具 由于開發(fā)經(jīng)費(fèi)的制約,往往使開發(fā)人員無法任意選擇、購買合適的正版開發(fā)系統(tǒng)軟件。此外,若能選用具有支持該語言程序開發(fā)的軟件工具的程序設(shè)計(jì)語言,則將有利于目標(biāo)系統(tǒng)的實(shí)現(xiàn)和驗(yàn)證。第5章 軟件編碼 5) 軟件開發(fā)人

14、員的知識(shí) 軟件開發(fā)人員采用自己熟悉的語言進(jìn)行開發(fā),可以充分運(yùn)用積累的經(jīng)驗(yàn)使開發(fā)的目標(biāo)程序具有更高的質(zhì)量和運(yùn)行效率,并可以大大縮短編碼階段的時(shí)間。為了能夠根據(jù)具體問題選擇更合適的語言,軟件開發(fā)人員應(yīng)拓寬自己的知識(shí)面,多掌握幾種程序設(shè)計(jì)語言。 6) 軟件的可移植性要求 要使開發(fā)出的軟件能適應(yīng)于不同的軟、硬件環(huán)境,應(yīng)選擇具有較好通用性的、標(biāo)準(zhǔn)化程度高的語言。第5章 軟件編碼 7) 軟件的應(yīng)用領(lǐng)域 任何語言編譯系統(tǒng)設(shè)計(jì)的出發(fā)點(diǎn)都有所不同,其對(duì)某一領(lǐng)域問題的處理能力也就存在較大差異,因此不存在真正適用于任何應(yīng)用領(lǐng)域的語言,通用語言也不例外。如FORTRAN語言最適用于工程科學(xué)計(jì)算,COBOL語言最適用于

15、處理商業(yè)領(lǐng)域中的問題。所以,選擇語言時(shí)一定要充分考慮到軟件的應(yīng)用領(lǐng)域。 在實(shí)際選擇語言時(shí),往往任何一種語言都無法同時(shí)滿足項(xiàng)目的所有需求和各種選擇的標(biāo)準(zhǔn),這時(shí)就需要編程者對(duì)各種需求和標(biāo)準(zhǔn)進(jìn)行權(quán)衡,分清主次,在所有可用的語言中選取最適合的一種進(jìn)行編程。第5章 軟件編碼 5.2 5.2 編碼風(fēng)格及軟件效率編碼風(fēng)格及軟件效率5.2.1 5.2.1 編碼風(fēng)格編碼風(fēng)格 編碼風(fēng)格是指在不影響程序正確性和效率的前提下,有效編碼風(fēng)格是指在不影響程序正確性和效率的前提下,有效編排和合理組織程序的基本原則。一個(gè)具有良好編碼風(fēng)格的程編排和合理組織程序的基本原則。一個(gè)具有良好編碼風(fēng)格的程序主要表現(xiàn)為可讀性好、易測(cè)試、易

16、維護(hù)。由于測(cè)試和維護(hù)階序主要表現(xiàn)為可讀性好、易測(cè)試、易維護(hù)。由于測(cè)試和維護(hù)階段的費(fèi)用在軟件開發(fā)總成本中所占比例很大,因此編碼風(fēng)格的段的費(fèi)用在軟件開發(fā)總成本中所占比例很大,因此編碼風(fēng)格的好壞直接影響著整個(gè)軟件開發(fā)中成本耗費(fèi)的多少。特別是在需好壞直接影響著整個(gè)軟件開發(fā)中成本耗費(fèi)的多少。特別是在需要團(tuán)隊(duì)合作開發(fā)大型軟件的時(shí)候,編碼風(fēng)格顯得尤為重要。若要團(tuán)隊(duì)合作開發(fā)大型軟件的時(shí)候,編碼風(fēng)格顯得尤為重要。若團(tuán)隊(duì)中的成員不注重自己的編碼風(fēng)格,則會(huì)嚴(yán)重影響與其他成團(tuán)隊(duì)中的成員不注重自己的編碼風(fēng)格,則會(huì)嚴(yán)重影響與其他成員的合作和溝通,最終將可能導(dǎo)致軟件質(zhì)量上出現(xiàn)問題。員的合作和溝通,最終將可能導(dǎo)致軟件質(zhì)量上出

17、現(xiàn)問題。第5章 軟件編碼 1. 內(nèi)部文檔 所謂內(nèi)部文檔,是指程序中的說明性注釋信息。在程序中加入注釋信息的目的是為了提高程序的可讀性,為程序的測(cè)試和維護(hù)帶來方便。幾乎所有的程序設(shè)計(jì)語言中都提供了專用于書寫注釋信息的注釋語句。為了使程序易于閱讀和修改,應(yīng)在必要的地方加上相應(yīng)的注釋。在修改程序時(shí),不要忘記對(duì)相應(yīng)的注釋也要進(jìn)行修改。 程序中的注釋一般可按其用途分為兩類:序言性注釋和描述性注釋。第5章 軟件編碼 1) 序言性注釋 序言性注釋一般位于模塊的首部,用于說明模塊的相關(guān)信息。主要包括:對(duì)模塊的功能、用途進(jìn)行簡要說明;對(duì)模塊的界面進(jìn)行描述,如調(diào)用語句的格式、各個(gè)參數(shù)的作用及需調(diào)用的下級(jí)模塊的清單

18、等;對(duì)模塊的開發(fā)歷史進(jìn)行介紹,如模塊編寫者的資料、模塊審核者的資料及建立、修改的時(shí)間等;對(duì)模塊的輸入數(shù)據(jù)或輸出數(shù)據(jù)進(jìn)行說明,如數(shù)據(jù)的格式、類型及含義等。第5章 軟件編碼 2) 描述性注釋 描述性注釋位于源程序模塊內(nèi)部,用于對(duì)某些難以理解的語句段的功能或某些重要的標(biāo)識(shí)符的用途等進(jìn)行說明。通過在程序中加入恰當(dāng)?shù)拿枋鲂宰⑨尶梢源蟠筇岣叱绦虻目勺x性和可理解性,對(duì)語句的注釋應(yīng)緊跟在被說明語句之后書寫。需要注意的是,并不是對(duì)所有程序中的語句都要進(jìn)行注釋,太多不必要的注釋反而會(huì)影響人們對(duì)程序的閱讀。第5章 軟件編碼 2. 標(biāo)識(shí)符的命名及說明 編寫程序必然要使用標(biāo)識(shí)符,特別是對(duì)于大型程序,使用的標(biāo)識(shí)符可能成千

19、上萬。由于對(duì)程序中的標(biāo)識(shí)符作用的正確理解是讀懂程序的前提,因此若編程者隨心所欲地進(jìn)行標(biāo)識(shí)符的命名和說明,可能就會(huì)給閱讀程序帶來麻煩。 1) 標(biāo)識(shí)符的命名 為了便于閱讀程序時(shí)對(duì)標(biāo)識(shí)符作用進(jìn)行正確的理解,標(biāo)識(shí)符的命名應(yīng)注意以下幾個(gè)問題:第5章 軟件編碼 (1) 選用具有實(shí)際含義的標(biāo)識(shí)符,如用于存放年齡的變量名最好取age,用于存放學(xué)生信息的數(shù)組名最好取student。若標(biāo)識(shí)符由多個(gè)單詞構(gòu)成,則每個(gè)單詞的第一個(gè)字母最好采用大寫或單詞間用下劃線分隔,以利于對(duì)標(biāo)識(shí)符含義的理解。 (2) 為了便于程序的輸入,標(biāo)識(shí)符的名字不宜過長,通常不要超過八個(gè)字符。特別是對(duì)于那些對(duì)標(biāo)識(shí)符長度有限制的語言編譯系統(tǒng)來說,取

20、過長的標(biāo)識(shí)符名沒有任何的意義。如在FORTRAN 77中,通常編譯系統(tǒng)可以區(qū)分的標(biāo)識(shí)符長度不超過六個(gè)字符。 (3) 為了便于區(qū)分,不同的標(biāo)識(shí)符不要取過于相似的名字。如student和students,很容易在使用或閱讀時(shí)產(chǎn)生混淆。第5章 軟件編碼 2) 標(biāo)識(shí)符的說明 由于程序中通常需要使用大量不同類型的標(biāo)識(shí)符,為了使說明部分閱讀起來更加清晰,在對(duì)其進(jìn)行類型說明時(shí)應(yīng)注意以下幾點(diǎn): (1) 應(yīng)按照某種順序分別對(duì)各種類型的變量進(jìn)行集中說明,如:先說明簡單類型,再說明指針類型,再說明記錄類型;對(duì)簡單類型的變量進(jìn)行說明時(shí),可先說明整型,再說明實(shí)型,再說明字符型等等。 (2) 在使用一個(gè)說明語句對(duì)同一類型

21、的多個(gè)變量進(jìn)行說明時(shí),應(yīng)按照變量名中的字母順序(az)對(duì)其進(jìn)行排列。第5章 軟件編碼 3. 語句的構(gòu)造及書寫 語句是構(gòu)成程序的基本單位,語句的構(gòu)造方式和書寫格式對(duì)程序的可讀性具有非常重要的決定作用。 1) 語句構(gòu)造 (1) 語句應(yīng)簡單直接,避免使用華而不實(shí)的程序設(shè)計(jì)技巧。如為了求出x、y兩個(gè)數(shù)中的較大數(shù),以下兩個(gè)C語句均可實(shí)現(xiàn):方法一: max=(x+y+abs(xy)/2; 方法二: max=(xy)?x:y;顯然,方法二的可讀性要比方法一好得多。第5章 軟件編碼 (2) 對(duì)復(fù)雜的表達(dá)式應(yīng)加上必要的括號(hào)使表達(dá)更加清晰。如C語言中判斷閏年的表達(dá)式若寫為(year % 400 = = 0) |(

22、year % 4 = = 0 & year %100 != 0)則比不加括號(hào)時(shí)看起來清晰得多。 (3) 由于人的一般思維方式對(duì)邏輯非運(yùn)算不太適應(yīng),因此在條件表達(dá)式中應(yīng)盡量不使用否定的邏輯表示。如Pascal中的條件表達(dá)式 not(x=5) and (x=10),若表示為(x10)則更加直觀和清晰。第5章 軟件編碼 (4) 為了不破壞結(jié)構(gòu)化程序設(shè)計(jì)中結(jié)構(gòu)的清晰性,在程序中應(yīng)盡量不使用強(qiáng)制轉(zhuǎn)移語句GOTO。 (5) 為了便于程序的理解,不要書寫太復(fù)雜的條件,嵌套的重?cái)?shù)也不宜過多。 (6) 為了縮短程序的代碼,在程序中應(yīng)盡可能地使用編譯系統(tǒng)提供的標(biāo)準(zhǔn)函數(shù)。對(duì)于程序中需要重復(fù)出現(xiàn)的代碼段,應(yīng)將

23、其用獨(dú)立模塊(函數(shù)或過程)實(shí)現(xiàn)。第5章 軟件編碼 2) 書寫格式 為了便于人們對(duì)程序(特別是大型程序)的閱讀,清晰整齊的書寫格式是必不可少的。以下列出了書寫程序時(shí)需注意的幾個(gè)主要問題。 (1) 雖然許多語言都允許在一行上書寫多個(gè)語句,但為了程序看起來更加清楚,最好在一行上只書寫一條語句。 (2) 在書寫語句時(shí),應(yīng)通過采用遞縮式格式使程序的層次更加清晰。 (3) 在模塊之間通過加入空行進(jìn)行分隔。 (4) 為了便于區(qū)分程序中的注釋,最好在注釋段的周圍加上邊框。第5章 軟件編碼 4. 輸入/輸出 由于輸入和輸出是用戶與程序之間傳遞信息的渠道,因此輸入、輸出的方式往往是用戶衡量程序好壞的重要指標(biāo)。為了

24、使程序的輸入、輸出能便于用戶的使用,在編寫程序時(shí)應(yīng)對(duì)輸入和輸出的設(shè)計(jì)格外注意。 1) 輸入 在運(yùn)行程序時(shí),原始數(shù)據(jù)的輸入工作通常要由用戶自己完成。為了使用戶能方便地進(jìn)行數(shù)據(jù)的輸入,應(yīng)注意以下幾點(diǎn):第5章 軟件編碼 (1) 輸入方式應(yīng)力求簡單,盡量避免給用戶帶來不必要的麻煩。如:盡可能采用簡單的輸入格式、盡可能減少用戶的輸入量。當(dāng)程序中對(duì)輸入數(shù)據(jù)的格式需要有嚴(yán)格規(guī)定時(shí),同一程序中的輸入格式應(yīng)盡可能保持一致。 (2) 交互式輸入數(shù)據(jù)時(shí)應(yīng)有必要的提示信息,提示信息可包括:輸入請(qǐng)求、數(shù)據(jù)的格式及可選范圍等。如:“ 請(qǐng)輸入待查職工的編號(hào)(5位數(shù)字 0000199999)”。第5章 軟件編碼 (3) 程序

25、應(yīng)對(duì)輸入數(shù)據(jù)的合法性進(jìn)行檢查。若用戶輸入了非法的數(shù)據(jù),則應(yīng)向用戶輸出相應(yīng)的提示信息,并允許用戶重新輸入正確的信息。例如,月份的正確值只能在112之間,若檢測(cè)輸入的月份超出了這個(gè)范圍,就說明用戶輸入的數(shù)據(jù)非法,此時(shí)應(yīng)輸出出錯(cuò)提示并允許用戶再次輸入。 (4) 若用戶輸入某些數(shù)據(jù)后可能會(huì)產(chǎn)生嚴(yán)重后果,應(yīng)給用戶輸出必要的提示并在必要的時(shí)候要求用戶確認(rèn)。如:“ 清庫會(huì)使庫中原有數(shù)據(jù)全部丟失,真的需要清庫嗎?(Y/N)”第5章 軟件編碼 (5) 當(dāng)需要輸入一批數(shù)據(jù)時(shí),不要以記數(shù)方式控制數(shù)據(jù)的輸入個(gè)數(shù),而應(yīng)以特殊標(biāo)記作為數(shù)據(jù)輸入結(jié)束的標(biāo)志。例如,要輸入一個(gè)班學(xué)生的成績,若要求用戶輸入學(xué)生的總數(shù)并通過總數(shù)來控

26、制輸入數(shù)據(jù)的個(gè)數(shù),無疑就會(huì)增加用戶的麻煩;而若以特殊標(biāo)記來控制數(shù)據(jù)的錄入,如當(dāng)用戶輸入1時(shí)結(jié)束輸入,對(duì)于用戶而言就方便多了。 (6) 應(yīng)根據(jù)系統(tǒng)的特點(diǎn)和用戶的習(xí)慣設(shè)計(jì)出令用戶滿意的輸入方式。第5章 軟件編碼 2) 輸出 用戶需要通過程序的輸出來獲取加工的結(jié)果。為了使用戶能夠清楚地看到需要的結(jié)果,設(shè)計(jì)數(shù)據(jù)輸出方式時(shí)應(yīng)注意以下幾點(diǎn): (1) 輸出數(shù)據(jù)的格式應(yīng)清晰、美觀。如對(duì)大量數(shù)據(jù)采用表格的形式輸出,可以使用戶一目了然。 (2) 輸出數(shù)據(jù)時(shí)要加上必要的提示信息。例如,表格的輸出一定要帶有表頭,用以說明表格中各項(xiàng)數(shù)據(jù)的含義。第5章 軟件編碼 5.2.2 5.2.2 軟件效率軟件效率 軟件的軟件的“高

27、效率高效率”,即用盡可能短的時(shí)間及盡可能少的存儲(chǔ),即用盡可能短的時(shí)間及盡可能少的存儲(chǔ)空間實(shí)現(xiàn)程序要求的所有功能,是程序設(shè)計(jì)追求的主要目標(biāo)之空間實(shí)現(xiàn)程序要求的所有功能,是程序設(shè)計(jì)追求的主要目標(biāo)之一。一個(gè)程序效率的高低取決于多個(gè)方面,主要包括需求分析一。一個(gè)程序效率的高低取決于多個(gè)方面,主要包括需求分析階段模型的生成、設(shè)計(jì)階段算法的選擇和編碼階段語句的實(shí)現(xiàn)。階段模型的生成、設(shè)計(jì)階段算法的選擇和編碼階段語句的實(shí)現(xiàn)。正由于編碼階段在很大程度上影響著軟件的效率,因此在進(jìn)行正由于編碼階段在很大程度上影響著軟件的效率,因此在進(jìn)行編碼時(shí)必須充分考慮程序生成后的效率。軟件效率的高低是一編碼時(shí)必須充分考慮程序生成

28、后的效率。軟件效率的高低是一個(gè)相對(duì)的概念,它與程序的簡單性直接相關(guān),不應(yīng)因過分追求個(gè)相對(duì)的概念,它與程序的簡單性直接相關(guān),不應(yīng)因過分追求高效率而忽視了程序設(shè)計(jì)中的其他要求。一定要遵循高效率而忽視了程序設(shè)計(jì)中的其他要求。一定要遵循“先使程序先使程序正確,再使程序有效率;先使程序清晰,再使程序有效率的正確,再使程序有效率;先使程序清晰,再使程序有效率的準(zhǔn)則。軟件效率的高低應(yīng)以能滿足用戶的需要為主要依據(jù)。在準(zhǔn)則。軟件效率的高低應(yīng)以能滿足用戶的需要為主要依據(jù)。在滿足以上原則的基礎(chǔ)上,可依照下述方法來提高程序的效率。滿足以上原則的基礎(chǔ)上,可依照下述方法來提高程序的效率。第5章 軟件編碼 1. 用于提高運(yùn)

29、行速度的指導(dǎo)原則 為了提高程序的運(yùn)行速度,應(yīng)盡量避免和簡化復(fù)雜的運(yùn)算,為此應(yīng)遵循以下原則: (1) 編寫程序之前,先對(duì)需要使用的算術(shù)表達(dá)式和邏輯表達(dá)式進(jìn)行化簡。 (2) 盡可能多地采用執(zhí)行時(shí)間短的算術(shù)運(yùn)算。 (3) 盡量避免使用多維數(shù)組、指針和其他復(fù)雜的數(shù)據(jù)類型。 (4) 盡量采用整型算術(shù)表達(dá)式和布爾表達(dá)式。第5章 軟件編碼 (5) 盡可能減少循環(huán)體,特別是內(nèi)循環(huán)中語句的個(gè)數(shù)。 (6) 盡量使同一表達(dá)式中的數(shù)據(jù)類型保持統(tǒng)一。需要特別強(qiáng)調(diào)的是,應(yīng)盡量避免不同類型數(shù)據(jù)的比較運(yùn)算,因?yàn)檫@樣有可能導(dǎo)致程序運(yùn)行出錯(cuò)。 (7) 應(yīng)當(dāng)對(duì)所有的輸入和輸出安排適當(dāng)?shù)木彌_區(qū),以減少頻繁通信所帶來的額外開銷。第5章

30、 軟件編碼 2. 2. 用于優(yōu)化存儲(chǔ)空間使用的指導(dǎo)原則用于優(yōu)化存儲(chǔ)空間使用的指導(dǎo)原則 (1) (1) 對(duì)于變動(dòng)頻繁的數(shù)據(jù)最好采用動(dòng)態(tài)存儲(chǔ)。對(duì)于變動(dòng)頻繁的數(shù)據(jù)最好采用動(dòng)態(tài)存儲(chǔ)。 (2) (2) 可根據(jù)需要采用存儲(chǔ)單元共享等節(jié)約空間的技術(shù)。可根據(jù)需要采用存儲(chǔ)單元共享等節(jié)約空間的技術(shù)。 (3) (3) 選用具有緊縮存儲(chǔ)器特性的編譯程序,在必要時(shí)甚至可選用具有緊縮存儲(chǔ)器特性的編譯程序,在必要時(shí)甚至可采用匯編語言。采用匯編語言。 (4) (4) 采用結(jié)構(gòu)化程序設(shè)計(jì),將程序劃分為大小合適的模塊。采用結(jié)構(gòu)化程序設(shè)計(jì),將程序劃分為大小合適的模塊。一個(gè)模塊或若干個(gè)關(guān)系密切的模塊的大小最好與操作系統(tǒng)頁面一個(gè)模塊或

31、若干個(gè)關(guān)系密切的模塊的大小最好與操作系統(tǒng)頁面的容量相匹配,以減少頁面調(diào)度的次數(shù),提高存儲(chǔ)效率。的容量相匹配,以減少頁面調(diào)度的次數(shù),提高存儲(chǔ)效率。第5章 軟件編碼 5.3 5.3 程序復(fù)雜度的概念及度量方法程序復(fù)雜度的概念及度量方法5.3.1 5.3.1 程序圖程序圖 由于程序復(fù)雜度的主要研究對(duì)象是程序結(jié)構(gòu)的清晰性和非由于程序復(fù)雜度的主要研究對(duì)象是程序結(jié)構(gòu)的清晰性和非結(jié)構(gòu)化程度,因此許多程序復(fù)雜度的度量方法需要借助程序圖結(jié)構(gòu)化程度,因此許多程序復(fù)雜度的度量方法需要借助程序圖(Program Graph)(Program Graph)來完成。程序圖實(shí)際上可以看作是一種簡化了來完成。程序圖實(shí)際上可以

32、看作是一種簡化了的程序流程圖。在程序圖中,由于我們關(guān)心的只是程序的流程,的程序流程圖。在程序圖中,由于我們關(guān)心的只是程序的流程,而不關(guān)心各個(gè)處理框的細(xì)節(jié),因此原來程序流程圖中的各個(gè)處而不關(guān)心各個(gè)處理框的細(xì)節(jié),因此原來程序流程圖中的各個(gè)處理框理框( (包括語句框、判斷框、輸入包括語句框、判斷框、輸入/ /輸出框等輸出框等) )都被簡化為結(jié)點(diǎn),都被簡化為結(jié)點(diǎn),一般用圓圈表示,而原來程序流程圖中的帶有箭頭的控制流變一般用圓圈表示,而原來程序流程圖中的帶有箭頭的控制流變成了程序圖中的有向邊。從圖論的觀點(diǎn)看,程序圖是一個(gè)可表成了程序圖中的有向邊。從圖論的觀點(diǎn)看,程序圖是一個(gè)可表示為示為G = NG =

33、E的有向圖。其中,的有向圖。其中,N N表示程序圖中的結(jié)點(diǎn),而表示程序圖中的結(jié)點(diǎn),而E E表示程序圖中的有向邊。表示程序圖中的有向邊。第5章 軟件編碼 圖5.1 幾種基本結(jié)構(gòu)的程序圖(a) 順序結(jié)構(gòu);(b) 分支結(jié)構(gòu);(c) 循環(huán)結(jié)構(gòu)(當(dāng)型和直到型)(a)(b)(c)第5章 軟件編碼 可以看出,程序圖僅僅用于描繪程序內(nèi)部的控制流程,而完全不反映對(duì)數(shù)據(jù)的具體操作以及分支和循環(huán)結(jié)構(gòu)中的判斷條件。由于程序圖舍棄了程序流程圖中不需要的內(nèi)容,從而使畫面更加簡潔,便于實(shí)現(xiàn)對(duì)程序復(fù)雜度的實(shí)際度量。程序圖可以通過簡化程序流程圖得到,也可以由PAD圖或其他詳細(xì)設(shè)計(jì)表達(dá)工具變換獲得。例如,對(duì)圖5.2 (a)所示的

34、程序流程圖進(jìn)行簡化,可得到如圖5.2(b)所示的程序圖。為了便于說明,程序圖中各個(gè)結(jié)點(diǎn)中的標(biāo)記和程序流程圖中相應(yīng)框的標(biāo)記相同。 在程序圖中,開始點(diǎn)后面的那個(gè)結(jié)點(diǎn)稱為入口點(diǎn)(如圖5.2(b)中的a結(jié)點(diǎn)),結(jié)束點(diǎn)前的那個(gè)結(jié)點(diǎn)被稱為出口點(diǎn)(如圖5.2(b)中的h結(jié)點(diǎn))。結(jié)構(gòu)化設(shè)計(jì)的程序通常只有一個(gè)入口點(diǎn)和一個(gè)出口點(diǎn)。第5章 軟件編碼 圖5.2 程序流程圖及導(dǎo)出的程序圖(a) 程序流程圖;(b) 程序圖第5章 軟件編碼 5.3.2 5.3.2 程序復(fù)雜度的度量方法程序復(fù)雜度的度量方法 1. 1. 環(huán)形復(fù)雜度的度量方法環(huán)形復(fù)雜度的度量方法 環(huán)形復(fù)雜度的度量方法又稱為環(huán)形復(fù)雜度的度量方法又稱為McCabe

35、McCabe方法。一個(gè)強(qiáng)連通的方法。一個(gè)強(qiáng)連通的程序圖中線性無關(guān)的有向環(huán)的個(gè)數(shù)就是該程序的環(huán)形復(fù)雜度。程序圖中線性無關(guān)的有向環(huán)的個(gè)數(shù)就是該程序的環(huán)形復(fù)雜度。所謂強(qiáng)連通圖,是指從圖中任意一個(gè)結(jié)點(diǎn)出發(fā)都能到達(dá)圖中其所謂強(qiáng)連通圖,是指從圖中任意一個(gè)結(jié)點(diǎn)出發(fā)都能到達(dá)圖中其他結(jié)點(diǎn)的有向圖。要度量某個(gè)程序的環(huán)形復(fù)雜度,首先需要導(dǎo)他結(jié)點(diǎn)的有向圖。要度量某個(gè)程序的環(huán)形復(fù)雜度,首先需要導(dǎo)出該程序的程序圖,然后通過分析程序圖中線性無關(guān)的有向環(huán)出該程序的程序圖,然后通過分析程序圖中線性無關(guān)的有向環(huán)的個(gè)數(shù)就可以得到此程序的環(huán)形復(fù)雜度。在圖論中,可通過如的個(gè)數(shù)就可以得到此程序的環(huán)形復(fù)雜度。在圖論中,可通過如下公式來計(jì)算

36、一個(gè)強(qiáng)連通的有向圖中線性無關(guān)的有向環(huán)的個(gè)數(shù):下公式來計(jì)算一個(gè)強(qiáng)連通的有向圖中線性無關(guān)的有向環(huán)的個(gè)數(shù):第5章 軟件編碼 V(G)mnp 其中,V(G)表示有向圖G中的線性無關(guān)的環(huán)數(shù);m表示有向圖G中有向邊(弧)的個(gè)數(shù);n表示有向圖中的結(jié)點(diǎn)個(gè)數(shù);p表示有向圖G中可分離出的獨(dú)立連通區(qū)域數(shù)。 由于程序圖通常都是連通的,因此,G中的獨(dú)立連通區(qū)域只有惟一的一個(gè),因此p總是等于1。m和n的值從程序圖中可以方便地得到。現(xiàn)在的關(guān)鍵問題是,程序圖雖然是連通圖,但卻不是強(qiáng)連通圖(圖中靠近入口的結(jié)點(diǎn)可以到達(dá)下面的結(jié)點(diǎn),而靠近出口的結(jié)點(diǎn)往往不能到達(dá)上面的結(jié)點(diǎn))。為了使程序圖能夠滿足圖論中計(jì)算環(huán)形復(fù)雜度公式的要求,可以在

37、程序圖中增加一條從出口點(diǎn)到入口點(diǎn)的虛弧,此時(shí),程序圖就變成了一個(gè)強(qiáng)連通圖。例如對(duì)圖5.2(b)所示的程序圖添加虛弧后,就得到了如圖5.3所示的強(qiáng)連通圖。第5章 軟件編碼 圖5.3 將圖6.2(b)中的程序圖轉(zhuǎn)變?yōu)閺?qiáng)連通圖第5章 軟件編碼 現(xiàn)在用來源于圖論中的公式來計(jì)算圖5.3所示的強(qiáng)連通程序圖的環(huán)形復(fù)雜度,根據(jù)公式可得: V(G)131014 實(shí)質(zhì)上,除了采用上面的公式可以計(jì)算環(huán)形復(fù)雜度的值以外,還可以使用下面兩個(gè)公式來計(jì)算程序圖中的環(huán)形復(fù)雜度。V(G)強(qiáng)連通的程序圖在平面上圍成的區(qū)域數(shù) V(G)判定結(jié)點(diǎn)數(shù)1 第5章 軟件編碼 結(jié)構(gòu)化程序的程序圖總是平面圖,因此均可采用公式來進(jìn)行環(huán)形復(fù)雜度的計(jì)算。圖5.3中,程序圖圍成的區(qū)域有(b,c,d,f,b),(c,d,f,e,c),(g,h,E,g)和(S,a,b,g,E,S),因此,根據(jù)公式可得該程序圖的環(huán)形復(fù)雜度為4。 通過公式可以看出,一個(gè)程序的環(huán)形復(fù)雜度取決于它的程序圖中所包含的判定結(jié)點(diǎn)的個(gè)數(shù)。在圖5.

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論