L第1章软件测试任务.ppt
1,软件测试技术,2,软件测试技术,http:/,3,软件测试工程师,软件测试工程师,中国软件业每年新增约20万测试岗位就业机会,而企业、学校培养出的测试人才却不足需求量的1/10,这种测试人才需求与供给间的差距仍在拉大。软件测试产品质量的保证 软件测试控制成本的关键 软件测试软件可靠性确认 软件测试让企业具备国际竞争的实力,4,市场需求与日俱增,由于市场和用户对软件质量要求的不断提高,软件行业的竞争逐渐加剧,越来越多的软件公司开始重视软件测试,高薪招聘专业软件测试人员成立软件测试部门,或者将软件测试外包出去,由第三方专业测试公司进行测试,客观地寻找和报告软件错误的存在。由此促生了软件测试的兴起和迅速发展,产生了具有较大发展潜力的软件测试市场。,5,软件测试工程师:市场需求与日俱增的职位,有关专家指出,软件测试是正在快速发展、充满挑战的领域,尽管现在单机版桌面软件的测试已经成熟了很多,但对于网络时代的到临,包括知名跨国公司在内的大公司对基于网络的测试也没有一套完整的体系,也是处于探索中,所以说这一行业所面临的机遇与挑战是共存的。,6,软件测试工程师:市场需求,曾在微软亚洲工程院测试组工作过、有三年软件测试经验的软件测试开发工程师刘俐以其自身经验讲:以微软亚洲工程院为例,那里的测试工程师需要和开发工程师、规程经理一起合作,从产品定义到产品开发再到产品维护,在整个产品生命周期中不断贡献各种建议、测试文档以及测试数据。在这样一个开发团队中,测试工程师的地位和开发工程师,规程经理是一样的是软件开发团队中不可或缺的部分。所以测试工程师是一个对专业技术和自身素质都有一定要求的职业。一个优秀的软件测试工程师无论在何处都是千金难求的。,7,国内外现状,在软件发达国家,特别是美国,软件测试已经发展成为一个独立的产业,主要体现在几个方面:(1)国际学术会议;高校开设软件测试专业和测试课程;,8,国外现状,(2)全球软件开发企业:微软、IBM等重视测试:人员1:2;时间50%。,9,国外现状,(3)测试工具全球的主流测试工具:HP Mercury Interactive(MI),IBM Rational,Compware,Segue,Empirix等。促进了软件测试的发展。,10,国内现状,我国,软件测试技术研究起步于“六五”期间,由于起步晚,与国际先进水平相比差距较大。但随着我国软件产业的蓬勃发展以及对软件质量的重视,软件测试正处于空前的快速发展时期,正逐步成为一个新兴产业。主要体现在几个方面:,11,国内现状,(1)理论上:每两年召开一次全国软件工程会议,都设有软件测试专题;从2001年起召开全国测试学术会议。,12,国内现状,(2)2003年,国家“软件测评师”资格考试。,13,国内现状,(3)国内著名软件公司:认识,意识;专业测试。,14,国内现状,(4)“以测代评”我国科技项目(5)软件测试培训机构和软件测试专业。,15,软件测试工程师的发展途径,一般有以下三种:一种选择是走软件测试的技术路线,成长为高级软件测试工程师,这时他能够独立测试很多软件,再向上可以成为软件测试架构设计师。第二种选择是向管理方向发展,从测试工程师到组长(Lead),再到测试经理(Manager),以至到更高的职位。第三种选择是可以换职业,做项目管理或做开发人员都可以,很多测试工具软件开发工程师在写测试软件的过程中,因为开发方面积累了经验,同时对软件产品本身产生了自己的看法,很容易转去做产品编程。,16,软件测试的重要性,软件所带来的悲剧测试是软件开发重要环节之一,17,千年虫(Y2K),在上个世纪70年代,程序员为了节约非常宝贵的内存资源和硬盘空间,在存储日期时,只保留年份的后两位,如“1980”被存为“80”。当2000年到来的时候,问题就会出现,比如银行存款程序在计算利息时。就是为了这样一个简单的设计缺陷,全世界付出几十亿美元。,18,奔腾芯片缺陷,(4195835/3145727)*3145727 4195835 0$450 million 4.5亿美元损失.2000年 另外一个缺陷发生在1.13 MHz Pentium III,19,爱国者导弹中的软件缺陷,20,迪斯尼并不总是带来笑声,1994年圣诞节前夕,迪斯尼公司发布了第一个面向儿童的多媒体光盘游戏“狮子王童话”圣诞节后的第一天,迪斯尼客户支持部电话开始响个不停,不断有人咨询、抱怨为什么游戏总是安装不成功,或没法正常使用这个游戏软件只能在少数系统中正常运行,21,火星探测飞船坠毁,机械震动在大多数情况下也会触发着地开关,设置错误的数据位。设想飞船开始着陆时,计算机极有可能关闭推进器,而火星登陆飞船下坠1800米之后没有反推进器的帮助,冲向地面,必然会撞成碎片两个小组本身的工作都没什么问题,就是没有合在一起测试,其接口没有被测,而问题就在这里,22,其他一些例子,2003年“冲击波”计算机病毒Windows2000安全漏洞 放射性治疗仪Therac-25中的软件存在缺陷,导致几个癌症病人受到非常严重的过量放射性治疗,其中4个人因此死亡。,23,问题在哪里?,没有足够测试 缺乏测试平台 不正确的测试环境 缺少集成测试 缺少性能测试 缺少强度测试 缺少可靠性测试,24,为什么要进行软件测试?,软件总存在缺陷。只有通过测试,才可以发现软件缺陷。也只有发现了缺陷,才可以将软件缺陷从软件产品或软件系统中清理出去。软件中存在的缺陷给我们带来的损失是巨大的,这也说明了软件测试的必要性和重要性测试是所有工程学科的基本组成单元,自然也是软件开发的重要组成部分。测试人员水平越高,找到软件问题的时间就越早,软件就越容易更正,产品发布之后越稳定,公司赚的钱也越多,微软就是一个典型的例子,25,软件测试学科的发展,从测试的思想导向来划分为4个阶段:19571978年,以功能验证为导向,测试是证明软件是正确的(正向思维)。19781983年,以破坏性为为导向,测试是为了找到软件中的错误(逆向思维)。19831987年,以质量评估为导向,测试是提供产品的评估和质量度量。1988年起,以缺陷预防为导向,测试是为了展示软件符合设计要求,发现缺陷、预防缺陷。,26,更好的阶段划分,分为3个阶段初期阶段、发展阶段和成熟阶段 初级阶段(19571971)测试通常被认为是对产品进行事后检验,缺乏有效的测试方法发展阶段(19721982),1972年第一次关于软件测试的正式会议,促进了软件测试的发展 成熟阶段(1983到现在),国际标准Std 829-1983,形成一门独立的学科和专业,成为软件工程学科中的一个重要组成部分,27,第一章 软件测试的任务,软件的含义软件测试的重要性软件测试的背景,包括 缺陷是什么软件测试的定义和目的软件测试工程师工作职责工作流程工作产品职业道德,28,软件的含义,能够完成预定功能和性能的、可执行的指令(计算机程序);使得程序能够适当地操作信息的数据结构;描述程序的操作和使用的文档。,软件=程序+数据(库)+文档+服务,29,软件组成,客户需求-Customer Requirements市场需求文档-MRD(Marketing Requirement Document)软件规格说明书-Specifications技术设计文档 Technical Design Docs测试文档-Test Documents在线帮助-Online help产品发布注释-Release Notes/Read Me产品软件包-Release packages,Return,30,软件产品的其他内容,帮助文件 Help files 示例 Samples and examples to illustrate points 产品支持文档 Product support information 错误信息 Error messages 安装手册 Setup and installation instructions 用户手册 User manual(s)产品标签 Label and stickers 产品广告或宣传材料 Ads and marketing material,31,软件特点,软件则是逻辑的、知识性的产品集合,是对物理世界的一种抽象,或者是某种物理形态的虚拟化 软件是硬件的灵魂,硬件是软件的基础 软件,是智慧和知识的结晶 软件不会“磨损”,而是逐步完善.,32,软件中的错误是客观存在的,原因人是软件开发中的主角;古话“人非圣贤孰能无过”,33,缺陷是什么,到目前为止,没有标准的定义,不同组织对缺陷的定义不同。有的组织称缺陷为偏差、异常、故障、错误或事故。缺点(defect)偏差(variance)谬误(fault)失败(failure)问题(problem)矛盾(inconsistency)错误(error)毛病(incident)异常(anomy)在实际活动中,最重要的对缺陷有相同的理解.,34,缺陷是什么,在软件测试中,有一组专门用于描述软件中的错误的术语。软件错误:在软件生存期内的不希望或者不可接受的人为错误。软件缺陷:存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差,Bug是口语化的缺陷。缺陷在没有被激活的状态下,软件可以正常运行,但是一旦在某一触发条件下,缺陷被激活,软件内部就会出现故障。,35,缺陷是什么-定义,下面的一些定义已经被大多数专业人员所接受:软件故障:软件运行过程中出现的一种不希望或不可接受的内部状态。此时,如果没有适当的处理措施的话,软件故障就会导致软件失效。软件失效:软件运行时产生的一种不希望或不可接受的外部行为结果。比如死机就是一种严重的软件失效。软件失效是软件用户所能直接感受到的。当软件出现失效时,必然说明软件中存在缺陷。,36,缺陷表现,功能、特性没有实现或部分实现 设计不合理,存在缺陷 实际结果和预期结果不一致 运行出错,包括运行中断、系统崩溃、界面混乱 数据结果不正确、精度不够 用户不能接受的其他问题,如存取时间过长、界面不美观,37,缺陷的代价,缺陷的代价是非常高昂的经济上一项统计数据表明,大约62%的项目成本用于修复软件缺陷。据美国NIST在2002年发布的一项研究估计,美国经济每年因软件Bug会损失600亿美金,约合0.6%的国民生产总值对人类生命的威胁,38,软件缺陷的产生,技术问题算法错误,语法错误,计算和精度问题,接口参数传递不匹配团队工作误解、沟通不充分软件本身文档错误、用户使用场合(user scenario),时间上不协调、或不一致性所带来的问题系统的自我恢复或数据的异地备份、灾难性恢复等问题,39,软件缺陷构成,40,软件缺陷在不同阶段的分布,在真正的程序测试之前,通过审查、评审会可以发现更多的缺陷。规格说明书的缺陷会在需求分析审查、设计、编码、测试等过程中会逐步发现,而不能在需求分析一个阶段发现,41,缺陷成本,42,结论,软件已经越来越多的被使用在日常生活中,我们需要更多的高质量、高可靠性、高安全性的软件产品,但是缺陷,软件世界中的“恐怖分子”,影响着软件的质量,威胁着软件的正常运行。我们无法避免人类犯错,但是可以通过努力将隐藏在软件中的缺陷,尤其是那些致命的,严重的缺陷,尽可能多地寻找出来,尽早定位,尽早解决,避免人间悲剧一次又一次地上演。寻找软件中的缺陷就是软件测试的主要目的,承担这个使命的就是软件测试工程师。,43,软件测试是什么-定义,到目前为止,没有标准的定义。不同组织有不同的定义:Myers程序测试是为了发现错误而执行程序的过程。Bill Hetzel 测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量。请注意:软件测试的目的就是发现软件中的缺陷测试对象不只包括程序代码,也包括与软件相关的交付件,44,软件测试的目标,软件测试的目的就是寻找软件中的缺陷。为了获得更高质量的软件,软件测试的目标是尽量多的寻找软件中的缺陷。另外,考虑到测试成本,软件测试的目的是在可允许的时间跨度内可管理的工作量的条件下尽可能多地寻找软件中的缺陷。,45,软件测试示例,三角形问题,如何完成测试任务。,46,软件测试方法的分类,站在对被测对象内部实现情况了解程度的角度:白盒测试、灰盒测试和黑盒测试;站在是否执行被测系统的角度:静态测试和动态测试;站在测试工具支持的程度:手工测试和自动测试;站在被测内容的角度:功能测试、结构测试和非功能性测试;站在以显示被测对象是否工作的角度:正向测试和反向测试;站在测试过程推进的角度:单元测试、集成测试、系统测试。,47,白盒测试、灰盒测试和黑盒测试,白盒测试(White-box Testing)是指基于被测对象的内部实现结构进行测试的方法。黑盒测试(Black-box Testing)是指把被测对象看成一个不透明的黑盒,在完全不考虑被测对象内部实现的情况下进行测试的方法。灰盒测试(Grey-box Testing)是白盒测试和黑盒测试的混合体,是指在部分了解被测对象实现的情况下进行测试的方法。,48,静态测试和动态测试,静态测试(Static Testing)是指不运行软件系统,而是通过采用检查或者评审的方式寻找被测对象中的缺陷。动态测试(Dynamic Testing)是指运行系统进行测试的过程。动态测试可能是大多数人认为的测试,即通过运行软件进行的测试,49,手工测试和自动测试,手工测试(Manual Testing)是指在不借助测试工具的情况下,完全由人类完成对软件产品的测试。自动测试(Automated Testing)是指通过测试工具或者其它手段,按照测试工程师的预定计划对软件产品进行自动的测试。,50,正向测试和反向测试,正向测试(Positive Testing)是指以验证被测对象的正常行为为测试目标,根据其行为表现判断被测对象中是否存在缺陷的一种测试方法。反向测试(Negative Testing)是指以破坏被测对象的正常行为为测试目标,根据其行为表现判断被测对象中是否存在缺陷。,51,单元测试、集成测试和系统测试,单元测试(Unit Testing)是指以构成软件的基本单位-单元为测试对象,验证其功能是否正常,是否符合设计要求。集成测试(Integration Testing)是指将经过单元测试的构件按照设计要求组装成子系统或系统,以验证按设计要求组合在一起的各单元能够按照既定的意图协作。系统测试(System Testing)是指将已经集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行环境下,对应用系统进行的一系列组装和确认测试,以验证系统是否符合用户需求。,52,功能测试、结构测试和非功能测试,功能测试(Functional Testing)是指依据功能需求规格说明书评估被测对象的功能是否符合需求。结构测试(Structured Testing)是指基于被测对象的内部结构或者逻辑寻找缺陷的测试活动。非功能性测试(Nonfunctional Testing)是指依据非功能需求规格说明书评估被测系统的某些整体属性,例如性能测试、安全性、易用性等是否符合需求。,53,功能测试vs黑盒测试,功能测试针对系统或者组件的功能进行的测试黑盒测试不考虑系统或者组件的内部结构,仅关注系统或组件在特定输入和一定条件所产生的输出区别和联系许多专业人士认为功能测试和黑盒测试是等同的两个事物,作者并不同意此观点,黑盒测试是一种设计测试用例的方法而功能测试是测试的内容,黑盒测试同样可以用于性能、安全、易用性等非功能测试,54,结构测试vs白盒测试,结构测试基于内部结构或者逻辑寻找缺陷的测试过程白盒测试也叫玻璃盒测试、透明盒测试基于系统或者组件内部实现方法寻找缺陷的测试方法区别和联系白盒测试的方法一般可用于进行结构测试,55,软件测试工程师的目标,基于软件测试的目标,软件测试工程师的目标就是发现软件中的缺陷考虑到缺陷修正成本,软件测试工程师的目标是尽早发现程序中的缺陷缺陷被修正后,测试人员必须确认缺陷被修改正确,同时修改没有引入新的缺陷,也就是说软件测试工程师的目标是尽早的发现软件中的缺陷并确保缺陷被正确的修改,56,软件测试工程师如何进行测试,方法根据软件需求规格说明书,设计说明书,代码等软件产物选取恰当的输入组合(测试用例 test case)运行被测对象输入数据执行操作查看输出结果是否和预期的结果一致,如果一致则认为被测对象没有问题,否则,则认为被测对象中可能存在缺陷缺陷修改完毕,验证缺陷修改,确认缺陷是否修改正确是否引入新问题,57,软件测试工程师的工作流程,核心工作产品测试用例缺陷报告单其他重要的工作产品测试计划测试策略测试报告。,58,测试用例是什么,定义针对被测试项的测试输入,执行条件和预期结果的集合(是挑选出来的具有代表性的输入组合)。挑选输入组合的方法就是测试用例设计方法。测试用例是软件测试的灵魂,体现着软件测试工程师的职业价值。测试用例可以用结构化自然语言描述,也可以用编程语言实现。,59,为什么需要测试用例,不可能进行完全的测试根本原因:输入的组合数目太庞大输出的可能结果数目太庞大可执行的路径数目太庞大结论为了进行聪明的测试,软件测试工程师必须在众多的数据中选取恰当的做代表,60,如果你打算测试一个计算器程序的功能,你认为需要进行多少次输入?,不可能进行完全的测试,结论是不计其数整型:从 1+1 到 999999999999999999999999999999+999999999999999999999999999999小数:1.0+0.1,1.0+0.2等等键盘上的任何一种组合为乘法和除法运算重复上面的操作,61,不可能进行完全的测试,这个流程图,其中包括了一个执行达20次的循环。那么它所包含的不同执行路径数高达520条,若要对它进行穷举测试,覆盖所有的路径。假使测试程序对每一条路径进行测试需要1毫秒,同样假定一天工作24小时,一年工作365 天,那么要想把如图所示的小程序的所有路径测试完,则需要3170年。,62,三角形问题-测试用例,三角形问题输入三个整数,这三个数分别代表三角形三条边的长度,请判断这三个数构成的三角形是等边三角形,等腰三角形还是不等边三角形并输出相应的结果。,63,测试用例实现(1),一个用自然语言实现的测试用例实例,不同的组织可能使用不同的测试用例模版,64,测试用例实现,基于JUnit框架(www.junit.org)用Java语言实现的一个测试用例,65,高质量测试用例的属性,高质量测试用例的四个属性有效性是否能够发现缺陷或者至少可能发现缺陷仿效性衡量测试用例的代表程度,减少测试用例的数量经济性测试用例所花费的成本,包括设计、实现、调试和运行测试用例的成本 可维护性修改和维护测试用例的难易程度,66,缺陷报告单,定义缺陷问题报告单是描述缺陷细节的文档,包括缺陷的编号、被测软件及其版本、优先级、严重程度、谁来修复缺陷等等优良的缺陷报告应该具备准确、清晰、简洁、完整,统一的特点,还需要注意:给每个缺陷问题报告单分配一个唯一的标识以有利于缺陷的后续处理、查询和管理维护等活动。站在为他人服务的立场上编写缺陷问题报告单注意语句措词,不要涉及对他人的评价和自己情绪的宣泄只报告问题不要试图解决问题一个缺陷问题报告单里只报告一个缺陷。,67,缺陷问题报告单示例,缺陷问题报告单,张三,68,软件测试工程师职业道德规范,建议恪守职业道德,始终维护所在组织的利益,不能因为个人利益,损害甚至出卖组织具备团队合作精神,在工作中树立为他人服务的意识,始终铭记软件项目不是个人作品,而是整个团队密切合作的产物,当同事们寻求帮助时,应尽最大可能伸出援助之手。具备诚实的品德,实事求是。不能为了个人绩效进行具有欺骗性的活动,如伪造测试数据,对发现的缺陷夸大其辞等。,69,软件测试工程师职业道德规范,建议良好的沟通能力。软件测试工程师的工作是挑别人的毛病,这注定测试人员不会太受团队中其他成员的欢迎,尤其是开发人员。两者经常会因为发现的缺陷究竟是不是真的缺陷而发生冲突。软件开发工程师,出于本能,会为自己的作品辩解不承认测试工程师找到的缺陷是自己的问题或者认为这就是一个功能,而软件测试工程师,出于职业责任感,会坚持自己的意见,此时,如果不适当运用一些沟通技巧,很可能将形成一个互不相让的僵局。在这种情况下,软件测试工程师不防站在开发人员的角度思考一下并选择恰当的方式进行表达。适当的幽默可能会非常有帮助。,70,软件测试工程师职业道德规范,建议始终秉持任何软件都存在缺陷的工作态度。软件测试工程师不能因为自己的想当然或崇拜心理主观地认为被测系统中问题很少或者不会有问题。如果是这样的话,根据心理学研究的结果,那么很可能遗漏本应被发现的缺陷。认真负责仔细耐心。缺陷经常会把自己隐藏在角落里,为了发现缺陷,测试工程师很可能重复相同的操作很多次,如果没有耐心半途而废或者思想有松懈的话,缺陷也许就从会悄悄地溜走。,71,软件测试工程师职业道德规范,建议只要是缺陷不论大小一定要报告。客户和用户会因为系统中竟然会存在类似于页面中的错别字、文本框没有左对齐或是语句不太通顺等很明显的小错误而大动肝火,会认为连这种小问题都没有办法杜绝,系统有何可信而言。另外,一旦测试工程师报告了所发现的缺陷,如果没有确切的理由,那么就要坚持到底所提的缺陷是一个缺陷,不能因为开发人员的态度或者自己自信心的缺乏而退缩。报告不可重现的缺陷。不可重现问题的背后很可能隐藏着系统致命的缺陷,一旦被激活会导致系统运行的不稳定甚至宕机。对于这类缺陷,软件测试工程师有责任提出并且协助开发人员重现定位。,72,软件测试工程师职业道德规范,建议不断充实专业知识,总结工作经验。在目前的IT界里,不跟进先进的专业知识是一种落后,不重复优良的工程经验是一种浪费,这条规则对软件测试工程师也不会例外。,73,优秀软件测试员必备,1、探索精神,软件测试员不会害怕进入陌生环境。2、故障排除能手,软件测试员善于发现问题的症结,喜欢猜谜。3、不懈努力,软件测试员总是不停尝试。4、创造性想出富有创意甚至超常的手段来寻找软件缺陷。5、追求完美,他们力求完美,但是知道某些无法企及时,不去苛求,而是尽力接近目标。6、判断准确,软件测试员要决定测试内容、测试时间,以及看到的问题是否算作真正的缺陷。7、老练稳重,软件测试员不害怕坏消息,必须告诉程序员,你的孩子很丑,知道和不够冷静的程序员怎样合作。8、表达能力,软件测试员要善于表达观点,表明软件缺陷为何必须修复,并通过实际演示力陈观点。9、在编程方面受过教育。,74,术语,软件测试中几组易混淆的术语测试和调试(Testing and debugging)验证和确认(Verification and Validation)动态测试和静态测试(Dynamic testing and Static testing)功能测试和黑盒测试(Functional Testing and black-box Testing)结构测试和白盒测试(Structural Testing and White-Box Testing)测试和质量保证(Testing and Quality Assurance),75,测试和调试,测试测试的目的是为了寻找缺陷调试调试是为了发现、定位和修改程序代码中的错误 调试的目的是为了排错区别和联系测试为了寻找缺陷,调试为了排除缺陷可能存在这样的工作流程:测试发现缺陷 调试定位缺陷和修改缺陷 测试验证缺陷是否修改正确,76,验证和确认,验证评估系统或组件的过程以确定在给定的开发阶段是否满足在该阶段开始时定义的标准,用以验证产品的正确性确认开发过程中或结束时评估系统或组件的过程以确定系统或组件是否满足定义的需求区别和联系验证(Verification)用于回答“我们开发的产品正确吗?”确认(Validation)用于回答“我们开发的正确的产品吗?”,77,验证和确认,在现实中,我们不仅需要验证也需要确认,因为在开发过程中存在这样一种状况,尽管每个阶段的产物符合这个阶段开始定义的标准,但是由于理解的差别,很可能开发出一个正确却不符合用户需求的产品。因此在软件开发过程中既需要验证也需要确认,78,测试和质量保证,软件测试软件测试的目的是为了发现缺陷软件质量保证(Software Quality Assurance SQA)软件质量保证是为软件产品的开发过程或者维护过程达到既定功能目标和管理层要求提供充分证明的一系列系统的有计划的活动软件质量保护的目的是评估和改进过程区别和联系软件测试的工作对象是软件产品软件质量保证的工作对象是软件过程,79,软件测试的误区,误区一:如果发布出去的软件有质量问题,那是软件测试人员的错误区二:软件测试技术要求不高,至少比编程容易多了误区三:有时间就多测试一些,来不及就少测试一些误区四:软件测试是测试人员的事,与开发人员无关误区五:根据软件开发瀑布模型,软件测试是开发后期的一个阶段,80,误区一:如果发布出去的软件有质量问题,那是软件测试人员的错 软件测试是一种有效提高软件质量的手段,但即使在投入上有所保证,测试也并不能百分之百地发现所有质量隐患。况且,软件的高质量不是靠测试测出来的,而是软件开发过程中每一个环节都要有质量意识,做好检查、审查等工作,才能保证质量。任何一个环节出问题,都有可能带来质量的隐患。,81,误区二:软件测试技术要求不高,至少比编程容易多了 很多人认为软件测试就是运行一下软件,然后看看结果对不对。实际上,软件测试不仅仅只是运行或操作软件,还要涉及测试环境的建立、测试用例的设计等技术问题。当采用白盒测试方法时,需要良好的编程经验;在进行自动化测试时,需要写测试脚木,也需要良好的编程经验。如何在有限的资金投入下,提高软件测试的效率和保证产品的高质量是一件较困难的事情。所以,一位优秀的软件测试人员不仅要掌握各种测试技术,还要具备仁富的编程经验和对bug的敏感,从一定意义上说,对测试人员的要求比编程人员的要求还要高。,82,误区三:有时间就多测试一些,来不及就少测试一些 软件测试并不是可有可无的,测多少、怎样测也不是随心所欲的。规范化的软件开发过程需要对软件测试早做计划,分配必要的时间、人力和财力等资源,并将其作为项目管理的一个重要部分,进行跟踪、控制和协调。,83,误区四:软件测试是测试人员的事,与开发人员无关 为了减小相互的影响,一般要求开发和测试相对独立,但这只是分工上的不同。编程和测试是软件项目相辅相成的两个过程,人员之间的交流、协作和配合是提高整体开发效率的重要因素。而且在实际操作中也会有一些测试,比如单元测试,会由测试人员提供测试用例,由开发人员运行,或全部由编程人员完成。,84,误区五:根据软件开发瀑布模型,软件测试是开发后期的一个阶段生命周期中的“测试阶段”表明在该阶段的主要任务是执行测试、运行测试脚本、测试结果分析和递交测试报告,而测试的大量准备工作,诸如测试计划、测试用例设计以及测试脚本编写等,实际是在还没有开始写程序之前就开始了,可以说项目什么时候开始,测试工作也就什么时候开始。如果到“测试阶段”才开始启动测试工作,那为时已晚,没有计划,没有测试用例,测试也就很容易是“走过场”。即使程序测试,也不是要等到软件程序全部完成后才开始运行。针对每个程序单元、模块,可以进行单元测试;把程序单元或模块进行集成时,需要进行相应的集成测试;在进行集成测试和系统测试之前,就要准备测试环境。所以,编程与测试儿乎是同步进行的。,85,小结,缺陷为人类带来巨大的损失,软件测试的目的就是为了寻找缺陷软件测试只能说明软件中存在缺陷软件测试工程师利用测试用例发现缺陷测试用例是软件测试工程师的核心工作产品,体现着软件测试工程师的职业价值,86,Q&A,