筆記.第2章.軟件工程基礎(chǔ)知識.信息系統(tǒng)項目管理師.考試輔導(dǎo)教程.第3版

本書筆記目錄鏈接

上篇

第2章 軟件工程基礎(chǔ)知識

“軟件工程”概念在1968年的“軟件危機”會議中提出项贺。

IEEE 在1983年對軟件工程的定義:軟件工程是開發(fā)、運行、維護和修復(fù)軟件的系統(tǒng)方法。

電氣和電子工程師協(xié)會褐荷,IEEE劫侧,Institute of Electrical and Electronics Engineers

軟件工程專家 Boehm 在1983年提出了軟件工程的7條基本原理:

  1. 用分階段的生命周期計劃嚴格管理
  2. 堅持進行階段評審
  3. 實行嚴格的產(chǎn)品控制
  4. 采用現(xiàn)代程序設(shè)計技術(shù)
  5. 結(jié)果應(yīng)能清楚地審查
  6. 開發(fā)小組的人員應(yīng)該少而精
  7. 承認不斷改進軟件工程實踐的必要性

軟件工程方法學(xué)包含3個要素:方法惭蹂、工具和過程挪捕。

  • 方法:完成軟件開發(fā)的各項任務(wù)的技術(shù)方法谒府。
  • 工具:為運用方法而提供的軟件工程支撐環(huán)境拼坎。
  • 過程:為獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)的框架。

本章要點:

  • 軟件需求分析與定義完疫;
  • 軟件設(shè)計泰鸡、測試與維護;
  • 軟件復(fù)用壳鹤;
  • 軟件質(zhì)量保證及質(zhì)量評價盛龄;
  • 軟件配置管理;
  • 軟件開發(fā)環(huán)境;
  • 軟件過程管理余舶。

2.1 軟件需求分析與定義

根據(jù) Standish Group 對23000個項目進行的研究結(jié)果表明啊鸭,28%的項目徹底失敗,46%的項目超出經(jīng)費預(yù)算或者超出工期匿值,有26%的項目獲得成功赠制。而在這些高達74%的不成功項目中,有60%的失敗是源于需求問題挟憔。

2.1.1 軟件需求與需求過程

1. 什么是軟件需求

軟件需求就是系統(tǒng)必須完成的事钟些,以及必須具備的品質(zhì)。包括:

  • 功能需求
    產(chǎn)品必須執(zhí)行的動作绊谭。

  • 非功能需求
    必須具備的屬性或品質(zhì)政恍,如可靠性、性能龙誊、擴展性等抚垃。

  • 設(shè)計約束
    限制條件喷楣、補充規(guī)約趟大,通常是對解決方案的約束說明。

其他相關(guān)概念:

  • 業(yè)務(wù)需求(Business Requirement)
    反映組織機構(gòu)或客戶對系統(tǒng)铣焊、產(chǎn)品高層次的目標(biāo)要求逊朽。

  • 用戶需求(User Requirement)
    指描述用戶使用產(chǎn)品必須要完成什么任務(wù),怎么完成的需求曲伊。

  • 系統(tǒng)需求(System Requirement)
    指從系統(tǒng)的角度來說明軟件的需求叽讳。

2. 需求工程

需求工程是一個包括創(chuàng)建和維護系統(tǒng)需求文檔所必需的一切活動的過程,通常包括:

  • 需求開發(fā)

    需求開發(fā)對于需求工程而言重于需求管理坟募。包括四個階段:

    • 需求捕獲
    • 需求分析
    • 編寫規(guī)格說明書
    • 需求驗證
  • 需求管理

    包括:

    • 定義需求基線
    • 處理需求變更
    • 需求跟蹤

2.1.2 需求調(diào)查與問題定義

想做好需求調(diào)查必須清楚了解的3個問題:

  • What:搜集什么信息
  • Where:從什么地方搜集這些信息
  • How:用什么機制或技術(shù)搜集這些信息
1. 要捕獲的信息

從宏觀的角度看岛蚤,要捕獲的信息包括三類:

  • 與問題域相關(guān)的信息(如業(yè)務(wù)資料、業(yè)務(wù)處理流程等)
  • 與要求解決的問題相關(guān)的信息
  • 用戶對系統(tǒng)的特別期望與施加的任何約束信息
2. 信息的來源

對涉眾(風(fēng)險承擔(dān)人懈糯、項目干系人)進行分類涤妒,從每一類涉眾中找1~2名代表。

3. 需求捕獲技術(shù)

