軟件工程概論課后答案解析_第1頁
軟件工程概論課后答案解析_第2頁
軟件工程概論課后答案解析_第3頁
軟件工程概論課后答案解析_第4頁
軟件工程概論課后答案解析_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、. 第1章 軟件與軟件工程的概念 1.1 舉出你所知道的應(yīng)用軟件的例子。 辦公軟件、游戲軟件、財務(wù)軟件、銀行軟件、人事管理軟件、工資管理軟件、學(xué)籍管理軟件等。 1.2 認為“軟件就是程序,軟件開發(fā)就是編程序。”這種觀點是否正確?為什么? 認為“軟件就是程序,軟件開發(fā)就是編程序。”這種觀點是錯誤的。 首先,軟件是計算機系統(tǒng)中與硬件相互依存的另一部分,它是包括程序,數(shù)據(jù)及其相關(guān)文檔的完整集合,程序只是軟件的組成部分之一;其次,在軟件開發(fā)中,編程只是軟件開發(fā)過程的一個階段。 1.3 如果將軟件開發(fā)比作高樓大廈的建造,可以將軟件的設(shè)計比作什么? 可以將軟件的設(shè)計比作建筑設(shè)計,軟件設(shè)計的成果相當(dāng)于建筑設(shè)

2、計的設(shè)計圖紙。 1.4 什么是軟件危機?它有哪些典型表現(xiàn)?為什么會出現(xiàn)軟件危機? 軟件危機:軟件危機是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。 典型表現(xiàn): (1) 對軟件開發(fā)成本和進度的估計常常很不準確。 用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。 (2) 軟件產(chǎn)品的質(zhì)量往往靠不住。 (3)軟件常常是不可維護的。 (4)軟件通常沒有適當(dāng)?shù)奈臋n資料。(5) 軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升。(6) 軟件開發(fā)生產(chǎn)率提高的速度,既跟不上硬件的發(fā)展速度,也遠遠跟不上計算機應(yīng)用(7) 迅速普及深入的趨勢。 產(chǎn)生軟件危機的原因: 除了軟件本身的特點,其原因主要有以下幾個

3、方面: (1) 缺乏軟件開發(fā)的經(jīng)驗和有關(guān)軟件開發(fā)數(shù)據(jù)的積累,使得開發(fā)工作計劃很難制定。 (2) 軟件人員與用戶的交流存在障礙,使得獲取的需求不充分或存在錯誤。 (3) 軟件開發(fā)過程不規(guī)范。如,沒有真正了解用戶的需求就開始編程序。 (4) 隨著軟件規(guī)模的增大,其復(fù)雜性往往會呈指數(shù)級升高。需要很多人分工協(xié)作,不僅涉及技術(shù)問題,更重要的是必須有科學(xué)嚴格的管理。 (5) 缺少有效的軟件評測手段,提交給用戶的軟件的質(zhì)量不能完全保證。 精選. 1.5 什么是軟件工程? 軟件工程是指導(dǎo)計算機軟件開發(fā)和維護的工程學(xué)科。采用工程的概念、原理、技術(shù)和方法來開發(fā)和維護軟件,把經(jīng)過時間考驗而證明正確的管理技術(shù)和當(dāng)前能

4、夠得到的最好的技術(shù)方法結(jié)合起來,以經(jīng)濟地開發(fā)出高質(zhì)量的軟件并有效地維護它,這就是軟件工程。 1.6 簡述軟件生存期由哪些主要的階段組成,每一階段的主要任務(wù)是什么? (1) 問題定義與可行性研究:問題定義必須回答的關(guān)鍵問題是:“要解決的問題是什么”??尚行匝芯恳卮鸬年P(guān)鍵問題是:“在成本和時間的限制條件下能否解決問題?是否值得做?”。 (2) 需求分析:這個階段的任務(wù)仍然不是具體地解決客戶的問題,而是準確地回答“目標系統(tǒng)必須做什么”這個問題。 (3) 軟件設(shè)計:本階段要回答的關(guān)鍵問題是“目標系統(tǒng)如何做?”為此,必須在設(shè)計階段中制定設(shè)計方案,把已確定的各項需求轉(zhuǎn)換成相應(yīng)的軟件體系結(jié)構(gòu)。結(jié)構(gòu)中的每一

5、組成部分都是意義明確的構(gòu)件,此即所謂概要設(shè)計。進而具體描述每個構(gòu)件所要完成的工作,為源程序編寫打下基礎(chǔ),此即所謂詳細設(shè)計。 (4) 程序編碼和單元測試:本階段要解決的問題是“正確地實現(xiàn)已做的設(shè)計”,為此,需要選擇合適的編程語言,把軟件設(shè)計轉(zhuǎn)換成計算機可以接受的程序代碼,并對程序結(jié)構(gòu)中的各個模塊進行單元測試,然后運用調(diào)試的手段排除測試中發(fā)現(xiàn)的錯誤。要求編寫出的程序應(yīng)當(dāng)是結(jié)構(gòu)良好、清晰易讀的,且與設(shè)計相一致的。 (5) 集成測試和系統(tǒng)測試:集成測試的任務(wù)是將已測試過的模塊按設(shè)計規(guī)定的順序組裝起來,在組裝的過程中檢查程序連接的問題。系統(tǒng)測試的任務(wù)是根據(jù)需求規(guī)格說明的要求,對必須實現(xiàn)的各項需求,逐項進

