軟件工程 編碼_第1頁
軟件工程 編碼_第2頁
軟件工程 編碼_第3頁
軟件工程 編碼_第4頁
軟件工程 編碼_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章編碼4學(xué)時(shí)不同瓷磚特點(diǎn),砌磚風(fēng)格,砌墻的手藝,砌墻的規(guī)范

程序語言特點(diǎn),編程風(fēng)格,編程基本功,編程規(guī)范程序編碼就好比建筑工程中最基礎(chǔ)的砌磚和泥工作一樣是工程的基礎(chǔ),是設(shè)計(jì)的具體實(shí)施。引言——手藝太差了手藝不錯(cuò),規(guī)范屋里的墻

磚的應(yīng)用不合適第8章編碼1)程序設(shè)計(jì)語言的特點(diǎn)2)選擇程序設(shè)計(jì)語言的一般原則3)培養(yǎng)良好的編程習(xí)慣4)編程標(biāo)準(zhǔn)掌握了解掌握理解要求8.1程序設(shè)計(jì)語言程序設(shè)計(jì)語言是:人與計(jì)算機(jī)通信的最基本工具。程序設(shè)計(jì)語言的特性不可避免地會(huì)影響開發(fā)人員的思路和解決問題的方式,會(huì)影響代碼的可理解性和可維護(hù)性。編碼之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)木幊陶Z言。不同的語言適用于不同的應(yīng)用COBOL語言:數(shù)據(jù)處理程序JAVA語言:跨平臺(tái)的網(wǎng)絡(luò)編程PHP語言專門用來編寫網(wǎng)頁處理程序Perl語言更適合文本處理C語言被廣泛用于系統(tǒng)軟件開發(fā)8.1.1程序設(shè)計(jì)語言的特點(diǎn)-技術(shù)方面一旦確定了軟件需求之后,待選用的程序設(shè)計(jì)語言的技術(shù)特性就顯得非常重要了。如果需要復(fù)雜的數(shù)據(jù)結(jié)構(gòu),就要仔細(xì)衡量有哪些語言能提供這些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)描述。如果軟件要求高性能及實(shí)時(shí)處理能力,就該選用適合于實(shí)時(shí)處理的語言,如C或匯編語言。如果應(yīng)用有許多輸出報(bào)告或繁雜的文件處理,則選用PowerBuilder、Dephi或SQL比較合適。所有程序語言的基本成分都可歸納為4種:數(shù)據(jù)成分:指明該語言能接受的數(shù)據(jù),如各種類型的變量、數(shù)組、指針、記錄等。作為程序操作的對象,具有名稱、類型和作用域等特征。使用前要對這些特征加以說明,數(shù)據(jù)名稱由用戶通過標(biāo)識(shí)符命名,類型是說明數(shù)據(jù)需占用多少存儲(chǔ)單元和存放形式,作用域說明數(shù)據(jù)可被使用的范圍。運(yùn)算成分:指明該語言可執(zhí)行的運(yùn)算,如+,-,*、/控制成分:順序結(jié)構(gòu)、條件選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)傳輸成分:數(shù)據(jù)的傳輸方法,例如輸入、輸出函數(shù)8.1.1程序設(shè)計(jì)語言的特點(diǎn)-語言本身1--101、名字聲明預(yù)先說明程序中所使用的變量名字,編譯程序能夠檢查程序中出現(xiàn)的名字的合法性,從而幫助程序員發(fā)現(xiàn)和改正程序中的錯(cuò)誤。但是,有些語言不要求顯式地聲明程序中所使用的變量名稱,它把變量第一次出現(xiàn)時(shí)使用的名字看做對這個(gè)變量的聲明。這樣做可能會(huì)引入一些很難發(fā)現(xiàn)的錯(cuò)誤,并且可能會(huì)產(chǎn)生嚴(yán)重后果。2、類型聲明變量的類型聲明確定一個(gè)變量的使用方式,有了類型聲明,編譯程序就能夠很容易地發(fā)現(xiàn)程序中某個(gè)特定類型的變量使用不當(dāng)?shù)腻e(cuò)誤。有些語言不要求顯式的類型聲明,例如FORTRAN語言規(guī)定,名字的第一個(gè)字母決定它的類型,但是一旦顯式地聲明了一個(gè)變量的類型,則以顯式聲明為該變量的類型。這很容易造成閱讀時(shí)的混淆?,F(xiàn)代的大多數(shù)高級語言都有自定義類型,即允許開發(fā)人員定義與特定應(yīng)用相關(guān)的類型,并且可以用自定義類型嵌套定義新的類型。例如,可以定義記錄、鏈表、二叉樹等復(fù)雜的結(jié)構(gòu)類型。程序設(shè)計(jì)語言中的類型說明不僅僅是一種安全措施,還是一種重要的抽象機(jī)制。3、初始化程序設(shè)計(jì)中最常見的錯(cuò)誤之一就是在使用變量之前沒有對變量進(jìn)行初始化。為了減少發(fā)生錯(cuò)誤的可能性,應(yīng)該強(qiáng)迫程序員對程序中所使用的變量進(jìn)行初始化。另一個(gè)辦法是在說明變量時(shí)由系統(tǒng)給變量賦予一個(gè)特殊的標(biāo)識(shí),表明它尚未初始化,以后如果沒給這個(gè)變量賦值就企圖使用它,系統(tǒng)會(huì)發(fā)出報(bào)警信號。4、程序變量的局部性程序設(shè)計(jì)的一般原則是變量的名字應(yīng)該在靠近使用它的地方引入,并且應(yīng)該只有程序中真正需要它的那些部分才能夠訪問它。通常有兩種提供局部變量的途徑:單層局部性和多層局部性。PROGRAMTEST……PROCEDUREA()VAR ARRAYA[20],B[20]:INTEGER;

