第七章 編碼教材_第1頁
第七章 編碼教材_第2頁
第七章 編碼教材_第3頁
第七章 編碼教材_第4頁
第七章 編碼教材_第5頁
已閱讀5頁,還剩115頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章編碼回顧第六章內(nèi)容面向?qū)ο蟮幕靖拍睿幻嫦驅(qū)ο蠓治龅倪^程;面向?qū)ο笤O(shè)計的過程;軟件復用的概念、類型;用戶界面設(shè)計的原則;需求分析問題定義可性行研究計劃時期概要設(shè)計詳細設(shè)計編碼測試開發(fā)時期運行與維護運行時期回顧軟件開發(fā)模型本章內(nèi)容7.1

程序設(shè)計語言7.2

編碼風格7.3

程序效率7.4

編程安全7.5

面向?qū)ο蟪绦蛟O(shè)計步驟7.6

編碼優(yōu)化本章教學目標通過本章學習,使學生了解從提高軟件的質(zhì)量和可維護性的角度出發(fā),在編碼階段所要解決的主要問題。本章重點、難點了解程序設(shè)計語言的特點;掌握編碼風格;了解程序效率;掌握編程安全;了解編碼優(yōu)化;什么是軟件編碼編碼:指把軟件設(shè)計的結(jié)果翻譯成計算機可以理解的形式,即用某種程序設(shè)計語言書寫的程序。

模塊的過程性描述(不可執(zhí)行的)源程序(可執(zhí)行的)編碼注意:軟件設(shè)計的質(zhì)量決定著程序的質(zhì)量。討論一種觀點

-軟件編碼是將軟件設(shè)計模型機械地轉(zhuǎn)換成源程序代碼,這是一種低水平的、缺乏創(chuàng)造性的工作問題-你是否認同這種觀點?-如果不認同,你如何看待軟件編碼?正確觀點

-軟件編碼是一個復雜而迭代的過程,包括程序設(shè)計和程序?qū)崿F(xiàn)-軟件編碼要求

正確地理解用戶需求和軟件設(shè)計思想正確地根據(jù)設(shè)計模型進行程序設(shè)計(編程技術(shù))正確而高效率地編寫和測試源代碼(程序效率)-軟件編碼是設(shè)計的繼續(xù),會影響軟件質(zhì)量和可維護性7.1

程序設(shè)計語言

7.1.1

程序設(shè)計語言分類

7.1.2

程序設(shè)計語言的特點

7.1.3

程序設(shè)計語言的選擇程序設(shè)計語言的目的?計算機硬件僅僅知道0和1有問題需要計算機解決的人交流的鴻溝計算機硬件僅僅知道0和1有問題需要計算機解決的人程序設(shè)計語言它是人與計算機交流的方式

7.1.1

程序設(shè)計語言分類低級語言高級語言機器語言匯編語言基礎(chǔ)語言現(xiàn)代語言專用語言低級語言機器語言和匯編語言機器語言機器語言:

它是由計算機硬件唯一可以識別的,可以被計算機直接執(zhí)行的由二進制指令組成的程序語言。B87F01BB210203D8B81F042BC3(計算1055-(383+545)的5條機器指令)1條機器指令操作數(shù)地址操作碼機器語言優(yōu)點:可以直接被計算機執(zhí)行。缺點:記不住、難理解、效率低、不易維護不同的機器語言程序,相互不兼容匯編語言匯編語言:用助記符來代替指令代碼中的操作碼,用地址符代替地址碼,如用ADD表示加法,AX,BX表示寄存器等。匯編語言B87F01BB210203D8B81F042BC3(計算1055-(383+545)的5條機器指令)機器語言程序?qū)膮R編語言程序MOVAX383MOVBX545ADDBXAXMOVAX1055SUBAXBX匯編語言程序?qū)?83傳送到AX寄存器將545傳送到BX寄存器將BX內(nèi)容加AX內(nèi)容,結(jié)果在BX中將1055傳送到AX寄存器將AX內(nèi)容減BX內(nèi)容,結(jié)果在AX寄存器中匯編語言優(yōu)點:比較直觀和易記憶,較適合人類思維習慣程序相對容易理解缺點:大型程序難以開發(fā)依賴于具體計算機高級語言 高級語言的表示方法要比低級語言更接近于待解的問題,其特點是在一定程度上與具體機器無關(guān),易學、易用、易維護。高級語言的實現(xiàn)極大的提高了軟件的生產(chǎn)效率。

