1第1章软件测试的基本概念1、什么是软件测试?软件测试的定义(IEEE1983):是使用人工和自动手段来运行或测试某个系统的过程,目的在于检验其是否满足规定的需要或是弄清楚预期结果与实际结果之间的差别。2、什么是软件缺陷?软件缺陷的定义(IEEE1983):从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题。从产品外部看,软件缺陷是系统所需实现的某种功能的失效或违背。3、什么是测试用例?测试用例的定义(IEEE1990):是一组测试输入、执行条件和预期结果,目的是要满足一个特定的目标,比如执行一条特定的程序路径或检验是否符合一个特定的需求。4.没有安装操作系统的裸机中有软件吗?有软件。在主板上的CMOS芯片中嵌入了BIOS程序,可以看做是一个简单的嵌入式软件。5.软件测试就是通过运行程序来查看错误。对吗?错。软件测试不仅包括动态测试,还包括静态的检查。测试的对象不仅针对查程序,还需要针对文档。6.软件产品发布给用户之后发现了缺陷,将导致怎样的后果?软件产品发布给用户之后,若由用户发现了缺陷,则视缺陷的严重程度和影响范围,导致的后果不同。若导致用户系统崩溃、严重数据丢失、巨大的经济损失,甚至造成人身伤害,则对公司的影响很大。若只是造成用户使用不便,则其产品可能遭到用户的抛弃或投诉。7.手机测试是硬件测试,还是软件测试?既是硬件测试,又是软件测试。针对手机外壳、抗摔、防水等方面的测试是硬件测试,针对手机的通话质量、短信、游戏等方面的测试属于软件测试。8.为什么说软件的需求规格说明书往往是软件缺陷的最大来源?其结论对软件测试工作有何启发?需求规格说明是通过需求分析得到,需求的变动,需求本身描述的不一致、不正确、不完整将导致设计的变更和设计的缺陷,并进一步影响编码的正确性。因此,导致软件与预期结果的偏差越来越大。9.请仿照NextDate问题,针对PrevDate问题设计测试用例。PrevDate问题的功能简述如下。当用户输入有效日期时(从1800年1月1日到2050年12月31日之间的所有日期),系统将自动计算出前一天的日期,否则,系统不执行日期的计算,并给出消息提示输入无效。210.请仿照NextDate问题,针对NextMultiDate问题设计测试用例。NextMultiDate问题的功能简述如下。若用户输入有效日期(从1800年1月1日到2050年12月31日之间的所有日期),并指定延迟的天数(最多不超过366天),假设为n,则系统将自动计算出从有效日期往后n天的日期。对于无效日期或无效延迟天数,系统不执行日期的计算,并给出消息提示输入无效。11.若需要对多个测试用例进行管理,除了ID、输入和输出之外,需针对每个测试用例补充哪些信息?测试用例的构成:ID、、项目/软件、程序版本、编制人/编制时间、功能模块、测试项、测试目的、预置条件、参考文献、测试环境、测试输入、操作步骤、预期结果、执行结果、优先级、测试用例之间的关联。12.请针对1.4.5节NextDate问题的第二次测试中所给出的测试用例,补充测试环境。NextDate的测试环境应根据实际的开发和使用环境而定,从软件使用环境、开发平台等角度考虑即可。13.请针对第6题的PrevDate问题,补充测试环境。同上题。第2章软件测试原理1、对待缺陷我们应遵循哪些基本原则?对待缺陷的基本原则:缺陷的群集现象、缺陷有免疫力(测试要使用不同的测试方法)、缺陷关联和依赖(单纯依赖、多重依赖、复合依赖)。2、当受到进度压力的时候,是优先进行黑盒测试还是白盒测试?应优先进行黑盒测试,因为黑盒测试不需要了解程序实现的细节,通过黑盒测试至少可以证明:被测软件系统可以完成哪些功能,哪些功能不能正确的实现,哪些功能甚至完全没有实现。3、针对同样的问题(例如相同的代码段),采用黑盒测试与白盒测试方法得到的测试用例会有很多是重复3的,那么,白盒测试有意义吗?白盒测试有重要的意义,它主要是覆盖黑盒测试方法检查不到或难以发现的某项缺陷,白盒测试指标还可以充当对黑盒测试方法效果的检查,判断测试是否存在漏洞或冗余。4、静态测试不需要执行程序,那么,是否可以用静态测试替代动态测试呢?不可以。静态测试与动态测试之间即具有一定的协同性,同时又具有相对的独立性。程序静态分析的目标不是证明程序完全正确,而是作为动态测试的补充,在程序运行前尽可能多地发现代码中隐含的缺陷。5、良好的单元测试是否可以替代集成测试?不能。良好的单元测试只能确保通过测试的单元内部基本可以正常工作,但不能保证单元集成在一起之后,能够正常工作,特别要关注可能存在误差累积的情况。在单元测试与集成测试的关系中,即使保证每个单个的单元具有优秀性能,也不能确保整体的性能。6、自动化测试工具可以让繁重的手工劳动变得轻松,那么,我们还有必要做手工测试吗?自动化测试目前不可能完全替代手工测试,一方面是由于自动化测试工具的适用面都相对较窄,一种测试工具往往仅能处理很小一方面的测试问题,另外,有些测试活动需要重复发挥人的创造力,采用自动化测试工具不可能收到同样的效果。7、只要学会某种时下流行的自动化测试工具的使用,就可以轻松搞定测试工作了,是这样吗?不管是什么测试工具,它实质反映的是其背后的测试思想,因此,抛开测试方法去学习测试工具的使用,是没有任何意义的。而且,测试工具使用的前提是必须有测试用例为指导,得到的测试脚本才具有复用性,而测试用例的设计涉及多种测试方法。因此,完全不懂测试技术是不能胜任软件测试岗位的。8、什么是冒烟测试?如何实施?冒烟测试是通过简单测试来判断系统基本功能(通常是核心业务模块)的覆盖率如何,而不验证正确性。例如能否正确安装/卸载,主要功能是否实现,是否存在严重死机或数据严重丢失等缺陷。冒烟测试工作一般需要实现自动化,可以借助诸如WinRunner、QTP这样的工具来录制自动化测试脚本,脚本由专人维护,且随着测试的进展对脚本不断进行增补。9、随机测试就是随便测试,往往会取得意想不到的效果,因此,我们应在软件开发过程中广泛使用随机测试。是这样吗?不能这样。随机测试是没有测试用例的,且往往是不可重复的。这对缺陷的重现十分不利,且广泛采用随机测试将不能保证测试的全面性,无法了解测试的整体效果。若在软考开发过程中广泛使用,可以表明测试过程是混乱的,缺乏管理的,则最终提交的软件产品质量是完全无法保证的。10、在任何情况下,我们执行回归测试时,都应将以前测试过的用例全部执行一遍,是这样吗?不是这样的。回归测试是贯穿在整个测试的各个阶段的一个测试活动,主要是对修改过的软件重新进行测试,目的是为了验证修改的正确性及其影响。回归测试包的选择应根据进度、风险、修改情况等全盘考虑。11、我们该如何应用各种测试过程模型?12、软件测试的目的是证明程序可以工作。软件测试的目的是证伪。这两种说法哪个正确?两种说法都正确,但有存在片面性,应视不同的情况予以应用。13、对比软件测试工程师的素质要求,你认为自己可以胜任软件测试工程师的岗位吗?软件测试工程师的素质要求:两项意识:服务意识、团队合作意识。三颗“心”:耐心、细心、信心。四种能力:技术能力、沟通能力、逆向思维能力、移情能力。五个特性:实在幽默、十足记忆、时刻怀疑、十面督促、十分周全。4第3章黑盒测试技术1.进行边界值测试时,为何要以边界点为中心,以一个单位长度作为邻域,而不是直接选择“1”为邻域?进行边界值测试时,当以一个单位长度为邻域时,邻域随着单位长度的变化而改变。若研究的粒度较精细,可选择更小的邻域,而若边界粒度较粗,则应适当增加单位长度,扩大边界的邻域范围。单位长度可方便地调节边界值测试的邻域。若直接选择“1”为邻域,则有时会造成边界影响面太小,导致遗漏缺陷。2.边界值测试中所选择的输入测试数据一定是有效数据。是这样吗?不一定。边界值测试仅关注边界,设计测试用例时不区分系统输入在边界点上是否有效。因此,系统输入在边界点上可能是有效的,也可能是无效的。3.边界值测试中,若考虑边界的组合情况,即缺陷出现在多个输入条件的边界或边界附近,则称这样的策略为最坏情况测试。若给出两个输入条件x,y,其中条件x具有3个极值点(x1,x2,x3),条件y具有2个极值点(yl,y2),如图3-1所示。请采用最坏情况测试方法,导出测试用例的数目,并设计相应的测试用例。最坏情况测试方法相当于在基本边界值分析的基础上,考虑x,y条件同时取得边界,所以图1中矩形框的边界和边界附近都应取到测试用例。测试用例如图3-1所示。测试用例数目为4×7+4×2+7×1=43。564.对于3.2.8节的Commission问题,请采用基本边界值分析方法,从输入域设计测试用例。从输入域采用基本的边界值分析,得到测试用例集合见表3-2。表中预期输出是指销售员的总提成。表3-2输入域的基本边界值分析测试用例(Commission问题)5.对于3.2.8节的Commission问题,请分析案例实践二(见本书光盘部分的图3.1)中所有边界点是如何得到的。各种酒的单价为:白酒168元/瓶,红酒120元/瓶,啤酒5元/瓶。各销售员每月至少需售出白酒50瓶,红酒30瓶,啤酒300瓶。由此得到最低销售额:1.35万元,对应最小边界点。每个销售员的月供最高为白酒5000瓶,红酒3000瓶,啤酒30000瓶,由此得到最高销售额:135万元,对应最大边界点。销售员的提成公式中,发生提成比例变化的点为:2万元和4.5万元,由此得到中间的两个边界点。6.当时间有限时,应优先针对输入域进行边界值测试,还是针对输出域分析边界?为什么?当时间有限时,应优先从输入域考虑边界值测试。因为系统总是根据输入情况来决定如何进行输出响应。且输出域的边界值测试用例与输入域的测试用例有很多重复的情况。因此,一般情况下,先对输入域展开测试,然后根据输出域的特殊性,补充更多边界测试用例。7.如何才能方便、快捷地了解划分出的等价类是否能够体现真正的等价呢?有两种途径:第一种方式是正向判断法。即从正向观察系统是输入和输出,在划分得到的等价类中随便选择几个数据,并从如下方面来观察:●这些数据是否包含相同的输入条件。●这些数据是否导致程序执行类似的处理。●这些数据是否影响相同的输出结果。●这些数据要么都让软件执行错误处理,要么都不让。若以上方面中任何一方面不成立,则等价类划分肯定有问题。第二种方法是结合决策表方法,若从该等价类划分无法得到精确无误的决策表,则说明该等价类划分是不“等价”的。8.为什么对无效等价类设计测试用例时要采取一一对应原则,这对测试有何好处?设计测试用例时,采取一一对应原则的含义是每个测试用例唯一覆盖一个无效等价类,这样的处理方式有利于缺陷的定位。一旦某个测试用例失败,我们可以很方便地了解,系统对于哪个输入条件的哪个无效等价类无法适当予以处理。79.案例实践三的NextDate实例中,测试用例ND-EP-001到ND-EP-007(见本书光盘)可以很好地考查系统的容错能力,但从满足用户需求的角度而言,这个测试用例的集合违反了实际工作中的一些基本原则,是哪些原则呢?在实际的测试工作中,我们总是优先满足系统的基本功能,即优先测试系统的基本功能,看是否能够正确实现,在测试用例上数目也会更多一些。而在本例中仅有一个测试用例去测试基本功能,却有6个测试用例考查系统的容错能力,这是不合适的。另外,测试应尽量避免漏洞,而不怕冗余,本例中只有一个针对正常数据的测试用例,由此导致的测试漏洞是很大的,因此也违反了测试应避免漏洞的基本原则。10、对于NextDate问题,若将2000年从闰年有效等价类中分离出来,其余两输入条件的划分方式参照3.3.8节的第二次等价类划分尝试(见本书光盘部分的表3.9)。请采用弱组合和强组合方式分别设计等价类测试的测试用例。此时的等价类划分如表3-3所示。若采用弱组合形式进行等价类测试,得到的一组测试用例构成和最终的用例集合分别如表3-4和表3-5所示。若采用强组合形式的等价类测试,则可得到45(3×3×5)个测试用例,具体的用例设计方