常用技術(shù):

  • 用戶訪談

    • 準(zhǔn)備問題:圍繞想要獲取的信息展開赚哗,設(shè)計一系列的問題她紫,按順序組織起來。預(yù)先準(zhǔn)備好記錄方式屿储。
    • 訪談時的技巧:注意措辭贿讹,保持氣氛輕松,語言通俗化够掠,訪談前對相關(guān)知識的準(zhǔn)備保證理解與認識民褂。
    • 應(yīng)該詢問的問題:自己的問題是否相關(guān)?回答是否正式?對方是否為回答此問題合適人選助赞?是否問了過多的問題买羞?詢問被訪者還希望自己問他什么問題,應(yīng)該見哪些人雹食?
  • 用戶調(diào)查
    缺點:缺乏靈活性畜普,反饋的信息不全面。
    補足:用戶調(diào)查與用戶訪談結(jié)合使用群叶。先調(diào)查吃挑,整理分析后進行小范圍的用戶訪談。

  • 現(xiàn)場觀摩

  • 文檔考古

  • 聯(lián)合討論會
    參與人數(shù)6~18人街立,召開時間1 ~ 5小時舶衬。
    會議流程:

    1. 提前將與討論主題相關(guān)的資料分發(fā)給會議參與人
    2. 與會者互相認識
    3. 針對所列舉的問題進行逐項專題討論
    4. 對原有系統(tǒng)、類似系統(tǒng)的不足進行開放性交流
    5. 大家對新的解決方案的設(shè)想

    記錄會議中討論的想法赎离、問題逛犹、不足,形成要點清單梁剔,針對清單進行整理虽画,明確優(yōu)先級并進行評審。

4. 需求捕獲的策略

需求過程4階段(需求捕獲荣病、需求分析码撰、需求規(guī)格 、需求驗證)采用迭代的方式進行个盆。

2.1.3 可行性研究

1. 可行性研究工作的基礎(chǔ)

問題定義的關(guān)鍵是清晰地界定出問題內(nèi)容脖岛、性質(zhì),以及系統(tǒng)的目標(biāo)颊亮、規(guī)模等內(nèi)容柴梆,并形成完整的書面報告。

2. 可行性研究工作的任務(wù)
  • 技術(shù)可行性
  • 經(jīng)濟可行性
  • 社會可行性
3. 可行性研究工作的步驟
  1. 核實問題定義與目標(biāo)
    具體來說终惑,就是仔細閱讀問題定義的相關(guān)材料绍在,對該問題所涉及的領(lǐng)域知識進行學(xué)習(xí)、考證狠鸳,然后通過走訪相關(guān)人員進行驗證與核實揣苏。
    這一步驟的關(guān)鍵目標(biāo)是:使問題定義更加清晰、明確件舵、沒有歧義性卸察,并且對系統(tǒng)的目標(biāo)、規(guī)模铅祸,以及相關(guān)約束與限制條件做出更加細致的定義坑质,確焙衔洌可行性研究小組的所有成員達成共識。

  2. 研究分析現(xiàn)有系統(tǒng)
    “現(xiàn)有系統(tǒng)” 不僅包括舊的軟件系統(tǒng)涡扼,還包括舊的非計算機系統(tǒng)稼跳。

  3. 為新系統(tǒng)建模
    建模的目的是為了獲得一個對新系統(tǒng)的框架認識、概念性認識吃沪。
    常見技術(shù):

  • 系統(tǒng)上下文關(guān)系范圍圖
  • 實體-關(guān)系圖
  • 用例模型
  • 域模型
  • IPO 表
  1. 客戶復(fù)核

  2. 提出并評價解決方案
    應(yīng)該盡量列舉出各種可行的解決方案汤善,并且對這些解決方案的優(yōu)點、缺點做一個綜合性的評價票彪,以便下一步?jīng)Q策红淡。

  3. 確定最終推薦的解決方案
    成本效益分析:

  • 成本估計
    估算工作量的工具:歷史數(shù)據(jù)與經(jīng)驗?zāi)P停üδ茳c分析,COCOMO 分析等)降铸。

  • 效益分析
    在效益分析之前應(yīng)該首先對該系統(tǒng)應(yīng)用之后在旱,將會來的直接、間接收益推掸,以及成本降低的具體數(shù)額進行量化桶蝎,并且通過經(jīng)濟學(xué)的相關(guān)模型來進行分析。

常見概念:

  • 貨幣的時間價值
  • 投資回收期
  • 純收入
  • 投資回報率
  1. 草擬開發(fā)計劃
  2. 以書面的形式提交《可行性分析報告》并進行審查谅畅。

2.1.4 需求分析

定義:所謂分析就是通過對問題域的研究登渣,獲得對該領(lǐng)域特性及存在于其中(需要解決)的問題特性的透徹理解并用文檔說明。

1. 需求分析的工作任務(wù)

Karl E.Wiegers 在《軟件需求》中指出需求分析工作通常包括7個方面铃彰。

  1. 繪制系統(tǒng)上下文范圍關(guān)系圖
    用于定義系統(tǒng)與系統(tǒng)外部實體間的界限和接口的簡單模型绍豁,它可以為需求確定一個范圍芯咧。DFD 的0層圖牙捉。

  2. 創(chuàng)建用戶接口原型

  3. 分析需求的可行性

  4. 確定需求的優(yōu)先級
    需求的優(yōu)先級可以采用滿意度/非滿意度指標(biāo)進行說明(取值均為1 ~ 5)。

  5. 為需求建立模型

  6. 創(chuàng)建數(shù)據(jù)字典

  7. 使用質(zhì)量功能配置(QFD)