6、行確認,判定已開發(fā)的軟件是否符合用戶需求,能否交付用戶使用。為了更有效地發(fā)現(xiàn)系統(tǒng)中的問題,通常這個階段的工作由開發(fā)人員、用戶之外的第三者承擔(dān)。 (6) 運行維護:已交付的軟件投入正式使用,便進入運行維護階段。這一階段可能持續(xù)若干年。軟件在運行中可能由于多方面的原因,需要對它進行維護。通常有四種類型的維護:改正性維護、適應(yīng)性維護、完善性維護和預(yù)防性維護。 1.7 常見的軟件生存期模型主要有哪些?每種模型的優(yōu)缺點是什么? 常見的軟件生存期模型主要有瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型和統(tǒng)一過程。 精選. (1) 瀑布模型 優(yōu)點:可強迫開發(fā)人員采用規(guī)范化的方法;嚴格地規(guī)定了每個階段必

7、須提交的文檔;要求每個階段交出的所有產(chǎn)品都必須經(jīng)過質(zhì)量保證小組的仔細驗證。 缺點:由于瀑布模型幾乎完全依賴于書面的規(guī)格說明,很可能導(dǎo)致最終開發(fā)出的軟件產(chǎn)品不能真正滿足用戶的需要;用戶往往需要等待很長時間才能看到可以運行的程序;適應(yīng)需求變更的能力比較差。 適用范圍:瀑布模型只適用于項目開始時需求已確定的情況。 (2) 快速原型模型 優(yōu)點:有助于滿足用戶的真實需求;原型系統(tǒng)已經(jīng)通過與用戶的交互而得到驗證,據(jù)此產(chǎn)生的規(guī)格說明文檔能夠正確地描述用戶需求。 缺點:要求開發(fā)人員快速建立原型。 適用范圍:適用于需求不明確的軟件項目。 (3) 增量模型 優(yōu)點: ? 能在較短時間內(nèi)向用戶提交可完成一些基本功能的

8、產(chǎn)品,即從第一個構(gòu)件交付之日起,用戶就能做一些有用的工作。 ? 逐步增加產(chǎn)品的功能可以使用戶有較充裕的時間學(xué)習(xí)和適應(yīng)新產(chǎn)品,從而減少一個全新的軟件可能給用戶組織帶來的沖擊。 ? 項目失敗的風(fēng)險較低,雖然在某些增量構(gòu)件中可能遇到一些問題,但其他增量構(gòu)件將能夠成功地交付給客戶。 ? 優(yōu)先級最高的服務(wù)首先交付,然后再將其他增量構(gòu)件逐次集成進來。因此,最重要的系統(tǒng)服務(wù)將接受最多的測試。 缺點: ? 在把每個新的增量構(gòu)件集成到現(xiàn)有軟件體系結(jié)構(gòu)中時,必須不破壞原來已經(jīng)開發(fā)出的產(chǎn)品。 ? 軟件體系結(jié)構(gòu)必須是開放的,即向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過程必須簡單、方便。 適用范圍:適用于工期緊張、功能可以劃分、比較復(fù)

9、雜的軟件項目。軟件工程師必須有較高的技術(shù)水平,能夠設(shè)計出開放的軟件體系結(jié)構(gòu)。 (4) 螺旋模型 優(yōu)點: 精選. ? 對可選方案和約束條件的強調(diào)有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開發(fā)的一個重要目標; ? 減少了過多測試或測試不足所帶來的風(fēng)險; ? 在螺旋模型中維護只是模型的另一個周期,在維護和開發(fā)之間并沒有本質(zhì)區(qū)別。 缺點:螺旋模型是風(fēng)險驅(qū)動的,因此要求軟件開發(fā)人員必須具有豐富的風(fēng)險評估經(jīng)驗和這方面的專門知識,否則將出現(xiàn)真正的風(fēng)險:當(dāng)項目實際上正在走向災(zāi)難時,開發(fā)人員可能還以為一切正常。 適用范圍:適用于內(nèi)部開發(fā)的大型軟件(開發(fā)周期長、比較容易受到社會因素影響的軟件項目),軟件開發(fā)

10、人員具有豐富的風(fēng)險評估知識和經(jīng)驗。 (5) 噴泉模型 優(yōu)點:在開發(fā)過程中使用統(tǒng)一的概念和方法,各階段之間沒有明顯的界限,容易實現(xiàn)各個開發(fā)過程的多次反復(fù)迭代,達到了認識的逐步深化,降低了出錯的可能性。 缺點:由于各個階段之間的界線不明確,容易造成軟件開發(fā)過程的無序。 適用范圍:適用于面向?qū)ο蟮能浖_發(fā)。 (6) 統(tǒng)一過程 優(yōu)點:提高了團隊生產(chǎn)力,在迭代的開發(fā)過程、需求管理、基于組件的體系結(jié)構(gòu)、可視化軟件建模、驗證軟件質(zhì)量及控制軟件變更等方面,針對所有關(guān)鍵的開發(fā)活動為每個開發(fā)成員提供了必要的準則、模板和工具指導(dǎo),并確保全體成員共享相同的知識基礎(chǔ)。它建立了簡潔和清晰的過程結(jié)構(gòu),為開發(fā)過程提供了較大的

11、通用性。 缺點:RUP只是一個開發(fā)過程,并沒有涵蓋軟件過程的全部內(nèi)容,例如它缺少關(guān)于軟件運行和支持等方面的內(nèi)容;此外,它沒有支持多項目的開發(fā)結(jié)構(gòu),這在一定程度上降低了在開發(fā)組織內(nèi)大范圍實現(xiàn)重用的可能性。 適用范圍:適用于基于構(gòu)件的軟件開發(fā)。 第2章 軟件工程方法與工具 2.1 軟件工程的三種基本要素是什么,各自的作用是什么? 軟件工程的三種基本要素是方法、工具和過程。 精選. (1) 軟件工程方法(method)為建造軟件提供技術(shù)上的解決方法(“如何做”)。目前使用得最廣泛的方法是傳統(tǒng)方法(結(jié)構(gòu)化方法)和面向?qū)ο蠓椒ā?(2) 工具為方法的運用提供自動的或半自動的軟件支撐環(huán)境。 (3) 過程是