總之,使程序設(shè)計的難度降低,導致了計算機的發(fā)展進入新的階段。高級程序設(shè)計語言的發(fā)展50年代:Fortran,ALGOL60年代:COBOL語言70年代:Pascal語言,C語言,BASIC語言80年代:Ada語言,PROLOG語言,LISP語言90年代起:面向?qū)ο笳Z言C++、JAVA、C#等從應用特點分從內(nèi)在特點分基礎(chǔ)語言:如BASIC結(jié)構(gòu)化語言:如PASCAL、C專用語言:如APL系統(tǒng)實現(xiàn)語言:如C靜態(tài)高級語言:如COBOL塊結(jié)構(gòu)高級語言:PASCAL動態(tài)高級語言:不屬于通用語言高級語言高級語言基礎(chǔ)語言特點:通用語言,出現(xiàn)早,應用廣泛,有大量軟件庫,為最廣泛的人所熟悉和接受。代表性語言:

BASIC、Fortran,COBOL,ALGOL基礎(chǔ)語言特點:通用語言,出現(xiàn)早,應用廣泛,有大量軟件庫,為最廣泛的人所熟悉和接受。代表性語言:

BASIC、Fortran,COBOL,ALGOL使用最早的高級語言,它適合于科學計算,缺點是數(shù)據(jù)類型不豐富,對復雜的數(shù)據(jù)結(jié)構(gòu)缺乏支持。用排序?qū)個數(shù)排序(Fortran

)基礎(chǔ)語言特點:通用語言,出現(xiàn)早,應用廣泛,有大量軟件庫,為最廣泛的人所熟悉和接受。代表性語言:

BASIC、Fortran,COBOL,ALGOL最初是為分時系統(tǒng)設(shè)計的,用于一般數(shù)值計算與事務處理,優(yōu)點是簡單易學,具有交互功能。用排序?qū)個數(shù)排序(Fortran

)基礎(chǔ)語言特點:通用語言,出現(xiàn)早,應用廣泛,有大量軟件庫,為最廣泛的人所熟悉和接受。代表性語言:

BASIC、Fortran,COBOL,ALGOL商業(yè)數(shù)據(jù)處理中應用最廣的高級語言。一種面向數(shù)據(jù)處理的、面向文件的、面向過程(POL)的高級編程語言基礎(chǔ)語言特點:通用語言,出現(xiàn)早,應用廣泛,有大量軟件庫,為最廣泛的人所熟悉和接受。代表性語言:

