《軟件工程基礎》全套PPT課件
《軟件工程基礎》全套PPT課件,軟件工程基礎,軟件工程,基礎,全套,PPT,課件
5.1 結構化程序設計由于軟件開發(fā)和維護中存在的一系列嚴重由于軟件開發(fā)和維護中存在的一系列嚴重問題,于問題,于2020世紀世紀6060年代爆發(fā)了軟件危機。年代爆發(fā)了軟件危機。為了克服軟件危機,引發(fā)了程序設計的一為了克服軟件危機,引發(fā)了程序設計的一場革命,誕生了場革命,誕生了結構化程序設計方法結構化程序設計方法。5.1 結構化程序設計結構化程序設計的概念與原則結構化程序設計的概念與原則最早由最早由E.W.DijkstraE.W.Dijkstra提出提出;建議從高級語言中取建議從高級語言中取消消GOTOGOTO語句;語句;19661966年,年,BohmBohm和和JacopiniJacopini證明:只用三種基本的證明:只用三種基本的控制結構控制結構“順序順序”、“選擇選擇”和和“循環(huán)循環(huán)”就能實就能實現(xiàn)任何單入口和單出口的沒有現(xiàn)任何單入口和單出口的沒有“死循環(huán)死循環(huán)”的程序。的程序。5.1 結構化程序設計結構程序設計的概念結構程序設計的概念如果一個程序的代碼塊僅僅通過順序、選擇和循如果一個程序的代碼塊僅僅通過順序、選擇和循環(huán)這三種基本控制結構進行連接,并且每個代碼環(huán)這三種基本控制結構進行連接,并且每個代碼塊只有一個入口和一個出口,則稱這個程序是結塊只有一個入口和一個出口,則稱這個程序是結構化的。構化的。5.1 結構化程序設計結構程序設計的主要原則結構程序設計的主要原則(1)(1)使用語言中的順序、選擇、重復等有限的基本控使用語言中的順序、選擇、重復等有限的基本控制結構表示程序邏輯。制結構表示程序邏輯。(2)(2)選用的控制結構只準許有一個入口和一個出口。選用的控制結構只準許有一個入口和一個出口。(3)(3)程序語句組成容易識別的塊(程序語句組成容易識別的塊(BlockBlock),每塊只),每塊只有一個入口和一個出口。有一個入口和一個出口。(4)(4)復雜結構應該用基本控制結構進行組合嵌套來實復雜結構應該用基本控制結構進行組合嵌套來實現(xiàn)。現(xiàn)。(5)(5)語言中沒有的控制結構,可用一段等價的程序段語言中沒有的控制結構,可用一段等價的程序段模擬,模擬,但要求該程序段在整個系統(tǒng)中應前后一致。但要求該程序段在整個系統(tǒng)中應前后一致。5.1 結構化程序設計結構程序設計的主要原則結構程序設計的主要原則(6)(6)嚴格控制嚴格控制GOTOGOTO語句,僅在下列情形才可使用:語句,僅在下列情形才可使用:用非結構化的程序設計語言去實現(xiàn)結構化的構用非結構化的程序設計語言去實現(xiàn)結構化的構造。造。若不使用若不使用GOTOGOTO語句就會使程序功能模糊。語句就會使程序功能模糊。在某種可以改善而不是損害程序可讀性的情況在某種可以改善而不是損害程序可讀性的情況下。例如,在查找結束時,文件訪問結束時,下。例如,在查找結束時,文件訪問結束時,出現(xiàn)錯誤情況要從循環(huán)中轉出時,使用布爾變出現(xiàn)錯誤情況要從循環(huán)中轉出時,使用布爾變量和條件結構來實現(xiàn)就不如用量和條件結構來實現(xiàn)就不如用GOTOGOTO語句來得簡語句來得簡潔易懂。潔易懂。5.1 結構化程序設計結構程序設計的主要原則結構程序設計的主要原則(7)(7)在程序設計過程中,盡量采用自頂向下在程序設計過程中,盡量采用自頂向下(Top(TopDown)Down)、逐步細化、逐步細化(Stepwise Refinement)(Stepwise Refinement)的原則,的原則,由粗到細,一步步展開。由粗到細,一步步展開。5.1 結構化程序設計自頂向下、逐步細化的設計過程自頂向下、逐步細化的設計過程 主要包括兩個方面:主要包括兩個方面:一是將復雜問題的解法分解和細化成由若干個模一是將復雜問題的解法分解和細化成由若干個模塊組成的層次結構;塊組成的層次結構;二是將每個模塊的功能逐步分解細化為一系列的二是將每個模塊的功能逐步分解細化為一系列的處理。處理。5.1 結構化程序設計自頂向下、逐步細化的設計過程自頂向下、逐步細化的設計過程 在處理較大的復雜任務時,常采取在處理較大的復雜任務時,常采取“模塊化模塊化”的的方法,即在程序設計時不是將全部內(nèi)容都放在同方法,即在程序設計時不是將全部內(nèi)容都放在同一個模塊中,而是分成若干個模塊,每個模塊實一個模塊中,而是分成若干個模塊,每個模塊實現(xiàn)一個功能?,F(xiàn)一個功能。模塊分解完成后,下一步的任務就是將每個模塊模塊分解完成后,下一步的任務就是將每個模塊的功能逐步分解細化為一系列的處理。的功能逐步分解細化為一系列的處理。5.1 結構化程序設計自頂向下、逐步細化的設計過程自頂向下、逐步細化的設計過程 在概要設計階段,我們已經(jīng)采用自頂向下、逐步在概要設計階段,我們已經(jīng)采用自頂向下、逐步細化的方法,把復雜問題的解法分解和細化成了細化的方法,把復雜問題的解法分解和細化成了由許多功能模塊組成的層次結構的軟件系統(tǒng)。由許多功能模塊組成的層次結構的軟件系統(tǒng)。在詳細設計和編碼階段,我們還應當采取自頂向在詳細設計和編碼階段,我們還應當采取自頂向下、逐步求精的方法,把模塊的功能逐步分解,下、逐步求精的方法,把模塊的功能逐步分解,細化為一系列具體的步驟,進而翻譯成一系列用細化為一系列具體的步驟,進而翻譯成一系列用某種程序設計語言寫成的程序。某種程序設計語言寫成的程序。5.1 結構化程序設計自頂向下、逐步細化方法舉例自頂向下、逐步細化方法舉例 用篩選法求用篩選法求100100以內(nèi)的素數(shù)。以內(nèi)的素數(shù)。所謂的篩選法,就是從所謂的篩選法,就是從2 2到到100100中去掉中去掉2,3,5,72,3,5,7的倍的倍數(shù),剩下的就是數(shù),剩下的就是100100以內(nèi)的素數(shù)。以內(nèi)的素數(shù)。5.1 結構化程序設計l l首先按程序功能寫出一個框架首先按程序功能寫出一個框架main main main main()()()()建立建立2 2到到100100的數(shù)組的數(shù)組A A,其中,其中AiAi i i;-1-1 建立建立2 2到到1010的素數(shù)表的素數(shù)表B B,存放,存放2 2到到1010以內(nèi)的素數(shù);以內(nèi)的素數(shù);-2-2 若若AiAi i i是是B B 中任一數(shù)的倍數(shù),則剔除中任一數(shù)的倍數(shù),則剔除AiAi;-3-3 輸出輸出A A 中所有沒有被剔除的數(shù);中所有沒有被剔除的數(shù);-4-4 5.1 結構化程序設計l l上述框架中每一個加工語句都可進一步細化成一個循環(huán)語句上述框架中每一個加工語句都可進一步細化成一個循環(huán)語句上述框架中每一個加工語句都可進一步細化成一個循環(huán)語句上述框架中每一個加工語句都可進一步細化成一個循環(huán)語句 main main main main()()()()/*/*/*/*建立建立建立建立2 2 2 2到到到到100100100100的數(shù)組的數(shù)組的數(shù)組的數(shù)組A A A A,其中,其中,其中,其中AiAiAiAi i*/i*/i*/i*/-1 -1 -1 -1 for for for for(i=2i=2i=2i=2;i=100i=100i=100i=100;i+i+i+i+)AiAiAiAi=i=i=i=i;/*/*/*/*建立建立建立建立2 2 2 2到到到到10101010的素數(shù)表的素數(shù)表的素數(shù)表的素數(shù)表B B B B,存放,存放,存放,存放2 2 2 2到到到到10101010以內(nèi)的素數(shù)以內(nèi)的素數(shù)以內(nèi)的素數(shù)以內(nèi)的素數(shù)*/-2 -2 -2 -2 B1=2 B1=2 B1=2 B1=2;B2=3B2=3B2=3B2=3;B3=5B3=5B3=5B3=5;B4=7B4=7B4=7B4=7;/*/*/*/*若若若若AiAiAiAi i i i i是是是是B B B B 中任一數(shù)的倍數(shù),則剔除中任一數(shù)的倍數(shù),則剔除中任一數(shù)的倍數(shù),則剔除中任一數(shù)的倍數(shù),則剔除AiAiAiAi*/*/*/*/-3 -3 -3 -3 for for for for(j=1j=1j=1j=1;j=4j=4j=4j=4;j+j+j+j+)檢查檢查檢查檢查A A A A 所有的數(shù)能否被所有的數(shù)能否被所有的數(shù)能否被所有的數(shù)能否被BjBjBjBj 整除并將能被整除的數(shù)從整除并將能被整除的數(shù)從整除并將能被整除的數(shù)從整除并將能被整除的數(shù)從AAAA中剔除;中剔除;中剔除;中剔除;/*/*/*/*輸出輸出輸出輸出A A A A 中所有沒有被剔除的數(shù)中所有沒有被剔除的數(shù)中所有沒有被剔除的數(shù)中所有沒有被剔除的數(shù)*/-4 -4 -4 -4 for for for for(i=2i=2i=2i=2;i=100i=100i=100i=0&char=0&char=9)5.4 程序設計風格輸入輸入/輸出規(guī)范化輸出規(guī)范化 輸入輸入/輸出信息是與用戶的使用直接相關的。輸入輸出信息是與用戶的使用直接相關的。輸入/輸出的方式和格式應當盡可能方便用戶的使用。輸出的方式和格式應當盡可能方便用戶的使用。輸入輸入/輸出的風格隨著人工干預程度的不同而有所輸出的風格隨著人工干預程度的不同而有所不同。不同。5.4 程序設計風格輸入輸入/輸出的原則輸出的原則(1)(1)對所有的輸入數(shù)據(jù)都進行檢驗,從而識別錯誤的輸入,對所有的輸入數(shù)據(jù)都進行檢驗,從而識別錯誤的輸入,以保證每個數(shù)據(jù)的有效性。以保證每個數(shù)據(jù)的有效性。(2)(2)檢查輸入項的各種重要組合的合理性,必要時報告輸入檢查輸入項的各種重要組合的合理性,必要時報告輸入狀態(tài)信息。狀態(tài)信息。(3)(3)使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入格式。格式。(4)(4)輸入數(shù)據(jù)時,應允許使用自由格式輸入。輸入數(shù)據(jù)時,應允許使用自由格式輸入。(5)(5)應允許默認值。應允許默認值。(6)(6)輸入一批數(shù)據(jù)時,最好使用輸入結束標志,而不要由用輸入一批數(shù)據(jù)時,最好使用輸入結束標志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目。戶指定輸入數(shù)據(jù)數(shù)目。5.4 程序設計風格輸入輸入/輸出的原則輸出的原則(7)(7)在以交互式輸入在以交互式輸入/輸出方式進行輸入時,要在屏輸出方式進行輸入時,要在屏幕上使用提示符明確提示交互輸入的請求,指幕上使用提示符明確提示交互輸入的請求,指明可使用選擇項的種類和取值范圍。同時,在明可使用選擇項的種類和取值范圍。同時,在數(shù)據(jù)輸入的過程中和輸入結束時,也要在屏幕數(shù)據(jù)輸入的過程中和輸入結束時,也要在屏幕上給出狀態(tài)信息。上給出狀態(tài)信息。(8)(8)當程序設計語言對輸入當程序設計語言對輸入/輸出格式有嚴格要求時,輸出格式有嚴格要求時,應保持輸入格式與輸入語句要求的一致性。應保持輸入格式與輸入語句要求的一致性。(9)(9)給所有的輸出加注解,并設計輸出報表格式。給所有的輸出加注解,并設計輸出報表格式。5.5 程序復雜程度度量程序復雜性主要指模塊內(nèi)程序的復雜性。它直接程序復雜性主要指模塊內(nèi)程序的復雜性。它直接關系到軟件的開發(fā)成本、開發(fā)周期和軟件內(nèi)部潛關系到軟件的開發(fā)成本、開發(fā)周期和軟件內(nèi)部潛伏錯誤的多少。伏錯誤的多少。它也是軟件可理解性的另一種度量。它也是軟件可理解性的另一種度量。度量的價值在于可以用于估算軟件中錯誤的數(shù)量度量的價值在于可以用于估算軟件中錯誤的數(shù)量及軟件開發(fā)的工作量,也可以用來比較兩個不同及軟件開發(fā)的工作量,也可以用來比較兩個不同的設計或算法的優(yōu)劣。的設計或算法的優(yōu)劣。本節(jié)介紹如何使用本節(jié)介紹如何使用McCabe方法及方法及Halstead方法方法度量程序的復雜程度。度量程序的復雜程度。5.5 程序復雜程度度量McCabe方法方法McCabeMcCabe方法基于程序或算法的控制流圖來計算其方法基于程序或算法的控制流圖來計算其環(huán)路復雜性,環(huán)路復雜性,使用這種方法時需要先畫出使用這種方法時需要先畫出控制流圖控制流圖,然后再計,然后再計算控制流圖中算控制流圖中環(huán)路環(huán)路的個數(shù)。的個數(shù)。5.5 程序復雜程度度量 控制流圖控制流圖可以將控制流圖看做是退化的程序流程圖。即將可以將控制流圖看做是退化的程序流程圖。即將程序流程圖中每個處理符號都退化成一個結點,程序流程圖中每個處理符號都退化成一個結點,原來連接不同處理符號的流線變成連接不同結點原來連接不同處理符號的流線變成連接不同結點的有向弧,這樣得到的的有向弧,這樣得到的有向圖有向圖稱為稱為控制流圖控制流圖。控制流圖僅描述程序內(nèi)部的控制流程,完全不表控制流圖僅描述程序內(nèi)部的控制流程,完全不表現(xiàn)對數(shù)據(jù)的具體操作,以及分支和循環(huán)的具體條現(xiàn)對數(shù)據(jù)的具體操作,以及分支和循環(huán)的具體條件。件。5.5 程序復雜程度度量控制流圖的結構控制流圖的結構在選擇或多分支結構中,分支的匯聚處應有一個在選擇或多分支結構中,分支的匯聚處應有一個匯聚結點。匯聚結點。邊和結點圈定的區(qū)域叫做邊和結點圈定的區(qū)域叫做區(qū)域區(qū)域,當對區(qū)域計數(shù)時,當對區(qū)域計數(shù)時,圖形外的區(qū)域也應記為一個區(qū)域。圖形外的區(qū)域也應記為一個區(qū)域。5.5 程序復雜程度度量控制流圖舉例控制流圖舉例5.5 程序復雜程度度量復合條件的分解復合條件的分解 如果判斷中的條件表達式是由一個或多個邏輯運算符(如果判斷中的條件表達式是由一個或多個邏輯運算符(OROR,ANDAND,)連接的復合條件表達式,則需改為一系列只)連接的復合條件表達式,則需改為一系列只有單個條件的嵌套的判斷,如圖所示。有單個條件的嵌套的判斷,如圖所示。5.5 程序復雜程度度量程序的環(huán)路復雜性程序的環(huán)路復雜性 對于給定的控制流圖對于給定的控制流圖G G,環(huán)路復雜性,環(huán)路復雜性V(G)V(G)的計算方的計算方法如下。法如下。(1)(1)環(huán)路復雜性定義為控制流程圖中的區(qū)域數(shù)。環(huán)路復雜性定義為控制流程圖中的區(qū)域數(shù)。(2)(2)設設E E為控制流圖的邊數(shù),為控制流圖的邊數(shù),N N為圖中的結點數(shù)為圖中的結點數(shù) V V(G G)=E=E N+2 N+2(3)(3)設設P P為控制流圖中的判定結點數(shù)為控制流圖中的判定結點數(shù) V V(G G)=P+1=P+15.5 程序復雜程度度量環(huán)路復雜性的應用環(huán)路復雜性的應用 程序的環(huán)路復雜性給出了程序基本路徑集中的程序的環(huán)路復雜性給出了程序基本路徑集中的獨獨立路徑條數(shù)立路徑條數(shù),這是確保程序中每個可執(zhí)行語句至,這是確保程序中每個可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目。少執(zhí)行一次所必需的測試用例數(shù)目。一條獨立路徑是至少包含有一條在其他獨立路徑一條獨立路徑是至少包含有一條在其他獨立路徑中從未有過的邊的路徑。中從未有過的邊的路徑。5.5 程序復雜程度度量環(huán)路復雜性的應用環(huán)路復雜性的應用 在右圖所示的控制流在右圖所示的控制流圖中,一組獨立的路圖中,一組獨立的路徑是:徑是:路徑路徑 path1path1,path2path2,path3path3,path4path4組成了控制流圖的一個基組成了控制流圖的一個基本路徑集。本路徑集。5.5 程序復雜程度度量Halstead方法方法 HalsteadHalstead方法是根據(jù)程序中運算符和操作數(shù)的總方法是根據(jù)程序中運算符和操作數(shù)的總數(shù)來度量程序的復雜度。數(shù)來度量程序的復雜度。5.5 程序復雜程度度量實際的的Halstead長度度 令令N1N1為程序中運算符出現(xiàn)的總次數(shù);為程序中運算符出現(xiàn)的總次數(shù);N2N2為操作數(shù)出現(xiàn)的總次數(shù);為操作數(shù)出現(xiàn)的總次數(shù);實際的實際的HalsteadHalstead長度長度N N定義為定義為 N=N1+N2N=N1+N25.5 程序復雜程度度量預測的的Halstead長度度 詳細設計之后,假設程序中使用的不同運算符的詳細設計之后,假設程序中使用的不同運算符的個數(shù)為個數(shù)為n1n1;不同操作數(shù)的個數(shù)為不同操作數(shù)的個數(shù)為n2n2;則預測的則預測的HalsteadHalstead長度公式如下:長度公式如下:H=n1H=n1 log2n1+n2 log2n1+n2 log2n2 log2n25.5 程序復雜程度度量程序的潛在錯誤程序的潛在錯誤 HalsteadHalstead度量可以用來預測程序中的錯誤??梢远攘靠梢杂脕眍A測程序中的錯誤??梢哉J為程序中可能存在的差錯應與程序的長度或復認為程序中可能存在的差錯應與程序的長度或復雜度相關。雜度相關。若設若設B B為該程序的錯誤數(shù),則出錯數(shù)的預測公式為為該程序的錯誤數(shù),則出錯數(shù)的預測公式為 B=NB=Nlog2log2(n1n1n2n2)/3000/3000小結在傳統(tǒng)方法中,詳細設計也稱為過程設計。在傳統(tǒng)方法中,詳細設計也稱為過程設計。過程設計的任務是設計實現(xiàn)每個模塊功能的詳細過程設計的任務是設計實現(xiàn)每個模塊功能的詳細步驟,即算法。步驟,即算法。過程設計工具可分為圖形、表格和語言過程設計工具可分為圖形、表格和語言3 3類。類。這這3 3類工具各有所長,讀者應該根據(jù)需要選用適當類工具各有所長,讀者應該根據(jù)需要選用適當?shù)墓ぞ?。的工具。編碼是在對軟件進行了總體設計和詳細設計之后編碼是在對軟件進行了總體設計和詳細設計之后進行的,它只不過是將軟件設計的結果翻譯成用進行的,它只不過是將軟件設計的結果翻譯成用某種程序設計語言書寫的程序。某種程序設計語言書寫的程序。
收藏
編號:65494723
類型:共享資源
大?。?span id="yyiwk8e" class="font-tahoma">6.60MB
格式:ZIP
上傳時間:2022-03-24
40
積分
- 關 鍵 詞:
-
軟件工程基礎
軟件工程
基礎
全套
PPT
課件
- 資源描述:
-
《軟件工程基礎》全套PPT課件,軟件工程基礎,軟件工程,基礎,全套,PPT,課件
展開閱讀全文
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。