軟件工程導(dǎo)論6程序編碼_第1頁
軟件工程導(dǎo)論6程序編碼_第2頁
軟件工程導(dǎo)論6程序編碼_第3頁
軟件工程導(dǎo)論6程序編碼_第4頁
軟件工程導(dǎo)論6程序編碼_第5頁
已閱讀5頁,還剩239頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、軟件工程導(dǎo)論(軟件工程導(dǎo)論(6)程序編碼程序編碼南京理工大學(xué)南京理工大學(xué)汪惠芬汪惠芬2004年年9月月30日日軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-292第六章第六章 程序編碼程序編碼前面介紹的軟件工程步驟都是為前面介紹的軟件工程步驟都是為了邁向一個(gè)最終的目標(biāo):將了邁向一個(gè)最終的目標(biāo):將“軟件表軟件表示示”變換成計(jì)算機(jī)能夠變換成計(jì)算機(jī)能夠“理解理解”的形的形式。式。作為軟件工程的一個(gè)階段,程序作為軟件工程的一個(gè)階段,程序編碼是設(shè)計(jì)的繼續(xù)。然而,在編碼中編碼是設(shè)計(jì)的繼續(xù)。然而,在編碼中遇到的問題,如程序設(shè)計(jì)語言的特性遇到的問題,如程序設(shè)計(jì)語言的特性和程序設(shè)計(jì)風(fēng)格會(huì)深刻影響軟件的質(zhì)和程

2、序設(shè)計(jì)風(fēng)格會(huì)深刻影響軟件的質(zhì)量和可維護(hù)性。本章將從軟件工程這量和可維護(hù)性。本章將從軟件工程這個(gè)更廣泛的范圍討論與程序設(shè)計(jì)語言個(gè)更廣泛的范圍討論與程序設(shè)計(jì)語言及程序編碼有關(guān)的問題,而不具體介及程序編碼有關(guān)的問題,而不具體介紹如何編寫程序。紹如何編寫程序。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-293第六章第六章 程序編碼程序編碼6.1 程序設(shè)計(jì)語言程序設(shè)計(jì)語言6.2 對(duì)源程序的質(zhì)量要求對(duì)源程序的質(zhì)量要求6.3 程序復(fù)雜度度量程序復(fù)雜度度量6.4 程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格6.5 結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)6.6 面向?qū)ο蠹夹g(shù)面向?qū)ο蠹?/p>

3、術(shù)6.7 本章小結(jié)本章小結(jié)設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-2946.1 程序設(shè)計(jì)語言程序設(shè)計(jì)語言程序設(shè)計(jì)語言是人與計(jì)算程序設(shè)計(jì)語言是人與計(jì)算機(jī)通信的基本工具。使用程機(jī)通信的基本工具。使用程序設(shè)計(jì)語言編寫程序時(shí)一項(xiàng)序設(shè)計(jì)語言編寫程序時(shí)一項(xiàng)人類特定的智力活動(dòng)。因此,人類特定的智力活動(dòng)。因此,程序設(shè)計(jì)語言的特點(diǎn)當(dāng)然會(huì)程序設(shè)計(jì)語言的特點(diǎn)當(dāng)然會(huì)影響人的思維和解決問題的影響人的思維和解決問題的方式,影響程序的可讀性和方式,影響程序的可讀性和可理解性??衫斫庑浴TO(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)

4、導(dǎo) 論論2021-11-2956.1 程序設(shè)計(jì)語言程序設(shè)計(jì)語言6.1.1 程序設(shè)計(jì)語言分類程序設(shè)計(jì)語言分類6.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性6.1.3 選擇程序設(shè)計(jì)語言準(zhǔn)則選擇程序設(shè)計(jì)語言準(zhǔn)則設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-2966.1.1 程序設(shè)計(jì)語言分類程序設(shè)計(jì)語言分類設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化程序設(shè)計(jì)語言程序設(shè)計(jì)語言低級(jí)語言低級(jí)語言(面向機(jī)器)(面向機(jī)器)高級(jí)語言高級(jí)語言從應(yīng)用從應(yīng)用角度分角度分從語言實(shí)現(xiàn)角度分從語言實(shí)現(xiàn)角度分機(jī)器指令系統(tǒng)機(jī)器指令系統(tǒng)匯編語言匯編語言傳統(tǒng)高

5、級(jí)語言傳統(tǒng)高級(jí)語言(面向過程)(面向過程)超高級(jí)語言超高級(jí)語言(第四代語言第四代語言)系統(tǒng)實(shí)現(xiàn)語言系統(tǒng)實(shí)現(xiàn)語言靜態(tài)語言靜態(tài)語言塊結(jié)構(gòu)語言塊結(jié)構(gòu)語言動(dòng)態(tài)語言動(dòng)態(tài)語言經(jīng)典程序設(shè)計(jì)語經(jīng)典程序設(shè)計(jì)語言言通用結(jié)構(gòu)化語言通用結(jié)構(gòu)化語言專用語言專用語言查詢語言查詢語言應(yīng)用程序生成器應(yīng)用程序生成器原型語言原型語言圖形語言圖形語言軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-2976.1.1 程序設(shè)計(jì)語言分類程序設(shè)計(jì)語言分類設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化低級(jí)語言:面向機(jī)器的語言低級(jí)語言:面向機(jī)器的語言 機(jī)器指令語言:由二進(jìn)制代碼表示,直接面向機(jī)器,與具體處理結(jié)構(gòu)密切相關(guān),高度專業(yè)化,編

6、程效率極低。 匯編語言:為解決機(jī)器語言編程效率低的問題而設(shè)計(jì),也直接面向機(jī)器,與具體處理結(jié)構(gòu)密切相關(guān),對(duì)應(yīng)唯一的指令系統(tǒng)。但由于采用的符號(hào)系統(tǒng)由英語短語或縮寫演變而來,并提供符號(hào)地址處理和宏功能,減少了程序員的工作量,降低了出錯(cuò)率。軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-2986.1.1 程序設(shè)計(jì)語言分類程序設(shè)計(jì)語言分類設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化傳統(tǒng)的高級(jí)語言:傳統(tǒng)的高級(jí)語言: 經(jīng)典程序設(shè)計(jì)語言:fortran ( formula translation)、algol語言、cobol(common business oriented language)語言、