BASIC、Fortran,COBOL,ALGOL一種描述計算過程的算法語言。缺點是缺少標準的輸入輸出和結(jié)構(gòu)使用的換名參數(shù)。結(jié)構(gòu)化語言又稱為現(xiàn)代語言或者通用語言,直接提供結(jié)構(gòu)化的控制結(jié)構(gòu),具有很強的過程能力和數(shù)據(jù)結(jié)構(gòu)能力。代表性語言:ALGOL、C、Pascal、PL/1、Ada結(jié)構(gòu)化語言又稱為現(xiàn)代語言或者通用語言,直接提供結(jié)構(gòu)化的控制結(jié)構(gòu),具有很強的過程能力和數(shù)據(jù)結(jié)構(gòu)能力。代表性語言:ALGOL、C、Pascal、PL/1、Ada最初為UNIX操作系統(tǒng)的主要語言開發(fā)的,現(xiàn)成為通用語言。特點:表達簡潔,控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)完備、運算符和數(shù)據(jù)類型豐富,可移植性好強,編譯質(zhì)量高。結(jié)構(gòu)化語言又稱為現(xiàn)代語言或者通用語言,直接提供結(jié)構(gòu)化的控制結(jié)構(gòu),具有很強的過程能力和數(shù)據(jù)結(jié)構(gòu)能力。代表性語言:ALGOL、C、Pascal、PL/1、Ada第一個系統(tǒng)的體現(xiàn)結(jié)構(gòu)化程序設(shè)計概念的現(xiàn)代高級語言。優(yōu)點是模塊清晰,控制結(jié)構(gòu)完備,數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型豐富,表達能力強,可移植性好。結(jié)構(gòu)化語言又稱為現(xiàn)代語言或者通用語言,直接提供結(jié)構(gòu)化的控制結(jié)構(gòu),具有很強的過程能力和數(shù)據(jù)結(jié)構(gòu)能力。代表性語言:ALGOL、C、Pascal、PL/1、Ada迄今為止最完善的面向過程的現(xiàn)代語言。適用于嵌入式計算機系統(tǒng)。專用語言具有為某種特殊應用而設(shè)計的獨特的語言形式。語言應用范圍比較窄。代表性語言:APL:為數(shù)據(jù)和向量運算設(shè)計的簡潔而又功能很強的語言,而它幾乎不提供結(jié)構(gòu)化的控制結(jié)構(gòu)和數(shù)據(jù)類型。系統(tǒng)實現(xiàn)語言為了克服匯編程序設(shè)計的困難而從匯編語言發(fā)展起來的。特點:提供控制語句和變量類型檢驗等功能,但是同時也容許程序員直接使用機器操作。如:C語言靜態(tài)高級語言提供某些控制語句和變量說明的機制,但是程序員不能直接控制由編譯程序生成的機器操作。特點:靜態(tài)分配存儲。

COBOL、

FORTRAN塊結(jié)構(gòu)高級語言提供有限形式的動態(tài)存儲分配,這種形式稱為塊結(jié)構(gòu)。ALGOL、PASCAL動態(tài)高級語言動態(tài)地完成所有存儲管理,也就是說,執(zhí)行個別語句可能引起分配存儲或釋放存儲。一般為特殊應用而設(shè)計的,不屬于通用語言討論:你所了解的高級程序開發(fā)語言有哪些?

C、C++、C#、Java、ASP、ASP.NET、Perl、PHP、SQL、VisualBasic.NET、Delphi、VisualC++、C++Builder、C#Builder名字說明預先說明程序中使用的對象的名字,使編譯程序能檢查程序中出現(xiàn)的名字的合法性,從而能幫助程序員發(fā)現(xiàn)和改正程序中的錯誤。

7.1.2

程序設(shè)計語言特點例如:C語言中定義變量必須以_或者字母開頭。

INT23_ABC=10;類型說明類型說明和名字說明是緊密相聯(lián)的,通過類型說明用戶定義了對象的類型,從而確定了該對象的使用方式。編譯程序能夠發(fā)現(xiàn)程序中對某個特定類型的對象使用不當?shù)腻e誤,因此有助于減少程序錯誤。

7.1.2

程序設(shè)計語言特點例如:FloatX;Printf(“%d\n”,X%10);初始化程序設(shè)計中最常見的錯誤之一是在使用變量之前沒對變量初始化,為減少發(fā)生錯誤的可能性,應該使程序員對程序中說明的所有變量初始化。

7.1.2

程序設(shè)計語言特點例如:FloatX=11.9;

程序?qū)ο蟮木植啃栽诔绦蛟O(shè)計中,程序?qū)ο蟮拿謶撛诳拷褂盟鼈兊牡胤揭?,并且應該只有程序中真正需要它們的那些部分才能訪問它們。

