| 软件开发 |
| --- |
| 
核心行动 |
| * 过程
* 需求
* 设计
* 工程
* 构造（英语：）
* 测试
* 偵錯
* 部署
* 維護
 |
| 
范式与模式 |
| * 原型设计（英语：）
* 净室（英语：）
* 增量建模（英语：）
* 瀑布模型
* 敏捷软件开发
* 螺旋模型
 |
| 方法论与框架 |
| * 快速應用程式開發
* DevOps
* 极限编程
* 团队软件流程（英语：）
* 個人軟體程序
* 动态系统开发方法（英语：）
* MSF（英语：）
* Scrum
* 看板
* V模型
* FDD（英语：）
* MDD
* 迭代式开发
* 精實开发
* 统一流程（英语：）
 |
| 
支持行为 |
| * 配置管理
* 文档
* 质量保证
* 项目管理
* 用户体验
 |
| 
实践 |
| * ATDD（英语：）
* 行为驱动开发
* 持續整合
* 持續交付
* 領域驅動設計
* 结对编程
* 站会
* 测试驱动开发
 |
| 工具 |
| * 編譯器
* 偵錯器
* 性能分析
* GUI设计器（英语：）
* 建模（英语：）
* 集成开发环境
* 組建自動化
* 发布自动化（英语：）
* 测试
 |
| 
标准与知识体系 |
| * 能力成熟度模型集成
* IEEE标准
* ISO 9001
* ISO/IEC标准（英语：）
* SWEBOK（英语：）
* 项目管理知识体系
* BABOK（英语：）
 |
| * 
* 论
* 编
 |

**軟體測試**（英語：），描述一種用來促進鑑定軟體的正確性、完整性、安全性和品質的過程。依照可計算理論（計算機科學的一個支派）一個簡單的數學證明推斷出下列結果：不可能完全解決所謂「當機」，指任意電腦程式是否會進入無窮迴圈，或者罷工並產生輸出問題。換句話說，軟體測試是一種實際輸出與預期輸出間的**稽核**或者**比較**過程。

**软件测试**的经典定义是：在规定的条件下对程序进行操作，以发现程序错误，衡量軟體品質，并对其是否能满足设计要求进行评估的过程。

軟體測試有許多方法，但對複雜的產品執行有效測試不僅僅是研究過程，更是創造並嚴格遵守某些呆板步驟的大事。測試的其中一個定義：為了評估而質疑產品的過程；這裡的"質疑"是測試員試著對產品做的事，而產品以測試者腳本行為反應作為回答。雖然大部分測試的質疑過程不外乎回顧、檢查，然而「測試」這個词意味著產品動態分析──讓產品流暢運行。程式品質可能，而且通常會，隨系統不同而有差異；不過某些公認特性是共通的：可靠性、穩定性、輕便性、易於維護、以及實用性。請參照至ISO標準ISO 9126有更詳盡的說明。

測試的進程
-----

### Alpha测试

Alpha測試通常是阶段性的開發完成後所開始進行，一直持續到進入Beta測試階段前的階段。Alpha測試是一種驗證測試，在模擬的環境中以模擬的資料來執行。

在這個階段中，通常是在開發單位由開發人員與測試的測試人員，以模擬或實際操作性的方式進行驗證測試。

### Beta测试

在系統測試中通常先進行Alpha測試以驗證資訊系統符合使用者以及設計需求所期望的功能。當Alpha階段完成後，開發過程進入到Beta階段，由公眾參與的測試的階段。Beta測試可稱為確認測試，在一個真實的環境中以實際的資料來執行測試，以確認效能，系統執行有效率，系統復原與備份作業正常，透過測試讓資訊系統日後可以更趨完善。

#### 封测与公测

封閉測試（Closed Beta，常簡作**封測**或**CB**）是軟體或服務等產品在開發完成後、將公開上市前的測試過程。相對於公開測試，封閉測試的主要用途是測試軟件的功能和檢查程式錯誤等等，因此通常只提供給少數人進行測試。有些公司會要求參與測試者簽署保密協定，以避免測試的產品提前外流。MMORPG的封測結束之後，遊戲公司常會將角色資料刪除，但也有少數不会删除。

