软件测试基本概念
如下图为软件测试全景,我们根据如下图对软件测试有了一个大概的了解
- 测试:检验软件是否符合客户需求,达到质量要求,测试工作分为:单元测试,集成测试,系统测试
- 软件测试:IEEE(美国电子电器工程师协会)定义了软件测试的概念,通过人工或者自动的手段来运行和测试软件系统的一个过程,目的是为了检测实际结果和期望结果之间的偏差或者检验是否满足规定的需求。
狭义:检测
广义:检测(缺陷)+证明(软件可用)
- 测试的目的:软件测试的目的:是想以最少的人力,物力和时间找出软件中潜在的各种错误与缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患以及带来的商业风险。测试不能表明软件中不存在错误,只可以说明软件中存在错误。从用户角度出发,希望软件测试暴露软件中隐藏的错误和缺陷,已考虑是否接受产品;软件开发者角度:验证被测软件已经正确实现了用户的需求,确立人们对软件质量的信心。Glenford J.Myers就软件测试目的提出以下观点:
A、测试是程序的执行过程,目的在于发现错误。
B、一个好的测试用例在于能发现至今未发现的错误。
C、一个成功的测试是发现至今未发现的错误的测试
证明(可以应用,达到需求,功能可用)+检测(并不能穷举)+预防(通过检测的问题,进行数据统计分析)
Alpha测试:内测
Beta测试:公测(未发布让潜在用户测试)
- 测试和调试:
调试:在已知错误的情况下,对软件程序代码作出的一系列检查,矫正的过程。目的是为了解决当前已知的错误。
测试:未知错误的情况下,检查程序代码是否有问题。软件测试是从软件软件质量保证的角度检查程序是否有误。
- 软件测试和软件质量:
软件测试:在规定的条件下,对程序进行操作,以发现缺陷,对软件质量进行评估
软件质量:软件满足规定或潜在用户需求的能力,包括内部质量,外部质量和使用质量
- 软件测试和软件质量的区别:
质量保证:QA即英文quality assurance,中文意思是“品质保证”):主要工作是通过预防,检查与改进来保证软件质量。它所关注的是软件质量的检查与测量。着眼软件开发活动中的过程,步骤及产物,而不是对软件进行剖析进而找出问题。
软件测试:测试关心的不是过程的活动,而是对过程的产物以及开发书的软件进行剖析,测试人员要“执行”软件,对过程中的产物—开发文档和源代码进行走查,运行,以找出问题,报告质量。测试人员也必须假设软件存在问题,所以所做的操作都是为了找出更多的问题,而不仅仅验证每一件事是正确的。
- 软件测试的内容:根据测试定义,测试贯穿于整个软件生命周期中。在开发的不同阶段,需要测试不同的内容。包括文档,源代码,数据等
- 软件测试的原则:
A、所有的软件测试都应追溯到用户需求。
B、应当把“尽早地和不断地进行软件测试”作为软件测试者的座右铭。
C、完全测试是不可能的,测试需要终止。(原因1:输入量太大。原因2:输出结果太多
原因3:路径结合太多。)根据测试错误的概率以及软件可靠性要求,确定最佳停止测试时间。
D、测试无法显示软件潜在的缺陷。也就是说测试只能证明软件存在错误而不能证明软件没有错误。
E、充分注意测试的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目或者检错率成正比。
F、程序应避免检查自己的程序。
G、尽量避免测试的随意性。
- 软件测试的分类:
按开发阶段来分:单元测试(Unit Testing),集成测试(Integration Testing),系统测试 (System Testing),验收测试(Acceptance Testing 接收测试)。
按测试的实施单位来分:开发方测试,用户测试,第三方测试。
测试依据: 黑盒测试和白盒测试以及灰盒测试(SRS-------黑盒;HLD-------灰盒; LLD--------白盒)
测试对象是否运行:静态测试和动态测试
是否借助工具: 人工测试和自动化测试
- 白盒测试:知道产品内部工作过程,可通过测试来检测产品内部是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能够按照预定要求正确工作,而不管产品的性能。它包括两种测试方法:静态测试和动态测试。静态测试时不通过执行程序而进行测试的技术,其关键功能是检查软件的表示和描述是否一致,没有冲突或者产生歧义。而动态测试需要软件的执行,当软件系统在模拟的或真实的环境中执行之前,之中,之后,对软件系统行为的分析是动态测试的主要特点。
- 黑盒测试:是一种非常重要的测试策略,又称为功能测试。使用这种测试方法,将程序视为一个黑盒子。测试目标与程序内部机制和结构完全无关,而是将重点集中放在发现程序不按其规范正常运行的环境条件。
- 灰盒测试:结合了白盒与黑盒的要素。关注输出对于输入的正确性,同时也关注内部表现,但不像白盒那样详细,完整,只是表征性的。
- 测试软件生命周期:
项目计划
需求计划:SRS(Software requirment specification):软件需求规格说明书
设计:概要设计(HLD:High lever design)和详细设计(LLD:Low lever design)
编码:coding
测试:单元测试(LLD),集成测试(HLD):模块间集成,函数间集成,子系统间集成,系统测试(SRS)
运行
维护
- 软件产品:软件研发过程可以被看作是一个生产过程,在这个过程中会有产品输出,输出的产品分为两类:最终产品和中间产品,无论是中间产品还是最终产品,都可以被分为代码和文档(文档可以被分为开发文档和测试文档)
最终产品:编译后的软件,用户手册等。
中间产品:如SRS,LLD,HLD,代码等
- 软件测试技巧:结构测试相对于功能测试;动态测试相对于静态测试;手工测试相对于自动测试;压力测试;执行测试;恢复测试;操作测试;复合型测试;安全测试;
- 软件质量模型:功能;效率;可移植;可靠;可维护;易用性(备注:拿到任何项目都可以从这几个方面思考)