WORK,I,J:INTEGER;

BEGIN ………… ………… END;PROCEDUREB()VAR ARRAYA[20],B[20]:INTEGER;

WORK,I,J:INTEGER;

BEGIN ………… ………… END;END.程序中過程A和B內(nèi)的變量是單層局部性的,兩個(gè)過程中聲明的變量的作用范圍局限于所在的過程。PROGRAMTEST……PROCEDUREA()VARARRAYA[20],B[20]:INTEGER;WORK,I,J,K:INTEGER;

PROCEDUREB()

VAR ARRAYA[20],B[20]:INTEGER;

WORK,I,J:INTEGER;

BEGIN ………… ………… END;BEGIN ……………………END;…………程序的結(jié)構(gòu)是多層的,模塊A中聲明的變量與模塊B中聲明的變量除了變量K之外全部相同。內(nèi)層模塊B中有意義的變量是屬于該模塊的A[],B[],WORK,I,J和屬于外層模塊的變量K。要盡量避免內(nèi)層模塊與外層模塊定義相同的變量名,容易引起差錯(cuò),給維護(hù)人員理解代碼帶來很多困難5、程序模塊獨(dú)立性結(jié)構(gòu)化語言提供了控制局部變量可見性的某些手段,主要是在較內(nèi)層程序模塊中定義的變量不能被較外層的程序塊訪問。由于動(dòng)態(tài)存儲(chǔ)分配的緣故,在兩次調(diào)用一個(gè)程序塊的間隔中不能夠保存局部變量的值。因此,即使只有一兩個(gè)子程序使用的變量,如果需要在兩次調(diào)用這些子程序的過程中保存這個(gè)變量的值,也必須把這個(gè)變量說明成全程的,這將增加維護(hù)時(shí)發(fā)生差錯(cuò)的可能性。因此現(xiàn)在大多數(shù)語言提供了靜態(tài)變量,這種變量可以保存前次調(diào)用時(shí)的數(shù)據(jù),解決了多次調(diào)用一個(gè)模塊時(shí)局部變量不能保存的問題。6、循環(huán)結(jié)構(gòu)最常見的循環(huán)結(jié)構(gòu)有for語句、while-do語句和repeat-until語句,這些語言都是在循環(huán)體外判斷循環(huán)條件。有許多場合需要在循環(huán)體內(nèi)的任意一點(diǎn)測試循環(huán)結(jié)束條件,如果使用if-then-else語句和附加的布爾變量實(shí)現(xiàn)這個(gè)要求,則將增加程序長度并且降低程序的可讀性。某些程序設(shè)計(jì)語言考慮到該要求,適當(dāng)?shù)亟鉀Q了這個(gè)問題。