12、為了獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項任務(wù)的工作步驟。 2.2 簡述傳統(tǒng)方法和面向?qū)ο蠓椒ǖ奶攸c。 (1) 傳統(tǒng)方法的特點 傳統(tǒng)方法也稱為生命周期方法或結(jié)構(gòu)化范型。它采用結(jié)構(gòu)化技術(shù)來完成軟件開發(fā)的各項任務(wù)。這種方法學(xué)把軟件生命周期的全過程依次劃分為若干個階段,然后順序地逐步完成每個階段的任務(wù)。每一個階段的開始和結(jié)束都有嚴格的標準,對于任何兩個相鄰的階段而言,前一個階段的結(jié)束標準就是后一階段的開始標準。 傳統(tǒng)方法的主要缺點是在適應(yīng)需求變化方面不夠靈活,另外,結(jié)構(gòu)化方法要么面向行為,要么面向數(shù)據(jù),缺乏使兩者有機結(jié)合的機制。 (2)面向?qū)ο蠓椒ǖ奶攸c 面向?qū)ο蠓椒ò褦?shù)據(jù)和

13、行為看成同等重要,是將數(shù)據(jù)和對數(shù)據(jù)的操作緊密地結(jié)合起來的方法,這也是面向?qū)ο蠓椒ㄅc傳統(tǒng)方法的重要區(qū)別。 面向?qū)ο蠓椒ǖ某霭l(fā)點和基本原則,是盡量模擬人類習(xí)慣的思維方式,使開發(fā)軟件的方法和過程盡可能接近人類認識問題和解決問題的方法與過程,從而使描述問題的問題空間與其解空間在結(jié)構(gòu)上盡可能一致。對于大型、復(fù)雜及交互性比較強的系統(tǒng),使用面向?qū)ο蠓椒ǜ袃?yōu)勢。 2.3 形式化方法的特點是什么? 形式化方法的主要特點是: (1) 軟件需求規(guī)格說明被細化為用數(shù)學(xué)記號表達的詳細的形式化規(guī)格說明; (2) 設(shè)計、實現(xiàn)和單元測試等開發(fā)過程由一個變換開發(fā)過程代替。通過一系列變換將形式的規(guī)格說明細化成為程序。 2.5

14、安裝Rational Rose2000/2002/2003,并練習(xí)基本操作。 略。 精選. 第3章 軟件需求獲取與結(jié)構(gòu)化分析方法 3.1 為什么結(jié)構(gòu)化分析要叫“結(jié)構(gòu)化”?有其他可替代的術(shù)語嗎? “結(jié)構(gòu)化”一詞應(yīng)來源于“結(jié)構(gòu)化程序設(shè)計”,先有“結(jié)構(gòu)化程序設(shè)計”的思想,后有結(jié)構(gòu)化設(shè)計及結(jié)構(gòu)化分析。有時稱傳統(tǒng)的分析方法,指的就是結(jié)構(gòu)化分析方法。 3.2頂層數(shù)據(jù)流圖或稱環(huán)境圖的作用是什么? 頂層數(shù)據(jù)流圖(或稱環(huán)境圖)僅包括一個數(shù)據(jù)處理過程,也就是要開發(fā)的目標系統(tǒng)。其作用如下: (1) 確定系統(tǒng)在其環(huán)境中的位置,與系統(tǒng)有聯(lián)系的外部實體(包括硬件、軟件、組織機構(gòu)及人)有哪些。 (2) 通過確定系統(tǒng)的輸入和

15、輸出與外部實體的關(guān)系確定系統(tǒng)的邊界,也就是要確定哪些功能或處理屬于系統(tǒng)范圍之內(nèi),哪些屬于系統(tǒng)范圍之外,需要由其他系統(tǒng)處理或人工處理。 3.3 在對數(shù)據(jù)流圖進行分解時需要注意哪些問題? 在對數(shù)據(jù)流圖進行分解時,需要注意以下兩個問題: (1) 當(dāng)對數(shù)據(jù)流圖分層細化時必須保持信息連續(xù)性,也就是說,當(dāng)把一個處理分解為一系列處理時,分解前和分解后的輸入/輸出數(shù)據(jù)流必須相同。 (2) 注意分層細化時對編號的處理方法。 3.4 銀行存款業(yè)務(wù)如下:客戶到銀行柜臺存款時,首先填寫存款單(包括帳號、姓名、存款金額、存款類型),如果還沒有開戶,則需要先開戶,填寫開戶單(包括姓名、身份證號、地址、電話、是否留密碼)。

16、填寫完存款單或開戶單后,交給營業(yè)員,營業(yè)員將存款單或開戶單信息輸入計算機,系統(tǒng)記錄開戶信息或存款單信息,如果是開戶并選擇留密碼,則需要客戶輸入密碼。最后印出開戶單或存款單給用戶。請畫出銀行存款業(yè)務(wù)的分層數(shù)據(jù)流圖(至少畫出兩層)。 (1) 識別外部實體及輸入輸出數(shù)據(jù)流 外部實體:儲戶、業(yè)務(wù)員。 輸入數(shù)據(jù)流:存款單,開戶單,密碼。可以將存款單和開戶單抽象為事務(wù)。 輸出數(shù)據(jù)流:存款單,開戶單。 (2) 頂層數(shù)據(jù)流圖 精選. 一層數(shù)據(jù)流圖(3) 對銀行儲蓄系統(tǒng)進行分解,從大的方面分解為接收事務(wù)、處理開戶、處理存款三部分, 得到一層數(shù)據(jù)流圖。 (4) 二層數(shù)據(jù)流圖“處理存款”及“處理開戶”進行進一步分解

