1. 軟體生命週期(SDLC)的六個階段
1、問題的定義及規劃
此階段是軟體開發方與需求方共同討論,主要確定軟體的開發目標及其可行性。
2、需求分析
在確定軟體開發可行的情況下,對軟體需要實現的各個功能進行詳細分析。需求分析階段是一個很重要的階段,這一階段做得好,將為整個軟體開發項目的成功打下良好的基礎。"唯一不變的是變化本身。",同樣需求也是在整個軟體開發過程中不斷變化和深入的,因此我們必須制定需求變更計劃來應付這種變化,以保護整個項目的順利進行。
3、軟體設計
此階段主要根據需求分析的結果,對整個軟體系統進行設計,如系統架構設計,資料庫設計等等。軟體設計一般分為總體設計和詳細設計。好的軟體設計將為軟體程式編寫打下良好的基礎。
4、程式編碼
此階段是將軟體設計的結果轉換成電腦可啟動並執行程式碼。在程式編碼中必須要制定統一,符合標準的編寫規範。以保證程式的可讀性,易維護性,提高程式的運行效率。
5、軟體測試
在軟體設計完成後要經過嚴密的測試,以發現軟體在整個設計過程中存在的問題並加以糾正。整個測試過程分單元測試、組裝測試以及系統測試三個階段進行。測試的方法主要有白盒測試和黑箱測試兩種。在測試過程中需要建立詳細的測試計劃並嚴格按照測試計劃進行測試,以減少測試的隨意性。
6、運行維護
軟體維護是軟體生命週期中期間最長的階段。在軟體開發完成並投入使用後,由於多方面的原因,軟體不能繼續適應使用者的要求。要延續軟體的使用壽命,就必須對軟體進行維護。軟體的維護包括錯誤修正性維護和改進性維護兩個方面。
2、軟體生命週期模型
從概念提出的那一刻開始,軟體產品就進入了軟體生命週期。在經曆需求、分析、設計、實現、部署後,軟體將被使用並進入維護階段,直到最後由於缺少維護費用而逐漸消亡。這樣的一個過程,稱為"生命週期模型"(Life Cycle Model)。
典型的幾種生命週期模型包括瀑布模型、快速原型模型、迭代模型。
瀑布模型的特點(文檔是主體),很多的問題在最後才會暴露出來。迭代模型比瀑布模型問題暴露的要早;快速原型法比瀑布模型直觀。
3.軟體測試概念
廣義概念:指軟體生存周期中所有的檢查、評審和確認工作,其中包括了對分析、設計階段,以及完成開發後維護階段的各類文檔、代碼的審查和確認
狹義概念:識別軟體缺陷的過程,即實際結果與預期結果的不一致
4.軟體測試目的
ü 測試的目的就是發現軟體中的各種缺陷
ü 測試只能證明軟體存在缺陷,不能證明軟體不存在缺陷
ü 測試可以使軟體中缺陷降低到一定程度,而不是徹底消滅
ü 以較少的用例、時間和人力找出軟體中的各種錯誤和缺陷,以確保軟體的品質
5.軟體測試原則
ü Good-enough: 一種權衡投入/產出比的原則
ü 保證測試的覆蓋程度,但窮舉測試是不可能的
ü 所有的測試都應追溯到使用者需求
ü 越早測試越好,測試過程與開發過程應是相結合的
ü 測試的規模由小而大,從單元測試到系統測試
ü 為了儘可能地發現錯誤,應該由獨立的第三方來測試
ü 不能為了便於測試擅自修改程式
ü 既應該測試軟體該做什麼也應該測試軟體不該做什麼
6.軟體測試的的重點
ü 測試案例的設計
– 測試案例的設計是整個軟體測試工作的核心
– 測試案例反映對被測對象的品質要求,決定對測試對象的品質評估
ü 測試工作的管理
– 尤其是對包含多個子系統的大型軟體系統,其測試工作涉及大量人力和物力,有效測試工作管理是保證有效測試工作的必要前提
ü 測試環境的建立
– 測試環境應該與實際測試環境一致
7.黑箱測試
ü 什麼是黑箱測試
– 又稱功能測試或資料驅動測試,是針對軟體的功能需求/實現進行測試,通過測試來檢測每個功能是否符合需求,不考慮程式內部的邏輯結構
ü 黑箱測試方法
– 功能劃分
– 等價類別劃分
– 邊界值分析
– 因果圖
– 錯誤推測等
8.什麼是白盒測試
– 白盒測試也稱結構測試或邏輯驅動測試,必須知道軟體內部工作過程,通過測試來檢測軟體內部是否按照需求、設計正常運行
– 白盒測試的主要方法
– 對應於程式的一些主要結構:語句、分支、邏輯路徑、變數;白盒測試的主要方法是:
– 語句覆蓋方法
– 分支覆蓋方法
– 邏輯覆蓋方法
9. 什麼是動態測試
動態測試需要在開發/測試環境或實際運行環境中運行軟體,並使用測試案例去尋找軟體缺陷;動態測試包括功能確認與介面測試、覆蓋率分析、效能分析、記憶體分析等
10.什麼是靜態測試
靜態測試不實際運行軟體,主要是對軟體的編程格式、結構等方面進行評估.靜態測試包括代碼檢查、程式結構分析、代碼品質度量等。它可以由人工進行,也可以藉助軟體工具自動進行
11.手工測試和自動化的測試
a.手工測試缺點在於測試工作量大,重複多,迴歸測試難以實現
b.自動化的測試利用軟體測試載入器自動實現全部或部分測試工作:管理、設計、執行和報告;節省大量的測試開銷,並能夠完成一些手工測試無法實現的測試
ü 手工完成測試的全部過程無法保證測試的科學性與嚴密性:
– 修改的缺陷越多,迴歸測試越困難
– 沒有人能向決策層提供精確的資料以度量當前的工作進度及工作效率
– 反覆測試帶來的倦怠情緒及其他人為因素使得測試標準前後不一
– 測試花費的時間越長,測試的嚴格性也就越低
ü 自動化的測試將測試人員從反覆、煩雜的測試執行中解放出來,用更多的時間進行測試設計和結果分析
ü 軟體測試不可能完全自動化
ü 不能完成所有手工測試工作
ü 無創造性且靈活性差,不能改進測試的有效性
ü 過程中可能會遇到許多意想不到的問題,特別是當軟體不穩定時
ü 測試指令碼的維護高