SEEYoU嵌入式软件测试第一部分软件测试技术Seeyou软件测试技术—提要软件测试基础软件测试的典型问题及对策嵌入式软件测试级别及内容软件测试过程及管理Seeyou概述—测试的定义由人工或自动方法来执行或评价系统或系统部件的过程,以验证它是否满足规定的需求;或识别出期望的结果和实际结果之间有无差别。Seeyou概述—测试的目的验证软件是否满足软件开发合同或任务书、系统/子系统设计文档、软件需求规格说明和软件设计说明所规定的软件质量特性要求;通过测试,发现软件错误;为软件产品质量的评价提供依据。Seeyou概述—测试的地位有效的测试对于开发可靠、安全和成功的软件是必须的测试不是“银弹(silverbullet)”,它具有有效范围,它不是其他软件工程方法的替代品Seeyou概述—测试的作用1证实给定的软件满足其规格说明测试公理不可能对程序进行完全的测试局限无法确信规格说明100%正确无法确信可以达到100%足够的软件测试无法保证测试环境100%满足测试要求Seeyou概述—测试的作用2在给定的时限内尽可能多的发现缺陷和隐患测试公理测试无法说明软件没有缺陷局限软件质量体现在多个方面,但首先要面对并必须解决的方面是软件缺陷,在资源制约和技术限制的条件下,无法保证找到软件中所有的缺陷Seeyou概述—测试的作用3为软件产品质量的评价提供依据测试公理发现的问题越多,那里潜在的问题也更多局限不可能通过测试获得100%的质量信心无法确信测试系统(或环境)的正确性无法确信测试人员完全理解了软件产品没有足够的资源彻底完成软件测试Seeyou概述—测试的发展历程时间区间状况-1956面向调试的阶段1957-1978面向证实的阶段1979-1982面向缺陷的阶段1983-1987面向评价的阶段1988-面向预防的阶段Seeyou概述—测试对象的特点软件被广泛应用,承担许多关键与核心任务软件是被开发或设计的,包括维护阶段软件是逻辑产品,可视性低软件是复杂的,输入空间无限大,可执行路径特别多大多数软件是定制的,可选标准构件少Seeyou概述—软件的缺陷属性无法提供无缺陷的软件,缺陷已成为软件的固有属性和特征各种研究报告表明,每写1000行代码会产生30到85个缺陷大多数缺陷可通过测试捕获在大量的已完成测试的软件中,每1000行代码仍存在0.5~3缺陷软件缺陷有可能会给系统质量尤其是可靠性带来重大影响Seeyou概述—缺陷与失效失误(mistake)在软件开发过程中软件开发人员产生隐错/缺陷(bug/defect)在软件产品中软件中存在设计者的错误行为(失误)→导致软件中留有错误的设计(缺陷)→导致软件错误地执行(故障)→导致软件的错误行为(失效)。故障(fault)在软件运行中缺陷被激活失效(failure)在运行阶段用户的经历Seeyou概述—缺陷过滤器容错(Defecttolerance)编译失误避错(Defectavoidance)排错(defectremoval)审查使用缺陷逃逸测试Seeyou概述—缺陷解决策略避错(Defectavoidance)第一次就做正确排错(Defectremoval)早发现,早实施容错(Defecttolerance)有缺陷,也能正确的完成任务恢复选用最佳恢复策略,失效后继续工作Seeyou概述—如何获得高质量软件软件质量软件工程方法正式技术评审度量与控制标准与过程测试SCM与SQASeeyou概述—验证与确认验证与确认是广泛认可的质量保证方法和手段软件测试是软件验证与确认的重要组成部分验证是指对某项规定活动进行检查的过程,以确保该活动实现了规定功能确认是指审查已建立的软件产品是否符合客户需要的过程验证(Verification):Arewebuildingtheproductright?确认(Validation):Arewebuildingtherightproduct?Seeyou概述—测试与调试测试不是调试,调试也不是测试,实际工作中人们常将测试与调试混为一谈主要区别:测试是一种检验,调试是推理过程测试从已知条件开始,使用预先定义的规程并且有可预知的结果;调试的开始条件可能是不可知的,结果不可预见测试经常由非程序设计人员完成,调试必须由程序设计者完成Seeyou概述—嵌入式软件执行数据采集、控制等任务,逻辑复杂运行在资源受限系统上系统构成多样化部署后不受人的控制修补困难多为实时系统多为关键系统既可能运行在芯片上,也可能运行与大型工业控制系统Seeyou概述—嵌入式软件测试对测试环境的要求高对专业测试的依赖程度高测试输入和结果获得需要专门的手段测试约束大Seeyou软件测试典型问题及对策软件测试时机软件测试层次软件测试环境软件测试管理软件测试风险软件测试复杂性软件测试追溯性软件测试终止准则Seeyou问题及对策—测试时机测试的时机问题代码出来了,甚至系统实现了,才开始测试文档开发滞后,更新不及时,追踪性差系统状态不稳定,测试的效果无法体现主要对策在软件开发过程中尽早开展软件测试做好软件设计评审和分析做好配置管理工作Seeyou问题及对策—测试层次典型问题调试代替低层次测试,ATP代替高层次测试不测试无效和不期望的输入不希望外部介入完全依赖外部测试主要对策开展第三方测试对开发过程中的测试提出明确要求Seeyou问题及对策—测试环境典型问题过分关注测试执行,而忽视测试设计期望自动工具替代测试工程师期望靠测试自动化节约测试成本期望靠测试自动化改善测试质量相信录制/回放工具是万能的主要对策先建立流程,再实现自动化与实际需求相结合Seeyou问题及对策—测试管理典型问题被测对象来自非受控渠道测试没有文档化的计划、方案支持独立测试组与开发组之间关系不协调主要对策建立测试过程,进行测试项目策划、跟踪与控制,开展测试的质量保证和配置管理将需求工程延伸到测试Seeyou问题及对策—测试风险典型问题不使用风险分析技术,测试不关注风险开发时希望成关键,测试时希望成一般主要对策通过风险分析确定测试范围、目标和策略将测试作为一种高风险活动进行管理Seeyou问题及对策—测试复杂性典型问题认为测试工作很简单,测试成为新程序员的过渡性工作/不合格程序员的归宿认为软件测试太复杂,投入很大,做了但是没有效果进行无知的测试主要对策培训,指派有经验、富有创造性的人员承担测试采用适当的技术、有效的方法进行测试设计完善动态仿真环境,掌握测试工具Seeyou问题及对策—测试追溯性典型问题软件需求规格说明太简单、过时即兴测试不创建和维护测试文档主要对策测试应源于用户需求维持完整的证据链进行可重复和可再现的测试Seeyou问题及对策—测试终止准则典型问题测试组应对保证质量负责用发现缺陷数量评价测试业绩测试到资源耗尽就结束主要对策明确定义测试结束的标准正确理解测试的作用和局限性提高和改善软件设计质量Seeyou级别—测试策略SRDCUIVST系统工程单元测试编码软件需求分析设计集成测试配置项测试系统测试Seeyou级别—为什么要分级别?与软件开发过程相适应为了说明软件系统内单元/部件的互操作性需要进行三种基本的测试单独单元/部件的测试测试单元/部件间互操作测试单元/部件结合成的软件系统Seeyou级别—单元测试的特点对象-模块依据-软件设计规格说明实现-串行或并行测试方法-白盒为主被测模块测试用例结果测试工程师Seeyou级别—单元测试内容静态测试代码走查代码检查静态分析动态测试黑盒测试白盒测试基于数据结构的测试Seeyou级别—单元动态测试焦点被测单元单元接口局部数据结构边界条件独立执行路径错误处理的路径测试用例Seeyou级别—单元动态测试环境被测模块驱动模块结果测试用例模块接口局部数据结构边界条件独立执行路径错误处理的路径桩1桩2桩nSeeyou级别—单元测试工作产品单元测试计划单元测试说明单元测试报告测试记录问题报告与问题处理报告质量记录Seeyou级别—集成测试集成测试的对象是软件部件软件部件由软件单元组成集成测试前,部件中的所有单元必须已经完成了单元测试Seeyou级别—集成测试准备要求的文档可提交软件概要设计说明软件接口设计说明被集成的软件单元已通过单元测试被测试构件已纳入配置管理中具备了满足要求的集成测试环境和测试工具Seeyou级别—集成测试内容1.单元间的接口测试2.全局数据结构测试3.软件功能模块的功能测试4.性能测试5.边界和人为条件下的性能Seeyou级别—集成测试焦点重点寻找与下述内容相关的缺陷软件系统结构的设计和构造在子系统层次上被集成的功能或操作组件/模块之间的接口和相互作用资源集成环境集成Seeyou级别—集成测试通过准则1.单元间无错误连接2.满足各项功能、性能要求3.对错误有正确的处理4.对测试中的异常有合理解释5.接口正确Seeyou级别—部件测试工作产品部件测试计划部件测试说明部件测试报告测试记录问题报告与问题处理报告质量记录Seeyou级别—配置项测试概念配置项测试的对象是计算机软件配置项(CSCI)计算机软件配置项,是能够被独立地进行配置管理的,并能够满足最终用户功能的一组软件Seeyou级别—配置项测试的目的1.发现软件配置项内存在的缺陷和问题2.验证软件配置项实现了所需的能力验证软件是否按软件需求规格说明书中确定的软件功能、性能、质量属性、约束及限制等技术要求进行工作检验软件配置项与相关的软件/硬件配置项接口的正确性和互操作性Seeyou级别—配置项测试依据测试要求任务书、合同、测试规范等对软件测试有约束力的文件,规定了软件测试的类型、程度、管理,等等被测对象的规格说明软件需求规格说明书,等Seeyou级别—配置项测试焦点功能(针对业务/任务需求,逐项)接口(关注通信需求与手段)配置项级的性能(关注容量、余量、瓶颈)质量属性(关注质量设计的实现)设计约束(关注资源的利用率和余量)Seeyou级别—配置项测试主要内容功能测试性能测试接口测试容错测试安全性测试边界测试安装性测试文档审查用户操作特定条件下的行为与硬件配置项的集成与系统中其它软件配置项的集成与协作Seeyou级别—配置项测试环境要求配置项测试对测试环境的关注更关注环境的可控性,通常会在仿真或模拟环境下进行,要求高度的可控性和尽量的真实性对侵入式测试方法的支持Seeyou级别—配置项测试工作产品配置项测试计划配置项测试说明配置项测试报告测试记录问题报告与问题处理报告质量记录Seeyou级别—系统测试概念软件系统作为一个整体进行测试,检验系统各部分之间的协调情况,以证实在目标环境下软件完成了全部系统功能和性能。系统测试是一系列不同测试的组合,这些测试目的不同,但都是为了整个系统成分能正常地集成到一起并完成分配的功能。Seeyou级别—系统测试的目的1.发现软件系统范围内存在的缺陷和问题2.验证软件系统实现了所需的能力验证软件系统各部分之间的协调情况,以证实在目标环境下软件系统完成了软件任务书或系统/子系统设计文档规定的全部软件需求检验软件系统能否与其他指定的系统成功地进行协同操作Seeyou级别—系统测试的依据测试要求任务书、合同、测试规范等对软件测试有约束力的文件,规定了软件测试的类型、程度、管理,等等被测对象的规格说明软件研制任务书系统/子系统需求规格说明系统/子系统设计文档,等Seeyou级别—系统测试焦点功能(针对高级系统需求,强调完整的业务/任务场景)接口(关注与其他系统的协同操作)性能(关注总体性能和资源竞争)质量属性(关注因协同操作带来的质量属性问题)Seeyou级