第一篇:軟件工程考試
第一章 軟件工程學概述
1.軟件的概念,軟件的分類
答:軟件=程序+數(shù)據(jù)+文檔;
按規(guī)模分類:微型、小型、中型、大型、甚大形、極大型(6)
按性質(zhì)分類:系統(tǒng)軟件、支撐軟件、應(yīng)用軟件(3)
按工作方式分類:實時、分時、交互式、批處理(4)
按服務(wù)對象分類:項目軟件、產(chǎn)品軟件(2)
2.軟件危機產(chǎn)生的原因(2點),緩解軟件危機的途徑
答:和軟件本身的特點有關(guān),和開發(fā)軟件的方法不正確有關(guān);
軟件工程;
3.軟件生命周期包含的活動
答:問題定義、可行性研究、需求分析、總體設(shè)計、詳細設(shè)計、編碼、測試(8)
4.問題定義階段的任務(wù)
答:確定軟件規(guī)模、性質(zhì)、目標
5.常見的軟件開發(fā)模型
瀑布模型:適用范圍是需求確定的軟件開發(fā),是描述結(jié)構(gòu)化的軟件開發(fā)模型;
快速原型模型:適用范圍是需求不確定的軟件開發(fā);
噴泉模型:是描述面向?qū)ο蟮能浖_發(fā)模型;
第二章 可行性研究
1.可行性研究從哪些方面進行
答:經(jīng)濟,技術(shù),法律,操作(4)
2.系統(tǒng)流圖SFD的作用
答:描述系統(tǒng)的工作過程,建立系統(tǒng)的業(yè)務(wù)模型
3.數(shù)據(jù)流圖DFD的作用,符號,畫法
答:描述系統(tǒng)的功能,建立系統(tǒng)的功能模型
符號:外部實體(正方形),處理(圓形),存儲(雙實線),數(shù)據(jù)流(單箭頭線)畫法:分離成分,分層畫DFD(頂層,0層,1層)
第三章 需求分析
1.結(jié)構(gòu)化的需求分析方法SA的原理
答:用DFD、DD進行功能分析,建立系統(tǒng)的功能模型,用E-R進行數(shù)據(jù)分析,建立系統(tǒng)的數(shù)據(jù)模型
第五章 總體設(shè)計
1.總體設(shè)計的原理
答:模塊化、抽象、逐步求精、信息隱藏和局部化、模塊獨立(5)
2.衡量模塊獨立的指標
答:耦合,內(nèi)聚 3.總體設(shè)計的啟發(fā)規(guī)則(7點)
答:改進軟件結(jié)構(gòu)提高模塊獨立性
模塊規(guī)模應(yīng)該適中
深度、寬度、扇出和扇入都應(yīng)適當
模塊的作用域應(yīng)該在控制域之內(nèi)
力爭降低模塊接口的復(fù)雜程度
設(shè)計單入口單出口的模塊
模塊功能應(yīng)該可以預(yù)測
4.結(jié)構(gòu)化的設(shè)計方法SD的原理
答:將DFD映射成軟件結(jié)構(gòu)圖
第六章 詳細設(shè)計
1.用結(jié)構(gòu)化方法進行開發(fā)在詳細設(shè)計階段的任務(wù)
答:對模塊進行設(shè)計,主要是設(shè)計模塊的界面和算法 2.結(jié)構(gòu)化程序設(shè)計SP的原則(7點)
答:采用自頂向下、逐步求精的設(shè)計方法
程序中用順序、選擇、多分支、while型循環(huán)、until型循環(huán)表示程序邏輯
每種控制結(jié)構(gòu)單入口、單出口
程序語句組成模塊,每個模塊單入口單出口
復(fù)雜的結(jié)構(gòu)用5種基本控制結(jié)構(gòu)組合嵌套實現(xiàn)
嚴格控制goto語句的使用,在下列情況可用:
在非結(jié)構(gòu)化的語言中,用goto語句實現(xiàn)結(jié)構(gòu)化的構(gòu)造
在某種可以改善而不是損害可讀性的情況下
不僅要注意程序的結(jié)構(gòu)化,還要注意數(shù)據(jù)結(jié)構(gòu)的合理化
3.判斷算法是否為結(jié)構(gòu)化的依據(jù)(3點)
答:由5種基本控制結(jié)構(gòu)組成;
每種控制結(jié)構(gòu)單入口單出口;
模塊單入口單出口
4.描述算法的工具
答:圖形工具:N-S圖,PAD圖,活動圖
語言工具:PDL語言
表格工具:判定表、判定樹
5.算法環(huán)形復(fù)雜度的度量(流程圖-流圖-區(qū)域數(shù))
答:流程圖-流圖轉(zhuǎn)換方法:
一個判斷框縮成一個點;
一個處理框縮成一個點;
一個順序處理序列縮成一個點;
判定框和與之相連的處理框縮成一個點;
真假分支的匯聚點增加一個點
第七章 實現(xiàn)
1.編碼的風格(判斷題)
答:程序內(nèi)部的文檔:恰當?shù)臉俗R符(含義鮮明、縮寫(必須保留第一個字母、輔音字母由于元音字母、字首優(yōu)于字尾)+注解)、適當?shù)淖⒔猓ㄐ蜓孕宰⒔?、功能性注解)、程序的視覺組織(布局、空行、縮進)
2.測試的概念、原則、方法,步驟
答:概念:用最少的時間和人力,找到軟件中盡可能多的錯誤和缺陷
原則:
盡早的和不斷的測試;
事先要制定測試計劃,嚴格執(zhí)行學生計劃,排除測試的隨意性;
測試從小規(guī)模測試開始,逐步進行大規(guī)模測試;
充分注意測試中的“群集”現(xiàn)象;
“窮舉”測試不可能,應(yīng)該精心設(shè)計測試方案,使測試方案充分的覆蓋程序邏輯,以盡可能多的發(fā)現(xiàn)程序中的錯誤;
測試方案應(yīng)該包含合理的輸入條件和不合理的輸入條件;
測試應(yīng)由獨立的第三方從事;
方法有黑盒測試和白盒測試
步驟是單元測試、集成測試、系統(tǒng)測試、確認測試
3.白盒測試法有哪些,黑盒測試法有哪些
答:白盒測試法有:邏輯覆蓋法、基本路徑法覆蓋法、循環(huán)覆蓋法
黑盒測試法有:等價劃分法,分界值分析法,錯誤推算法
4.用邏輯覆蓋法設(shè)計測試方案
5.黑盒測試技術(shù)的原理
答:在測試中,把程序看作一個不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部 特性的情況下,在程序接口進行測試,它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息。
6.可靠性的概念
答:軟件可靠性是程序在給定的事件間隔內(nèi),按照規(guī)格說明書的規(guī)定成功的運行的概率;可靠性是衡量軟件質(zhì)量的指標
7.可靠性的計算
第八章 維護
1.維護的概念、分類
答:在軟件已經(jīng)交付使用后,為了改正錯誤或滿足新的需要而修改軟件的過程; 改正型維護,完善型維護,適應(yīng)型維護,預(yù)防型維護;
第九章 實戰(zhàn)
1.軟件有哪些開發(fā)方法
答:結(jié)構(gòu)化的開發(fā)方法、面向?qū)ο蟮拈_發(fā)方法、傳統(tǒng)的開發(fā)方法與面向?qū)ο蟮拈_發(fā)方法相結(jié)合的實用開發(fā)方法
2.傳統(tǒng)的軟件開發(fā)方法的開發(fā)步驟
答:問題定義,可行性研究,需求分析
業(yè)務(wù)分析(業(yè)務(wù)描述,建立業(yè)務(wù)模型)
功能分析(功能描述,功能模型)
數(shù)據(jù)分析
總體設(shè)計
建立軟件結(jié)構(gòu)
設(shè)計數(shù)據(jù)庫的表結(jié)構(gòu)
詳細設(shè)計
模塊設(shè)計
建立數(shù)據(jù)庫,錄入數(shù)據(jù)
實現(xiàn)
編碼,測試
3.面向?qū)ο蟮拈_發(fā)方法的開發(fā)步驟
答:問題定義,可行性研究
面向?qū)ο蟮姆治?/p>
業(yè)務(wù)分析
功能分析,建立系統(tǒng)的功能模型(參與者,需求結(jié)構(gòu),功能模型)對象分析,建立系統(tǒng)初步的對象模型
用例分析,建立用例分析模型(順序圖,活動圖)
擴充和完善,建立系統(tǒng)完整的對象模型
面向?qū)ο蟮目傮w設(shè)計
擴充和完善功能模型
軟件運行環(huán)境
軟件架構(gòu)模型(軟件架構(gòu)模式,軟件分層架構(gòu),軟件邏輯結(jié)構(gòu))
擴充和完善對象模型,建立平臺相關(guān)對象模型
用例設(shè)計模型(順序圖,活動圖)
數(shù)據(jù)庫設(shè)計模型(數(shù)據(jù)庫的表結(jié)構(gòu),數(shù)據(jù)庫的邏輯結(jié)構(gòu))
界面設(shè)計模型(界面結(jié)構(gòu)模型,屏幕界面模型)
組件圖
部署模型
面向?qū)ο蟮脑敿氃O(shè)計
確定每個用例的實現(xiàn)算法
建立數(shù)據(jù)庫,錄入數(shù)據(jù)
面向?qū)ο髮崿F(xiàn)
編碼,測試
4.BCE、MVC是什么
答:BCE是用例分析模式、MVC是程序設(shè)計思想
5.傳統(tǒng)的開發(fā)方法與面向?qū)ο蟮拈_發(fā)方法相結(jié)合的實用開發(fā)方法的開發(fā)步驟 答:問題定義,可行性研究
需求分析
業(yè)務(wù)分析
功能分析
數(shù)據(jù)分析
動態(tài)分析
總體設(shè)計
軟件運行環(huán)境
軟件架構(gòu)模式(C/S B/S)
建立軟件結(jié)構(gòu)圖
設(shè)計數(shù)據(jù)庫的表結(jié)構(gòu)
詳細設(shè)計
模塊設(shè)計
建立數(shù)據(jù)庫,錄入數(shù)據(jù)
實現(xiàn)
編碼,測試
第二篇:軟件工程考試
軟件工程是用工程、科學和數(shù)學的原則與方法研制、維護計算機軟件的有關(guān)技術(shù)和管理方法 軟件工程三要素:方法、工具和過程
軟件工程的內(nèi)容:軟件開發(fā)技術(shù)和軟件開發(fā)管理兩個方面
可行性研究方面:技術(shù)可行性經(jīng)濟可行性操作可行性法律可行性
IT項目可行性研究審計的概念:事前對IT項目從技術(shù)和經(jīng)濟兩個方而進行的詳細論證,涉及
數(shù)據(jù)字典是關(guān)于數(shù)據(jù)的信息的集合,也就是對數(shù)據(jù)流圖中包含的所有元素的定義的集合.包括(1)數(shù)據(jù)流(2)數(shù)據(jù)元素(3)數(shù)據(jù)存儲(4)處理 驗證軟件需求的正確性:(1)一致性:所有需求必須是一致的,任何一條需求不能和其他需求互相矛盾。(2)完整性: 需求必須是完整的,規(guī)格說明書應(yīng)該包括用戶需要的每一個功能或性能(3)現(xiàn)實性:指定的需求應(yīng)該是用現(xiàn)有的硬件技術(shù)和軟件技術(shù)基本上可以實現(xiàn)的。對硬件技術(shù)的進步可以做些預(yù)測,對軟件技術(shù)的進步則很難做出預(yù)測,只能從現(xiàn)有技術(shù)水平出發(fā)判斷需求的現(xiàn)實性。(4)有效性: 必須證明需求是正確有效的,確實能解決用戶面對的問題。
軟件設(shè)計過程有:1數(shù)據(jù)設(shè)計:將實體 – 關(guān)系圖中描述的對象和關(guān)系,以及數(shù)據(jù)詞典中描述的詳細數(shù)據(jù)內(nèi)容轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義。2總體結(jié)構(gòu)(系統(tǒng)結(jié)構(gòu))設(shè)計: 定義軟件系統(tǒng)各主要成份之間的關(guān)系。3過程設(shè)計: 把結(jié)構(gòu)成份轉(zhuǎn)換成軟件的過程性描述。4接口設(shè)計:定義軟件內(nèi)部各成份之間、軟件與其它協(xié)同系統(tǒng)之間及軟件與用戶之間的交互機制。軟件設(shè)計方法:結(jié)構(gòu)化設(shè)計方法(SD)面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法(JSD方法)面向?qū)ο蟮脑O(shè)計方法(OOD)
軟件設(shè)計分兩個階段完成:結(jié)構(gòu)設(shè)計:結(jié)構(gòu)設(shè)計是總體設(shè)計階段的任務(wù)。結(jié)構(gòu)設(shè)計確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系。過程設(shè)計:確定每個模塊的處理過程
結(jié)構(gòu)程序設(shè)計:一種設(shè)計程序的技術(shù),它采用自頂向下逐步求精的設(shè)計方法和單入口單出口的控制結(jié)構(gòu)
軟件測試:是根據(jù)軟件開發(fā)各階段的文檔資料和程序的內(nèi)部結(jié)構(gòu),精心設(shè)計一組“高產(chǎn)”的測試用例,利用這些實例執(zhí)行程序,找出軟件中潛在的各種錯誤和缺陷的過程 黑盒法(黑盒技術(shù)是把被測試對象看成一個黑盒子,測試人員完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程,只在軟件的接口處進行測試,依據(jù)需求規(guī)格說明書,檢查程序是否滿足功能要求 白盒法(白盒技術(shù)):是把測試對象看作一個打開的盒子,測試人員須了解程序的內(nèi)部結(jié)構(gòu)和處理過程,以檢查處理過程的細節(jié)為基礎(chǔ),對程序中盡可能多的邏輯路徑進行測試,檢查內(nèi)部控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)是否有錯,實際的運行狀態(tài)與預(yù)期的狀態(tài)是否一致。驅(qū)動模塊:驅(qū)動模塊是用來模擬被測模塊的上級調(diào)用模塊的模塊,功能要比真正的上級模塊簡單得多,它只完成接受測試數(shù)據(jù),以上級模塊調(diào)用被測模塊的格式驅(qū)動被測模塊,接收被測模塊的測試結(jié)果并輸出。
樁模塊:樁模塊用來代替被測試模塊所調(diào)用的模塊。它的作用是返回被測模塊所需的信息。單元測試::單元測試指對源程序中每一個程序單元進行測試,檢查各個模塊是否正確實現(xiàn)規(guī)定的功能,從而發(fā)現(xiàn)模塊在編碼中或算法中的錯誤。
集成測試:是指在單元測試的基礎(chǔ)上,將所有模塊按照設(shè)計要求組裝成一個完整的系統(tǒng)進行的測試,故也稱組裝測試或聯(lián)合測試。
確認測試:又稱有效性測試。是為了檢查軟件的功能與性能是否與需求規(guī)格說明書中確定的指標相符合所進行的測試
單元測試內(nèi)容①模塊接口②局部數(shù)據(jù)結(jié)構(gòu)③重要的執(zhí)行路徑④錯誤處理⑤邊界條件。調(diào)試的目的確定錯誤的原因和位置,并改正錯誤,因此調(diào)試也稱為糾錯(Debug)調(diào)試的技術(shù)手段有簡單的調(diào)試方法、歸納法、演繹法和回溯法等 軟件可維護性:軟件能夠被理解、校正、適應(yīng)及增強功能的容易程度
為了保證軟件的可維護性,需要做哪些質(zhì)量保證檢查?(1)在檢查點進行檢查。檢查點是指軟件開發(fā)的每一個階段的終點。(2)驗收檢查。驗收檢查是一個特殊的檢查點的檢查,它是把軟件從開發(fā)轉(zhuǎn)移到維護的最后一次檢查。(3)周期性的維護檢查(4)對軟件包的檢查。好的文檔有以下幾方面的作用:(1)好的文檔能提高程序的可閱讀性,但壞的文檔比沒有文檔更壞;(2)好的文檔意味著簡明性,風格的一致性,容易修改;(3)程序編碼中應(yīng)該有必要的注釋以提高程序的可理解性;(4)程序越長、越復(fù)雜,則它對文檔的需求也越迫切 軟件維護的流程:定維護申請報告。審查申請報告并批準。進行維護并做詳細記錄。復(fù)審 面向?qū)ο蠓椒▽W的出發(fā)點和基本原則:是盡可能模擬人類習慣的思維方式,使開發(fā)軟件的方法與過程盡可能接近人類認識世界解決問題的方法與過程.描述問題的問題域與實現(xiàn)解法的求解域在結(jié)構(gòu)上盡可能一致。
對象是用面向?qū)ο蠓椒▽W開發(fā)軟件時對客觀世界實體的抽象,它是由描述實體屬性的數(shù)據(jù)及可以對這些數(shù)據(jù)施加的所有操作封裝在一起構(gòu)成的統(tǒng)一體。傳統(tǒng)的數(shù)據(jù)是用傳統(tǒng)方法學開發(fā)軟件時對客觀世界實體的抽象,但是,種抽象是不全面的:數(shù)據(jù)只能描述實體的靜態(tài)屬性,不能描述實體的動態(tài)行為。必須從外界對數(shù)據(jù)施加操作,才能改變數(shù)據(jù)實現(xiàn)實體應(yīng)有的行為。對象與傳統(tǒng)數(shù)據(jù)有本質(zhì)區(qū)別,它不是被動地等待外界對它施加操作,相反,它是進行處理的主體。必須發(fā)消息請求對象主動地執(zhí)行它的某些操作,處理它的私有數(shù)據(jù),而不能直接從外界對它的私有數(shù)據(jù)進行操作。
對象模型的五個層次:主題層(也稱為范疇層),類—&—對象層,結(jié)構(gòu)層,屬性層,服務(wù)層
面向?qū)ο髮崿F(xiàn)主要包括兩項工作:把面向?qū)ο笤O(shè)計結(jié)果,翻譯成用某種程序語言書寫的面向?qū)ο蟪绦颍粶y試并調(diào)試面向?qū)ο蟮某绦?/p>
面向?qū)ο筌浖臏y試分四個層次進行:算法層、類層、主題層、系統(tǒng)層
項目管理者的目標: 定義全部項目任務(wù),識別出關(guān)鍵任務(wù),跟蹤關(guān)鍵任務(wù)的進展狀況,以保證能及時發(fā)現(xiàn)拖延進度的情況
軟件配置管理主要有5項任務(wù): 標識 版本控制 變化控制 配置審計 報告 軟件工程實施項目管理的目的 : 在于它能夠幫助我們進行系統(tǒng)性思考,并切實可行地進行全局性安排,同時也可以為項目開發(fā)的人力資源需求提供依據(jù)。
項目管理者的任務(wù):確保信息系統(tǒng)項目符合預(yù)算和進度要求,并確保交付的系統(tǒng)能夠達到預(yù)定的目標
軟件的質(zhì)量保證活動: 是確保軟件產(chǎn)品從誕生到消亡為止的所有階段的質(zhì)量的活動。即為了確定、達到和維護需要的軟件質(zhì)量而進行的所有有計劃、有系統(tǒng)的管理活動 對編制高質(zhì)量文檔的要求:(1)針對性(2)精確性(3)清晰性(4)完整性(5)靈活性
第三篇:軟件工程考試總結(jié)
2.說明結(jié)構(gòu)化程序設(shè)計的主要思想是什么? 答:(1)自頂向下、逐步求精的程序設(shè)計方法(2分)(2)使用3種基本控制結(jié)構(gòu)、單入口、單出口來構(gòu)造程序。結(jié)構(gòu)化程序設(shè)計是實現(xiàn)該目標的關(guān)鍵技術(shù)之一,它指導(dǎo)人們用良好的思想方法開發(fā)易于理解、易于驗證的程序。結(jié)構(gòu)化程序設(shè)計方法的基本要點是: 1)采用自頂向下、逐步求精的程序設(shè)計方法2)使用三種基本控制結(jié)構(gòu)構(gòu)造程序 3)主程序員組的組織形式。
3.軟件測試包括哪些步驟?說明這些步驟的測試對象是什么?答:(1)單元測試,測試對象單元模塊(2)集成測試,測試對象為組裝后的程序模塊(3)確認測試,測試對象為可運行的目標軟件系統(tǒng)
4.需求分析與軟件設(shè)計二個階段任務(wù)的主要區(qū)別是什么? 答:需求分析定義軟件的用戶需求,即定義待開發(fā)軟件能做什么軟件設(shè)計定義軟件的實現(xiàn)細節(jié)以滿足用戶需求,即研究如何實現(xiàn)軟件 5.說明軟件測試和調(diào)試的目的有何區(qū)別?
答:測試的目的是判斷和發(fā)現(xiàn)軟件是否有錯誤 調(diào)試的目的是定位軟件錯誤并糾正錯誤。
7、白盒法:該方法把測試對象看作一個打開的盒子,測試人員須了解程序的內(nèi)部結(jié)構(gòu)和處理過程,以檢查處理過程的細節(jié)為基礎(chǔ),對程序中盡可能多的邏輯路徑進行測試,檢查內(nèi)部控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)是否有錯,實際的運行狀態(tài)與預(yù)期的狀態(tài)是否一致。白盒法也不可能進行窮舉測試。
8、黑盒法:該方法把被測試對象看成一個黑盒子,測試人員完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程,只在軟件接口處進行測試,依照需求規(guī)格說明書,檢查程序是否滿足功能要求。因此,黑盒測試又稱為功能測試或數(shù)據(jù)驅(qū)動測試
9、面向?qū)ο笤O(shè)計:是把分析階段得到的需求轉(zhuǎn)變成符合成本和質(zhì)量要求的、抽象的系統(tǒng)實現(xiàn)方案的過程?;蛘哒f,面向?qū)ο笤O(shè)計就是用面向?qū)ο笥^點建立求解域模型的過程。
10、結(jié)構(gòu)化設(shè)計:面向數(shù)據(jù)流的設(shè)計是以需求分析階段產(chǎn)生的數(shù)據(jù)流圖為基礎(chǔ),按一定的步驟映射成軟件結(jié)構(gòu),因此又稱結(jié)構(gòu)化設(shè)計(SD)。
11、結(jié)構(gòu)化分析:是根據(jù)分解與抽象的原則,按照系統(tǒng)中數(shù)據(jù)處理的流程,用數(shù)據(jù)圖來建立系統(tǒng)的功能模型,從而完成需求分析工作
結(jié)構(gòu)化方法是一種傳統(tǒng)的軟件開發(fā)方法,它是由結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計和結(jié)構(gòu)化程序設(shè)計三部分有機組合而成的。它的基本思想:把一個復(fù)雜問題的求解過程分階段進行,而且這種分解是自頂向下,逐層分解,使得每個階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。
結(jié)構(gòu)化分析方法(Structured Method,結(jié)構(gòu)化方法)是強調(diào)開發(fā)方法的結(jié)構(gòu)合理性以及所開發(fā)軟件的結(jié)構(gòu)合理性的軟件開發(fā)方法。結(jié)構(gòu)是指系統(tǒng)內(nèi)各個組成要素之間的相互聯(lián)系、相互作用的框架。結(jié)構(gòu)化開發(fā)方法提出了一組提高軟件結(jié)構(gòu)合理性的準則,如分解與抽象、模塊獨立性、信息隱蔽等。針對軟件生存周期各個不同的階段,它有結(jié)構(gòu)化分析(SA)、結(jié)構(gòu)化設(shè)計(SD)和結(jié)構(gòu)化程序設(shè)計(SP)等方法。
結(jié)構(gòu)化分析方法是面向____數(shù)據(jù)流___進行需求分析的方法。結(jié)構(gòu)化分析方法使用____數(shù)據(jù)字典______與____加工說明___來描述。
13、系統(tǒng)流程圖:是描述物理系統(tǒng)的傳統(tǒng)工具,它用圖形符號來表示系統(tǒng)中的各個元素,例如人工處理、數(shù)據(jù)處理、數(shù)據(jù)庫、文件、設(shè)備等。它表達了系統(tǒng)中各個元素之間的信息流動的情況。4.軟件生存周期
軟件生存周期是指軟件產(chǎn)品從考慮其概念開始到該軟件產(chǎn)品交付使用,直至最終退役為止的整個過程,一般包括計劃、分析、設(shè)計、實現(xiàn)、測試、集成、交付、維護等階段。
2、采用黑盒技術(shù)設(shè)計測試用例有哪幾種方法?這些方法各有什么特點? ㈠等價類劃分。等價類劃分是將輸入數(shù)據(jù)域按有效的或無效的(也稱合理的或不合理的)劃分成若干個等價類,測試每個等價類的代表值就等于對該類其它值的測試。㈡邊界值分析。該方法是將測試邊界情況作為重點目標,選取正好等于,剛剛大于或剛剛小于邊界值的情況,根據(jù)這些情況選擇測試用例。㈢錯誤推測。錯誤推測法沒有確定的步驟,憑檢驗進行。它的基本思想是列出程序中可能發(fā)生錯誤的情況,根據(jù)這些情況選擇測試用例
3,Gantt圖是歷史悠久,應(yīng)用廣泛的制定進度的計劃的工具。形象的描繪任務(wù)分解情況,以及每個子任務(wù)的開始時間和結(jié)束時間,具有直觀簡明,容易掌握,容易繪制的優(yōu)點。缺點1不能顯式描繪各項作業(yè)依賴關(guān)系2進度的關(guān)鍵部分不明確,難于確定哪些是主攻和主控3有潛力的部分不明確,造成浪費。工程網(wǎng)絡(luò) 0分軟件危機定義和產(chǎn)生的因有哪些?
當軟件開發(fā)技術(shù)的進步不能跟上硬件技術(shù)的進步,未能滿足發(fā)展的要求,致軟件開發(fā)中遇到的問題找不到解決的辦法,使問題積累起來,形成了尖銳的矛盾,因而導(dǎo)致了軟件危機。
1)軟件日益復(fù)雜和龐大(2)軟件開發(fā)管理困難和復(fù)雜(3)軟件開發(fā)技術(shù)落后(4)生產(chǎn)方式落后(5)開發(fā)工具落后(6)軟件開發(fā)費用不斷增加
1、可行性研究的任務(wù)是什么? 首先需要進行概要的分析研究,初步確定項目的規(guī)模和目標,確定項目的約束和限制,把他們清楚地列舉出來。然后,分析員進行簡要的需求分析,抽象出該項目的邏輯結(jié)構(gòu),建立邏輯模型。從邏輯模型出發(fā),經(jīng)過壓縮的設(shè)計,探索出若干種可供選擇的主要解決方法,對每種解決方法都要研究它的可行性,可從以下三個方面分析研究每種解決方法的可行性。㈠技術(shù)可行性:對要開發(fā)項目的功能、性能、限制條件進行分析,確定在現(xiàn)有的資源條件下,技術(shù)風險有多大,項目是否能實現(xiàn)。㈡經(jīng)濟可行性:進行開發(fā)成本的估算以及了解取得效益的評估,確定要開發(fā)的項目是否值得投資開發(fā)。㈢社會可行性:要開發(fā)的項目是否存在任何侵犯、妨礙等責任問題,要開發(fā)項目的運行方式在用戶組織內(nèi)是否行得通,現(xiàn)有管理制度、人員素質(zhì)、操作方式是否可行。
2、需求分析的任務(wù)是什么?
需求分析的任務(wù)是確定待開發(fā)的軟件系統(tǒng)“做什么”。具體任務(wù)包括確定軟件系統(tǒng)的功能需求、性能需求和運行環(huán)境約束,編制軟件需求規(guī)格說明書、軟件系統(tǒng)的驗收測試準則和初步的用戶手冊。
需求分析是指,開發(fā)人員要準確理解用戶的要求,進行細致的調(diào)查分析,將用戶非形式的需求陳述轉(zhuǎn)化為完整的需求定義,再由需求定義轉(zhuǎn)換到相應(yīng)的形式功能規(guī)約(需求規(guī)格說明)的過程。
3、概要設(shè)計的定義和基本任務(wù)是什么?
進入了設(shè)計階段,要把軟件“做什么”的邏輯模型變換為“怎么做”的物理模型,即著手實現(xiàn)軟件的需求,并將設(shè)計的結(jié)果反應(yīng)在“設(shè)計規(guī)格說明書”文檔中,所以軟件設(shè)計是一個把軟件需求轉(zhuǎn)換為軟件表示的過程,最初這種表示只是描述了軟件的總的體系結(jié)構(gòu),稱為軟件的概要設(shè)計或結(jié)構(gòu)設(shè)計。①采用某種設(shè)計方法,將一個復(fù)雜的系統(tǒng)按功能劃分成模塊。②確定每個模塊的功能。③確定模塊之間的調(diào)用關(guān)系。④確定模塊之間的接口,即模塊之間傳遞的信息。⑤評價模塊結(jié)構(gòu)的質(zhì)量。⑵數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計,漢數(shù)據(jù)結(jié)構(gòu)的設(shè)計及數(shù)據(jù)庫的設(shè)計。⑶編寫概要設(shè)計文檔。主要有:概要設(shè)計說明書;數(shù)據(jù)庫設(shè)計說明書;用戶手冊;修訂測試計劃。⑷評審
4、詳細設(shè)計的基本任務(wù)是什么?有哪幾種描述方法? 詳細設(shè)計是軟件設(shè)計的第二階段,其基本任務(wù)有:為每個模塊進行詳細的算法設(shè)計;為模塊內(nèi)的數(shù)據(jù)結(jié)構(gòu)進行設(shè)計;對數(shù)據(jù)庫進行物理設(shè)計,即確定數(shù)據(jù)庫的物理結(jié)構(gòu);其它設(shè)計,根據(jù)軟件系統(tǒng)類型,還可能要進行代碼設(shè)計、輸入/輸出格式設(shè)計、人機對話設(shè)計;編寫詳細設(shè)計說明書;評審。詳細描述處理過程常用三種工具:圖形、表格和語言。如結(jié)構(gòu)化程序流程圖、盒圖和問題分析圖。IPO圖也是詳細設(shè)計的主要工具之一。表格工具如判定表可作為詳細設(shè)計中描述邏輯條件復(fù)雜的算法。過程設(shè)計語言(PDL)是一種用于描述模塊算法設(shè)計和處理細節(jié)的語言工具。
能力成熟度模型(CMM)用于評價軟件機構(gòu)的軟件過程能力成熟度德模型 文檔:程序開發(fā)使用和維護所常用的圖文資料
2衡量模塊獨立性的兩個定性的標準是內(nèi)聚和耦合。耦合是指對一個軟件結(jié)構(gòu)內(nèi)不同模塊彼此之間互相依賴的緊密程度。內(nèi)聚標志一個模塊內(nèi)各元素彼此的緊密1簡述兩種不同集成測試的比較:自頂向下測試法主要,優(yōu)點是不需要測試驅(qū)動程序,能夠在測試階段的早期實現(xiàn)并驗證系統(tǒng)的主要功能,而且能在早期發(fā)現(xiàn)上層模塊的接口的錯誤,自頂向下的缺點是需要存根程序,可能遇到與此相聯(lián)系的測試困難,底層關(guān)鍵模塊中的錯誤發(fā)現(xiàn)的較晚,而且用這種方法不能展開人力。自底向下正好相反。
影響維護的因素:可理解性,可測試性,可修改性,可移植性,重用性
總體設(shè)計的九個階段:1設(shè)想供選擇的方案,2選擇合適的方案,3推薦最佳方案,4功能分解,5設(shè)計軟件結(jié)構(gòu) 6設(shè)計數(shù)據(jù)庫,7制定測試計劃,8書寫文檔,9審查和復(fù)查
軟件工程:是指導(dǎo)計算機軟件開發(fā)和維護的工程學科,采用工程概念,原理,技術(shù)和方法來開發(fā)和維護軟件,吧經(jīng)過實踐考驗而證明的管理技術(shù)和當前能夠得到的最好的技術(shù)方法結(jié)合起來。要素是方法,工具,過程 系統(tǒng)流程圖是描繪物理系統(tǒng)的傳統(tǒng)工具,他的基本思想是用圖形符號以黑盒子形式描繪組成系統(tǒng)的每個部件。表達的是數(shù)據(jù)在系統(tǒng)各部件的流動情況,而不是對數(shù)據(jù)進行加工處理的控制過程。
3個子模型和5個層次:靜態(tài)結(jié)構(gòu)(對象模型)交互次序(動態(tài)模型)數(shù)據(jù)變換(功能模型)主題層,類和對象層,結(jié)構(gòu)層,屬性層,服務(wù)層
結(jié)構(gòu)化方法有結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計、結(jié)構(gòu)化程序設(shè)計構(gòu)成,它是一種面向數(shù)據(jù)流的開發(fā)方法。
結(jié)構(gòu)化設(shè)計對數(shù)據(jù)流有兩種分析方法,他們是變換分析設(shè)計和事務(wù)分析設(shè)計。質(zhì)量保證是有計劃的和系統(tǒng)性的活動,它對部件或產(chǎn)品滿足確定的技術(shù)需求提供足夠的信心。
軟件質(zhì)量保證措施(SQA)基于非執(zhí)行的測試(復(fù)審和評審)基于執(zhí)行的測試(軟件測試)和程序正確性證明
數(shù)據(jù)字典的內(nèi)容:數(shù)據(jù)流,數(shù)據(jù)流分量,數(shù)據(jù)存儲,數(shù)據(jù)處理
數(shù)據(jù)流圖的內(nèi)容:數(shù)據(jù)流,數(shù)據(jù)存儲,數(shù)據(jù)處理,數(shù)據(jù)的原點和終點。
數(shù)據(jù)流圖(DFD)是一種圖形化技術(shù),他描繪信息流和數(shù)據(jù)從輸入移動到輸出的過程中經(jīng)受的變換。
可行性研究中,數(shù)據(jù)流圖,系統(tǒng)流程圖,數(shù)據(jù)字典
需求分析:訪談,實體聯(lián)系圖,狀態(tài)轉(zhuǎn)換圖,層次方框圖,Warnier圖,IPO圖 總體設(shè)計:層次圖和HIPO圖,結(jié)構(gòu)圖
詳細設(shè)計:過程設(shè)計中有程序流程圖,盒圖,PAD圖,判定表,判定樹,過程設(shè)計語言。面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法:Jackson圖程序復(fù)雜度的定量MaCabe方法和Halstead方法
設(shè)計人機界面的過程中4個問題,系統(tǒng)響應(yīng)時間,用戶幫助設(shè)施,出錯信息處理和命令交互
耦合:盡量使用數(shù)據(jù)耦合少用控制耦合和特征耦合,限制公共環(huán)境耦合的范圍,完全不用內(nèi)容耦合
內(nèi)聚:偶然內(nèi)聚,邏輯內(nèi)聚時間內(nèi)聚,中內(nèi)聚有過程內(nèi)聚通信內(nèi)聚,高內(nèi)聚,功能內(nèi)聚,順序內(nèi)聚
模塊化就是把程序劃分為獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集起來構(gòu)成一個整體,可以完成指定的功能滿足用戶的需求 狀態(tài)轉(zhuǎn)換圖通過描繪系統(tǒng)狀態(tài)及引起系統(tǒng)狀態(tài)轉(zhuǎn)換的事件,來表示系統(tǒng)的行為
5.軟件配置管理,簡稱SCM,它用于整個軟件工程過程。其主要目標是:標識變更;控制變更;確保變更正確地實現(xiàn);報告有關(guān)變更。SCM是一組管理整個軟件生存期各階段中變更的活動。
Jackson的畫法:
1定輸入和輸出數(shù)據(jù)結(jié)構(gòu)
2分析確定在輸入和輸出數(shù)據(jù)結(jié)構(gòu)中有對應(yīng)關(guān)系的數(shù)據(jù)單元,最高層輸入和輸出相對應(yīng)等有其他。
3從數(shù)據(jù)結(jié)構(gòu)圖導(dǎo)出程序結(jié)構(gòu)圖
4列出所有的操作和條件,并把它們分配到程序結(jié)構(gòu)圖的適當位置。5最后用偽碼表示程序處理過程 盒圖的特點:
1功能域明確,可以從盒圖上一眼看出來 2不可能任意轉(zhuǎn)移控制
3很容易確定局部和全程數(shù)據(jù)的作用域
4很容易表現(xiàn)嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。PAD圖:
1使用表示結(jié)構(gòu)化控制結(jié)構(gòu)的PAD符號結(jié)構(gòu)所設(shè)計出來的程序必然是結(jié)構(gòu)化程序。
2PAD圖所描繪的程序結(jié)構(gòu)非常清晰
3PAD圖表現(xiàn)程序邏輯,易讀,易懂,易記 4,容易將PAD圖轉(zhuǎn)換成高級語言源程序
5即可用于表示程序邏輯,也可用于描繪數(shù)據(jù)結(jié)構(gòu) 6PAD的符號支持自頂向下,逐步求精方法
第四篇:軟件工程考試總結(jié)范文
第一章 軟件工程學概述
1.軟件:是程序、數(shù)據(jù)及相關(guān)文檔的完整集合。
2.軟件危機:是指在計算機軟件開發(fā)和維護過程中所遇到的一系列嚴重問題。
3.產(chǎn)生軟件危機的原因
A.與軟件本身的特點有關(guān)。管理和控制軟件開發(fā)過程相當困難,軟件較難維護,它規(guī)模龐大,程序復(fù)雜性將隨著
程序規(guī)模的增加而呈指數(shù)上升。
B.和軟件開發(fā)與維護的方法不正確有關(guān)。
4.消除軟件危機的途徑:
A.應(yīng)該對計算機軟件有一個正確認識。
B.認識到軟件開發(fā)不是某種個體勞動的神秘技巧,而應(yīng)該是一種組織良好、管理嚴密、各類人員協(xié)同配合、共同
發(fā)完成的工程項目。
C.充分吸取和借鑒人類長期以來從事各種工程項目所積累的行之有效的原理、概念、技術(shù)和方法。
D.開發(fā)和使用更好的軟件工具。
5.軟件工程:是指導(dǎo)計算機軟件開發(fā)和維護的一門工程學科。
6.軟件工程的特征:
A.軟件工程關(guān)注于大型程序的構(gòu)造。
B.軟件工程的中心課題是控制復(fù)雜性。
C.軟件經(jīng)常變化。
D.開發(fā)軟件的效率非常重要。
E.和諧的合作是開發(fā)軟件的關(guān)鍵。
F.軟件必須有效地支持它的用戶。
G.在軟件工程領(lǐng)域中通常由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品。
7.軟件工程學的方法學3要素:方法、工具、過程。
方法學:傳統(tǒng)方法學、面向?qū)ο蠓椒▽W。
8.軟件生命周期:
軟件定義、軟件開發(fā)、運行維護三個過程。
軟件定義包括問題定義、可行性研究、需求分析3個階段。
軟件開發(fā)包括總體設(shè)計、詳細設(shè)計、編碼和單元測試、綜合測試4個階段。
9.軟件過程:是為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項任務(wù)的工作步驟。
10.過程模型:瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型。
瀑布模型:優(yōu)點:1.可強迫開發(fā)員采用規(guī)范的方法2.嚴格地規(guī)定了每個階段必須提交的文件3.要求每個階段交出的所有產(chǎn)品都必須經(jīng)過質(zhì)量保證小組的仔細驗證。缺點:傳統(tǒng)的瀑布模型過于理想化,是由文檔驅(qū)動的。
快速原型模型:通過快速構(gòu)建起一個可在計算機上運行的原型系統(tǒng),讓用戶試用原型并收集用戶反饋意見的方法,獲取用戶真正的需要。
增量模型:優(yōu)點:能在較短時間內(nèi)向用戶提交可完成部分工作的產(chǎn)品;逐步增加產(chǎn)品功能可以使用戶有較充實的時
間學習和適應(yīng)新產(chǎn)品,從而減少一個全新的軟件可能給客戶組織帶來的沖擊。
螺旋模型:優(yōu)點:對可選方案和約束條件的強調(diào)有利于已有軟件的重用;減少了過多測試;維護只是螺旋模型中另
一個周期。
第二章 可行性研究(確定問題是否能解決)
1.可行性研究的三個方面:技術(shù)可行性:使用現(xiàn)有的技術(shù)能否實現(xiàn)該系統(tǒng)。
經(jīng)濟可行性:該系統(tǒng)的經(jīng)濟效應(yīng)能否超過它的開發(fā)成本。
操作可行性:系統(tǒng)的操作方式在這個組織內(nèi)是否行得通。
2.系統(tǒng)流程圖:概括的描繪物理系統(tǒng)的傳統(tǒng)工具。表達的是數(shù)據(jù)在系統(tǒng)各部件之間流動的情況。
基本符號:處理、輸入輸出、連接、換頁連接、數(shù)據(jù)流。
3.數(shù)據(jù)流圖DFD:一種圖形化技術(shù),它描繪信息流和數(shù)據(jù)從輸入移動到輸出的過程中所經(jīng)受的變換。描繪邏輯過程。
基本符號:數(shù)據(jù)的源點/終點、變換數(shù)據(jù)的處理、數(shù)據(jù)存儲、數(shù)據(jù)流。
數(shù)據(jù)流圖的命名:先為數(shù)據(jù)流命名,再為處理命名。
數(shù)據(jù)字典:是關(guān)于數(shù)據(jù)信息的集合,也就是對數(shù)據(jù)流圖中包含的所有元素的定義的集合。
數(shù)據(jù)字典的內(nèi)容:數(shù)據(jù)流、數(shù)據(jù)流分量(數(shù)據(jù)元素)、數(shù)據(jù)存儲、處理。
定義數(shù)據(jù)的方法:順序、選擇、重復(fù)。
符號:=等價于、+和、[ ]或、{ }重復(fù)、()可選
4.成本估計技術(shù):代碼行技術(shù)、任務(wù)分解技術(shù)、自動估計成本技術(shù)。
第三章 需求分析(系統(tǒng)必須做什么)
1.需求分析的任務(wù):
A.確定對系統(tǒng)的綜合要求。
B.分析系統(tǒng)的數(shù)據(jù)要求。
C.導(dǎo)出系統(tǒng)的邏輯模型。
D.修正系統(tǒng)開發(fā)計劃。
2.與用戶溝通獲取需求的方法:
A.訪談。
B.面向數(shù)據(jù)流自頂向下求精。(結(jié)構(gòu)化分析方法)
C.簡易的應(yīng)用規(guī)格說明技術(shù)。
D.快速建立軟件原型。
3.實體—聯(lián)系圖(E-R圖)包含的3種信息:數(shù)據(jù)對象(矩形)、屬性(圓角矩形)、聯(lián)系(菱形)。
4.狀態(tài)轉(zhuǎn)換圖:通過描繪系統(tǒng)的狀態(tài)及引起系統(tǒng)狀態(tài)轉(zhuǎn)換的事件,來表示系統(tǒng)的行為。
狀態(tài):是任何可被觀察到的系統(tǒng)行為模式,有初態(tài)、中間狀態(tài)、終態(tài)。一張狀態(tài)圖中只能有一個初態(tài),0到多個終態(tài)。
事件:引起系統(tǒng)做動作或(和)轉(zhuǎn)換狀態(tài)的控制信息。
符號:初態(tài)(實心圓)、終態(tài)(一對同心圓,內(nèi)圓為實心圓)、狀態(tài)轉(zhuǎn)換(箭頭)。
5.該階段可用到的其他圖形:層次方框圖、Warnier圖、IPO圖、注:E—R圖建立數(shù)據(jù)模型,數(shù)據(jù)流圖建立功能模型,狀態(tài)圖建立行為模型。
第五章 總體設(shè)計(概括的說系統(tǒng)應(yīng)該如何實現(xiàn))將軟件需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu)。
1.基本任務(wù):A.劃分出組成系統(tǒng)的物理元素:程序、文件、數(shù)據(jù)庫、人工過程和文檔等。
B.設(shè)計軟件的結(jié)構(gòu)。也就是要確定系統(tǒng)中每個程序由哪些模塊組成,以及這些模塊相互間的關(guān)系。
2.階段:系統(tǒng)設(shè)計階段,確定系統(tǒng)的具體實現(xiàn)方案。
結(jié)構(gòu)設(shè)計階段:確定軟件結(jié)構(gòu)。
典型的總體設(shè)計過程包括9個步驟:
設(shè)想供選擇的方案,選取合理的方案,推薦最佳方案,功能分解,設(shè)計軟件結(jié)構(gòu),設(shè)計數(shù)據(jù)庫,制定
測試計劃,書寫文檔,審查和復(fù)審。
3.設(shè)計原理:模塊化、抽象、逐步求精、信息隱藏和局部化、模塊獨立。
模塊:由邊界元素限定的相鄰程序元素的序列,而且有一個總體標識符代替它。
模塊化:就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構(gòu)成一個整體,可以完成指定的功能滿足用戶需求。
抽象:就是抽出事物的本質(zhì)特征而暫時不考慮它們的細節(jié)。
逐步求精:為了能集中精力解決主要問題而盡量推遲對問題細節(jié)的考慮??煽醋魇且豁棸岩粋€時期內(nèi)必須解決的種種問題按優(yōu)先級排序的技術(shù)。
信息隱藏:設(shè)計和確定的模塊,使得一個模塊內(nèi)包含的信息對于不需要這些信息的模塊來說,是不能訪問的。局部化:把一些關(guān)系密切的軟件元素物理地放得彼此靠近。
模塊的獨立程度的定性標準度量:內(nèi)聚、耦合。
耦合:是對一個軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。耦合由低程度到高程度分為:數(shù)據(jù)耦合、控制耦合、特征耦合、公共環(huán)境耦合、內(nèi)容耦合。
內(nèi)聚:標志著一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度。底內(nèi)聚有偶然內(nèi)聚、邏輯內(nèi)聚、時間內(nèi)聚。中內(nèi)聚包括
過程內(nèi)聚和通信內(nèi)聚。高內(nèi)聚包括順序內(nèi)聚和功能內(nèi)聚。
注:盡量使用數(shù)據(jù)耦合,少用控制耦合和特征耦合,限制公共環(huán)境耦合的范圍,完全不用內(nèi)容耦合。
4.啟發(fā)規(guī)則:
改進軟件結(jié)構(gòu)提高模塊獨立性。模塊規(guī)模應(yīng)該適中。深度、寬度、扇出和扇入都應(yīng)適當。模塊的作用域應(yīng)該在控制域之內(nèi)。力爭降低模塊接口的復(fù)雜程度。設(shè)計單入口單出口的模塊。模塊功能應(yīng)該可以預(yù)測。
深度:表示軟件結(jié)構(gòu)中控制的層數(shù)。
寬度:軟件結(jié)構(gòu)內(nèi)同一個層次上模塊總數(shù)的最大值。
扇出:一個模塊直接控制的模塊數(shù)。
扇入:表示一個模塊有多少個上級模塊直接調(diào)用它。
注:設(shè)計的很好的軟件結(jié)構(gòu),通常頂層扇出比較高,中層扇出較少,底層扇入到公共的使用模塊中去。(底層模塊有高扇入)
5.面向數(shù)據(jù)流的設(shè)計方法:
目標:給出設(shè)計軟件結(jié)構(gòu)的一個系統(tǒng)化的途徑。
概念:把信息流映射策劃那個軟件結(jié)構(gòu),信息流的類型決定了映射的方。
信息流的類型:變換流和事務(wù)流。
變換流的特點:信息以“外部世界”的形式進入軟件系統(tǒng),經(jīng)處理以后再以“外部世界”的形式離開系統(tǒng)。事務(wù)流的特點:數(shù)據(jù)沿輸入通路到達一個處理,該處理根據(jù)輸入數(shù)據(jù)的類型在若干個動作序列中選出一個來執(zhí)行。
6.變換分析:把具有變換流特點的數(shù)據(jù)流圖按預(yù)先確定的模式映射成軟件結(jié)構(gòu)。
第一步:復(fù)查基本系統(tǒng)模型。
第二步:復(fù)查并精化數(shù)據(jù)流圖。
第三步:確定數(shù)據(jù)流圖是變換特性還是事務(wù)特性。
第四步:確定輸入流和輸出流的邊界,從而孤立出變化中心。
第五步:完成第一級分解。
第六步:完成第二次分解。
第七步:使用設(shè)計度量和啟發(fā)規(guī)則對第一次分割得到的軟件結(jié)構(gòu)進一步精化。
第六章 詳細設(shè)計(怎樣具體地實現(xiàn)所要求的系統(tǒng))即過程設(shè)計。通過對結(jié)構(gòu)表示進行細化,得到軟
件詳細的數(shù)據(jù)結(jié)構(gòu)和算法。
1.詳細設(shè)計的內(nèi)容:
用圖表列出系統(tǒng)的每個程序,包括每個模塊和子程序名稱、標識符、層出結(jié)構(gòu)關(guān)系。對程序的功能、性能、輸入、輸出、算法、流程、接口等進行描述
內(nèi)容包括:程序描述:程序簡要描述,意義和特點
功能:程序應(yīng)具備的功能
性能:精度、靈活性和時間特性等
輸入項
輸出項
2.人機界面設(shè)計指南:
一般交互指南:涉及信息顯示、數(shù)據(jù)輸入和系統(tǒng)整體控制。
保持一致性,提供有意義的反饋,在執(zhí)行有破壞性的動作之前要求用戶確認,允許取消絕大多數(shù)
操作,減少在兩次操作之間必須記憶的信息量,提高對話、移動和思考的效率,允許犯錯誤,按
功能對動作分類,并據(jù)此設(shè)計屏幕布局,提供對用戶工作內(nèi)容敏感的幫助設(shè)施,用簡單動詞或動
詞短語作為命令名。
信息顯示指南:只顯示與當前工作內(nèi)容有關(guān)的信息,不要用數(shù)據(jù)淹沒用戶,使用一致標記、標準的縮寫和可預(yù)知的顏色,允許用戶保持可視化的語境,產(chǎn)生有意義的出錯信息,使用大小寫、縮進和文本分組以幫
助理解,使用窗口分隔不同類型的信息,使用“模擬”顯示表示信息,以使信息更容易被用戶提取,高效率地使用顯示屏。
數(shù)據(jù)輸入指南:盡量減少用戶的輸入動作,保持信息顯示和數(shù)據(jù)輸入之間的一致性,允許用戶自定義輸入,交互
應(yīng)該是靈活的,并且可調(diào)整成用戶最喜歡的輸入方式,交互應(yīng)該是靈活的,并且可調(diào)整成用戶最喜
歡的輸入方式,讓用戶控制交互流,對所有輸入動作都提供幫助,消除冗余的輸入。
3.過程設(shè)計工具:分為圖形、表格、語言。有程序流程圖、盒圖(N—S圖)、PAD圖(問題分析圖)、判定表、判
定樹、過程設(shè)計語言(PDL或偽碼)。
4.程序復(fù)雜程度的定量度量:
McCabe方法:根據(jù)程序控制流的復(fù)雜程度度量度量程序的復(fù)雜度,結(jié)果稱為環(huán)形復(fù)雜度。
流圖:實質(zhì)上是“退化了的”程序流程圖。有結(jié)點(圓)、邊(箭頭)。
區(qū)域:邊和結(jié)點圍成的面積。
5.計算環(huán)形復(fù)雜度的方法:
A.區(qū)域數(shù)=環(huán)形復(fù)雜度。
B.流圖G的環(huán)形復(fù)雜度V(G)=E—N+2,E為邊數(shù),N為結(jié)點數(shù)。
C.V(G)=P+1,P為判定結(jié)點的數(shù)目。
第七章 實現(xiàn)(編碼和測試)
1.軟件測試:就是在軟件投入運行前,對軟件需求分析、設(shè)計規(guī)格說明和編碼的最終復(fù)審,是軟件質(zhì)量保證的關(guān)鍵
步驟。
2.測試的目的:在軟件投入生產(chǎn)性運行之前,盡可能多現(xiàn)的發(fā)軟件在運行中的錯誤。
3.測試方法:黑盒測試、白盒測試。
黑盒測試:已經(jīng)知道產(chǎn)品應(yīng)有的功能,檢驗每個功能是否都能正常使用。也叫功能測試。
白盒測試:已經(jīng)知道產(chǎn)品的內(nèi)部工作過程,檢驗這些過程是否按照規(guī)格說明書的規(guī)定正常進行。也叫
結(jié)構(gòu)測試。
以黑盒測試為主,白盒測試為輔。
4.測試步驟:模塊測試、子系統(tǒng)測試、系統(tǒng)測試、驗收測試,平行測試。
5.白盒測試技術(shù):
邏輯覆蓋:是對一系列測試過程的總稱,這組測試過程逐漸進行越來越完整的通路測試。
種類:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋、點覆蓋、邊覆蓋、路徑覆蓋。
基本路徑測試:
一、根據(jù)過程設(shè)計結(jié)果畫出相應(yīng)流圖。
二、計算流圖的環(huán)境復(fù)雜度。
三、確定線路獨立路徑的基本組合。獨立路徑是指至少引入程序的一個新處理語句集合或一
個新條件路徑,就是至少包含一條在定義該路徑之前不曾用過的邊。
獨立路徑數(shù)=環(huán)形復(fù)雜度
四、設(shè)計可強制執(zhí)行基本集合中每條路徑的測試用例。
6.調(diào)試:在測試發(fā)現(xiàn)錯誤之后排除錯誤的過程。
7.軟件維護:在軟件已交付使用之后,為了改正錯誤或者滿足新的需要而修改軟件的過程。分為改進性維護、適應(yīng)性
維護、完善性維護、預(yù)防性維護。
決定軟件可維護性的因素:可理解性、可測試性、可修改性、可移植性、可重用性。
8.軟件項目管理:通過計劃、組織和控制等一系列活動,合理的配置和使用各種資源,以達到既定目標的過程。管理內(nèi)容:估算軟件規(guī)模,工作量估算、進度計劃、人員組織、質(zhì)量保證、軟件配置管理、能力成熟度模型。
第五篇:軟件工程
2.2軟件開發(fā)的基本策略
人們都有自己的世界觀和方法論,能自然而然地運用于生活和工作中。同樣,程序員腦子里的軟件工程觀念會無形地支配其怎么去做事情。軟件工程三十年的發(fā)展,已經(jīng)積累了相當多的方法,但這些方法不是嚴密的理論。實踐人員不應(yīng)該教條地套用方法,更重要的是學會“選擇合適的方法”和“產(chǎn)生新方法”。有謀略才會有好的戰(zhàn)術(shù)。幾千年前,我們的祖先就在打鬧之際寫下了很多心得體會,被現(xiàn)代人很好地運用于工業(yè)和商業(yè)。本節(jié)講述軟件開發(fā)中的三種基本策略:“復(fù)用”、“分而治之”、“優(yōu)化——折衷”。
2.2.1復(fù)用
復(fù)用就是指“利用現(xiàn)成的東西”,文人稱之為“拿來主義”。被復(fù)用的對象可以是有形的物體,也可以是無形的成果。復(fù)用不是人類懶惰的表現(xiàn)而是智慧的表現(xiàn)。因為人類總是在繼承了前人的成果,不斷加以利用、改進或創(chuàng)新后才會進步。所以當我們歡度國慶時,要搞清楚祖國遠不止50歲,我們今天享用到的財富還有上下五千年人民的貢獻。進步只是應(yīng)該的,不進步則就可恥了。
復(fù)用的內(nèi)涵包括了提高質(zhì)量與生產(chǎn)率兩者。由經(jīng)驗可知,在一個新系統(tǒng)中,大部分的內(nèi)容是成熟的,只有小部分內(nèi)容是創(chuàng)新的。一般地可以相信成熟的東西總是比較可靠的(即具有高質(zhì)量),而大量成熟的工作可以通過復(fù)用來快速實現(xiàn)(即具有高生產(chǎn)率)。勤勞并且聰明的人們應(yīng)該把大部分的時間用在小比例的創(chuàng)新工作上,而把小部分的時間用在大比例的成熟工作中,這樣才能把工作做得又快又好。
把復(fù)用的思想用于軟件開發(fā),稱為軟件復(fù)用。據(jù)統(tǒng)計,世上已有1000億多行程序,無數(shù)功能被重寫了成千上萬次,真是浪費哪。面向?qū)ο螅∣bject Oriented)學者的口頭禪就是“請不要再發(fā)明相同的車輪子了”。
將具有一定集成度并可以重復(fù)使用的軟件組成單元稱為軟構(gòu)件(Software Component)。軟件復(fù)用可以表述為:構(gòu)造新的軟件系統(tǒng)可以不必每次從零做起,直接使用已有的軟構(gòu)件,即可組裝(或加以合理修改)成新的系統(tǒng)。復(fù)用方法合理化并簡化了軟件開發(fā)過程,減少了總的開發(fā)工作量與維護代價,既降低了軟件的成本又提高了生產(chǎn)率。另一方面,由于軟構(gòu)件是經(jīng)過反復(fù)使用驗證的,自身具有較高的質(zhì)量。因此由軟構(gòu)件組成的新系統(tǒng)也具有較高的質(zhì)量。利用軟構(gòu)件生產(chǎn)應(yīng)用軟件的過程如圖1.5所示。
軟件復(fù)用不僅要使自己拿來方便,還要讓別人拿去方便,是“拿來拿去主義”。面向?qū)ο蠓椒?,Microsoft公司的COM規(guī)范 [Rogerson 1999],都能很好地用于實現(xiàn)大規(guī)模的軟件復(fù)用。
2.2.2分而治之
分而治之是指把一個復(fù)雜的問題分解成若干個簡單的問題,然后逐個解決。這種樸素的思想來源于人們生活與工作的經(jīng)驗,完全適合于技術(shù)領(lǐng)域。軟件人員在執(zhí)行分而治之的時候,應(yīng)該著重考慮:復(fù)雜問題分解后,每個問題能否用程序?qū)崿F(xiàn)?所有程序最終能否集成為一個軟件系統(tǒng)并有效解決原始的復(fù)雜問題?
圖1.6表示了軟件領(lǐng)域的分而治之策略。諸如軟件的體系結(jié)構(gòu)設(shè)計、模塊化設(shè)計都是分而治之的具體表現(xiàn)。軟件的分而治之不可以“硬分硬治”。不像為了吃一個西瓜或是一只雞,揮刀斬成n塊,再把每塊塞進嘴里粉碎攪拌,然后交由胃腸來消化吸收,象征復(fù)雜問題的西瓜或是雞也就此消失了。
2.2.3優(yōu)化——折衷
軟件的優(yōu)化是指優(yōu)化軟件的各個質(zhì)量因素,如提高運行速度,提高對內(nèi)存資源的利用率,使用戶界面更加友好,使三維圖形的真實感更強等等。想做好優(yōu)化工作,首先要讓開發(fā)人員都有正確的認識:優(yōu)化工作不是可有可無的事情,而是必須要做的事情。當優(yōu)化工作成為一種責任時,程序員才會不斷改進軟件中的算法,數(shù)據(jù)結(jié)構(gòu)和程序組織,從而提高軟件質(zhì)量。
著名的3D游戲軟件Quake,能夠在PC機上實時地繪制高度真實感的復(fù)雜場景。Quake的開發(fā)者能把很多成熟的圖形技術(shù)發(fā)揮到極致,例如把Bresenham畫線、多邊形裁剪、樹遍歷等算法的速度提高近一個數(shù)量級。我第一次看到Quake時不僅感到震動,而且深受打擊。這個PC游戲軟件的技術(shù)水平已經(jīng)遠勝于我所見識到的國內(nèi)領(lǐng)先的圖形學相關(guān)科研成果。這對我們?nèi)找媸⑿械狞c到完止的研發(fā)工作真是莫大的諷刺。所以當我們開發(fā)的軟件表現(xiàn)出很多不可救藥的病癥時,不要怨機器差。真的是我們自己沒有把工作做好,寫不好字卻嫌筆鈍。
就假設(shè)我們經(jīng)過思想教育后,精神抖擻,隨時準備為優(yōu)化工作干上六天七夜。但愿意做并不意味著就能把事情做好。優(yōu)化工作的復(fù)雜之處是很多目標存在千絲萬縷的關(guān)系,可謂數(shù)不清理還亂。當不能夠使所有的目標都得到優(yōu)化時,就需要“折衷”策略。
軟件中的折衷策略是指通過協(xié)調(diào)各個質(zhì)量因素,實現(xiàn)整體質(zhì)量的最優(yōu)。就象黨支部副書記扮演和事佬的角色:“…為了使整個組織具有最好的戰(zhàn)斗力,我們要重用幾個人,照顧一些人,在萬不得已的情況下委屈一批人”。
軟件折衷的重要原則是不能使某一方損失關(guān)鍵的職能,更不可以象“舍魚而取熊掌”那樣拋棄一方。例如3D動畫軟件的瓶頸通常是速度,但如果為了提高速度而在程序中取消光照明計算,那么場景就會喪失真實感,3D動畫也就不再有意義了(如果人類全是色盲,計算機圖形學將變得異常簡單)。
人都有惰性,如果允許濫用折衷的話,那么一當碰到困難,人們就會用拆東墻補西墻的方式去折衷,不再下苦功去做有意義的優(yōu)化。所以我們有必要為折衷制定嚴正的立場:在保證其它因素不差的前提下,使某些因素變得更好。
下面讓我們用“優(yōu)化——折衷”的策略解決“魚和熊掌不可得兼”的難題。
問題提出:假設(shè)魚每千克10元,熊掌每千克一萬元。有個倔脾氣的人只有20元錢,非得要吃上一公斤美妙的“熊掌燒魚”,怎么辦?
解決方案:化9元9角9分錢買999克魚肉,化10元錢買1克熊掌肉,可做一道“熊掌戲魚”菜。剩下的那一分錢還可建立獎勵基金。
2.3一些不正確的觀念
本節(jié)例舉并分析一些不正確的軟件工程觀念,可幫助初學者少犯相似的錯誤。
觀念之一:我們擁有一套講述如何開發(fā)軟件的書籍,書中充滿了標準與示例,可以幫助我們解決軟件開發(fā)中遇到的任何問題。
客觀情況:好的參考書無疑能指導(dǎo)我們的工作。充分利用書籍中的方法、技術(shù)和技巧,可以有效地解決軟件開發(fā)中大量常見的問題。但實踐者并不能因此依賴于書籍,這是因為:(1)現(xiàn)實的工作中,由于條件千差萬別,即使是相當成熟的軟件工程規(guī)范,常常也無法套用。(2)軟件技術(shù)日新月異,沒有哪一種軟件標準能長盛不衰。祖?zhèn)髅胤皆谀承╊I(lǐng)域很吃香,而在軟件領(lǐng)域則意味著落后。
觀念之二:我們擁有最好的開發(fā)工具、最好的計算機,一定能做出優(yōu)秀的軟件。
客觀情況:良好的開發(fā)環(huán)境只是產(chǎn)出成果的必要條件,而不是充分條件。如果擁有好環(huán)境的是一群庸人,難保他們不干出南轅北轍的事情。
觀念之三:如果我們落后于計劃,可以增加更多的程序員來解決。
客觀情況:軟件開發(fā)不同于傳統(tǒng)的農(nóng)業(yè)生產(chǎn),人多不見得力量大。如果給落后于計劃的項目增添新手,可能會更加延誤項目。因為:(1)新手會產(chǎn)生很多新的錯誤,使項目混亂。(2)老手向新手解釋工作以及交流思想都要花費時間,使實際開發(fā)時間更少。所以科學的項目計劃很重要,不在乎計劃能提前多少,重在恰如其分。如果用“大躍進”的方式奔向共產(chǎn)主義,只會產(chǎn)生倒退的后果。
觀念之四:既然需求分析很困難,不管三七二十一先把軟件做了再說,反正軟件是靈活的,隨時可以修改。
客觀情況:對需求把握得越準確,軟件的修修補補就越少。有些需求在一開始時很難確定,在開發(fā)過程中要不斷地加以改正。軟件修改越早代價越少,修改越晚代價越大,就跟治病一樣道理。
2.4一些有爭議的觀念
本節(jié)探討一些有爭議的觀念,目的不在于得出“正確”或“錯誤”的評斷,而在于爭議會激發(fā)更多理性的思考。
爭議之一:如果軟件運行較慢,是換一臺更快的計算機,還是設(shè)計一種更快的算法?
作者觀點:如果開發(fā)軟件的目的是為了學習或是研究,那么應(yīng)該設(shè)計一種更快的算法。如果該軟件已經(jīng)用于商業(yè),則需謹慎考慮:若換一臺更快的計算機能解決問題,則是最快的解決方案。改進算法雖然可以從根本上提高軟件的運行速度,但可能引入錯誤以及延誤進程。技術(shù)狂毫無疑問會選擇后者,因為他們覺得放棄任何可以優(yōu)化的機會就等于犯罪。
類似的爭議還有:是買現(xiàn)成的程序,還是徹底自己開發(fā)?技術(shù)人員和商業(yè)人士常常會有不同的選擇。
爭議之二:有最好的軟件工程方法,最好的編程語言嗎?
作者觀點:在軟件領(lǐng)域永遠沒有最好的,只有更好的。能解決問題的都是好方法或是好語言。程序員在最初學習Basic、Fortran、Pascal、C、C++等語言時會感覺一個比一個好,不免有喜新厭舊之舉。而如今 的Visual Basic、Delphi、Visual C++、Java等語言各有所長,真的難分優(yōu)劣。開發(fā)人員應(yīng)該根據(jù)客觀條件,選擇自己熟悉的方法和語言,才能保證合格的質(zhì)量與生產(chǎn)率。
程序設(shè)計是自由與快樂的事情,不要發(fā)誓忠于某某主義而自尋煩惱。
爭議之三:編程時是否應(yīng)該多使用技巧?
作者觀點:就軟件開發(fā)而言,技巧的優(yōu)點在于能另辟蹊徑地解決一些問題,缺點是技巧并不為人熟知。若在程序中用太多的技巧,可能會留下隱患,別人也難以理解程序。鑒于一個局部的優(yōu)點對整個系統(tǒng)而言是微不足道的,而一個錯誤則可能是致命的。作者建議用自然的方式編程,少用技巧。
《狼三則》的故事告訴我們“失敗的技巧通常是技倆”。當我們在編程時無法判斷是用了技巧還是用了技倆,那就少用?!顿u油翁》的故事又告訴我們“熟能生巧”,表明技巧是自然而然產(chǎn)生的,而不是賣弄出來的。賣油翁的絕技是可到中央電視臺表演的,而他老人家卻謙虛地說:“沒啥沒啥,用熟了而已”。
爭議之四:軟件中的錯誤是否可按嚴重程度分等級?
作者觀點:在定量分析時,可以將錯誤分等級,以便于管理。微軟的一些開發(fā)小組將錯誤分成四個等級 [Cusumano 1996],如表1.1所示。
一級嚴重:錯誤導(dǎo)致軟件崩潰。
二級嚴重:錯誤導(dǎo)致一個特性不能運行并且沒有替代方案。
三級嚴重:錯誤導(dǎo)致一個特性不能運行但有替代方案。
四級嚴重:錯誤是表面化的或是微小的。
表1.1 錯誤的四個等級
上述分類是非常技術(shù)性的,并不是普適的。假設(shè)某個財務(wù)軟件有兩個錯誤:錯誤A使該軟件死掉,錯誤B導(dǎo)致工資計算錯誤。按表1.1分類,錯誤A屬一級嚴重,錯誤B屬二級嚴重。但事實上B要比A嚴重。工資算多了或者算少了,將會使老板或員工遭受經(jīng)濟損失。而錯誤A只使操作員感到厭煩,并沒有造成經(jīng)濟損失。另一個示例是操作手冊寫錯,按表1.1分類則屬四級嚴重,但這種錯誤可能導(dǎo)致機毀人亡。
開發(fā)人員應(yīng)該意識到:所有的錯誤都是嚴重的,不存在微不足道的錯誤。這樣才能少犯錯誤。
2.5小 結(jié)
軟件工程學科發(fā)展到今天,已經(jīng)有了很多方法和規(guī)范,學之不盡。本章只在宏觀上討論了軟件工程的一些
思想,更具體的內(nèi)容將在后面的章節(jié)論述。無論是什么好方法,貴在理解與靈活運用,而不可當成靈丹妙藥,不象“吃了腦黃金或腦白金,就能使一億人先聰明起來”。
3程序員與程序經(jīng)理
工作在第一線的軟件開發(fā)人員是程序員和程序經(jīng)理,他們決定著軟件的命運。良好的程序員隊伍和出色的管理是軟件項目成功的必要條件。管理不是管制,不是去卡住人家的脖子,因為程序員不是一群野鴨子。管理的目的是讓大家一起把工作做好,并且讓各人獲得各自的快樂和滿足。當一個組織被出色地領(lǐng)導(dǎo)時,雇員甚至不知道他們已被領(lǐng)導(dǎo)。在項目完成時,他們會自豪地說:“看看我們通過努力取得的成績吧”。所以管理者不能老惦記著自己是一個官,而應(yīng)時刻意識到自己是責任的主要承擔者。
我們經(jīng)常會聽到有經(jīng)理頭銜的人在高談闊論:“編程我不會,做個項目還不easy?派個人去搞系統(tǒng)分析,回頭再叫幾個程序員把需求譯成程序,不就OK了嗎?”
不懂英語的人準以為easy和OK是貶義詞。要讓軟件項目失敗很容易,只要符合下列條件之一即可:
(1)項目經(jīng)理對軟件一無所知;
(2)技術(shù)負責人對編程不感興趣;
(3)真真編寫代碼的程序員是臨時雇用的。
如果上述三個條件同時具備,就請放心失敗好了。
讓我們少幻想自己是比爾·蓋茨,先當好程序員和程序經(jīng)理再說。
3.1了解程序員
早期的程序員干活能從軟件直通硬件,個個生猛無比。又因他們的作息時間、言行舉止與常人不太一樣,久而久之就給人們留下了“神秘”、“孤僻”的印象。如今軟件行業(yè)被炒得熱火朝天,有能耐的程序員即便躲在大山岙的軍工廠里也能被挖出來。而更多原本不是程序員的人操起幾本“速成”、“二十一天通”等書籍也加入了這個行業(yè)。現(xiàn)在國內(nèi)號稱有上百萬程序員,這支大軍魚龍混雜,已搞不清那些是正規(guī)軍,那些是民兵游擊隊了。