公开测试（Open Beta，常簡作**公測**或**OB**），一般常指軟體或服務等產品在正式上市前開放給不特定人試用，雖然原意是希望試用者能夠提報bug，但並不是把試用者當做真正的驗證人員。由於通常為免費性質，故常常能夠吸引到大批的試用者參與，可視為另一種行銷策略。另一方面也節省下測試人員的成本，和驗證穩定度（對於多人使用的頻寬及機器是否能負載，又稱壓力測試）的時間。

### Gamma测试

Gamma测试是一个很少被提及的非正式测试阶段，该测试阶段对应的是对"存在缺陷"产品的测试。考虑到任何产品都可以被称为"存在缺陷"的产品（测试只能发现产品中存在的问题，不能说明产品不存在问题），因此这个概念存在一定的不确定性。
对Alpha和Beta测试常见的一个誤解是「Beta测试＝黑盒测试」。实际上，Alpha和Beta测试对应在软件产品发布之前的Alpha和Beta阶段，而白盒、黑盒和灰盒测试技术是从技术和方法层面对测试的描述，不应该将这两部分概念混淆。

測試的方法
-----

軟件測試一般分为黑盒测试和白盒测試。

### 黑盒测试

条目：黑盒测试
黑盒測試（black-box testing），也称黑箱测试，是軟體測試方法，測試應用程式的功能，而不是其內部結構或運作。測試者不需具備應用程式的程式碼、內部結構和程式語言的專門知識。測試者只需知道什麼是系統應該做的事，即當鍵入一個特定的輸入，可得到一定的輸出。測試案例是依應用系統應該做的功能，照規範、規格或要求等設計。測試者選擇有效輸入和無效輸入來驗證是否正確的輸出。

此測試方法可適合大部分的軟體測試，例如整合測試（integration testing）以及系統測試（system testing）。

### 白盒测试

条目：白盒测试
白盒測試（white-box testing，又稱透明盒測試glass box testing、結構測試structural testing等）是一個測試軟體的方法，測試應用程式的內部結構或運作，而不是測試應用程式的功能（即黑箱測試）。在白盒測試時，以程式語言的角度來設計測試案例。測試者輸入資料驗證資料流在程式中的流動路徑，並確定適當的輸出，類似測試電路中的節點。

白箱測試可以應用於單元測試（unit testing）、整合測試（integration testing）和系統的軟體測試流程，可測試在整合過程中每一單元之間的路徑，或者主系統跟子系統中的測試。儘管這種測試的方法可以發現許多的錯誤或問題，它可能無法檢測未使用部分的規範。

測試的類型
-----

|  |  |
| --- | --- |
| 功能测试 | 按照测试软件的各个功能划分进行有条理的测试，在功能测试部分要保证测试项覆盖所有功能和各种功能条件组合。 |
| 系统测试 | 对一个完整的软件以用户的角度来进行测试，系统测试和功能测试的区别是，系统测试利用的所有测试数据和测试的方法都要模拟成和用户的实际使用环境完全一样，测试的软件也是经过系统集成以后的完整软件系统，而不是在功能测试阶段利用的每个功能模块单独编译后生成的可执行程序。 |
| 极限值测试 | 对软件在各种特殊条件，特殊环境下能否正常运行和软件的性能进行测试。特殊条件一般指的是软件规定的最大值，最小值，以及在超过最大、最小值条件下的测试。特殊环境一般指的是软件运行的机器处于CPU高负荷，或是网络高负荷状态下的测试，根据软件的不同，特殊环境也有过不同。 |
| 性能测试 | 性能测试是对软件性能的评价。简单的说，软件性能衡量的是软件具有的响应及时度能力。因此，性能测试是采用测试手段对软件的响应及时性进行评价的一种方式。根据软件的不同类型，性能测试的侧重点也不同。 |

### 压力测试与性能测试

