什么是软件测试,软件测试的定义?
1.软件测试(Software Testing),其经典定义或是标准定义:在规定的条件下对程序进行操作,以发现程序错误。
2.通俗来讲,就是通过“人工”或“自动化”的手段,来测试某个程序或系统,进而检验其是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
即使是经验非常丰富的程序员,在编写代码时也很容易出现错误,这些错误也许是由于需求不明确,也许是由于设计问题,也许是编码中出现了失误等。但无论是怎样的错误,若不及时处理,都会降低软件的可靠性,严重时甚至会导致整个软件的失败。
为了排除这些错误,人们引入了软件测试的概念。通俗来说,软件测试就是为了发现程序中的错误而分析或执行程序的过程。
据研究机构统计分析表明,国外软件开发机构40%的工作量都花在软件测试上,软件测试费用占软件开发总费用的30%~50%。对于一些要求高可靠、高安全的软件,测试费用所占的比例更高。由此可见,要成功开发出高质量的软件产品,软件测试必不可少。
软件测试的主要工作是验证(Verification)和确认(Validation)
验证是保证软件正确地实现了一些特定功能的一些列活动,即保证软件以正确的方式做了该做的事。具体地讲,验证主要完成了以下任务。
(1)确定软件生存周期中一个给定阶段的产品是否达到当前阶段确立的需求。
(2)程序正确性的形式证明,即采用形式理论证明程序符合设计规约的规定。
(3)评审、审查、测试、检查、审计等,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断并进行报告。
确认(Validation)的目的是想证实在一个给定的外部环境中软件的逻辑正确性,即保证软件做了所期望的事情。
(1)静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性。
(2)动态确认,通过执行程序进行分析,测试程序的动态行为,以证实软件是否存在问题。
测试和改正活动可以在软件生命周期的任何阶段进行。然而,随着开发的不断进行,找出并修正错误的代价也会急剧增加。在需求阶段就对其进行修改,付出的代价会很少。如果代码已经编写完毕,再进行更改,则将会付出代价会大很多。
软件测试的分类
从是否关心软件内部结构和具体实现的角度来看,软件测试可以划分为一下几类。
白盒测试:需要了解内部结构和代码
黑盒测试:不关心内部结构和代码
灰盒测试:介于白盒测试和黑盒测试之间。
从是否执行程序的角度来看,软件测试可以划分为以下几类。
静态测试:测试时不执行被测试软件。
动态测试:测试时执行被测试软件。
按软件开发过程的阶段划分,软件测试可以划分为以下几类。
单元测试:测试软件的单元模块(单元模块指某个功能、某个类等)
集成测试:讲各个“单元”集成到一起测试是否能正确运行。
系统测试:测试软件是否符合系统中的各项需求。
验收测试:类似系统测试,但由用户执行。
按测试的具体目标进行划分,软件测试可以划分为以下几类。
功能测试:测试软件是否符合功能性需求,通常采用黑盒测试方法。
性能测试:测试软件在各种状态下的性能,找出性能瓶颈。
安全测试:测试该软件防止非法入侵的能力。
回归测试:在软件被修正或运行环境发生变化后进行重新测试。
兼容性测试:测试该软件与其他软件、硬件的兼容性能力。
安装测试:测试软件的安装、卸载、升级是否正常。
什么是软件测试:就是在用户使用软件之前,使用专业的技术手段或是工具,来验证软件的每一个功能或是性能,保证交付给用户使用没有问题。
你可能觉得这没有什么,试想一下,我给你们举个例子:1、比如自动驾驶系统,你到网上查查出了多少车祸。2、比如某金融系统存了1万,结果多一个0或是少一个0。想想自动测试有多么重要。
软件测试的目的:
测试是程序的执行过程,确保产品完成了它所承诺或公布的功能,确保产品满足性能和效率的要求,确保产品是健壮的和适应用户环境的,并且用户可以访问到的功能都有明确的书面说明。
软件测试的原则:
1.测试证明软件存在缺陷:无论执行怎样的测试操作都不能证明当前软件是有缺陷的。
2.不能执行穷尽测试:有些功能是无法将所有的测试情况都罗列出来,所以任何的操作都有结束的时间。
3.缺陷存在群集现象:对于软件功能来说,【28理论】核心功能只占20%,非核心内容占80%,在实际工作当中,我们会集中测试20%的核心内容,所以这个部分发现错误的几率会大于80%,因此我们就会遇到缺陷都集中在这20%功能模块里的现象。
4.某些测试需要依赖特殊的环境:eg:电池的适应温度,天气环境
5.测试应该尽早介入:为了更多的发现和更好的解决软件中的缺陷,我们追求测试工作尽早的开展。
6.杀虫剂现象:同样的一个测试用例不能重复使用多次,因为软件会产生免疫。
7.不存在缺陷谬论:任何软件不可能是完美的。
一个成功的测试用例在于发现至今未发现的错误,一个成功的测试是发现了至今未发现的错误的测试。