exit{(標(biāo)識(shí)符)}{when(條件)}這個(gè)語句把控制轉(zhuǎn)移到循環(huán)語句后面的一條語句或轉(zhuǎn)移到由標(biāo)識(shí)符指定的語句上。7、分支結(jié)構(gòu)簡單的分支語句一般不會(huì)出現(xiàn)問題,但是多分支的case型語句注意以下2個(gè)問題:如果case表達(dá)式取的值不在預(yù)先指定的范圍內(nèi),需要用缺省方式處理。在某些程序設(shè)計(jì)語言中,由case表達(dá)式選定的執(zhí)行語句取決于所有可能執(zhí)行的語句排列順序,如果語句順序排列錯(cuò)了,編譯和運(yùn)行時(shí)系統(tǒng)是不會(huì)發(fā)現(xiàn)這類錯(cuò)誤的。8、異常處理程序運(yùn)行過程中發(fā)生的錯(cuò)誤或意外事件稱為異常。以前大多數(shù)程序設(shè)計(jì)語言在檢測和處理異常方面幾乎沒有給程序員提供任何幫助,程序員只能使用條件控制檢測異常,在發(fā)生異常時(shí)把控制轉(zhuǎn)移到處理異常的程序段。但是,JAVA等一些語言的提供了異常處理機(jī)制,程序員可以很容易地利用語言提供的異常處理機(jī)制實(shí)現(xiàn)錯(cuò)誤和異常的處理操作。8、獨(dú)立編譯獨(dú)立編譯意味著能夠分別編譯各個(gè)程序單元,然后再把它們集成為一個(gè)完整的程序。一個(gè)大程序通常由許多程序單元組成,如果修改了其中任何一個(gè)程序單元都需要重新編譯整個(gè)程序,將大大增加程序開發(fā)、調(diào)試和維護(hù)的成本;反之,如果可以獨(dú)立編譯,則只需要重新編譯修改了的程序單元,然后重新連接整個(gè)程序即可。獨(dú)立編譯的機(jī)制對于開發(fā)大型系統(tǒng)極其重要。10、其它特性某些語言帶有一些特別的功能,這些功能可實(shí)現(xiàn)一些特殊的設(shè)計(jì)。如MODULA語言和并發(fā)PASCAL語言支持并發(fā)處理,以及必須彼此通信和協(xié)調(diào)的分布式進(jìn)程。因此適應(yīng)并發(fā)的和分布式處理的要求。8.1.1程序設(shè)計(jì)語言的特點(diǎn)-軟件工程方面詳細(xì)設(shè)計(jì)能夠直接地翻譯成程序代碼。源程序的可移植性。改善軟件可移植性的主要途徑是使語言標(biāo)準(zhǔn)化。對于可移植性要求的軟件,應(yīng)該嚴(yán)格遵守相應(yīng)的標(biāo)準(zhǔn)編寫程序代碼,不要圖一時(shí)的省事去使用語言的非標(biāo)準(zhǔn)特性。編譯程序效率較高。編譯程序首先應(yīng)該支持獨(dú)立編譯,并且能夠發(fā)現(xiàn)盡可能多的程序代碼錯(cuò)誤,輔助程序員提高程序調(diào)試效率。盡可能應(yīng)用代碼生成工具。許多語言都有與它相應(yīng)的編譯程序、連接程序、調(diào)試程序、代碼格式化程序、交叉編譯程序、宏處理程序和標(biāo)準(zhǔn)子程序庫等。對于提高效率是明智的選擇??删S護(hù)性。可維護(hù)性的前提是代碼的可理解性,源程序的可讀性、語言的文檔化特性是影響可維護(hù)性的重要因素。8.1.2程序設(shè)計(jì)語言的分類按語言級別分類,有低級語言和高級語言之分按照用戶要求,有過程式語言和非過程式語言之分按照應(yīng)用范圍,有通用語言和專用語言之分按照使用方式,有交互式語言和非交互式語言之分按照成分性質(zhì),有順序語言、并發(fā)語言和分布式語言之分第四代語言,有數(shù)據(jù)庫查詢語言DEV2000、程序代碼生成器以及其他一些原型語言、形式化規(guī)格說明語言等等。