7、basic(beginnera all-purpose symbolic instruction code)語言。 通用結(jié)構(gòu)化語言:pl1(programming language one)、pascal語言、ada語言、c語言。 專用語言:apl語言、forth語言、lisp語言、prolog語言、java。軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-2996.1.1 程序設(shè)計(jì)語言分類程序設(shè)計(jì)語言分類設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化超高級(jí)語言:第四代語言超高級(jí)語言:第四代語言 查詢語言:sql語言。 應(yīng)用程序生成器 原型語言 圖形語言軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論

8、論2021-11-29106.1.1 程序設(shè)計(jì)語言分類程序設(shè)計(jì)語言分類設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化高級(jí)語言:高級(jí)語言:從語言實(shí)現(xiàn)角度劃分從語言實(shí)現(xiàn)角度劃分 系統(tǒng)實(shí)現(xiàn)語言:c 靜態(tài)語言:cobol、fortran 塊結(jié)構(gòu)語言:pascal、c 動(dòng)態(tài)語言:lisp、prolog、log軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29116.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性程序?qū)ο蟮拿终f明:程序?qū)ο蟮拿终f明:程序?qū)ο蟀ǔ绦蛑谐霈F(xiàn)程序?qū)ο蟀ǔ绦蛑谐霈F(xiàn)的變量、常量、類型、過程、的變量、常量、類型、過程、函數(shù)等。特別是變量、常量說函數(shù)等。特別是變量

9、、常量說明。預(yù)先說明程序?qū)ο竺值拿?。預(yù)先說明程序?qū)ο竺值暮锰幨菫榫幾g提供了檢查源程好處是為編譯提供了檢查源程序中名字引用的合法性。序中名字引用的合法性。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29126.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性類型說明:類型說明:類型說明與名字說明密切相關(guān),類型說明與名字說明密切相關(guān),不僅是一種提高程序安全性的措施,不僅是一種提高程序安全性的措施,更重要的是提高了實(shí)現(xiàn)抽象數(shù)據(jù)類型更重要的是提高了實(shí)現(xiàn)抽象數(shù)據(jù)類型的機(jī)制,是程序員無需過多關(guān)心抽象的機(jī)制,是程序員無需過多關(guān)心抽象數(shù)據(jù)類型的

10、物理存儲(chǔ)實(shí)現(xiàn)機(jī)制。數(shù)據(jù)類型的物理存儲(chǔ)實(shí)現(xiàn)機(jī)制。通常類型說明包括兩方面:通常類型說明包括兩方面: 基本類型說明 構(gòu)造類型說明設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29136.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性變量初始化:變量初始化:在程序中一個(gè)變量引用前是否在程序中一個(gè)變量引用前是否要求初始化以及如何初始化是一個(gè)要求初始化以及如何初始化是一個(gè)重要問題。如:重要問題。如: basic:數(shù)值變量缺省初始化為 fortran:內(nèi)存變量缺省初始化為.f. c:自動(dòng)變量初始化的值不定,靜態(tài)變量缺省初始化為,并可在變量說明時(shí)進(jìn)

11、行顯示初始化設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29146.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性程序?qū)ο蟮木植啃裕撼绦驅(qū)ο蟮木植啃裕焊鶕?jù)局部化與信息隱蔽原理,根據(jù)局部化與信息隱蔽原理,一個(gè)程序?qū)ο笾荒茉诔绦蛑姓嬲枰粋€(gè)程序?qū)ο笾荒茉诔绦蛑姓嬲枰?它 的 那 些 部 分 才 能 訪 問 。要 它 的 那 些 部 分 才 能 訪 問 。fortran、c提供的是單層局部性,提供的是單層局部性,而而pascal提供的是所層局部性。單提供的是所層局部性。單層局部性有助于塊獨(dú)立編譯的實(shí)現(xiàn),層局部性有助于塊獨(dú)立編譯的實(shí)現(xiàn),

12、多層局部性有助于提高程序的可讀多層局部性有助于提高程序的可讀性,但內(nèi)外層對(duì)象同名有可能引起性,但內(nèi)外層對(duì)象同名有可能引起差錯(cuò)。差錯(cuò)。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29156.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性程序模塊:程序模塊:程序模塊的塊結(jié)構(gòu)提供了程序模塊的塊結(jié)構(gòu)提供了控制程序?qū)ο竺挚梢娦缘氖挚刂瞥绦驅(qū)ο竺挚梢娦缘氖侄?,主要表現(xiàn)為內(nèi)層程序塊中段,主要表現(xiàn)為內(nèi)層程序塊中說明的名字外層不可訪問。說明的名字外層不可訪問。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論

13、2021-11-29166.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性循環(huán)控制結(jié)構(gòu):循環(huán)控制結(jié)構(gòu):常見的有常見的有for結(jié)構(gòu)、結(jié)構(gòu)、while結(jié)構(gòu)、結(jié)構(gòu)、until結(jié)構(gòu),問題是應(yīng)用中常要求在循結(jié)構(gòu),問題是應(yīng)用中常要求在循環(huán)體內(nèi)測試條件以決定是否退出循環(huán)環(huán)體內(nèi)測試條件以決定是否退出循環(huán)或 終 止 本 次 循 環(huán) 。 如 果 使 用或 終 止 本 次 循 環(huán) 。 如 果 使 用ifthenelse語句和附加布爾變量語句和附加布爾變量實(shí)現(xiàn),則將增加程序復(fù)雜性與程序長實(shí)現(xiàn),則將增加程序復(fù)雜性與程序長度,許多語言提供了度,許多語言提供了exit loop語句實(shí)語句實(shí)現(xiàn)循環(huán)體內(nèi)的非正常退出。現(xiàn)循

14、環(huán)體內(nèi)的非正常退出。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29176.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性分支結(jié)構(gòu):分支結(jié)構(gòu):多選擇結(jié)構(gòu)可能出現(xiàn)以下問題:多選擇結(jié)構(gòu)可能出現(xiàn)以下問題:(1)case表達(dá)式值不在預(yù)先指表達(dá)式值不在預(yù)先指定的范圍內(nèi)定的范圍內(nèi)(2)當(dāng)一個(gè))當(dāng)一個(gè)case執(zhí)行完畢控制執(zhí)行完畢控制時(shí)自動(dòng)退出多重選擇還是順序時(shí)自動(dòng)退出多重選擇還是順序執(zhí)行下一個(gè)執(zhí)行下一個(gè)case?設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29186.1.2 程序設(shè)計(jì)語言