压力测试常常和性能测试相混淆。它们主要不同点是，压力测试要求进行超过规定性能指标的测试。例如一个网站设计容量是100个人同时点击，压力测试就要是采用120个同时点击的条件测试。

压力测试的通常判断准则：

1. 系统能够恢复。
2. 压力过程中不要有明显性能下降。

測試的階段
-----

### 单元测试

条目：单元测试
单元测试是对软件组成单元进行测试，其目的是检验软件基本组成单位的正确性，测试的对象是软件设计的最小单位：函數。  

並且使用假資料測試不同狀況下功能使用情況，單元測試還有助於開發人員編寫更好的代碼。  

單元測試是基於code的:可讀性、可測試性，它們與開發代碼的構建方式密切相關。因此開發人員最清楚哪些測試最有意義。

### 整合测试

条目：整合测试
整合测试也称综合测试、组装测试、联合测试，将程序模块采用适当的集成策略组装起来，对系统的接口及集成后的功能进行正确性检测的测试工作。其主要目的是检查软件单位之间的接口是否正确，集成测试的对象是已经经过单元测试的模块。

### 系统测试

条目：系统测试
系统测试主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。
功能测试主要针对包括功能可用性、功能实现程度（功能流程&业务流程、数据处理&业务数据处理）方面测试。

### 回归测试

条目：回归测试
回归测试**(regression test)**指在软件维护阶段，为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件维护阶段的重要工作，有研究表明，回归测试带来的耗费占软件生命周期的1/3总费用以上。

与普通的测试不同，在回归测试过程开始的时候，测试者有一个完整的测试用例集可供使用，因此，如何根据代码的修改情况对已有测试用例集进行有效的复用是回归测试研究的重要方向，此外，回归测试的研究方向还涉及自动化工具，面向对象回归测试，测试用例优先级，回归测试用例补充生成等。

* 測試原有功能
* 測試新加入的功能是否有side effect

测试用例、测试脚本和测试场景
--------------

条目：测试用例

测试过程示例
------

### 软件测试活动

* 验收测试
* 系统测试
* 集成测试
* 单元测试
* 回归测试
* 性能测试
* 壓力測試
* 安全测试
* 安装测试
* 可用性测试
* 稳定性测试
* 易用性测试
* 移植测试

代碼覆蓋率
-----

条目：代碼覆蓋率
代碼覆蓋率原本是種白箱測試活動。目標軟體通過特殊選項或者函式館編譯並且/或者在特殊環境（程式裡每個函式都被映射回原始碼裡函式起點）下執行。這個過程允許開發員與品管員檢視系統中在正常情況下極少或從未被讀寫的部分（例如：例外處理之類）並且幫助測試員確認最重要的情況（函式點）都被測過了。

測試員可檢視代碼覆蓋率測試結果來設計測試個案、相對應的輸入或者設定組以增加重要函式的代碼覆蓋率。兩種測試員常用的代碼覆蓋率形式：陳述式覆蓋率（或稱行覆蓋率）以及路徑覆蓋率（或稱邊覆蓋率）。行覆蓋率回報到測試完成時，執行過哪些行，或者記憶體大小。邊覆蓋率回報到測試完成時，哪些分支，或者程式決定點被執行過。正如覆蓋率的「率」字所言，這兩個都以百分比為單位。

通常代碼覆蓋率的工具與函式館要求的效能、記憶體、或者其他資源開銷不為正常的軟體營運接受。因此它們通常只存在實驗室裡。又，你可能會想到軟體裡的許多類無法一一通過這些代碼覆蓋率測試，雖然代碼覆蓋程度可通過分析但不是直接測試。

有些瑕疵也會受這些工具的影響。個別來說某些竞態條件（race condition）或者類似的對即時（real time）敏感度高的操作幾乎不可能在代碼覆蓋率測試環境下偵知；相反的這類的瑕疵只會帶來更多的測試碼開銷。

自动化的测试
------

自動化測試是使用软件工具和既定程序，对软件所进行的测试活动。

参考文献
----