8.1.3選擇一種語言要考慮的因素在選擇與評價(jià)語言時(shí),首先要從應(yīng)用要求入手,對比各項(xiàng)要求的相對重要性,然后再根據(jù)這些要求和相對重要性來選擇合適的編程語言。具體選擇的考慮:編程人員的水平和編程經(jīng)歷。雖然程序員學(xué)習(xí)一門新的語言并不困難,但是要熟練地掌握和精通一門語言是需要長期的實(shí)踐開發(fā)積累的。因此,在選擇語言時(shí)一定要考慮到時(shí)間限制和程序員掌握語言的程度,盡可能選擇一種程序員熟悉的語言。待開發(fā)軟件的類型可能不同,一般分為數(shù)據(jù)庫應(yīng)用軟件、實(shí)時(shí)控制軟件、系統(tǒng)級軟件、人工智能類軟件、軍用軟件等等。根據(jù)軟件的類型選擇合適的開發(fā)語言,例如,F(xiàn)ORTRAN語言適合科學(xué)計(jì)算,PowerBuilder、Dephi、C#等語言適合于信息系統(tǒng)的開發(fā),LISP、PROLOG語言適合于人工智能領(lǐng)域。算法和計(jì)算復(fù)雜性。待開發(fā)軟件算法的復(fù)雜性不同,應(yīng)該選擇合適的語言,例如,科學(xué)計(jì)算領(lǐng)域大都選擇FORTRAN,因?yàn)樗倪\(yùn)行性能比較好,但是當(dāng)今計(jì)算機(jī)硬件的發(fā)展使得運(yùn)算速度已不再成為瓶頸,因此許多計(jì)算型軟件普遍采用C/C++語言。然而計(jì)算復(fù)雜度很高的軟件采用匯編語言、人工智能類的語言肯定是不合適的,前者編寫代碼的工作復(fù)雜度太高,后者的運(yùn)行效率太低,并且這兩類語言的科學(xué)計(jì)算庫都很少,可復(fù)用的軟件元素較少。數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性。有些語言,例如FORTRAN、BASIC語言,定義數(shù)據(jù)類型的能力非常差,一旦設(shè)計(jì)中有比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),程序員實(shí)現(xiàn)時(shí)會(huì)感到很棘手。而PASCAL、JAVA之類的語言其數(shù)據(jù)結(jié)構(gòu)描述能力非常強(qiáng)大,為程序員創(chuàng)造了一個(gè)很廣闊的編程空間??紤]軟件的開發(fā)成本和時(shí)間要求。不僅要考慮當(dāng)前的開發(fā)成本,還要考慮今后的維護(hù)成本,如果選擇的語言很生僻,即使現(xiàn)在以很快的速度開發(fā)出來,將來的維護(hù)工作量不得不考慮。軟件的可移植性要求。如果目標(biāo)系統(tǒng)的運(yùn)行環(huán)境不能確定,例如,可能運(yùn)行在小型機(jī)的UNIX操作系統(tǒng)上,也可能運(yùn)行在大型機(jī)的OS/400操作系統(tǒng)上,甚至還要運(yùn)行在PC機(jī)的Windows操作系統(tǒng)環(huán)境中,這時(shí)選擇的開發(fā)語言最好是JAVA。這樣可以保證軟件的跨平臺(tái)運(yùn)行。選擇語言時(shí),特別是為大型軟件選擇語言時(shí),一定要考慮可用的軟件工具。如果某種語言有支持開發(fā)的工具,則開發(fā)和調(diào)試都會(huì)容易。8.2良好的編程習(xí)慣程序員編寫的代碼除了交給計(jì)算機(jī)運(yùn)行外,還必須讓其他程序員或設(shè)計(jì)人員能夠看懂。如果程序代碼的可讀性好,則調(diào)試和維護(hù)的成本就可以大幅度降低,同時(shí)可以減小程序運(yùn)行期間軟件失效的可能性,提高程序的可靠性。對于代碼編寫而言,要求程序具有良好的結(jié)構(gòu)和風(fēng)格。8.2.1結(jié)構(gòu)化程序設(shè)計(jì)原則盡量使用語言提供的基本控制結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)。利用塊機(jī)制將程序組織成容易識(shí)別的塊,每塊只有一個(gè)入口和一個(gè)出口。復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)組合或嵌套實(shí)現(xiàn)。對于語言中沒有的控制結(jié)構(gòu),可用一段等價(jià)的程序段模擬,但要求該程序段在整個(gè)系統(tǒng)中應(yīng)前后一致嚴(yán)格控制GOTO語句。8.2.2自頂向下、逐步細(xì)化在詳細(xì)設(shè)計(jì)和編碼階段,還應(yīng)當(dāng)采取自頂向下、逐步求精的方法,把一個(gè)模塊的功能逐步分解,細(xì)化為一系列具體的步驟,進(jìn)而翻譯成一系列用某種程序設(shè)計(jì)語言寫成的程序。[例3]用篩選法求100以內(nèi)的素?cái)?shù)。具體做法就是從2到100中去掉2,3,…,9,10的倍數(shù),剩下的就是100以內(nèi)的素?cái)?shù)。為了解決這個(gè)問題,可先按程序功能寫出一個(gè)框架。main(){

