1、第十章自动化测试手工测试的局限性手工测试的局限性p 通过手工测试无法做到覆盖所有代码路径;p 许多与时序、死锁、资源冲突、多线程等有关的错误通过手工测试很难捕捉到p 在系统负载、性能测试时,需要模拟大量数据、或大量并发用户等各种应用场合时,也很难通过手工测试来进行p 在进行系统可靠性时,需要模拟系统运行十年、几十年,以验证系统能否稳定运行,也是手工测试无法模拟的。p 如果有大量(几千)的测试用例,需要在短时间内完成,手工测试又怎么办呢?p 测试可以发现错误,并不能表明程序的正确性。手工测试的局限性手工测试的局限性 (2 2)p自动测试定义软件系统自动测试定义软件系统p功能规格书(Spec)只是
2、从书面上的p一套软件产品是由一套完整的可运行的测试来定义的p测试所有可能情况将遭遇测试所有可能情况将遭遇“组合爆炸组合爆炸”问题问题pWin98,WinME,WinNT,Win2k,WinXP,WinXP TablePC Ed,WinXP MediaCenter Ed,Longhorn,etcpEnglish,German,Japanese,Chinese,Arabic,ThaipOffice 97,Office2000,Office XP,Office 2003pX86 32-bit,Intel 64-bit,AMD 64-bit,Alpha,MIPSpSQL Server 6.5,SQL
3、Server 7.0,SQL Server 2000p Visual Studio 6,VS.NET,VS.NET 2003,Whidbey手工测试的局限性手工测试的局限性 (2 2)代码全部代码全部Code Path测试覆盖也几乎不可能测试覆盖也几乎不可能 每一个ifelse或switch语句就会把情况增加一倍 许多异常处理代码在正常使用中不会碰到 许多与时序,死锁,资源冲突,多线程有关的错误很难捕捉到 每一个产品都会有不同的版本外加各自的SP与QFE(Quick Fix Engineering,又称Hot fix)NT4,VS6 SP1SP5,Windows 2000 SP1-SP4 VS
4、.NET,SQL Server SP1 SP3 可重复使用的自动测试对产品未来版本与Service Pack的测试将有事半功倍的效果测试自动化项目的本质测试自动化项目的本质p定义:定义:利用GUI自动化测试工具来开发和执行测试脚本,从而验证是否满足需求p本质:本质:测试自动化项目本质上是软件开发项目p一个测试自动化项目必须具有:p清晰定义并严格实施的过程p来自组织各级的支持p周密的计划p具体的设计和架构测试自动化成本测试自动化成本/收益分析收益分析结构结构成本成本收益收益净收净收益益No Automation000Recording and Playback8.3112.7Data-drive
5、n structure using datapools8.4189.6Framework structure9.8155.2Framework/data-driven(hybrid)structure focusing on views of the application and using datapools11.6197.4自动化测试带来的好处自动化测试带来的好处1.缩短周期缩短周期 Testing cycle-Regression Testing2.Attributes of TA,Speed 速度Efficiency 效率Accuracy and Precise 准确、精确 Rele
6、ntlessness 无情3.容易实施、结果可靠4.做手工不能做手工测试手工测试 耗费时间耗费时间 低可靠性低可靠性 人力资源人力资源 不一致性不一致性 仅对于一次性的测试有益仅对于一次性的测试有益 速度速度 可重复可重复 覆盖率覆盖率 可靠可靠 可以再度使用可以再度使用 重复测试节省时间重复测试节省时间自动测试自动测试手工测试手工测试 vs.vs.自动测试自动测试正确认识测试自动化正确认识测试自动化 不现实的期望注定测试自动化的失败不现实的期望注定测试自动化的失败 测试自动化能:测试自动化能:显著降低重复手工测试的时间显著降低重复手工测试的时间 建立可靠、重复的测试,减少认为错误建立可靠、重
7、复的测试,减少认为错误 增强测试质量和覆盖率增强测试质量和覆盖率 测试自动化不能:测试自动化不能:完全替代手工测试和手工测试工程师完全替代手工测试和手工测试工程师 保证保证100%的测试覆盖率的测试覆盖率 弥补测试实践的不足弥补测试实践的不足各自特点各自特点软件测试自动化(TA)虽然具有很多优点,但只是对手工测试的一种补充,TA绝不能代替手工测试,有各自的特点:p 在系统功能逻辑测试、验收测试、适用性测试、涉及物理交互性测试时,多采用黑盒测试的手工测试方法;p 单元测试、集成测试、系统负载或性能、稳定性、可靠性测试等比较适合采用TA;p 对那种不稳定软件的测试、开发周期很短的软件、一次性的软件
8、等不适合测试自动化p 工具本身并没有想象力和灵活性,根据经验报道,自动测试只能发现15%的缺陷,而手工测试可以发现85%的缺陷;TA工具在进行功能测试时,其准确的含义是回归测试工具,因为工具不能发现更多的新问题,但可以保证对已经测试过部分进行测试的准确性和客观性自动化测试的引入和应用自动化测试的引入和应用p 找准测试自动化的切入点找准测试自动化的切入点p 把测试开发纳入整个软件开发体系把测试开发纳入整个软件开发体系p 测试自动化依赖测试流程和测试用例测试自动化依赖测试流程和测试用例p 软件测试自动化的投入较大软件测试自动化的投入较大p 进行资源的合理调度进行资源的合理调度自动化测试工作流程自动
9、化测试工作流程收集测试信息收集测试信息测试需求是什么?测试需求是什么?那里能得到用到的那里能得到用到的数据?数据?建立基本测试建立基本测试纪录用户的操作纪录用户的操作核实成功回放核实成功回放提高基本测试提高基本测试插入测试点插入测试点驱动测试数据驱动测试数据整体测试整体测试关联数据建立综合的测试场景计划计划1创建创建2核实核实 和和 提高提高3整合整合4计划自动化测试计划自动化测试纪录用户操作形纪录用户操作形成基本测试成基本测试对对 回放回放 和和 测试测试提高自动化测试提高自动化测试运行多种测试检运行多种测试检查数据流查数据流测试自动化的基本结构测试自动化的基本结构机房机房客户端客户端文件服
10、务器文件服务器数据库服务器数据库服务器WebWeb服务器服务器 控制程序控制程序拷贝测试文件拷贝测试文件拷贝测试结果拷贝测试结果分派工作分派工作分派工作分派工作查询结果查询结果BuildBuild系统编译系统编译获取测试任务、数据获取测试任务、数据更新更新显示显示软件包软件包发布指令发布指令测试自动化的原理和方法测试自动化的原理和方法p 代码分析代码分析:类似于高级编译系统,在工具中定义类类似于高级编译系统,在工具中定义类/对象/函数/变量等定义规则、语法规则等,在分析时对代码进行语法扫描,找出不符合编码规范的地方。p 捕获和回放捕获和回放:代码分析是一种白盒测试的自动化方法,代码分析是一种白盒测试的自动化方法,捕获和回放则是一种黑盒测试的自动化方法。脚本技术脚本技术p 线性脚本线性脚本,是录制手工执行的测试用例得到的脚本,这种脚本包含所有的击键、移动、输入数据等,所有录制的测试用例都可以得到完整的回放。p 结构化脚本结构化脚本,类似于结构化程序设计,具有各种逻辑结构、函数调用功能。p 共享脚本共享脚本,是指某个脚本可以被多个测试用例使用。p 数据驱动脚本数据驱动脚本,将测试输入存储在独立的(数据)文件中,而不是存储在脚本中。p 关键字驱动脚本关键字驱动脚本,是数据驱动脚本的逻辑扩张