厦门大学软件学院软件测试课程软件测试课程软件测试参考书1、《软件测试》作者:(美)RonPatton译者:周予滨姚静出版社:机械工业出版社原出版社:SAMS参考书2、《软件测试》作者:[美]PaulC.Jorgensen译者:韩柯杜旭涛出版社:机械工业出版社原出版社:CRC参考书3、《软件测试》作者:(美)RonPatton译者:张小松王钰等出版社:机械工业出版社原出版社:SAMS参考书4、《软件测试与质量管理》作者:许育诚飞思科技产品研发中心出版社:电子工业出版社参考书5、网上资料其他网上资料考试安排课程实践80%左右分组进行LD、WR、WAS等进行软件测试实践。平时考勤20%左右厦门大学软件学院软件测试课程第一章软件测试概述杨双远yangshuangyuan@xmu.edu.cn软件测试课程目标掌握软件测试的基本概念理解测试对于软件质量保障的重要性了解软件测试的基本流程和过程了解黑盒测试和白盒测试含义理解软件测试的分类和内容课程内容软件测试基本概念软件测试误区软件测试技术软件测试方法软件测试流程软件测试过程微软软件测试简介软件测试基本概念什么是软件测试软件测试的目的软件测试原则软件测试的重点软件测试质量软件测试度量软件的可测试性什么是软件测试广义的概念–指软件生存周期中所有的检查、评审和确认工作,其中包括了对分析、设计阶段,以及完成开发后维护阶段的各类文档、代码的审查和确认狭义概念–识别软件缺陷的过程,即实际结果与预期结果的不一致什么是软件测试软件测试通常包括验证(verification)和确认(validation):-验证指保证软件正确的实现了某一特定功能的一系列活动(功能性)-确认指的是保证软件的实现满足了用户需求的一系列活动(实用性)-?哪一个更重要?什么是软件测试软件的质量与可靠性:-可靠性:运行稳定、满足客户需求-质量:功能强度、可靠性、性能、客服以及性价比等-可靠性和功能,哪一个更重要?什么是软件测试软件的测试(Testing)与质量保证(QualityAssurance,QA):-软件测试:尽可能找到软件缺陷,并确保缺陷得以修复-软件质量保证:创建和执行改进软件开发过程并防止软件缺陷发生的标准和方法-?QA和QC的异同点?软件测试的目的测试的目的就是发现软件中的各种缺陷测试只能证明软件存在缺陷,不能证明软件不存在缺陷测试可以使软件中缺陷降低到一定程度,而不是彻底消灭以较少的用例、时间和人力找出软件中的各种错误和缺陷,以确保软件的质量以更少的支出(需求变更、维护、客服等成本)来谋取收入支出比达到最大化。软件测试的目标最终目的是确保软件的功能符合用户的需求,把尽可能多的问题在发布或交付前发现并改正:-确保软件完成了它所承诺或公布的功能(缺少规范的书面文档?)-确保软件满足性能的要求(界面、操作、性能)-确保软件是健壮的和适应用户环境的(哪怕不健壮,也要给出解决方案)测试的目标为软件的质量评估提供依据(项目验收)为软件质量改进和管理提供帮助(经验教训等知识转移)软件测试的原则Good-enough:一种权衡投入/产出比的原则:选择测试保证测试的覆盖程度,但穷举测试是不可能的:有限测试所有的测试都应追溯到用户需求越早测试越好,测试过程与开发过程应是相结合的测试的规模由小而大,从单元测试到系统测试为了尽可能地发现错误,应该由独立的第三方来测试不能为了便于测试擅自修改程序既应该测试软件该做什么也应该测试软件不该做什么传统的瀑布模型中软件测试学仅处于运行维护阶段之前软件测试的规律木桶原理:–软件质量的关键因素是分析、设计和实现,测试应该是融于其中的补充检查手段,其他管理、支持、甚至文化因素也会影响最终软件的质量(例如:老板不诚信)–测试是提高软件质量的必要条件,最直接、最快捷的手段,但决不是一种根本手段–2个角度:木桶原理与反木桶原理?软件测试的规律Bug的80-20原则–在分析、设计、实现阶段的复审和测试工作能够发现和避免80%的Bug(提前测试)–而系统测试又能找出其余Bug中的80%–最后的5%的Bug可能只有在用户的大范围、长时间使用后才会曝露出来软件测试的规律80/20原则1.80%的工程量用在20%的需求上(关键需求)2.80%的开发成本花费在20%的部件上3.80%的错误是由20%的部件引起的4.80%的延期或返工是由20%的变更造成的5.80%的系统资源是由20%的部件消耗的6.80%的进度是由20%的人完成的软件测试的重点测试用例的良好设计–测试用例的设计是整个软件测试工作的核心–测试用例反映对被测对象的质量要求,决定对测试对象的质量评估软件测试的重点测试工作的管理–尤其是对包含多个子系统的大型软件系统,其测试工作涉及大量人力和物力,有效的测试工作管理是保证有效测试工作的必要前提测试环境的建立–测试环境应该与实际测试环境一致软件测试的质量软件测试可以发现以下软件缺陷:–软件实现的功能不正确–“缺少”:软件没有实现某项功能–“多余”,软件实现的某项功能在需求中没有定义发现第一类软件缺陷的过程---“验证”发现后两类软件缺陷的过程---“确认”“验证”和“确认”哪一个更重要?“确认”有必要吗?软件测试度量1、测试覆盖率–有多少需求、代码已经被测试了2、缺陷发现率–缺陷是何时被发现,并且有多少缺陷已经被发现。缺陷可以根据严重性来分类。需记录以下值:缺陷数目缺陷的严重性软件测试度量3、测试成功率:–有多少测试已经通过了,并且有多少是运行正常的?需记录以下值:已通过的测试用例的数目可利用的测试用例的数目软件测试的分类典型的软件测试类型–功能测试–可靠性测试–容错性测试–恢复测试–易用性测试–性能测试–可维护性测试–可移植性测试–安全性测试–用户文档测试课程内容软件测试基本概念软件测试误区软件测试技术软件测试方法软件测试流程软件测试过程微软软件测试简介软件测试误区软件开发完成后进行软件测试;软件测试=程序测试;软件质量问题是测试人员的错误,软件发布后如果发现问题,那是软件测试人员的错;测试技术要求不高,比编程容易,随便找一个人就可以了;测试跟着开发动,有时间就多测,没时间就少测;测试是测试人员的事,与开发人员无关;软件测试是没有前途的工作,只有程序员才是软件高手;测试要执行所有可能的输入;好的测试一定要使用很多的测试工具。软件测试工程师素质基本素质:沟通能力、自信心、幽默感、记忆力挖掘以往错误、耐心、怀疑精神、自我督促洞察力发现重点广泛的经验表达能力、问题描述能力会提问,会寻求Help逻辑思维能力团队协作能力处理日常事务的能力和处理突发事件的能力软件测试工程师素质专业素质:对于系统测试,把握需求是第一位的。对产品熟练,能够快速熟悉新的产品需求,很强的需求理解能力显得很重要;(业务素质、需求分析能力)测试基础:明确测试流程中各个阶段的工作,对测试的认知程度,决定了测试流程管理的规范性,测试工作的质量;测试方案的分析设计能力、测试案例的设计能力(测试案例的覆盖率、优先级等);测试工具的使用(包括测试管理和测试执行工具,也包括开发工具的能力);编程能力,数据库知识,网络知识,操作系统知识;团队协作能力,与各个小组之间的沟通能力,以及管理测试工作的能力。软件测试工程师分类测试工程师一般分为两类:测试工具软件开发工程师和软件测试工程师。------测试工具软件开发工程师主要负责编写测试工具代码,并利用测试工具对软件进行测试或开发测试工具为软件测试工程师服务。------软件测试工程师主要负责理解产品的功能要求,然后对其进行测试,检查软件有没有错误,决定软件是否具有稳定性,并写出相应的测试规范和测试案例。课程内容软件测试基本概念软件测试误区软件测试技术软件测试方法软件测试流程软件测试过程微软软件测试简介软件测试技术软件测试技术静态测试代码走查动态测试技术评审代码审查黑盒测试白盒测试功能测试性能测试攻击测试回归测试语句覆盖分支覆盖路径覆盖口腔管理系统病人卡片电子病历健康档案财务管理器械管理追踪病人卡片B病历卡片Q修复卡片1正畸卡片N健康档案M病史卡片护理卡片病历卡片Q主述病史检查X光片初次诊断治疗计划治疗纪录病历卡片P主述病史检查X光片初次诊断治疗计划治疗纪录护理卡片A护理1护理2护理3护理4护理5护理卡片B护理1护理2护理3护理4护理5其它卡片系统病人卡片A病历卡片P修复卡片1正畸卡片R健康档案N病史卡片护理卡片其它卡片系统牙医管理软件建设规划图思考:1、如何实现这种复杂的数据库关系?现在的关系型数据库能够实现吗?主要困难是什么?2、统计某个口腔疾病患者的某次医疗记录是简单的。但是如果要统计某一个病人全年的医疗记录,将会遭遇如下困难:(1)需要花费2周编写复杂的SQL语句,如果数据库内容有改变,调试这些sql语句困难。(2)因为共享数据库,这些长时间的读操作和运算操作势必影响到日常其他医生工作。如何解决?软件测试技术黑盒测试/白盒测试---从要不要看代码部分来区分动态测试/静态测试--从要不要运行软件来区分黑盒测试和白盒测试什么是黑盒测试(Black-boxTesting)–功能测试,数据驱动测试:是在已知软件产品具有何种功能的前提下,用来检验每个功能是否能够正常使用的一个测试方法。–测试的方法和原理:把程序看成是一个不能打开的黑盒子,在不考虑程序内部结构的情况下,测试人员用操作接口的方式进行测试,检查程序能否按照需求指定的功能接收输入数据产生正确的结果。黑盒测试主要在开发后期进行。基于对需求、设计、用户要求的理解–黑盒测试关注输入、输出的信息域,而不关注软件的内部结构–黑盒测试是穷举输入测试黑盒测试和白盒测试什么是白盒测试–白盒测试也称结构测试或逻辑驱动测试–必须知道软件内部工作过程,通过测试来检测软件内部是否按照需求、设计正常运行–通过逻辑覆盖、路径覆盖等方式选择测试用例,可以用测试覆盖率评价测试用例–白盒测试法是否可以用穷举逻辑或路径法来测试?黑盒测试和白盒测试PINOUT白盒测试:黑盒测试:黑盒测试和白盒测试黑盒测试主要工作:检查实现功能与实际需求的满足程度;(确认和验证的过程)白盒测试主要工作:----代码检查(语法、逻辑、书写)----静态结构分析(内部关系如系统结构、函数调用关系等)-----功能确认与接口分析(主要是确认过程)-----逻辑覆盖率分析(内部的执行路径、提高软件的可靠性)-----性能与效率分析-----内存分析(内存泄露、内存越界等)动态测试和静态测试静态测试不执行程序来寻找代码中存在的错误或评估代码的过程。由人工来进行,发挥了人的逻辑思维的优势或测试经验。能够批量性地发现问题,并直接定位到缺陷或错误的具体位置。用静态测试来进行代码检查、静态结构分析。动态测试必须生成测试数据来运行被测试程序,取得程序运行的真实情况、动态情况,进而进行分析测试质量依赖于测试数据生成测试数据、分析测试结果的工作量大,使开展测试工作费时、费力、费人动态测试和静态测试静态测试–静态测试不实际运行软件,主要是对软件的编程格式、结构等方面进行评估–静态测试包括代码检查、程序结构分析、代码质量度量等。它可以由人工进行,也可以借助软件工具自动进行–代码检查比动态测试更有效率,能快速找到缺陷,发现30%~70%的逻辑设计和编码缺陷课程内容软件测试基本概念软件测试误区软件测试技术软件测试方法软件测试流程软件测试过程微软软件测试简介手工测试和自动测试手工测试自动测试适合自动化的测试操作手工测试和自动测试的比较手工测试传统的测试方法由测试人员手工编写测试用例缺点在于测试工作量大,重复多,回归测试难以实现自动测试利用软件测试工具自动实现全部或部分测试工作:管理、设计、执行和报告自动测试节省大量的测试开销,并能够完成一些手