建立2到100的數(shù)組A[],其中A[i]=i;-----1

建立2到10的素?cái)?shù)表B[],存放2到10以內(nèi)素?cái)?shù);------2

若A[i]=i是B[]中任意一個(gè)數(shù)的倍數(shù),則剔除A[i];----3

輸出A[]中所有沒有被剔除的數(shù);----4}8.2.3程序設(shè)計(jì)風(fēng)格1)基本要求2)可讀性要求3)正確性與容錯(cuò)性要求4)可移植性要求5)輸入和輸出要求6)重用性要求7)面向?qū)ο蟮某绦蛟O(shè)計(jì)風(fēng)格1)基本要求程序結(jié)構(gòu)清晰且簡單易懂,單個(gè)函數(shù)的行數(shù)一般不要超過100行(特殊情況例外)。算法設(shè)計(jì)應(yīng)該簡單,代碼要精簡,避免出現(xiàn)垃圾程序。盡量使用標(biāo)準(zhǔn)庫函數(shù)(類方法)和公共函數(shù)(類方法)。最好使用括號以避免二義性。2)可讀性要求

注釋程序頭,函數(shù)頭說明:程序標(biāo)題,該模塊功能說明,主要算法說明;接口說明:調(diào)用形式,參數(shù)描述;子程序清單,有關(guān)數(shù)據(jù)的說明;模塊位置:在哪個(gè)源文件中,隸屬于哪一個(gè)軟件包;開發(fā)歷史:包括模塊設(shè)計(jì)者,復(fù)審者,復(fù)審日期,修改日期及有關(guān)說明等主要變量(結(jié)構(gòu)、聯(lián)合、類或?qū)ο?:含義的注釋。處理過程的每個(gè)階段和典型算法前都有相關(guān)注釋說明,但是不要對每條語句注釋。應(yīng)保持注釋與代碼完全一致。2)可讀性要求

