【軟體測試】軟體及其開發過程

飄走的我發表於2017-01-06

1.軟體


1.1 軟體的含義

能夠完成預定功能和效能的、可執行的指令(計算機程式);


使得程式能夠適當地操作資訊的資料結構;


描述程式的操作和使用的文件。


軟體 = 程式 + 資料 (庫) + 文件 + 服務

1.2 軟體的組成

客戶需求 - Customer Requirements
市場需求文件 - MRD (Marketing Requirement Document)
軟體規格說明書 - Specifications
技術設計文件 – Technical Design Docs
測試文件 Test Documents
線上幫助 - Online help
產品釋出註釋 - Release Notes / Read Me
產品軟體包 - Release packages
幫助檔案 Help files
 示例 Samples and examples to illustrate points
 產品支援文件 Product support information
 錯誤資訊 Error messages
 安裝手冊 Setup and installation instructions
 使用者手冊 User manual(s)
 產品標籤 Label and stickers
 產品廣告或宣傳材料  Ads and marketing material

1.3 軟體的特點

軟體則是邏輯的、知識性的產品集合,是對物理世界的一種抽象,或者是某種物理形態的虛擬化


 軟體是硬體的靈魂,硬體是軟體的基礎 


軟體,是智慧和知識的結晶 


軟體不會“磨損”,而是逐步完善 .

2.軟體開發過程的特性


2.1  軟體開發的基本過程


需求分析: 根據客戶的要求,清楚瞭解客戶需求中的產品功能、特性、效能、介面和具體規格等,然後進行分析,確定軟體產品所能達到的目標。
設計: 根據需求分析的結果,考慮如何在邏輯、程式上去實現所定義的產品功能、特性等,可以分為概要設計和詳細設計,也可分為資料結構設計、軟體體系結構設計、應用介面設計、模組設計、介面設計等。
程式設計:  將設計轉換成計算機可讀的形式。
測試: 對設計、程式設計進行驗證和使用者需求確認的過程
維護:維持軟體執行,修改軟體缺陷、增強已有功能、增加新功能、升級等。

2.2 軟體開發過程模型

 瀑布模型
 原型模型
 快速應用開發(RAD)模型
 改進的V模型
 螺旋模型
 增量模型和迭代模型
 構件組裝模型
 併發模型
 XP模型

 瀑布模型




原型模型




原型+瀑布模型




螺旋模型






2.3  UML代表軟體建模的發展趨勢


  • 敏捷開發(Agile Development) 
  • “極限程式設計”(eXtreme Programming 
  • 泛型程式設計(Generic Programming) 
  • 面向切面方面的程式設計(Aspect Oriented Programming,簡稱AOP) 
UML( Unified Modeling Language, 統一建模語言 )可以說代表軟體建模的今後5到10年的發展方向,成為物件導向技術領域內占主導地位的標準建模語言,支援從需求分析開始的軟體開發的全過程。總的來說,UML是一種定義良好、易於表示、功能強大且普遍實用的建模語言 





標準建模語言UML共定義了三大類、共12種模型圖:
  1. 結構類 Structural Diagrams:用4種模型圖描述系統應用的靜態結構,包括類圖、物件圖、元件圖和配置圖;
  2. 行為類 Behavior Diagrams:用5種模型圖描述系統動態行為的各個方面,包括用例圖、序列圖、行為圖、協作圖和狀態圖
  3. 模型管理類 Model Management Diagrams :用3種模型圖來組織和管理各種應用模型,包括軟體包、子系統、模型等

3. 軟體測試的重要性

3.1  軟體所帶來的悲劇

在上個世紀70年代,程式設計師為了節約非常寶貴的記憶體資源和硬碟空間,在儲存日期時,只保留年份的後兩位,如“1980”被存為“80”。當2000年到來的時候,問題就會出現,比如銀行存款程式在計算利息時,應該用現在的日期“2000年1月1日”減去當時存款的日期,比如“1989年1月1日” ,結果應該是21年,如果利息是3%,銀行要付給顧客每100元,大約86元利息。如果程式沒有糾正年份只儲存兩位的問題,其存款年數就變為-89年,變成顧客反要付銀行1288元的鉅額利息。
就是為了這樣一個簡單的設計缺陷,全世界付出幾十億美元。 


問題出在哪呢?

  •  沒有足夠測試
  •  缺乏測試平臺
  •  不正確的測試環境
  •  缺少整合測試
  •  缺少效能測試
  •  缺少強度測試
  •  缺少可靠性測試
3.2  測試的重要性

  1. “程式測試是為了發現錯誤而執行程式的過程”。測試的目的是發現程式中的錯誤,是為了證明程式有錯,而不是證明程式無錯。在軟體開發過程中,分析、設計與編碼等工作都是建設性的,惟獨測試是帶有“破壞性”,測試可視為分析、設計和編碼3個階段的“最終複審”,在軟體質量保證中具有重要地位。 
  2.  微軟的經驗:Windows 95/98  Windows 2000 系統的穩定性有了明顯改善,DEV:QA = 1:2 

3.3   軟體測試的目的

觀點一:
測試是程式的執行過程,目的在於發現錯誤
一個成功的測試用例在於發現至今未發現的錯誤
一個成功的測試是發現了至今未發現的錯誤的測試

這種觀點指出測試是以查詢錯誤為中心,而不是為了演示軟體的正確功能 

觀點二:
確保產品完成了它所承諾或公佈的功能,並且使用者可以訪問到的功能都有明確的書面說明
確保產品滿足效能和效率的要求
確保產品是健壯的和適應使用者環境的

確保最終交給使用者的產品功能符合使用者的需求,在產品交給使用者之前儘可能多的發現並改正問題 


相關文章