软件测试培训第二章软件测试基础2软件生命周期3什么是软件测试什么是软件测试?软件测试是在规定条件下对程序进行操作,以发现错误,对软件质量进行评估。软件是由文档、数据以及程序组成,所以软件测试就不仅仅是对程序进行测试。资料表明,60%以上的错误并不是程序错误,而是分析和设计错误,因此提倡软件全生命周期测试的理念4什么是软件质量2001年ISO9126软件满足规定或潜在用户需求的能力。软件质量包括内部质量、外部质量、使用质量三部分。软件质量的好坏要从这三部分来衡量。软件测试的目的目的:寻找软件的缺陷跟踪修正软件缺陷验证修正的软件缺陷一个好的测试用例在于能发现至今未发现的错误。一个好的测试是发现了至今未发现的错误。寻找Bug跟踪Bug验证Bug6软件测试的原则原则:所有的软件测试都应追溯到用户需求尽早进行软件测试,早期发现和报告软件缺陷完全测试是不可能的,测试需要终止充分注意测试中的群集现象全程测试,测试过程贯穿于整个项目的生命周期测试独立与开发,开发人员不能测试自己的软件测试是有组织、有计划、有步骤的,尽量避免软件测试的随意性。7软件测试对象软件包括程序、数据和文档,所以软件测试不仅仅是程序测试,还应包括数据测试和文档测试。8软件测试分类按照开发阶段1.单元测试2.集成测试3.确认测试4.系统测试5.验收测试9软件测试分类按照测试实施组织划分1.开发方测试2.用户测试3.第三方测试10软件测试分类按照测试技术划分1.白盒测试2.黑盒测试3.灰盒测试也可以分为:1.静态测试2.动态测试11软件测试过程模型V模型12软件测试过程模型W模型13软件测试过程模型H模型X模型前置测试模型14软件测试生命周期测试策略软件测试过程15测试信息流16测试信息流软件配置:软件需求规格说明、软件设计规格说明、源代码等;测试配置:测试计划、测试用例、测试程序等;测试工具:测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序、以及驱动测试的测试数据库等等。17测试信息流通过收集和分析测试结果数据,对软件建立可靠性模型利用可靠性分析,评价软件质量:•软件的质量和可靠性达到可以接受的程度;•所做的测试不足以发现严重的错误;如果测试发现不了错误,可以肯定,测试配置考虑得不够细致充分,错误仍然潜伏在软件中。18测试信息流测试结果分析:比较实测结果与预期结果,评价错误是否发生。排错(调试):对已经发现的错误进行错误定位和确定出错性质,并改正这些错误,同时修改相关的文档。修正后的文档再测试:直到通过测试为止。19软件分析设计阶段的测试工作分析设计阶段的测试工作是评审与测试相结合的过程,主要包括需求说明书评测、概要设计说明书评测、详细设计说明书评测以及软件编码规范评测等。20开发阶段的测试工作-单元测试单元测试的内容1.模块接口测试2.局部数据结构测试3.路径测试4.错误处理测试5.边界测试6.内存泄漏测试7.资源释放测试21开发阶段的测试工作-单元测试单元测试的环境:驱动模块(driver):相当于所测模块的主程序。它接收测试数据,把这些数据传送给所测模块,最后输出实测结果。桩模块(stub):也叫存根模块。用以代替所测模块调用的子模块。开发阶段的测试工作-单元测试•单元测试的工具1、静态分析工具2、NUNIT3、内存泄漏检测工具22开发阶段的测试工作-集成测试集成测试也叫组装测试或联合测试,组装时要考虑以下几个问题1、把各模块组装时,在接口间传递的数据是否会丢失。2、模块间的功能是否会互相影响。3、各个子模块组装起来,能否达到预期的要求。4、全局数据结构是否有问题。5、单个模块的误差累积起来,是否会放大,甚至崩溃。23开发阶段的测试-集成测试模块组装成为系统的方式:1.一次性组装的方式2.增殖式组装方式3.混合增殖式24开发阶段的测试-集成测试集成测试的组织和实施集成测试是一种正规测试过程,必须精心设计,并与单元测试的完成时间协调起来。在制订测试计划时,应考虑下面的因素:1.采用何种系统组装方法来进行集成测试2.集成测试过程中连接各个模块的顺序3.模块代码编制和测试进度是否与集成测试的顺序一致4.测试过程中是否需要专门的硬件设备25开发阶段的测试-集成测试集成测试完成的标志1.成功地执行了测试计划中规定的所有集成测试2.修正了所发现的错误3.测试结果通过了专门小组的评审26确认测试确认测试的任务是验证软件的功能和性能及其他特性是否与用户的要求一致。确认测试一般由独立的第三方测试机构进行,主要测试内容包括:1.进行有效性测试2.软件配置复查27系统测试系统测试是将通过集成测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际或者模拟运行环境下,对计算机系统进行一系列测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或矛盾的地方。28验收测试验收测试是以用户为主的测试。软件开发人员与质量保证人员也应参加。由用户参加设计测试用例。使用用户界面输入测试数据,并分析测试的输出结果。一般使用生产中的实际数据进行测试。29软件失效分类与管理软件失效分类1.软件错误(softwareerror)2.软件缺陷(softwaredefect)3.软件故障(softwarefault)4.软件失效(sofewarefailure)30软件失效与分类软件错误是指在软件生产期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。软件缺陷是存在与软件之中的哪些不希望或不可接受的偏差,其结果是软件运行于某一特定条件时出现软件故障。软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态,若无适当措施处理,便产生软件失效。软件失效是指软件运行时产生的一种不希望或不可接受的外部行为结果。31缺陷与错误的分布2771056设计代码其他需求32缺陷与错误严重性和优先级严重级1.严重:系统崩溃、数据丢失、数据毁坏2.较严重:操作性错误、错误结果、遗漏功能3.一般:小问题、错别字、UI布局、罕见故障4.建议:不影响使用的瑕疵或更好的实现。33缺陷与错误严重性和优先级优先级1.最高优先级:立即修复,停止进一步测试2.次高优先级:在产品发布之前必须修复3.中等优先级:如果时间允许应该修复4.最低优先级:可能会修复,也可能发布34白盒测试白盒测试也称结构测试或逻辑驱动测试。白盒测试方法包括静态测试方法和动态测试方法。静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现错误的过程。35黑盒测试黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。它注重于测试软件的功能需求,主要试图发现下列几类错误。1.功能不正确或遗漏2.界面错误3.数据库访问错误4.性能错误5.初始化和终止错误36自动化测试基本概念自动化测试就是通过测试工具或其他手段,按照测试工程师的预定计划对软件产品进行自动的测试,它是软件测试的一个重要的组成部分,能完成许多手工无法完成或者难以实现的以下测试工作。软件测试自动化涉及到测试流程、测试体系、自动化编译以及自动化测试等方面的整合37自动化测试的优势提高测试质量提高测试效率提高测试覆盖率执行手工测试不能完成的任务更好地重现软件缺陷的能力更好地利用资源增进测试人员与开发人员间的合作伙伴关系38自动化测试的局限性定制项目周期狠短的项目业务规则复杂的对象人体感观与易用性测试不稳定的软件涉及物理交互39对自动化测试的错误认识自动化测试可以完成一切测试工作自动化测试工具可适于所有的测试测试工具能使工作量大幅度降低测试工具能实现百分百的覆盖率自动化测试工具容易使用自动化测试能发现大量的新缺陷40自动化测试工具的分类负载压力测试工具功能测试工具白盒测试工具网络测试工具测试管理工具测试辅助工具41软件测试不能保证什么测试的不彻底性•经过测试后的软件不能保证没有缺陷测试的不完整性•测试无法保证覆盖到每个应该测试的内容•不可能测试到软件的全部输入与响应•不可能测试到全部的程序分支的执行路径测试作用的间接性•测试不能直接提高软件质量,软件质量的提高靠开发•测试靠早期发现缺陷,督促修正缺陷间接提高软件质量问题与思考:•如何克服软件测试的局限性?•如何提高测试本身的质量和有效性?不彻底间接性不完整42软件测试的认识误区思考与讨论软件测试就是敲敲键盘,动动鼠标很容易,谁都能干软件测试很难,无法保证测试有效性软件开发完成后进行软件测试软件发布后如果发现质量问题,那是软件测试人员的错软件自动测试效率高,将取代软件手工测试软件测试是测试人员的事情,与程序员无关项目进度吃紧时少做些测试,时间富裕时多做测试软件测试是没有前途的工作,只有程序员才是软件高手43软件测试流程项目需求项目分析项目计划项目启动会议前期准备与设置测试版本传递内部计划与进度里程碑测试周期实施测试测试管理执行测试测试项目报告测试质量保证项目收尾审查客户满意度调查最终提交测试文档44软件测试过程创建测试计划构建测试环境执行软件测试处理测试结果软件测试过程制定测试计划设计测试用例执行测试撰写测试报告修正软件缺陷回归测试测试需求分析软件需求测试概要设计测试单元测试集成测试系统测试Alpha测试Beta测试验收测试45软件测试周期获得Build冒烟测试常规测试设置环境记录缺陷修正缺陷构建Build回归测试软件测试周期46测试的启动与结束条件测试启动条件•测试计划和测试用例准备完毕•错误跟踪工具设置完毕•被测试的Build已经可用•测试的软件和硬件环境已经准备就绪测试结束条件•所有软件缺陷得到处理(最好目标:0缺陷)•在规定的时间内连续运行软件没有产生死机、系统崩溃和丢失数据的错误•完成了测试计划和测试用例指定的测试工作•软件经过“项目管理组”讨论,认为能达到客户的合理质量期望值•软件到了发布的截止日期47软件测试与开发的阶段关系软件需求文档软件验收测试软件设计规格软件系统测试软件框架设计软件集成测试软件详细设计软件单元测试软件编码PM/市场/用户PM、架构师架构师高级程序员程序员程序/测试人员测试人员测试人员用户/测试人员程序员48软件测试人际关系方法论测试组长项目经理测试经理技术支持QA人员市场销售测试工程师•换位思考,相互理解,相互尊重•就事论事,用事实说话•不指责、不嘲笑、不卖关子、不打小报告、不搞人格攻击•按时完成份内工作,报告测试进度,提出测试存在的问题和改进方法•加强交流与沟通(项目会议、电话、书面、口头交流)•软件测试人员是项目的服务员•谦虚、热情、坚持原则、讲究方式49当前软件测试界存在的主要问题轻视软件测试的重要性,公司高层领导仅停留在口头重视层面缺乏合适的软件测试人才(管理人才、技术人才、培训人才)企业缺少充分的有效地软件测试培训(基础培训、项目和产品培训)软件测试人员“跳槽”频繁,造成测试队伍不稳定,引起测试质量波动软件测试工资待遇低、工作枯燥乏味、发展空间不大,很多人员不愿做测试缺乏有效的测试方法,测试的价值没有得到应有的体现软件测试缺少计划性和组织性,流程不规范,责任不明确,相互推诿。