17、,得到二層數(shù)據(jù)流圖,即處理存款的 對 數(shù)據(jù)流圖和處理開戶的數(shù)據(jù)流圖。 處理存款的數(shù)據(jù)流圖 精選. 處理開戶的數(shù)據(jù)流圖 圖。3.5 按照以下描述,畫出ER章和節(jié)都具有標題和序號屬每一章包含許多節(jié)、一本教材由許多章組成,小結(jié)和習(xí)題組成, 性。 ER圖如下:標序標序 教節(jié) 小結(jié) 習(xí)題 精選. 結(jié)構(gòu)化設(shè)計方法4章 第 4.1 當(dāng)你“編寫”程序時你設(shè)計軟件嗎?軟件設(shè)計和編碼有什么不同嗎?軟件設(shè)計包括概要設(shè)計和詳細設(shè)計,編碼是將詳細在“編寫”程序時并沒有設(shè)計軟件。 設(shè)計中的過程描述轉(zhuǎn)換成用程序設(shè)計語言來描述。復(fù)雜問題需要較少的工作去解決?這樣的情況對模塊化觀點有什么4.4 是否存在一種情況: 影響?通過對

18、復(fù)雜的問題進行合理分解,分解為若干個相對簡單及獨立的子問題,就可以用每個子問題用單獨的模塊去解這種情況能夠較好地支持模塊化的觀點,較少的工作去解決。決,模塊之間應(yīng)該是高內(nèi)聚、低耦合的,這樣才能減少工作量,否則,雖然每個模塊的工作 簡單了,但模塊之間的聯(lián)系很復(fù)雜,也增加了問題解決的難度和工作量。所描述的銀行存款業(yè)務(wù)的軟件結(jié)構(gòu),并使用改3用面向數(shù)據(jù)流的方法設(shè)計第章習(xí)題3.44.8 進方法對模塊結(jié)構(gòu)進行精化。 給出的數(shù)據(jù)流圖進行精化,確定其邊界,如下圖所示。3(1) 對第章習(xí)題3.4 對上圖按事務(wù)型數(shù)據(jù)流進行處理,完成第一級分解,得到頂層和一層模塊結(jié)構(gòu)圖。(2) 精選. 存款業(yè)務(wù) 輸入數(shù)據(jù) 輸出數(shù)據(jù)

19、調(diào)度 第一級分解后的結(jié)構(gòu)圖完成第二級分解。對上圖所示的“輸入數(shù)據(jù)”、“輸出數(shù)據(jù)”和“調(diào)度”模塊進行(3) 分解,得到未經(jīng)精化的輸入結(jié)構(gòu)、輸出結(jié)構(gòu)和事務(wù)結(jié)構(gòu)。 輸入數(shù) 輸入密輸入事務(wù) 未經(jīng)精化的輸入結(jié)構(gòu) 輸出數(shù)據(jù) 打印開戶單 打印存款單 未經(jīng)精化的輸出結(jié)構(gòu) 調(diào)度 處理開戶 處理存款 記錄存款信息記錄開戶信息記錄密碼 未經(jīng)精化的事務(wù)結(jié)構(gòu) 精選. 將上面的三部分合在一起,得到初始的軟件結(jié)構(gòu),如下圖所示。 存款業(yè)務(wù) 調(diào)度輸入數(shù)據(jù) 輸出數(shù)據(jù) 輸入密碼輸入事務(wù) 處理存款 處理開戶 打印存款單 打印開戶單 記錄存款信息 記錄開戶信息 記錄密碼 初始軟件結(jié)構(gòu)圖 (4) 對軟件結(jié)構(gòu)進行精化。 1) 由于調(diào)度模塊

20、下只有兩種事務(wù),因此,可以將調(diào)度模塊合并到上級模塊中,如圖所示。 存款業(yè) 處理開戶 輸出數(shù)據(jù) 處理存款輸入數(shù)據(jù) 輸入事務(wù)輸入密碼 記錄存款信息 記錄開戶信息 記錄密碼 打印存款單 打印開戶單 將調(diào)度模塊合并到上級模塊后的軟件結(jié)構(gòu) 2) “記錄密碼”模塊的作用范圍不在其控制范圍之內(nèi)(即“輸入密碼”模塊不在“記錄密碼”模塊的控制范圍之內(nèi)),需對其進行調(diào)整,如圖所示。 存款業(yè)務(wù) 輸出數(shù)據(jù) 輸入事務(wù)處理存款處理開戶 記錄存款信息記錄開戶信息打印開戶單 記錄密碼 打印存款單精選 輸入密碼. 3) 提高模塊獨立性,對模塊結(jié)構(gòu)進行調(diào)整,如下圖所示。 存款業(yè)務(wù) 處理開戶 處理存款輸入事務(wù) 打印開戶單記錄開戶信

21、息 記錄密碼記錄存款信息 打印存款單 輸入密碼 調(diào)整后的模塊結(jié)構(gòu)圖4.9 將大的軟件劃分成模塊有什么好處?是不是模塊劃分得越小越好?劃分模塊的依據(jù)是什么? 將大的軟件劃分成獨立命名且可獨立訪問的模塊,不同的模塊通常具有不同的功能或職責(zé)。這種方法有利于將復(fù)雜的問題簡單化,是分而治之策略的具體表現(xiàn)。 盡管模塊分解可以簡化要解決的問題,但模塊分解并不是越小越好。當(dāng)模塊數(shù)目增加時,每個模塊的規(guī)模將減小,開發(fā)單個模塊的成本確實減少了;但是,隨著模塊數(shù)目增加,模塊之間關(guān)系的復(fù)雜程度也會增加,設(shè)計模塊間接口所需要的工作量也將增加。 劃分模塊的依據(jù)是,模塊只具有單一的功能且與其他模塊沒有太多的聯(lián)系。 4.11