7.1.2

程序設(shè)計語言特點例如:FloatX=11.9;

程序模塊塊結(jié)構(gòu)語言提供了控制程序?qū)ο竺挚梢娦缘氖侄?,主要是在較內(nèi)層程序塊中說明的名字不能被較外層的程序塊訪問。

7.1.2

程序設(shè)計語言特點循環(huán)控制結(jié)構(gòu)最常見的循環(huán)控制結(jié)構(gòu)有FOR語句(循環(huán)給定次數(shù)),WHILE_DO語句(每次進入循環(huán)體之前測試循環(huán)結(jié)束條件)和REPEAT_UNTIL語句(每執(zhí)行完一次循環(huán)體測試循環(huán)結(jié)束條件)。

7.1.2

程序設(shè)計語言特點分支控制結(jié)構(gòu)

IF型分支語句通常并不存在什么實際問題,但是多分支的CASE型語句卻可能存在問題。見書中內(nèi)容

7.1.2

程序設(shè)計語言特點異常處理程序運行過程中發(fā)生的錯誤或意外事件稱為異常。

7.1.2

程序設(shè)計語言特點獨立編譯獨立編譯是指能分別編譯各個程序單元,然后再把它們集成為一個完整的程序。

7.1.2

程序設(shè)計語言特點

7.1.3

程序設(shè)計語言的選擇1.理想標準(1)應該有理想的模塊化機制,以及可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),以使程序容易測試和維護,同時減少軟件生存周期的總成本。(2)應該使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯誤,以便于調(diào)試和提高軟件的可靠性。(3)應該有良好的獨立編譯機制,以降低軟件開發(fā)和維護的成本。

7.1.3

程序設(shè)計語言的選擇2.實踐標準(1)語言自身的功能(2)系統(tǒng)用戶的要求(3)編碼和維護成本(4)軟件的兼容性(5)可以使用的軟件工具(6)軟件可移植性(7)開發(fā)系統(tǒng)的規(guī)模(8)程序設(shè)計人員的知識水平7.2編碼風格(CodingStyle)7.2.1源程序文檔化7.2.2數(shù)據(jù)說明7.2.3語句結(jié)構(gòu)7.2.4輸入/輸出編碼風格的意義隨著信息時代的飛速發(fā)展,應用軟件的規(guī)模越來越大,現(xiàn)在的項目開發(fā)大都是很多程序員共同完成的。在軟件工程領(lǐng)域,源程序的風格統(tǒng)一與否直接影響著軟件的可維護性、可讀性的好壞,以及日后培訓和交流的難易程度,繼而對軟件開發(fā)成本有著直接的關(guān)系。因此,源程序的編碼風格已經(jīng)成為軟件項目的一個重要組成部分,因為程序不光是給機器執(zhí)行的,在很多時候,比如在軟件的測試階段和維護階段,都是要人進行閱讀的,編程風格的各異、技巧和個性的運用,都會給讀程序帶來很大障礙,為以后的移交和維護造成不必要的損失。請問:哪個程序更容易閱讀?編碼的目標早期的編碼目標:效率第一、清晰第二;現(xiàn)在的編碼目標:清晰第一、效率第二;軟件編碼風格指導1.源程序文檔化2.數(shù)據(jù)說明3.語句結(jié)構(gòu)4.輸入和輸出7.2.1

源程序文檔化

符號名的命名

安排注釋

程序的視覺組織符號名的命名符號名包括模塊名、變量名、常量名、標號名、子程序名以及數(shù)據(jù)區(qū)名、緩沖區(qū)名等,這些名字應能反映它所代表的實際東西,能夠使人望名知意,有助于對程序功能的理解。例如,表示次數(shù)的量用Times,表示總值的量用Total,表示平均值的量用Average,表示和的量用Sum等。(以C++為例):C++的成員變量開始要冠以m_,全局變量開始要冠以g_,指針開始要冠以p_。如用m_CountTimes