15、的特征屬性程序設(shè)計(jì)語言的特征屬性二義性問題:二義性問題:語言的結(jié)構(gòu)是否是程序員產(chǎn)語言的結(jié)構(gòu)是否是程序員產(chǎn)生誤解,是一個(gè)重要特征。生誤解,是一個(gè)重要特征。如:如:x=abc可以理解成:可以理解成:x=(ab)c 或者或者 x=a(bc)設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29196.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性異常處理:異常處理:大多數(shù)語言缺乏測試和響應(yīng)出大多數(shù)語言缺乏測試和響應(yīng)出錯(cuò)等異常處理的機(jī)制,程序員只能錯(cuò)等異常處理的機(jī)制,程序員只能使用普通條件控制結(jié)構(gòu)顯示地測試使用普通條件控制結(jié)構(gòu)顯示地測試異常,但

16、當(dāng)程序中包含一系列子程異常,但當(dāng)程序中包含一系列子程序嵌套時(shí),不能有效地將一個(gè)異常序嵌套時(shí),不能有效地將一個(gè)異常信息傳送到指定的處理程序中。信息傳送到指定的處理程序中。pl/1、ada、foxpro等語言提供了等語言提供了異常處理機(jī)制。異常處理機(jī)制。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29206.1.2 程序設(shè)計(jì)語言的特征屬性程序設(shè)計(jì)語言的特征屬性獨(dú)立編譯:獨(dú)立編譯:語言提供程序塊的獨(dú)立編譯意語言提供程序塊的獨(dú)立編譯意味著一個(gè)大型系統(tǒng)可以由多個(gè)程序味著一個(gè)大型系統(tǒng)可以由多個(gè)程序員并行開發(fā),單獨(dú)調(diào)試,在維護(hù)過員并行開發(fā),單獨(dú)調(diào)試,

17、在維護(hù)過程中如果修改某一模塊無需對(duì)整個(gè)程中如果修改某一模塊無需對(duì)整個(gè)系統(tǒng)重新編譯,然后重新連接即可。系統(tǒng)重新編譯,然后重新連接即可。在 軟 件 工 程 中 廣 泛 使 用在 軟 件 工 程 中 廣 泛 使 用 c 和和fortran的一個(gè)重要原因就是其獨(dú)的一個(gè)重要原因就是其獨(dú)立編譯性。立編譯性。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29216.1.3 選擇程序設(shè)計(jì)語言準(zhǔn)則選擇程序設(shè)計(jì)語言準(zhǔn)則一般情況下,高級(jí)語言比一般情況下,高級(jí)語言比匯編語言容易實(shí)現(xiàn),源程序的匯編語言容易實(shí)現(xiàn),源程序的可讀性好,容易測試、維護(hù),可讀性好,容易測試、

18、維護(hù),但是在許多特定的場合匯編語但是在許多特定的場合匯編語言是唯一的選擇,如:對(duì)程序言是唯一的選擇,如:對(duì)程序執(zhí)行的時(shí)間、空間限制十分嚴(yán)執(zhí)行的時(shí)間、空間限制十分嚴(yán)格,體系結(jié)構(gòu)特殊,執(zhí)行時(shí)間格,體系結(jié)構(gòu)特殊,執(zhí)行時(shí)間非常關(guān)鍵的部分代碼。非常關(guān)鍵的部分代碼。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29226.1.3 選擇程序設(shè)計(jì)語言準(zhǔn)則選擇程序設(shè)計(jì)語言準(zhǔn)則高級(jí)語言的選擇標(biāo)準(zhǔn):高級(jí)語言的選擇標(biāo)準(zhǔn): 應(yīng)該具有模塊化機(jī)制應(yīng)該具有模塊化機(jī)制 可讀性好可讀性好 控制結(jié)構(gòu)滿足結(jié)構(gòu)化要求控制結(jié)構(gòu)滿足結(jié)構(gòu)化要求 數(shù)據(jù)類型豐富數(shù)據(jù)類型豐富 編譯效率高且查

19、錯(cuò)能力強(qiáng)編譯效率高且查錯(cuò)能力強(qiáng) 具有獨(dú)立編譯機(jī)制具有獨(dú)立編譯機(jī)制設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29236.1.3 選擇程序設(shè)計(jì)語言準(zhǔn)則選擇程序設(shè)計(jì)語言準(zhǔn)則實(shí)現(xiàn)環(huán)境的限制:實(shí)現(xiàn)環(huán)境的限制:用戶要求用戶要求可以得到的語言系統(tǒng)可以得到的語言系統(tǒng)可以得到的軟件工具可以得到的軟件工具工程規(guī)模工程規(guī)模程序員的知識(shí)與經(jīng)驗(yàn)程序員的知識(shí)與經(jīng)驗(yàn)可移植性要求可移植性要求應(yīng)用領(lǐng)域應(yīng)用領(lǐng)域設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-2924概述:概述:為了保證程序編碼的質(zhì)量,為了保證程序編碼

20、的質(zhì)量,程序員必須深刻地理解、熟練程序員必須深刻地理解、熟練地掌握并正確地運(yùn)用程序設(shè)計(jì)地掌握并正確地運(yùn)用程序設(shè)計(jì)語言的特性,例如一些語法規(guī)語言的特性,例如一些語法規(guī)則和語義的細(xì)節(jié)。只有語法上則和語義的細(xì)節(jié)。只有語法上沒有錯(cuò)誤的程序才能通過編譯沒有錯(cuò)誤的程序才能通過編譯系統(tǒng)的語法檢查。系統(tǒng)的語法檢查。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化6.2 對(duì)源程序的質(zhì)量要求對(duì)源程序的質(zhì)量要求軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-2925內(nèi)容:內(nèi)容:軟件工程項(xiàng)目對(duì)代碼編寫軟件工程項(xiàng)目對(duì)代碼編寫的要求,不僅僅是源程序語法的要求,不僅僅是源程序語法上的正確性,也不只是源程序上的正確性,

21、也不只是源程序中沒有各種錯(cuò)誤,此外,還要中沒有各種錯(cuò)誤,此外,還要求源程序具有良好的結(jié)構(gòu)性和求源程序具有良好的結(jié)構(gòu)性和良好的程序設(shè)計(jì)風(fēng)格。良好的程序設(shè)計(jì)風(fēng)格。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化6.2 對(duì)源程序的質(zhì)量要求對(duì)源程序的質(zhì)量要求軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-2926目的:目的: 源程序除了送入計(jì)算機(jī)運(yùn)行外,還源程序除了送入計(jì)算機(jī)運(yùn)行外,還必須讓人能夠容易讀懂;必須讓人能夠容易讀懂; 源程序便于測試和排除所發(fā)現(xiàn)的程源程序便于測試和排除所發(fā)現(xiàn)的程序故障,使軟件具有較高的可靠性;序故障,使軟件具有較高的可靠性; 在軟件使用過程中,源程序能夠根在軟件使用過