22、 結(jié)構(gòu)化程序設(shè)計禁止使用goto語句嗎?如果程序中使用了goto語句,是否就可以斷定它是非結(jié)構(gòu)化的? 結(jié)構(gòu)化程序設(shè)計并不禁止使用goto語句。如果程序中使用了goto語句,并不能斷定它是非結(jié)構(gòu)化的。 4.12 對于給定的算法,如何判斷它是否是結(jié)構(gòu)化的? 對于給定的算法,如果符合以下三條原則,就可以判斷它是結(jié)構(gòu)化的。 (1) 使用語言中的順序、選擇、重復(fù)等有限的基本控制結(jié)構(gòu)表示程序邏輯。 (2) 選用的控制結(jié)構(gòu)只準許有一個入口和一個出口。 (3) 程序語句組成容易識別的塊(Block),每塊只有一個入口和一個出口。 4.13 對于圖4-49所示的流程圖,試分別用N-S圖和PAD表示之。 精選.

23、START P F T A END B T Q F 流程圖圖4-49 如下:對應(yīng)的PAD 對應(yīng)的N-S圖如下: Awhile P while P A B B until !Q until !Q 的數(shù)數(shù)組中找出值為item圖4-50所示的流程圖完成的功能是使用二分查找方法在table4.14 是否存在。 判斷此算法是否是結(jié)構(gòu)化的,說明理由。(1) N-S圖表示。若算法是非結(jié)構(gòu)化的,設(shè)計一個等價的結(jié)構(gòu)化算法,并用(2) 精選. 開始 i(startfinish)/2 T T T F F F T F F start=i+1 flag=0 table(i)=item table(I)<item

24、F T T flag=1 table(i)>item finish=i-1 (finish-start)>1 table(start)=item table(finish)=item 結(jié)束 二分查找算法的流程圖圖4-50 精選. (1) 不是結(jié)構(gòu)化的,最上面的循環(huán)有兩個出口,最下面的分支有三個入口。(2) 等價的結(jié)構(gòu)化算法如下: (STARFINISH)/2(FINISH-START)>1 && TABLE(I)!=ITEM(STARFINISH)/2TABLE(I)<ITEMFTFINISH=I-1START=I+1TABLE(START)=ITEM

25、| TABLE(FINISH) =ITEM | TABLE(I)=ITEM F T FLAG=0 FLAG=1 或者 FLAG0 (FINISH-START)>1 && FLAG=0 I(STARTFINISH)/2 TABLE(I)=ITEM T F FLAG=1 TABLE(I)<ITEM T F START=I+1 FINISH=I-1 TABLE(START)=ITEM | TABLE(FINISH) =ITEM T F FLAG=1 精選 . 或FLA0(FINISH-START)>=0 && FLAG=0(STARFINISH)/2

26、TABLE(I)=ITEMFTFLAG=1TABLE(I)<ITEMTSTART=I+1FINISH=I-1 4.15 使用自頂向下、逐步細化方法設(shè)計算法,完成下列任務(wù):產(chǎn)生一個1010的二維隨機整數(shù)方陣,先求出每一行的最大值和每一列的最小值;然后求10個最大值中的最小者,10個最小值中的最大者;最后求這兩個數(shù)之差的平方。 (1) 首先寫出下面的程序框架: main () 定義1010的二維整數(shù)數(shù)組A,長度為10的一維數(shù)組B, C; 建立1010的二維隨機整數(shù)數(shù)組A;- - - - - - - - - - - - - - - - - - - 1 求A中每一行的最大值數(shù)組B; - - -

27、- - - - - - - - - - - - - - - - - 2 求A中每一列的最小值數(shù)組C; - - - - - - - - - - - - - - - - - - - - 3 minOfB; B求數(shù)組中的最小值 - - - - - - - - - - - - - - - - - - - - 4 - - - - - - - - - - - - - - - - - - - - 5 maxOfC; 中的最大值C求數(shù)組 (minOfB- maxOfC)2 result; 對后面加標記的部分進行細化(2) main () 定義10的一維數(shù)組B, C;,長度為1010的二維整數(shù)數(shù)組A A*/ -

