《软件测试与质量保证概述.ppt》由会员分享,可在线阅读,更多相关《软件测试与质量保证概述.ppt(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件质量保证和测试软件质量保证和测试单元测试单元测试马永征2004.6.15单元测试单元测试Outlinen软件测试概述n单元测试n单元测试工具Junit(Eclipse)单元测试单元测试软件测试概述单元测试单元测试内容软件测试定义、目的和作用衡量标准软件测试要素测试技术测试过程单元测试单元测试软件测试n概况定义:为了发现程序的错误而执行程序的过程软件测试是SQA的重要手段,属于软件工程领域目前状况n软件测试的实践性大于理论性n软件测试理论体系尚不成熟n软件测试工具尚不成熟n软件测试效果对于个人的依赖性比较大单元测试单元测试软件测试n目的为了寻找错误,并尽可能地为修正错误提供更多的信息为了证明
2、软件有错误,而不证明软件没有错误n作用发现并管理缺陷度量质量n评价工作效率和效果n预期项目风险单元测试单元测试内容软件测试定义、目的和作用衡量标准软件测试要素测试技术测试过程单元测试单元测试软件测试n衡量标准多n能够找到尽可能多的、以至于所有的BUG快n能够尽可能早地发现最严重的BUG好n找到的BUG是关键的、用户最关心的n找到BUG后能够重现找到的BUG,并为修正BUG提供尽可能多的信息省n能够用最少的时间、人力和资源发现BUGn测试的过程和数据可以重用单元测试单元测试内容软件测试定义、目的和作用衡量标准软件测试要素测试技术测试过程单元测试单元测试测试技术不实际运行程序,而是通过检查和阅读等
3、手段来发现错误并评估代码质量的软件测试技术。也称为静态分析技术。实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术。在不知道程序内部结构,只知道程序规格的情况下采用的测试技术或策略。在知道程序内部结构的情况下采用的测试技术或策略。开发组内部进行的,采用讲解、讨论和模拟运行的方式进行的查找错误的活动。开发组内部进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。开发组、测试组和相关人员(QA、产品经理等)联合进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。针对要求的程序
4、功能,按照规范的流程进行的测试。针对要求的程序功能以外的其他要求,包括性能、安全、配置、负载等指标,按照规范的流程进行的测试。针对要求的程序功能、性能、安全、配置、负载等指标,基于破坏目的、按照经验进行的随机测试。程序修改或者版本更新以后,为了确保以前正确的功能和其他指标仍旧正确,而重新进行的测试。在测试过程中,选择足够的测试用例,使得每一个可执行语句至少被执行一次。在测试过程中,选择足够的测试用例,使得程序中的每一个分支判断的每一种可能结果都至少被执行一次。在测试过程中,选择足够的测试用例,使得程序中的每一条可能执行的路径都至少执行一次。单元测试单元测试内容软件测试定义、目的和作用衡量标准软
5、件测试要素测试技术测试过程单元测试单元测试测试过程规格定义设计编码系统测试集成测试单元测试用户需求验收测试回归测试配置管理缺陷跟踪 单元测试单元测试测试过程n单元测试:Unit Testing目标:n检验程序最小单元有无错误接口、数据结构、边界、覆盖、逻辑n检验单元编码与设计是否吻合时机:n编码完成后,首先要实施的测试方法:n静态测试n白盒测试责任:n开发工程师单元测试单元测试测试过程n集成测试:Integration Testing目标:n检验组成系统的模块接口有无错误n代码实现的系统设计与需求定义是否吻合时机:n主要的单元测试完成后,经常与单元测试同步进行方法:n黑盒测试责任:n开发工程师
6、n测试工程师单元测试单元测试测试过程n系统测试:System Testing目标:n检验组成整个系统的代码、以及系统的软硬件配合有无错误n代码实现的系统与用户需求是否吻合n检验系统的文档等各种是否完整、有效n模拟验收测试的要求,检查系统是否符合用户的验收标准时机:n多数集成测试完成后方法:n黑盒测试责任:n测试工程师单元测试单元测试测试过程n系统测试:System Testing稳定期测试n目标:度量是否可以结束测试n时机:传统的系统测试完成后n方法:黑盒测试n责任:测试工程师单元测试单元测试测试过程n验收测试:Acceptance Testing目标:n使客户验收签字n系统是否符合事先约定的
7、验收标准时机:n系统测试完成后,在项目组看来开发和测试工作已经全部完成,可以交付使用方法:n黑盒测试责任:n产品经理或其他高级经理n开发工程师n测试工程师n用户单元测试单元测试测试过程n回归测试:Regression Testing目标:n验证程序修改或者版本更新以后,以前正确的功能和其他指标仍旧正确。时机:n每次错误修改之后,或者版本更新之后方法:n白盒测试/黑盒测试责任:n开发工程师n测试工程师单元测试单元测试测试过程n缺陷跟踪:Defect Tracing目标:n确保所有发现的错误被正确记录、分发、评估、关闭、统计时机:n从错误发现开始到错误关闭为止,每次错误状态修改之后方法:n缺陷跟踪
8、系统责任:n开发工程师n测试工程师n测试经理n用户单元测试单元测试单元测试单元测试单元测试内容单元测试目标任务单元测试技术静态分析测试设计单元测试流程管理流程测试文档单元测试单元测试单元测试n概况定义:n检验程序最小单位有无错误。一般在编码之后,由开发人员完成。单元:软件开发中的最小的独立部分C语言中的单元:函数或者是子过程C+语言中的单元:类目前状况:n实施效果非常好,但是实施阻力比较大(主要是人员和管理因素),一般只在关键的程序单元中实施n有比较系统的理论和方法,但也依赖于系统的特殊性和开发人员的经验n有大量的辅助工具,开发人员也经常自己开发测试代码和测试工具n主要使用白盒测试和静态分析,
9、也使用黑盒测试单元测试单元测试单元测试n目标1、检查代码实现是否符合设计n不能检查设计是否正确2、尽早发现错误nMicrosoft applicationsMicrosoft applications10-20 10-20 defects/KLOC during unit testingdefects/KLOC during unit testing0.5 defects/KLOC after release0.5 defects/KLOC after releasen性价比最好单元测试单元测试内容单元测试目标任务单元测试技术静态分析测试设计单元测试流程管理流程测试文档单元测试单元测试单元测试
10、n任务1、模块接口测试检查进出模块的数据是否正确Checklist:n模块的实际输入与定义的输入是否一致个数、类型、顺序n模块中对于非内部/局部变量是否合理使用n使用其他模块时,是否检查可用性和处理结果n使用外部资源时,是否检查可用性并及时释放资源内存、文件、硬盘、端口等n其他单元测试单元测试单元测试n任务2、模块局部数据结构测试检查局部数据结构能否保持完整性Checklist:n变量从来没有被使用可能别的地方使用了错误的变量名n变量没有初始化n错误的类型转换n数组越界n非法指针n变量或函数名称拼写错误使用了外部变量或函数n其他单元测试单元测试单元测试n任务3、模块边界条件测试检查临界数据是否
11、正确处理Checklist:n普通合法数据是否正确处理n普通非法数据是否正确处理n边界内最接近边界的(合法)数据是否正确处理n边界外最接近边界的(非法)数据是否正确处理n其他单元测试单元测试单元测试n任务4、模块独立执行通路(路径)测试检查由于计算错误、判定错误、控制流错误导致的程序错误Checklist:n死代码n错误的计算优先级n精度错误比较运算错误赋值错误n表达式的不正确符号、=;=、=、!=n循环变量的使用错误错误赋值n其他单元测试单元测试单元测试n任务5、模块内部错误处理测试检查内部错误处理设施是否有效Checklist:n是否检查错误出现资源使用前后其他模块使用前后n出现错误,是否
12、进行错误处理抛出错误通知用户进行记录n错误处理是否有效在系统干预前处理报告和记录的错误真实详细n其他单元测试单元测试内容单元测试目标任务单元测试技术静态分析测试设计单元测试流程管理流程测试文档单元测试单元测试单元测试技术n静态分析定义:n不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量的软件测试技术。也称为静态测试技术。方法:n走查:WalkThroughn审查:Inspectionn评审:ReviewMichael Fagan IBM(1976)单元测试单元测试单元测试技术n静态分析-走查定义:n开发组内部进行的,采用讲解、讨论和模拟运行的方式进行的查找错误的活动。经验:n限
13、时避免跑题n参加人员经验丰富的开发人员和本模块相关的开发人员本项目组的新人n由本模块的开发者进行讲解、回答问题并记录不要现场修改n检查要点逻辑错误代码标准/规范/风格单元测试单元测试单元测试技术n静态分析-审查定义:n开发组内部进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。经验:n以会议的形式,制定会议目标、流程和规则,结束后要编写报告n参加人员经验丰富的开发人员和本模块相关的开发人员本项目组的新人n由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录不要现场修改n检查要点设计需求代
14、码标准/规范/风格单元测试单元测试单元测试技术n静态分析-评审定义:n开发组、测试组和相关人员(QA、产品经理等)联合进行的,采用讲解、提问并使用Checklist方式进行的查找错误的活动。一般有正式的计划、流程和结果报告。经验:n以会议的形式,制定会议目标、流程和规则,结束后要编写报告。相关资料要在会议前下发并阅读。n参加人员经验丰富的开发人员和本模块相关的开发人员测试组和相关人员n由另外一名开发者进行讲解、其他开发者主要按照Checklist进行提问并填表、本模块开发者回答问题并记录不要现场修改n检查要点设计需求代码标准/规范/风格文档的完整性和一致性单元测试单元测试内容单元测试目标任务单
15、元测试技术静态分析测试设计单元测试流程管理流程测试文档单元测试单元测试单元测试技术n测试设计定义:n依据模块的内部结构,设计测试用例的过程。n主要采用白盒测试技术,关注逻辑覆盖原则:n1、保证没有死代码保证一个模块中的每个独立路径都可能被使用到n2、保证对所有的逻辑值都测试true和falsen3、在上下边界和合法的范围内运行所有的循环n4、确保内部数据结构的有效性和完整性单元测试单元测试单元测试技术n测试设计逻辑覆盖测试方法:n1、语句覆盖选择足够的测试用例,使得程序中每一条可执行语句至少被执行一次。n2、判定覆盖选择足够的测试用例,使得程序中每一个分支判断的每一种可能结果(主要指switc
16、h-case情况)都至少被执行一次。判定覆盖也叫分支覆盖。n3、条件覆盖选择足够的测试用例,使得程序中每一个分支判断中的每一个条件的可能结果都至少被执行一次。单元测试单元测试单元测试技术n测试设计逻辑覆盖测试方法:n1、语句覆盖n2、判定覆盖n3、条件覆盖n4、判定/条件覆盖选择足够的测试用例,使得同时满足判定覆盖和条件覆盖。n5、条件组合覆盖选择足够的测试用例,使得程序中每一个分支判断中的每一个条件的每一种可能组合结果都至少被执行一次。n6、路径覆盖选择足够的测试用例,使得程序中所有的可能路径都至少被执行一次。单元测试单元测试单元测试技术n测试设计逻辑覆盖测试方法:语句覆盖判定覆盖条件覆盖判
17、定/条件覆盖条件组合覆盖路径覆盖单元测试单元测试内容单元测试目标任务单元测试技术静态分析测试设计单元测试流程管理流程测试文档单元测试单元测试单元测试流程n管理流程主要指动态测试应用流程测试计划测试设计测试执行测试记录分析测试总结完毕缺陷跟踪针对测试目标,规定测试任务、资源分配、人员角色、进度安排等。根据测试计划,设计测试用例,包括:测试步骤、测试场景、测试代码、测试数据(包括预期结果)。根据测试计划,配置测试环境,并手动或者自动执行测试设计。根据测试计划,忠实地记录测试执行的过程和结果。分析测试记录,如果发现与预期结果不同,确定并重现缺陷。检查测试设计是否全部执行完毕,缺陷是否全部关闭。记录、
18、分发、评估、关闭缺陷报告。分析测试过程和缺陷报告,评估测试质量和测试效果,给出是否通过测试的建议。单元测试单元测试内容单元测试目标任务单元测试技术静态分析测试设计单元测试流程管理流程测试文档单元测试单元测试单元测试流程n测试文档主要指动态测试应用文档测试计划测试设计测试执行测试记录分析测试总结完毕缺陷跟踪测试计划文档测试用例文档测试记录文档缺陷跟踪报告测试总结报告单元测试单元测试单元测试文档n测试计划编号n如:ut-tp0016标题n如:文字排版功能.字间距.MarchCalculator版本号n如:V1.0执行状态n如:未执行修改记录n如:2003年7月1日;某某编制/修改;原因测试目标n如
19、:语句覆盖测试人员n如:某某1负责执行测试用例xxx;某某2负责执行测试用例xxx测试用例编号(多个)n如:ut-tc00021/ut-tc00031/ut-tc00035被测试单元代码位置n如:$tag1/layout/marchCal.cpp单元测试单元测试单元测试文档n测试用例编号n如:ut-tc00016标题n如:测试“文字排版功能.字间距.MarchCalculator”版本号n如:V1.3执行状态n如:已经执行修改记录n如:2003年7月2日;某某编制/修改;原因测试步骤n如:配置运行环境;输入测试数据;执行X功能/测试代码;观察/记录XX测试场景n如:在联网的环境下测试代码n如:
20、ut-tcc00021(位置)/ut-tcc00035(位置)测试数据n如:输入数据(输入文件、文字描述);预期结果(性能、图片、文字描述)单元测试单元测试单元测试文档n测试记录编号n如:ut-tr00016标题n如:记录测试“文字排版功能.字间距.MarchCalculator”结果填写记录n如:2003年7月2日;某某填写;原因测试用例编号n如:ut-tc0016输出结果n如:图片、文字描述测试观察n符合/不符合期望结果单元测试单元测试单元测试文档n缺陷跟踪报告编号n如:ut-dt00016标题n如:文字排版功能.字间距.MarchCalculator计算错误版本号n如:V1.3执行状态n
21、如:空白/草稿/提交/审批/分发/正在修改/修改完毕/正在确认/关闭修改记录n如:2003年7月2日;某某编制/修改;原因测试环境和版本号码、程序编写人员错误严重程度和优先级别错误详细描述重现步骤和方式、对应的测试记录编码附件建议修改方式修改内容、结果及修改人员签字/日期确认内容、结果及确认人员签字/日期单元测试单元测试单元测试文档n测试总结报告编号n如:ut-tr00016标题n如:文字排版功能.字间距.MarchCalculator单元测试总结报告版本号n如:V1.5执行状态n如:已经提交修改记录n如:2003年7月3日;某某编制/修改;原因测试计划编号计划执行情况缺陷统计(缺陷总数/未解
22、决数目)及为解决缺陷列表后续处理措施是否通过单元测试单元测试单元测试单元测试工具Junit单元测试单元测试What is JUnitnDe facto Java unit testing frameworknIntegrated nicely with IDEs and AntnEasy to learnnSupport many IDEsJBuilder,VisualAge,Eclipse 单元测试单元测试实例npublic class Car npublic int getWheels()nreturn 4;nn单元测试单元测试实例(cont.)npublic class TestCar
23、npublic static void main(String args)nn Car car=new Car();nif(4=car.getWheels()nSystem.out.println(Ok!);nelsenSystem.out.println(Error!);nn单元测试单元测试nimport junit.framework.TestCase;npublic class CarTest extends TestCase nprotected Car car;nprotected int expectedWheels;n npublic static void main(Strin
24、g args)njunit.swingui.TestRunner.run(CarTest.class);nn public CarTest(String arg0)nsuper(arg0);n实例(cont.)单元测试单元测试n protected void setUp()throws Exception ncar=new Car();nexpectedWheels=4;nn n protected void tearDown()throws Exception nsuper.tearDown();nn npublic void testGetWheels()nassertEquals(exp
25、ectedWheels,car.getWheels();nn单元测试单元测试JUnit Rules and ConventionsnSubclass TestCasenPrior to v3.8,String-arg constructor requirednTest methodspublic void testXXX()throws Any number of assertions per methodnImplement main to run from command-line,but not necessarynOptionally add setUp/tearDown method
26、s.单元测试单元测试TestCase lifecyclesetUptestXXX()tearDown()Repeats 1 through 3 for each testXXX method单元测试单元测试Assert系列方法nassertEquals(primExpected,primActual)nassertEquals(objExpected,objActual)nassertSame(objExpected,objActual)nassertNotSame(objExpected,objActual)nassertNull(obj)nassertNotNull(obj)nassert
27、True(boolean condition)nassertFalse(boolean condition)ne.g.assertEquals(0,epoch.getTime();单元测试单元测试TestSuitenimport junit.framework.*;npublic class AllTests npublic static void main(String args)njunit.textui.TestRunner.run(suite();nnpublic static Test suite()nTestSuite suite=new TestSuite(All JUnit Tests);nsuite.addTest(VectorTest.suite();nsuite.addTest(new ic.rd.horse.moneyTest.class);return suite;nn单元测试单元测试谢谢!