22、程中,源程序能夠根據(jù)用戶的需要很容易擴(kuò)充其功能及據(jù)用戶的需要很容易擴(kuò)充其功能及改善其性能,使軟件具有較好的可改善其性能,使軟件具有較好的可維護(hù)性。維護(hù)性。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化6.2 對(duì)源程序的質(zhì)量要求對(duì)源程序的質(zhì)量要求軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29276.3 程序復(fù)雜度度量程序復(fù)雜度度量程序復(fù)雜性是指模塊內(nèi)程序的程序復(fù)雜性是指模塊內(nèi)程序的復(fù)雜性。它直接關(guān)系到軟件開發(fā)費(fèi)復(fù)雜性。它直接關(guān)系到軟件開發(fā)費(fèi)用的多少、開發(fā)周期的長短和軟件用的多少、開發(fā)周期的長短和軟件內(nèi)部潛伏錯(cuò)誤的多少,同時(shí)它也是內(nèi)部潛伏錯(cuò)誤的多少,同時(shí)它也是軟件可理解性的另一種度量

23、。軟件可理解性的另一種度量。減少程序復(fù)雜性,可以提高軟減少程序復(fù)雜性,可以提高軟件的簡單性和可理解性,并使軟件件的簡單性和可理解性,并使軟件開發(fā)費(fèi)用減少,開發(fā)周期縮短,軟開發(fā)費(fèi)用減少,開發(fā)周期縮短,軟件內(nèi)部潛藏錯(cuò)誤減少。件內(nèi)部潛藏錯(cuò)誤減少。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29286.3 程序復(fù)雜度度量程序復(fù)雜度度量為了度量程序復(fù)雜性,要求為了度量程序復(fù)雜性,要求復(fù)雜性度量滿足以下假設(shè):復(fù)雜性度量滿足以下假設(shè): 它可以用來計(jì)算任何一個(gè)程序的復(fù)雜性 對(duì)于不合理的程序,不應(yīng)當(dāng)用它進(jìn)行復(fù)雜性計(jì)算 如果程序中指令條數(shù)、附加存儲(chǔ)量、計(jì)算

24、時(shí)間增多,不會(huì)減少程序的復(fù)雜性設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29296.3 程序復(fù)雜度度量程序復(fù)雜度度量6.3.1 代碼行度量法代碼行度量法6.3.2 mccabe度量法度量法6.3.3 halstead的軟件科學(xué)的軟件科學(xué)設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29306.3.1 代碼行度量法代碼行度量法概念:概念:代碼行度量法是統(tǒng)計(jì)一個(gè)程序模代碼行度量法是統(tǒng)計(jì)一個(gè)程序模塊的源代碼行數(shù),并以源代碼行數(shù)作塊的源代碼行數(shù),并以源代碼行數(shù)作為程序復(fù)雜性的度量。為程序

25、復(fù)雜性的度量。設(shè)每行代碼的出錯(cuò)率為每設(shè)每行代碼的出錯(cuò)率為每100行行原程序中可能有的錯(cuò)誤數(shù)目。例如,原程序中可能有的錯(cuò)誤數(shù)目。例如,每行代碼出錯(cuò)率為每行代碼出錯(cuò)率為1,則是指每,則是指每100行源程序中可能有一個(gè)錯(cuò)誤。行源程序中可能有一個(gè)錯(cuò)誤。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29316.3.1 代碼行度量法代碼行度量法對(duì)于少于對(duì)于少于100個(gè)語句的小程序,個(gè)語句的小程序,源代碼行數(shù)與出錯(cuò)率是線性相關(guān)源代碼行數(shù)與出錯(cuò)率是線性相關(guān)的。隨著程序的增大,出錯(cuò)率以的。隨著程序的增大,出錯(cuò)率以非線性方式增長。因此,代碼行非線性方式增長。

26、因此,代碼行度量法只是一個(gè)簡單的,估計(jì)得度量法只是一個(gè)簡單的,估計(jì)得很粗糙的方法。很粗糙的方法。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29326.3.2 mccabe度量法度量法概念:概念:mccabe度量法是一種基于程度量法是一種基于程序控制流的復(fù)雜性度量方法。、序控制流的復(fù)雜性度量方法。、mccabe定義的程序復(fù)雜性度量值定義的程序復(fù)雜性度量值又稱環(huán)路復(fù)雜度,它基于一個(gè)程又稱環(huán)路復(fù)雜度,它基于一個(gè)程序模塊的程序圖中環(huán)路的個(gè)數(shù),序模塊的程序圖中環(huán)路的個(gè)數(shù),因此計(jì)算它先要畫出程序圖。因此計(jì)算它先要畫出程序圖。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)

27、格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29336.3.2 mccabe度量法度量法程序圖:程序圖:程序圖是退化的程序流程圖。把程序程序圖是退化的程序流程圖。把程序流程圖中每個(gè)處理符號(hào)都退化成一個(gè)結(jié)點(diǎn),流程圖中每個(gè)處理符號(hào)都退化成一個(gè)結(jié)點(diǎn),原來聯(lián)接不同處理符號(hào)的流線變成聯(lián)接不原來聯(lián)接不同處理符號(hào)的流線變成聯(lián)接不同結(jié)點(diǎn)的有向弧,這樣得到的有向圖叫作同結(jié)點(diǎn)的有向弧,這樣得到的有向圖叫作程序圖。程序圖。程序圖僅描述程序內(nèi)的控制流程,完程序圖僅描述程序內(nèi)的控制流程,完全不表現(xiàn)對(duì)數(shù)據(jù)的具體操作,以及分支和全不表現(xiàn)對(duì)數(shù)據(jù)的具體操作,以及分支和循環(huán)的具體條件。因此,它