質(zhì)量功能配置敬飒,QFD邪铲,Quality Function Deployment

2. 需求建模

Alan Davis 主張需要把用文字表示的需求和用圖形表示的需求結(jié)合起來。用圖形表示的需求无拗,就是需求建模带到,獲得分析模型。分析模型有助于檢測需求的不一致性英染、模糊性揽惹、錯誤及遺漏。

2.1.5 流行的需求分析方法論

按照分解方式不同分類:

  • 結(jié)構(gòu)化分析方法

結(jié)構(gòu)化分析方法四康,SA搪搏,Structured Analysis

  • 軟系統(tǒng)方法

過渡性的方法論,并未真正流行過闪金。以 Checkland 方法為代表疯溺。

  • 面向?qū)ο蠓治龇椒?/strong>

面向?qū)ο蠓治龇椒勐琌OA,Object Oriented Analysis

  • 面向問題域的分析

面向問題域的分析囱嫩,PDOA恃疯,Problem Domain Oriented Analysis
尚處在研究階段,并未廣泛應(yīng)用墨闲。
小鐳:今天情況怎樣今妄?

1. 結(jié)構(gòu)化分析

把系統(tǒng)看作一個過程的集合體。

工具:

  • 數(shù)據(jù)流圖
  • 數(shù)據(jù)字典
  • 結(jié)構(gòu)化語言
  • 判定表
  • 判定樹

結(jié)構(gòu)化系統(tǒng)分析方法從總體上看是一種強烈依賴數(shù)據(jù)流圖的自頂向下的建模方法鸳碧。

如何進行結(jié)構(gòu)化分析:

  1. 研究“物質(zhì)環(huán)境”
    畫出當(dāng)前系統(tǒng)的數(shù)據(jù)流圖蛙奖。

  2. 建立系統(tǒng)邏輯模型
    在第一步的基礎(chǔ)上,畫出相對真實系統(tǒng)的等價邏輯數(shù)據(jù)流圖杆兵。

  3. 劃清人機界限

2. 數(shù)據(jù)流圖

數(shù)據(jù)流圖雁仲,DFD,Data Flow Diagram

基本元素:

  • 過程
  • 外部實體
  • 數(shù)據(jù)存儲
  • 數(shù)據(jù)流
  • 實時連接
    過程執(zhí)行時琐脏,外部實體與過程之間的來回通信攒砖。

對過程0的分解,稱之為 DFD 0層圖日裙。

3. 細化記錄 DFD 部件
  1. 結(jié)構(gòu)化語言
  2. 決策表和決策樹
  3. 數(shù)據(jù)字典
    每條目包含信息:
    • 名稱
    • 何處使用/如何使用
    • 內(nèi)容描述
    • 補充信息

數(shù)據(jù)字典實例:
客戶基本信息=客戶編號+客戶名稱+身份證號碼+手機
客戶編號={0···9}8
客戶名稱={字}4
身份證號碼=[{0···9}15|{0···9}18]
手機=[{0···9}11|{0···9}12]

4. 實體-關(guān)系圖

實體-關(guān)系圖吹艇,E-R 圖,Entity Relationship Diagram

實體是一個概念昂拂,用來抽象地表示一組相類似的事物的所有實例受神。

結(jié)構(gòu)化分析的不足:

  • 對問題域的研究力度不夠大
  • 分析與設(shè)計之間缺乏清晰界限
  • 沒有一個真正的功能規(guī)格說明
  • 需求實質(zhì)上是根據(jù)滿足該需求的某一特定系統(tǒng)的內(nèi)部設(shè)計來加以說明的
  • 內(nèi)部設(shè)計的開發(fā)使用的則是不可靠的內(nèi)部設(shè)計技術(shù)-功能分解
  • 不適用于很多類型的應(yīng)用

小鐳:或許結(jié)構(gòu)化分析過于抽象,這加大了分析階段的復(fù)雜性格侯,使問題的描述鼻听、閱讀、溝通變得困難联四。

5. 面向問題域的分析

面向問題域的分析更多地強調(diào)描述撑碴,而較少強調(diào)建模。

分析過程:

  • 搜集基本的信息并開發(fā)問題框架朝墩,以建立問題域的類型
  • 在問題框架類型的指導(dǎo)下醉拓,進一步搜集詳細信息并給出一個問題域相關(guān)特性的描述

2.2 軟件設(shè)計

2.2.1 軟件設(shè)計基本原則

1. 信息隱蔽

Parnas 指出:每個模塊的實現(xiàn)細節(jié)對于其他模塊來說是隱蔽的,模塊中所包含的信息(包括數(shù)據(jù)和過程)不允許其他不需要這些信息的模塊使用收苏。這提高了軟件的可維護性和可靠性亿卤。