28、 - - - - - - - - - - - - - - - - - 110/*建立10的二維隨機整數(shù)數(shù)組 for (i=0; i<=9; i+) for (j=0; j<=9; j+) Ai,j; 產(chǎn)生隨機整數(shù) B*/ - - - - - - - - - - - - - - - - - - - - 2數(shù)組中每一行的最大值A(chǔ)求/* for (i=0; i<=9; i+) 行的最大值iA求數(shù)組第Bi; -2.1 中每一列的最小值A(chǔ)求/*C*/ - - - - - - - - - - - - - - - - - - - - 3數(shù)組 精選 . for (j=0; j<=9;

29、j+) 求數(shù)組A第j列的最小值Cj; -3.1 - - - - - - - - - - - - - - - - - - - - 4/*求數(shù)組B中的最小值minOfB*/ minOfB = B0; for (i=1; i<=9; i+) if (minOfB < Bi) minOfB = Bi; - - - - - - - - - - - - - - - - - - - - 5maxOfC*/ 求數(shù)組C中的最大值 /* maxOfC = C0; for ( i=1; i<=9; i+) if (maxOfC>Ci) maxOfC = Ci; result; (minOfB

30、- maxOfC)2 進行細化。具體略。3.1(3) 下一步可以繼續(xù)對2.1和4.16 設(shè)計算法完成下列任務(wù):輸入一段英文后,無論輸入的文字都是大寫,還是小寫,或大小寫任意混合,都能將其整理成除每個句子開頭字母是大寫外,其他都是小寫的文字。 假設(shè)在輸入的文字中,兩個單詞間只允許是空格、,、.、?、!,則在輸出的文字中,大寫的情況有以下幾種: (1) 整段文字的第一個字母是大寫; (2) “.”后的第一個字母是大寫; (3) “?”后的第一個字母是大寫; (4) “!”后的第一個字母是大寫; 設(shè)變量a存儲輸入的字符串,變量b存儲結(jié)果字符串,變量c存儲當(dāng)前處理的字符,變量e存儲c之前的字符(當(dāng)c為

31、第一個字符時除外)。算法如下: 輸入字符a,n = strlen(a)如的第一個字符是字母,則轉(zhuǎn)成大寫 b0=a0 for ( i=1; i<n; i+)c = ai, e=ai-1 是字 TF屬.? TF 改大改小bi=c精加字符串結(jié)束標輸出字符 . 第5章 編碼 5.1 有人說程序編好后能上機運行就可以了,為什么還要講究風(fēng)格和可讀性呢?你覺得對嗎?為什么? 對于學(xué)生的練習(xí)題和作業(yè)題,程序編好后能上機運行,一般認為任務(wù)就完成了。但對于實際開發(fā)的項目來說,任務(wù)并沒有結(jié)束。編碼人員編寫完程序后,要對自己的程序進行單元測試,測試人員要進行集成測試和系統(tǒng)測試,提交用戶使用后,還需要對軟件進行持

32、續(xù)的維護修改工作。在軟件開發(fā)和維護過程中,都需要閱讀程序。道理很簡單,如果需要對某段程序進行修改,首先要讀懂,閱讀程序是軟件開發(fā)和維護過程中的一個重要組成部分,而且讀程序的時間比寫程序的時間還要多。所以,程序的風(fēng)格和可讀性很重要,具有良好的程序風(fēng)格和可讀性的程序,有助于對程序的正確理解,可以大大減少閱讀理解程序的時間,從而提高維護工作的效率。 5.2 一般情況下,程序的效率和清晰性相比哪一個更重要? 在計算機發(fā)展的早期,由于CPU效率低,內(nèi)存小,程序在運行時容易出現(xiàn)運行時間太長或內(nèi)存溢出問題。因此,人們在編寫程序時,很注重程序的時間效率和空間效率,而不太注重程序的清晰性。 隨著計算機硬件性能的

33、飛速發(fā)展以及軟件規(guī)模和復(fù)雜性的急劇增加,這種情況已經(jīng)發(fā)生了根本的轉(zhuǎn)變,程序的清晰性越來越受到重視,程序的清晰性不好會給測試、維護修改帶來困難,這對于規(guī)模龐大和復(fù)雜的軟件尤其明顯。 軟件運行的效率主要取決于軟件的體系結(jié)構(gòu)及算法,編碼階段雖然也有機會提高效率,但效果并不明顯。對于效率沒有特殊嚴格要求的系統(tǒng)來說,要將程序的清晰性放在第一位,在不影響清晰性的情況下,去改進效率。 5.6 在一行內(nèi)只寫一條語句,并且采取適當(dāng)?shù)囊菩懈袷剑钩绦虻倪壿嫼凸δ茏兊酶用鞔_。許多程序設(shè)計語言允許在一行內(nèi)寫多個語句。但這種方式會使程序可讀性變差。下面是一段排序程序,請對其編碼風(fēng)格進行改進,以增加其可讀性。 for

34、(i=1; i<=n-1; i+) for (j=1; j<=n-i; j+) if (aj>aj+1) temp=aj; aj=aj+1; aj+1=temp; 改進后的代碼如下: for (i=1; i<=n-1; i+) for (j=1; j<=n-i; j+) if (aj>aj+1) temp=aj; aj=aj+1; 精選 . aj+1=temp; 請對下面代碼的布局進行改進,使其符合規(guī)范其更容易理解。5.7 for (i=1; i<=n-1; i+) t=i; for (j=i+1; j<=n; j+) t=j;if (aj<

35、;at) if (t!=i) temp=at; at=ai; ai=temp 改進后的代碼如下: for (i=1; i<=n-1; i+) t=i; for (j=i+1; j<=n; j+) if (aj<at) t=j; if (t!=i) temp=at; at=ai; ai=temp 的程序,注意編碼風(fēng)格。使用你熟悉的語言編寫出習(xí)題5.84.15 的程序:C語言編寫的習(xí)題4.15下面為使用 椣據(jù)畬敤尠慭桴栮 椣據(jù)畬敤尠瑳楤?屨 椣據(jù)畬敤尠瑳湯擴栮 椣據(jù)畬敤尠楴敭栮1010的二維數(shù)組a的每一行的最大值存入一維數(shù)組b,每一列的最小值存入一/* 求維數(shù)組c,minOfB存

36、儲數(shù)組b的最小值,maxOfC存儲數(shù)組c的最大值,result存儲minOfB與maxOfC之差的平方。*/ 精選 . int main() int a1010, b10,c10; int i,j,minOfB, maxOfC, result; /*產(chǎn)生隨機數(shù)種子 */ srand(unsigned int)time(NULL); 10 10/*建立的二維隨機整數(shù)數(shù)組a*/ for(i=0;i<=9;i+) for (j=0; j<=9; j+) 1-100之間的隨機數(shù)aij=rand()_x0010_0+1; /產(chǎn)生 中每一行的最大值數(shù)組求ab*/ /* for (i=0; i&

37、lt;=9; i+) a第ibi */行的最大值 /*求數(shù)組 bi=ai0; for (j=1; j<=9; j+) if (aij>bi) bi = aij; ac*/ 中每一列的最小值數(shù)組 /*求 for (j=0; j<=9; j+) 第jcj; */列的最小值求數(shù)組 /*a cj=a0j; for (i=1; i<=9; i+) if (aij<cj) cj = aij; minOfB*/ b 中的最小值 /*求數(shù)組 minOfB = b0; for (i=1; i<=9; i+) minOfB = bi; if (minOfB > bi) 中

38、的最大值maxOfC*/ c /*求數(shù)組 maxOfC = c0; for (i=1; i<=9; i+) if (maxOfC<ci) maxOfC = ci; result = pow(minOfB- maxOfC, 2); 牰湩晴尨結(jié)果是:%d,result); return(result); 5.9使用你熟悉的語言編寫出習(xí)題4.16的程序,注意編碼風(fēng)格。 的程序:4.16C語言編寫的習(xí)題下面為使用#include stdio.h #include string.h #include ctype.h /*將一段英文輸入變量a(假設(shè)兩個單詞間只允許是空格、,、.、?、!),將其

39、整理成每個句子開頭字母是大寫、其他都是小寫的字符串存儲在變量b中。變量c存儲當(dāng)前處理的字 精選. 符,變量e存儲c之前字符。*/ void main() char a1000, b1000, c,e; int i,n; gets(a); n=strlen(a); /將整段的第一個字母轉(zhuǎn)成大寫。 if(isalpha(a0) a0=toupper(a0); b0=a0; /處理第一個字符之后的每個字符,將.?!后面的字母改為大寫,其他改為小寫。 for (i=1; i<n; i+) c=ai; e=ai-1; if (isalpha(c) if(strchr(.?!,e) c=touppe

40、r(c); else c=tolower(c); bi=c; bn='0' puts(b); 第6章 軟件測試方法 6.5 假設(shè)汽車的車牌號可由車主人在規(guī)定范圍內(nèi)自選,若其規(guī)定為: (1) 車牌上應(yīng)有7個字符; (2) 為首的字符限定為漢字“京”; (3) 第2個字符可任選一字母(AZ); (4) 第37個字符可選任意數(shù)字。 請為相關(guān)的處理程序采用等價類劃分方法設(shè)計等價類表及相應(yīng)的測試用例。 等價類表 精選 . 輸入數(shù)據(jù) 有效等價類 無效等價類0個)>個字符個個非“京”“京”首字非字母字母個字非數(shù)字3個字數(shù)字 測試用例如下: 1)京H87774 (1),(4),(6),(

41、8) 2)京H8777 (2) 3)京H877745 (3) 4)冀H87774 (5) 5)京987774 (7) 6)京BA7774 (9) 6.6 比較測試與測試,說明其異同。 測試與測試都是集成測試之后所進行的測試,都屬于系統(tǒng)測試。所不同的是,測試是在開發(fā)環(huán)境中所做的測試,主要由開發(fā)方人員進行。而測試則是在用戶實際工作環(huán)境中所做的測試,不受開發(fā)人員的干預(yù)。 設(shè)計下列偽碼程序的語句覆蓋和路徑覆蓋測試用例: 補充題:START INPUT(A,B,C) INPUT(A,B,C)Y N IF A>5A>5 THEN X=10 X=1 X=10 精選Y N B>10 . EL