* 郑人杰，《软件测试技术》，清华大学出版社

参见
--

* 软件测试主题

* 程序错误
* 黑盒测试
* 白盒测试
* 软件测试模型
* 软件质量
* 軟體驗證及確認


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
软件测试 |
| --- |
|  |
| 测试途径（The "box" approach） | 
* **黑盒测试**
	+ all-pairs testing（英语：）
	+ 探索性測試
	+ 模糊测试
	+ 基于模型的测试
	+ 场景测试（英语：）
* 灰盒测试
* **白盒测试**
	+ 接口测试
	+ 突變測試（英语：）
	+ 静态程序分析

 |
|  |
| 测试层次 | 
* 验收测试
* 集成测试
* 系统测试
* 单元测试

 |
|  |
| 测试类型与技术 | 
* A/B測試
* 敏捷测试（英语：）
* 自动化测试
* 基准测试
* Concolic testing（英语：）
	+ 符号执行
* 服从性测试（英语：）
* 持续测试（英语：）
* 開發測試（英语：）
* 動態程式分析（英语：）
* 安装测试（英语：）
* 恢复测试（英语：）
* 回归测试
* 冒烟测试 (软件)
* 可用性测试
* **功能测试**
* **非功能测试（英语：）**
	+ 安全性測試
		- 渗透测试
	+ 軟體性能測試（英语：）
	+ 浸泡测试（英语：）
	+ concurrent testing（英语：）
	+ 相容性測試
	+ 负面测试（英语：）
		- 壓力測試 (軟體)
		- 破壞性測試（英语：）

 |
|  |
| 相关议题 | 
* **用户界面测试**
	+ 网页UI测试（英语：）
* 人工測試（英语：）
* Orthogonal array testing（英语：）
* Pair testing（英语：）
* 软件可靠性测试（英语：）
* 健全性测试
* 软件测试模型
* 测试类型（維基數據所列：）

 |

 |

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
軟體工程 |
| --- |
|  |
| 领域 | 
* 需求分析
* 系統分析
* 軟體設計
* 電腦編程
* 形式化方法
* 軟體測試
* 軟體部署
* 軟體維護

 |
|  |
| 概念 | 
* 数据建模
* 企业架构
* 功能规格（英语：）
* 建模语言
* 编程范型
* 软件
* 软件架构
* 程序设计方法学
* 软件开发过程
* 项目生命周期
* 软件质量
* 软件质量保证
* 軟體考古學
* 軟體驗證及確認
* 结构化分析

 |
|  |
| 導向 | 
* 敏捷
* 觀點導向
* 面向对象
* 本体论
* 面向服务
* 系统开发生命周期

 |
|  |
| 模型 | 

|  |  |
| --- | --- |
| 开发模型 | 
* 敏捷
* 迭代模式
* RUP
* Scrum
* 螺旋模型
* 瀑布模型
* XP
* V模型
* 混沌模型

 |
|  |
| 其他模型 | 
* SPICE
* CMMI
* 数据模型
* ER模型
* 功能模型（英语：）
* 信息模型
* 元建模
* 对象模型（英语：）
* 系统模型（英语：）
* 视图模型（英语：）

 |
|  |
| 建模语言 | 
* IDEF（IDEF0（英语：）·IDEF1X）
* UML
* USL（英语：）
* SysML

 |

 |
|  |
| 软件工程师 | 
* 肯特·貝克
* 葛來迪·布區
* 佛瑞德·布魯克斯
* Barry Boehm（英语：）
* 沃德·坎宁安
* 奧利-約翰·達爾
* Tom DeMarco（英语：）
* 艾兹格·迪杰斯特拉
* 马丁·福勒
* 東尼·霍爾
* Watts Humphrey（英语：）
* Michael A. Jackson（英语：）
* 伊瓦爾·雅各布森
* Craig Larman（英语：）
* James Martin（英语：）
* 伯特蘭·邁耶
* David Parnas（英语：）
* Winston W. Royce（英语：）
* 詹姆士·蘭寶
* 尼克劳斯·维尔特
* 愛德華·尤登
* Victor Basili（英语：）

 |