2. 模塊獨立性

指軟件系統(tǒng)中每個模塊只涉及軟件要求的具體子功能,而和軟件系統(tǒng)中其他的模塊接口是簡單的鹿霸。

度量模塊獨立性的兩個準(zhǔn)則:

  • 耦合
    模塊之間聯(lián)系緊密程度的度量排吴。

  • 內(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)聚
    模塊中所有部分都是為了完成一項具體功能而協(xié)同工作矫夷,緊密聯(lián)系,不可分割的憋槐。

  • 信息內(nèi)聚
    模塊所完成的各個功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作双藕,每一項功能有一個唯一的入口點。

  • 通信內(nèi)聚
    如果一個模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù)阳仔,或產(chǎn)生了相同的輸出數(shù)據(jù)忧陪,則稱之為通信內(nèi)聚模塊。

  • 過程內(nèi)聚
    把流程圖中的某一部分劃出組成模塊近范,就得到過程內(nèi)聚模塊嘶摊。

  • 時間內(nèi)聚
    模塊的各個功能的執(zhí)行與時間有關(guān)。

  • 邏輯內(nèi)聚
    組合相關(guān)功能评矩。

  • 巧合內(nèi)聚
    又稱偶然內(nèi)聚叶堆,指模塊內(nèi)部的聯(lián)系很松散。


低 --- 耦合性 ---》 高

非直接耦合 | 數(shù)據(jù)耦合 | 標(biāo)記耦合 | 控制耦合 | 外部耦合 | 公共耦合 | 內(nèi)容耦合

強 《--- 模塊獨立性 --- 弱


各類耦合性:

  • 非直接耦合
    模塊之間沒有直接聯(lián)系斥杜。

  • 數(shù)據(jù)耦合
    模塊之間通過簡單數(shù)據(jù)參數(shù)來交換輸入虱颗、輸出信息。

  • 標(biāo)記耦合
    一組模塊通過參數(shù)表傳遞記錄信息蔗喂。

  • 控制耦合
    一個模塊通過傳送開關(guān)忘渔、標(biāo)志、名字等控制信息控制選擇另一模塊的功能缰儿。

  • 外部耦合
    一組模塊都訪問同一全局簡單變量而不是同一全局數(shù)據(jù)結(jié)構(gòu)畦粮,而且不是通過參數(shù)表傳遞該全局變量的信息。

  • 公共耦合
    一組模塊都訪問同一個公共數(shù)據(jù)環(huán)境乖阵。

  • 內(nèi)容耦合
    一個模塊直接訪問另一個模塊的內(nèi)部數(shù)據(jù)宣赔;一個模塊不通過正常入口轉(zhuǎn)到另一模塊內(nèi)部;一個模塊有多個入口义起。

2.2.2 結(jié)構(gòu)化設(shè)計方法

實施過程:

  1. 總結(jié)出系統(tǒng)應(yīng)有的功能拉背,對一個功能师崎,從功能完成的過程考慮默终,將各個過程列出,標(biāo)志出過程轉(zhuǎn)向和傳遞的數(shù)據(jù)犁罩。
  2. 細化數(shù)據(jù)流齐蔽。
  3. 分析過程之間的耦合關(guān)系,合理地劃分模塊床估,提高內(nèi)聚性含滴。
1. 系統(tǒng)結(jié)構(gòu)圖中的模塊

在系統(tǒng)結(jié)構(gòu)圖中,不能再分解的底層模塊稱為原子模塊丐巫。

完全因子分解的系統(tǒng):系統(tǒng)的全部實際加工都由原子模塊來完成谈况,而其他所有非原子模塊僅僅執(zhí)行控制協(xié)調(diào)功能勺美。這是理想中的系統(tǒng)。

結(jié)構(gòu)圖中的常見模塊:

  • 傳入模塊
  • 傳出模塊
  • 變換模塊
  • 協(xié)調(diào)模塊

區(qū)別系統(tǒng)結(jié)構(gòu)圖與程序流程圖

結(jié)構(gòu)圖碑韵,SC赡茸,Structured Charts

結(jié)構(gòu)圖反映模塊間的隸屬關(guān)系(調(diào)用與層次),著眼軟件系統(tǒng)的總體結(jié)構(gòu)祝闻,并不涉及模塊內(nèi)部的細節(jié)占卧。

流程圖反映的是程序的執(zhí)行順序及其依賴條件,表達執(zhí)行程序的具體算法联喘。

有太多項目失敗就是因為它們沒有明確的目標(biāo)就開始了华蜒。

2. 系統(tǒng)結(jié)構(gòu)圖中的主要成分
  1. 模塊
  2. 模塊間的調(diào)用關(guān)系
  3. 模塊間的通信
  4. 輔助控制符號