28、往往把一個(gè)簡循環(huán)的具體條件。因此,它往往把一個(gè)簡單的單的if語句與循環(huán)語句的復(fù)雜性看成是一語句與循環(huán)語句的復(fù)雜性看成是一樣的,把嵌套的樣的,把嵌套的if語句與語句與case語句的復(fù)雜語句的復(fù)雜性看成是一樣的。性看成是一樣的。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29346.3.2 mccabe度量法度量法計(jì)算環(huán)路復(fù)雜性的方法:計(jì)算環(huán)路復(fù)雜性的方法:根據(jù)圖論,在一個(gè)強(qiáng)連通的有向根據(jù)圖論,在一個(gè)強(qiáng)連通的有向圖圖g中,環(huán)的個(gè)數(shù)由以下公式給出:中,環(huán)的個(gè)數(shù)由以下公式給出:v(g)mnp其中,其中,v(g)是有向圖)是有向圖g中環(huán)路中環(huán)路數(shù)

29、,數(shù),m是圖是圖g中弧數(shù),中弧數(shù),n是圖是圖g中結(jié)點(diǎn)中結(jié)點(diǎn)數(shù),數(shù),p是圖是圖g中的強(qiáng)連通分量個(gè)數(shù)。中的強(qiáng)連通分量個(gè)數(shù)。對(duì)于復(fù)合判定,如(對(duì)于復(fù)合判定,如(a=0)and(c=d)or(x=a)計(jì)作)計(jì)作3個(gè)判定。個(gè)判定。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29356.3.2 mccabe度量法度量法在一個(gè)程序中,從程序的入在一個(gè)程序中,從程序的入口點(diǎn)總能到達(dá)圖中任何一個(gè)結(jié)點(diǎn),口點(diǎn)總能到達(dá)圖中任何一個(gè)結(jié)點(diǎn),因此,程序總是連通的,但不是因此,程序總是連通的,但不是強(qiáng)連通的。為了使圖成為強(qiáng)連通強(qiáng)連通的。為了使圖成為強(qiáng)連通圖,從圖的入口

30、點(diǎn)到出口點(diǎn)加一圖,從圖的入口點(diǎn)到出口點(diǎn)加一條用虛線表示的有向邊,使圖成條用虛線表示的有向邊,使圖成為強(qiáng)連通圖。這樣可以使用上式為強(qiáng)連通圖。這樣可以使用上式計(jì)算環(huán)路復(fù)雜性。計(jì)算環(huán)路復(fù)雜性。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29366.3.2 mccabe度量法度量法示例:示例:設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化n=11,m=13,p=1 v(g)131113a 開始開始bc 輸入輸入defgh 輸入輸入k 輸入輸入l 結(jié)束結(jié)束jabcdefghklj軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29376.

31、3.2 mccabe度量法度量法假定模塊是單入口單出口的假定模塊是單入口單出口的程序,整個(gè)模塊中只有一個(gè)程序,程序,整個(gè)模塊中只有一個(gè)程序,這時(shí)這時(shí)p1。因此可以簡化公式,。因此可以簡化公式,不加從出口到入口的那條虛線而不加從出口到入口的那條虛線而當(dāng)作無向圖:當(dāng)作無向圖:v(g)mn2設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29386.3.2 mccabe度量法度量法當(dāng)分支或循環(huán)的數(shù)目增加時(shí),當(dāng)分支或循環(huán)的數(shù)目增加時(shí),程序中的環(huán)路也隨之增加,因此,程序中的環(huán)路也隨之增加,因此,mccabe環(huán)路復(fù)雜度度量值實(shí)際上環(huán)路復(fù)雜度度量值實(shí)際上

32、是為軟件測試的難易程度提供了是為軟件測試的難易程度提供了一個(gè)定量度量的方法,同時(shí)也間一個(gè)定量度量的方法,同時(shí)也間接地表示了軟件的可靠性。接地表示了軟件的可靠性。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29396.3.2 mccabe度量法度量法幾點(diǎn)說明:幾點(diǎn)說明:(1)環(huán)路復(fù)雜度取決于程序控)環(huán)路復(fù)雜度取決于程序控制結(jié)構(gòu)的復(fù)雜度;制結(jié)構(gòu)的復(fù)雜度;(2)環(huán)路復(fù)雜度是可加的;)環(huán)路復(fù)雜度是可加的;(3)mccabe建議,對(duì)于復(fù)雜度建議,對(duì)于復(fù)雜度超過超過10的程序,應(yīng)分成幾的程序,應(yīng)分成幾個(gè)小程序,以減少程序中個(gè)小程序,以減少程序中的錯(cuò)

33、誤。的錯(cuò)誤。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29406.3.2 mccabe度量法度量法缺點(diǎn):缺點(diǎn):對(duì)于不同種類的控制流的復(fù)雜性不能對(duì)于不同種類的控制流的復(fù)雜性不能區(qū)分;區(qū)分;簡單簡單if語句與循環(huán)語句的復(fù)雜性同等語句與循環(huán)語句的復(fù)雜性同等看待;看待;嵌套嵌套if語句與簡單語句與簡單case語句的復(fù)雜性語句的復(fù)雜性是一樣的;是一樣的;模塊間接口當(dāng)成一個(gè)簡單分支處理;模塊間接口當(dāng)成一個(gè)簡單分支處理;一個(gè)具有一個(gè)具有1000行的順序程序與一行語行的順序程序與一行語句的復(fù)雜性相同。句的復(fù)雜性相同。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊?/p>

