《软件测试理论篇》由会员分享,可在线阅读,更多相关《软件测试理论篇(14页珍藏版)》请在金锄头文库上搜索。
1、For personal use only in study and research; not forcommercial use软件测试理论篇一、为什么软件要做软件测试纵观历史事件说明软件测试的重要性二、软件测试的概念1、测试是为了发现错误而执行程序的过程;2、在规定条件下,对程序进行操作,以发现错误,以软件质量进行评估;3、使用人工或者自动化手段,来运行或者测试某个子系统的过程,其目的在于检查它是否存在满足规定需求或弄清预期结果与实际结果之间的差别(IEEE:美国电气和电子工程师协会);正向思维:验证软件的正常工作评价一个程序或系统的特性或能力并确定是否达到预期的结果。在设计规定的环境下
2、运行软件的所有功能,直至全部通过。逆向思维:假设软件有缺陷测试是为了发现错误而针对某个程序或系统的执行过程;寻找容易犯错地方和系统薄弱环节,试图破坏系统直至找不出问题;三、软件测试的原则1、所有软件测试都要追溯到客户需求; 客户、产品、业务2、应当把“尽早地和不断地的进行软件测试”作为软件测试者的座右铭;尽早地:需求分析以后并且经过评审不断地:5轮测t3轮测试3、完全测试是不可能的,测试需要终止;避免穷举4、测试除了检查程序是否做了 “应该做的”还应该检查是否“做了不应该做的;5、严格执行测试计划,尽量避免测试的随意性测试是一个有组织、有计划、有步骤的一个活动6、杀虫剂现象缺陷会具有抗药性组内
3、互测。新人测试。7、用例包含合理和不合理的输入条件 测试用例 test case8、充分注意测试中的集群现象发现错误数目多的模块,往往意味着残留在该模块的缺陷会更多。软件测试的2/8 原则i 、 80%的缺陷产生于20%的模块;ii 、 80%的测试效果取决于20%的测试工作;iii 、修复了20%的缺陷,可以带来客户80%的满意度;9、程序员应避免检查自己的程序一方面,自己是不愿意承认自己错误;另一方面,由于思维定式开发人员很难发现自己的问题;10、妥善保存一切测试过程文档测试的效果往往要依赖文档来体现。四、软件测试的目的及对象1、软件测试是程序的执行过程,目的在于发现错误;2、测试是为了证
4、明程序有错,而不是证明程序无错误;3、一个好的测试用例在于它能发现至今未发现的错误;4、一个成功的测试是发现至今未发现的错误的测试;软件测试的最终目的是确保给用户的软件产品符合用户的要求。软件测试对象:软件=程序+数据+文档五、测试和调试的区别调试是建设性的测试是破坏性的1、 人员的不同:通常来说,测试人员是测试工程师,调试人员是是程序员2、 目的不同:测试的目的之一是发现软件店中的缺陷。而调试的主要目的是为了定位和修改软件中的缺陷;3、 过程不同:测试是从已知的条件开始,使用预先定义的过程,并且有预期的结果,并且有与之的结果。调试是从未知的条件开始,结束的过程可能不可预计4、 计划不同:测试
5、可以计划,可以预先制定测试用例和过程。工作进度可以度量。调试的过程或持续时间相对比较困难5、 对象不同:测试的对象包括软件开发过程中的程序、数据、文档,而调试的对象一般来说只有代码;六、测试的风险1、进度风险:测试的周期短而造成测试覆盖不全面;开发不能按时交付版本,导致测试周期缩短;2、人员风险测试人员不足影响测试进度:请假、调岗、离职(核心人员)测试人员经验不足,技能不够、业务不熟。3、质量风险质量的标准不统一,某些缺陷的严重等级不一致;4、成本风险人力和物力5、变更风险需求变更七、测试工程师应该具备的技能1、计算机相关的知识,能够熟练使用常用的管理工具Bugfree、禅道、bugzilla
6、、mantis、testlink、JIRA、QC (HP) QC (11.5 版本后叫 ALM )应用程序管理工具2、软件基础知识:软件工程,软件生命周期、测试理论和测试方式有较深的理解;3、软件测试技术,方法,流程,测试文档编写,能独立设计和执行测试用例,提交完整的缺陷报告单,编写测试报告。4、计算机开发语言C, C+, java, JavaScript, VBScript , shell;C 面向过程Java 面向对象、跨平台JavaScript VBScript python 脚本语言5、数据库SQLServer, Oracle, MySQL 等数据库知识Oracle (甲骨文)、MyS
7、QL、SQLServer、DB26、操作系统linux 、 windows 、 UNIX 、 MAC 等7、网络基础知识,能够独立完成测试环境的搭建;8、测试工具,能够熟练使用至少一种功能/性能自动化测试工具;自动化工具:QTP( HP )QTP11.5 改名为:UFTWinRunner Selenium: 支持 Java 、 perl、 python性能工具:LoadRunner( LR ) HP c 语言 类 c 、 QAload 、 Jmeter9、质量管理知识,如CMM , CMMI 以及 ISO9001;10、学好一门或者多门外语;八、测试工程师具备的素质1、三心:责任心、耐心、细心
8、2、二力:沟通能力、洞察力3、一个精神:团队精神九、测试工程师的职责1、配置测试环境2、编写测试计划3、设计测试用例4、执行软件测试5、提交软件缺陷6、编写缺陷报告 7、验证修正的缺陷软件研发过程、软件研发的模型I 、瀑布模型:是一种线性的、顺序的软件的开发模型三个阶段:定义阶段、开发阶段、维护阶段瀑布模型的特点:1 、线性化模型结构;2、各个阶段具有里程碑式特征3、基于文档的驱动;4、严格的阶段评审机制优点:提供了软件开发的基本框架,缺点:初始阶段指出了全部需求,不方便修改;流程不可逆11、 V 模型用户需求需求分析概要设计详细设计编码单元测试集成测试系统测试验收测试V 模型的优点:1、明确
9、了测试过程中存在的不同级别;2、说明了测试和开发的对应关系;3、 v 模型的测试策略包含了低层测试(代码测试)又包含了高层测试(需求测试)V 模型的缺点:1、它仅仅把测试过程作为需求分析,概要设计,详细设计编码之后的一个阶段,容易让人理解为测试是软件开发的最后一个阶段2、没有明确说明早期的测试,不符合尽早测试和不断地进行测试的原则(用户需求对不对要到验收测试才能发现)。3、和瀑布模型一样,流程单一不可逆;III 、 W 模型W 模型的优点:1 、符合尽早测试和不断测试的原则2、 符合实际工作中的测试要求W 模型的缺点:无法迭代,不可逆X 模型:X 模型提出了探索测试的概念(边设计用例,边测试)
10、。H 模型螺旋模型:明确风险和化解风险原型范型:问题:开发初期很难确定用户需求规格解决:用户与开发者之间的鸿沟敏捷开发:以人为核心,适应变化,迭代,循序渐进的开发方法敏捷开发的理念:1 、个体和交互,胜过过程和工具2、可以工作的软件,胜过面面俱到的文档3、客户合作,胜过合同谈判4、响应变化,胜过遵循计划二、软件的生命周期需求 设计 编码 测试 维护 升级 废弃SPEC 产品需求规格说明书三、软件的测试流程需求分析测试计划测试用例测试执行测试报告四、软件项目组的成员项目经理:( PM)架构师:程序员:测试工程师:资料工程师:配置管理员:质量监管员:( QA)技术顾问:数据库专家:软件测试分类一、
11、 按阶段划分单元测试(unit testing ) : 是指对软件中最小可测试单元进行检查和验证。I 、 对于单元测试中的单元的含义,一般来说,要根据实际情况去判断其具体含义,如 c 语言中单元指一个函数,Java 里面 指一个类,图形化软件中指一个窗口或者菜单等II 、总的来说,单元就是指人为规定的最小被测功能模块。单元测试是在软件开发过程中要进行的最低级的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。III 、单元测试包含的内容如下:入口和出口函数输入和输出信息错误处理信息部分边界数值测试集成测试(Integration testing ),也叫组装测试或者联合测试。
12、在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成子系统或者系统,进行集成测试( 集成测试测的是接口)实践表明,一些模块虽然能够单独地工作,但是并不能保证连接起来也能正常工作,程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现集成测试的方法:I 、 非增量式集成(一次性集成)优点:集成速度快;缺点:集成的难度大,同时一旦某个模块出现问题。很难定位问题和修改II 、 增量式集成:自顶而下增量式测试桩程序;自底而上增量式测试驱动程序;确认测试:目的是向未来的用户表明系统能够像预期要求的那样工作。进过集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口
13、错误也已经基本排除了,接着就应该进一步验证软件的有效性这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。系统测试(System testing )将确认的软件、计算机硬件、外设、网络等其他元索结合在一起,进行信息系统的各种组装测试和确认测试系统测试是针对整个产品系统进行测试目地是验证系统是否符合满足了需求规格的定义,找出与需求不符合或者与之矛 盾的地方,从而提出更加完善的方案系统测试发现问题之后要经过调试找出错误的原因和位置,然后进行改正,是基 于系统整体需求说明书的黑盒测试,应该覆盖系统所有联合部件 测试对象不仅仅包括测试的软件还包括软件依赖的硬件、外设甚至包括某些数据、某些
14、支持软件及接口等 测试范围:功能测试( functional testing ) : 验证软件是否符合需求规格说明书包含的功能;性能测试(performance testing ):检查系统运行时的各项性能指标( CPU内存、网络、响应时间、点击率、吞吐量、用户并发数);负载测试( load testing):性能测试的一种,不断给系统施加压力的过程,来判断系统的承受能力;压力测试( stress testing ):又称为强度测试,也是性能测试的一种,不断给系统施加压力,在饱和的状态下,再持续一段时间,来测试系统的最大承受能力稳定性测试( stability testing ):主要测试系统在一段时间内是否正常运行( 7*24H、 3*24H)兼容性测试( compatibility testing ):硬件兼容(整机兼容和外设兼容)、软件兼容(操作系统兼容windows、UNIX、LINUX、MAC不同版本之间的兼容性 、浏览器兼容性IE 、 Chrome、 FireFOx 、 opera 、 Safari 、 数据库兼容Oracle 、 MySQL、SQLServer、DB2、与其他软件中间件的兼容)容量测试( volume testing ):面向数据的测试,测试系统最大限度处理数据的能力;数据备份测试( backup testing):验证程序失效是,备份数据的能力