3. 常用的系統(tǒng)結(jié)構(gòu)圖
  1. 變換型系統(tǒng)結(jié)構(gòu)圖
    從外部取得數(shù)據(jù),處理后再傳回外部豁遭。

  2. 事務(wù)型系統(tǒng)結(jié)構(gòu)圖
    數(shù)據(jù)被轉(zhuǎn)換成一個事務(wù)項并加以計算叭喜,然后根據(jù)結(jié)果選擇數(shù)據(jù)流。

  3. 混合型系統(tǒng)結(jié)構(gòu)圖
    現(xiàn)實中多為此類蓖谢。

2.2.3 用戶界面設(shè)計

一個好的用戶界面應(yīng)具有的特點:

  1. 可使用性
  2. 靈活性
  3. 復(fù)雜性和可靠性

2.2.4 設(shè)計評審

評審采用評審會議的形式進行域滥。

角色:

  • 設(shè)計負責(zé)人

    • 承擔(dān)項目的全部設(shè)計管理任務(wù)
    • 對設(shè)計質(zhì)量、進度及各項設(shè)計間的組織協(xié)調(diào)等全面負責(zé)
    • 對各單項工程之間的銜接蜈抓、協(xié)調(diào)和總體方案質(zhì)量負主要責(zé)任
    • 負責(zé)編寫總說明启绰,匯編總概算。
  • 高級管理人員

    • 定主審員
    • 審批評審記錄
  • 主審員

    • 在評審會前提出項目的書面評審意見
    • 確定評審組沟使、確定評審結(jié)果并填寫評審記錄
  • 評審組

    • 專業(yè)評審組評委表決通過項目初評結(jié)論并報綜合評審會議委可,通過設(shè)計報告。

2.3 軟件測試

應(yīng)當(dāng)把“盡早地和不斷地進行軟件測試”作為軟件開發(fā)者的座右銘腊嗡。

軟件測試并不等于程序測試着倾。軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間。各階段所得到的文檔以及源程序卡者,都應(yīng)成為軟件測試的對象客们。

2.3.1 軟件測試

測試用例是為特定目標(biāo)開發(fā)的測試輸入、執(zhí)行條件和預(yù)期結(jié)果的集合恒傻。

1. 黑盒測試

又稱為功能測試或數(shù)據(jù)驅(qū)動測試建邓。把測試對象看做一個空盒子,不考慮程序的內(nèi)部邏輯結(jié)構(gòu)和內(nèi)部特性沸手,依據(jù)程序的需求規(guī)格說明書,檢查程序的功能是否符合它的功能說明臀规。

主要檢查內(nèi)容:

  • 功能的正確性與完整性
  • 輸入輸出接口的正確性
  • 數(shù)據(jù)結(jié)構(gòu)的正確性
  • 性能極其穩(wěn)定性

測試用例設(shè)計方法:

  1. 等價類劃分
    步驟:
    1. 劃分等價類
    2. 選取測試用例

等價類是指某個輸入域的子集合栅隐。在該子集合中,各個輸入數(shù)據(jù)對揭露程序中的錯誤是等效的谨究。

有效等價類與無效等價類泣棋。

  1. 邊界值分析
    經(jīng)驗表明潭辈,大量的錯誤是發(fā)生在輸入或輸出范圍的邊界上鸯屿。

  2. 錯誤推測法
    靠經(jīng)驗和直覺推測程序中可能存在的各種錯誤寄摆,有針對性地編寫測試用例修赞。

  3. 因果圖
    此方法最終生成的就是判定表柏副,適于檢查程序輸入條件的各種組合情況。

    步驟:

    1. 分析原因(輸入)與結(jié)果(輸出)并標(biāo)示編號因果組
    2. 分析原因與結(jié)果之間的關(guān)系眷篇,畫出因果圖
    3. 在因果圖上標(biāo)明不可能的情況并指出約束或限制條件
    4. 把因果圖轉(zhuǎn)換成判定表
    5. 利用判定表的每一列設(shè)計測試用例
2. 白盒測試

又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試荔泳。白盒測試把測試對象看做一個透明的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)和有關(guān)信息,設(shè)計或選擇測試用例椎椰,對程序所有邏輯路徑進行測試沾鳄。

主要檢查內(nèi)容:

  • 對程序模塊的所有獨立執(zhí)行路徑至少測試一次
  • 對所有的邏輯判定译荞,取 “真” 與取 “假” 兩種情況都至少測試一次
  • 在循環(huán)的邊界和運行界限內(nèi)執(zhí)行循環(huán)體
  • 測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性
3. 邏輯覆蓋

此技術(shù)屬于白盒測試,是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計用例的技術(shù)圈膏。

