




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
.PAGE.軟件工程作業(yè)1〔第1~4章一、選擇題:開發(fā)軟件所需高成本和產(chǎn)品的低質(zhì)量之間有著尖銳的矛盾,這種現(xiàn)象稱做〔C。A.軟件工程B.軟件周期C.軟件危機D.軟件產(chǎn)生瀑布模型本質(zhì)上是一種〔A模型。A.線性順序B.順序迭代C.線性迭代D.早期產(chǎn)品瀑布模型存在的問題是〔B。A.用戶容易參與開發(fā)B.缺乏靈活性C.用戶與開發(fā)者易溝通D.適用可變需求螺旋模型是一種將瀑布模型和〔A結合起來的軟件開發(fā)模型。A.增量模型B.專家系統(tǒng)C.噴泉模型D.變換模型原型化方法是用戶和設計者之間執(zhí)行的一種交互構成,適用于〔A系統(tǒng)。A.需求不確定性高的B.需求確定的C.管理信息D.實時下列有關軟件工程的標準,屬于國際標準的是<D>A.GBB.DINC.ISOD.IEEE結構化方法是一種基于〔D的方法。A.數(shù)據(jù)結構B.程序結構 C.算法D.數(shù)據(jù)流軟件可行性研究實質(zhì)上是要進行一次<A>需求分析、設計過程。A、簡化、壓縮的B、詳細的C、徹底的D、深入的可行性研究的目的是〔DA、分析開發(fā)系統(tǒng)的必要性 B、確定系統(tǒng)建設的方案 C、分析系統(tǒng)風險 D、確定是否值得開發(fā)系統(tǒng)設年利率為i,現(xiàn)存入p元,不計復利,n年后可得錢數(shù)為〔C。A、P×<1+i*n>B、P×<i+1>*nC、p×<1+i>nD、p×<i+n>可行性研究是在〔A之前A、系統(tǒng)開發(fā) B、測試 C、試運行 D、集成測試可行性研究需要的時間長短取決于系統(tǒng)的規(guī)模,一般來說,可行性研究的成本只是預期總成本的〔C。A、1% B、20% C、8% D、50%我國正式頒布實施的〔B對計算機病毒的定義具有法律性、權威性。A.《計算機軟件保護條例》B.《中華人民XX國計算機信息系統(tǒng)安全保護條例》C.《中華人民XX國著作權法》D.《計算機病毒防治管理辦法》效率是一個性能要求,因此應當在以下哪個階段規(guī)定?BA、可行性分析B、需求分析C、概要設計D、詳細設計需求規(guī)格說明書的作用不包括〔DA、軟件驗收的依據(jù)B、用戶與開發(fā)人員對軟件要做什么的共同理解C、軟件可行性研究的依據(jù)D、軟件設計的依據(jù)數(shù)據(jù)字典是用來定義〔D中的各個成份的具體含義的。A、程序流程圖B、功能結構圖C、系統(tǒng)結構圖D、數(shù)據(jù)流程圖數(shù)據(jù)流程圖是〔A方法中用于表示系統(tǒng)邏輯模型的一種圖形工具。A、SAB、SDC、SPD、SCDFD中的每個加工至少有<A>。A、一個輸入流或一個輸出流 B、一個輸入流和一個輸出流C、一個輸入流 D、一個輸出流需求分析階段的關鍵任務是確定〔DA、軟件開發(fā)方法B、軟件開發(fā)工具C、軟件開發(fā)費D、軟件系統(tǒng)的功能在SD方法中全面指導模塊劃分的最重要的原則是〔D。A、程序模塊化B、模塊高內(nèi)聚C、模塊低耦合D、模塊獨立性在模塊的3種基本屬性中,反映模塊內(nèi)部特性的是〔C。A、接口B、功能C、邏輯D、狀態(tài)模塊的耦合性可以按照耦合程度的高低進行排序,以下哪一項符合從低到高的正確次序〔D。A、數(shù)據(jù)結構耦合,公共耦合,控制耦合,內(nèi)容耦合B、數(shù)據(jù)耦合,控制耦合,數(shù)據(jù)結構耦合,公共耦合C、無直接耦合,數(shù)據(jù)結構耦合,內(nèi)容耦合,控制耦合D、無直接耦合,數(shù)據(jù)耦合,控制耦合,內(nèi)容耦合PDL是描述處理過程<C>A、做什么B、為什么做C、怎么做D、對誰做〔D工具在軟件詳細設計過程中不采用。A、判定表B、IPO圖C、PDLD、DFD圖為高質(zhì)量地開發(fā)軟件項目,在軟件結構設計時,必須遵循〔A原則。A.信息隱蔽B、質(zhì)量控制C、程序優(yōu)化D、數(shù)據(jù)共享當一個模塊直接使用另一個模塊的內(nèi)部數(shù)據(jù),這種模塊之間的耦合為〔DA、數(shù)據(jù)耦合B、公共耦合C、標記耦合D、內(nèi)容耦合詳細設計與概要設計銜接的圖形工具是<B>。 A、DFD圖B、SC圖C、PAD圖D、程序流程圖下列幾種類型中,耦合性最弱的是<D>。 A、內(nèi)容型B、控制型C、公共型D、數(shù)據(jù)型軟件結構使用的圖形工具,一般采用〔C圖。 A、DFD B、PAD C、SC D、ER在七種偶合中,最低偶合是〔D。A、內(nèi)容偶合B、公共偶合C、數(shù)據(jù)偶合D、非直接偶合二、簡答題什么是軟件工程?軟件工程的目標是什么?答:軟件工程是①將系統(tǒng)化的、規(guī)范的、可度量的方法應用于軟件的開發(fā)、運行和維護過程,即將工程化應用于軟件開發(fā)和管理之中,②對①中所選方法的研究。目標:合理預算開發(fā)成本,付出較低的開發(fā)費用。實現(xiàn)預期的軟件功能,達到較好的軟件性能,滿足用戶的需求。3提高軟件的可維護性,降低維護費用。4提高軟件開發(fā)生產(chǎn)率,及時交付使用指出瀑布模型中下列任務的順序:驗收測試,項目計劃,單元測試,需求評審,成本估計,概要設計,詳細設計,系統(tǒng)測試,設計評審,編碼,需求規(guī)格說明書。答:項目計劃,成本估計,需求規(guī)格說明書,需求評審,概要設計,詳細設計,設計評審,編碼,單元測試,系統(tǒng)測試,驗收測試可行性研究報告的主要內(nèi)容是什么?答:可行性研究主要包括以下幾個部分:〔1概述〔2技術可行性〔3項目成熟程度〔4市場需求情況和風險分析〔5投資估算及資金籌措〔6經(jīng)濟與社會效益〔7綜合實力和產(chǎn)業(yè)基礎〔8項目實施進度計劃〔9其它尚需要說明的必要的方面〔10結論什么是需求分析?需求分析階段的基本任務是什么?答:所謂"需求分析",是指對要解決的問題進行詳細的分析,弄清楚問題的要求,包括需要輸入什么數(shù)據(jù),要得到什么結果,最后應輸出什么??梢哉f,"需求分析"就是確定要計算機"做什么"。任務:確定軟件項目的目標和范圍。調(diào)查使用者的要求,分析軟件必須做什么,編寫需求規(guī)格說明書等它相關文檔,并進行必要的需求審查。除此之外,還包括需求變更控制,需求風險控制,需求版本控制等對需求的管理工作什么是結構化分析方法?該方法使用什么描述工具?答:結構化的分析方法是面向數(shù)據(jù)流的方法,因此,此方法研究的核心是數(shù)據(jù)的組成和數(shù)據(jù)流向和對數(shù)據(jù)的加工處理。結構化分析方法用抽象模型的概念,按照軟件內(nèi)部數(shù)據(jù)傳遞、變換的關系,自頂向下逐層分解,直至找到滿足功能要求的所有可實現(xiàn)的軟件元素為止描述工具:1系統(tǒng)流程圖2數(shù)據(jù)流程圖3數(shù)據(jù)字典4IPO圖5層次方框圖6實體—關系圖7狀態(tài)—變遷圖結構化分析方法通過哪些步驟來實現(xiàn)?答:1確定系統(tǒng)的功能要求2>確定系統(tǒng)的數(shù)據(jù)要求3>確定系統(tǒng)的操作要求和界面要求4>確定系統(tǒng)的性能要求5>確定系統(tǒng)的運行要求6>獲得當前系統(tǒng)的物理模型7>抽象出當前系統(tǒng)的邏輯模型8>建立目標系統(tǒng)的邏輯模型。9>修正開發(fā)計劃10如果需要則開發(fā)系統(tǒng)原型什么是數(shù)據(jù)流圖?其作用是什么?其中的基本符號各表示什么含義?答:數(shù)據(jù)流圖:簡稱DFD,就是采用圖形方式來表達系統(tǒng)的邏輯功能、數(shù)據(jù)在系統(tǒng)內(nèi)部的邏輯流向和邏輯變換過程,是結構化系統(tǒng)分析方法的主要表達工具及用于表示軟件模型的一種圖示方法。數(shù)據(jù)流圖的基本符號的意思:1.矩形表示數(shù)據(jù)的外部實體;2.圓角的矩形表示變換數(shù)據(jù)的處理邏輯;3.少右面的邊矩形表示數(shù)據(jù)的存儲;4.箭頭表示數(shù)據(jù)流。什么是數(shù)據(jù)字典?其作用是什么?它有哪些條目?答:數(shù)據(jù)字典,主要用來描述數(shù)據(jù)流程圖中的數(shù)據(jù)流、數(shù)據(jù)存儲、處理過程和和數(shù)據(jù)源點/終點。作用:數(shù)據(jù)流程圖描述了系統(tǒng)的邏輯結構,其中的四個基本圖形元素的含義無法在數(shù)據(jù)流程圖中詳細說明,因此數(shù)據(jù)流程圖需要與其他工具配合使用,數(shù)據(jù)字典就是這樣的工具之一。包括的條目:數(shù)據(jù)流詞條數(shù)據(jù)元素詞條數(shù)據(jù)存儲詞條數(shù)據(jù)加工處理詞條數(shù)據(jù)源點及終點詞條什么是概要設計?有哪些基本任務?答:概要設計:根據(jù)用戶的需求先確定軟件系統(tǒng)的總體結構和總的設計原則基本的任務:設想供選擇的方案。推薦最佳方案。功能分解,確定軟件結構。設計軟件結構。制定測試計劃。數(shù)據(jù)設計。書寫文檔。包括總體設計規(guī)格說明書。用戶手冊。測試計劃。設計審查和復審。詳細設計的基本任務是什么?有那幾種描述方法?答:詳細設計階段的任務是要為編寫程序代碼設計"圖紙",由程序員按"圖紙"用某種高級程序設計語言編寫程序代碼。主要方法有設計程序流程圖,表格設計符號以及過程設計語言。什么是變換流?什么是事物流?答:變換型數(shù)據(jù)流可以劃分為明顯的三部分:邏輯輸入,中心變換,邏輯輸出事務流的特點是數(shù)據(jù)沿某個輸入路徑流動,該路徑將外部信息轉換成事務,其中發(fā)射出多條事務處理路徑的中心處理被稱為中心事務模塊的內(nèi)聚有哪幾種?模塊間的耦合有哪幾種?答:內(nèi)聚分為七種類型:巧合內(nèi)聚——一個模塊執(zhí)行多個完全互不相關的動作,那么這個模塊就有巧合內(nèi)聚邏輯內(nèi)聚——當一個模塊執(zhí)行一系列相關的動作時,稱其有邏輯內(nèi)聚。時間性內(nèi)聚——當一個模塊內(nèi)的多個任務是與時間有關時,這個模塊具有時間性內(nèi)聚。過程內(nèi)聚——模塊執(zhí)行的若干動作之間有順序關系。通信內(nèi)聚——模塊執(zhí)行的若干動作之間有順序關系,并且所有動作是在相同的數(shù)據(jù)上執(zhí)行。信息內(nèi)聚——一個模塊中執(zhí)行一系列動作,每個動作都有自己的入口點和處理代碼,所有的動作都作用在相同的數(shù)據(jù)結構上,這樣的模塊叫做信息內(nèi)聚。功能性內(nèi)聚——一個模塊中各個部分都是完成某一具體功能必不可少的組成部分耦合分為七類:內(nèi)容耦合——如果一個模塊直接參考另一個模塊的內(nèi)容,則這兩個模塊是內(nèi)容耦合。公共耦合——如果多個模塊都訪問同一個公共數(shù)據(jù)環(huán)境,則稱它們是公共耦合。外部耦合——如果兩個模塊都訪問同一個全局簡單變量而不是同一全局數(shù)據(jù)結構,而且,不是通過參數(shù)表傳遞該全局變量的信息,則這兩個模塊屬于外部耦合??刂岂詈稀绻KA向模塊B傳遞一個控制信息,則稱這兩個模塊是控制耦合的數(shù)據(jù)結構耦合——當一個模塊調(diào)用另一個模塊時傳遞了整個數(shù)據(jù)結構,這兩個模塊之間具有數(shù)據(jù)結構耦合。數(shù)據(jù)耦合——如果兩個模塊傳遞的是數(shù)據(jù)項,則這兩個模塊是數(shù)據(jù)耦合。非直接耦合——如果兩個模塊之間沒有直接關系,它們之間的聯(lián)系完全通過主模塊的控制和調(diào)用來實現(xiàn)的,這就是非直接耦合。三、應用題1.某旅館的服務如下:可以撥分機號和外線號碼。分機號是從7201至7299。外線號碼先撥9,然后是市話號碼或長話號碼。長話號碼是以區(qū)號和市話號碼組成。區(qū)號是從100到300中任意的數(shù)字串。市話號碼是以局號和分局號組成。局號可以是455,466,888,552中任意一個號碼。分局號是任意長度為4的數(shù)字串。寫出在數(shù)據(jù)字典中,號碼的數(shù)據(jù)條目的定義<即組成>。名稱簡稱類型長度取值范圍分機號Extension_Number字符47201..7299外線市話號Addition_Internumber字符99+[455|466|888|552]+4{數(shù)字}4外線長話號Addition_Extennumber字符129+[100|101|102|..|298|299|300]+[455|466|888|552]+4{數(shù)字}42.下面是旅客訂飛機票的需求描述,試畫出分層的數(shù)據(jù)流程圖。顧客將訂票單交給預訂系統(tǒng):〔1如果是不合法訂票單,則輸出無效訂票信息;〔2對合法訂票單的預付款登錄到一個記賬文件中;〔3系統(tǒng)有航班目錄文件,根據(jù)填寫的旅行時間和目的地為顧客安排航班;〔4在獲得正確航班信息和確認已交了部分預付款時發(fā)出取票單,并記錄到取票單文件中。顧客在指定日期內(nèi)用取票單換取機票:〔1系統(tǒng)根據(jù)取票單文件對取票單進行有效性檢查,無效的輸出無效取票信息;〔2持有有效取票單的顧客在補交了剩余款后將獲得機票;〔3記賬文件將被更新,機票以及顧客信息將被登錄到機票文件。訂單中有訂票日期、旅行日期、時間要求〔上午、下午、晚上、出發(fā)地、目的地、顧客姓名、身份證號、。0層流程圖預定流程圖取機票流程圖3.一個簡化的圖書館信息管理系統(tǒng)有以下功能:<1>借書:輸入讀者借書證,系統(tǒng)檢查借書證是否有效;查閱借書文件,檢查該讀者所借圖書是否超過10本,若已達10本,顯示信息"已經(jīng)超出借書數(shù)量",拒借;未達10本,辦理借書〔檢查庫存、修改庫存信息并將讀者借書信息登入借書記錄<2>還書:輸入書號和讀者號,從借書記錄中讀出與讀者有關的記錄,查閱所借日期,如果超過3個月,作罰款處理。否則,修改庫存信息與借書記錄。<3>查詢:可通過借書記錄、庫存信息查詢讀者情況、圖書借閱情況及庫存情況,打印各種統(tǒng)計表。請就以上系統(tǒng)功能畫出分層的DFD圖,并建立重要條目的數(shù)據(jù)字典。0層數(shù)據(jù)流程圖還書流程圖借書流程圖查詢流程圖數(shù)據(jù)字典:元素名稱名稱類型說明IPO1還書處理處理根據(jù)書號做還書處理,違規(guī)做處罰IPO2有效性檢查處理檢查讀者號,圖書號的有效性IPO3借書處理處理按讀者號,圖書號進行借書處理IPO4查詢處理管理員對一些基本信息進行查詢IPO5打印報表處理打印查詢到的信息IPO6處罰管理處理根據(jù)規(guī)則對延期給予相應的處罰IPO7數(shù)量檢查處理對讀者借出的數(shù)量是否符合規(guī)定進行檢查DS001讀者信息數(shù)據(jù)存儲讀者信息錄入,修改,刪除,保存DS002庫存信息數(shù)據(jù)存儲圖書的基本的情況以及所有圖書的整體情況DS003錯還信息數(shù)據(jù)存儲存儲借還書信息,系統(tǒng)自動處理,不能人工錄入DS004處罰信息數(shù)據(jù)存儲存儲延期的處罰信息軟件工程作業(yè)2〔第5~7章一、選擇題從本質(zhì)上說,面向?qū)ο笫?先"確定〔A后確定執(zhí)行的動作。A.動作的主體 B.屬性 C.關系 D.方法〔B是對象的靜態(tài)特征。A.方法 B.屬性 C.關系 D.操作對象的〔D使對象的動態(tài)特征A.特征 B.屬性 C.關系 D.操作屬于某個類的一個具體對象稱為該類的〔A。A.實例 B.虛擬 C.繼承 D.多態(tài)UML是〔A。一種可視化的建模語言是一種可視化的程序設計語言是一種過程是一種方法封裝的的作用是〔A。A.復用 B.對象 C.實例 D.方法8.面向?qū)ο蠓治龅暮诵脑谟诮ⅰ睟模型。A.建立正確的模型B.識別問題域?qū)ο驝.識別對象之間的關系D.上面所有9.面向?qū)ο蠓治鲞^程中建立的模型有〔D。A.數(shù)據(jù)模型、功能模型、活動模型B.對象模型、功能模型、測試模型C.屬性模型、功能模型、對象模型D.對象模型、功能模型、動態(tài)模型10.下列的〔C不是分析建模的目的。A.定義可驗證的軟件需求B.描述客戶需求C.開發(fā)一個簡單的問題解決方案D.建立軟件設計的基礎11.下列的〔C不屬于面向?qū)ο蠓治瞿P汀.用例圖B.類圖C.實體關系圖D.順序圖12.〔A用于描述系統(tǒng)中概念層次的對象。A.分析類B.界面類C.實體類D.控制類13.在基于用例的面向?qū)ο蠓治鲞^程中,定義交互行為的關鍵在于通過描述分析類實例之間的〔A將用例的職責分配到分析類中。A.消息傳遞B關聯(lián)關系C繼承關系D上下文關系14.用例的實現(xiàn)細節(jié)不會在〔B描述。A.用例說明B.用例圖C.活動圖D.順序圖15.用例的職責通常分配給〔D的對象。A.發(fā)送消息B.接收消息C.發(fā)送和接收雙方D.分析類16.組織機構圖是〔C。A.UML的一個最新圖B.類圖的一種C.用于識別角色的輔助圖D.用例圖的一種17.在圖書館系統(tǒng)中,假如已經(jīng)構造了一個一般借書者類,后來發(fā)現(xiàn)圖書館的學生和教師在借書中有不同要求。請問在面向?qū)ο笤O計中用〔B方法可以方便地設計這兩個類?A.信息隱藏B.繼承C.動態(tài)聯(lián)編D.代碼復制18.框架是一組可用于不同應用的〔A集合A.類B.對象C.模塊D.代碼19.下面哪個選項不能描述子系統(tǒng)之間的關系?!睤A.請求——服務關系B.繼承關系C.依賴關系D.數(shù)據(jù)關系20.每個子系統(tǒng)的接口上定義了若干〔B,體現(xiàn)了子系統(tǒng)的功能。A.說明B.操作C.屬性D.關系21.通常將具有共性的非功能要求設計在〔B,以減少重新開發(fā)的工作量。A.接口層B.中間層C.最低層D.最高層22.每個用例至少應該有一個〔C,它通常沒有屬性而只有方法,只是起協(xié)調(diào)和控制作用。A.接口類B.實體類C.控制類D.界面類23.類有三種類型即〔A。A.邊界類、實體類、控制類B.實體類、數(shù)據(jù)類、界面類C.控制類、實體類、數(shù)據(jù)類D.界面類、控制類、公共類24.下面那個選項不是正確的面向?qū)ο笤O計思想。〔CA.對接口進行設計B.發(fā)現(xiàn)變化并且封裝它C.先繼承后組合D.先組合后繼承25.定義類的屬性類型時盡量使用已有的類型,太多的自定義類型會降低系統(tǒng)的〔A指標。A.可維護性B.安全性C.開發(fā)效率D.可移植性二、簡答題舉例說明類和對象的關系。答:學生可作為一個類學生類,每個學生就是這個學生類的一個實例,例如,學生張三就是學生類的一個實例。面向?qū)ο蠓治龅年P鍵步驟有哪些?應建立哪幾個模型?答:關鍵步驟有識別問題域的對象并分析它們相互之間的關系,建立簡潔、精確、可理解的正確模型;應建立的模型有功能模型,對象模型,動態(tài)模型。什么是實體類、邊界類和控制類?為什么將分析類劃分成這三種類型?答:〔1實體類保存要存入永久存儲體的信息。實體類通常在事件流或交互圖中,是對用戶最有意義的類。邊界類位于系統(tǒng)與外界的交界處,包括所有的窗體、報表、系統(tǒng)硬件接口、與其他系統(tǒng)的接口??刂祁愗撠焻f(xié)調(diào)其他類的工作。每個用例中至少應該有一個控制類,它控制用況中的事件順序。〔2分為三種類型是因為它們各自的功能不同。界面類——描述系統(tǒng)與角色之間的接口??刂祁悺诜治瞿P蛢?nèi)表示協(xié)調(diào)、順序、事務處理以及控制其他對象的類。實體類——為需要長久保存的信息進行建模的類。UML中有哪幾類個視圖,它們的作用分別是什么?答:〔1用例視圖〔Use-Caseview用例視圖用于描述系統(tǒng)的功能集。它是從系統(tǒng)外部以用戶角度,對系統(tǒng)做的抽象表示。用例視圖所描述的系統(tǒng)功能依靠于外部用戶或另一個系統(tǒng)觸發(fā)激活,為用戶或另一個系統(tǒng)提供服務,實現(xiàn)與用戶或另一個系統(tǒng)之間的交互。用例視圖中可以包含若干個用例,用例表示系統(tǒng)能夠提供的功能,用例視圖是其他視圖的核心和基礎。其他視圖的構造依賴于用例視圖中所描述的內(nèi)容,因為系統(tǒng)的最終目標是實現(xiàn)用例視圖中描述的功能,同時附帶一些非功能性的特性,因此用例視圖影響著所有其他的視圖。〔2邏輯視圖〔Logicalview如果說用例視圖描述系統(tǒng)"做什么",那么邏輯視圖就是描述"怎么做"。系統(tǒng)的靜態(tài)結構描述類、對象和它們之間的關系,反映的是系統(tǒng)靜態(tài)特征或結構組成。〔3組件視圖〔Componentview組件視圖用來描述系統(tǒng)實現(xiàn)的結構和行為特征,反映系統(tǒng)各組成元素之間的關系。組件視圖由組件圖實現(xiàn),主要供開發(fā)者和管理者使用?!?并發(fā)視圖〔ConcurrencyView并發(fā)視圖用來描述系統(tǒng)的動態(tài)和行為特征。并發(fā)視圖將任務劃分為進程或線程形式,通過任務劃分引入并發(fā)機制,可以高效地使用資源、并行執(zhí)行和處理異步事件。除了劃分系統(tǒng)為并發(fā)執(zhí)行的進程或線程外,并發(fā)視圖還必須處理通信和同步問題?!?配置視圖〔DeploymentView配置視圖體現(xiàn)了系統(tǒng)的實現(xiàn)環(huán)境,反映系統(tǒng)的物理架構。配置視圖還包括一個映射,該映射顯示在物理架構中組件是怎樣分配的。5.順序圖在分析階段的作用?答:順序圖描述了一組交互對象間的交互方式,它表示完成某項行為的對象和這些對象之間傳遞消息的時間順序6.活動圖在分析階段的作用?答:活動圖反映系統(tǒng)中從一個活動到另一個活動的流程,強調(diào)對象間的控制流程。活動圖特別適合描述工作流和并行處理過程。具體地說活動圖可以描述一個操作過程中需要完成的活動;描述一個對象內(nèi)部的工作;描述如何執(zhí)行一組相關的動作,以及這些動作如何影響它們周圍的對象;說明一個業(yè)務活動中角色、工作流、組織和對象是如何工作的。7.比較結構化設計和面向?qū)ο笤O計區(qū)別?答:結構化設計:系統(tǒng)被劃分成多個模塊,這些模塊被組織成一個樹型結構。根就是主模塊,葉子是最低級的功能模塊。這棵樹也表示調(diào)用結構:每個模塊都調(diào)用自己的直接下級模塊,并被自己的直接上級模塊調(diào)用。頂層模塊負責收集應用程序最重要的那些執(zhí)行策略,底層模塊實現(xiàn)處理細節(jié)。在這個體系結構中越靠上層位置,概念的抽象層次就越高。但是,由于上層模塊需要調(diào)用下層模塊,所以這些上層模塊就依賴于下層模塊的處理細節(jié)。也就是說,當實現(xiàn)細節(jié)發(fā)生變化時,抽象也會受到影響;如果想復用某一個抽象的話,就必須把它依賴的細節(jié)都一起拖過去。 面向?qū)ο笤O計:上層創(chuàng)建的抽象不依賴于任何細節(jié),而細節(jié)則高度依賴于上層的抽象。這種依賴關系的變化正是結構化設計與面向?qū)ο笤O計的根本區(qū)別。8.什么是框架,它與"設計"有什么關系?答:框架是一組可用于不同應用的類的集合??蚣苤械念愅ǔJ且恍┏橄箢惒⑶蚁嗷ビ新?lián)系,可以通過繼承的方式使用這些類,當面向?qū)ο笤O計進行底層設計時,對每個類進行詳細設計,設計類的屬性和操作,優(yōu)化類之間的關系,就可以設計成框架來對類的設計進行構架和優(yōu)化。9.系統(tǒng)的物理構架中應該包括哪些信息?答:用UML的配置圖描述系統(tǒng)的物理構架,然后將需求分析階段捕獲的系統(tǒng)功能分配到這些物理節(jié)點上。包括的信息為節(jié)點的拓撲結構、硬件設備配置、通信路徑、各個節(jié)點上運行的系統(tǒng)軟件配置、應用軟件配置。三、應用題一個多媒體商店系統(tǒng)包含一個由媒體文件構成的數(shù)據(jù)庫,有兩類媒體文件:圖像文件和聲音文件。每個媒體文件都有名稱和唯一的編碼,而且文件包含作者信息和格式信息,聲音文件還包含聲音文件的時長<以秒為單位>和作者的信息。假設每個媒體文件可以由唯一的編碼所識別,系統(tǒng)要提供以下功能:媒體庫中可以添加新的特別媒體文件。通過給定的文件編碼查找需要的媒體文件。從媒體庫中刪除指定的媒體文件。給出媒體庫中媒體文件的數(shù)量。考慮類imageFile和audioFile應該具有哪些恰當?shù)膶傩院头椒ù穑篿mageFile類的屬性有:Name<文件名稱>,Code〔編碼,AuthorInfo〔作者信息,Format〔格式信息;audioFile類除了擁有以上屬性外還有屬性Time〔文件時長;imageFile類的方法:Add〔imageFile〔添加圖像文件,Delete〔Code〔刪除文件,GetFile〔Code〔查找文件,GetNumber〔〔返回媒體文件的數(shù)量;audioFile類的方法:Add〔audioFile〔添加聲音文件,Delete〔Code〔刪除文件,GetFile〔Code〔查找文件,GetNumber〔〔返回媒體文件的數(shù)量。若把學生看成一個實體,它可以分成多個子實體,如小學生、中學生和大學生等。在面向?qū)ο蟮脑O計中,可以創(chuàng)建如下4個類:類Student、類ElementaryStudent、MiddleStudent;類UniversityStudent。試給出這4個類的屬性以及它們之間的關系。答:Student類為基類,其他三個類都是Student的子類。Student類的屬性有:Name〔姓名,Sex〔性別,Age〔年齡,Class〔班級。ElementaryStudent類的屬性有:IsTeamMember〔是否是少先隊員,IsGoodStudent〔是否是三好學生。MiddleStudent類的屬性為:IsMember〔是否是團員,Subject〔文科理科。UniversityStudent類的屬性為:IsPartyMember〔是否黨員,Department〔學院,Specialty〔專業(yè)。三、應用題某學校領書的工作流程為:學生班長填寫領書單,班主任審查后簽名,然后班長拿領書單到書庫領書。書庫保管員審查領書單是否有班主任簽名,填寫是否正確等,不正確的領書單退回給班長;如果填寫正確則給予領書并修改庫存清單;當某書的庫存量低于臨界值時,登記需訂書的信息。每天下班前為采購部門提供一張訂書單。用活動圖來描述領書的過程。解:使用順序圖描述下面的情景,當用戶在自己的計算機上向網(wǎng)絡打印機發(fā)出一個打印任務時,他的計算機便向打印機服務器發(fā)送一條打印命令print<file>,打印機服務器如果發(fā)現(xiàn)網(wǎng)絡打印機處于空閑狀態(tài),則向打印機發(fā)送打印命令print<file>,否則向打印隊列發(fā)送一條保存命令store<file>。解:某報社采用面向?qū)ο蠹夹g實現(xiàn)報刊征訂的計算機管理系統(tǒng),該系統(tǒng)基本需求如下:〔1報社發(fā)行多種刊物,每種刊物通過訂單來征訂,訂單中有代碼,名稱,訂期,單價,份數(shù)等項目,訂戶通過填寫訂單來訂閱報刊。
〔2報社下屬多個發(fā)行站,每個站負責收集登陸訂單、打印收款憑證等事務。
〔3報社負責分類并統(tǒng)計各個發(fā)行站送來的報刊訂閱信息。
請就此需求建立對象模型。解:軟件工程作業(yè)3〔第8~11章選擇題結構化語言是介于自然語言和形式語言之間的一種〔D。A.半形式語言B.計算機語言C.低級語言D.高級語言程序設計語言的技術特性不應包括〔C。A、數(shù)據(jù)結構的描述性B、抽象類型的描述性C、數(shù)據(jù)庫的易操作性D、軟件的可移植性程序的三種基本控制結構是〔B。A.過程、子程序和分程序B.順序、選擇和重復C.遞歸、堆棧和隊列D.調(diào)用、返回和轉移結構化程序設計主要強調(diào)的是〔D。A.程序的規(guī)模B.程序的效率C.程序設計語言的先進性D.程序易讀性下列關于功能性注釋不正確的說法是<B>。A.功能性注釋嵌在源程序中,用于說明程序段或語句的功能以及數(shù)據(jù)的狀態(tài)B.注釋用來說明程序段,需要在每一行都要加注釋C.可使用空行或縮進,以便很容易區(qū)分注釋和程序D.修改程序也應修改注釋下列關于效率的說法不正確的是<D>。A.效率是一個性能要求,其目標應該在需求分析時給出B.提高程序效率的根本途徑在于選擇良好的設計方法,數(shù)據(jù)結構與算法C.效率主要指處理機時間和存儲器容量兩個方面D.程序的效率與程序的簡單性無關結構化維護與非結構化維護的主要區(qū)別在于<B>。A.軟件是否結構化B.軟件配置是否完整C.程序的完整性D.文檔的完整性關于JAVA語言下列說法不正確的是〔B。A.跨平臺的 B.動態(tài)指針 C.解釋型的 D.面向?qū)ο蟮氖褂冒缀袦y試方法時,確定測試數(shù)據(jù)應根據(jù)〔A和指定的覆蓋標準。A程序內(nèi)部邏輯B.程序復雜結構C.使用說明書D.程序的功能確認測試主要涉及的文檔是〔A。A、需求規(guī)格說明書B、概要設計說明書C、詳細設計說明書D、源程序測試的關鍵問題是〔D。A.如何組織對軟件的評審B.如何驗證程序的正確性C.如何采用綜合策略D.如何選擇測試用例黑盒測試在設計測試用例時,主要研究〔A。A.需求規(guī)格說明B.詳細設計說明C.項目開發(fā)計劃D.概要設計說明與詳細設計說明下面哪些測試屬于黑盒測試〔B。A、路徑測試B、等價類劃分C、條件判斷D、循環(huán)測試在下述哪一種測試中,測試人員必須接觸到源程序〔B。A、功能測試 B、結構測試C、功能測試和結構測試D、性能測試檢查軟件產(chǎn)品是否符合需求定義的過程稱為〔D。A、確認測試B、集成測試C、驗收測試D、驗證測試軟件測試方法中,黑盒、白盒測試法是常用的方法,其中白盒測試主要用于測試〔D。結構合理性B、軟件外部功能C、程序正確性D、程序內(nèi)部邏輯軟件維護中,因修改交互輸入的順序,沒有正確的記錄而引起的錯誤是〔A產(chǎn)生的副作用。A、文檔B、數(shù)據(jù)C、編碼D、設計以下屬于軟件維護階段文檔的是<C>。A、軟件需求說明B、操作手冊C、軟件問題報告D、測試分析報告產(chǎn)生軟件維護的副作用,是指〔C。A、開發(fā)時的錯誤B、隱含的錯誤C、因修改軟件而造成的錯誤D、運行時誤操作維護中,因誤刪除一個標識符而引起的錯誤是〔C副作用。A、文檔B、數(shù)據(jù)C、編碼D、設計可維護性的特性中,相互促進的〔A。A、可理解性和可測試性B、效率和可移植性C、效率和可修改性D、效率和結構好軟件維護的困難主要原因是〔CA、費用低B、人員少C、開發(fā)方法的缺陷D、用戶不配合軟件維護費用高的主要原因是〔C。A、人員少B、人員多C、生產(chǎn)率低D、生產(chǎn)率高為了適應軟硬件環(huán)境變化而修改軟件的過程是<C>。A、校正性維護 B、完善性維護 C、適應性維護D、預防性維護可維護性的特性中,相互矛盾的是<B>A.可理解性與可測試性B.效率與可修改性C.可修改性和可理解性D.可理解性與可讀性各種不同的軟件維護中,以〔C維護所占的維護量最小。糾錯性維護B、代碼維護C、預防性維護D、文檔維護在變更控制中,〔B可以用來確保由不同用戶所執(zhí)行的并發(fā)變更。A.異步控制B.同步控制C.存取控制D.基線控制變更控制是一項最重要的軟件配置任務,其中"檢出"和〔A處理實現(xiàn)了兩個重要的變更控制要素,即存取控制和同步控制。A.登入B.管理C.填寫變更要求D.審查用圖表示軟件項目進度安排,下列說法中正確的是〔BA.能夠反映多個任務之間的復雜關系B.能夠直觀表示任務之間相互依賴制約關系C.能夠表示哪些任務是關鍵任務D.能夠表示子任務之間的并行和串行關系基線可作為軟件生存期中各開發(fā)階段的一個檢查點。當采用的基線發(fā)生錯誤時,可以返回到最近和最恰當?shù)摹睠上A.配置項B.程序C.基線D.過程簡答題為建立良好的編程風格應遵循什么原則?答:1節(jié)簡化①不使用不必要的變量和函數(shù)②避免變量重名,變量重名可導致很難被發(fā)現(xiàn)的錯誤。③盡量減小代碼量。④盡量減少代碼的執(zhí)行時間,提高執(zhí)行效率。⑤避免功能冗余的模塊。⑥盡量不使用全局變量。2模塊化①確保物理和邏輯功能密切相關。②限定一個模塊完成一個獨立的功能,提高模塊的內(nèi)聚度。③檢查代碼的重復率,重復多的代碼,要抽出來作為一個單獨的模塊。3簡單化①采用直接了當?shù)乃惴?避免使用技巧性高和難懂的代碼。②使用簡單的數(shù)據(jù)結構,避免使用多維數(shù)組、指針和復雜的表。③注意對象命名的一致性。④以手工的方式簡化算術和邏輯表達式。4結構化①按標準化的次序說明數(shù)據(jù);②按字母順序說明對象名③使用讀者明了的結構化程序部件;④采用直截了當?shù)乃惴ǎ虎莞鶕?jù)應用背景排列程序各個部分;⑥不隨意為效率而犧牲程序的清晰度和可讀性;⑦讓機器多做煩瑣的工作,如重復、庫函數(shù);⑧用公共函數(shù)調(diào)用代替重復出現(xiàn)的表達式;⑨避免循環(huán)、分支的嵌套層數(shù)過高;⑩單入口單出口。5文檔化〔documentation①有效、適當?shù)厥褂米⑨?。②協(xié)調(diào)使用程序塊注釋和程序行注釋。③保持文檔和程序的同步。6格式化〔layout>①始終采用統(tǒng)一縮進規(guī)則;②適當插入括號表明運算次序、排除二義性;③有效地使用空格符以區(qū)別程序的不同意群。什么是軟件測試?答:軟件測試從廣義上講,是指軟件產(chǎn)品生存周期內(nèi)所有的檢查、評審和確認活動。從狹義上講,軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程?;蛘哒f,軟件測試是根據(jù)軟件開發(fā)各個階段的規(guī)格說明和程序內(nèi)部結構而精心設計一批測試用例,用這些測試用例運行程序,以發(fā)現(xiàn)程序錯誤的過程。軟件測試的原則是什么?答:軟件測試的原則有:應該把測試貫穿在整個開發(fā)過程之中。事實上,從需求分析階段開始,每個階段結束之前都要進行階段審查,目的是盡早發(fā)現(xiàn)和糾正錯誤。每個測試用例都應該包括測試輸入數(shù)據(jù)和這組數(shù)據(jù)輸入作用下的預期輸出結果。在實際操作中可以列出一張表格,包括每個測試用例的編號、類型、輸入數(shù)據(jù)、預期輸出結果、實際輸出結果、出錯原因分析。要對每個測試結果進行全面檢查,不要漏掉已經(jīng)出現(xiàn)的錯誤跡象。程序員應該盡量避免檢查自己編寫的代碼。測試工作需要嚴格的工作作風,程序員在測試自己編寫的代碼時往往會帶有一些傾向性,使得他們工作中常常出現(xiàn)一些疏漏。而且,程序員對設計規(guī)格說明書的理解錯誤而引入的錯誤更是難于發(fā)現(xiàn)。在設計測試用例時,應該包括有效的、期望的輸入情況,也要包括無效的和不期望的輸入情況。既能夠驗證程序正常運行的合理輸入,也能夠驗證對異常情況處理的不合理輸入數(shù)據(jù)以及臨界數(shù)據(jù)。在測試程序時,人們常常過多地考慮合法的和期望的輸入條件,以檢查程序是否做了它應該做的事情,而忽視了不合法的和預想不到的輸入條件。事實上,用戶在使用系統(tǒng)時,輸入一些錯誤指令和參數(shù)是經(jīng)常發(fā)生的,如果軟件遇到這種情況不能做出適當?shù)姆磻?給出相應的提示信息,就可能會誤導用戶,甚至造成嚴重損失。軟件中遺留的錯誤數(shù)量與已經(jīng)發(fā)現(xiàn)的錯誤數(shù)量成正比。根據(jù)這個規(guī)律,對測試中發(fā)現(xiàn)錯誤成堆的模塊更要仔細測試。例如,在某個著名的操作系統(tǒng)中,44%的錯誤僅與4%的模塊有關?;貧w測試的關聯(lián)性要特別引起注意,修改一個錯誤而引起更多錯誤的現(xiàn)象并不少見。測試程序時不僅要檢查程序是否做了它應該做的事情,還要檢查它是否做了不該做的事情。例如,工資軟件中,軟件只完成在編職工的工資計算和輸出,不在編人員的工資是不進行計算和輸出的。如果軟件將不在編人員的工資信息也輸出顯然是不合適的。嚴格執(zhí)行測試計劃。在測試之前應該有明確的測試計劃,內(nèi)容包括:要測試的軟件功能和內(nèi)容、測試用例和預期結果、測試的進度安排、需要的工具和資源、測試控制方式和過程等。10做好測試記錄,為統(tǒng)計和維護提供基礎數(shù)據(jù)。請說明集成測試、系統(tǒng)測試和驗收測試有什么不同?答:集成測試界于單元測試和系統(tǒng)測試之間,起到"橋梁作用",一般由開發(fā)小組采用白盒加黑盒的方式來測試,既驗證"設計",又驗證"需求"。
系統(tǒng)測試的粒度最大,一般由獨立測試小組采用黑盒方式來測試,主要測試系統(tǒng)是否符合"需求規(guī)格說明書"。
驗收測試與系統(tǒng)測試相似,主要區(qū)別是測試人員不同,驗收測試由用戶執(zhí)行。簡述單元測試的內(nèi)容。答:單元測試的內(nèi)容有1模塊接口測試:對通過被測模塊的數(shù)據(jù)流進行測試。為此,對模塊接口,包括參數(shù)表、調(diào)用子模塊的參數(shù)、全程數(shù)據(jù)、文件輸入/輸出操作都必須檢查。2局部數(shù)據(jù)結構測試:設計測試用例檢查數(shù)據(jù)類型說明、初始化、缺省值等方面的問題,還要查清全程數(shù)據(jù)對模塊的影響。 3路徑測試:選擇適當?shù)臏y試用例,對模塊中重要的執(zhí)行路徑進行測試。對基本執(zhí)行路徑和循環(huán)進行測試可以發(fā)現(xiàn)大量路徑錯誤。4錯誤處理測試:檢查模塊的錯誤處理功能是否包含有錯誤或缺陷。例如,是否拒絕不合理的輸入;出錯的描述是否難以理解、是否對錯誤定位有誤、是否出錯原因報告有誤、是否對錯誤條件的處理不正確;在對錯誤處理之前錯誤條件是否已經(jīng)引起系統(tǒng)的干預等。5邊界測試:要特別注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時出錯的可能性。對這些地方要仔細地選擇測試用例,認真加以測試。5>此外,如果對模塊運行時間有要求的話,還要專門進行關鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因素。這類信息對進行性能評價是十分有用的。什么是白盒測試?它適應哪些測試?答:白盒測試也叫結構測試,測試者需要了解被測程序的內(nèi)部結構。白盒測試通常根據(jù)覆蓋準則設計測試用例,有語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋和條件組合覆蓋。白盒測試適用與單元測試、集成測試、系統(tǒng)測試非漸增式測試與漸增式測試有什么區(qū)別?漸增式測試如何組裝模塊?答:1漸增式可以較早地發(fā)現(xiàn)模塊界面之間的錯誤,非漸增式則要到最后將所有模塊連接起來時才能發(fā)現(xiàn)此類錯誤。2非漸增式需要較多的人工3漸增式有利于排錯。如果模塊界面間有錯,如果用非漸增式,這類錯誤到最后聯(lián)合測試時才能發(fā)現(xiàn),此時很難判斷錯誤發(fā)生在哪一部分,但如果用漸增式,這類錯誤就較容易定位,它通常與最新加上去的模塊有關。4漸增式比較徹底。5漸增式需要較多的機器時間。6非漸增式方式,開始時允許幾個測試人員并行工作,對大型系統(tǒng)來說,是很有意義的。采用黑盒技術設計測試用例有哪幾種方法?這些方法各有什么特點?答:黑盒測試設計測試用例的方法有1等價類劃分法特點是:a、測試的內(nèi)容相同b、一個等價類中的某個測試可以發(fā)現(xiàn)缺陷,那么這個等價類的其他測試也能發(fā)現(xiàn)缺陷c、一個等價類中的某個測試不能發(fā)現(xiàn)缺陷,那么這個等價類的其它測試也不能發(fā)現(xiàn)缺陷2邊界值分析法特點是:用邊界值分析時時常收獲較大,它是在等價類的邊界上選擇測試用例3錯誤推測法特點是:沒有確定的步驟,很大程度上是憑借經(jīng)驗進行的4因果圖法特點是:考慮輸入條件間的組合關系;考慮輸出條件對輸入條件的信賴關系;測試用例發(fā)現(xiàn)錯誤的效率高;能查出功能說明中的某些不一致或遺漏白盒測試法有哪些覆蓋標準?試對它們的檢錯能力進行比較。答:白盒測試的覆蓋標準有:語句覆蓋->判定覆蓋->條件覆蓋->判定/條件覆
蓋->條件組合覆蓋->路徑覆蓋檢錯能力由弱到強根據(jù)下面程序代碼,畫出程序流程圖,然后設計滿足條件/判定覆蓋、條件組合覆蓋的測試用例。BEGINT:=0IF<X>=80ANDY>=80>THENT:=1ELSEIF<X>=90ANDY>=75>THENT:=2ENDIFIF<X>=75ANDY>=90>THENT:=3ENDIFENDIFRETURN測試用例:條件/判定覆蓋:1X=80Y=802X=90Y=753X=50Y=50條件組合覆蓋:1X=80Y=802X=80Y=753X=75Y=804X=75Y=755X=90Y=756X=90Y=707X=80Y=758X=80Y=709X=75Y=9010X=75Y=9011X=70Y=9012X=70Y=85軟件的可維護性是軟件設計師最關注的性能,談談為了獲得軟件良好的可維護性,在設計時應該注意哪些問題?答:為獲得軟件的良好可維護性,在設計階段應該做一些變更實驗,檢查系統(tǒng)的可維護性、靈活性和可移植性,設計時應該將今后可能變更的內(nèi)容與其他部分分離開來,并且遵循高內(nèi)聚、低偶合的原則。在軟件文檔中,你認為哪些文檔對于軟件的維護最重要?需求分析文檔、設計文檔、程序文檔對軟件維護很重要軟件維護時的源程序修改策略是什么?答:軟件維護時的源程序修改策略是:由于軟件維護最終落實在修改源程序和文檔上。為了正確、有效地修改源程序,通常要先分析和理解源程序,然后才能修改源程序,最后重新測試和驗證源程序。軟件項目計劃包括那些內(nèi)容?答:軟件項目計劃的內(nèi)容包括:1.范圍。對該軟件項目的綜合描述,定義起所要做的工作以及性能限制,它包括:<1>項目目標。<2>主要功能。<3>性能限制。<4>系統(tǒng)接口。<5>特殊要求。<6>開發(fā)概述。2.資源。<1>人員資源。<2>硬件資源。<3>軟件資源。<4>其他。3.進度安排。進度安排的好壞往往會影響整個項目的按期完成,因此這一環(huán)節(jié)是十分重要的。制定軟件進度與其他工程沒有很大的區(qū)別,其方法主要有:<1>工程網(wǎng)絡圖。<2>Gantt圖。<3>任務資源表。<4>成本估算。<5>培訓計劃。15.什么是軟件配置管理?什么是基線?答:配置管理能夠系統(tǒng)地處理變更,從而使得軟件系統(tǒng)可以隨時保持其完整性。配置管理又可成為變更控制,可以用來評估提出的變更請求,跟蹤變更,并保持系統(tǒng)在不同時間的狀態(tài)。軟件配置管理是一套規(guī)范、高效的軟件開發(fā)基礎結構?;€是:已經(jīng)通過正式復審和批準的某規(guī)約或產(chǎn)品,它因此可以作為進一步開發(fā)的基礎,并且只能通過正式的變化控制過程改變。應用題請讀者參考能夠找到的編程規(guī)范,設計一個C語言編程規(guī)范。答:文件結構1.1版權和版本的聲明版權和版本的聲明位于頭文件和定義文件的開頭〔參見示例1-1,主要內(nèi)容有:〔1版權信息?!?文件名稱,標識符,摘要?!?當前版本號,作者/修改者,完成日期。〔4版本歷史信息。/**Copyright<c>2001,上海貝爾網(wǎng)絡應用事業(yè)部*Allrightsreserved.**文件名稱:filename.h*文件標識:見配置管理計劃書*摘要:簡要描述本文件的內(nèi)容**當前版本:1.1*輸入作者〔或修改者名字*完成日期:2001**取代版本:1.0*原輸入原作者〔或修改者名字*完成日期:2001*/示例1-1版權和版本的聲明1.2頭文件的結構頭文件由三部分內(nèi)容組成:〔1頭文件開頭處的版權和版本聲明〔參見示例1-1?!?預處理塊?!?函數(shù)和類結構聲明等。假設頭文件名稱為graphics.h,頭文件的結構參見示例1-2。[規(guī)則1-2-1]為了防止頭文件被重復引用,應當用ifndef/define/endif結構產(chǎn)生預處理塊。[規(guī)則1-2-2]用#include<filename.h>格式來引用標準庫的頭文件〔編譯器將從標準庫目錄開始搜索。[規(guī)則1-2-3]用#include"filename.h"格式來引用非標準庫的頭文件〔編譯器將從用戶的工作目錄開始搜索。[建議1-2-1]頭文件中只存放"聲明"而不存放"定義"[建議1-2-2]不提倡使用全局變量,盡量不要在頭文件中出現(xiàn)象externintvalue這類聲明。#ifndefGRAPHICS_H//防止graphics.h被重復引用#defineGRAPHICS_H#include<math.h>//引用標準庫的頭文件?#include"myheader.h"http://引用非標準庫的頭文件?voidFunction1<?>;//全局函數(shù)聲明?classBox//類結構聲明{?};#endif示例1-2C頭文件的結構1.3定義文件的結構定義文件有三部分內(nèi)容:〔1定義文件開頭處的版權和版本聲明〔參見示例1-1?!?對一些頭文件的引用?!?程序的實現(xiàn)體〔包括數(shù)據(jù)和代碼。假設定義文件的名稱為graphics.cpp,定義文件的結構參見示例1-3。//版權和版本聲明見示例1-1,此處省略。#include"graphics.h"http://引用頭文件?//全局函數(shù)的實現(xiàn)體voidFunction1<?>{?}//類成員函數(shù)的實現(xiàn)體voidBox::Draw<?>{?}示例1-3C定義文件的結構1.4目錄結構如果一個軟件的頭文件數(shù)目比較多〔如超過十個,通常應將頭文件和定義文件分別保存于不同的目錄,以便于維護。例如可將頭文件保存于include目錄,將定義文件保存于source目錄〔可以是多級目錄。如果某些頭文件是私有的,它不會被用戶的程序直接引用,則沒有必要公開其"聲明"。為了加強信息隱藏,這些私有的頭文件可以和定義文件存放于同一個目錄。程序的版式版式雖然不會影響程序的功能,但會影響可讀性。程序的版式追求清晰、美觀,是程序風格的重要構成因素。程序的版式2.1空行空行起著分隔程序段落的作用。空行得體〔不過多也不過少將使程序的布局更加清晰??招胁粫速M內(nèi)存,雖然打印含有空行的程序是會多消耗一些紙張,但是值得。所以不要舍不得用空行。[規(guī)則2-1-1]在每個類聲明之后、每個函數(shù)定義結束之后都要加空行。[規(guī)則2-1-2]在一個函數(shù)體內(nèi),邏揖上密切相關的語句之間不加空行,其它地方應加空行分隔。2.2代碼行[規(guī)則2-2-1]一行代碼只做一件事情,如只定義一個變量,或只寫一條語句。這樣的代碼容易閱讀,并且方便于寫注釋。[規(guī)則2-2-2]if、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。不論執(zhí)行語句有多少都要加{}。這樣可以防止書寫失誤。[建議2-2-3如果變量的引用處和其定義處相隔比較遠,變量的初始化很容易被忘記。如果引用了未被初始化的變量,可能會導致程序錯誤。本建議可以減少隱患。例如intwidth=10;//定義并初紿化widthintheight=10;//定義并初紿化heightintdepth=10;//定義并初紿化depth2.3代碼行內(nèi)的空格[規(guī)則2-3-1]關鍵字之后要留空格。象const、virtual、inline、case等關鍵字之后至少要留一個空格,否則無法辨析關鍵字。象if、for、while等關鍵字之后應留一個空格再跟左括號‘〔’,以突出關鍵字。[規(guī)則2-3-2]函數(shù)名之后不要留空格,緊跟左括號‘〔’,以與關鍵字區(qū)別。[規(guī)則2-3-3]‘〔’向后緊跟,‘’、‘,’、‘;’向前緊跟,緊跟處不留空格。[規(guī)則2-3-4]‘,’之后要留空格,如Function<x,y,z>。如果‘;’不是一行的結束符號,其后要留空格,如for<initialization;condition;update>。[規(guī)則2-3-5]賦值操作符、比較操作符、算術操作符、邏輯操作符、位域操作符,如"="、"+="">="、"<="、"+"、"*"、"%"、"&&"、"||"、"<<","^"等二元操作符的前后應當加空格。[規(guī)則2-3-6]一元操作符如"!"、"~"、"++"、"--"、"&"〔地址運算符等前后不加空格。[規(guī)則2-3-7]象"[]"、"."、"->"這類操作符前后不加空格。[建議2-3-8]對于表達式比較長的for語句和if掉一些空格,如for<i=0;i<10;i++>和if<<a<=b>&&<c<=d>>2.4修飾符的位置修飾符*和&應該靠近數(shù)據(jù)類型還是該靠近變量名,是個有爭議的活題。若將修飾符*靠近數(shù)據(jù)類型,例如:int*x;從語義上講此寫法比較直觀,即x是int類型的指針。上述寫法的弊端是容易引起誤解,例如:int*x,y;此處y容易被誤解為指針變量。雖然將x和y分行定義可以避免誤解,但并不是人人都愿意這樣做。[規(guī)則2-4-1]應當將修飾符例如:char*name;int*x,y;//此處y不會被誤解為指針2.5注釋C語言的注釋符為"/*…*/"。雖然注釋有助于理解代碼,但注意不可過多地使用注釋。[規(guī)則2-5注釋太多了會讓人眼花繚亂。注釋的花樣要少。[規(guī)則2-5例如i++;//i加1,多余的注釋[規(guī)則2-5的一致性。不再有用的注釋要刪除。[規(guī)則2-5有害。[規(guī)則2-5[規(guī)則2-5可放在下方。[規(guī)則2-5釋,便于閱讀。 命名規(guī)則3.1共性規(guī)則本節(jié)論述的共性規(guī)則是被大多數(shù)程序員采納的,我們應當在遵循這些共性規(guī)則的前提下,再擴充特定的規(guī)則。[規(guī)則3-1-1]標識符應當直觀且可以拼讀,可望文知意,不必進行"解碼"。標識符最好采用英文單詞或其組合,便于記憶和閱讀。切忌使用漢語拼音來命名。程序中的英文單詞一般不會太復雜,用詞應當準確。例如不要把CurrentValue寫成NowValue。[規(guī)則3-1-2]標識符的長度應當符合"min-length&&max-information"原則。幾十年前老ANSIC規(guī)定名字不準超過6個字符,現(xiàn)今的C不再有此限制。一般來說,長名字能更好地表達含義,所以函數(shù)名、變量名、類名長達十幾個字符不足為怪。那么名字是否越長約好?不見得!例如變量名maxval就比maxValueUntilOverflow好用。單字符的名字也是有用的,常見的如i,j,k,m,n,x,y,z等,它們通??捎米骱瘮?shù)內(nèi)的局部變量。[規(guī)則3-1-3]命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風格保持一致。例如Windows應用程序的標識符通常采用"大小寫"混排的方式,如AddChild。而Unix應用程序的標識符通常采用"小寫加下劃線"的方式,如add_child。別把這兩類風格混在一起用。[規(guī)則3-1-4]程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標識符。例如:intx,X;//變量x與X容易混淆voidfoo<intx>;//函數(shù)foo與FOO容易混淆voidFOO<floatx>;[規(guī)則3-1-5]程序中不要出現(xiàn)標識符完全相同的局部變量和全局變量,盡管兩者的作用域不同而不會發(fā)生語法錯誤,但會使人誤解。[規(guī)則3-1-6]變量的名字應當使用"名詞"或者"形容詞+名詞"。例如:floatvalue;floatoldValue;floatnewValue;[規(guī)則3-1-7]全局函數(shù)的名字應當使用"動詞"或者"動詞+名詞"〔動賓詞組。類的成員函數(shù)應當只使用"動詞",被省略掉的名詞就是對象本身。例如:DrawBox<>;//全局函數(shù)box->Draw<>;//類的成員函數(shù)[規(guī)則3-1-8]用正確的反義詞組命名具有互斥意義的變量或相反動作的函數(shù)等。例如:intminValue;intmaxValue;intSetValue<…>;intGetValue<…>;[建議3-1-1]盡量避免名字中出現(xiàn)數(shù)字編號,如Value1,Value2等,除非邏輯上的確需要編號。這是為了防止程序員偷懶,不肯為命名動腦筋而導致產(chǎn)生無意義的名字〔因為用數(shù)字編號最省事。函數(shù)設計函數(shù)是C++/C程序的基本功能單元,函數(shù)接口的兩個要素是參數(shù)和返回值。。C語言中,函數(shù)的參數(shù)和返回值的傳遞方式有兩種:值傳遞〔passbyvalue和指針傳遞〔passbypointer表達式和基本語句4.1參數(shù)的規(guī)則[規(guī)則4-1-1如果函數(shù)沒有參數(shù),則用void填充。例如:voidSetValue<intwidth,intheight>;//良好的風格voidSetValue<int,int>;//不良的風格floatGetValue<void>;//良好的風格floatGetValue<>;//不良的風格[規(guī)則4-1-2例如編寫字符串拷貝函數(shù)StringCopy,它有兩個參數(shù)。如果把參數(shù)名字起為str1和str2,例如voidStringCopy<char*str1,char*str2>;那么我們很難搞清楚究竟是把str1拷貝到str2中,還是剛好倒過來??梢园褏?shù)名字起得更有意義,如叫strSource和strDestination。這樣從名字上就可以看出應該把strSource拷貝到strDestination。還有一個問題,這兩個參數(shù)那一個該在前那一個該在后?參數(shù)的順序要遵循程序員的習慣。一般地,應將目的參數(shù)放在前面,源參數(shù)放在后面。如果將函數(shù)聲明為:voidStringCopy<char*strSource,char*strDestination>;別人在使用時可能會不假思索地寫成如下形式:charstr[20];StringCopy<str,"HelloWorld">;//參數(shù)順序顛倒[規(guī)則4-1-3]如果參數(shù)是指針,且僅作輸入用,則應在類型前加const指針在函數(shù)體內(nèi)被意外修改。例如voidStringCopy<char*strDestination,constchar*strSource>;[規(guī)則4-1-4]如果輸入?yún)?shù)以值傳遞的方式傳遞對象,則宜改用"const&來傳遞,這樣可以省去臨時對象的構造和析構過程,從而提高效率。[建議4-1-5]避免函數(shù)有太多的參數(shù),參數(shù)個數(shù)盡量控制在多,在使用時容易將參數(shù)類型或順序搞錯。[建議4-1-C標準庫函數(shù)printf是采用不確定參數(shù)的典型代表,其原型為:intprintf<constchat*format[,argument]?>;這種風格的函數(shù)在編譯時喪失了嚴格的類型安全檢查。4.2返回值的規(guī)則[規(guī)則4-2-1C語言中,凡不加類型說明的函數(shù),一律自動按整型處理。這樣做不會有什么好處,卻容易被誤解為void類型。C++語言有很嚴格的類型安全檢查,不允許上述情況發(fā)生。由于C++程序可以調(diào)用C函數(shù),為了避免混亂,規(guī)定任何C++/C函數(shù)都必須有類型。如果函數(shù)沒有返回值,那么應聲明為void類型。[規(guī)則4-2-2違反這條規(guī)則的典型代表是C標準庫函數(shù)getchar。例如:charc;c=getchar<>;if<c==EOF>?按照getchar名字的意思,將變量c聲明為char類型是很自然的事情。但不幸的是getchar的確不是char類型,而是int類型,其原型如下:intgetchar<void>;由于c是char類型,取值范圍是[-128,127],如果宏EOF的值在char的取值范圍之外,那么if語句將總是失敗,這種"危險"人們一般哪里料得到!導致本例錯誤的責任并不在用戶,是函數(shù)getchar誤導了使用者。[規(guī)則4-2-3錯誤標志用return語句返回。回顧上例,C標準庫函數(shù)的設計者為什么要將getchar聲明為令人迷糊的int類型呢?他會那么傻嗎?在正常情況下,getchar的確返回單個字符。但如果getchar碰到文件結束標志或發(fā)生讀錯誤,它必須返回一個標志EOF。為了區(qū)別于正常的字符,只好將EOF定義為負數(shù)〔通常為負1。因此函數(shù)getchar就成了int類型。我們在實際工作中,經(jīng)常會碰到上述令人為難的問題。為了避免出現(xiàn)誤解,我們應該將正常值和錯誤標志分開。即:正常值用輸出參數(shù)獲得,而錯誤標志用return語句返回。函數(shù)getchar可以改寫成BOOLGetChar<char*c>;雖然gechar比GetChar靈活,例如putchar<getchar<>>;但是如果getchar用錯了,它的靈活性又有什么用呢?[建議4-2-可以附加返回值。例如字符串拷貝函數(shù)strcpy的原型:char*strcpy<char*strDest,constchar*strSrc>;strcpy函數(shù)將strSrc拷貝至輸出參數(shù)strDest中,同時函數(shù)的返回值又是strDest。這樣做并非多此一舉,可以獲得如下靈活性:charstr[20];intlength=strlen<strcpy<str,"HelloWorld">>;4.3函數(shù)內(nèi)部實現(xiàn)的規(guī)則不同功能的函數(shù)其內(nèi)部實現(xiàn)各不相同,看起來似乎無法就"內(nèi)部實現(xiàn)"達成一致的觀點。但根據(jù)經(jīng)驗,我們可以在函數(shù)體的"入口處"和"出口處"從嚴把關,從而提高函數(shù)的質(zhì)量。[規(guī)則4-3-1很多程序錯誤是由非法參數(shù)引起的,我們應該充分理解并正確使用"斷言"〔assert來防止此類錯誤。[規(guī)則4-3-2]在函數(shù)體的"出口處",對return如果函數(shù)有返回值,那么函數(shù)的"出口處"是return語句。我們不要輕視return語句。如果return語句寫得不好,函數(shù)要么出錯,要么效率低下。注意事項如下:〔1return語句不可返回指向"棧內(nèi)存"的"指針",因為該內(nèi)存在函數(shù)體結束時被自動銷毀。例如char*Func<void>{charstr[]="helloworld";//str的內(nèi)存位于棧上…returnstr;//將導致錯誤}〔2要搞清楚返回的究竟是"值"、還是"指針"。4.4其它建議[建議4-4-1[建議4-4-2]函數(shù)體的規(guī)模要小,盡量控制在50[建議4-4-3帶有"記憶"功能的函數(shù),其行為可能是不可預測的,因為它的行為可能取決于某種"記憶狀態(tài)"。這樣的函數(shù)既不易理解又不利于測試和維護。在C語言中,函數(shù)的static局部變量是函數(shù)的"記憶"存儲器。建議盡量少用static局部變量,除非必需。[建議4-4-4的變量的有效性,例如全局變量、文件句柄等。[建議4-4-5情況。4.5使用斷言程序一般分為Debug版本和Release版本,Debug版本用于內(nèi)部調(diào)試,Release版本發(fā)行給用戶使用。斷言assert是僅在Debug版本起作用的宏,它用于檢查"不應該"發(fā)生的情況。示例4-5是一個內(nèi)存復制函數(shù)。在運行過程中,如果assert的參數(shù)為假,那么程序就會中止〔一般地還會出現(xiàn)提示對話,說明在什么地方引發(fā)了assert。void*memcpy<void*pvTo,constvoid*pvFrom,size_tsize>{assert<<pvTo!=NULL>&&<pvFrom!=NULL>>;//使用斷言byte*pbTo=<byte*>pvTo;//防止改變pvTo的地址byte*pbFrom=<byte*>pvFrom;//防止改變pvFrom的地址while<size-->0>*pbTo++=*pbFrom++;returnpvTo;}示例4-5復制不重疊的內(nèi)存塊assert不是一個倉促拼湊起來的宏。為了不在程序的Debug版本和Release版本引起差別,assert不應該產(chǎn)生任何副作用。所以assert不是函數(shù),而是宏。程序員可以把assert看成一個在任何系統(tǒng)狀態(tài)下都可以安全使用的無害測試手段。如果程序在assert處終止了,并不是說含有該assert的函數(shù)有錯誤,而是調(diào)用者出了差錯,assert可以幫助我們找到發(fā)生錯誤的原因。很少有比跟蹤到程序的斷言,卻不知道該斷言的作用更讓人沮喪的事了。你化了很多時間,不是為了排除錯誤,而只是為了弄清楚這個錯誤到底是什么。有的時候,程序員偶爾還會設計出有錯誤的斷言。所以如果搞不清楚斷言檢查的是什么,就很難判斷錯誤是出現(xiàn)在程序中,還是出現(xiàn)在斷言中。幸運的是這個問題很好解決,只要加上清晰的注釋即可。這本是顯而易見的事情,可是很少有程序員這樣做。這好比一個人在森林里,看到樹上釘著一塊"危險"的大牌子。但危險到底是什么?樹要倒?有廢井?有野獸?除非告訴人們"危險"是什么,否則這個警告牌難以起到積極有效的作用。難以理解的斷言常常被程序員忽略,甚至被刪除。[規(guī)則4-5-1之間的區(qū)別,后者是必然存在的并且是一定要作出處理的。[規(guī)則4-5-2[建議4-5-一旦確定了的假定,就要使用斷言對假定進行檢查。[建議4-5-能會隱瞞錯誤。當進行防錯設計時,如果"不可能發(fā)生"的事情的確發(fā)生了,則要使用斷言進行報警。其它編程經(jīng)驗5.1提高程序的效率程序的時間效率是指運行速度,空間效率是指程序占用內(nèi)存或者外存的狀況。全局效率是指站在整個系統(tǒng)的角度上考慮的效率,局部效率是指站在模塊或函數(shù)角度上考慮的效率。[規(guī)則5-可讀性等質(zhì)量因素的前提下,設法提高程序的效率。[規(guī)則5-[規(guī)則5-緊要之處優(yōu)化。[規(guī)則5-[規(guī)則5-作出適當?shù)恼壑?。例如多花費一些內(nèi)存來提高性能。[規(guī)則5-5.2一些有益的建議[建議5-我們經(jīng)常會把"=="誤寫成"=",象"||"、"&&"、"<="、">="這類符號也很容易發(fā)生"丟1"失誤。然而編譯器卻不一定能自動指出這類錯誤。[建議5-未被初始化的變量當成右值使用。[建議5-[建議5-們知道發(fā)生了什么事,避免讓編譯器輕悄悄地進行隱式的數(shù)據(jù)類型轉換。[建議5-[建議5-[建議5-2-7[建議5-[建議5-[建議5-代碼,應當重新編寫。[建議5-[建議5-[建議5-[建議5-2-14]如果可能的話,使用PC-Lint2.有的學生總是問老師"我應該掌握什么程序設計語言更好?"你認為該如何回答這個問題?答:首先必須掌握C語言,面向?qū)ο蟮某绦蛟O計語言,各有各的優(yōu)勢,看你想往哪方面用了,如果是服務器端的應用最好是java,跨平臺性好;如果是,一般的桌面應用,C#是較好的選擇;至于易上手程度,VB,Delphi等是上手比較快的;至于數(shù)據(jù)庫應用本人認為PB是最好的選擇,VB,Delphi也是比較好的選擇;當特別強調(diào)效率的時候VC是不二的選擇,其中VC最為復雜,也最為靈活,"偷懶的程序
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司入股農(nóng)民合同范本
- 合伙店鋪協(xié)議合同范本
- 磚廠訂貨合同范本模板
- 合同范本蓋章標準樣本
- 橋梁安全事故
- 2025年春一年級語文上冊 語文園地三(公開課一等獎創(chuàng)新教案++素材)
- 2025年春一年級語文上冊 19 咕咚(公開課一等獎創(chuàng)新教案++素材)
- 預防心理障礙的策略與方法
- 青年創(chuàng)新創(chuàng)業(yè)事跡
- 2019年應用化工技術專業(yè)單招考試大綱知識考試樣卷
- 2024屆浙江省名校新高考研究聯(lián)盟高三第三次聯(lián)考英語試題含答案
- 混凝土外加劑試驗原始記錄
- 華為5G認證考試(H35-460)題庫及答案
- (正式版)JBT 14932-2024 機械式停車設備 停放客車通-用技術規(guī)范
- 第6課 學書有法 課件-2023-2024學年高中美術人教版(2019)選擇性必修2 中國書畫
- 貴州省初中《體育》學業(yè)水平考試參考題庫(含答案)
- 2024年天津?qū)I居嬎銠C考試真題試卷及答案
- 合同的變更和解除條款
- 青島版數(shù)學五年級下冊第二單元《分數(shù)的意義和性質(zhì)》教學評一致性的單元整體備課
- 2023年6月新高考天津卷英語試題真題及答案解析(精校打印版)
- 《鐵路法》培訓試卷及答案
評論
0/150
提交評論