34、章小結(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29416.3.3 halstead的軟件科學(xué)的軟件科學(xué)概述:概述:halstead軟件科學(xué)確定了計(jì)算軟件科學(xué)確定了計(jì)算機(jī)軟件開發(fā)中的一些定量規(guī)律,機(jī)軟件開發(fā)中的一些定量規(guī)律,它采用的一組基本度量值通常是它采用的一組基本度量值通常是在程序產(chǎn)生之后得出,或者在程在程序產(chǎn)生之后得出,或者在程序 設(shè) 計(jì) 完 成 之 后 估 算 出 。序 設(shè) 計(jì) 完 成 之 后 估 算 出 。halstead度量是目前最好的度量度量是目前最好的度量方法。方法。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論202

35、1-11-29426.3.3 halstead的軟件科學(xué)的軟件科學(xué)程序長度(預(yù)測的程序長度(預(yù)測的halstead長度):長度):其中,其中,n1表示程序中不同運(yùn)算符(包表示程序中不同運(yùn)算符(包括保留字)的個(gè)數(shù),括保留字)的個(gè)數(shù),n2表示程序中不同運(yùn)表示程序中不同運(yùn)算對(duì)象的個(gè)數(shù)。算對(duì)象的個(gè)數(shù)。運(yùn)算符包括:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏運(yùn)算符包括:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值符(或:)、數(shù)組操作符、輯運(yùn)算符、賦值符(或:)、數(shù)組操作符、分界符(,或;或:)、子程序調(diào)用符、括號(hào)運(yùn)分界符(,或;或:)、子程序調(diào)用符、括號(hào)運(yùn)算符、循環(huán)操作符等。成對(duì)的運(yùn)算符,例如算符、循環(huán)操作符等。成對(duì)的運(yùn)算符

36、,例如“ b e g i n e n d ” 、 “ f o r t o ” 、“ r e p e at u n t i l ” 、 “ w h i l e d o ” 、“ifthenelse”、“()”等都當(dāng)作單一運(yùn)等都當(dāng)作單一運(yùn)算符。運(yùn)算對(duì)象包括變量名和常數(shù)。算符。運(yùn)算對(duì)象包括變量名和常數(shù)。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29436.3.3 halstead的軟件科學(xué)的軟件科學(xué)實(shí)際的實(shí)際的halstead長度:長度:其中,其中,n1為程序中實(shí)際出現(xiàn)為程序中實(shí)際出現(xiàn)的運(yùn)算符總個(gè)數(shù),的運(yùn)算符總個(gè)數(shù),n2為程序中實(shí)為程序中實(shí)

37、際出現(xiàn)的運(yùn)算對(duì)象總個(gè)數(shù)。際出現(xiàn)的運(yùn)算對(duì)象總個(gè)數(shù)。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29446.3.3 halstead的軟件科學(xué)的軟件科學(xué)程序的詞匯表:程序的詞匯表:halstead定義程序的詞匯表為定義程序的詞匯表為不同的運(yùn)算符種類數(shù)和不同的運(yùn)不同的運(yùn)算符種類數(shù)和不同的運(yùn)算對(duì)象種類數(shù)的總和。若令算對(duì)象種類數(shù)的總和。若令n為為程序的詞匯表,則:程序的詞匯表,則:nn1n2設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29456.3.3 halstead的軟件科學(xué)的軟件科學(xué)

38、程序量:程序量:程序量表明了程序在程序量表明了程序在“詞匯詞匯上的復(fù)雜性上的復(fù)雜性”。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29466.3.3 halstead的軟件科學(xué)的軟件科學(xué)程序員工作量:程序員工作量:或或設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29476.3.3 halstead的軟件科學(xué)的軟件科學(xué)程序的潛在錯(cuò)誤:程序的潛在錯(cuò)誤:halstead度量可以用來預(yù)測程序度量可以用來預(yù)測程序中的錯(cuò)誤。認(rèn)為程序中可能存在的差中的錯(cuò)誤。認(rèn)為程序中可能存在的差錯(cuò)應(yīng)與程序的容

39、量成正比。因此程序錯(cuò)應(yīng)與程序的容量成正比。因此程序的錯(cuò)誤數(shù)預(yù)測公式為:的錯(cuò)誤數(shù)預(yù)測公式為:b(n1n2) log2(n1n2)1300設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29486.3.3 halstead的軟件科學(xué)的軟件科學(xué)實(shí)例:實(shí)例:設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化 subroutine sort(x,n) dimension x(n) if (n.lt.2) then do 20 i=2,n do 10 j=1,i if (x(i).ge.x(j) goto 10 save=x(i) x(i)=x(j)

40、 x(j)=save10 continue20 continue return end運(yùn)算符運(yùn)算符可執(zhí)行語句結(jié)束可執(zhí)行語句結(jié)束數(shù)組下標(biāo)數(shù)組下標(biāo)if()()do,程序結(jié)束程序結(jié)束.lt.gt.goto 10n1=10計(jì)數(shù)計(jì)數(shù)7652221111n1=28運(yùn)算對(duì)象運(yùn)算對(duì)象xijn2save1n2=7計(jì)數(shù)計(jì)數(shù)6542221n2=22軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29496.3.3 halstead的軟件科學(xué)的軟件科學(xué)實(shí)例:實(shí)例:h10log210 7log2752.87n282250n107 17v50log2(107)204e52.87 log2(107) (1022) (27

41、)3389.722b(2822) log2(107)13000.068設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29506.3.3 halstead的軟件科學(xué)的軟件科學(xué)halstead的重要結(jié)論之一:的重要結(jié)論之一:程序的實(shí)際程序的實(shí)際halstead長度長度n可可以由詞匯表以由詞匯表n算出。即使程序還算出。即使程序還未編制完成,也能預(yù)先算出程序未編制完成,也能預(yù)先算出程序的實(shí)際的實(shí)際halstead長度長度n,雖然它沒,雖然它沒有明確指出程序中到底有多少個(gè)有明確指出程序中到底有多少個(gè)語句。語句。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦?/p>

42、結(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29516.3.3 halstead的軟件科學(xué)的軟件科學(xué)halstead度量的缺點(diǎn):度量的缺點(diǎn):(1)沒有區(qū)別自己編的程序與)沒有區(qū)別自己編的程序與別人編的程序;別人編的程序;(2)沒有考慮非執(zhí)行語句;)沒有考慮非執(zhí)行語句;(3)在允許混合運(yùn)算的語言中,)在允許混合運(yùn)算的語言中,每中運(yùn)算符必須與它的運(yùn)每中運(yùn)算符必須與它的運(yùn)算對(duì)象相關(guān)。算對(duì)象相關(guān)。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29526.4 程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格程序?qū)嶋H上也是一種供人閱讀程序?qū)嶋H上也是一種供

43、人閱讀的文章,因此,程序員應(yīng)當(dāng)在編寫程的文章,因此,程序員應(yīng)當(dāng)在編寫程序時(shí)多花些工夫,講求程序的風(fēng)格,序時(shí)多花些工夫,講求程序的風(fēng)格,這將大量地減少人們閱讀程序的時(shí)間,這將大量地減少人們閱讀程序的時(shí)間,從整體上看效率是高的。從整體上看效率是高的。本節(jié)將從程序設(shè)計(jì)風(fēng)格的四個(gè)本節(jié)將從程序設(shè)計(jì)風(fēng)格的四個(gè)方面進(jìn)行概要的討論,力圖從編碼原方面進(jìn)行概要的討論,力圖從編碼原則的角度探討提高程序的可讀性,改則的角度探討提高程序的可讀性,改善程序質(zhì)量的方法和途徑。善程序質(zhì)量的方法和途徑。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29536.4 程序設(shè)計(jì)