包括:

  • 語句覆蓋
    設(shè)計若干個測試用例篙骡,使每一可執(zhí)行語句至少執(zhí)行一次糯俗。

  • 判定覆蓋
    設(shè)計若干個測試用例,使程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次杖玲,又稱為分支覆蓋淘正。

  • 條件覆蓋
    設(shè)計若干個測試用例鸿吆,使程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。

  • 判定-條件覆蓋
    設(shè)計足夠的測試用例惩淳,使判斷中每個條件的所有可能取值至少執(zhí)行一次黎泣,每個判斷中的每個條件的可能取值至少執(zhí)行一次。

  • 條件組合覆蓋
    設(shè)計足夠的測試用例褐着,使判斷的所有可能的條件取值組合至少執(zhí)行一次托呕。

  • 路徑覆蓋
    設(shè)計足夠的測試用例,覆蓋程序中所有可能的路徑馅扣。

2.3.2 軟件測試策略

1. 單元測試

也稱為模塊測試着降,是針對每個模塊進行的測試。

驅(qū)動模塊是指在單元測試和集成測試中蓄喇,協(xié)調(diào)輸入和輸出的測試程序。

樁模塊指模擬被調(diào)用單元的程序刃鳄。

單元測試可測試內(nèi)容:

  1. 模塊接口
  2. 局域數(shù)據(jù)結(jié)構(gòu)
    數(shù)據(jù)類型叔锐,變量见秽,初始值與默認值。
  3. 獨立路徑
    路徑錯誤齿梁。
  4. 錯誤處理測試
  5. 邊界條件測試
2. 集成測試

把模塊組裝為系統(tǒng)的方式有兩種:

  • 一次性組裝方式
  • 增殖式組裝方式

對關(guān)鍵模塊及早進行測試肮蛹。

3. 確認測試

驗證軟件的功能伦忠、性能及其他特性是否與用戶的要求一致。

主要步驟:

  1. 有效性測試
  2. 軟件配置復(fù)査
  3. 驗收測試

應(yīng)交付文檔:

  • 確認測試分析報告
  • 最終的用戶手冊和操作手冊
  • 項目開發(fā)總結(jié)報告
4. 系統(tǒng)測試

在實際運行環(huán)境下進行一系列的測試气忠。

5. α 測試和 β 測試

α 測試

α 測試是由一個用戶在開發(fā)環(huán)境或模擬實際操作環(huán)境下進行的測試赋咽。

α 測試目的:評價軟件產(chǎn)品的 FLURPS(功能脓匿、局域化、可使用性米母、可靠性毡琉、性能桅滋、支持)

α 測試注重產(chǎn)品的界面和特色。

β 測試

β 測試是由多個用戶在實際使用環(huán)境下進行的測試蜂绎。

β 測試處在整個測試的最后階段师枣。產(chǎn)品的所有手冊文本也應(yīng)該在此階段完全定稿萧落。

2.3.3 軟件測試類型

1. 功能測試
2. 可靠性測試

主要評價指標(biāo):

平均故障間隔時間找岖,MTBF许布,Mean Time Between Failure

平均故障修復(fù)時間,MTTR杂曲,Mean Time To Repair

3. 強度測試
4. 性能測試
5. 恢復(fù)測試
6. 啟動/停止測試
7. 配置測試
8. 安全性測試
9. 可使用性測試
10. 安裝測試
11. 過程測試

檢查由人工完成的擎勘、為了配合計算機的工作尘惧,就是過程測試掩完。

12. 容量測試
13. 文檔測試
14. 兼容性測試

2.3.4 面向?qū)ο蟮能浖y試

面向?qū)ο蟮拈_發(fā)階段:

  1. 面向?qū)ο蠓治銮遗睿琌OA,Object Oriented Analysis
  2. 面向?qū)ο笤O(shè)計分别,OOD存淫,Object Oriented Design
  3. 面向?qū)ο缶幊涛ε兀琌OP,Object Oriented Programming

面向?qū)ο鬁y試:

1. OOA Test

OOA 直接映射問題空間荚虚,全面地將問題空間中實現(xiàn)功能的現(xiàn)實抽象化版述。將問題空間中的實例抽象為對象渴析,用對象的結(jié)構(gòu)反映問題空間的復(fù)雜實例和復(fù)雜關(guān)系俭茧,用屬性和服務(wù)表示實例的特性和行為。行為相對穩(wěn)定午磁,結(jié)構(gòu)則相對不穩(wěn)定迅皇。

2. OOD Test

OOD 以 OOA 為基礎(chǔ)歸納類漏隐,并建立類結(jié)構(gòu)或進一步構(gòu)造成類庫青责,實現(xiàn)分析結(jié)果對問題空間的抽象脖隶。

因 OOD 是 OOA 的進一步細化和更高層的抽象产阱。所以,OOD 與 OOA 的界限通常難以區(qū)分王暗。

3. OOP Test

考慮:

  1. 數(shù)據(jù)成員是否滿足數(shù)據(jù)封裝的要求
  2. 類是否實現(xiàn)了要求的功能
4. 面向?qū)ο蟮膯卧獪y試

考慮:

  1. 繼承的成員函數(shù)是否都不需要測試
  2. 對父類的測試是否能照搬到子類
5. 面向?qū)ο蟮募蓽y試

