?
軟?件?工?程?筆?記
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
第一章?
2?一個軟件產品必須由一個完整的配置組成,軟件配置主要包括:程序,數據及相關文檔。程序是能夠完成預定功能和性能的可執行的指令序列;數據是使程序能夠適當的處理信息的數據結構;文檔是開發使用和維護程序所需要的圖文資料。
2?軟件危機的定義:軟件危機是指在計算機軟件開發、使用、維護過程中遇到的一系列嚴重問題和難題。它包括兩方面:1.如何開發軟件以滿足對軟件日益增長的要求 2.如何維護數量不斷膨脹的已有軟件
2?軟件危機的具體表現:1. 對軟件開發成本和進度的估計往往很不準確
2.?用戶對“已完成”的軟件系統不滿意的現象經常發生
3.?軟件產品的質量往往靠不住
4.?軟件常常是不可維護的
5.?軟件通常沒有是適當的文檔資料
6.?軟件成本在計算機系統總成本中所占的比例逐年上升
7.?軟件開發生產率提高的速度往往跟不上計算機應用迅速普及的深入的速度
2?軟件危機出現的原因:1. 來自軟件自身的特點。是邏輯部件缺乏可見性;規
????????????????????????模龐復雜,修改維護困難
2.?軟件開發與維護的方法不當。忽視需求分析;認為軟件開發等于程序編寫;輕視軟件維護
3.?供求矛盾將是一個永恒的主題。面對日益增長的軟件需求,人們顯得力不從心
2?軟件工程的定義:軟件工程是指導計算機軟件開發和維護的一門工程學科。采用工程的概念、原理。、技術和方法來開發和維護軟件,把經過時間考驗而證明正確的管理技術和當前能夠的到的最好的技術方法結合起來,以經濟的開發出高質量的軟件并有效的維護它,這就是軟件工程。
2?IEEE對軟件工程的定義:軟件工程是1把系統的,規范的,可度量的途徑應用于軟件開發、運行和維護過程,也就是把工程應用于軟件;2研究1中所提到的途徑。
2?軟件工程的本質特征:1. 軟件工程關注于大型程序的構造
2.?軟件工程的中心課題是控制復雜度
3.?軟件經常變化
4.?開發軟件的效率非常重要
5.?和諧的合作是開發軟件的關鍵
6.?軟件必須有效的支持他的用戶
7.?在軟件工程領域中通常由具有一種文化背景的人替具有另一種文化背景的人創造產品
2?消除軟件危機的途徑:1. 對計算機軟件有一個正確的認識(軟件!=程序)
2.?必須充分認識到軟件開發不是某種個體勞動的神秘技巧,而應該是一種組織良好、結構嚴密、各類人員協同配合、共同完成的工程項目
3.?推廣使用在實踐中總結出來的開發軟件的成功技術和方法
4.?開發和使用良好的軟件工具
2?軟件工程的基本原理:1. 用分階段的生命周期計劃嚴格管理
2.?堅持進行階段評審
3.?實行嚴格的產品控制
4.?采用現代程序設計技術
5.?結果應該清楚的審查
6.?開發小組的人員應該少而精
7.?承認不斷改進軟件工程實踐的必要性
2?軟件工程包括(管理)和(技術)兩方面的內容
2?軟件工程方法學定義:通常把在軟件生命周期全過程中使用的一整套技術方法的集合稱為軟件工程方法學。
2?軟件工程方法學包含三個因素:方法、工具和過程
2?軟件工程方法學分為傳統方法學(生命周期方法學或結構化范型)和面向對象方法學(面向對象范型)
2?面向對象范型的要點:1. 把對象作為融合了數據及在數據上的操作行為的統
???????????????????????一的軟件構件
2.?把所有的對象都劃分成類
3.?按照父類(或稱為基類)與子類(或稱為派生類)的關系把若干個相關類組成一個層次結構的系統(也稱為類等級)
4.?對象彼此間僅能通過發送消息互相聯系
2?結構化范型的優點:把軟件生命周期劃分為若干個階段,每個階段的任務相對獨立,而且比較簡單,便于不同人員的分工協作,從而降低了整個軟件開發過程的困難程度
2?結構化范型的缺點:當軟件規模龐大時,或者對軟件的需求是模糊的或會因為時間而變化時,開發出的軟件往往不成功,而且維護起來依然很困難
2?面向對象范型的優點:降低了軟件產品的復雜性,提高了軟件的可理解性,簡化了軟件的開發和維護工作,促進了軟件重用
2?軟件工程與軟件工程方法學有何關系:軟件工程是為了開發出高質量的軟件產品所需完成的一系列任務的框架,他規定了完成各項任務的工作步驟。而后者,通常把在軟件生命周期全過程中使用的一整套技術方法的集合稱為方法學,也稱范型。 ?軟件工程是軟件工程方法學的三個重要組成部分之一。
2?什么是軟件生命周期模型:軟件生命周期模型是跨越整個生存期的系統開發、運作和維護所實施的全部過程、活動和任務的結構框架。
2?軟件生命周期模型由:軟件定義(問題定義,可行性研究,需求分析);軟件開發(總體設計,詳細設計,編碼與單元設計,綜合測試);運行維護
2?軟件定義階段要回答的關鍵問題是“要解決的問題是什么”可行性研究階段要回答的關鍵問題是“對于上一個階段所確定的問題有行得通的解決辦法嗎”需求分析階段的任務仍不是解決問題而是準確的確定“為了解決這個問題,目標系統必須做什么”總體設計階段回答的關鍵問題是“概括的說應該怎樣實現目標系統”詳細設計階段把解法具體化回答“應該怎樣具體的實現這個系統呢”編碼和單元測試的關鍵任務時寫出正確的容易理解、容易維護的程序模塊綜合測試的關鍵任務是通過各種類型的測試(及相應的調試)使軟件達到預定的要求
2?運行維護的實質(對比可行性研究實質):一次壓縮和簡化了的定義和開發過程。維護時期不在進一步劃分階段
2?瀑布模型的優點:它提供了一個模板,這個模板使得分析、設計、編碼、測試和支持的方法可以在該模板下有一個共同的指導。雖然有不少缺陷,但比在軟件開發過程中隨意的狀態要好的多
2?瀑布模型的缺點:1. 實際的項目大部分情況難以按照該模型給出的順序執行
???????????????????,而且這種模型的迭代是間接的,這很容易由微小的變化
???????????????????而造成大的混亂
2.?經常情況下客戶難以表達真正的需求,而這種模型卻要求如此,這種模型是不歡迎二義性存在的
3.?客戶要等到開發的晚期才能看到程序運行的測試版本,而在這是發現大的錯誤時,可能引起客戶的驚慌,而后果也可能是災難性的
2?瀑布模型的特點:1. 階段間具有順序性與依賴性
2.?推遲實現的觀點
3.?質量保證的觀點(1>每個階段都必須完成規定的文檔2每個階段結束前都應該對所完成的文檔進行評審,以便盡早發現問題,改正錯誤)
2?快速原型模型優點:使用戶能夠感受到實際的系統,使開發者能夠快速的構造出系統的框架
2?快速原型模型的缺點:產品的先天性不足,因為開發者常常需要做實現上的折中,可能采用不合適的操作系統或程序設計語言,以使原型能夠盡快工作
2?增量模型的優點:1. 人員分配靈活,剛開始不用投入大量的人力資源,當核
????????????????????心產品很受歡迎時,可增加人力實現下一個增量
2.?當配備的人員不能在設定的期限內完成產品時,他提供了一種先推出核心產品的途徑,這樣就可以先發布部分功能給客戶,對客戶起到鎮定劑的作用。
2?增量模型的缺點:自始至終開發者和客戶糾纏在一起,知道完全版本出來,適用于軟件需求不明確,設計方案有一定風險的軟件項目
2?增量模型最佳分解的方法因軟件產品特點和開發人員的習慣而異。分解時唯一必須遵守的約束條件是,當把新構件集成到現有軟件中時,所形成的產品必須是可測試的
2?螺旋模型的基本思想:使用原型及其他方法來盡量降低風險
2?螺旋模型的優點:對于大型系統及軟件的開發,這種模型是一個很好的方法,開發者和客戶能夠較好的對待和理解每一個演化級別上的風險
2?螺旋模型的缺點:1 需要相當的風險分析評估的專門技術,且成功依賴于這
???????????????????種技術。
2 很明顯,一個大的沒有被發現的風險問題將會導致問題的發生,可能導致演化的方法失去控制
3 這種模型相對比較新,應用不廣泛,其功效需要進一步驗證
????適用于內部開發的大規模軟件項目
2?需求分析階段應該用正式的文檔準確地記錄對目標系統的需求,這份文檔通常稱為“規格說明書”
2?螺旋模型=瀑布模型+增量模型
2?螺旋模型由風險驅動
2?為什么說噴泉模型較好的體現了面向對象軟件開發過程無縫和迭代的特性?
因為使用面向對象方法學開發軟件時,各個階段都使用統一的概念和表示符號,因此,整個開發過程都是吻合一致的,或者說是無縫連接的,這自然就很容易實現各個開發步驟的反復多次迭代,達到認識的逐步深化,而噴泉模型則很好的體現了面向對象軟件開發過程迭代和無縫的特性。
2?Rational統一過程的優點:提高團隊生產力,在迭代的開發過程、需求管理、基于組件的體系結構、可視化軟件建模、驗證軟件質量及控制軟件變更等方面,針對所有關鍵的開發活動為每個開發成員提供了必要的準則。模板和工具指導,并確保全體成員共享相同的知識基礎。他建立了簡潔和清晰的過程結構,為開發過程提供較大的通用性。
2?Rational統一過程的缺點:RUP只是一個開發過程,并沒有涵蓋軟件過程的全部內容,例如它缺少關于軟件運行和支持等方面的內容,此外,他沒有支持多項目的開發結構,這在一定程度上降低了在開發組織內大范圍實現重用的可能性。
2?Rational統一過程主要適用于“大型的需求不斷變化的復雜軟件系統項目”
2?敏捷過程適用于“商業競爭環境下對小型項目提出的有限資源和有限開發時間的約束”
2?微軟過程適用于“商業環境下具有有限資源和有限開發時間約束的項目的軟件過程模式”
第二章
v?可行性研究的必要性(原因):開發一個軟件時,需要判斷原定的系統模型和目標是否實現,系統完成后所能帶來的效益是否大到值得開發投資這個系統的程度,如果做不到這些,那么花費在這個工程上的任何時間、人力、軟硬件資源和經費都是無謂的浪費。可行新研究的實質是在較高層次上以較抽象的方式進行的系統分析和設計的過程,可行性研究的目的是用最小的代價在盡可能短的時間內確定問題是否能夠解決。
v?可行性研究的目的:用最小的代價在盡可能短的時間內確定問題是否能夠解決。
v?可行性研究的目的(不是)解決問題
v?可行性研究的實質:進行一次大大壓縮簡化了的系統分析與設計的過程,也就是在較高層次上以較抽象的方式進行的系統分析和設計的過程。
v?可行性研究的內容:1. 技術可行性(對要開發項目的功能、性能和限制條件進行分析,確定在現有的資源條件下,技術風險有多大,項目能否實現)
2.?經濟可行性(進行開發成本的估算以及了解取得效益的評估,確定要開發的項目是否值得投資開發)
3.?操作可行性(系統的操作方式在這個用戶組織內是否行得通)
4.?社會可行性
5.?社會效益
6.?法律
v?可行性研究的任務:對以后的行動方針提出建議。
v?可行性研究時間的長短取決于(工程的規模)
v?可行性研究的成本是預計的工程總成本的(5%~10%)
v?可行性研究的過程:1. 復查系統規模與目標(確保分析員正在解決的問題時要求他
????????????????????????解決的問題)
2.?研究正在使用的系統
3.?導出新系統的高層邏輯模型
4.?進一步定義問題(根據邏輯模型 與用戶一起發現和改正錯誤)
前四步構成了一個循環
5.?導出和評價供選擇的解法
6.?推薦行動方針
7.?草擬開發計劃(給出需求分析階段的進度表)
8.?書寫文檔提交審查
v?邏輯模型包括:數據流圖和數據字典
v?(擬定開發計劃)階段擬定需求分析進度表
系統流程圖
v?數據流圖(DFD)是一種圖形化技術,他描述信息流和數據從輸入移動到輸出的過程中經受的變化
v?設計數據流圖時只需要考慮系統必須完成的基本邏輯功能
v?數據流圖中應該描繪出(所有可能的數據流向),而(不應該)描繪出現某個數據流的條件
v?數據流圖中忽略出錯處理
v?星號(*)表示“與”的關系 ?加號(+)表示“或”的關系 ?圓圈加表示互斥的關系
v?數據流圖有四個成分:源點或終點 ?處理 數據存儲 ?數據流
v?數據流圖命名是先為(數據流)命名再為(處理)命名 如果對數據流命名是遇到了困難 可能是對數據流圖分解的不恰當
v?數據流圖中的處理應不超過(9)個 ?超過時就不易理解 應分層或畫分圖
v?數據流圖的作用:1. 交流信息的工具。分析員把他對現有系統或對目標系統的設想用數據流圖描繪出來,供有關人員審查確認
2.?作為分析和設計的工具
?
v?數據字典定義:數據字典是關于數據的信息的集合,也就是對數據流圖中包含的所有元素的定義的集合
v?數據字典的作用:作為分析階段的工具,在軟件分析和設計的過程中給人提供關于數據的描述的信息
v?邏輯模型包括:數據流圖 ?數據字典
v?數據字典的內容:1.數據流 2.數據流分量 3.數據存儲 4.處理(對比數據流圖四成分)
v?數據字典主要由對數據的定義組成,因為對數據的處理用其他工具(IPO圖或PDL)描述更方便
v?數據字典中對數據的定義主要包括:一般信息,定義,使用特點,控制信息,分組信息
v?數據字典中數據定義的實質是:對數據進行一次自頂向下的分解
v?數據元素組成數據的方式有四種:順序 ?重復 ?選擇 ?可選
v?= ?等價于/定義為
v?+ ?和/連接兩個分量
v?[ ?] ?選擇一個 ?通常用‘|’隔開供選擇的分量
v?{ ?} ?重復 重復花括號內的分量 ?有上下界 表示重復次數的上下界
v?( ?) ?可選 即圓括號內的分量可有可無
v?成本效益分析的目的是:從經濟角度分析開發一個新系統是否劃算,從而幫助客戶組織的負責人正解的做出是否投資于這項開發工程的決定
v?成本估計技術:代碼行技術 ?任務分解技術 ?自動估計成本技術
v?數據流圖與數據字典的關系:數據流圖與數據字典共同構成系統的邏輯模型,沒有數據字典,數據流圖就不嚴格,沒有數據流圖,數據字典也難以發揮作用
第三章
ü?需求分析的目的/意義/必要性:為了開發出真正滿足用戶需求的軟件產品,首先必須知道用戶的需求。對軟件需求的深入理解是軟件開發工作獲得成功的前提條件,不論我們把設計和編碼工作做得如何出色,不能真正滿足用戶需求的程序只會令用戶失望,給開發者帶來煩惱。
ü?需求分析的任務:確定對系統的綜合要求: 1. 功能需求
2.?性能需求
3.?可靠性和可用性需求
4.?出錯處理需求
5.?接口需求
6.?約束
7.?逆向需求
8.?將來可能提出的要求
分析系統的數據要求(分析系統的數據結構,圖形工具描
述數據結構[層次方框圖和Warnier圖],數據結構規范化)
導出系統的邏輯模型(數據流圖,實體聯系圖,狀態轉換
圖,數據字典和主要的處理算法描述)
修正系統開發計劃
ü?與用戶溝通獲取真實需求的的方式:1. 訪談
2.?面向數據流自頂向下求精
3.?簡易的應用規格說明技術
4.?快速建立軟件原型
ü?需求分許是軟件定義的最后一個階段,他的主要任務時準確回答“系統必須做什么”這個問題,不是確定系統怎樣完成他的工作
ü?需求分析結束之前應出具軟件需求規格說明書,書面形式準確描述軟件的需求
ü?需求分析方法準則:1. 必須理解并描述問題的信息域,根據這條準則應該建
???????????????????????立數據模型
2.?必須定義軟件應完成的功能,這條準則要求建立功能模型
3.?必須描述作為外部事件結果的軟件行為,這條準則要求建立行為模型
4.?必須對描述信息、功能、行為的模型進行分解,用層次的方式展示細節
ü?出錯處理的定義:在某些情況下,出錯處理指的是當應用系統發現它自己犯下一個錯誤時所采取的行動。有時也指系統對環境錯誤的響應
ü?對應用系統本身的檢測應該僅限于系統的關鍵部分,并且應該盡可能的少
ü?接口需求定義:描述應用程序與它的環境通信的格式
ü?環境:即使用該系統的外界因素
ü?約束:設計約束或實現約束描述在設計或實現應用系統是應遵守的限制條件
ü?情景分析:情景分析就是對用戶將來使用目標系統解決某個具體問題的方法和結果進行進行分析
ü?情景分析的用處(好處,意義):1. 他能在某種程度上演示目標系統的行為,
????????????????????????????????從而便于用戶理解,而且還可能進一步揭示
????????????????????????????????出一些分析員目前還不知道的需求
2.?由于情景分析較易為用戶所理解,使用這種技術能保證用戶在需求分析過程中始終扮演一個積極主動的角色
ü?分析系統的數據要求通常采用建立數據模型的方式
ü?輔助描述數據結構,常用的圖形工具有層次方框圖和Warnier圖
ü?需求分析的目標之一就是把數據流和數據存儲定義到元素級
ü?IPO圖簡明的描述了算法
ü?通過功能分解可以完成對數據流圖的細化
ü?簡易的需求規格說明技術是一個面向團隊的需求收集法
ü?簡明的需求規格說明技術的優點是:開發者和用戶不分彼此,齊心協力,密切合作,計時討論并求精,有能導出規格說明的具體步驟
ü?快速建立軟件原型是最有效最強大的需求分析技術
ü?快速原型的定義:快速原型就是快速建立起來的旨在演示目標系統主要功能的可運行的程序
ü?快速原型的特點:1. 快速
????????????????????2 容易修改
ü?建立快速原型的目的:盡快向用戶提供一個可在計算機上運行的目標系統的模型,以便使用戶和開發者在目標系統應該“做什么”這個問題上盡可能快的達成共識
ü?快速的構建和修改原型通常使用下述3種方法和工具:
1. 第四代技術
???????????????????2 可重用的軟件構件
???????????????????3 形式化規格說明和原型環境
?????????????????????(形式化說明技術第四章講)
ü?模型的定義:為了理解事物而對事物做出的一種抽象,是對事物的一種無歧義的書面描述。通常,模型由一組圖形符號和組織這些符號的規則組成
ü?需求分析階段應該建立三種模型:根據需求分析方法準則
1.?數據模型(實體聯系模型)
2.?功能模型(數據流圖)
3.?行為模型(狀態圖即狀態轉換圖)
ü?形式化方法的必要性:1. 為了消除用自然語言書寫的軟件規格說明書中可能
???????????????????????存在的不一致性、歧義、含糊、不完整及抽象層次混
???????????????????????亂等問題。
???????????????????????2 在需求驗證階段,對于規模龐大的系統,方便人工
審查需求一致性
ü?數據對象是:對軟件必須理解的復合信息的抽象,僅有單個值的事物不是數據對象
ü?復合信息:具有一系列不同性質或屬性的事物
ü?數據對象只封裝了數據而沒有對施加于數據上的操作的引用。區別于面向對象范型是將數據與操作封裝在一起
ü?ER圖中包含了“實體,關系和屬性”3種基本成分。矩形框代表實體,圓弧矩形代表屬性
ü?ER模型的優點:1. ER模型比較接近人的習慣思維方式
??????????????????2 ER模型使用簡單的圖形符號表達系統分析員對問題域的
????????????????????理解,不熟悉計算機技術的用戶也能理解它
??????????????????3 ER模型可以作為用戶與分析員之間有效的交流工具
ü?數據規范化的目的:減少數據冗余,避免出現插入異常或刪除異常,簡化修改數據的過程
ü?范式級別越高隨之而來的一些列問題:1. 存儲同樣的數據就需要分解成更多
???????????????????????????????????????的表,因此“存儲自身”的過程也
???????????????????????????????????????就越復雜
?????2 數據的存儲結構與基于問題域的結
???????構件間的匹配程度也隨之下降,因
???????此需求變化時數據源的穩定性較差
?????3 范式級別提高需要訪問的表增多,因此性能將下降
ü?實用角度來看大多數場合實用第三范式
ü?狀態轉換圖的定義:狀態轉換圖(簡稱狀態圖)通過描繪系統的狀態及引起系統狀態轉換的事件,來表示系統的行為。此外,狀態圖還指明了作為特定事件的結果系統將做哪些動作
ü?狀態:狀態是任何可以被觀察到的系統行為模式,一個狀態代表系統的一種行為模式
ü?事件:在某個特定時刻發生的事情,他是引起系統做動作或從一個狀態轉換到另一個狀態的外界事物的抽象,簡言之就是引起系統做動作或裝換狀態的控制信息
ü?狀態圖三部分,上面是狀態的名稱,中間是狀態變量的名字和值,下面是活動表
ü?Warnier圖與層次方框圖的區別:前者可以指出一類信息或一個信息元素是重復出現的,也可以表示特定信息在某一類信息中是有條件的出現的。
ü?IPO圖的好處:方便的描述輸入數據,對數據的處理和輸出數據之間的關系;軟件設計階段可以進一步補充修正這些圖,作為設計階段的文檔
ü?軟件需求驗證的四方面:1 一致性。所有需求必須是一致的,任何一條需求
??????????????????????????????????不能和其他需求相互矛盾
?????????????????????????2 完整性。需求必須是完整的,需求規格說明是必須包含用戶需要的每一個功能
?????????????????????????3 現實性。制定的需求必須是在現有的硬件技術和軟件技術基本上可以實現的
?????????????????????????4 有效性。必須證明需求是正確有效的,確實能解決用戶面對的問題
ü?需求驗證的方法:1 一致性。人工技術審查
???????????????????2 現實性。仿真或性能模擬技術
???????????????????3 完整性和有效性。請用戶試用(成本高);使用原型系統
ü?需求分析軟件工具的要求:1. 必須有形式化的語法或表
???????????????????????????2 使用這個軟件工具能夠導出詳細的文檔
???????????????????????????3 必須提供分析(測試)規格說明書的不一致性
????????????????????????????性和冗余性的手段,并且能夠產生一組報告指明
????????????????????????????對完整性分析的結果
???????????????????????????4 能夠改進通信狀況
ü?FSL/PSA系統的主要優點:它改進了文檔質量,能保證文檔具有完整性、一致性和無二義性,從而可以減少管理和維護的費用。數據存放在數據庫中。便于增加、刪除和更改,這也是他的一個優點。
第五章
2?總體設計的必要性:可以站在全局高度上,花較少成本,從較抽象的層次上分析對比多種可能的系統實現方案和軟件結構,從中選出最佳方案和最合理的軟件結構,從而用較低成本開發出較高質量的軟件系統。
2?總體設計的過程:(主要由兩個階段組成:系統設計階段,確定系統的具體實現方案;
????????????????????結構設計階段,確定軟件結構)
1.?設想供選擇的方案(從數據流圖出發)
2.?選取合理的方案(低成本,中成本,高成本)(對于每一種方案應準備系統流程圖,組成系統的物理元素清單,成本效益分析,實現這個系統的進度計劃)
3.?推薦最佳方案(第一階段至此完成)
4.?功能分解
5.?設計軟件結構
6.?設計數據庫
7.?制定測試計劃
8.?書寫文檔(系統說明、用戶手冊、測試計劃、詳細的實現計劃、數據庫設計結果)
9.?審查和復查
2?軟件設計過程中應該遵循的基本原理:1. 模塊化。模塊是由邊界元素限定的相鄰程序
??????????????????????????????????????元素(例如,數據說明,可執行的語句)的序列,而且有一個總體標識符代表它。模塊是構成程序的基本構件。模塊化就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構成一個整體,可以完成指定的功能滿足用戶的需求
2.?抽象。抽象出事物的本質特征而暫時不考慮他們的細節,一個復雜的動態系統首先可以用一些高級的抽象概念構造和理解,這些高級的概念又可以用一些低級的概念構造和理解。
3.?逐步求精。為了能集中精力解決主要問題而盡量推遲對問題細節的考慮。事實上可以把逐步求精看作是一項把一個時期內必須解決的種種問題按優先級排序的技術
4.?信息隱藏和局部化。所謂局部化是指把一些關系密切的軟件元素物理的放的彼此靠近。所謂隱藏不是隱藏關于模塊的一切信息而是模塊的實現細節
5.?模塊獨立開發具有獨立功能而且和其他模塊之間沒有過多的交互作用的模塊就可以做到模塊獨立
2?模塊化的優點:1. 可以使軟件結構清晰,不僅容易設計也容易閱讀和理解 2. 使軟件容易測試和調試,因而有助于提高軟件的可靠性 3. 能夠提高軟件的可修改性 4. 有助于軟件開發工程的組織管理
2?抽象與求精的聯系與區別:抽象與求精是一對互補的概念。抽象使得設計者能夠說明過程和數據,同時卻忽略了底層細節。事實上可以把抽象看做是一種通過忽略多余的細節同時強調有關的細節而實現逐步求精的方法。求精則幫助設計者在設計過程中揭示出底層細節。
2?模塊獨立的好處(重要性):第一,有效的模塊化(即具有獨立的模塊)的軟件比較容易開發出來。這是由于能夠分割功能而且接口可以簡化,當許多人分工合作開發同一個軟件時,這個優點尤其重要。第二,獨立的模塊比較容易測試和維護。這是因為相對說來,修改設計和程序需要的工作量比較小,錯誤傳播范圍小,需要擴充功能時能夠“插入”模塊。
2?耦合和內聚的區別與聯系:是模塊獨立程度的兩個標準度量。耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度;內聚衡量一個模塊內部各個元素彼此結合的緊密程度。內聚和耦合是緊密相關的,模塊內的高內聚往往意味著模塊間的松耦合
2?設計時應該力求做到低耦合和高內聚
2?耦合的概念:耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度。
2?數據耦合:兩個模塊彼此間通過參數交換信息而且交換的信息僅僅是數據
2?控制耦合:兩個模塊間傳遞的信息中有控制信息出現時,這種耦合稱為控制耦合
2?控制耦合一般可以通過適當分解用數據耦合代替它
2?特征耦合:當把整個數據結構作為參數傳遞而被調用的模塊只需要使用其中一部分數據元素時,就出現了特征耦合
2?公共環境耦合:當兩個或多個模塊通過一個公共數據環境相互作用時,他們之間的耦合稱為公共環境耦合
2?內容耦合:一個模塊可以直接調用另一模塊中的數據,或者允許一個模塊直接轉移到另一個模塊中去。
2?耦合的使用原則:盡量使用數據耦合,少用控制耦合和特征耦合,限制公共環境耦合的范圍,完全不用內容耦合
2?內聚的概念:內聚衡量一個模塊內部各個元素彼此結合的緊密程度,它是信息隱藏和局部化概念的自然擴展。
2?偶然內聚:一個模塊完成一組任務,這些任務間彼此即使有關系,關系也是很松散的,就叫做偶然內聚。(低內聚) ?出現錯誤的概率最高
2?如果一個模塊完成的任務在邏輯上屬于相同或相似的一類,則稱為邏輯內聚(低內聚)。 修改較困難
2?時間內聚:一個模塊包含的任務必須在同一段時間內執行(低內聚)
2?過程內聚:一個模塊內的處理元素是相關的,而且必須以特定次序執行,則稱為過程內聚(中內聚)
2?通信內聚:模塊中所有元素都使用同一個輸入數據和產生同一個輸出數據,則稱為通信內聚(中內聚)
2?順序內聚:一個模塊內的處理元素和同一個功能密切相關,而且這些處理必須順序執行,則稱為順序內聚。(高內聚)
2?功能內聚:模塊內所有處理元素屬于一個整體,完成一個單一功能,則稱為功能內聚(最高程度的內聚)
2?軟件設計的啟發式規則:1. 改進軟件結構提高模塊獨立性
2.?模塊規模應該適中
3.?深度、寬度、扇出和扇入都應適應
4.?模塊的作用域應該在控制域之內
5.?力爭降低模塊接口的復雜程度
6.?設計單入口單出口的模塊
7.?模塊功能應該可以預測
2?一個設計的好的點醒系統的平均扇出應該是3~4 ?上限應該是5~9
2?啟發式規則只是經驗之談,既不是總體設計的目標也不是應該遵循的普遍原理
2?在結構圖中,箭頭表示傳遞的信息,尾部是空心圓表示傳遞的是數據,實心圓表示傳遞的是控制信息
2?面向數據流的設計方法的目標是給出設計軟件結構的一個系統化的途徑
2?面向數據流的設計方法:把信息流映射成軟件結構,信息流的類型決定了映射的方法
2?變換流:信息沿輸入通路進入系統,同時由外部形勢變換成內部形勢,進入系統的信息通過變換中心,經加工處理之后再沿輸出通路變換成外部形勢離開軟件系統
2?事務流完成的任務:1. 接收輸入數據(輸入數據又稱為事務)
2.?分析每個事務以確定它的類型
3.?根據事務類型選取一條活動通路
2?變換分析的步驟:(把具有變換流特點的數據流圖按預先確定的模式映射成軟件結構)
1. 復查基本數據模型
2.?復查并精化數據流圖
3.?確定數據流圖具有變換特性還是事務特性
4.?確定輸入流和輸出流的邊界,從而孤立出變換中心
5.?完成第一級分解
6.?完成第二級分解
7.?使用設計度量和啟發式規則對第一次分割得到的軟件結構進一步精化
?
2?變換分析與事務分析的選擇:如果數據流不具有顯著的事務特點,最好使用變換分析;反之,如果具有明顯的事務中心,則應該采用事務分析技術。但是,機械地遵循變換分析或事務分析的映射規則,很可能會得到一些不必要的控制模塊,如果它們確實用處不大,那么可以而且應該把它們合并。反之,如果一個控制模塊功能過分復雜,則應該分解為兩個或多個控制模塊,或者增加中間層次的控制模塊。
第六章
v?詳細設計階段的任務:定應該怎樣具體地實現所要求的系統,也就是說,經過這個階段的設計工作,應該得出對目標系統的精確描述,從而在編碼階段可以把這個描述直接翻譯成用某種程序設計語言書寫的程序。
v?衡量程序的質量不僅要看他的邏輯是否正確,性能是否滿足要求,更主要的是看他是否容易閱讀和理解(結構程序設計技術)
v?只用三種基本的控制結構就可以實現任何單入口單出口的程序(順序)(選擇)(循環)
v?結構程序設計的定義:結構程序設計是盡可能少用GO TO語句的程序設計方法。最好僅在檢測出錯誤時才使用GO TO語句,而且應該總是使用前向GO TO語句。
v?經典的結構程序設計:順序、選擇、循環
擴展的結構程序設計:并且允許do-case、do-until
修正的結構程序設計:并且允許leave、break
v?人機界面設計遇到的問題:1. 系統響應時間
2.?用戶幫助設施
3.?出錯信息處理
4.?命令交互
v?響應時間:從用戶完成某個控制動作到軟件給出某個預期的響應之間的這段時間
v?響應時間的兩個基本屬性:長度和易變性
v?過程設計工具可以分為(圖像)(表格)(語言)
v?程序流程圖的主要缺點:1. 程序流程圖本質上不是逐步求精的好工具,它誘使程序員
??????????????????????過早地考慮程序的控制流程,而不去考慮程序的全局結構。
2.?程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結構程序設計的精神,隨意轉移控制。
3.?程序流程圖不易表示數據結構。
v?盒圖的特點:1. 功能域(即一個特定控制結構的作用域)明確,可以從盒圖上一眼就看出
??????????????????來
2.?不可能任意轉移控制
3.?很容易確定局部和全程數據的作用域
4.?很容易表現嵌套關系,也可以表示模塊的層次結構
v?PAD圖的優點:1. 使用表示結構化控制結構的PAD符號所設計出來的程序必然是結構
???????????????????化程序。
2.?PAD圖所描繪的程序結構十分清晰。圖中最左面的豎線是程序的主線,即第一層結構。隨著程序層次的增加,PAD圖逐漸向右延伸,每增加一個層次,圖形向右擴展一條豎線。PAD圖中豎線的總條數就是程序的層次數。
3.?用PAD圖表現程序邏輯,易讀、易懂、易記。PAD圖是二維樹形結構的圖形,程序從圖中最左豎線上端的結點開始執行,自上而下,從左向右順序執行,遍歷所有結點。
4.?容易將PAD圖轉換成高級語言源程序,這種轉換可用軟件工具自動完成,從而可省去人工編碼的工作,有利于提高軟件可靠性和軟件生產率。
v?判定表的優點:清晰的表示復雜的條件組合與應做的動作之間的對應關系
v?判定表的缺點:不適合作為一種通用的設計工具,沒有一種簡單的方法使它能同時清晰的表示順序和重復等處理特性
v?以上為圖或表的形式來描述過程設計,語言描述過程設計的是“過程設計語言”
v?過程設計語言(PDL)的特點:1. 關鍵字的固定語法,它提供了結構化控制結構、數據
???????????????????????????????說明和模塊化的特點。
2.?自然語言的自由語法,它描述處理特點。
3.?數據說明的手段。應該既包括簡單的數據結構(例如純量和數組),又包括復雜的數據結構(例如,鏈表或層次的數據結構)。
4.?模塊定義和調用的技術,應該提供各種接口描述模式。
v?過程設計語言的優點:1. 可以作為注釋直接插在源程序中間。這樣做能促使維護人員
在修改程序代碼的同時也相應地修改PDL注釋,因此有助于保持
文檔和程序的一致性,提高了文檔的質量。
2.?可以使用普通的正文編輯程序或文字處理系統,很方便地完
????????????????????????成PDL的書寫和編輯工作。
3.?已經有自動處理程序存在,而且可以自動由PDL生成程序代
????????????????????????碼。
v?PDL的缺點是不如圖形工具形象直觀,描述復雜的條件組合與動作間的對應關系時,不如判定表清晰簡單。
v?面向數據結構設計方法的最終目標是得出對程序處理過程的描述
v?Jackson圖(面向數據結構的設計方法)(選擇)(順序)(循環)
v?Jackson程序設計方法的步驟:1. 分析并確定輸入數據與輸出數據的邏輯結構,并用Jackson圖描繪這些數據結構2. 找出輸入數據結構與輸出數據結構中有對應關系的數據單元3. 從描繪數據結構的Jackson圖導出描繪程序結構的Jackson圖4. 列出所有操作和條件,并且把他們分配到程序結構圖的適當位置5. 用偽碼表示程序
v?程序復雜程度定量度量的必要性:把程序的復雜程度乘以適當常數即可估算出軟件中錯誤的數量以及軟件開發需要用的工作量,定量度量的結果可以用來比較兩個不同的設計或兩個不同算法的優劣;程序的定量的復雜程度可以作為模塊規模的精確限度
v?McCabe計算環形復雜度:V(g) = E-N+2 ???E是邊數 N是點數
v?*** ??環形復雜度的上限是10
v?Halstead預測程序長度 H = n1*log2(n1)+n2*log2(n2)
????????????預測程序中包含錯誤個數 ?E = N*log2(n1+n2)/3000
?????其中n1表示不同運算符的個數 n2表示不同操作數的個數
?????????N1表示運算符出現的總次數 ?N2表示操作數出現的總次數 ?N=N1+N2
第七章
n?實現包括編碼和測試
n?程序的質量主要取決于(軟件設計的質量)
n?測試的必要性:如果在軟件投入生產性運行之前沒有發現并糾正軟件中的大部分差錯,則這些差錯遲早會在生產過程中暴露出來,那是,不僅改正這些錯誤的代價更高,而且往往會造成很惡劣的后果
n?測試的目的:盡可能多的發現并排除軟件中潛藏的錯誤,最終把一個高質量的軟件系統交給用戶使用
n?判斷題:測試階段的任務是發現錯誤?x ?并改正錯誤
n?選擇程序設計語言的主要實用標準:1. 系統用戶的要求
2.?可以是使用的編譯程序
3.?可以得到的軟件工具
4.?工程規模
5.?程序員的知識
6.?軟件可移植性要求
7.?軟件的應用領域
n?源代碼編寫規則:1. 程序內部的文檔。程序內部應包含必要的標識符、適當的注釋、
????????????????????和程序的視覺組織等
2.?良好的數據說明風格。數據說明的次序應該標準化
3.?簡單而直接的語句構造
4.?輸入輸出具有規則
5.?具有較高的效率。效率主要是指處理機時間和存儲器容量兩個方面
n?軟件應該像對他要求的那樣有效,而不應該如同人類可以做到的那樣有效
n?效率是靠好設計來提高的,不要犧牲程序的清晰性和可讀性來提高效率
n?軟件測試的準則:1. 所有測試都應該能追溯到用戶需求
2.?應該遠在測試開始之前就制定出測試計劃
3.?把Pareto原理應用到軟件測試中
4.?應該從小規模測試開始,并逐步進行大規模測試
5.?窮舉測試是不可能的
6.?為了達到最佳的測試效果,應該由獨立的第三方從事測試工作
7.?程序修改后要回歸測試
8.?應長期保留測試用例,直至系統廢棄
n?測試分為靜態測試和動態測試,區別在于是否實際運行軟件,靜態分為人為和計算機輔助,動態分為黑盒白盒
n?黑盒測試的又稱功能測試
n?白盒測試又稱結構測試
n?測試的步驟:1. 模塊測試。把每個模塊當做一個單獨的實體來測試
2.?子系統測試。把經過單元測試的模塊當做一個子系統來測試,主要測試模塊間的協調和通信,因此這個階段著重測試接口
3.?系統測試。發現軟件設計中的錯誤或需求說明中的錯誤
4.?驗收測試。需要用戶參與,往往發現的是需求說明書中的錯誤
5.?平行運行。同時運行新舊系統
n?模塊測試是對每個單獨的模塊,分別采用黑盒和白盒測試技術,測試他的功能是否正確,檢查模塊控制結構中的特定路徑并發現最大數量的錯誤
n?模塊測試的特點是主要應用白盒測試技術,并且多個模塊可以并發的進行
n?驗收測試又稱確認測試,目的是:驗證系統確實能滿足用戶的需要
n?平行運行的目的:1. 可以在準生產環境下運行新系統而又不冒風險
2.?用戶能有一段熟悉新系統的時間
3.?可以驗證用戶指南和使用手冊之類的文檔
4.?能夠以準生產模式對新系統進行全負荷測試,可以用測試結果驗證性能指標
n?單元測試的重點:1. 模塊測試2. 局部數據結構 3. 重要的執行通路 4. 出錯處理通路 5. 邊界條件
n?集成測試是測試和組裝軟件的系統化技術,其主要目標是發現與接口有關的問題。其特點是可能發生接口問題
n?集成測試的方法:1. 非漸增式測試方法:先分別測試每個模塊,再將所有的模塊結合
????????????????????在一起
2.?漸增式測試方法:一次增加進來一個待測試的模塊(自底向上,自頂向下)
n?自頂向下集成的優點:不需要測試驅動程序,能夠在測試階段的早期實現并驗證程序的主要功能,而且能在早期發現上層模塊的接口錯誤
n?自頂向下集成的缺點:需要存根程序,可能遇到與此相聯系的測試困難,底層關鍵模塊中的錯誤發現較晚,而且用這種方法在早期不能充分展開人力
n?回歸測試:重新執行已經做過的測試的某個子集,以保證增加進的新的模塊沒有帶來非預期的副作用
n?回歸測試的內容:1.檢驗軟件功能的代表性測試用例 2. 專門針對可能受影響的軟件功能的附加測試 3. 針對被修改過的軟件成分的測試
n?確認與驗證的區別:驗證指的是保證軟件正確的實現了某個特定要求的一系列活動;確認指的是為了保證軟件確實滿足了用戶需求而進行的一系列活動
n?軟件有效性的定義:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就是有效的
n?確認測試的內容:1.復查軟件配置 2. 檢驗使用手冊的完整性與正確性 3. 檢測軟件是否與需求一致 4. 保證軟件能滿足所有功能要求 5. 文檔資料是準確完整的 6. 軟件能滿足其他預定的要求(安全性、可移植性、兼容性。可維護性)
n?確認測試基本使用黑盒測試法
n?軟件配置復查的目的:保證軟件配置的所有成分都齊全,質量符合要求,文檔與程序完全一致,具有完成軟件維護所必須的細節而且已經編好目錄
n?白盒測試技術:邏輯覆蓋技術與控制結構測試技術(基本路徑測試、條件測試和循環測試)
n?邏輯覆蓋技術:1. 語句覆蓋。每個語句應該執行一次
??????????????????2 判定覆蓋。不僅每個語句至少執行一次,而且每個判定的每種可能結
???????????????????果也應該至少執行一次
??????????????????3 條件覆蓋。不僅每個語句至少執行一次,判定表達中每個條件都取到各種可能得結果
??????????????????4 判定/條件覆蓋。同時滿足兩種覆蓋
??????????????????5 條件組合覆蓋。每個判定表達式中條件的各種可能組合都至少出現一次
??????????????????6 點覆蓋 7 邊覆蓋 8 路徑覆蓋
n?基本路徑測試的步驟:1.根據過程結構畫出相應的流圖
????2.計算流圖的環形復雜度
3.確定線性獨立路徑的基本集合
4.設計可強制執行基本集合中的每條路徑的測試用例
n?條件測試錯誤的類型:1.布爾算符錯 2.布爾變量錯 3.布爾括弧錯 4.關系算符錯 5.算數表達式錯
n?條件測試策略的優點:1.容易度量條件的測試覆蓋率 2.程序內條件的測試覆蓋率可指導附加測試的設計
n?條件測試的目的:不僅是檢驗程序條件中的錯誤,而且是檢驗程序中的其他錯誤
n?循環測試的三種辦法:1. 簡單循環 2. 嵌套循環 ?3. 串接循環
n?黑盒測試法:把程序看成一個黑盒子,完全不考慮程序的內部結構和處理過程。黑盒測試是在程序接口進行的測試,它只檢查程序功能是否能按照規格說明書的規定正常使用,程序是否能適當地接收輸入數據產生正確的輸出信息,并且保持外部信息(如,數據庫或文件)的完整性。
n?黑盒測試主要用于測試的后期 白盒測試主要用于早期
n?黑盒測試力圖發現下述類型的錯誤:
①功能不正確或遺漏了功能;
②界面錯誤;
③數據結構錯誤或外部數據庫訪問錯誤;
④性能錯誤;
⑤初始化和終止錯誤。
n?黑盒測試法技術:1.等價劃分 2. 邊界值分析 3.錯誤推測
n?等價類劃分:等價類劃分方法把所有可能的輸入數據,即程序的輸入域劃分成若干部分,然后從每一部分中選取少數有代表性的數據做為測試用例。
n?等價類劃分先要劃分等價類,接下來一次測試有效等價類與無效等價類
n?錯誤推測法的基本想法是:列舉出程序中所有可能有的錯誤和容易發生錯誤的特殊情況,根據它們選擇測試方案。
n?調試:調試是在測試發現錯誤之后排除錯誤的過程
n?調試途徑:1. 蠻干法 2. 回溯法 3. 原因排除法
n?軟件可靠性:軟件可靠性是指程序在給定的時間間隔內,按照規格說明書的規定成功的運行的概率
n?軟件可用性:程序在給定的時間點,按照規格說明書的規定,成功的運行的概率
n?可靠性與可用性的區別:可靠性是指一段時間間隔內程序沒有失效,可用性意味著這段時間內程序正確運行
n?MYTTF = 平均無故障時間 ?Et 測試之前程序中錯誤總量 ?Ir程序長度 Ec x時間內改正的錯誤
n?MTTF = 1/K*(Et/Ir-Ec/Ir) ?**是減號
第八章
ü?軟件維護的基本任務(作用)是保證軟件在一個相當長的時期能夠正常運行
ü?軟件維護:在軟件已經交付使用之后為了改正錯誤或者滿足新的需要而修改軟件的過程
ü?軟件維護的本質:修改和壓縮了的軟件定義和開發過程,而且事實上遠在提出一項維護要求之前,與軟件維護有關的工作就已經開始了
ü?軟件維護的分類:1. 改正性維護。診斷和改正錯誤
2.?適應性維護。為了和變化了的環境適當的配合而進行的修改軟件
????????????????????的活動
3.?完善性維護。增加新功能或修改已有功能
4.?預防性維護。給未來的改進奠定良好的基礎
ü?軟件維護的特點:1. 結構化維護與非結構化維護差別巨大
2.?維護的代價高昂
3.?維護的問題很多
ü?維護過程的問題:1. 理解別人寫的程序通常非常困難
2.?需要維護的軟件往往沒有合格的文檔,或者文檔資料顯著不足
3.?當要求對軟件進行維護時,不能指望由開發人員給人們自習說明軟件
4.?絕大多數軟件在設計時沒有考慮將來的修改
5.?軟件維護不是一項吸引人的工作
ü?軟件維護的過程:1. 維護組織
2.?維護報告
3.?維護的事務流
4.?保存維護記錄
5.?評價維護活動
ü?決定軟件可維護性的因素:1. 可理解性
2.?可測試性
3.?可修改性
4.?可移植性
5.?可重用性
ü?提高可維護行的方法:建立明確的軟件質量目標和優先級
使用提高軟件質量的技術和工具
進行明確的質量保證審查
選擇可維護的程序設計語言
改進程序的文檔
ü?軟件文檔分為系統文檔與用戶文檔
ü?軟件文檔的要求:1. 必須描述如何使用這個系統
2.?必須描述怎樣安裝和管理這個系統
3.?必須描述系統需求和設計
4.?必須描述系統的實現與測試,以便使系統成為可維護的
ü?用戶文檔五方面內容:1. 功能描述 2. 安裝文檔 3. 使用手冊 4. 參考手冊 5. 操作員指南
ü?開發與維護的關系:
?許多軟件的維護十分困難,原因在于這些軟件的文檔不全、質量差、開發過程不注意采用好的方法,忽視程序設計風格等。
ü?軟件維護與軟件工程的關系:軟件維護時軟件工程的最后一個階段,軟件工程的主要目的就是提高軟件的可維護性,減少軟件維護所需要的工作量,降低軟件系統的成本。軟件維護決定了未來軟件工程的可靠性與可維護性。
ü?在軟件開發過程中應該采取哪些措施來提高軟件的可維護性
???在每個階段結束前的技術復審和管理復查中,應該著重對可維護性進行復審,應該對將來要改進的部分和可能要改的部分加以注意指明,應該討論軟件的可移植性問題,考慮可能影響軟件維護的系統界面。在設計和編碼過程中應該盡量使用可重用的軟件構件,每個測試步驟都可以暗示在軟件正式交付使用之前,程序中可能需要做預防性維護的部分。在完成每項維護工作之后,都應該對軟件維護本身仔細認真的復審。
ü?需求分析的目的/意義/必要性:為了開發出真正滿足用戶需求的軟件產品,首先必須知道用戶的需求。對軟件需求的深入理解是軟件開發工作獲得成功的前提條件,不論我們把設計和編碼工作做得如何出色,不能真正滿足用戶需求的程序只會令用戶失望,給開發者帶來煩惱。
ü?需求分析的任務:確定對系統的綜合要求: 1. 功能需求
2.?性能需求
3.?可靠性和可用性需求
4.?出錯處理需求
5.?接口需求
6.?約束
7.?逆向需求
8.?將來可能提出的要求
分析系統的數據要求(分析系統的數據結構,圖形工具描
述數據結構[層次方框圖和Warnier圖],數據結構規范化)
導出系統的邏輯模型(數據流圖,實體聯系圖,狀態轉換
圖,數據字典和主要的處理算法描述)
修正系統開發計劃
ü?與用戶溝通獲取真實需求的的方式:1. 訪談
2.?面向數據流自頂向下求精
3.?簡易的應用規格說明技術
4.?快速建立軟件原型
ü?需求分許是軟件定義的最后一個階段,他的主要任務時準確回答“系統必須做什么”這個問題,不是確定系統怎樣完成他的工作
ü?需求分析結束之前應出具軟件需求規格說明書,書面形式準確描述軟件的需求