软件测试基础

1.1软件测试基本概念

软件一般定义为与计算机系统操作有关的计算机程序,规程,规则,以及可能有的文件、文档及数据。简单讲,软件=程序+数据+文档。

软件测试不再单纯是为了发现程序中的bug,对于构成软件的另外两个要素---数据和文档,也列入了测试的范畴。软件测试成为软件工程话过程的一部分,独立与软件开发成为软件全生命周期中不可或缺的一部分,是确保软件质量的重要手段。

1.12软件测试的定义

1973年,bill hetzel博士给软件测试定义核心思想是'测试是为了证明正确性'。

1979年,glenford j.myers所定义的核心思想是'测试是为了证明错误'。

1983年,ieee给的定义是:使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。

软件测试通俗来说就是软件在正式投入运行前,为了保证软件的正常运行,提高用户对软件的满意度而对软件开发过程中的需求分析,设计和编码过程进行的最终复审活动,是软件生存周期的一个重要的组成阶段,是软件质量保证的关键步骤。

1.1.3软件测试的目的

软件测试的目的是为了保证软件产品的最终质量。软件测试大概有下面3个目的。

(1)发现错误:测试是为了证明程序有错,而不是证明程序无错。对软件进行的测试越多,越充分,人们对使用该软件的信心就越强;但不能因为在测试活动中没有发现错误就保证软件是完全正确没有潜在缺陷的。

(2)确认与验证:确认软件的质量,其一方面是确认软件做了你所期望做的事情,另一方面是确认软件以正确的方式做了这个事情。

(3)持续改进开发及测试过程:通过分析测试过程中的问题,可以帮助改进开发工作采用的软件过程,通过缺陷分析,可以找到缺陷关联,提高再测试的缺陷发现率。

总之软件测试是以发现错误为目标的活动。

1.14软件测试原则

(1)尽早测试

一般来说,当软件工程进行到需求分析阶段时,就可以开展测试活动了。

(2)全面测试

全面测试应该从两个方面来理解,一方面测试的对象要全面,不仅是程序代码,还有数据和相关文档。另一方面是参与测试的人员要全面,开发者、测试者及用户都应该参与到测试工作中。

(3)全过程测试

应该关注整个开发过程。只有对开发过程有相当的了解,才能制定合理的测试方案及测试用例,还应该对测试的全过程进行跟踪管理。

(4)穷尽测试是不可能的

需要选择合适的测试技术来设计测试用例,用尽可能少的测试用例发现尽可能多的缺陷。

(5)pareto原则

版本发布前进行的测试所发现的大部分缺陷和软件运行失效是由于少数软件模块引起的,剪辑测试发现80%的错误很可能起源于20%的模块中。

(6)避免自己测试自己的程序

由于心理因素的影响或者程序员本身错误地理解了需求或者规范,导致程序中存在错误,一般要求由专门的测试人员进行测试,并且还要求用户参与,特别是验收阶段。

(7)严格按照测试计划实施更合理的过程

制定严格的测试计划,安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。

(8)明确软件的质量标准

只有建立了质量标准,才能根据测试结果对产品的质量进行分析和评估。

(9)注意回归测试的关联性

修改一个错误有可能引入更多的错误,所以回归测试非常必要,但要注意在回归测试中要用新的测试用例。

(10)避免'同化效应'

测试人员与开发人员在一个项目中待的时间久了,容易受开发人员观点的影响。

1.2软件测试的分类

(1)按照测试的方式分类,软件测试可以分成静态测试和动态测试。

静态测试:指不运行被测试程序本身,仅通过分析或检查源程序的语法,结构,过程、接口等来检验程序的正确性。

动态测试:指通过运行被测程序。这种方法一般由构造测试用例、执行程序、分析测试用例选取提供指导。

(2)按照测试的技术方法分类,软件测试可以分为黑盒测试、白盒测试和灰盒测试

黑盒测试:被称为功能测试、数据驱动或基于代码的测试,是通过使用整个软件或某种软件功能来严格地测试,而并没有检查程序的源代码或者很清楚的了解该软件的源代码程序内部的逻辑结构。

