




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第 1 章 軟件與軟件工程的概念1.1 舉出你所知道的應(yīng)用軟件的例子。辦公軟件、游戲軟件、財務(wù)軟件、銀行軟件、人事管理軟件、工資管理軟件、學籍管理軟件等。1.2 認為“軟件就是程序,軟件開發(fā)就是編程序。”這種觀點是否正確?為什么?認為“軟件就是程序,軟件開發(fā)就是編程序?!边@種觀點是錯誤的。首先, 軟件是計算機系統(tǒng)中與硬件相互依存的另一部分,它是包括程序,數(shù)據(jù)及其相關(guān)文檔的完整集合,程序只是軟件的組成部分之一;其次,在軟件開發(fā)中,編程只是軟件開發(fā)過程的一個階段。1.3 如果將軟件開發(fā)比作高樓大廈的建造,可以將軟件的設(shè)計比作什么?可以將軟件的設(shè)計比作建筑設(shè)計,軟件設(shè)計的成果相當于建筑設(shè)計的設(shè)計圖紙
2、。1.4 什么是軟件危機?它有哪些典型表現(xiàn)?為什么會出現(xiàn)軟件危機?軟件危機:軟件危機是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。典型表現(xiàn):(1) 對軟件開發(fā)成本和進度的估計常常很不準確。(2) 用戶對 “已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。(3) 軟件產(chǎn)品的質(zhì)量往往靠不住。(4) 軟件常常是不可維護的。(5) 軟件通常沒有適當?shù)奈臋n資料。(6) 軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升。(7) 軟件開發(fā)生產(chǎn)率提高的速度,既跟不上硬件的發(fā)展速度,也遠遠跟不上計算機應(yīng)用迅速普及深入的趨勢。產(chǎn)生軟件危機的原因:除了軟件本身的特點,其原因主要有以下幾個方面:(1) 缺乏軟件開發(fā)
3、的經(jīng)驗和有關(guān)軟件開發(fā)數(shù)據(jù)的積累,使得開發(fā)工作計劃很難制定。(2) 軟件人員與用戶的交流存在障礙,使得獲取的需求不充分或存在錯誤。(3) 軟件開發(fā)過程不規(guī)范。如,沒有真正了解用戶的需求就開始編程序。(4) 隨著軟件規(guī)模的增大,其復雜性往往會呈指數(shù)級升高。需要很多人分工協(xié)作,不僅涉及技術(shù)問題,更重要的是必須有科學嚴格的管理。(5) 缺少有效的軟件評測手段,提交給用戶的軟件的質(zhì)量不能完全保證。1.5 什么是軟件工程?軟件工程是指導計算機軟件開發(fā)和維護的工程學科。采用工程的概念、原理、 技術(shù)和方法來開發(fā)和維護軟件,把經(jīng)過時間考驗而證明正確的管理技術(shù)和當前能夠得到的最好的技術(shù)方法結(jié)合起來,以經(jīng)濟地開發(fā)出
4、高質(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)中的每一組成部分都是意義明確的構(gòu)件,此即所謂概要設(shè)計。進而具
5、體描述每個構(gòu)件所要完成的工作,為源程序編寫打下基礎(chǔ),此即所謂詳細設(shè)計。(4) 程序編碼和單元測試:本階段要解決的問題是“正確地實現(xiàn)已做的設(shè)計”,為此,需要選擇合適的編程語言,把軟件設(shè)計轉(zhuǎn)換成計算機可以接受的程序代碼,并對程序結(jié)構(gòu)中的各個模塊進行單元測試,然后運用調(diào)試的手段排除測試中發(fā)現(xiàn)的錯誤。要求編寫出的程序應(yīng)當是結(jié)構(gòu)良好、清晰易讀的,且與設(shè)計相一致的。(5) 集成測試和系統(tǒng)測試:集成測試的任務(wù)是將已測試過的模塊按設(shè)計規(guī)定的順序組裝起來,在組裝的過程中檢查程序連接的問題。系統(tǒng)測試的任務(wù)是根據(jù)需求規(guī)格說明的要求,對必須實現(xiàn)的各項需求,逐項進行確認,判定已開發(fā)的軟件是否符合用戶需求,能否交付用戶使
6、用。為了更有效地發(fā)現(xiàn)系統(tǒng)中的問題,通常這個階段的工作由開發(fā)人員、用戶之外的第三者承擔。(6) 運行維護:已交付的軟件投入正式使用,便進入運行維護階段。這一階段可能持續(xù)若干年。軟件在運行中可能由于多方面的原因,需要對它進行維護。通常有四種類型的維護:改正性維護、適應(yīng)性維護、完善性維護和預防性維護。1.7 常見的軟件生存期模型主要有哪些?每種模型的優(yōu)缺點是什么?常見的軟件生存期模型主要有瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型和統(tǒng)一過程。(1) 瀑布模型優(yōu)點: 可強迫開發(fā)人員采用規(guī)范化的方法;嚴格地規(guī)定了每個階段必須提交的文檔;要求每個階段交出的所有產(chǎn)品都必須經(jīng)過質(zhì)量保證小組的仔細驗證
7、。缺點: 由于瀑布模型幾乎完全依賴于書面的規(guī)格說明,很可能導致最終開發(fā)出的軟件產(chǎn)品不能真正滿足用戶的需要;用戶往往需要等待很長時間才能看到可以運行的程序;適應(yīng)需求變更的能力比較差。適用范圍:瀑布模型只適用于項目開始時需求已確定的情況。(2) 快速原型模型優(yōu)點:有助于滿足用戶的真實需求;原型系統(tǒng)已經(jīng)通過與用戶的交互而得到驗證,據(jù)此產(chǎn)生的規(guī)格說明文檔能夠正確地描述用戶需求。缺點:要求開發(fā)人員快速建立原型。適用范圍:適用于需求不明確的軟件項目。(3) 增量模型優(yōu)點:能在較短時間內(nèi)向用戶提交可完成一些基本功能的產(chǎn)品,即從第一個構(gòu)件交付之日起,用戶就能做一些有用的工作。逐步增加產(chǎn)品的功能可以使用戶有較充
8、裕的時間學習和適應(yīng)新產(chǎn)品,從而減少一個全新的軟件可能給用戶組織帶來的沖擊。項目失敗的風險較低,雖然在某些增量構(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)件的過程必須簡單、方便。適用范圍:適用于工期緊張、功能可以劃分、比較復雜的軟件項目。軟件工程師必須有較高的技術(shù)水平,能夠設(shè)計出開放的軟件體系結(jié)構(gòu)。(4) 螺旋模型優(yōu)點:對可選方案和約束條件的強調(diào)
9、有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開發(fā)的一個重要目標;減少了過多測試或測試不足所帶來的風險;在螺旋模型中維護只是模型的另一個周期,在維護和開發(fā)之間并沒有本質(zhì)區(qū)別。缺點: 螺旋模型是風險驅(qū)動的,因此要求軟件開發(fā)人員必須具有豐富的風險評估經(jīng)驗和這方面的專門知識,否則將出現(xiàn)真正的風險:當項目實際上正在走向災(zāi)難時,開發(fā)人員可能還以為一切正常。適用范圍:適用于內(nèi)部開發(fā)的大型軟件(開發(fā)周期長、比較容易受到社會因素影響的軟件項目) ,軟件開發(fā)人員具有豐富的風險評估知識和經(jīng)驗。(5) 噴泉模型優(yōu)點: 在開發(fā)過程中使用統(tǒng)一的概念和方法,各階段之間沒有明顯的界限,容易實現(xiàn)各個開發(fā)過程的多次反復迭代,
10、達到了認識的逐步深化,降低了出錯的可能性。缺點:由于各個階段之間的界線不明確,容易造成軟件開發(fā)過程的無序。適用范圍:適用于面向?qū)ο蟮能浖_發(fā)。(6) 統(tǒng)一過程優(yōu)點: 提高了團隊生產(chǎn)力,在迭代的開發(fā)過程、需求管理、基于組件的體系結(jié)構(gòu)、可視化軟件建模、 驗證軟件質(zhì)量及控制軟件變更等方面,針對所有關(guān)鍵的開發(fā)活動為每個開發(fā)成員提供了必要的準則、模板和工具指導,并確保全體成員共享相同的知識基礎(chǔ)。它建立了簡潔和清晰的過程結(jié)構(gòu),為開發(fā)過程提供了較大的通用性。缺點 : RUP 只是一個開發(fā)過程,并沒有涵蓋軟件過程的全部內(nèi)容,例如它缺少關(guān)于軟件運行和支持等方面的內(nèi)容;此外, 它沒有支持多項目的開發(fā)結(jié)構(gòu),這在一定
11、程度上降低了在開發(fā)組織內(nèi)大范圍實現(xiàn)重用的可能性。適用范圍:適用于基于構(gòu)件的軟件開發(fā)。第 2 章 軟件工程方法與工具2.1 軟件工程的三種基本要素是什么,各自的作用是什么?軟件工程的三種基本要素是方法、工具和過程。(1)軟件工程方法(method)為建造軟件提供技術(shù)上的解決方法(“如何做”)。目前 使用得最廣泛的方法是傳統(tǒng)方法(結(jié)構(gòu)化方法)和面向?qū)ο蠓椒ā?2) 工具為方法的運用提供自動的或半自動的軟件支撐環(huán)境。(3) 過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項任務(wù)的工作步驟。2.2 簡述傳統(tǒng)方法和面向?qū)ο蠓椒ǖ奶攸c。(1) 傳統(tǒng)方法的特點傳統(tǒng)方法也稱為生命周期方法
12、或結(jié)構(gòu)化范型。它采用結(jié)構(gòu)化技術(shù)來完成軟件開發(fā)的各項任務(wù)。 這種方法學把軟件生命周期的全過程依次劃分為若干個階段,然后順序地逐步完成每個階段的任務(wù)。每一個階段的開始和結(jié)束都有嚴格的標準,對于任何兩個相鄰的階段而言,前一個階段的結(jié)束標準就是后一階段的開始標準。傳統(tǒng)方法的主要缺點是在適應(yīng)需求變化方面不夠靈活,另外, 結(jié)構(gòu)化方法要么面向行為,要么面向數(shù)據(jù),缺乏使兩者有機結(jié)合的機制。( 2)面向?qū)ο蠓椒ǖ奶攸c面向?qū)ο蠓椒ò褦?shù)據(jù)和行為看成同等重要,是將數(shù)據(jù)和對數(shù)據(jù)的操作緊密地結(jié)合起來的方法,這也是面向?qū)ο蠓椒ㄅc傳統(tǒng)方法的重要區(qū)別。面向?qū)ο蠓椒ǖ某霭l(fā)點和基本原則,是盡量模擬人類習慣的思維方式,使開發(fā)軟件的方
13、法和過程盡可能接近人類認識問題和解決問題的方法與過程,從而使描述問題的問題空間與其解空間在結(jié)構(gòu)上盡可能一致。對于大型、復雜及交互性比較強的系統(tǒng),使用面向?qū)ο蠓椒ǜ袃?yōu)勢。2.3 形式化方法的特點是什么?形式化方法的主要特點是:(1) 軟件需求規(guī)格說明被細化為用數(shù)學記號表達的詳細的形式化規(guī)格說明;(2) 設(shè)計、實現(xiàn)和單元測試等開發(fā)過程由一個變換開發(fā)過程代替。通過一系列變換將形式的規(guī)格說明細化成為程序。2.5 安裝 Rational Rose2000/2002/2003 ,并練習基本操作。略。第 3 章 軟件需求獲取與結(jié)構(gòu)化分析方法3.1 為什么結(jié)構(gòu)化分析要叫“結(jié)構(gòu)化”?有其他可替代的術(shù)語嗎?“結(jié)
14、構(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)的輸入和輸出與外部實體的關(guān)系確定系統(tǒng)的邊界,也就是要確定哪些功能或處理屬于系統(tǒng)范圍之內(nèi),哪些屬于系統(tǒng)范圍之外,需要由其他系統(tǒng)處理或人工處理。3.3 在對數(shù)據(jù)流圖進行分解時需要注意哪些問題?在對數(shù)據(jù)流圖進行分解
15、時,需要注意以下兩個問題:(1) 當對數(shù)據(jù)流圖分層細化時必須保持信息連續(xù)性,也就是說,當把一個處理分解為一系列處理時,分解前和分解后的輸入/輸出數(shù)據(jù)流必須相同。(2) 注意分層細化時對編號的處理方法。3.4 銀行存款業(yè)務(wù)如下:客戶到銀行柜臺存款時,首先填寫存款單(包括帳號、姓名、存款金額、存款類型),如果還沒有開戶,則需要先開戶,填寫開戶單(包括姓名、身份證號、地址、電話、是否留密碼)。填寫完存款單或開戶單后,交給營業(yè)員,營業(yè)員將存款單或開戶單信息輸入計算機,系統(tǒng)記錄開戶信息或存款單信息,如果是開戶并選擇留密碼,則需要客戶輸入密碼。最后印出開戶單或存款單給用戶。請畫出銀行存款業(yè)務(wù)的分層數(shù)據(jù)流圖
16、(至少畫出兩層)。(1) 識別外部實體及輸入輸出數(shù)據(jù)流外部實體:儲戶、業(yè)務(wù)員。輸入數(shù)據(jù)流:存款單,開戶單,密碼??梢詫⒋婵顔魏烷_戶單抽象為事務(wù)。輸出數(shù)據(jù)流:存款單,開戶單。(2) 頂層數(shù)據(jù)流圖對銀行儲蓄系統(tǒng)進行分解,從大的方面分解為接收事務(wù)、處理開戶、處理存款三部分,得到一層數(shù)據(jù)流圖。(4)二層數(shù)據(jù)流圖對“處理存款”及“處理開戶”進行進一步分解,得到二層數(shù)據(jù)流圖,即處理存款的 數(shù)據(jù)流圖和處理開戶的數(shù)據(jù)流圖。處理存款的數(shù)據(jù)流圖開戶信宣處理開戶的數(shù)據(jù)流圖打印天戶西 /3.5 按照以下描述,畫出 ER圖。一本教材由許多章組成,每一章包含許多節(jié)、小結(jié)和習題組成,章和節(jié)都具有標題和序號 屬性。ER圖如下
17、:第4章結(jié)構(gòu)化設(shè)計方法4.1 當你“編寫”程序時你設(shè)計軟件嗎?軟件設(shè)計和編碼有什么不同嗎?在“編寫”程序時并沒有設(shè)計軟件。軟件設(shè)計包括概要設(shè)計和詳細設(shè)計,編碼是將詳細 設(shè)計中的過程描述轉(zhuǎn)換成用程序設(shè)計語言來描述。4.4 是否存在一種情況:復雜問題需要較少的工作去解決?這樣的情況對模塊化觀點有什么 影響?通過對復雜的問題進行合理分解,分解為若干個相對簡單及獨立的子問題,就可以用較少的工作去解決。這種情況能夠較好地支持模塊化的觀點,每個子問題用單獨的模塊去解決,模塊之間應(yīng)該是高內(nèi)聚、低耦合的,這樣才能減少工作量,否則,雖然每個模塊的工作 簡單了,但模塊之間的聯(lián)系很復雜,也增加了問題解決的難度和工作
18、量。4.8 用面向數(shù)據(jù)流的方法設(shè)計第 3章習題3.4所描述的銀行存款業(yè)務(wù)的軟件結(jié)構(gòu),并使用改 進方法對模塊結(jié)構(gòu)進行精化。(1)對第3章習題3.4給出的數(shù)據(jù)流圖進行精化,確定其邊界,如下圖所示。(2)對上圖按事務(wù)型數(shù)據(jù)流進行處理,完成第一級分解,得到頂層和一層模塊結(jié)構(gòu)圖。第一級分解后的結(jié)構(gòu)圖(3)完成第二級分解。對上圖所示的“輸入數(shù)據(jù)”、“輸出數(shù)據(jù)”和“調(diào)度”模塊進行 分解,得到未經(jīng)精化的輸入結(jié)構(gòu)、輸出結(jié)構(gòu)和事務(wù)結(jié)構(gòu)。未經(jīng)精化的輸入結(jié)構(gòu)未經(jīng)精化的輸出結(jié)構(gòu)未經(jīng)精化的事務(wù)結(jié)構(gòu)將上面的三部分合在一起,得到初始的軟件結(jié)構(gòu),如下圖所示。存款業(yè)務(wù)輸入數(shù)據(jù)調(diào)度輸出數(shù)據(jù)輸入事務(wù)處理存款打印存款單輸入密碼處理開戶
19、打印開戶單記錄存款信息記錄開戶信息記錄密碼初始軟件結(jié)構(gòu)圖對軟件結(jié)構(gòu)進行精化(4)如圖所示。1)存款業(yè)務(wù)處理存款輸入數(shù)據(jù)處理開戶輸出數(shù)據(jù)輸入事務(wù)記錄存款信息打印存款單輸入密碼記錄密碼打印開戶單將調(diào)度模塊合并到上級模塊后的軟件結(jié)構(gòu)模塊的作用范圍不在其控制范圍之內(nèi)輸入密碼存款業(yè)務(wù)處理存款處理開戶輸出數(shù)據(jù)輸入事務(wù)記錄存款信息打印存款單記錄密碼打印開戶單輸入密碼存款業(yè)務(wù)處理開戶輸入事務(wù)處理存款由于調(diào)度模塊下只有兩種事務(wù),因此,可以將調(diào)度模塊合并到上級模塊中3)提高模塊獨立性,對模塊結(jié)構(gòu)進行調(diào)整,如下圖所示。2) “記錄密碼錄密碼”模塊的控制范圍之內(nèi)),需對其進行調(diào)整,如圖所示。調(diào)整后的模塊結(jié)構(gòu)圖4.9
20、將大的軟件劃分成模塊有什么好處?是不是模塊劃分得越小越好?劃分模塊的依據(jù)是什么?將大的軟件劃分成獨立命名且可獨立訪問的模塊,不同的模塊通常具有不同的功能或職責。這種方法有利于將復雜的問題簡單化,是分而治之策略的具體表現(xiàn)。盡管模塊分解可以簡化要解決的問題,但模塊分解并不是越小越好。 當模塊數(shù)目增加時,每個模塊的規(guī)模將減小,開發(fā)單個模塊的成本確實減少了;但是,隨著模塊數(shù)目增加, 模塊之間關(guān)系的復雜程度也會增加,設(shè)計模塊間接口所需要的工作量也將增加。劃分模塊的依據(jù)是,模塊只具有單一的功能且與其他模塊沒有太多的聯(lián)系。4.11 結(jié)構(gòu)化程序設(shè)計禁止使用goto語句嗎?如果程序中使用了goto語句,是否就可
21、以斷定它是非結(jié)構(gòu)化的?結(jié)構(gòu)化程序設(shè)計并不禁止使用goto語句。如果程序中使用了goto語句,并不能斷定它是非結(jié)構(gòu)化的。4.12 對于給定的算法,如何判斷它是否是結(jié)構(gòu)化的?對于給定的算法,如果符合以下三條原則,就可以判斷它是結(jié)構(gòu)化的。(1)使用語言中的順序、選擇、重復等有限的基本控制結(jié)構(gòu)表示程序邏輯。(2)選用的控制結(jié)構(gòu)只準許有一個入口和一個出口。(3)程序語句組成容易識別的塊( Block),每塊只有一個入口和一個出口。4.13 對于圖4-49所示的流程圖,試分別用N-S圖和PAD表示之。B圖 4-49流程圖對應(yīng)的PAD如下:對應(yīng)的N-S圖如下:table數(shù)組中找出值為item 的4.14 圖
22、4-50所示的流程圖完成的功能是使用二分查找方法在 數(shù)是否存在。(1)判斷此算法是否是結(jié)構(gòu)化的,說明理由。(2)若算法是非結(jié)構(gòu)化的,設(shè)計一個等價的結(jié)構(gòu)化算法,并用N-S圖表示。開始i = (start + finish)/2table(i尸item圖4-50二分查找算法的流程圖(1)不是結(jié)構(gòu)化的,最上面的循環(huán)有兩個出口,最下面的分支有三個入口。(2)等價的結(jié)構(gòu)化算法如下:或者或者START=I+1FINISH=I-14.15 使用自頂向下、逐步細化方法設(shè)計算法,完成下列任務(wù):產(chǎn)生一個10M10的二維隨機整數(shù)方陣,先求出每一行的最大值和每一列的最小值;然后求10個最大值中的最小者,10個最小值中
23、的最大者;最后求這兩個數(shù)之差的平方。(1)首先寫出下面的程序框架:main ()定義10刈0的二維整數(shù)數(shù)組 A,長度為10的一維數(shù)組B, C;建立10x10的二維隨機整數(shù)數(shù)組 A;1求A中每一行的最大值數(shù)組B ; 2求A中每一列的最小值數(shù)組C; 3求數(shù)組B中的最小值minOfB; 4求數(shù)組C中的最大值maxOfC; 5(minOfB- maxOfC)A2result;(2)對后面加標記的部分進行細化main ()定義10M10的二維整數(shù)數(shù)組 A,長度為10的一維數(shù)組B, C;/*建立10 M10的二維隨機整數(shù)數(shù)組 A*/1for (i=0; i<=9; i+)for (j=0; j<
24、;=9; j+) 產(chǎn)生隨機整數(shù)Ai,j;/*求A中每一行的最大值數(shù)組B*/2for (i=0; i<=9; i+) 求數(shù)組A第i行的最大值 Bi;2.1/*求A中每一列的最小值數(shù)組C*/3for (j=0; j<=9; j+) 求數(shù)組A第j列的最小值 Cj;3.1/*求數(shù)組B中的最小值 minOfB*/ 4 minOfB = B0;for (i=1; i<=9; i+) if (minOfB < Bi) minOfB = Bi;/*求數(shù)組C中的最大值 maxOfC*/ 5maxOfC = C0;for ( i=1; i<=9; i+) if (maxOfC>
25、Ci) maxOfC = Ci;(minOfB- maxOfC)A2result;(3)下一步可以繼續(xù)對 2.1和3.1進行細化。具體略。4.16 設(shè)計算法完成下列任務(wù):輸入一段英文后,無論輸入的文字都是大寫,還是小寫,或 大小寫任意混合,都能將其整理成除每個句子開頭字母是大寫外,其他都是小寫的文字。假設(shè)在輸入的文字中,兩個單詞間只允許是空格、,、.、?、!,則在輸出的文字中,大寫的情況有以下幾種:(1)整段文字的第一個字母是大寫;(2) “:后的第一個字母是大寫;(3) “?”后的第一個字母是大寫;(4) "!”后的第一個字母是大寫;設(shè)變量a存儲輸入的字符串,變量 b存儲結(jié)果字符串
26、,變量 c存儲當前處理的字符,變 量e存儲c之前的字符(當c為第一個字符時除外)。算法如下:5.1 有人說程序編好后能上機運行就可以了,為什么還要講究風格和可讀性呢?你覺得對嗎?為什么?對于學生的練習題和作業(yè)題,程序編好后能上機運行, 一般認為任務(wù)就完成了。 但對于實際開發(fā)的項目來說, 任務(wù)并沒有結(jié)束。編碼人員編寫完程序后, 要對自己的程序進行單元 測試,測試人員要進行集成測試和系統(tǒng)測試,提交用戶使用后,還需要對軟件進行持續(xù)的維護修改工作。在軟件開發(fā)和維護過程中,都需要閱讀程序。道理很簡單,如果需要對某段程序進行修改,首先要讀懂,閱讀程序是軟件開發(fā)和維護過程中的一個重要組成部分,而且讀程序的時
27、間比寫程序的時間還要多。所以,程序的風格和可讀性很重要,具有良好的程序風格和可讀性的程序,有助于對程序的正確理解,可以大大減少閱讀理解程序的時間,從而提高維護工作的效率。5.2 一般情況下,程序的效率和清晰性相比哪一個更重要?在計算機發(fā)展的早期,由于CPU 效率低,內(nèi)存小,程序在運行時容易出現(xiàn)運行時間太長或內(nèi)存溢出問題。因此,人們在編寫程序時,很注重程序的時間效率和空間效率,而不太注重程序的清晰性。隨著計算機硬件性能的飛速發(fā)展以及軟件規(guī)模和復雜性的急劇增加,這種情況已經(jīng)發(fā)生了根本的轉(zhuǎn)變,程序的清晰性越來越受到重視,程序的清晰性不好會給測試、維護修改帶來困難,這對于規(guī)模龐大和復雜的軟件尤其明顯。
28、軟件運行的效率主要取決于軟件的體系結(jié)構(gòu)及算法,編碼階段雖然也有機會提高效率,但效果并不明顯。對于效率沒有特殊嚴格要求的系統(tǒng)來說,要將程序的清晰性放在第一位,在不影響清晰性的情況下,去改進效率。5.6 在一行內(nèi)只寫一條語句,并且采取適當?shù)囊菩懈袷?,使程序的邏輯和功能變得更加明確。許多程序設(shè)計語言允許在一行內(nèi)寫多個語句。但這種方式會使程序可讀性變差。下面是一段排序程序,請對其編碼風格進行改進,以增加其可讀性。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;改進
29、后的代碼如下: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;5.7 請對下面代碼的布局進行改進,使其符合規(guī)范其更容易理解。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改進后的代碼如下:for (i=1; i<=n-1; i+) t=i;for (j=i+1; j<=n; j+) if (aj<
30、;at) t=j;if (t!=i)temp=at;at=ai;ai=temp 5.8 使用你熟悉的語言編寫出習題4.15的程序,注意編碼風格。下面為使用C語言編寫的習題4.15的程序:#include "math.h"#include "stdio.h"#include "stdlib.h"#include "time.h"/*求10 M10的二維數(shù)組a的每一行的最大值存入一維數(shù)組b,每一列的最小值存入一維數(shù)組c, minOfB存儲數(shù)組b的最小值,maxOfC存儲數(shù)組c的最大值,result存儲minOfB 與m
31、axOfC之差的平方。*/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+)aij=rand()%100+1; 產(chǎn)生 1-100 之間的隨機數(shù)/*求a中每一行的最大值數(shù)組b*/for (i=0; i<=9; i+)/*求數(shù)組a第i行的最大值 bi */bi=ai0;for (j=1; j<=9; j+)if (
32、aij>bi) bi = aij/* 求 a 中每一列的最小值數(shù)組 c*/for (j=0; j<=9; j+)/* 求數(shù)組 a 第 j 列的最小值cj; */cj=a0j;for (i=1; i<=9; i+) if (aij<cj) cj = aij;/* 求數(shù)組 b 中的最小值minOfB*/minOfB = b0;for (i=1; i<=9; i+)if (minOfB > bi) minOfB = bi;/* 求數(shù)組 c 中的最大值maxOfC*/maxOfC = c0;for (i=1; i<=9; i+)if (maxOfC<ci
33、) maxOfC = ci;result = pow(minOfB- maxOfC, 2);printf(" 結(jié)果是:%d",result);return(result);5.9 使用你熟悉的語言編寫出習題4.16 的程序,注意編碼風格。下面為使用C 語言編寫的習題4.16 的程序:#include "stdio.h"#include "string.h"#include "ctype.h"/*將一段英文輸入變量a (假設(shè)兩個單詞間只允許是空格、,、.、?、!),將其整理成每個句子開頭字母是大寫、其他都是小寫的字符
34、串存儲在變量b 中。 變量 c 存儲當前處理的字符,變量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=toupper(c);elsec=tolower(c);bi
35、=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ù)有效等價類無效等價類字符個數(shù)7個(1)06 個(2) , >7 個(3)首字符“京”(4)非“京”(5)第2個字符字母(6)非字母(7)第37個字符數(shù)字(8)非數(shù)字(9)測試用例如下:1)京 H87774(1),(4),(6),(8)2)京 H87
36、77(2)3)京 H877745(3)4)冀 H87774(5)5)京 987774(7)6)京 BA7774 (9)6.6 比較a測試與 刪試,說明其異同。a測試與 aB式都是集成測試之后所進行的測試,都屬于系統(tǒng)測試。所不同的是,a測試是在開發(fā)環(huán)境中所做的測試,主要由開發(fā)方人員進行。而P測試則是在用戶實際工作環(huán)境中所做的測試,不受開發(fā)人員的干預。補充題:設(shè)計下列偽碼程序的語句覆蓋和路徑覆蓋測試用例:STARTINPUT(A,B,C)IF A>5THEN X=10ELSE X=1END IFIF B>10THEN Y=20ELSE Y=2END IFIF C>15THEN Z
37、=30ELSE Z=3END IFPRINT(X,Y,Z)STOPPRINT(X,Y,Z)設(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> 】【 <6,8,20> , <10,2,30> 】【 <6,
38、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)系,它描述了兩個或多個類的實例之間的連接關(guān)系。聚合描述了整體和部分之間的結(jié)構(gòu)關(guān)系
39、。按照關(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)換為另一種圖。一般情況下,當需要強調(diào)消息傳遞的時間順序時,采用順序圖;當表示涉及很多對象的模型時,協(xié)作圖比順序圖更形象。順序圖在分析中更常用,而協(xié)作圖則在設(shè)計中更常用。7.5 考慮銀行系統(tǒng)
40、中的帳戶會有哪幾種狀態(tài),畫出帳戶對象的狀態(tài)圖。賬戶的狀態(tài)包括開戶、正常使用、透支、休眠、凍結(jié)和注銷。賬戶對象的狀態(tài)圖如下圖所示。8.1 比較面向?qū)ο蟮姆治龇椒ê兔嫦驍?shù)據(jù)流的分析方法,闡述它們各自的特點。面向?qū)ο蟮姆治龇椒ㄊ褂糜美P蛠肀硎居脩舻墓δ苄枨螅美P拖喈斢诠δ苣P?,在對用例模型進行細化的過程中,也伴隨著對功能的分解。但面向?qū)ο蟮姆治龇椒ú⒉皇且怨δ芊纸鉃楹诵模讷@取并分析用戶的功能需求之后,重點以類和對象為核心, 建立對象模型,交互模型也是圍繞對象模型進行的。面向數(shù)據(jù)流的分析方法是從建立頂層數(shù)據(jù)流圖(環(huán)境圖)開始,之后逐層對加工進行分解。面向數(shù)據(jù)流的分析方法是以功能分解為核心的。8
41、.2 面向?qū)ο蠓治鲂枰⒌娜齻€模型是什么?面向?qū)ο蠓治鲂枰⒌?3個模型是:由用例和場景表示的功能模型(用例模型);用類和對象表示的靜態(tài)模型(對象模型);由狀態(tài)圖和順序圖表示的動態(tài)模型(交互模型)。8.3 用例建模的主要步驟是什么?用例建模的主要步驟如下:(1)確定業(yè)務(wù)參與者可以是與系統(tǒng)有交互的外部硬件、軟件、組織、人等。(2)確定業(yè)務(wù)需求用例參與者需要系統(tǒng)提供的完整功能。(3)創(chuàng)建用例圖標識參與者與用例之間、用例與用例之間的關(guān)系。8.5 用例與用例之間的關(guān)系主要有哪兩種?其區(qū)別是什么?用例之間的關(guān)系主要有包含(也稱使用)和擴展。包含表示一個用例所執(zhí)行的功能中總是包括被包含用例的功能;擴展
42、是指一個用例的執(zhí)行可能需要由其他用例的功能來擴展,擴展聯(lián)系可用于對期望或可選的行為建模,但其主要用途是使基本用例的功能不依賴于擴展用例。8.6 對于復雜的系統(tǒng),其對象模型應(yīng)該由哪五個層次組成?對于復雜的系統(tǒng),對象模型應(yīng)1由下述 5個層次組成:主題層(也稱為范疇層)、類-對象 層、結(jié)構(gòu)層、屬性層和服務(wù)層,如圖所示。 卡第里 美-對象層 晶構(gòu)層 修性堪 服多星 對象模型的五個層次8.7 解釋關(guān)聯(lián)類的作用,在什么時候需要使用關(guān)聯(lián)類?關(guān)聯(lián)類的作用是描述關(guān)聯(lián)的屬性。在關(guān)聯(lián)關(guān)系比較簡單的情況下,關(guān)聯(lián)關(guān)系的語義用關(guān)聯(lián)關(guān)系的名字來概括。但在某些情況下,需要對關(guān)聯(lián)關(guān)系的語義做詳細的定義、存儲和訪問,為此可以建立
43、關(guān)聯(lián)類 (associationclass)。8.8 按照以下描述,畫出 UML類圖:一本教材由許多章組成,每一章包含許多節(jié)、小結(jié)和習題組成,章和節(jié)都具有標題和序號屬性。UML類圖如下:8.9 考慮一個計算機超市,出售硬件、外設(shè)和軟件。分析誰是這個系統(tǒng)的參與者?這個系統(tǒng)有哪些主要用例?畫出用例圖。系統(tǒng)的參與者:系統(tǒng)管理員( administrator),售貨員(salesperson),客戶(customer)。主要用例編號參與者用例說明1administratorMaintain product information (維護商品信息)增加、修改、刪除商品信息(商品編號、名稱、型號、價格)2
44、Maintain membership information(維護會員信息)增加、修改、刪除會員信息(會員編號、姓名、身份證號、辦卡日期)3salespersonScan membership card (掃描會員卡)在商品出售之前,系統(tǒng)通過掃描儀刷卡(會員卡)來確認顧客的會員身份4Scan product code (掃描商品的條通過掃描商品的條形碼,自動識別商品形碼)的名稱和價格5Input amount of product (輸入商品數(shù)量)對于已經(jīng)掃描的條形碼,手工輸入購買的此件商品的數(shù)量6salesperson, customerAccept payment (接收現(xiàn)金付款)Cha
45、rge payment to card (使用銀行卡付款)7salespersonPrint receipt (打印收據(jù))用例圖如下:第10章面向?qū)ο笤O(shè)計1.1 1軟件模塊之間的依賴性可以從哪些角度和抽象層次進行分析?在面向?qū)ο筌浖?,常見的軟件模塊有類、接口、包、構(gòu)件。因此,分析軟件模塊之間 的依賴性就可以從類、接口、包和構(gòu)件的角度和層次進行分析。1.2 2消除包之間循環(huán)依賴性的方法是什么?本質(zhì)上,兩個包之間的依賴性來自于兩個包中類之間的依賴性。類之間的循環(huán)依賴性是個特別棘手的問題,好在大多數(shù)情況下可以通過重新設(shè)計避免循環(huán)依賴性。具體方法是增加新包。舉例說明如下:在下圖中,包 A依賴于包B,反過來包B又依賴包A,構(gòu)成了循環(huán)依賴。具體解決辦 法是:將包B依賴白包A中的元素從包 A中分離出來,組成包C,使得包B不再依賴包A , 而是依賴包Co1.3 3請
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025太陽能槽式復合拋物面聚光集熱土壤儲熱技術(shù)
- 個人勞動法權(quán)益保障合同
- 個人抵押借款擔保合同
- 分期付款購買機動車合同書
- 醫(yī)療器械藥品購銷合同
- 醫(yī)院場地租賃合同書樣本
- 五金電器銷售合同6篇
- 2025年紅河b2貨運上崗證模擬考試
- 合同范本銷售人員聘用合同7篇
- 面板自動檢測機競爭策略分析報告
- Boomer-XL3D鑿巖臺車(修訂版)
- 幼兒園小班故事《貪吃的小豬》課件
- 三年級(下)道德與法治第三單元教材分析課件
- Passport評估工具:項目復雜度評估表
- 南寧鐵路局招聘2023年高校畢業(yè)生133人筆試參考題庫(共500題)答案詳解版
- 軍用飛機改進方案
- 多發(fā)性肌炎的基本知識
- 新版-GSP-:中藥材、中藥飲片知識培訓試題及答案
- 裝修隱蔽工程驗收記錄表范例
- 攝影基礎(chǔ)知識教學課件-攝影師入門基礎(chǔ)知識
- 煙花爆竹基礎(chǔ)知識
評論
0/150
提交評論