表示進行計算的次數(shù),用m_MessageLength

表示消息的長度,用g_ReceiveMessage[m_MessageLength]表示接受的消息等。

注意:

名字不是越長越好,太長會增加工作量,給閱讀帶來負面影響,所以必要時可使用縮寫,但這時要注意縮寫規(guī)則要一致,并要給每個名字加注釋,同時,一個變量只能表示一個意義。例:不能一會用Temp來表示溫度,一會又用Temp來表示臨時變量。程序的注釋夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。注釋決不是可有可無的。一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個源程序的1/3到1/2,甚至更多。注釋分為序言性注釋和功能性注釋。序言性注釋

通常置于每個程序模塊的開頭部分,它應當給出程序的整體說明,對于理解程序本身具有引導作用。有些軟件開發(fā)部門對序言性注釋做了明確而嚴格的規(guī)定,要求程序編制者逐項列出。程序的注釋序言性注釋的相關(guān)項目包括:程序標題;有關(guān)本模塊功能和目的的說明;主要算法;接口說明:包括調(diào)用形式,參數(shù)描述,子程序清單,模塊位置:在哪一個源文件中,或隸屬于哪一個軟件包;開發(fā)簡歷:模塊設(shè)計者,復審者,復審日期,修改日期及有關(guān)說明等。程序的注釋功能性注釋功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會怎么樣。而不要解釋下面怎么做。程序的注釋要點描述一段程序,而不是每一個語句;用縮進和空行,使程序與注釋容易區(qū)別;注釋要正確。有合適的、有助于記憶的標識符和恰當?shù)淖⑨?,就能得到比較好的源程序內(nèi)部的文檔。設(shè)計的說明,也可作為注釋,潛入源程序體內(nèi)。程序的注釋功能性注釋示例:/*addamounttototal*/Total=Amount+Total;/*addmonthly-salestoannual-total*/Total=Amount+Total;程序的注釋Good!!!Bad!!!程序的視覺組織空格、空行和移行恰當?shù)乩每崭瘢梢酝怀鲞\算的優(yōu)先性,避免發(fā)生運算的錯誤。例如,將表達式

(A<-17)ANDNOT(B<=49)ORC

寫成

(A<-17)ANDNOT(B<=49)ORC自然的程序段之間可用空行隔開;程序的視覺組織標準的書寫格式(1)用分層縮進的寫法顯示嵌套結(jié)構(gòu)層次;(2)在注釋段周圍加上邊框;(3)注釋段與程序段、以及不同的程序段之間插入空行;(4)每行只寫一條語句;(5)書寫表達式時適當使用空格或圓括號作隔離符。移行也叫做向右縮格。它是指程序中的各行不必都在左端對齊,都從第一格起排列。這樣做使程序完全分不清層次關(guān)系。對于選擇語句和循環(huán)語句,把其中的程序段語句向右做階梯式移行。使程序的邏輯結(jié)構(gòu)更加清晰。程序的視覺組織程序的視覺組織IF(…)THENIF(…)THEN……ELSE……ENDIF…ELSE……ENDIFIF(…)THEN

IF(…)THEN

……

ELSE

……

ENDIF

…ELSE……ENDIF7.2.2數(shù)據(jù)說明1.數(shù)據(jù)說明的次序應規(guī)范化。2.說明的先后次序固定。3.當用一個語句說明多個變量名時,應當對這些變量按字母的順序排列。4.對于復雜數(shù)據(jù)結(jié)構(gòu),應利用注釋說明實現(xiàn)這個數(shù)據(jù)結(jié)構(gòu)的特點。如:int

