1软件测试基础
信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点。不论软件的生产者还是软件的使用者,均生存在竞争的环境中,软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞争中被淘汰出局。用户为了保证自己业务的顺利完成,当然希看选用优质的软件。质量不佳的软件产品不仅会使开发商的维护难度和用户的使用本钱大幅增加,还可能产生其他的责任风险,造成公司信誉下降,继而冲击股票市场。在一些关键应用 (如民航订票系统、银行结算系统、证券交易系统、自动飞行控制软件、军事防御、核电站安全控制系统等) 中使用质量有问题的软件,还可能造成灾难性的后果。软件危机曾经是软件界甚至整个计算机界最热门的话题。为了解决这场危机,软件从业职员、专家和学者做出了大量的努力。现在人们已经逐步熟悉到所谓的软件危机实际上仅是一种状况,那就是软件中有错误,正是这些错误导致了软件开发在本钱、进度和质量上的失控。有错是软件的属性,而且是无法改变的,由于软件是由人来完成的,所有由人做的工作都不会是完美无缺的。问题在于我们如何避免错误的产生和消除已经产生的错误,使程序中的错误密度达到尽可能低的程度。1.1软件测试的概念软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输进数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。软件测试就是在软件投进运行前,对软件需求分析、设计规格说明和编码的终极复审,是软件质量保证的关键步骤。1.2软件测试的目的基于不同的态度,存在着两种完全不同的测试目的。1.从用户的角度出发,普遍希望通过软件测试,暴露软件中隐躲的错误和缺陷,以考虑是否可接受该产品。2.从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。2测试用例
2.1测试用例的概念测试用例是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。
内容包括:测试目标、测试环境、输进数据、测试步骤、预期结果、测试脚本等,并形成文档。2.2测试用例的分类根据测试过程中具体涉及到问题类型及测试需求,可将测试用例分为如下:1.功能性测试用例2.界面测试用例:适用于所有测试阶段中的界面测试3.数据处理测试用例:适用于所有测试阶段中的数据处理测试4.流程测试用例:适用于所有流程性的测试5.安装测试用例:适用于所有安装测试2.3测试用例的治理1.编写用例:测试工程师根据需求规约、概要设计、具体设计等文档编写测试用例。2.用例评审:原则上用例象程序一样,要经过多次的修改才可以通过,实际工作中通常进行一次。3.用例修改:评审结束后,您需要根据评审意见进行修改,修改后通常不再进行评审。4.使用用例:执行测试用例,并记录到测试用例执行报告中。5.用例升级/维护:随着软件产品不断修改、升级,对应的用例也需要升级维护。针对同一个项目,可以根据需求的变更不断进行维护;假如是产品,用例的维护更加重要,要达到用例和产品的版本逐一对应。2.4测试用例的编制及使用1设计测试用例每个具体测试用例都将包括下列具体信息:编制人、审定人、编制日期、版本、用例类型、设计说明书编号、用例编号、用例名称、输进说明、期望结果(含判定标准)、环境要求、备注等。1. “测试用例名称”可以是不涉及到具体模块的功能描述,如“日期格式”,“非空检验”等。2. “输进说明”是功能模块接受的数据或各种操纵描述,如“输进非法的日期格式”等。3. “期望结果”是模块接受输进后应有的正常输出描述,如“提示用户修改”等,期看结果应与输进说明逐一对应。4. 测试用例用于指导执行操纵,但某些意外操纵也可导致程序错误,这些操纵称为非预期性操纵,可以先有执行报告,再后补用例。5. 测试用例的设计应考虑通用性和简洁明了。测试需求
软件测试需求是开发测试用例的依据,测试需求分解的越具体精准,表明对所测软件的了解越深,对所要进行的任务内容就越清楚,对测试用例的设计质量的帮助越大。具体的测试需求还是衡量测试覆盖率的重要指标,测试需求是计算测试覆盖的分母,没有具体的测试需求就无法有效的进行测试覆盖计算。软件测试执行阶段是由一系列不同的测试类型的执行过程组成的,每种测试类型都有其具体的测试目标和支持技术,每种测试类型都只侧重于对测试目标的一个或多个特征或属性进行测试,正确的测试类型可以给软件测试带事半功倍的效果。现有的软件测试分析技术不太成熟,对测试需求和测试类型的分析,所采用的方法主要是根据经验进行收集、整理,该方法依靠于测试设计职员的测试经验,由此方法得出的测试需求、测试类型往往导致测试用例设计不充分,测试覆盖度低,测试目的性不强,轻易遗漏等缺陷。可见,如何对测试需求进行细致的整理分析,明确测试执行时的测试类型,是一个亟待解决的题目。有鉴于此,本方法的主要目的在于提供一种软件测试需求的分析方法,可以方便、详尽的获取测试需求,明确测试执行时需要实施的测试类型。1测试需求分析的方法a)列出软件开发需求中具有可测试性的开发需求;b)对步骤a)列出的每一条开发需求,形成可测试的分层描述的测试需求;c)对步骤b)形成的每一条测试需求,从GB/T .1-2006《软件工程产品质量第1部分:质量模型》中定义的软件内部/外部质量模型来确定软件产品的质量需求;d)对步骤c)所确定的质量需求,分析测试执行时需要实施的测试类型;e)建立测试需求跟踪矩阵,对测试需求进行治理。3软件生命周期
软件生命周期(SDLC,SystemsDevelopment Life Cycle)是软件的产生直到报废的生命周期,周期内有题目定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以进步软件的质量。3.1问题的定义及规划此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。3.2需求分析在确定软件开发可行的情况下,对软件需要实现的各个功能进行具体分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。"唯一不变的是变化本身。",同样需求也是在整个软件开发过程中不断变化和深进的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。3.3软件设计此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和具体设计。好的软件设计将为软件程序编写打下良好的基础。3.4程序编码此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。3.5软件测试在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分:单元测试、组装测试、系统测试三个阶段进行。测试的方法主要有:白盒测试和黑盒测试两种。在测试过程中需要建立具体的测试计划并严格按照测试计划进行测试,以减少测试的随意性。3.6运行维护软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投进使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括:纠错性维护和改进性维护两个方面。3.7生命周期模型瀑布模型、快速原型模型、迭代模型。4测试方法(19个)
随着软件测试技术的发展,测试方法更加多样化,针对性更强;选择合适的软件测试方法可以让我们事半功倍。以下是一些常用的软件测试方法:4.1β测试_Beta测试β测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。4.2α测试_Alpha测试Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操纵环境下进行的受控测试,Alpha测试不能由该系统的程序员或测试员完成,一般由终极用户或其他职员来完成。在系统开发接近完成时对应用系统的测试。测试后,仍然会有少量的设计变更。4.3可移植性测试是指测试软件是否可以被成功移植到指定的硬件或软件平台上。4.4用户界面测试-UI测试用户界面,英文是User Interface。是指软件中的可见外观及其底层与用户交互的部分(菜单、对话框、窗口和其它控件)。用户界面测试是指测试用户界面的风格是否满足客户要求,文字是否正确,页面是否美观,文字、图片组合是否完美,操纵是否友好等等。UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操纵性测试。4.5冒烟测试冒烟测试的名称可以理解为该种测试耗时短,仅用一袋烟功夫足够了。也有人以为是形象地类比新电路板的基本功能检查。任何新电路板焊好后,先通电检查,假如存在设计缺陷,电路板可能会短路,板子冒烟了。4.6随机测试随机测试没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试。主要是根据测试者的经验对软件进行功能和性能抽查。随机测试是根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。4.7白盒测试-结构测试-逻辑驱动测试白盒测试是把测试对象看作一个打开的盒子。利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。白盒测试法的覆盖标准有:逻辑覆盖、循环覆盖、基本路径测试。其中逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。4.8黑盒测试-功能测试-数据驱动测试黑盒测试是根据软件的规格对软件进行的测试,这类测试不考虑软件内部的运作原理,因此软件对用户来说就像一个黑盒子。软件测试职员以用户的角度,通过各种输进和观察软件的各种输出结果来发现软件存在的缺陷,而不关心程序具体如何实现的一种软件测试方法。4.9回归测试回回测试是指在发生修改之后重新测试先前的测试以保证修改的正确性。理论上,软件产生新版本,都需要进行回回测试,验证以前发现和修复的错误是否在新软件版本上再次出现。4.10动态测试动态测试是指通过运行软件来检验软件的动态行为和运行结果的正确性。根据动态测试在软件开发过程中所处的阶段和作用,动态测试可分为如下几个步骤:1、单元测试 2、集成测试 3、系统测试 4、验收测试 5、回归测试4.11单元测试单元测试是最微小规模的测试;以测试某个功能或代码块。典型地由程序员而非测试员来做,由于它需要知道内部程序设计和编码的细节知识。这个工作不轻易做好,除非应用系统有一个设计很好的体系结构; 还可能需要开发测试驱动器模块或测试套具4.12集成测试集成测试是指一个应用系统的各个部件的联合测试,以决定他们能否在一起共同工作并没有冲突。部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。这种类型的测试尤其与客户服务器和分布式系统有关。一般集成测试以前,单元测试需要完成。4.13系统测试系统测试是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。4.14压力测试压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数目较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。4.15性能测试性能测试是在交替进行负荷和强迫测试时常用的术语。理想的“性能测试”(和其他类型的测试)应在需求文档或质量保证、测试计划中定义。性能测试一般包括负载测试和压力测试。4.16兼容性测试兼容测试是测试软件在一个特定的硬件/软件/操纵系统/网络等环境下的性能如何。向上兼容、向下兼容,软件兼容、硬件兼容。软件的兼容性有很多需要考虑的地方4.17边界条件测试一种黑盒测试方法,对等价类分析方法的一种补充,由长期的测试工作经验得知,大量的错误是发生在输进或输出的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。4.18静态测试静态测试指测试不运行的部分,例如测试产品说明书,对此进行检查和审阅。静态测试是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。静态测试通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不答应的递回、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。4.19等价划分测试等价划分测试是根据等价类设计测试用例的一种技术。是黑盒测试的典型方法之一,通过把被测试程序所有可能的输进数据域划分成若干部分。从每一部分中选取少数有代表性的数据作为测试用例,可有效减少测试次数,极大提高软件测试效率,缩短软件开发周期。等价类划分测试的目的就是为了在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试效果。
有效等价类和无效等价类:有效等价类中的数据代表的是一组符合需求文档的正确的有意义数据。无效等价类则正相反。
在此,软件测试的方法还很多很多,这里只列出了一些最常用也最常见的测试方法,根据软件生命周期的各个不同的阶段,选择相应的测试方法,提高软件产品的质量,让它的不完善程度降到最低,尽可能地满足用户的需求,以实现软件产品更好地价值。注:首先测试按照不同的划分规则可以分为哪些测试?
1.按照是否使用自动化工具 分为:手工测试,自动化测试
2.按照软件的质量分为:功能测试,可靠性测试,易用性,可维护测试性测试,可移植性测试
3.对测试按照阶段可以分为:单元测试,继承测试,系统测试
4.按照是否关注代码:黑盒测试,白盒测试
1.基本概念
什么是手工测试?
手工测试就是由人一个一个去输入用例,然后观察结果,和机器测试想对应,它是依靠人来查找缺陷,一般采用黑盒测试 ,可用于集成测试系统测试 中
什么是功能测试?
功能测试也叫黑盒测试或者数据驱动测试 ,只需要考虑各个功能,不需要考虑软件内部 结构及代码。一般从软件的界面,架构触发,按照需求编写测试用例,输入数据在预期结果和实际结果之间进行评测,进而使得产品达到用户的需求
什么是性能测试?
性能测试是通过自动化的测试工具模拟多种异常,峰值以及异常 负载条件来对系统的各个性能进行测试。
负载测试和压力测试都属于性能测试
通过负载测试,确定各种工作负载下系统的性能,目标是当负载 测试逐渐增加时,系统各项性能指标的变化
压力测试是通过确定一个系统的瓶颈或者不能接受的信任点,来获取提供的最大服务级别
什么是自动化测试?
自动化测试是把以人为驱动的测试,转化为机器执行的一种过程,通常在测试用例 通过评审以后由测试 人员根据测试用例中描述的规程一步步执行测试,得到实际结果和期望结果比较
补充:
1.自动化测试的前提条件
(1)软件需求变动不频繁;
(2)项目周期足够长
(3)自动化脚本可重用
2.自动化测试的前提条件
(1)自动化测试需求分析
(2)自动化测试框架的 搭建
公用环境
公用方法
公用对象
测试数据
(3)自动化脚本的编写
(4)脚本的测试与运行
几种测试的区别
1,手工测试 和功能测试 的区别
手工测试属于功能测试,手工测试是根据是否使用自动化工具划分的,功能测试是根据质量模型的六大特征划分的
2.手工测试和自动化测试的区别?
手工测试是传统的测试方法,由测试人员手工编写测试用例,测试工作量大,重复多,回归测试难以实现;而自动化测试是利用软件测试工具实现全部或部分测试工作,管理,设计 ,执行报告,节省了大量的测试开销,并且能够完成一些功能测试无法完成的测试
3.功能测试和性能测试的区别?
功能测试只是验证需求,查找功能流程中一些错误或者界面不友好等,不涉及软件内部的结构和代码;而性能测试主要对系统能够承受的压力,大数据量,处理速度等方面进行测试,是从程序内部区检查应用程序的,比如并发测试,压力测试等