格式程序格式清晰:一行只寫一條語句,一個(gè)程序如果寫得密密麻麻、分不出層次,是很難看懂的。利用空格、空行和縮進(jìn)顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量統(tǒng)一為4個(gè)字節(jié)。對于嵌套的循環(huán)和分支程序,層次不要超過五層。(A<-17)ANDNOT(B<=49)ORC寫成

(A<-17)ANDNOT(B<=49)ORC2)可讀性要求

程序本身語句力求簡單、清晰,不要片面追求效率,程序編寫得過于緊湊,使語句復(fù)雜化。

DO5I=1,NDO5J=1,N5 V(I,J)=(I/J)*(J/I)V是一個(gè)N×N矩陣,當(dāng)I≠J時(shí),V(I,J)=0;當(dāng)I=J時(shí),V(I,J)=1。這個(gè)程序構(gòu)思巧妙,但不易理解。如果改成下面的形式,讀者很容易了解程序的意圖:

DO5I=1,NDO5J=1,NIF(I<>J)THENV(I,J)=1.0ELSEV(I,J)=0.0ENDIF5 CONTINUE2)可讀性要求

程序本身(續(xù))編程時(shí)盡可能使用已有的庫函數(shù)。簡單變量的運(yùn)算速度比下標(biāo)變量的運(yùn)算要快,程序員可能把語句:

X=A[I]+1/A[I]寫成

AI=A[I];X=AI+1/AI因?yàn)椴槐卦L問數(shù)組的下標(biāo)表量,程序運(yùn)行效率高,但把一個(gè)計(jì)算表達(dá)式拆成了多個(gè),增加了理解的難度。一旦將來修改可能會(huì)改變這幾行代碼的順序或在其間插入其它語句,容易引入新的錯(cuò)誤。2)可讀性要求

程序本身(續(xù))盡量用公共過程或子程序代替具有獨(dú)立功能的重復(fù)代碼段,但是如果不具有獨(dú)立功能的代碼不要這樣做。使用括號清晰地表達(dá)算術(shù)表達(dá)式和邏輯表達(dá)式的運(yùn)算順序。盡量使用三種基本控制結(jié)構(gòu)編寫程序,使用IFTHENELSE結(jié)構(gòu)實(shí)現(xiàn)分支;使用DOUNTIL或DOWHILE來實(shí)現(xiàn)循環(huán)。2)可讀性要求

程序本身(續(xù))避免采用過于復(fù)雜的條件測試,少用含有“否定”運(yùn)算符的條件語句,例如在程序中把:IFNOT((CHAR<=’0’)OR(CHAR>=’9’))THEN……改成IF(CHAR>=’0’)AND(CHAR<=’9’)THEN……2)可讀性要求

程序本身(續(xù))避免使用空的ELSE語句和IFTHENIF語句

IF(CHAR>=’A’)THENIF(CHAR<=’Z’)THENPRINT“Thisisaletter。”

ELSE//這個(gè)語句的配套IF邏輯上不明確

PRINT"Thisisnotaletter。”2)可讀性要求

程序本身(續(xù))避免使用ELSEGOTO和ELSERETURN結(jié)構(gòu)。避免過多的循環(huán)嵌套和條件嵌套。數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡化。模塊功能盡可能單一化,模塊間的耦合能夠清晰可見。利用信息隱蔽確保每一個(gè)模塊的獨(dú)立性。對遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使用遞歸過程。盡量不要修補(bǔ)結(jié)構(gòu)差的程序,而應(yīng)重新設(shè)計(jì)和編碼。對太大的程序,要分塊編寫、測試,然后再集成。2)可讀性要求

