通信软件测试技术基础•教学进度安排–总学时:32学时–课堂教学:28学时–实验教学:12学时•成绩评定–平时成绩:10%–期末考试成绩(暂定闭卷)70%–实验成绩:20%•答疑方式:–电话:88803818–邮件:zhaohq6625@sina.com第一章软件测试概述•软件测试的意义–计算机在关键领域的重要性–软件对计算机系统的影响–软件测试可以一定程度上减少系统故障•本课程的主要内容–软件测试的基本概念–软件测试技术•白箱法•黑箱法–TTCN树表描述语言–LOTOS时序逻辑描述语言第一节软件故障与软件测试•两个软件故障的例子–Intel奔腾处理器故障•1994年12月30日,美国Lynchburg大学的ThomasR.Nicely博士在一台奔腾PC机上做运算时发现,(4195835/3145727)*3145727-4195835不等于0–千年问题•20世纪70年代一个叫Dave的程序员,负责本公司的工资系统。他把4位数日期缩减为2位,例如1973年为73。因为工资系统极度依赖数据处理,Dava节省了可观的存储空间。第一节软件故障与软件测试•一组术语–缺陷(bug)–缺点(defect)统称为缺陷–偏差(variance)–错误(error)–异常(anomaly)统称为错误–老化(age)–问题(problem)–失败(failure)–矛盾(inconsistency)统称为失败–事故(incident)–谬误(fault)第一节软件故障与软件测试•第一类称为缺陷:它们都是软件开发过程潜在的隐患,这些缺陷可能在软件投入运行后出现,使得软件的性能和可靠性等方面与系统的设计要求不符;有时这些问题可能不出现,软件的性能和可靠性并不会因为它们的存在而受到影响。•第二类称为错误:这类错误与软件运行状态有关,它们是在软件运行过程中可观测到的软件错误。这些问题出现的原因是软件缺陷所致。•第三类称为失败:这是软件运行给用户造成的损失的一类软件故障,它强调软件失败的结果。失败的直接原因是软件系统存在软件错误。并不是所有的软件错误都会导致软件失败,如果对软件错误加以适当的控制,软件错误可以导致安全。•什么是软件测试呢?–所谓软件测试是为了评价一个软件系统的质量和发现错误而从事的一种工作过程。–可分为局部软件的局部运行和全部运行;从运行的环境来看,可有仿真运行和实际运行。这就存在一个软件测试中的方式和方法的问题。而方法又与采用的技术相关,技术不同,方法也不同。所以软件测试技术是测试的关键。1.2软件测试与软件开发过程•生命周期模型:–软件开发过程中的各种活动构成软件开发的生命周期,而随着这些活动的组织方式和方法不同,就构成不同的软件开发生命周期模型。•生命周期与测试的关系:–也就是说,虽然软件开发的生命周期模型有所不同,但软件开发的阶段性始点和终点是相同的,而且软件测试是不可缺少的一项工作。1.2.1顺序生命周期模需求阶段体系结构设计阶段系统详细设计阶段编码和单元测试阶段软件集成阶段系统集成阶段验收测试阶段图1-1V生命周期模型需求阶段体系结构设计阶段系统详细设计阶段编码和单元测试阶段软件集成阶段系统集成阶段验收测试阶段图1-2瀑布生命周期模型1.2.2渐进式开发生命周期模型状态1开发阶段状态2开发阶段结束中期提交1中期提交2最终提交图1.3渐进式开发生命周期1.2.3迭代生命周期模型需求分析设计评价实现和测试开始完成1-4迭代生命周期模型1.3软件测试方法与测试内容•软件测试的种类:–从是否需要执行被测软件的角度,可分为静态测试和动态测试。–从测试是否针对系统的内部结构和具体实现算法的角度,可分为白盒测试和黑盒测试;–从测试范围角度,可分为单元测试、系统测试、集成测试等等;–从测试目标角度,可分为性能测试、功能测试、可靠性测试等等。–从测试采用的工具角度,可分自动测试,手工测试等。1.3.1黑盒测试•黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能的情况下,通过测试来检测每个功能是否都能正常使用。1.3.2白盒测试•白盒测试也称结构测试或逻辑驱动测试,它是在知道它产品内部工作过程的前提下,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行。1.3.3ALAC测试•ALAC测试是一种基于客户使用产品的知识开发出来的测试方法。ALAC测试是基于复杂的软件产品有许多错误的原则。最大的受益者是用户,缺陷查找和改正将针对哪些客户最容易遇到的错误。1.3.4单元测试•单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。1.3.5综合测试•综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行综合测试以便发现与接口有关的各种错误。1.3.6确认测试(集成测试)•确认测试应检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准。•确认测试标准•配置复审–确认测试的另一个重要环节是配置复审。复审的目的在于保证软件配置齐全、分类有序,并且包括软件维护所必须的细节。1.3.6α、β测试•α测试是指软件开发公司组织内部人员模拟各类用户对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正。•经过α测试调整的软件产品称为β版本。紧随其后的β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出批评意见。然后软件开发公司再对β版本进行改错和完善。1.3.7系统测试•恢复测试:–恢复测试主要检查系统的容错能力。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。•安全测试:–安全测试检查系统对非法侵入的防范能力。•强度测试:–强度测试检查程序对异常情况的抵抗能力。•性能测试:–对于那些实时和嵌入式系统,软件部分即使满足功能要求,也未必能够满足性能要求,虽然从单元测试起,每一测试步骤都包含性能测试,但只有当系统真正集成之后,在真实环境中才能全面、可靠地测试运行性能,系统性能测试是为了完成这一测试任务。•可用性测试:–对“用户友好性”的测试。显然这是主观的,且将取决于目标最终用户或客户。用户面谈、调查、用户对话的录像和其他一些技术都可使用。程序员和测试员通常都不宜作可用性测试员。•可靠性测试:–可靠性测试是为了检验软件系统运行是否可靠,而进行的一种测试。这类软件系统的失败往往导致不可预料的结果,如航空、航天领域中运行的软件,铁路系统中运行的软件等等。可靠性测试的方法关心的是,一旦软件系统出现故障,其系统是否导向安全,所以可靠性测试与安全测试紧密相关。可靠性测试通常采用黑箱测试法。1.3.8面向对象的软件测试•面向对象的软件测试(OOTest)是根据面向对象的软件开发方法所设计的软件系统所提出的软件测试方法。•OOTest又分为:–面向对象分析的测试(OOATest)–面向对象设计的测试(OODTest)–面向对象的程序测试(OOPTest)1.3.9协议软件测试•协议软件作为软件的一种特殊形式,已经形成了一个崭新的学科——协议工程学。•研究范围包括:–协议说明(ProtocolSpecification)–协议证实(ProtocolValidation)–协议验证(ProtocolVerification)–协议综合(ProtocolSynthesis)–协议转换(ProtocolConversion)–协议性能分析(ProtocolPerformanceAnalysis)–协议自动实现(ProtocolAutomaticImplementation)–协议测试(ProtocolTesting)。•协议测试是一种黑盒测试,它按照协议标准,通过控制观察被测协议实现的外部行为对其进行评价•协议测试分成三个方面进行研究:–一致性测试(ConformanceTesting)–互操作性测试(InteroperabilityTesting)–性能测试(PerformanceTesting)。1.4软件测试原则与特点•软件测试的原则–应当把“尽早和不断地测试”作为开发者的座右铭。–程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完成。–设计测试用例时,应该考虑到合法的输入和不合法的输入,以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。–一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。–对测试错误结果一定要有一个确认的过程。一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。–制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。–重复测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。–妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。1.4.2软件测试特点•完全测试程序是不可能的。图1-5一个程序结构图路径数:51+52+53+…+520=1040•软件测试是有风险的行为•测试无法显示潜在的软件缺陷•发现的缺陷越多,说明软件缺陷越多•小结:–软件故障可大体上分为三种类型,软件缺陷是根源,后两类故障是软件缺陷的直接后果。–软件测试与生命周期的关系•测试伴随整个生命周期–常见的软件测试方法•多种方法,但黑箱与白箱测试是基础–软件测试原则和特点•8个原则,4个特点