結構化分析
考慮數據和處理的需求分析方法,稱為結構分析方法(SA)
結構化分析基于 分解、抽象 的基本思想
分解:對于復雜的系統,為將復雜度降低到可以掌握的程度,可以把大問題分解為若干個小問題,然后分別解決
最頂層:自頂向下 逐層分解
表示軟件系統最本質的屬性的方法:抽象
結構化分析是面向數據流的需求分析方法,數據作為獨立實體轉換,數據流定義了數據的屬性和關系,操作數據的處理建模表明當數據在系統流動時處理如何轉換數據。
結構化分析的基本步驟:
1)建立當前系統的“具體模型”
2)抽象出當前系統的邏輯模型
3)建立目標系統的邏輯模型
4)為了對目標系統進行完整的描述,還需要考慮人機界面和其他一些問題
結構化分析模型的核心:數據字典
”數據流圖“指出當數據在軟件系統中移動時怎樣被變換,并描述變換數據流的功能和子功能,用于功能建模
”實體-關系圖“(E-R圖)描繪數據對象之間的關系,用于數據建模
”狀態轉換圖“指明了作為外部事件結果的系統行為,用于行為建模
數據流圖的表示符號:
1)外部實體
2)數據流
3)數據變換
4)數據存儲
環境圖(系統頂層數據流圖 / 0層數據流圖),僅包含一個數據處理過程-要開發的目標系統
環境圖的作用:確定系統在環境中的位置,通過確定系統的輸入、輸出與外部實體的關系確定邊界
基本思想:自頂向下、從外到內、逐層分解
數據流圖的導出是 逐步求精 的過程
數據建模思想:在較高的抽象層次(概念層)上對數據庫結構進行建模
用實體關系圖表示
E-R圖的三個基本概念概括數據的基本結構:實體、關系、屬性
實體:矩形框
屬性:橢圓形
實體與屬性用 無向邊 連接,實體由若干個屬性組成
關系:菱形
E-R圖不具有唯一性
狀態轉換圖:描述系統對內部 / 外部事件響應的行為模型
適合描述實時系統,這類系統大多由外部環境的激勵而驅動
狀態是可以被觀察的系統行為模型
初態:每張只有一個
終態:可沒有,可多個
狀態變遷由事件觸發
數據字典以系統化的方式定義在分析模型中出現的數據對象及控制信息的特性
最底層數據流圖的數據處理 / 基本加工 / 原子加工,對每一個基本加工都須進一步說明,稱為加工規格說明
主要表達”做什么“,而不是”怎么做“
用結構化語言(PDL / 偽代碼)、判定表、判定樹 來表述
結構化設計
結構化軟件設計的任務從軟件需求規格說明書出發,設計整體結構,形成具體設計方案,解決”怎么做“。
概要設計:將軟件需求轉化為數據結構和系統結構
詳細設計:也稱過程設計
結構化設計:面向數據流、面向數據結構
面向數據流:概要設計階段
數據流:變換型、事務型
變換:將輸入數據處理后轉變為另外的輸出數據
事務:非數據變換的處理
通過變換將數據流圖映射為變換結構
面向數據結構:Jackson、Warnier
Jackson把數據結構分為:順序、選擇、循環
概要設計中的接口設計用于子系統 / 模塊之間或內部系統和外部系統進行各種交互
數據設計將需求分析階段定義的數據對象(E-R圖、數據字典)轉換為設計階段的數據結構和數據庫
流程圖:數據、程序、系統流程圖、程序網格圖、系統資源圖
程序流程圖的5中基本的控制結構:順序、選擇型、先判定、后判定型循環、多分支選擇型
N-S圖:又稱盒圖
PAD圖:又稱問題分析圖
面向對象分析
面向對象分析以用例模型為基礎
用例模型;用例圖+相關文字描述
用例:系統中的一個功能單元,描述參與者與系統之間的一次交互,常用來收集用戶需求
可把參與者執行的每一個系統功能都看做一個用例
目標系統類:邊界類、控制類、實體類
對象或類之間的關系:依賴、關聯、聚合、組合、泛化、實現
1)依賴:”非結構化“,短暫,一個對象會影響另一個對象
2)關聯:”結構化“,對象之間的連接
3)聚合和組合:特殊的關聯,強調整體和部分之間的從屬性,組合是聚合的一種,組合的整體和部分具有很強的歸屬關系和一致的生命周期
4)泛化和類間的繼承相似
5)實現針對類與接口的關系
面向對象分析的基礎:對象模型
對象模型:問題域中對象+相互關系
面向對象建模:描述系統數據結構對象模型、描述系統控制結構的動態模型、描述系統功能的功能模型
對象和關系的生命周期用動態模型來描述
功能模型:數據之間的依賴關系+數據處理功能,由一組數據流圖組成
用例之間的關系:擴展、包含、泛化
面向對象設計
類中封裝 屬性+方法
面向對象分析到面向對象設計是平滑的過渡
面向對象設計原則:
1)模塊化
2)抽象化
3)信息隱藏
4)低耦合
5)高內聚
6)復用性
動態模型:若干張狀態圖組成
每張狀態圖描繪一個對象的生命周期
狀態圖中狀態轉換=功能模型中數據流圖
黑盒測試
軟件測試:靜態、動態
靜態測試:審查、走查
動態:黑盒
靜態:白盒
黑盒測試:將軟件系統看作黑盒子,不關心盒子的內部結構和特性,只關注軟件的輸入數據和輸出結果
大的功能模塊
等價類劃分法、邊界值分析法、錯誤推測法、因果圖法、正交實驗設計法
等價類劃分法:有效、無效等價類
邊界值分析法:選擇等價類邊界的測試用例
錯誤推測法:直覺+經驗
因果圖法:輸入條件的各種組合方式、各個輸入條件之間的相互制約關系
白盒測試
又稱玻璃盒測試,將被觀測程序看作透明盒子,關注軟件產品的內部細節、邏輯結構
小的構件
邏輯覆蓋測試方法、基本路徑測試
代碼檢查法:桌面檢查、代碼審查、走查
靜態結構分析法:以圖的形式表現程序的內部i結構
程序代碼結構方式是白盒測試的主要依據
程序插樁技術: 插入打印語句,通過打印有關信息了解程序執行時的動態特性。
邏輯覆蓋法:語句、分支、條件、分支-條件、條件組合、路徑覆蓋
語句覆蓋:設計若干測試樣例,運行被測試程序,每個可執行程序至少執行一次
分支覆蓋:每個判斷的取真、取假分支至少執行一次
條件覆蓋:每個判斷的所有邏輯條件的每種可能取值至少執行一次
分支-條件覆蓋:同時滿足分支覆蓋和條件覆蓋的要求
條件組合覆蓋:每個判斷語句的所有邏輯條件的可能取值組合至少執行一次
路徑覆蓋:覆蓋被測試程序中所有可能的路徑
路徑覆蓋的覆蓋率最高,語句覆蓋的覆蓋率最低
基本路徑法:在程序控制流程圖的基礎上,通過分析控制構造的環路復雜度,導出基本可執行程序的路徑集合,從而設計測試用例的方法
設計出的用例測試用例在每條可執行語句中至少執行一次
用軟件的控制流圖表達
環路復雜度為程序邏輯復雜度性提供定量測度的軟件度量
白盒測試方法:
先靜后動,先進行代碼檢查和靜態結構分析,在進行覆蓋檢查
利用靜態分析的結果作引導,通過代碼檢查和動態測試的方法對靜態分析的結果進一步確認
覆蓋測試是白盒測試的重點,用基本路徑測試法達到語句覆蓋標準,對于軟件的重點模塊,應使用多種軟件覆蓋標準衡量測試的覆蓋度。
單元測試:代碼檢查、覆蓋測試
集成測試:靜態結構分析
系統測試:根據黑盒測試的結果,采用相應的白盒測試方法
白盒測試成本比黑盒測試高
灰盒測試介于白盒測試和黑盒測試之間
軟件測試步驟:
單元測試、集成測試、系統測試、驗收測試
單元測試是軟件測試的基礎
側重模塊的內部處理邏輯、數據結構,利用構件級設計描述作為指南,測試重要的控制路徑以發現模塊內的錯誤
測試用例設計與復審設計結合,根據設計規則選取數據
集成測試:多個單元的集合,單元組合成模塊,模塊聚合成子系統 / 系統
體系結構設計、模塊設計、接口設計、集成測試策略分析
非增量式集成測試、增量式集成測試
非增量式集成測試:”一步到位“
增量式集成測試:自頂向下、自底向上
最后的測試是:α、β測試
α測試:開發人員+測試人員
β測試:用戶,最主觀的