软件测试理论
Posted zhhzc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试理论相关的知识,希望对你有一定的参考价值。
软件工程这本书已经看完了,紧接着啃软件测试技术指南这本书啦。
1.1软件概念
软件(Soft ware)是一系列按照特定顺序组织的计算机时刻和指令的集合,软件被划分为系统软件,应用软件和介于这两者之间的中间件,在国标中对软件的定义是与计算机系统操作有关的计算机程序、规程、规则以及可能有的文件、文档及数据等。简单地说软件就是程序加文档的集合体。
1.1.1软件发展史
软件的发展大致 经历了如下5个阶段
第一阶段(1946年-1953年)
该阶段属于汇编时代,软件是用机器语言编写的,机器语言是内置在计算机电路中的指令,由0和1组成(二进制数字),由于程序最终在计算机上执行时采用的都是机器语言,所以需要用一种称之为汇编器的翻译程序,把用汇编语言编写的程序翻译成机器代码,编写汇编器程序的程序员简化了程序设计,是最初的系统程序员。
第二阶段(1954年-1964年)
该阶段软件开发使用高级程序设计语言简称高级语言,高级语言的指令形式类似于自然语言和数学语言,不仅容易学习,方便编程也提高了程序的可读性,外国人发明了JBSIC(Beginner's AII-Purpose Symmbolic Instruction Code)语言,高级语言的催生了在许多太计算机上运行同一个程序的模式,每种高级语言都配套的翻译程序(称为编译器)编译器可以把高级语言编写的语句翻译成等价的机器指令。
第三阶段(1965年-1970年)
该阶段处于结构化程序设计理论,由于用集成电路取代了晶体管处理器的运算速度得到了大幅度的提高,因此需要编写一种程序,使所有计算机资源处于计算机的控制中,这种程序就是操作系统为解决多用户,多应用共享数据的需求,使数据为尽可能多的应用程序服务,出现了数据库技术以及统一管理数据的软件系统-数据库管理系统DBMS(Database Managment System)1968年北大西洋公约组织在德国召开国际会议,讨论软件危机问题,在这个会议上正式提出并使用了“软件工程”这个名词。
4、第四阶段(1971年-1989年)
该阶段属于结构化程序时代,pascal 语言和moduca-2语言都是采用结构化程序设计规则制定BASIC这种为第三代计算机设计的语言被升级为具有结构化的版本,1973年美国人设计出了C语言,此外IBM PC开发的PC-Dos和兼容机开发的MS-DOS都成了微型计算机的标准操作系统,Macintosh机的操作系统引入了鼠标的概念和点击式的图形界面,彻底改变了人机交互的方式。
20世纪80年代,随着微电子和数字化、声像技术的发展,在计算机应用程序中开始使用图形、声音等多媒体信息,出现了多媒体计算机,这个时期出现了多用途的应用程序,典型的应用程序是电子制表-软件、文字处理软件和数据库管理软件。
5、第五阶段(1990年-至今)
该阶段软件中由三个著名事件,在计算机软件业具有主导地位的Microsoft公司的举起,模型对象的程序设计方法的出现以及万维网(World、wide.web)的普及。
(1)在这个时期的Microsoft公司的Windows操作系统在PC机市场上占有显著优势,Word成了最常用的文字处理软件,20世纪90年代中期,Microsoft公司将Word、Excel、Access和其他应用程序绑定在一个程序包中称为办公自动化软件。
(2)面向对象的程序设计方法最早在20世纪70年代开始使用的,主要是用在Smalltalk语言中,20世纪90年代面向对象程序设计逐步代替了结构化程序设计,面向对象程序设计尤其使用于规模较大、具有高度交互性-反映现实世界中动态内容的应用程序,其中Java、C++、C#等都是面向对象程序设计语言。
(3)1990年英国人创建了一个全球Internte文档中心,并创建了一套技术规则和创建格式化文档的html语言。以及能让用户访问全世界站点上信息的浏览器,此时的浏览器还很不成熟,只能显示文本。
软件体系结构从集中式的主机模式转变为分布式的客户端/服务器模式(C/S Cilent/Server的缩写)或浏览器/服务器模式(B/S Brower/server 的缩写)专家系统和人工智能软件从实验室走出来进入了实际应用、完善的系统软件。
1.1.2软件生命周期
生命周期(Life Cycle)简单说就是指一个对象的“生老病死”对一个软件产品或软件系统而言也需要经历同样的阶段,一般称为软件生命周期。软件生命周期大致分为6个阶段,如图1-1所示
1、项目计划
主要确定软件开发的总体目标,提供市场调研并给出功能、性能、接口等方面的设想,以及项目的可行性分析、同时对项目开发使用的资源、成本、进度做出评估,指定项目实施的计划(项目挤一级计划)
2、需求分析阶段
需求俗称软件的主体,所以需求分析阶段作为一个非常重用的阶段由需求分析人员和用户共同对软件需求实现的各个功能进行详细的分析并给予确切的描述,并编写软件需求说明书(Software Requirements Specification 简称SRS)
3、软件设计阶段
该阶段俗称软件的核心,主要是由系统分析组(架构师和系统分析人员)根据需求分析的结果,对整个软件系统构件的设计、编写概要设计说明书(High Level Pesign 简称HLD)接下来由数据库设计人员和开发人员根据需求说明书和概要设计说明书进行系统数据库设计以及编写详细设计说明书(Low Level Design 简称LLD)
4、程序编码阶段
把软件设计的结果转换为计算机运行的程序代码,使用RDBMS工具建立数据库,程序编码必须符合标准和编码规范以保证程序的可读性、易维护性、保证程序运行的效率。
5、软件测试阶段
此阶段主要是测试人员来检查软件是否符合客户的要求,是否达到质量的要求,在软件设计完成后、项目开发人员构件测试版本、以便测试团队进行测试、整个过程分为:单元测试、集成测试、系统测试、验收测试。
6、运行与维护阶段
此阶段是软件生命周期最长的阶段,在正式投入使用后、可能有很多原因,需要对软件进行修改、如软件错误系统升级、增加功能、提供性能。
软件测试笔记理论篇
有句话是这么说的:能动手就别哔哔,尤其是在工作节奏堪比跑马的今天,大家都推崇实干精神,能解决问题就好,去他的理论。但是无可否认的是,良好的理论素养无论是解决工作中遇到的问题,还是未来的职业发展,都帮助甚大。本文整理汇总了软件测试行业中常见的一些测试理论,供大家参考。
1、软件测试按照测试分类有:黑盒测试和白盒测试。
黑盒测试
黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。
新人入行基本上都是采用黑盒测试的方法来入门的。
白盒测试
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。
咱们以空调为例来看什么是黑盒测试,什么是白盒测试:
当一台新的空调组装完成,质监部门需要对这台空调的各个功能进行测试,比如开关机是否正常,制冷制热功能是否正常,定时功能是否正常,等等,并将测试的结果一一记录下来,如果有问题,及时反馈给设计部来解决,这就是黑盒测试的范畴。
对于空调的设计师们,他们的测试可能就会更复杂一些,除了对空调的各项功能进行测试之外,还要从空调的内在原理来分析,他们甚至会跟踪空调的内部实现代码,分析空调的各项数据状态来看是否正常运行,而不只是从表面功能来看,这就是白盒测试的范畴。
2、按照测试的阶段可以分为:单元测试、集成测试、确认测试和系统测试及验收测试
单元测试
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在像C++这样的面向对象的语言中, 要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是在独立的过程和函数,还是在Ada包的级别上进行单元测试。单元测试的原则同样被扩展到第四代语言(4GL)的开发中,在这里基本单元被典型地划分为一个菜单或显示界面。
经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。
集成测试
集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。一些局部反映不出来的问题,在全局上很可能暴露出来。
确认测试
确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。
系统测试
系统测试,英文是System Testing。是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。系统测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。对象不仅仅包括需测试的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。
验收测试
验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。
验收测试,系统开发生命周期方法论的一个阶段,这时相关的用户和独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。
在工程及其他相关领域中,验收测试是指确认一系统是否符合设计规格或契约之需求内容的测试,可能会包括化学测试、物理测试或是性能测试。在系统工程中验收测试可能包括在系统(例如一套软件系统、许多机械零件或是一批化学制品)交付前的黑箱测试。软件开发者常会将系统开发者进行的验收测试和客户在接受产品前进行的验收测试分开。后者一般会称为使用者验收测试、终端客户测试、实机(验收)测试、现场(验收)测试。在进行主要测试程序之前,常用冒烟测试作为一个此阶段的验收测试。
3、其他的测试理论还有:自动化测试、回归测试、冒烟测试、性能测试
自动化测试
一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。
自动化测试分为web自动化测试、接口自动化测试、APP自动化测试。
回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。
冒烟测试
这一术语源自硬件行业。对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。
性能测试
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
以上是关于软件测试理论的主要内容,如果未能解决你的问题,请参考以下文章