44、風(fēng)格程序設(shè)計(jì)風(fēng)格6.4.1 源程序文檔化源程序文檔化6.4.2 數(shù)據(jù)說明數(shù)據(jù)說明6.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)6.4.4 輸入和輸出(輸入和輸出(io)設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29546.4.1 源程序文檔化源程序文檔化符號(hào)名的命名:符號(hào)名的命名:符號(hào)名即標(biāo)識(shí)符,包括模塊符號(hào)名即標(biāo)識(shí)符,包括模塊名、變量名、常量名、子程序名名、變量名、常量名、子程序名以及數(shù)據(jù)區(qū)名、緩沖區(qū)名等,這以及數(shù)據(jù)區(qū)名、緩沖區(qū)名等,這些名字應(yīng)能反映它所代表的實(shí)際些名字應(yīng)能反映它所代表的實(shí)際東西,應(yīng)有一定的實(shí)際意義,使東西,應(yīng)有一定的實(shí)際意義,使其能

45、夠見名知意,有助于對(duì)程序其能夠見名知意,有助于對(duì)程序功能的理解。功能的理解。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29556.4.1 源程序文檔化源程序文檔化符號(hào)名的命名:符號(hào)名的命名:名字不是越長越好,過長的名字會(huì)增名字不是越長越好,過長的名字會(huì)增加工作量,給程序員或操作員造成不穩(wěn)定加工作量,給程序員或操作員造成不穩(wěn)定的情緒,會(huì)使程序的邏輯流程變得模糊,的情緒,會(huì)使程序的邏輯流程變得模糊,給修改帶來困難。所以應(yīng)選擇精煉的、意給修改帶來困難。所以應(yīng)選擇精煉的、意義明確的名字,才能簡化程序語句,改善義明確的名字,才能簡化程序語句,改

46、善對(duì)程序功能的理解。對(duì)程序功能的理解。在使用縮寫名字時(shí),縮寫規(guī)則要一致,在使用縮寫名字時(shí),縮寫規(guī)則要一致,并且要給每一個(gè)名字加注釋,同時(shí),在一并且要給每一個(gè)名字加注釋,同時(shí),在一個(gè)程序中,一個(gè)變量只應(yīng)用于一種用途。個(gè)程序中,一個(gè)變量只應(yīng)用于一種用途。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29566.4.1 源程序文檔化源程序文檔化程序的注釋:程序的注釋:夾在程序中的注釋是程序員與日后的夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。正確的注程序讀者之間通信的重要手段。正確的注釋能夠幫助讀者理解程序,可為后續(xù)階段釋能夠幫

47、助讀者理解程序,可為后續(xù)階段進(jìn)行測試和維護(hù)提供明確的指導(dǎo),因此,進(jìn)行測試和維護(hù)提供明確的指導(dǎo),因此,注釋行是必不可少的。大多數(shù)程序設(shè)計(jì)語注釋行是必不可少的。大多數(shù)程序設(shè)計(jì)語言允許使用自然語言寫注釋,這給閱讀程言允許使用自然語言寫注釋,這給閱讀程序帶來很大的方便,一些正規(guī)的程序文本序帶來很大的方便,一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個(gè)源程序的中,注釋行的數(shù)量占到整個(gè)源程序的13到到12之多。之多。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29576.4.1 源程序文檔化源程序文檔化注釋的分類:注釋的分類:(1)序言性注釋)序言性注

48、釋(2)功能性注釋)功能性注釋設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化程序標(biāo)題程序標(biāo)題主要算法主要算法接口說明接口說明有關(guān)本模塊功能和目的的說明有關(guān)本模塊功能和目的的說明用于描述一段程序,而不是每一個(gè)語句用于描述一段程序,而不是每一個(gè)語句用縮進(jìn)和空行,使程序與注釋容易區(qū)別用縮進(jìn)和空行,使程序與注釋容易區(qū)別注釋要正確注釋要正確有關(guān)數(shù)據(jù)描述有關(guān)數(shù)據(jù)描述模塊位置模塊位置開發(fā)簡歷開發(fā)簡歷軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29586.4.1 源程序文檔化源程序文檔化視覺組織視覺組織空格、空行和移行空格、空行和移行:一個(gè)程序如果寫得密密麻麻,分一個(gè)程序如果寫得密密麻麻,分不出層

49、次常常是很難看懂的。一個(gè)優(yōu)不出層次常常是很難看懂的。一個(gè)優(yōu)秀的程序員在利用空格、空行和移行秀的程序員在利用空格、空行和移行的技巧上顯示了他們的經(jīng)驗(yàn)。恰當(dāng)?shù)氐募记缮巷@示了他們的經(jīng)驗(yàn)。恰當(dāng)?shù)乩每崭瘢梢酝怀鲞\(yùn)算的優(yōu)先性,利用空格,可以突出運(yùn)算的優(yōu)先性,避免發(fā)生運(yùn)算的錯(cuò)誤。避免發(fā)生運(yùn)算的錯(cuò)誤。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化例如:例如:(a-17)andnot(b=49)orc(a-17) and not(b=49) or c軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29596.4.2 數(shù)據(jù)說明數(shù)據(jù)說明注意點(diǎn):注意點(diǎn):(1)數(shù)據(jù)說明的次序應(yīng)當(dāng)規(guī)范化,使數(shù))數(shù)據(jù)說明的次序

50、應(yīng)當(dāng)規(guī)范化,使數(shù)據(jù)屬性容易查找,也有利于測試、據(jù)屬性容易查找,也有利于測試、排錯(cuò)和維護(hù);排錯(cuò)和維護(hù);(2)當(dāng)多個(gè)變量名用一個(gè)語句說明時(shí),)當(dāng)多個(gè)變量名用一個(gè)語句說明時(shí),應(yīng)當(dāng)對(duì)這些變量按字母的順序排列;應(yīng)當(dāng)對(duì)這些變量按字母的順序排列;(3)如果設(shè)計(jì)了一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),)如果設(shè)計(jì)了一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)當(dāng)使用注釋行說明在程序?qū)崿F(xiàn)時(shí)應(yīng)當(dāng)使用注釋行說明在程序?qū)崿F(xiàn)時(shí)這個(gè)數(shù)據(jù)結(jié)構(gòu)的固有特點(diǎn)。這個(gè)數(shù)據(jù)結(jié)構(gòu)的固有特點(diǎn)。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29606.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(1)在一行內(nèi)只寫一條語句,并且采取適當(dāng)?shù)?/p>

