xxx科技学院软件工程论文题目:软件测试专业:计算机科学与技术专升本姓名:学号:指导老师:目录摘要....................................................11.绪论..................................................21.1软件测试的目的..................................................21.2相关背景........................................................21.3软件测试过程....................................................31.4软件测试团队的地位..............................................32.软件测试基础...........................................52.1软件测试的定义..................................................52.2软件测试概念....................................................52.3软件测试原则....................................................53.软件测试分类...........................................73.1白盒测试和黑盒测试..............................................73.2静态测试和动态测试.............................................103.3单元测试和集成测试.............................................113.4其他测试方法...................................................144.软件测试工具...........................................154.1常用的软件测试工具.............................................154.2软件测试工具网站...............................................155.缺陷管理...............................................165.1什么是Bug?.....................................................165.2Bug的分类.....................................................165.3缺陷报告.......................................................176.总结和思考.............................................18参考文献.............................................................19摘要随着IT行业的迅速发展,计算机使用越来越普及,越来越多的领域使用了计算机,特别是一些重要领域如国防、银行、金融、通讯、航天等,他们对软件质量要求很高。同时一些重大事故的发生,也引发了人们对软件质量的关注。如2002年欧洲载重10吨的阿丽亚娜5型火箭发射失败,最后证实是软件质量问题;还有国内的一些银行金融系统,因软件质量问题不得不暂停营业。毋庸置疑,在经历了长期的不为人知和可有可无后,软件测试目前已变的炙手可热。随着中国软件市场的发展,越来越多的国外资金投向中国软件行业。据报道,中国软件外包市场的潜力和机会已远远超过软件王国印度,不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才,不断采取积极有效的措施。软件测试是个需求高,就职机会大的职业。目前,我国具备软件测试能力的人员数量和市场需求相差巨大,巨大的市场空缺,使软件测试工程师从初级到高级,只需要1年甚至更短的时间来完成。所以软件测试行业,未来的发展空间是非常广阔的。关键字:软件测试1.绪论1.1软件测试的目的随着人类社会的进步,各种领域计算机的普及,软件测试在计算机领域占据着不可替代的角色,计算机软件也越来越多的出现在各个场合,为人们的办公,生活,学习,休闲等提供了前所未有的方便,但不能保证计算机软件能一步到位的满足人们的需求,所以就有了软件测试。软件测试的目的是:第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Dotherightthing),另一方面是确认软件以正确的方式来做了这个事件(Doitright)。作为计算机专业的学生,我想以我自己的观点来阐述一下我对软件测试的理解。1.2相关背景实际上,测试贯穿于整个软件开发生命周期(SDLC),从需求评审、设计评审开始,就介入到软件产品的开发活动或软件项目的实施中。如图1表示,测试和开发构成一个全过程的交互、协作的关系,两者自始至终一起工作,共同致力于完成同一个目标——按时、高质量地完成项目。软件测试与SDLC的关系需求分析定义系统、架构设计验收测试执行义系统测试执行功能测试执行详细或程序设计编码单元测试交互合作交互协作、缺陷修正交互协作、缺陷修正验收测试用例设计系统测试用例设计和环境准备功能测试用例设计设计技术复审需求评审设计规格说明书复审1.3软件测试过程软件测试的全过程,其中主要的里程碑有:产品需求文档(PRD)或市场需求文档(MRD)的评审和签发;产品需求规格说明书(Spec)的评审和签发;测试计划、测试计划书的评审和签发;测试用例的设计、的评审和签发;功能测试;系统测试;验收测试。图1.软件测试总体流程图1.4软件测试团队的地位在软件开发过程中,有各种各样的人员参与,包括项目经理、产品经理、UI(用立项阶段设计阶段编码&单元测试阶段系统测试阶段集成测试阶段结项总结阶段验收测试阶段需求阶段户界面)设计人员、文档人员等,但最大的两个团队就是测试团队和开发团队(有设计人员/程序人员组成),也就是说,一个软件公司,测试人员和程序员,占有最大比重。可见,软件测试团队的地位应该举足轻重。2.软件测试基础2.1软件测试的定义简单的说,软件测试就是发现系统需求定义、系统设计、程序代码和文档中的缺陷,但这仅仅是不够的,究竟什么是软件测试呢?G.J.Myers给出的定义:“程序测试是为了发现错误而执行程序的过程”。这个定义被软件测试界所认可,随后G.J.Myers又进一步提出了有关程序测试的3个重要观点,那就是:(1)测试是为了证明程序有错,而不是证明程序无错误。(2)一个好的测试用例在于它能发现至今未能发现的错误。(3)一个成功的测试是发现了至今未发现的错误的测试。2.2软件测试概念测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Dotherightthing),另一方面是确认软件以正确的方式来做了这个事件(Doitright);第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息;第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。2.3软件测试原则软件测试原则一:(1)所有的测试都应追溯到用户需求。正如我们所知:软件测试的目标在于揭示错误。而最严重的错误(从用户角度来看)是那些导致程序无法满足需求的错误。(2)应该在测试工作真正开始前的较长时间内就进行测试计划。测试计划可以在需求模型一完成就开始,详细的测试用例定义可以在设计模型被确定后立即开始。因此,所有测试应该在任何代码被产生前就进行计划和设计。(3)Pareto原则应用于软件测试。简单地讲,Pareto原则暗示着测试发现的错误中的80%很可能起源于程序模块中的20%。当然,问题在于如何孤立这些有疑点的模块并进行彻底的测试。(4)测试应从小规模开始,逐步转向大规模。最初的测试通常把焦点放在单个程序模块上,进一步测试的焦点则转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。(5)穷举测试是不可能的。即使是一个大小适度的程序,其路径排列的数量也非常大。因此,在测试中不可能运行路径的每一种组合。然而,充分覆盖程序逻辑,并确保程序设计中使用的所有条件是有可能的。(6)为了达到最佳效果,应该由独立的第三方来构造测试。最佳效果指最有可能发现错误的测试(测试的主要目标),所以创建系统的软件工程师并不是构造软件测试的最佳人选。(7)不充分的测试是不负责任的;过分的测试是一种资源的浪费,同样也是一种不负责任表现。软件测试原则二:(1)应当把尽早和不断的测试作为开发者的座右铭。(2)程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完成。(3)设计测试用例时应该考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。(4)一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。(5)对测试错误结果一定要有一个确认的过程,一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。(6)制定严格的测试计划,并把测试时间安排的尽量宽松,不要希望在极短的时间内完成一个高水平的测试。(7)回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多的错误出现的现象并不少见。(8)妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档3.软件测试分类随着软件测试技术的发展,测试方法更加多样化,针对性更强;选择合适的软件测试方法可以让我们事半功倍。以下是一些常用的软件测试方法:(1)从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为:白盒测试和黑盒测试。(2)从是否需要执行被测软件的角度,可分为:静态测试和动态测试。3.1黑盒测试和白盒测试黑盒测试是指不考虑程序的内部结构和内部特性,而是从用户的观点出发,针对程序接口和用户界面进行测试。黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:(1)功能不正确或遗漏功能;(2)界面错误;(3)数据结构错误或外部数据库访问错误;(4)性能错误;(5)初始化或终止性错误。用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。但这是不可能的。n假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:n可能采用的测试数据组:232×232=264n如果测试一组数据需要1毫秒,一年工作365×24小时,完成所有测试需5亿年。黑盒测试的测试用例设计:等价划分法、边界值法、错误推测法、因果图法。1.等价类划分1等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。2等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。3使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。4划分等价类:等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。等价类的划分有两种不同