|  |
| 相关领域 | 
* 计算机科学
* 计算机工程
* 企业工程
* 軟體工程史
* 管理学
* 数学
* 專案管理
* 品質管理
* 风险管理
* 人因工程学
* 系统工程

 |
|  |
| 
* 分类 分类
* 共享资源页面 维基共享

 |

 |

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
计算机科学的主要领域 |
| --- |
|  |
| 注：该模板大致遵循ACM 电脑分类系统。 |
|  |
| 计算机硬件 | 
* 印刷电路板
* 外部设备
* 集成电路
* 超大规模集成电路
* 绿色计算
* 電子設計自動化

 |
|  |
| 系统架构组织 | 
* 電腦系統架構
* 嵌入式系统
* 实时计算

 |
|  |
| 网络 | 
* 网络传输协议
* 路由
* 网络拓扑
* 网络服务

 |
|  |
| 软件组织 | 
* 直譯器
* 中间件
* 虛擬機器
* 操作系统
* 软件质量

 |
|  |
| 软件符号和工具 | 
* 编程范型
* 编程语言
* 編譯器
* 领域特定语言
* 軟體框架
* 集成开发环境
* 软件配置管理
* 函式庫

 |
|  |
| 软件开发 | 
* 软件开发过程
* 需求分析
* 软件设计
* 软件部署
* 軟體維護
* 开源模式

 |
|  |
| 计算理论 | 
* 自动机
* 可计算性理论
* 計算複雜性理論
* 量子计算
* 数值计算方法
* 计算机逻辑
* 形式语义学

 |
|  |
| 算法 | 
* 算法分析
* 算法设计
* 算法效率
* 随机化算法
* 计算几何

 |
|  |
| 计算数学 | 
* 离散数学
* 信息与计算科学
* 统计学
* 数学软件
* 数理逻辑
* 集合论
* 数论
* 图论
* 类型论
* 范畴论
* 信息论
* 数值分析
* 数学分析

 |
|  |
| 信息系统 | 
* 数据库管理系统
* 電腦數據
* 企业信息系统（英语：）
* 社会性软件
* 地理信息系统
* 决策支持系统
* 过程控制
* 数据挖掘
* 數位圖書館
* 系统平台
* 數位行銷
* 万维网
* 信息檢索

 |
|  |
| 安全 | 
* 密码学
* 形式化方法
* 入侵检测系统
* 网络安全
* 信息安全

 |
|  |
| 人机交互 | 
* 计算机辅助功能
* 用户界面
* 可穿戴计算机
* 普适计算
* 虚拟现实
* 聊天機器人

 |
|  |
| 并发性 | 
* 并发计算
* 并行计算
* 分布式计算
* 多线程
* 多元處理

 |
|  |
| 人工智能 | 
* 自动推理
* 计算语言学
* 计算机视觉
* 进化计算
* 专家系统
* 自然语言处理
* 机器人学

 |
|  |
| 机器学习 | 
* 監督式學習
* 無監督學習
* 强化学习
* 交叉驗證

 |
|  |
| 计算机图形学 | 
* 计算机动画
* 可视化
* 渲染
* 修飾照片
* 圖形處理器
* 混合现实
* 虚拟现实
* 图像处理
* 图像压缩
* 实体造型

 |
|  |
| 应用计算 | 
* 电子商务
* 企业级软件
* 计算数学
* 计算物理学
* 计算化学
* 计算生物学
* 計算社會科學
* 医学信息学
* 数字艺术
* 電子出版
* 網絡戰
* 电子游戏
* 文字处理器
* 運籌學
* 教育技术学
* 生物信息学
* 认知科学
* 文件管理系统（英语：）

 |
|  |
| 
* 分类 **分类**
* 主题 **主题**
* 专题**专题**
* 共享资源页面 **维基共享**

 |

 |

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| 规范控制 編輯維基數據鏈接 | 
* NKC: ph173828

 |

 |