3Sept.2008©NeusoftConfidential1东软IT人才实训中心软件测试基础(一)目标:本章旨在向学员软件测试理论知识工具的内容,通过本章节的学习,学员应该掌握如下知识:1)什么是软件测试2)软件测试的发展3)软件测试对当今行业的重大意义4)软件测试工程师的发展前景5)软件测试分类时间:6学时教学方法:PPT4职业现状•随着中国软件业的迅猛发展,软件产品的质量控制与质量管理正逐渐成为企业生存与发展的核心。为了保证软件在出厂时的“健康状态”,几乎所有的IT企业在软件产品发布前都需要大量的质量控制工作。作为软件质量控制中的重要一环,软件测试工程师应运而生。•国内软件业因对软件质量控制的重要作用认识较晚,尚未形成系统化的软件测试人才需求供应链,造成了目前企业欲招纳软件测试人才却“千金难求”的尴尬局面。5软件开发的平均资金投入2011年8月15日星期一3%8%7%15%67%需求分析设计编程测试维护6软件测试的职业优势①岗位需求巨大②岗位人才供给少③多元化发展④无性别歧视7软件测试工程师的素质(1)技术能力•作为一名测试工程师,不能仅仅从使用者的角度来测试软件产品,而且还要从技术的角度来设计测试用例,这里所说的技术包括基础的与专业的。•基础方面应学习以下的课程:–编程语言、数据库理论、计算机网络技术、软件工程、数据结构、计算机原理等;•专业方面应掌握:–软件测试基础、测试设计、测试工具、软件质量管理、一门或多门外语等等。8软件测试工程师的素质(2)具有一定的编程经验;•测试工程师有时候需要对源码进行检查,有时候也会从程序结构的角度来测试软件,有时候需要写一些自动测试的工具软件,有时候需要写测试脚本,会写简单代码,能读懂源码对测试人员来说是必须的,而且如果有一定的编程经验,可以帮助你对软件开发过程有较深入的理解,从编程人员的角度来正确地评价。9软件测试工程师的素质(3)沟通能力;•测试人员需要与很多人员进行沟通,项目经理、开发人员、客户、市场人员等都是测试人员经常吵架的对象,而且在面对不同人员,你需要不同的语气、不同的态度,与客户要谈得来,处处为客户着想,客户就是上帝,与上帝说话要和颜悦色,与开发人员交往就需要技巧了,测试人员与开发人员往往是不共戴天的,双方在心理上经常较劲,因此在说话的语气或讲述一个问题的出发点时特别要注意了。10软件测试工程师的素质(4)要有严谨、敢于承担责任、稳重的做事风格;•思惟严密,什么问题都要考虑到,当然除了做事认真仔细,也要有承担责任的勇气,在漫长的项目实施过程中,或大或小的错误在所难免,要敢于承认错误。11软件测试工程师的素质(5)具有怀疑与破坏的精神;•测试人员不能总是以常规的思路来测试软件,要设计一些非常规的、相反的测试用例来不断地折磨软件产品,要破坏性地测试,并且不要停止你的怀疑。12软件测试工程师的素质(6)善于自我总结、自我督促;•应该说软件测试是一种即繁琐又枯燥无味的工作,做多了你会觉得似乎一成不变,对自已的能力没有提高,这时候就需要你作自我督促,并经常作一些阶段性的总结,新的技术新的方法新的工具层出不穷,要让自已跟上技术发展的脚步,善于将新技术新方法新工具应用到测试工作当中。13软件测试工程师的素质(7)耐心和细心•保持心态的平和,切忌不可烦躁(8)团队合作•多参加团队活动,提高自己的团队作战能力软件测试的概念•你认为什么是软件测试?软件测试是通过人工或者自动手段来运行或测试某个系统的过程,从而验证软件是否能达成期望功能,它是验证软件期望功能的唯一有效方法,也是保证软件产品质量的唯一途径。注意:软件测试并非是简单的“挑错”,而是贯穿于软件生产过程的始终,一套完善的质量体系。这要求测试工程师具备系统的测试专业知识及对软件的整体把握能力。15软件测试的发展•70年代:Bill.Hetzel,“评价一个程序和系统的特性或能力,并确定它是否达到预期的结果。软件测试就是以此为目的的任何行为。”核心观点是:测试是验证软件是“工作的”,以正向思维,针对软件系统的所有功能点,逐个验证其正确性。这就是软件测试的第一类方法。16软件测试的发展•软件测试的第二类方法:Glenford.Myers:测试不应着眼于验证软件是工作的,应该认定软件是有错误的,然后用逆向思维去发现尽可能多的错误。“测试是为发现错误而执行的一个程序或者系统的过程。”核心观点是:测试是为了证明程序有错,而不是证明程序无错误;一个成功的测试是发现了至今未发现的错误的测试;17软件测试的发展基于不同的立场,测试的角度就不同①从用户的角度出发,希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。②从软件开发者的角度出发,希望测试表明软件中不存在错误,验证该软件已正确地实现了用户的要求,确立对软件质量的信心。软件测试的目的“软件测试的目的在于证明软件能够正确完成其预定的功能”–软件测试是为了发现错误而执行的过程;–测试是为了证明程序有错,而不是证明程序无错误;–一个好的测试能够在第一时间发现程序中存在的错误;–一个好的测试是发现了至今尚未发现的错误的测试。(GrenfordJ.Myers《TheArtofSoftwareTesting》)19软件测试的目的•最终目的是确保软件的功能符合用户的需求,把尽可能多的问题在发布或交付前发现并改正–确保软件完成了它所承诺或公布的功能–确保软件满足性能的要求–确保软件是健壮的和适应用户环境的软件测试的意义•产品竞争的保证–激烈竞争的市场环境–替代品的快速发展–需求的提高•企业持续发展的手段–维护产品质量–不断提高服务–保有当前用户,拓展潜在用户21软件质量•质量是反映一个产品或服务满足明确和隐含需要的能力的程度–从客户的角度•满足要求•适用–从生产者的角度•以最经济的手段制造出市场上最有用的产品22质量特性因子软件质量因子功能可维护性性能可用可靠性重用移植安全23质量特性因子质量特性因子含义说明功能性软件所实现的功能能达到它的设计规范和满足用户需求的程度任何类型的软件,功能特性都是不可缺少的重要指标性能在规定条件下,实现软件功能所需的响应时间和计算机资源(CPU、内存、磁盘空间和数据吞吐量)的使用程度性能性经常称为“效率”可靠性在满足一定条件的应用环境中,软件能够正常维持其工作的能力,在出现一些错误操作时,软件可以具有容错性,如果软件意外退出,重新启动后可以恢复最近的软件数据某些关系到生命财产安全的特定领域的软件,例如航天、金融等系统的软件,可靠性是重要的指标安全性为了防止意外或人为的破坏,软件应具备的自身保护能力对于军用软件和国家机密软件,软件安全性非常重要24质量特性因子质量特性因子含义说明可用性用户在理解、学习和操作软件的过程中的付出的努力的难易程度办公软件、应用系统维护性软件在运行维护过程中,如果出现了运行故障或者扩展新功能,软件系统是否具有可分析性和良好的扩展性,重新设计后的软件的稳定性和可测试性可把软件的维护性细分为“可维护性”和“可扩展性”移植性软件从现有运行平台向另一个运行平台过度的适应程度和平台可替换性旧系统升级改造,需要跨不同操作系统时,此特性重点关注重用性整个软件或其中一部分能作为软件包而被再利用的程度重用性高的软件设计,可以大大降低开发成本,提高软件的稳定性26软件测试的分类•按照开发阶段划分•按照测试方法划分或针对系统内部结构与具体实现算法•按照测试实施的组织划分•按照被测软件是否运行划分27按照开发阶段划分测试分类内容说明单元测试模块测试,检查每个程序单元是否正确实现详细设计说明中的模块功能。集成测试组装测试,将所有的程序模块进行有序、递增的测试,检验程序单元或部件的接口关系。系统测试检查完整的程序系统能否和系统(包括硬件、外设和网络、系统软件、支持平台等)正确配置、连接,并满足用户需求。确认测试证实软件是否满足特定于其用途的需求,是否满足软件需求说明书的规定。验收测试按照项目任务或合同,供需双方签订的验收依据文档进行的对整个系统的测试与评审,决定是否接受或拒收系统。回归测试指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。经典模式需求分析需求理解设计程序代码系统测试验收测试集成测试单元测试需求规格说明概要设计规格说明详细设计规格说明按照测试方法或针对系统内部结构与具体实现算法黑盒测试功能/数据驱动测试、外部结构等价类划分、边界值分析、因果图、错误推测等QTP,Loadrunner白盒测试结构/逻辑驱动测试、内部结构与逻辑设计逻辑驱动、基路测试等PRQA等灰盒测试结合黑盒与白盒、特定应用环境、组件协同环境中评价方法与工具组成30•黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。•黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。黑盒测试黑盒测试的优缺点优点:•从产品功能角度测试可以最大限度地满足用户的需求。•相同动作可重复执行,最枯燥的部分可由机器完成。•依据测试用例有针对性地寻找问题,定位更为准确,容易生成测试数据。•将测试直接和程序/系统要完成的操作相关联。缺点:•代码得不到测试。•如果规格说明设计有误,很难发现。•测试不能充分地进行。•结果的准确性取决于测试用例的设计。3132•白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。•这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。白盒测试白盒测试的优缺点优点:•迫使测试人员去仔细思考软件的实现•可以检测代码中的每条分支和路径•揭示隐藏在代码中的错误•对代码的测试比较彻底缺点:•昂贵•无法检测代码中遗漏的路径和数据敏感性错误•不验证规格的正确性3334•灰盒测试,是介于白盒测试与黑盒测试之间的,可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。灰盒测试灰盒测试的优缺点相对于黑盒测试的优点:•测试可以及早介入•有助于测试人员理解系统结构•有助于管理层了解真实的开发进度•可以构造更好的测试用例•利于提升测试人员能力相对于白盒测试的优点:•首先,招聘成本相对较低•其次,培训成本较低•最后,人力成本较低相对于白盒测试的优点:•强化开发文档•自行开发自动化35灰盒测试的优缺点灰盒测试的缺点:不适用于简单的系统对测试人员的要求比黑盒测试高不如白盒测试深入3637•开发方测试:开发方通过检测和提供客观证据,证实软件的实现是否满足规定的需求,在开发环境下,开发方对提交的软件进行全面的自我检查。•用户测试:在用户的应用环境中,用户通过运行软件,检测软件实现是否符合自己预期的要求,这里指用户的使用性测试。•第三方测试:介于软件开发方和用户方之间的测试组织的测试。按照测试实施组织划分38•静态测试:不实际运行软件,发挥人的逻辑思维优势,主要对软件代码的逻辑、程序结构等方面进行评估。•动态测试:实际运行软件。按照软件是否运行划分静态测试•定义:不实际运行软件,发挥人的逻辑思维优势,主要对软件代码的逻辑、程序结构等方面进行评估。•阶段/方法需求评审设计评审代码走查代码检查动态测试•在生命周期中进行测试(运行程序代码)•阶段/方法单元测试集成测试系统测试验收测试回归测试案例•测试人员使用脚本工具发现某模块接口错误,出现严重BUG;•用户邮箱无法开启,并出现乱码;•让客户端连续在线跑48小时;•将杀毒软件开启的情况下,开启客户端运行;•测试人员A根据Cheaklist检查程序B的开发代码;其他测试方法——附表ID测试方法