42、SE X=1 END IF IF B>10 THEN Y=20 ELSE Y=2 END IF IF C>15 THEN Z=30 ELSE Z=3 END IF PRINT(X,Y,Z) STOP 設(shè)輸入數(shù)據(jù)為<A,B,C>,輸出數(shù)據(jù)為<X,Y,Z>。 語句覆蓋測試用例:【<6,12,20>,<10,20,30>】, 【<4,8,10>,<1,2,3>】 路徑覆蓋測試用例: 【<6,12,20>,<10,20,30>】 【<6,12,10>,<10,20,3>】

43、 精選. 【<6,8,20>,<10,2,30>】 【<6,8,10>,<10,2,3>】 【<4,12,20>,<1,20,30>】 【<4,12,10>,<1,20,3>】 【<4,8,20>,<1,2,30>】 【<4,8,10>,<1,2,3>】 第7章 統(tǒng)一建模語言UML概述 7.2 UML中有哪些關(guān)系?解釋類圖中聚合和關(guān)聯(lián)的相同點和不同點。 在UML中,常見的關(guān)系有泛化、聚合、關(guān)聯(lián)、依賴和實現(xiàn)。 在類圖中,關(guān)聯(lián)是一種結(jié)構(gòu)關(guān)系,它描述了兩個或

44、多個類的實例之間的連接關(guān)系。聚合描述了整體和部分之間的結(jié)構(gòu)關(guān)系。按照關(guān)聯(lián)關(guān)系的定義,聚合屬于一種特殊的關(guān)聯(lián)關(guān)系,只不過這種關(guān)聯(lián)關(guān)系具有明確的整體-部分含義而已。從耦合度的角度看,聚合關(guān)系要強于關(guān)聯(lián)關(guān)系。 7.4 討論順序圖與協(xié)作圖的關(guān)系,何時用順序圖建模優(yōu)于協(xié)作圖建模,以及相反的情況。 順序圖和協(xié)作圖都能描述對象間的交互關(guān)系,但兩者的側(cè)重點不同,順序圖著重表現(xiàn)交互的時間順序,協(xié)作圖則著重表現(xiàn)交互對象的靜態(tài)鏈接關(guān)系。但即使他們各有側(cè)重,但從語義上來說是等價的,可從一種圖自動轉(zhuǎn)換為另一種圖。 一般情況下,當(dāng)需要強調(diào)消息傳遞的時間順序時,采用順序圖;當(dāng)表示涉及很多對象的模型時,協(xié)作圖比順序圖更形象。