基于單元測試對成員函數(shù)行為正確性的保證俗壹,集成測試只關(guān)注系統(tǒng)的結(jié)構(gòu)和內(nèi)部的相互作用绷雏。

靜態(tài)測試:檢測程序結(jié)構(gòu)是否符合設(shè)計要求涎显。
動態(tài)測試:優(yōu)化測試用例期吓,減少測試工作量膘婶,使測試達到一定的覆蓋標(biāo)準(zhǔn)悬襟。

6. 面向?qū)ο蟮南到y(tǒng)測試

2.4 軟件維護

2.4.1 軟件的可維護性

1. 軟件具有可維護性

決定軟件可維護性的三個因素:

  1. 可理解性
  2. 可測試性
  3. 可修改性
2. 采用軟件工程提高軟件的可維護性

軟件系統(tǒng)的文檔可分為用戶文檔和系統(tǒng)文檔兩大類脊岳。

用戶文檔主要是描述軟件功能和使用方法割捅,至少包括:

  • 功能說明
  • 安裝文檔
  • 用戶使用手冊
  • 參考手冊
  • 管理員指南

系統(tǒng)文檔關(guān)心實現(xiàn)細節(jié)亿驾,描述系統(tǒng)需求莫瞬、設(shè)計、實現(xiàn)和測試等各個方面旁振。

3. 注重可維護性的開發(fā)過程

在開發(fā)過程中提高軟件的可維護性:

  • 在需求分析階段拐袜,應(yīng)該對將來要改進的和可能會修改的部分加以明確說明
  • 在設(shè)計階段蹬铺,應(yīng)該盡量遵循“ 高內(nèi)聚低耦合” 的模塊設(shè)計原則
  • 在編碼階段丛塌,應(yīng)該采用科學(xué)的代碼規(guī)范
  • 在測試階段印衔,應(yīng)重視測試相關(guān)文檔的的編寫
  • 在維護階段姥敛,要有嚴格的配置管理与帆,同步更新相關(guān)系統(tǒng)文檔
4. 可維護性的度量

1. 外部度量

MTTR 指標(biāo)度量。

可維護指標(biāo) M = 1 / (1 + MTTR)

2. 內(nèi)部度量

軟件復(fù)雜性相關(guān)因素:

  • 環(huán)路數(shù)
  • 軟件規(guī)模
  • 其他因素

建立經(jīng)驗?zāi)P偷牟襟E:

  1. 確定影響可維護性的若干主要因素阵翎,并為其制訂尺度
  2. 用大量的現(xiàn)有案例之剧,計算出一個包含影響因素及其權(quán)值的多項式模型
  3. 利用這個經(jīng)驗?zāi)P头治鲂碌能浖【俑鶕?jù)實際的維護活動的感受進行校準(zhǔn)
  4. 重復(fù)校準(zhǔn)過程

2.4.2 軟件維護的分類

從性質(zhì)上分為:

  • 糾錯型維護(21%)
  • 適應(yīng)型維護(25%)
  • 預(yù)防型維護(4%)
  • 完善型維護(50%)

注:括號中為 Lientz 和 Swanson 在1980年的調(diào)查結(jié)果。

2.4.3 軟件維護的工作量

維護活動分類:

  • 生產(chǎn)類
  • 非生產(chǎn)類(熟悉代碼寒跳,理解結(jié)構(gòu)等)

M = P + K^(c-d)

M - 維護總工作量
P - 生產(chǎn)類活動工作量
K - 經(jīng)驗常數(shù)
c - 軟件復(fù)雜程度
d - 維護人員對軟件的熟悉程度

影響維護工作的其他因素:

  • 維護工作本身是否規(guī)范胸完,是否按軟件工程的正確方法進行
  • 軟件系統(tǒng)的類型不同赊窥,維護工作量也有區(qū)別

按照對真實世界的依賴程度爆惧,軟件系統(tǒng)可以分為:抽象系統(tǒng)、近似系統(tǒng)和模擬系統(tǒng)锨能。

  • 硬件因素

2.4.4 軟件維護作業(yè)的實施和管理

1. 建立維護組織
2. 提出維護需求
3. 實施維護作業(yè)

每次維護活動的實施都要經(jīng)歷如下的步驟:

  • 確認維護需求
  • 制訂維護計劃
  • 編碼
  • 測試
  • 交付用戶
4. 記錄維護要素
5. 評價維護活動

2.4.5 軟件再生工程

軟件的再生工程通常包括以下六類活動:

  1. 篩選
  2. 文檔重構(gòu)
  3. 逆向工程
  4. 代碼重構(gòu)
  5. 數(shù)據(jù)重構(gòu)
  6. 重新開發(fā)

2.5 軟件開發(fā)環(huán)境

2.5.1 軟件開發(fā)環(huán)境概述

軟件開發(fā)環(huán)境扯再,SDE芍耘,Software Development Environment

