您好,欢迎访问三七文档
软件测试Softwaretesting软件学院段喜龙D3122014.92课程安排:学时分配:40学时(32+8)教材:软件测试技术联系方式:2544700241@qq.com3第一部分基础篇第1章软件测试背景1.1软件错误案例(whensoftwareattacks)1.2软件缺陷(what’s?whycomes?andit’scost)1.3软件测试员(jobandqualification)1.1软件错误案例Softwarecases5趣事(Thefunny)美国国税局(IRS)的尴尬1993年7月,IRS发出了近680亿美元的税单最大方的自动柜员机2001年1月,欧元正式流通后几天,德国的某些自动柜员机竟能在提款后不记入帐目!坏脾气的洗手间2001年6月,在英国,一个全自动的洗手间突然出现故障,将一位老太太整整困了2小时6严重事故(Theserious)1996年12月,欧洲航天局(ESA)阿利亚娜5型火箭在发射39秒以后爆炸(10年,70亿)原因:运算溢出错误1999年11月,美国国家航空航天局(NASA)发射火星温度探测器失踪原因:单位换算错误千年虫问题,大约1974原因:盲目的强调数据压缩7悲剧(Thetragic)爱国者导弹的失利(1991年2月)原因:积累的时钟误差美国海军“文森斯”号巡洋舰误击伊朗客机(1987年4月)原因:不可靠的模式识别算法1.2软件缺陷softwarefaultDefect-缺点Variance-偏差Fault-缺陷Failure-失败Problem-问题Inconsistency-矛盾Error-错误Feature-特殊Incident-毛病BugAnomaly-异常91.2.1软件缺陷是什么?定义:只有符合下列5个规则的软件问题,我们将其定义为软件缺陷(softwarefault)软件未达到产品说明书标明的功能软件出现了产品说明书指明不会出现的错误软件功能超出产品说明书指明范围软件未达到产品说明书虽未指出但应达到的目标软件测试员认为软件难以理解、不易使用、运行速度缓慢、或者最终用户认为不好。101.2.2为什么会出现软件缺陷?从小程序到大项目的无数研究得出:导致软件缺陷最大的原因是产品说明书(需求)其次的原因是设计方案的问题。其他设计编制说明书编写代码111.2.3软件缺陷的修复费用020406080100120发现时间修复费用farefare5102040100AnalyseDesignCodeTestRelease1.2.4软件质量软件质量是软件产品满足使用要求的程度。质量模型:McCall模型Boehm模型ISO/IEC9126模型1.3软件测试员Softwaretester141.3.1软件测试员的工作软件测试员是客户的眼睛,是第一次看到软件的人,代表客户说话,应力求完美。软件测试员的目标是尽可能早的找出软件缺陷,并确保其得以修复。15TheSoftwareJobSpectrumSDE:SoftwareDesignEngineerSDE/T:SoftwareDesignEngineerinTestSTE:SoftwareTestEngineerPM:ProgramManagerSDESTEDevelopmentTestingSDE/TPM16DivisionofLaborOther29.8%PSS11.2%Test33.7%Dev16.8%PM8.4%TeamSizePMDevTestPSSOtherWindows2000ProductTeamTotalof5,245People900Developers1,800TestersLargestproductteaminMicrosofthistory(atthetime)171.3.2怎样成为优秀的软件测试员技术能力探索精神不懈努力创造力说服力准确的洞察力老练稳重追求完美18第2章软件测试基础2.1测试原则(principle)2.2测试目的(purpose)2.3测试对象(object)2.4测试术语(glossary)2.5测试方法(method)2.1测试原则principle201.完全测试程序是不可能的输入量太大输出结果多软件实现途径太多软件说明书没有客观标准212.软件测试是有风险的行为如果试图测试所有情况,费用将大幅增加,软件缺陷漏掉的数量并不会随费用上涨而显著下降。如果减少测试或者错误地确定测试对象,那么费用很低,但是会漏掉大量软件缺陷。(每个项目都有一个最优的测试量)223.测试无法显示潜伏的软件缺陷“Programtestingcanbeusedtoshowthepresenceofbugsbutnevertoshowtheirabsence.”—EdsgerW.Dijkstra,1972234.找到的软件缺陷越多,就说明软件缺陷越多充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。ThereisAlwaysOneMoreBug245.并非所有软件缺陷都能修复没有足够的时间—必须保证按时完成不算真正的软件缺陷修复的风险太大—修复一个可能导致其他不值得修复—不常出现或在不常用功能中出现的对于软件缺陷是否应该修复,其决策过程应由软件测试员、项目管理员和程序员共同参与。256.软件测试是一项讲究条理的技术专业对于软件测试应严格制定并执行测试计划,排除测试的随意性。应当对每一个测试结果做全面检查。妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。程序员应避免检查自己的程序。2.2测试目的purpose27基于不同的立场,存在着两种完全不同的测试目的从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心28Myers’sTestingObjectivesTestingisaprocessofexecutingaprogramwiththeintentoffindinganerror.Agoodtestisonethathasahighprobabilityoffindinganasyetundiscoverederror.Asuccessfultestisonethatuncoversanasyetundiscoverederror.29换言之,测试的目的是:以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。证明检测预防2.3测试对象object31测试对象软件测试并不等于程序测试。软件测试应贯穿于软件定义与开发的整个期间。需求分析、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应成为软件测试的对象。2.4测试术语glossary33错误(error)人类会犯错误,很接近的一个同义词是过错(mistake)。人们在编写代码是会出现过错,我们把这种过错叫做bug。34缺陷(fault)缺陷是错误的结果。更精确地说,缺陷是错误的表现,而表现是表示的模式,例如:叙述性文字、数据流框图、层次结构图、源代码等。缺陷分为过错缺陷和遗漏缺陷。若把某些信息输入到不正确的表示中,就是过错缺陷;如果没有输入正确信息,则为遗漏缺陷。35失效(failure)当缺陷执行时会发生失效。有两点需要解释:一是失效只出现在可执行的表现中,通常是源代码,或更确切地说是被装载的目标代码;二是这种定义只与过错缺陷有关。对于遗漏缺陷,可以通过有效的评审来避免其产生的失效。事故(incident)当出现失效时,可能会也可能不会呈现给用户,事故说明出现了与失效类似的情况,警告用户注意所出现的失效。36测试(test)测试显然要处理错误、缺陷、失效和事故。测试用例(testcase)测试用例应由测试输入数据和对应的预期输出结果这两部分组成。OVER37通过维恩图理解测试软件测试基本上关心的是行为,而行为与软件(和系统)开发人员很常见的结构视图无关。结构视图关注的是它是什么,而行为视图关注的是它做什么。一直困扰测试人员的难点之一,就是基本文档通常都是由开发人员编写,并且是针对开发人员的,因此这些文档强调的是结构信息,而不是行为信息。38考虑一个程序行为全域。给定一段程序及其规格说明,集合S是所描述的行为,集合P是用程序实现的行为。S规格说明P程序程序行为预期的所实现的39S规格说明P程序预期的所实现的程序行为遗漏缺陷过错缺陷测试就是确定既被描述又被实现的程序行为的范围,同时尽量找出缺陷。S和P相交的部分是“正确”部分,即既被描述又被实现的行为。40S规格说明P程序程序行为T测试用例5621437412和5,可能会有没有测试的已描述行为。1和4,经过测试的已描述行为。3和7,对应于未描述行为的测试用例。2和6,可能会有没有测试的程序行为。1和3,经过测试的程序行为。4和7,未通过程序实现的行为。测试的目标:测试人员怎样才能使这些集合的相交区域(区域1)尽可能地大。2.5测试方法43从代码的特性角度(即内部)出发单元测试(UnitTest):最微小规模的测试,用以测试某个功能或代码块。典型的单元测试应由程序员而非测试员来做,因为它需要知道内部程序设计和编码的细节知识。功能测试(FunctionTest)或特性测试(FeatureTest):按照软件的功能或特性逐个进行测试。覆盖测试(CoverageTesting)44提交测试(Check-inTest):在开发人员对代码做了任何修改,或者修复了某个Bug时,需要重新Check-in代码(即将修改后的代码放大到整个大的系统中)基本验证测试(BuildVerificationTest,简称BVT):对完成的代码进行编译和连接,产生一个构造,以检查程序的主要功能是否会像预期一样进行工作。这是最简单而又最省时的一种测试方法。每产生一个新的构造时都要进行测试。如果BVT通不过,表明问题很严重,开发人员需要尽快修复出现的问题,测试人员也就不用浪费时间做其他测试了45回归测试(RegressionTest):过一段时间以后,再回过头来对以前修复过的Bug重新进行测试,看该Bug是否会重新出现。46从用户的角度(即外部)出发配置测试(ConfigurationTest):从用户的使用出发进行多方面的测试,要考虑到用户的多种情况,用多种配置对软件进行测试。兼容性测试(CompatibilityTest):主要考虑兼容性问题,比如同一个产品的不同版本之间的兼容问题,不同厂家的同一个产品之间的兼容问题,不同类型软件之间的兼容问题等。使用测试(Usagetesting)47强力测试(StressTest):在各种极限情况下对产品进行测试(如很多人同时使用该软件,或者反复运行该软件),以检查产品的长期稳定性。性能测试(PerformanceTest):本项测试是保证程序具有良好的性能。如果别人的产品只需5秒钟就能得出结果,而你的产品需要10秒钟才能得出结果,就说明你的产品性能不好。48文档和帮助文件测试(DocumentationandhelpfileTest):因为用户通常是通过文档和帮助文件来学习使用产品的,如果文档和帮助文件存在错误,就可能会导致用户无法正常使用产品。Alpha和Beta测试(AlphaandBetaTest):在正式发布产品之前往往要先发布一些测试版,让用户能够反馈出相关信息,或者找到存在的Bug,以便在正式版中得到解决。49从区分测试用例的角度出发黑盒测试(BlackBoxTesting):功能性RequirementsInputOutput基于软件规格说明的测试任何程序都可以看作是将从输入定义域取值映射到
本文标题:软件测试(完整版)
链接地址:https://www.777doc.com/doc-1991359 .html