白盒测试:被称为结构测试、逻辑驱动测试或基于代码的测试,是通过执行测试用例对程序的源代码进行测试的方法。这种类型的测试需要从代码句法发现内部代码在算法、溢出、路径、条件中的缺点或错误,进而加以修正。

灰盒测试:是介于白盒测试与黑盒测试之间的一个测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒测试那样详细,完整,但又比黑盒测试更关注程序内部逻辑,常常是通过一些表征现象、事件、标志来判断内部的运行状态。

(3)按测试阶段或测试步骤划分,软件测试可以分为单元测试、集成测试、系统测试和验收测试。

单元测试:指软件中的最小测试单元进行检查和验收的活动。

集成测试:指在单元测试的基础上,将所有模块组装成为子系统或系统进行测试的活动。

系统测试:是在集成测试之后,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统需求说明书规定的测试活动。

验收测试:是软件产品在完成了单元测试、集成测试和系统测试之后,产品发布之前由用户所进行的软件测试活动。

(4)按测试目的划分

① 功能测试:对产品的各功能进行验证,根据功能测试用例逐项测试,检查产品是否达到用户需求的功能。
② 性能测试:通过自动化的测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试的活动。
③ 界面测试:测试用户界面的功能模块布局是否合理、整体风格是否一致、各个控件的放置位置是否符合客户使用习惯,从美学的角度衡量界面美观性的活动。
④ 安全测试:对产品进行检验以验证产品是否符合安全需求定义和产品质量标准的过程。

⑤ 可靠性测试:通过长时间运行程序以检验软件出现故障的相隔时间是否满足用户要求的测试活动。
⑥文档测试:检验软件在开发过程中产生的文档是否具有完整性、正确性、一致性、易理解性、易浏览性等特性的活动。
⑦ 兼容性测试:检查软件与软件之间、软件与硬件之间能否正确地进行交互和信息共享。

⑧ 恢复性测试:软件在发生故障后能否恢复到运行状态的测试活动。

1.3.1软件质量定义

(1)软件需求所度量软件质量的基础,与需求不一致就是质量不高。

(2)指定的标准定义了一组指导软件开发的准则,不遵守灰导致质量不高。

(3)通常,有一组没有显式描述的隐需求(如期望软件所容易维护的)。如果软件满足描述需求,但不满足隐含的需求,那么软件的质量仍然人生值得怀疑的。

1.3.2软件质量模型

1.mecall模型:mecall模型质量概念基于11个特性之上,这11个特性分别面向软件产品的运行、修正和转移。

软件测试基础_第1张图片

 

2。boehm模型:boehm软件质量模型试图通过一系列的属性指标来量化软件质量。它有质量特性、质量子特性、度量3个层次构成。

软件测试基础_第2张图片

 

3.iso/iec9126模型:主要从3个层次来分析,即内部质量,外部质量和使用质量,这三者之间是相互影响、相互依赖的。内部质量实际是从开发者角度定义质量特性,外部质量从测试者的角度定义质量特性。内部和外部规定来6个特征:功能性、可靠性、使用性、效率、可维护性和可移植性。

(1)功能性(Functionality):软件所实现的功能达到其设计规范和满足用户需求的程度强调正确性、完备性、适合性等。
  (2)可靠性(Reliability):在规定的时间和条件下,软件所能维持其正常的功能操作性能水平的程度/概率。一般用MTTF(Mean Time To Failure,平均失效前时间)或MTBF(Me Time Between Failures,平均故障间隔时间)来衡量可靠性。
  (3)使用性(Usability):对于一个软件,用户学习、操作、准备输入和理解输出所做努力的程度,如安装简单方便、容易使用、界面友好,并能适用于不同特点的用户,包括对残疾人、有缺陷的人能提供产品使用的有效途径和手段(即可达性)。
  (4)效率(Efficiency):在指定条件下,软件对操作所表现出的时间特性(如响应速度)及实现某种功能有效利用计算机资源(包括内存大小、CPU占用时间等)的程度。局部资源占用高通常是性能瓶颈存在的原因;系统可承受的并发用户数、连接数量等,需要考虑系统的可伸缩性。
  (5)可维护性(Maintainability):当一个软件投入运行应用后,需求发生变化、环境改变或软件发生错误时,运行相应修改所做努力的程度。它涉及模块化、复用性、易分析性、易修改性、易测试性等。
  (6)可移植性(Portability):软件产品从一个计算机系统或环境迁移到另一个系统或现境的容易程度。