45、順序圖在分析中更常用,而協(xié)作圖則在設(shè)計中更常用。 7.5 考慮銀行系統(tǒng)中的帳戶會有哪幾種狀態(tài),畫出帳戶對象的狀態(tài)圖。 賬戶的狀態(tài)包括開戶、正常使用、透支、休眠、凍結(jié)和注銷。賬戶對象的狀態(tài)圖如下圖所示。 精選. 面向?qū)ο蠓治?章 第 比較面向?qū)ο蟮姆治龇椒ê兔嫦驍?shù)據(jù)流的分析方法,闡述它們各自的特點。8.1面向?qū)ο蟮姆治龇椒ㄊ褂糜美P蛠肀硎居脩舻墓δ苄枨?,用例模型相?dāng)于功能模型,但面向?qū)ο蟮姆治龇椒ú⒉皇且砸舶殡S著對功能的分解。在對用例模型進行細化的過程中,建立對象模重點以類和對象為核心,功能分解為核心,在獲取并分析用戶的功能需求之后,(環(huán)面向數(shù)據(jù)流的分析方法是從建立頂層數(shù)據(jù)流圖型,交互模型也是

46、圍繞對象模型進行的。 境圖)開始,之后逐層對加工進行分解。面向數(shù)據(jù)流的分析方法是以功能分解為核心的。 面向?qū)ο蠓治鲂枰⒌娜齻€模型是什么?8.2 ;用個模型是:由用例和場景表示的功能模型(用例模型)面向?qū)ο蠓治鲂枰⒌? ;由狀態(tài)圖和順序圖表示的動態(tài)模型(交互模型)。類和對象表示的靜態(tài)模型(對象模型) 8.3 用例建模的主要步驟是什么? 用例建模的主要步驟如下: 確定業(yè)務(wù)參與者可以是與系統(tǒng)有交互的外部硬件、軟件、組織、人等。(1) 確定業(yè)務(wù)需求用例參與者需要系統(tǒng)提供的完整功能。(2) 創(chuàng)建用例圖標識參與者與用例之間、用例與用例之間的關(guān)系。(3) 用例與用例之間的關(guān)系主要有哪兩種?其區(qū)別是什

47、么?8.5 )和擴展。 用例之間的關(guān)系主要有包含(也稱使用 是指一個用表示一個用例所執(zhí)行的功能中總是包括被包含用例的功能;擴展包含聯(lián)系可用于對期望或可選的行為建模,擴展例的執(zhí)行可能需要由其他用例的功能來擴展, 但其主要用途是使基本用例的功能不依賴于擴展用例。 對于復(fù)雜的系統(tǒng),其對象模型應(yīng)該由哪五個層次組成?8.6 對象、類)-也稱為范疇層個層次組成:主題層對于復(fù)雜的系統(tǒng),對象模型應(yīng)該由下述5( 層、結(jié)構(gòu)層、屬性層和服務(wù)層,如圖所示。 精選. 對象模型的五個層次 解釋關(guān)聯(lián)類的作用,在什么時候需要使用關(guān)聯(lián)類?8.7 關(guān)聯(lián)類的作用是描述關(guān)聯(lián)的屬性。但在某些情在關(guān)聯(lián)關(guān)系比較簡單的情況下,關(guān)聯(lián)關(guān)系的語義

48、用關(guān)聯(lián)關(guān)系的名字來概括。association 存儲和訪問,為此可以建立關(guān)聯(lián)類(況下,需要對關(guān)聯(lián)關(guān)系的語義做詳細的定義、 class)。 UML類圖:8.8 按照以下描述,畫出章和節(jié)都具有標題和序每一章包含許多節(jié)、小結(jié)和習(xí)題組成,一本教材由許多章組成, 號屬性。 UML類圖如下: 考慮一個計算機超市,出售硬件、外設(shè)和軟件。分析誰是這個系統(tǒng)的參與者?這個系統(tǒng)8.9 有哪些主要用例?畫出用例圖。 。,客戶(customer)salesperson系統(tǒng)的參與者:系統(tǒng)管理員(administrator),售貨員() 主要用例 說明 用例 編號 參與者增加、修改、刪除商品信息(商品編號、(維護Maint

49、ain product information 1 商品信息) 名稱、型號、價格)administrator Maintain membership information增加、修改、刪除會員信息(會員編號、 2 姓名、身份證號、辦卡日期)(維護會員信息)(掃描會員在商品出售之前,系統(tǒng)通過掃描儀刷卡Scan membership card 3 (會員卡)來確認顧客的會員身份 卡) salesperson(掃描商品的條4通過掃描商品的條形碼,自動識別商品 Scan product code 精選. 的名稱和價格形碼) 對于已經(jīng)掃描的條形碼,手工輸入購買(輸入商品Input amount of p

50、roduct 5 的此件商品的數(shù)量 數(shù)量) Accept payment(接收現(xiàn)金付款)salesperson, (使用銀行Charge payment to card 6customer 卡付款) (打印收據(jù))salesperson7 Print receipt 用例圖如下: 面向?qū)ο笤O(shè)計10第章 軟件模塊之間的依賴性可以從哪些角度和抽象層次進行分析?10.1 在面向?qū)ο筌浖?,常見的軟件模塊有類、接口、包、構(gòu)件。因此,分析軟件模塊之間 的依賴性就可以從類、接口、包和構(gòu)件的角度和層次進行分析。 消除包之間循環(huán)依賴性的方法是什么?10.2 精選. 類之間的循環(huán)依賴性是本質(zhì)上,兩個包之間的依賴性來自于兩個包中類之間的依賴性。

溫馨提示

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

評論

0/150

提交評論