high,length,size,width;如:structnode{

intdata;//結(jié)點數(shù)據(jù)

node*next;//指向下一結(jié)點}7.2.2數(shù)據(jù)說明在設(shè)計階段確定了軟件的邏輯流結(jié)構(gòu),但構(gòu)造單個語句則是編碼階段的任務。語句構(gòu)造力求簡單,直接,不能為了片面追求效率而使語句復雜化。7.2.3語句結(jié)構(gòu)1.在一行內(nèi)只寫一條語句在一行內(nèi)只寫一條語句,并且采取適當?shù)囊菩懈袷剑钩绦虻倪壿嫼凸δ茏兊酶用鞔_。許多程序設(shè)計語言允許在一行內(nèi)寫多個語句。但這種方式會使程序可讀性變差。因而不可取。7.2.3語句結(jié)構(gòu)7.2.3語句結(jié)構(gòu)例如,有一段排序程序

FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;由于一行中包括了多個語句,掩蓋了程序的循環(huán)結(jié)構(gòu)和條件結(jié)構(gòu),使其可讀性變得很差。7.2.3語句結(jié)構(gòu)FORI:=1TON-1DO//改進布局

BEGIN

T:=I;

FORJ:=I+1TONDO

IFA[J]<A[T]THENT:=J;

IFT≠ITHEN

BEGIN

WORK:=A[T];

A[T]:=A[I];

A[I]:=WORK;

END

END;7.2.3語句結(jié)構(gòu)2使用標準的控制結(jié)構(gòu)在編碼階段,要繼續(xù)遵循模塊邏輯中采用單入口、單出口標準結(jié)構(gòu)的原則,以確保源程序清晰可讀。在盡量使用標準結(jié)構(gòu)的同時,還要避免使用容易引起混淆的結(jié)構(gòu)和語句。ifcthens;ifcthens1elses2;switch(i){cases1:……cases2:}While(c)do{s};Do{s}while(c);for(i=n;i<m;i++){s}7.2.3語句結(jié)構(gòu)3程序編寫首先應當考慮清晰性

程序編寫首先應當考慮清晰性,不要刻意追求技巧性,使程序編寫得過于緊湊。7.2.3語句結(jié)構(gòu)例如,有一個程序段:

A[I]:=A[I]+A[T];

A[T]:=A[I]-A[T];

A[I]:=A[I]-A[T];

此段程序可能不易看懂,有時還需用實際數(shù)據(jù)試驗一下。7.2.3語句結(jié)構(gòu)

實際上,這段程序的功能就是交換A[I]和A[T]中的內(nèi)容。目的是為了節(jié)省一個工作單元。如果改一下:

WORK:=A[T];

A[T]:=A[I];

A[I]:=WORK;

就能讓讀者一目了然。7.2.3語句結(jié)構(gòu)例如

for(I=1to5)i++

for(j=1to5)j++

a[i][j]=(i/j)*(j/i)

除法運算(/)在除數(shù)和被除數(shù)都是整型量時,其結(jié)果只取整數(shù)部分,而得到整型量。7.2.3語句結(jié)構(gòu)當i<j時,i/j=0

當j<i

時,j/i=0

得到的數(shù)組當i≠j時

V[i][j]=(i/j)*(j/i)=0

當i=j時

V[i][j]=(i/j)*(j/i)=1這樣得到的結(jié)果V

是一個單位矩陣。7.2.3語句結(jié)構(gòu)7.2.3語句結(jié)構(gòu)7.2.3語句結(jié)構(gòu)寫成以下的形式,就能讓讀者直接了解程序編寫者的意圖。

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(i==j)

V[i][j]=1.0;

ELSE

V[i][j]=0.0;7.2.3語句結(jié)構(gòu)除非對效率有特殊的要求,程序編寫要做到清晰第一,效率第二。不要為了追求效率而喪失了可讀性。事實上,程序效率的提高主要應通過選擇高效的算法來實現(xiàn)。7.2.3語句結(jié)構(gòu)4.注意GOTO語句的使用

GOTO語句不宜多使用,也不能完全禁止。7.2.3語句結(jié)構(gòu)例如,有一個求三個數(shù)中最小值的程序:

IF(X<Y)GOTO30

IF(Y<Z)GOTO50

SMALL=ZGOTO7030IF(X<Z)GOTO60

SMALL=ZGOTO7050SMALL=Y(jié)GOTO7060SMALL=X70CONTINUE

程序只需編寫成:

small=x;

if(y<small)small=y(tǒng);

if(z<small)small=z;

所以程序應當簡單,不必過于深奧,

避免使用GOTO語句繞來繞去。7.1.4編碼-編碼風格7.2.4輸入/輸出輸入和輸出信息是與用戶的使用直接相關(guān)的。輸入和輸出的方式和格式應當盡可能方便用戶的使用。一定要避免因設(shè)計不當給用戶帶來的麻煩。因此,在軟件需求分析階段和設(shè)計階段,就應基本確定輸入和輸出的風格。系統(tǒng)能否被用戶接受,有時就取決于輸入和輸出的風格。7.2.4輸入/輸出不論是批處理的輸入/輸出方式,還是交互式的輸入/輸出方式,在設(shè)計和編碼時都應考慮下列原則:對所有的輸入數(shù)據(jù)都要進行檢驗,識別錯誤的輸入,以保證每個數(shù)據(jù)的有效性;檢查輸入項的各種重要組合的合理性,必要時報告輸入狀態(tài)信息;使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入格式;輸入數(shù)據(jù)時,應允許使用自由格式輸入;應允許缺省值;輸入一批數(shù)據(jù)時,最好使用輸入結(jié)束標志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目;7.2.4輸入/輸出在交互式輸入輸入時,要在屏幕上使用提示符明確提示交互輸入的請求,指明可使用選擇項的種類和取值范圍。同時,在數(shù)據(jù)輸入的過程中和輸入結(jié)束時,也要在屏幕上給出狀態(tài)信息;當程序設(shè)計語言對輸入/輸出格式有嚴格要求時,應保持輸入格式與輸入語句的要求的一致性;給所有的輸出加注解,并設(shè)計輸出報表格式。

輸入/輸出風格還受到許多其它因素的影響。如輸入/輸出設(shè)備(例如終端的類型,圖形設(shè)備,數(shù)字化轉(zhuǎn)換設(shè)備等)、用戶的熟練程度、以及通信環(huán)境等。7.3程序效率

7.3.1有關(guān)程序效率的幾條準則

7.3.2算法對效率的影響

7.3.3影響存儲器效率的因素

7.3.4影響輸入/輸出的因素程序效率的概念程序的效率是指程序的執(zhí)行速度及程序所需占用的內(nèi)存的存儲空間。程序編碼是最后提高運行速度和節(jié)省存儲的機會,因此在此階段不能不考慮程序的效率。7.3.1程序效率準則讓我們首先明確討論程序效率的幾條準則效率是一個性能要求,應當在需求分析階段給出。軟件效率以需求為準,不應以人力所及為準。好的設(shè)計可以提高效率。程序的效率與程序的簡單性相關(guān)。一般說來,任何對效率無重要改善,且對程序的簡單性、可讀性和正確性不利的程序設(shè)計方法都是不可取的。7.3.2算法對效率的影響源程序的效率與詳細設(shè)計階段確定的算法的效率直接有關(guān)。在詳細設(shè)計翻譯轉(zhuǎn)換成源程序代碼后,算法效率反映為程序的執(zhí)行速度和存儲容量的要求。在編程序前,盡可能化簡有關(guān)的算術(shù)表達式和邏輯表達式;仔細檢查算法中的嵌套的循環(huán),盡可能將某些語句或表達式移到循環(huán)外面;盡量避免使用多維數(shù)組;盡量避免使用指針和復雜的表;

采用“快速”的算術(shù)運算;不要混淆數(shù)據(jù)類型,避免在表達式中出現(xiàn)類型混雜;盡量采用整數(shù)算術(shù)表達式和布爾表達式;選用等效的高效率算法;7.3.3影響存儲器效率的因素在大中型計算機系統(tǒng)中,存儲限制不再是主要問題。在這種環(huán)境下,對內(nèi)存采取基于操作系統(tǒng)的分頁功能的虛擬存儲管理。存儲效率與操作系統(tǒng)的分頁功能直接有關(guān)。

采用結(jié)構(gòu)化程序設(shè)計,將程序功能合理分塊,使每個模塊或一組密切相關(guān)模塊的程序體積大小與每頁的容量相匹配,可減少頁面調(diào)度,減少內(nèi)外存交換,提高存儲效率。

在微型計算機系統(tǒng)中,存儲器的容量對軟件設(shè)計和編碼的制約很大。因此要選擇可生成較短目標代碼且存儲壓縮性能優(yōu)良的編譯程序,有時需采用匯編程序。提高存儲器效率的關(guān)鍵是程序的簡單性。7.3.4影響輸入/輸出的因素輸入/輸出可分為兩種類型:面向人(操作員)的輸入/輸出面向設(shè)備的輸入/輸出

如果操作員能夠十分方便、簡單地錄入輸入數(shù)據(jù),或者能夠十分直觀、一目了然地了解輸出信息,則可以說面向人的輸入/輸出是高效的。

關(guān)于面向設(shè)備的輸入/輸出,可以提出一些提高輸入/輸出效率的指導原則:輸入/輸出的請求應當最小化;對于所有的輸入/輸出操作,安排適當?shù)木彌_區(qū),以減少頻繁的信息交換。對輔助存儲(例如磁盤),選擇盡可能簡單的,可接受的存取方法;

