按测试阶段来分类
单元测试,集成测试,系统测试,验收测试
- 单元测试
1.什么是单元测试?
对软件中的进行检查和验证。
向C语言可以看成各个函数,像JAVA这种面向对象的语言可以看成每个类,像一些有界面的功能软件也可以看成单个的功能项。
2 .单元测试的原则
- 尽可能保证各个测试用例是相互独立的。
public void testlogin(){
String username,password;
uername = "test";
password = getpassFromDB(username);//产生了依赖,应该尽量避免
Boolean result = app.login(username,password);
assertTrue(result);
}
- 一般由代码的开发人员来实施,用以检验所开发的代码功能符合自己的设计要求。
3.单元测试的益处 - 能尽早发现缺陷
- 有利于重构
- 简化集成(为集成测试奠定基础)
- 文档
- 用于设计
4.单元测试的限制 - 不可能覆盖所有的执行路径,所以不可能保证捕捉到所有路径的错误。
- 每一行代码,一般需要3~5行测试代码才能完成单元测试。所以存在投入和产出的一个平衡。
5.单元测试的框架
JUunit(java)
PHPUnit(php)
nunit
CppUnit(C++) - 集成测试
1.定义:是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。
2.集成测试的主要实施方案 - Big Bang一次性集成测试
- 自顶向下
- 自底向上(针对已经组装的测试,不需要再针对上一层编写组装模块)
- 核心系统集成
- 高频集成
3.集成测试&单元测试 - 测试的对象不同
- 测试的依据不同
- 测试的方法不同
- 系统测试
定义:是将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行的一系列严格有效的测试,以发现软件的潜在问题,保证系统的正常运行。
1.关注点 - 关注系统本身的使用
- 关注系统与其他系统间的连通
- 关注系统在不同使用压力下的表现
- 关注系统在真实使用环境下的表现
2.系统测试&集成测试 - 测试对象:
集成测试:由通过了单元测试的各个模块所集成起来的控件。
系统测试:除了软件之外,还包括计算机硬件及相关的外围设备、数据采集和传输机构、支持软件、系统操作人员等整个系统。 - 测试时间:
集成测试介于单元测试和系统测试之间测试
系统测试在集成测试之后 - 测试内容
集成测试:各个单元模块之间的接口
系统测试:整个系统的功能和性能 - 测试角度:
集成测试偏于技术角度验证
系统测试偏于业务角度验证 - 验收测试
定义:也称交付测试,针对用户需求、业务流程的正式的测试,确定系统是否满足验收标准,由用户、客户或其他授权机决定是否接受系统。
细分:用户验收测试,运行验收测试,合同和规范验收测试,alpha测试,Beta测试(完全脱离开发者环境)。
按测试手段来分类
黑盒测试、白盒测试
静态测试、动态测试
手工测试、自动化测试
- 黑盒测试(一般来说,在系统测试阶段使用的更多。)
1.黑盒测试的优缺点:
优点:容易实施,不需要关注内部的实现;更贴近用户的使用角度。
缺点:测试覆盖率较低,一般只能覆盖到代码量的不到40%;
针对黑盒的自动化测试,复用率较低,维护成本较高。
2.黑盒测试主要测试什么 - 是否有不正确或遗漏的功能?
- 在接口上,输入是否能正确的接受?能否输出正确的结果?
- 是否有数据结构错误或外部信息(例如数据文件)访问错误?
- 性能是否能够满足要求?
3.黑盒测试的主要设计方案
等价类划分法,边界值分析法,错误推测法,因果图法,正交试验分析法,状态迁移图法,流程分析法。 - 白盒测试(结构化测试,透明盒测试)
主要的逻辑单位:语句、条件、条件组合、分支、路径。
1.白盒测试的优缺点
优点:迫使测试人员去仔细思考软件的实现,理解原理。
可以检测代码中的每条分支和路径;揭示隐藏在代码中的错误;对代码的测试比较彻底。
缺点:昂贵(覆盖程度高);无法检测代码中遗漏的路径和数据敏感性错误;不能直接验证需求的正确性。
2.主要的测试方法
代码检测法,静态结构分析,静态质量度量法,逻辑覆盖法,基本路径测试法(在程序控制流图的基础上)。 - 灰盒测试
定义:介于黑、白盒测试之间的,关注输出对于输入的正确性,同时也关注内部表现。 - 静态测试
定义:无须执行被测程序,而是通过评审软件文档或代码,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写程序的不足之处,减少错误出现的概率
方式:相审,走查,会议 - 动态测试
定义:动态测试是指被运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等。 - 手工测试
由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。更适用针对深度的测试和强调主观判断的测试。(众包测试,探索式测试) - 自动化测试
适用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查。(单元测试、接口测试、性能测试) - 手工测试VS自动化测试
手工测试:容易发现缺陷,容易实施,创造性、灵活性。
覆盖量化难,重复测试效率低,不一致性、可靠性低,人力资源依赖。
自动化测试:高效率、速度快;高复用性;覆盖率容易度量;准确,可靠;不知疲劳;机械、发现缺陷率低;一次性投入较大。
按测试模式来分类
瀑布模型、敏捷测试、基于脚本的测试、基于风险的测试、探索式测试等
传统的瀑布模型
项目计划→需求分析→软件设计→程序开发→软件测试→集成维护
1.优点强调需求、设计的作用;前一阶段完成后,只需关注后续阶段。
为项目提供了按阶段划分的检查点,里程碑清晰;文档规范。
2.缺点:难以适应需求的频繁变化;项目周期后端才能看到成果;强制的里程碑、完成时间点;文档动作量大。
-
V模型
-
W模型
-
X模型
-
H模型