集成式項目支援環(huán)境,IPSE熄阻,Integrated Project Support Environment

集成型開發(fā)環(huán)境通痴海可由工具集和環(huán)境集成機制兩部分組成。

環(huán)境集成機制:

  • 數(shù)據(jù)集成機制

數(shù)據(jù)集成機制提供統(tǒng)一的數(shù)據(jù)模式和數(shù)據(jù)接口規(guī)范秃殉,需要相互協(xié)作的工具通過這種統(tǒng)一的模式與規(guī)范交換數(shù)據(jù)坝初。

  • 控制集成機制

控制集成機制支持各工具或各開發(fā)活動之間的通信、切換钾军、調(diào)度和協(xié)同工作鳄袍,并支持軟件開發(fā)過程的描述、執(zhí)行和轉(zhuǎn)接吏恭。

  • 界面集成機制

2.5.2 軟件開發(fā)環(huán)境的功能與分類

按軟件開發(fā)模型及開發(fā)方法分類:

  • 瀑布模型
  • 演化模型
  • 螺旋模型
  • 噴泉模型
  • 結(jié)構(gòu)化方法
  • 信息模型方法
  • 面向?qū)ο蠓椒?/li>

按功能及結(jié)構(gòu)特點分類:

  • 單體型
  • 協(xié)同型
  • 分散型
  • 并發(fā)型

按應(yīng)用范圍分類:

  • 通用型
  • 專用型

按開發(fā)階段分類:

  • 前端開發(fā)環(huán)境
  • 后端開發(fā)環(huán)境
  • 軟件維護環(huán)境
  • 逆向工程環(huán)境

2.5.3 軟件開發(fā)環(huán)境的結(jié)構(gòu)

開發(fā)環(huán)境組成:

  1. 工具集
  2. 集成機制
  3. 環(huán)境信息庫

環(huán)境信息庫是軟件開發(fā)環(huán)境的核心拗小,用以儲存與系統(tǒng)開發(fā)有關(guān)的信息并支持信息的交流與共享。

  1. 過程控制和消息服務(wù)器
  2. 環(huán)境用戶界面

開發(fā)環(huán)境的結(jié)構(gòu)可分為四層:

  1. 宿主層

包括基本宿主硬件和基本宿主軟件砸泛。

  1. 核心層

包括工具組十籍、環(huán)境數(shù)據(jù)庫和會話系統(tǒng)。

  1. 基本層

包括至少一組工具唇礁,如編譯工具、調(diào)試工具等惨篱。

  1. 應(yīng)用層

以基本層為基礎(chǔ)補充某些工具盏筐,以適應(yīng)應(yīng)用軟件的要求。

2.5.4 軟件開發(fā)環(huán)境的發(fā)展

集成計算機輔助軟件設(shè)計砸讳,ICASE琢融,Integrated Computer-Aided Software Engineering

ICASE 信息中心庫功能:

  1. 數(shù)據(jù)完整性
  2. 信息共享
  3. 數(shù)據(jù)-工具集成
  4. 數(shù)據(jù)-數(shù)據(jù)集成
  5. 方法學(xué)實施
  6. 文檔標(biāo)準(zhǔn)化

ICASE 的最終目標(biāo)是實現(xiàn)應(yīng)用軟件的全自動開發(fā),即開發(fā)人員只要寫好軟件的需求規(guī)格說明書簿寂,軟件開發(fā)環(huán)境就自動完成從需求分析開始的所有的軟件開發(fā)工作漾抬,自動生成供用戶直接使用的軟件及有關(guān)文檔。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末常遂,一起剝皮案震驚了整個濱河市纳令,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌克胳,老刑警劉巖平绩,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漠另,居然都是意外死亡捏雌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門笆搓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來性湿,“玉大人纬傲,你說我怎么就攤上這事》羝担” “怎么了嘹锁?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長着裹。 經(jīng)常有香客問我领猾,道長,這世上最難降的妖魔是什么骇扇? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任摔竿,我火速辦了婚禮,結(jié)果婚禮上少孝,老公的妹妹穿的比我還像新娘继低。我一直安慰自己,他們只是感情好稍走,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布袁翁。 她就那樣靜靜地躺著,像睡著了一般婿脸。 火紅的嫁衣襯著肌膚如雪粱胜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天狐树,我揣著相機與錄音焙压,去河邊找鬼。 笑死抑钟,一個胖子當(dāng)著我的面吹牛涯曲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播在塔,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼幻件,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛔溃?” 一聲冷哼從身側(cè)響起绰沥,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎城榛,沒想到半個月后揪利,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡狠持,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年疟位,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喘垂。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡甜刻,死狀恐怖绍撞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情得院,我是刑警寧澤傻铣,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站祥绞,受9級特大地震影響非洲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜕径,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一两踏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兜喻,春花似錦梦染、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遂铡,卻和暖如春肮疗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忧便。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工族吻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人珠增。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像砍艾,于是被迫代替她去往敵國和親蒂教。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容