對輔助存儲的輸入/輸出,應當成塊傳送;7.4編程安全

7.4.1冗余程序設(shè)計

7.4.2防錯程序設(shè)計提高軟件質(zhì)量和可靠性的技術(shù)大致可分為兩類:一類是避錯技術(shù),即在開發(fā)的過程中不讓差錯潛入軟件的技術(shù);另一類是容錯技術(shù),即對某些無法避開的差錯,使其影響減少到最小的技術(shù)。避錯技術(shù)是進行質(zhì)量管理,實現(xiàn)產(chǎn)品應有質(zhì)量所不可少的技術(shù),也就是軟件工程中所討論的先進的軟件分析和開發(fā)技術(shù)及管理技術(shù)。但是,無論使用多么高明的避錯技術(shù),也無法做到完美無缺和絕對無錯,這就需要采用容錯技術(shù)。實現(xiàn)容錯的主要手段是冗余程序設(shè)計和防錯程序設(shè)計。1.冗余程序設(shè)計冗余是改善系統(tǒng)可靠性的一種重要技術(shù)。在軟件系統(tǒng)中,個問題必須設(shè)計出兩個不同的采用冗余技術(shù)是指要解決一程序,包括采用不同的算法和設(shè)計,而且編程人員也應該不同。冗余程序設(shè)計所帶來的副作用是由于文本的增加而帶來的存儲空間的增加,以及運行時間的延長。2.防錯程序設(shè)計

在編碼即程序設(shè)計過程中,總是不可避免的會或多或少的產(chǎn)生一些錯誤。為了避免和糾正這些錯誤,可在編碼過程中有意識地在程序中加進一些錯誤檢查的措施,這就是防錯程序設(shè)計的基本思想。防錯程序設(shè)計可分為主動式和被動式兩種。1).主動式防錯程序設(shè)計主動式防錯程序設(shè)計是指周期性的對整個程序或數(shù)據(jù)庫進行搜查或在空閑時搜查異常情況。

1)內(nèi)存檢查

2)標志檢查

3)反向檢查4)狀態(tài)檢查

5)連接檢查6)時間檢查

7)其他檢查2).被動式防錯程序設(shè)計被動式防錯程序設(shè)計思想是指必須等到某個輸

溫馨提示

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

評論

0/150

提交評論