软件测试基础_第3张图片

 

4.iso/iec 25010模型(2011):是最新的国际标准,规定软件质量应该从产品的使用质量和产品质量两方面来衡量

(1)产品质量

软件测试基础_第4张图片

 

(2)使用质量

软件测试基础_第5张图片

1.4测试工作者的必备能力

 1.技术能力
一般认为一个优秀的测试者需要具备质量意识,测试技能,测试规划能力,测试执行能力,测试分析、报告、改进能力等。
(1)质量意识。
软件测试人员作为软件质量保证的一方面,必须具备一种对于软件质量的意识,要充分认识到质量对于软件成败是一种决定性因素,只有心中有质量的这种观念和想法才能在日常工作中严谨对待所发现的每一个软件缺陷。
(2)测试技能。
从业者需要学习提高专业技能和知识,其中包括软件质量准则、测试的基本概念、专业测试标准、软件测试方法、测试工具及环境等。
(3)测试规划能力。
测试作为软件开发活动中的一个环节,从业者需要有计划能力、风险防范分析能力、计划制订、评审能力。还要对测试项目周期内人员的安排、任务的分配、协作等做一个统筹。
(4)测试执行能力。
良好的执行力表现在测试数据的准备、测试用例的编写、软件缺陷的分析、缺陷记录及处理等方面,此外还涉及一些工具,如性能、自动化工具等。当然在面对具体行业时,可能还会涉及其他的能力,如对网络硬件、准则的了解能力、测试方法,以及数据库方面的基础能力、不同操作系统操作的能力。
(5)测试分析、报告、改进能力。
对测试活动的度量能力,对缺陷发生模块的统计能力,对测试进行分析、报告及改进能力,包括测试完成后书写测试报告的能力,测试过程中的监督及改进、跟进能力。
2. 情商能力
一位好的测试者还应具有高情商,应具有良好的沟通能力、表达能力、谈判能力、评估能力和创新能力。
(1)沟通能力。
这一点对于测试人员同样重要。测试人员必须与开发人员及用户进行有效沟通,才能制订测试需求,使测试有据可依。需要以自信的态度与他人沟通,并明确传达自己的意见。果对方无法理解在报告中提及的场景,就需要直接解释以帮助其在短时间内搞清状况
(2)表达能力。
当发现缺陷后,必须有能力准确表达自己的发现。例如,在测试在线购物系统时,您可能发现成功结账后库存量并没有减少。如果这时报告称“结账系统不好用”,那绝对是种导性信息,而要把问题描述清楚,因为开发者没时间慢慢琢磨报告的实际含义。
(3)谈判能力。
自缺陷出现争议时,要正确表达自己的观点,尽可能让对方正确理解我们的意见并据此故出决策,是一种相当重要的能力。作为团队中的一分子,需要在谈判中确切纳入上下文化息、错误性质及影响等因素。
(4)评估能力。
正确的评估技能可帮助测试人员在职业生涯中走得更加平稳。在任务分配下来后,测试人员的上级会询问计划任务执行流程与所需时间。如果测试人员的评估结果与实际情况之间差异巨大,显然不利于自己的未来发展。事实上,如果这种状况不断出现,管理层甚至会对测试人员失去信心。因此,准确而有效的评估结果将让测试人员的地位大大提高。
(5)创新能力。
测试是一项包含大量突破性与创造性的工作,大家需要勇于打破既有规则,并通过多和途径思考问题。举例来说,关于一项 Bug,大家可以考量通过路径A、B与C来解决。然而路径D也许才是最重要的解决思路。作为测试专家,必须具备创新能力,从而保证不会错任何重要场景。

你可能感兴趣的:(功能测试)