软件测试基础概念
软件:一系列按照特定顺序组织的计算机数据和指令的集合
即 程序+数据+文件
数据:必要的数据(程序的配置、多以配置文件的方式、sqlite业务数据
文档:说明书、问题处理手册、配置说明)
软件的生命周期
可行性研究----- 项目立项---- 需求分析----设计(概要和详细)----程序开发----测试(满足需求/找bug)-关版本------部署实施-----产品支持
研发模型
瀑布型
原型模型
敏捷模型
软件测试模型
v模型
W模型
集成测试中的接口测试和系统验收测试--------为测试负责部分
测试阶段
单元测试 ----单元:函数;类
单元测试是针对软件基本组成单元(软件设计的最小单位)来进行正确性检验的测试工作
目的:检测软件模块对《详细设计说明书》LLD的符合程度
集成测试
对单元之间及单元与第三方接口之间的测试,目的是验证接口是否与设计;需求相符,检测软件模块对《概要设计说明书》的符合程度
集成策略:自底向上或自顶向下逐增式
协议和端口号 通信三要素:IP 端口 协议
http:80 https:443 tdnet:23 ssh:22----------加密和不加密的两组
mysql:3306 oracle:1521 dns:53 tomcat:8080
系统测试
将已经集成好的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的测试工作
目的:通过与《需求规格说明书》作比较,发现软件与系统需求定义不符合或与之矛盾的地方
确认测试----有效性测试---一般归纳于系统测试中
验证软件的有效性,软件的功能和性能及其他特性是否与用户要求的一致
验收测试-----看甲方是否要求
交付用户部署前,进行验收
以用户为主验收组:项目组成员、用户代表或系统其他利益相关者
Alpha:内部,模拟/真实 beta:外部,内部
回归测试-----关注bug是否修复;是否引入新问题
软件在测试及其他活动中发现的缺陷经过修改后进行测试。目的是验证缺陷得到了正确的修复,同时对系统的变没有影响之前的功能
策略1
完全重复测试(完全回归)
重现执行所有在前期测试阶段建立的测试用例,来确认问题修改的正确性和修改的扩散局部影响
选择性重复测试(选择性回归)
有选择的重现执行所有在前期测试阶段建立的测试用例,来测试被修改的程序
选择性重复测试
策略2
• 覆盖修改法
即针对被修改的部分,选取或重新构造测试用例验证没有错误再次发生的用例选择方法。
• 周边影响法:
该方法不但要包含覆盖修改法确定的用例,还需要分析修改的扩散影响,对那些受到修
改间接影响的部分选择测试用例验证它没有受到不良影响。该方法比覆盖修改法更充分
一点。
• 指标达成方法:
这是一种类似于单元测试的方法,在重新执行测试前,先确定一个要达成的指标,如修
改部分代码100%的覆盖、与修改有关的接口60%的覆盖等,基于这种要求选择一个最小
的测试用例集合。
软件测试类型
功能测试
概念:
根据产品的需求规格说明书和测试需求列表,验证产品的功能实现是否符合产品的需求规格
功能测试是为了发现以下几类错误
是否有不正确或遗漏的功能
功能实现是否满足用户需求和系统设计的隐藏需求
输入能否正确接受?是否能输出正确结果?-------能不能正常输入进去
先功能后性能
性能测试
概念:
性能测试(Performance Testing)就是用来测试软件在集成系统中的运行性能的。
• 性能测试的目标是度量系统相对于预定义目标的差距。------预期目标的达成情况
• 性能测试必须要有工具支持,市面上有一些专门用于GUI或Web的性能测试工具,如Loadrunner, Jmeter, SilkPerformer, WebLoad。-----------即模拟工具
注册用户与实时登录用户存在一定比例
数据库中的信息由用户注册得来--------准备测试数据-----写脚本生成数据库的数据
性能测试收集的信息
• CPU使用情况------任务管理器中查看----CPU100%会引起故障--消息到来经过CPU,CPU进行分发
• IO使用情况--------输入输出-----网络IO和硬盘IO
• 内存使用情况-------内存的读取速度大于硬盘 内存泄漏-程序运行申请内存 遗漏释放功能,最后会充满内存
• 信道使用情况-------
• 每个模块执行时间百分比
• 一个模块等待IO完工的百分比
• 指令随时间的跟踪路径
• 每一组指令页换入和换出的次数
• 系统反应时间
• 系统吞吐量,即每个时间单元的处理数量
• 所有主要指令的单元执行时间
负载测试-----属于性能测试
负载测试是超过被测对象标准性能负荷指标下,验证系统的负载承受能力。并要求超负荷情况下,依然正常实现业务功能。
负载测试是通过不断对被测对象施加负荷,观察被测对象在不同负载下的性能表现
压力测试-----属于性能测试
压力测试(Stress Testing)的目的是调查系统在其资源超负荷的情况下的表现。尤其感兴趣的是这些对系统的处理时间有什么影响。这类测试在一种需要反常数量、频率或资源的方式下执行系统。
目标:
通过极限测试方法,发现系统在极限或恶劣环境中自我保护能力。主要验证系统的可靠性,找到系统薄弱环节。
例子:
• 成千上万的用户在同一时间登录到Internet;
• 同时引入大量的操作
容量测试
容量测试(Volume Testing)的目的是使系统承受超额的数据容量来发现它是否能够正确处理。
容量测试是面向数据的,并且它的目的是显示系统可以处理
目标内确定的数据容量。
容量测试的例子:
• 使用编译器编译一个极其庞大的源程序;
• 一个操作系统的任务队列被充满;
• 庞大的Email信息和文件充满了Internet。
安全性测试
安全测试(Security Testing)用来验证集成在系统内的保护机制是否能够在实际中保护系统不受到非法的侵入。 用来保证系统本身数据的完整性和保密性。如当受到恶意攻击时,设备的自我保护能力,病毒防护能力,自定义通信协议安全性等。广义的还包括物理安全性测试、业务安全性测试。
传输-----加密(军用;金融;)存储------表加密
一些功能性的安全性问题:
• 没有口令是否可以登录到系统中?
• 各级用户权限划分是否合理?
• 错误和文件访问是否适当地被记录?
• 系统配置数据是否能正确保存,系统故障时是否能恢复?双机----有问题切换到备用机 分布式系统--多台服务器
安全性测试内容:
一般可以从以下方面考虑安全性测试
• 系统的登录---强密码
• 用户管理
• 防火墙----硬件防火墙---设备经过防火墙接入因特网中
• 系统数据---备份
• WEB安全性,如WEB的加密,解密,数字签名等----https:ssl
• 数据库的安全性----自身安全;数据 的稳定性
• 内部通信协议------协议的保密性
• 系统防病毒测试
GUI测试
概念:
GUI测试是针对软件系统GUI界面进行的测试
GUI测试主要包括两方面的内容:
界面实现与界面设计的吻合情况;
确认界面处理的正确性。
一般业界常用的GUI自动化工具有QTP, SilkTest, QARun、QuickTestProfessional,selenium等
GUI测试对象:
•简单界面元素:指功能和属性相对比较单一的界面区域,即通常所指的各种控件
• 组合类界面元素:主要指一些复杂的界面元素,比如工具栏,组合框,表格,菜单栏等
• 完整界面(窗口):由一系列界面元素通过适当的形式组合而成的界面形式,最为常见的为各种窗口。包括各种对话框、单文档窗口、多文档父窗口,多文档子窗口等
可用性测试
可用性测试(Usability Testing)是为了检测用户在理解和使用系统方面到底有多好。主要考虑产品是否符合实际应用情况,是否符合用户习惯或特殊要求,操作方式是否方便合理、设备和用户间的交互信息是否准确易于理解、是否遵从行业习惯、外观/界面是否美观等。应涉及到所有和用户有交互的功能或子系统。这包括系统功能、系统发布、帮助文本和过程,以保证用户能够舒适地和系统交互。
一些测试人员应当关注的可用性问题:
• 过分复杂的功能或者指令;
• 困难的安装过程;
• 错误信息不准确或者过于简单;
• 用户被迫去记住太多的信息;
• 语法、格式和定义不一致
安装卸载测试
定义:
系统的可安装性测试,主要是根据软件的测试特性列表、软件安装、配置文档,设计安装过程的测试用例,发现软件在安装过程中的错误
目的:
系统可安装性测试的目的不仅是找安装软件本身的错误,而且还要找安装文档的错误。在安装软件系统时,会有多种选择,要分配和装入文件与程序,布置适当的配置,进行程序的联结。而安装测试就要找出这些安装过程出现的错误
异常测试
概念:
系统异常测试又叫系统容错和可恢复性测试,它是通过人工干预手段使系统产生软、硬件异常,通过验证系统异常前后的功能和运行状态,达到检验系统的容错、排错和恢复的能力。它是系统可靠性评价的重要手段容错处理
硬件----断电断网测试 软件-----手动杀死程序
• 系统自动处理
• 人工干预处理
注意:
• 系统异常测试还与系统的指标测试有关系,当系统需要提供的服务能力大于系统的设计指标时,也属于系统异常的情况,因此应该结合起来加以考虑
• 系统的可靠性是设计出来的,而不是测试出来的。测试出来的数据有助于为我们进行进一步的系统优化设计积累经验,设计和测试是一个互为反馈的过程
文档测试
文档测试(Documentation Testing)的目标是验证用户文档是正确的并且保证操作手册的过程能够正确工作
网络测试(接口测试)
概念:
网络测试是在网络环境下和其他设备对接,进行系统功能、性能与指标方面的测试,保证设备对接正常
内容:
网络测试考察系统的处理能力、系统兼容性、系统稳定可靠性及用户使用等方面。
如通信产品,主要进行协议测试:
• 一致性测试:检测所实现的系统与协议规范符合程度
• 性能测试:检测协议实体或系统的性能指标(数据传输率、联接时间,执行速度、吞吐量、并发数等)
• 互操作性测试:检测同一协议不同实现厂商之间,同一协议不同实现版本之间、或同一类协议不同实现版本之间互通能力和互连操作能力
• 坚固性测试:检测协议实体或系统在各种恶劣环境下运行的能力(信道被切断、通信设备掉电、注入干扰报文等)
稳定性测试
系统稳定性测试目的是评价系统在一定负荷情况下、长时间的运行情况。包括系统在一定负荷下,再增加新的业务,原有的业务是否受影响,新的业务是否能正常工作,系统资源有无泄漏,数据有无不一致的情况,系统性能是否会降下来,关键点是长时间的运行后,系统的状况如何,系统平均无故障时间MTBF是否满足系统设计要求。
兼容性测试
兼容性测试验证被测对象与硬件、其他软件之间的兼容情况
软件测试方法
测试活动从不同的角度出发,可以有不同的分类。主要用对照比较的方式讲解下面一些测试分类:
• 黑盒测试和白盒测试、灰盒测试
• 静态测试和动态测试
• 人工测试和自动化测试
还有其它一些分类方式,要搞清每一种分类的具体含义
任何软件产品都可以使用以下的两种方法之一进行测试:
参照SRS(需求说明书)直接测试计算器的加法功能。这就是黑盒测试。
• 已知产品的需求规格,但不知道其内部实现,可以进行测试证明每个需求是否实现。
参照LLD(详细设计)根据加法主函数的伪码或者流程图测试该主函数的结构。这就是白盒测试。
• 已知产品的内部实现过程,可以通过测试证明每种内部操作是否符合设计规格的要求,所有内部
成分是否已经过检查。
白盒测试
是依据被测软件分析程序内部构造,并根据内部构造设计用例,来对内部控制流程进行测试,可完全不顾程序的整体功能实现情况。程序内部构造----分支;顺序;循环
• 白盒测试是基于程序结构的逻辑驱动测试。
• 白盒测试又可以被称为玻璃盒测试、透明盒测试、开放盒测试、结构化测试、逻辑驱动测试。
白盒测试的优点
白盒测试一般在测试前期进行,通过达到一定的逻辑覆盖率指标,使得软件内部逻辑控制结构上的问题能基本得到消除
• 白盒测试能保证内部逻辑结构达到一定的覆盖程度,能够给予软件代码质量更大的保证
• 白盒测试发现问题后解决问题的成本较低
黑盒测试
把被测对象看成一个黑盒,只考虑其整体特性,不考虑其内部具体实现。
• 黑盒测试针对的被测对象可以是一个系统、一个子系统、一个模块、一个子模块、一个函数等。
• 黑盒测试又可以被称为基于规格的测试
灰盒测试
• 根据利用的被测对象信息的不同,会采用不同的方法进行测试。
• 利用被测对象的整体特性信息,采用黑盒测试方法
• 利用被测对象的内部具体实现信息,采用白盒测试方法
• 如果既利用被测对象的整体特性信息,又利用被测对象的内部具体实现信息,采用的就是灰盒测试方法。两种信息占的比例不同,相应的灰度就不同。完全是整体特性信息,就是黑盒测试,完全是内部具体实现信息,就是白盒测试
典型的灰盒测试比如集成测试和系统测试时借助log信息
静态测试和动态测试
静态测试:不运行被测试的软件系统,而是采用其他手段和技术对被测试软件进行检测的一种测试技术。例如:代码走读、文档评审、程序分析等都是静态测试的范畴。常用技术有静态分析技术。
动态测试: 按照预先设计的数据和步骤去运行被测软件系统,从而对被测软件系统进行检测的一种测试技术。常用技术有动态分析技术。
静态分析技术
• 定义:静态分析是一种不通过执行程序而分析程序执行的技术
• 功能:检查软件的表示和描述是否一致,没有冲突或者没有歧义,它瞄准的是纠正软件系统在描述、表示和规格上的错误,因此是任何进一步测试执行的前提。
主要有三种不同的程序测试可能性:
• 考虑程序是否满足编码规则,语法上是否具有一致性和完整性;
• 考虑文档描述是否规范、准确、便于查阅;
• 考虑程序和文档之间的一致性
自动化测试
意义
• 对程序新版本运行前一版本执行的测试,提高回归测试效率
• 可以运行更多更频繁的测试,比如冒烟测试
• 可以执行手工测试困难或不可能做的测试,比如大量的重复操作或者集成测试
• 更好地利用资源,比如测试仪器或者被测对象
限制
• 不能取代手工测试,自动化测试只能提高测试效率,不能提高测试有效性,即不可能发现更多缺陷
• 手工测试比自动测试发现的缺陷更多
• 对测试设计依赖性极大,测试设计的不好会遗漏问题
• 自动化测试对软件开发具有很大的依赖性,开发上出现变更可能导致前面的自动化测试完全失效
• 工具本身并不具备想象力,工具不具有智能
软件测试流程
测试需求阶段
测试计划阶段 – 测试计划
测试设计阶段 – 测试方案
测试实现阶段 – 测试用例
测试执行阶段 – 测试报告
执行和评估-----对整个测试过程做个总结与评估
主要的测试文档
1.测试计划:指明测试范围、方法、资源,以及相应测试活动的时间进度安排表的文档。
2. 测试方案:指明为完成软件或软件集成特性的测试而进行的设计测试方法的细节文档。
3. 测试用例:指明为完成一个测试项的测试输入、预期结果、测试执行条件等因素的文档。
4. 测试规程:指明执行测试时测试活动序列的文档。
5. 测试报告:指明执行测试结果的文档。
6. 测试日报:每天测试执行情况的记录和总结。
软件测试质量
软件的质量属性很多,如正确性、精确性,健壮性、可靠性、容错性、性能、易用性、安全性、可扩展性、可复用性、兼容性、可移植性、可测试性、可维护性、灵活性等。
软件质量模型