程序本身(續(xù))注意計(jì)算機(jī)浮點(diǎn)運(yùn)算的精度限制,不要單獨(dú)進(jìn)行浮點(diǎn)數(shù)的精確比較,應(yīng)在嚴(yán)格的容差級范圍內(nèi)檢驗(yàn)兩個(gè)值的差異,其形式為:

|x0﹣x1|<ε其中ε是容差級,其大小取決于具體應(yīng)用中的精度要求。確保所有變量在使用前都進(jìn)行了初始化。2)可讀性要求(續(xù))

數(shù)據(jù)說明數(shù)據(jù)說明的先后次序規(guī)范化:簡單變量類型說明、數(shù)組說明、公用數(shù)據(jù)塊說明、文件說明每個(gè)類型說明中可按如下順序排列:整型量說明 、實(shí)型量說明、字符量說明、邏輯量說明1條說明語句中按字母順序排列,例如:INTEGEREcost,length,price,width3)正確性與容錯(cuò)性要求程序首先是正確,其次是考慮優(yōu)美和效率。對所有的用戶輸入,必須進(jìn)行合法性和有效性檢查。不要單獨(dú)進(jìn)行浮點(diǎn)數(shù)的比較。在計(jì)算機(jī)中用二進(jìn)制表示十進(jìn)制數(shù)時(shí),有時(shí)二進(jìn)制數(shù)不能準(zhǔn)確地表達(dá)十進(jìn)制數(shù),這時(shí)浮點(diǎn)數(shù)的表示具有不準(zhǔn)確性。用它們做比較,其結(jié)果常常發(fā)生異常情況。解決辦法是在嚴(yán)格的容差級范圍內(nèi)檢驗(yàn)兩個(gè)值的差異,其形式為:|x0﹣x1|<ε其中ε是容差級,其大小取決于具體應(yīng)用中的總體精度要求及所用數(shù)值的精度。3)正確性與容錯(cuò)性要求(續(xù))所有變量在調(diào)用前必須被初始化。改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對其它程序的影響。單元測試也是編程的一部分,提交聯(lián)調(diào)測試的程序必須通過單元測試。單元測試時(shí),必須針對類里的每一個(gè)public方法進(jìn)行測試,測試其正確的輸入,是否得到正確的輸出;錯(cuò)誤的輸入是否得到相應(yīng)的容錯(cuò)處理(如異常捕捉處理,返回錯(cuò)誤提示等)。4)可移植性要求應(yīng)當(dāng)盡量使用語言的標(biāo)準(zhǔn)部分,避免使用第三方提供的接口,以確保程序不受具體的運(yùn)行環(huán)境影響,和平臺(tái)無關(guān)。對數(shù)據(jù)庫的操作,使用符合語言規(guī)范的標(biāo)準(zhǔn)接口類例如JDBC,除非程序是運(yùn)行于特定的環(huán)境下,并且有很高的性能優(yōu)化方面的要求。程序中涉及到的數(shù)據(jù)庫定義和操縱語句,盡量使用標(biāo)準(zhǔn)SQL數(shù)據(jù)類型和SQL語句5)輸入和輸出要求任何程序都會(huì)有輸入輸出,輸入輸出的方式應(yīng)當(dāng)盡量方便用戶的使用。系統(tǒng)能否為用戶接受,很大程度上取決于輸入輸出的風(fēng)格。在需求分析和設(shè)計(jì)階段就應(yīng)確定基本的輸入輸出風(fēng)格,要避免因設(shè)計(jì)不當(dāng)帶來操作和理解的麻煩。5)輸入和輸出要求(續(xù))對所有的輸入數(shù)據(jù)進(jìn)行檢驗(yàn),從而識(shí)別錯(cuò)誤的輸入,以保證每個(gè)數(shù)據(jù)的有效性。檢查輸入項(xiàng)各種重要組合的合理性,必要時(shí)報(bào)告輸入狀態(tài)信息。輸入的步驟和操作盡可能簡單,并

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論