软件测试复习
软件测试的概念
采用手工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
软件缺陷是什么?体现在哪些地方
软件缺陷是指计算机系统或者程序中存在的任何一种破坏正常运行能力的问题 、错误、或者隐藏的功能缺陷、瑕疵,其结果会导致软件产品在某种程度上不能满足用户的需要。
-
从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题 -
从外部看,软件缺陷就是系统所需要实现的某种功能的失效或违背 -
运行出错,包括运行中断、系统崩溃、界面混乱 -
数据计算错误,导致结果不正确 -
功能、特性没有实现或部分实现 -
在某种特定条件下没能给出正确或准确的结果 -
计算的结果没有满足所需要的精度 -
用户界面不美观,如文字显示不对齐,字体大小不一致等 -
需求规格说明书的问题,如漏掉某个需求、表达不清楚或前后矛盾等 -
设计不合理,存在缺陷 -
实际结果和预期结果不一致 -
用户不能接受的其他问题,如存取时间过长,操作不方便等
软件缺陷产生的原因及不同阶段修复缺陷对成本的影响
- 技术问题
- 刚开始采用新技术,解决和处理问题不够成熟
- 由于逻辑过于复杂,很难第一次就把所有问题处理好
- 软件本身
- 采用不完善的软件开发标准或开发过程
- 文档 错误,内容不正确或拼写错误
- 团队合作
- 团队文化,如对代码质量不够重视
- 设计或编程上的一些假定或依赖性,没有得到充分的沟通
平均而言,如果在需求阶段修正一个错误的代价是1,那么,在设计阶段就是它的36,在编程阶段是它的10倍,在内部测试阶段是它的2040倍,在外部测试阶段时它的3070倍,而到了产品发布出去时,这个数字就是40100倍。
软件测试的按照目的分类及内容
- 功能测试:也称正确性测试,验证每个功能是否按照事先定义的要求那样正常工作
- 压力测试:也称负载测试,用来检查系统在不同负载下的系统运行情况,特别是高负载、极限负载下的系统运行情况,以发现系统不稳定、系统性能瓶颈、内存侧漏、CPU使用率过高等问题
- 性能测试:测定系统在不同负载条件下的系统具体的性能指标
- 可靠性测试:检验系统是否能保持长期稳定、正常的运行,如确定系统平均故障间隔时间。可靠性测试包括强壮性测试和异常处理测试
- 灾难恢复性测试:在系统崩溃、硬件故障或其他灾难发生之后,重新恢复系统和数据的能力测试
- 安全性测试:测试系统在应对非授权的内部/外部访问、有意攻击时的系统防护能力
- 兼容性测试:测试在系统不同运行环境下的实际表现
- 回归测试:为保证软件中新的变化不会对原有功能的正常使用有影响而进行的测试。
- 安装测试:在一个真实的或近似的用户环境中,验证系统是否能按照安装说明书成功地完成系统的安装,其中要考虑环境的不同设置或配置、安装文档的准确性
简述静态测试和动态测试
- 静态测试包括对软件产品的需求和设计规格说明书的评审、对程序代码的审查以及静态分析等。
- 动态测试是通过真正运行程序发现错误,通过观察代码运行过程,来获取系统行为、变量实时结果、内存、堆栈、线程以及测试覆盖度等各方面的信息,来判断系统是否存在问题,或者通过有效的测试用例,对应的输入输出关系来分析被测程序的运行情况,来发现缺陷。
软件测试层次级别及内容
- 单元测试:单元测试是在编码阶段、针对每一个程序单元而进行的测试,其测试的对象是程序系统中的最小单元——类、函数、模块或组件已实现的功能与定义的功能是否一致,以及编码中是否存在错误
- 集成测试:也称组装测试、联合测试、子系统测试,是在单元测试的基础上,按照设计要求不断进行集成而进行的相应测试,目的是发现单元之间的接口问题,如接口参数类型不匹配、接口数据在传输中丢失、数据误差不断积累等问题
- 系统测试:集成测试完成之后进行,针对应用系统进行测试。功能测试是基于产品功能说明书用户角度来对各项功能进行验证,以确认每个功能是否都能正常使用。非功能性测试包括负载测试、性能测试等。
- 验收测试:一般要求在实际的用户环境上进行,并和用户共同完成
测试工程师的素质要求
- 责任感:只有具有高度的责任感,才能经受得住进度或其他方面来得压力,始终将质量放在第一位
- 沟通能力:只有深入沟通,才能完整地理解用户的需求和待实现的产品特性,才能真正掌握产品设计和实现的技术细节
- 技术能力:软件测试归根结底还是技术性的工作,归属于研发部门,技术是基础。
- 自信心:如果缺乏信心,很容易受开发人员的影响,测试工作缺乏独立性,程序中的漏洞或缺陷容易被忽略过去,导致软件产品质量的降低
- 耐心:有些软件测试工作需要难以置信的耐心
- 怀疑精神:面对开发人员的解释,需要保持高度警惕,怀疑一切,知道自己分析结果或亲自测试后才做出决定
- 适度的好奇心:设计出那些导致系统边界出错的测试用例,往往需要一定的好奇心
- 洞察力:如果缺乏洞察力,测试功能还会受到较大的限制
- 反向思维和发散思维能力:测试工程师应想尽办法来考虑产品可能出现失败的各种方式,最大限度地暴露其存在的问题
- 记忆力:如果测试人员将以前曾经遇到的类似的错误从记忆深处挖掘出来,这对以后的测试有很大帮助。
单元测试的目标及内容
检验各单元模块是否被正确地编码,即验证代码和软件系统设计的一致性是单元测试的主要目标
- 独立执行路径的测试
- 局部数据结构的测试
- 接口测试
- 边界条件的测试
- 容错性测试
- 内存分析
单元测试的环境
驱动单元驱动被测单元,桩单元支撑被测试单元,输入测试用例得到相应的结果
测试用例阶段及其属性
- 测试用例
- 编写过程
- 组织过程
- 执行过程
- 所属的测试过程/测试任务/测试执行
- 测试环境和平台
- 测试结果
- 关联的软件错误或注释
测试用例的概念及设计要考虑的要素
测试用例是有效地发现软件缺陷的最小测试执行单元,是为了特定的目的而设计的测试数据及与之相关的测试规程的一个特定的集合
- 测试用例必须具有代表性、典型性
- 测试用例设计时,要寻求系统设计、功能设计的弱点
- 测试用例需要考虑到正确的输入,也需要考虑错误的或者异常的输入,以及需要分析怎样使得这样的错误或者异常能够发生
- 用户测试用例设计,要诸多考虑用户实际使用场景
|