51、移)在一行內(nèi)只寫一條語句,并且采取適當(dāng)?shù)囊菩懈袷?,使程序的邏輯和功能變得更加明確。行格式,使程序的邏輯和功能變得更加明確。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化for i:=1 to n-1 do begin t:=i;for j:=i+1 to n do if ajatthen t:=j; if ti then beginwork:=at; at:=ai;ai:=work; end endfor i:=1 to n-1 do begin t:=i; for j:=i+1 to n do if ajat then t:=j; if ti then begin work:=at;

52、at:=ai; ai:=work; endend軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29616.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(2)程序編寫首先應(yīng)當(dāng)考慮清晰)程序編寫首先應(yīng)當(dāng)考慮清晰性,不要刻意追求技巧性,性,不要刻意追求技巧性,使程序編寫得過于緊湊。使程序編寫得過于緊湊。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化ai :=ai+at; at:=ai-at;ai:=ai-at;work:=at; at:=ai;ai:=work;軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29626.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(3)程序編寫的要簡單,寫清楚,)程序編

53、寫的要簡單,寫清楚,直截了當(dāng)?shù)卣f明程序員的用意。直截了當(dāng)?shù)卣f明程序員的用意。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化 do 5 i=1,n do 5 j=1,n5 v(i,j)=(i/j)*(j/i)v do 5 i=1,n do 5 j=1,n if (i.eq.j) then v(i,j)=1.0 else v(i,j)=0.0 endif5 continue0 . 10 . 00 . 00 . 1. . .軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29636.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(4)除非對(duì)效率有特殊的要求,程)除非對(duì)效率有特殊的要求,程序編寫要做到清

54、晰第一,效率序編寫要做到清晰第一,效率第二,不要為了追求高效率而第二,不要為了追求高效率而喪失了清晰性。喪失了清晰性。(5)首先要保證程序正確,然后才)首先要保證程序正確,然后才要求提高速度。要求提高速度。(6)讓編譯程序作簡單的優(yōu)化。)讓編譯程序作簡單的優(yōu)化。(7)盡可能使用庫函數(shù)。)盡可能使用庫函數(shù)。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29646.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(8)避免使用臨時(shí)變量而使得可讀)避免使用臨時(shí)變量而使得可讀性下降。性下降。(9)盡量用公用過程或子程序去代)盡量用公用過程或子程序去代替重復(fù)的

55、功能代碼段,但這段替重復(fù)的功能代碼段,但這段代碼應(yīng)具有一個(gè)獨(dú)立的功能。代碼應(yīng)具有一個(gè)獨(dú)立的功能。(10)使用括號(hào)清晰地表達(dá)算術(shù)表達(dá))使用括號(hào)清晰地表達(dá)算術(shù)表達(dá)式和邏輯表達(dá)式的運(yùn)算順序。式和邏輯表達(dá)式的運(yùn)算順序。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29656.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(11)避免不必要的轉(zhuǎn)移,避免使用避免不必要的轉(zhuǎn)移,避免使用goto語句。語句。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化 if (x.lt.y) goto 30 if (y.lt.z) goto 50 small=z goto

56、7030 if (x.lt.z) goto 60 small=z goto 7050 small=y goto 7060 small=x70 continue 實(shí)際上是求實(shí)際上是求x、y、z中的中的最小者,程序只需編成:最小者,程序只需編成:small=xif (y.lt.small) then small=yif (z.lt.small) then small=z 因此,程序應(yīng)當(dāng)簡單,不因此,程序應(yīng)當(dāng)簡單,不必過于深?yuàn)W,避免使用必過于深?yuàn)W,避免使用goto語句繞來繞去。語句繞來繞去。軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29666.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(12)用邏

57、輯表達(dá)式代替分支嵌套。)用邏輯表達(dá)式代替分支嵌套。(13)避免使用空的)避免使用空的else語句和語句和ifthen if的語句,以免出現(xiàn)二義性。的語句,以免出現(xiàn)二義性。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化if (char.ge.0) then if (char.le.9) thenif (char=a) then if (char=z) then print “this is a letter” else print “this is not a letter”if (char.ge.0) .and. (char.le.9) then軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021

58、-11-29676.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(14)避免使用)避免使用else goto和和elsereturn結(jié)構(gòu)。結(jié)構(gòu)。(15)使與判定相聯(lián)系的動(dòng)作盡可能地緊)使與判定相聯(lián)系的動(dòng)作盡可能地緊跟著判定。跟著判定。(16)避免使用過于復(fù)雜的條件測試。)避免使用過于復(fù)雜的條件測試。(17)盡量減少使用)盡量減少使用“否定否定”條件的條件條件的條件矩,不要讓讀者繞彎子想。矩,不要讓讀者繞彎子想。如:如:if not(char9) thenif (char=0) and (char=9) then設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論202

59、1-11-29686.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(18) 避免過多的循環(huán)嵌套和條件嵌套。避免過多的循環(huán)嵌套和條件嵌套。(19)不要使不要使goto語句相互交叉。語句相互交叉。 否則在程否則在程序中會(huì)引起混亂,幾處交叉積累起來,序中會(huì)引起混亂,幾處交叉積累起來,會(huì)使程序十分難讀。會(huì)使程序十分難讀。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化 maxval=a(i) do 40 i=1,10 if (a(i).gt.maxval) goto 30 goto 4030 maxval=a(i)40 continue maxval=a(i) do 40 i=2,10 if (a(i).

60、gt.maxval) then maxval=a(i)40 continue軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29696.4.3 語句結(jié)構(gòu)語句結(jié)構(gòu)要求:要求:(20)對(duì)遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使)對(duì)遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使用遞歸過程。用遞歸過程。(21)經(jīng)常站在讀者的角度自躬反?。海┙?jīng)常站在讀者的角度自躬反?。骸叭绻也皇蔷幋a的人,我能如果我不是編碼的人,我能看懂它嗎?看懂它嗎?”考慮程序的可理考慮程序的可理解性達(dá)到什么程度。解性達(dá)到什么程度。設(shè)計(jì)語言質(zhì)量要求設(shè)計(jì)風(fēng)格面向?qū)ο蟊菊滦〗Y(jié)復(fù)雜度結(jié)構(gòu)化軟軟 件件 工工 程程 導(dǎo)導(dǎo) 論論2021-11-29706.4.4 輸入和輸出(輸入

溫馨提示

  • 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)論