自动化面试题三(41 ~ 73)
41、单元测试、集成测试、系统测试的侧重点是什么?
- 单元测试:针对的是软件设计的最小单元--程序模块(面向过程中是函数、过程;面向对象中是),进行正确性检验的测试工作,在于发现每个程序模块内部可能存在的差错。一般有两个步骤:人工静态检查\动态执行跟踪
- 集成测试针:对的是通过了单元测试的各个模块所集成起来的组件进行检验,其主要内容是各个单元模块之间的接口,以及各个模块集成后所实现的功能
- 系统测试:针对的是集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件\外设\某些支持软件\数据和人员等其他系统元素结合在一起,要在实际的运行环境中,对计算机系统进行一系列的集成测试和确认测试
42、一个测试工程师应具备那些素质?
1、责任心2、沟通能力3、团队合作精神4、耐心、细心、信心5、时时保持怀疑态度,并且有缺陷预防的意识6、具备一定的编程经验
43、你所了解的的软件测试类型都有哪些,简单介绍一下。
按测试策略分类:
- 1、静态与动态测试
- 2、黑盒与白盒测试
- 3、手工和自动测试
- 4、冒烟测试
- 5、回归测试;
按测试阶段分类:
- 单元测试、
- 集成测试、
- 系统测试;
其他常见测试方法:
- 1、功能测试
- 2、性能测试
- 3、压力测试
- 4、负载测试
- 5、易用性测试
- 6、安装测试
- 7、界面测试
- 8、配置测试
- 9、文档测试
- 10、兼容性测试
- 11、安全性测试
- 12、恢复测试
44、你认为做好测试计划工作的关键是什么?
关键在于:
了解项目或系统的业务需求,明确测试的目标,增强测试计划的实用性,和项目经理协调好,了解项目的进度计划安排情况
- 编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
坚持“5W”规则,明确内容与过程,“5W”规则指的是
- “What(做什么)”、
- “Why(为什么做)”、
- “When(何时做)”、
- “Where(在哪里)”、
- “How(如何做)”。
- 利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)
- 采用评审和更新机制,保证测试计划满足实际需求
- 测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员
- 分别创建测试计划与测试详细规格、测试用例
- 应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。
45、您认为做好测试用例设计工作的关键是什么?
对业务和软件需求非常清楚,可以根据需求不同选择不同的测试用例设计
- 白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
- 黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题
46、你的测试职业发展目标是什么?
- 我个人觉得测试工作的时间越长,越能发现自己自身的不足,所以需积累测试经验,提高测试能力,所以我的职业发展第一需要时间积累总结;第二我的目标是测试开发;而今年在做测试和自动化的业余时间学习性能分析判定性能优化方案为方向;看时间安排在进行学习测试开发方面的知识,不断的自我提高改正自己,做好测试任务
47、测试结束的标准是什么?
- 从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行72小时,目前Bug 跟踪系统中,本版本中没有一般严重的BUG,普通BUG的数量在3以下,BUG修复率90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本发布。
- 如果说宏观的,则是当这个软件彻底的消失以后,测试就结束了。
48、一套完整的测试应该由哪些阶段组成?
- 可行性分析、需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试
49、您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
- 开发过程---需求调研(需求人员)、需求分析(需求人员)、概要设计(设计人员)、详细设计(设计人员)、编码(开发人员)
- 测试过程---需求评审、系统测试设计、概要设计评审、集成测试设计、详细设计评审、单元测试设计、测试执行
- 测试工作的整个过程都做过,擅长做测试设计
- 过程决定质量,软件的过程改进正是为了提高软件的质量,将过往的种种经验教训积累起来。
50、测试用例设计的原则是什么?目前主要的测试用例设计方法有哪些?
- 代表性:能够代表并覆盖各种合理的和不合理、合法的和非法的、边界的和越界的、以及极限的输入数据、操作和环境设置等.
- 可判定性:即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果.
- 可再现性:即对同样的测试用例,系统的执行结果应当是相同的。
- 方法有等价类、边界值、场景法、因果图、状态图、正交法、错误推断法
51、面向对象的测试用例设计有几种方法?如何实现?
- 给类中的每个构造函数设计一组测试用例
- 组合类中的类变量、实例变量
- 组合类中的各种方法
- 根据前置条件和后置条件设计测试用例
- 根据代码设计测试用例
52、你对测试最大的兴趣在哪里?为什么?
最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。
刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。
我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣)
- 第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。
- 第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。
53、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
测试类型有:功能测试,性能测试,界面测试。
- 功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
- 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
- 界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
- 区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试
- 易用性测试-界面的友好性,操作方便性等。
- 功能测试-系统中功能性需求的满足
- 安全性测试-系统是否存在安全隐患和漏洞
- 性能测试-系统在大并发下的响应速度和健壮性
54、请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
- 黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
- 白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。
黑盒测试主要是为了发现以下几类错误:
- 1、是否有不正确或遗漏的功能?
- 2、在接口上,输入是否能正确的接受?能否输出正确的结果?
- 3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
- 4、性能上是否能够满足要求?5、是否有初始化或终止性错误?
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。
白盒测试主要是想对程序模块进行如下检查:
1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
- 单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
- 单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
- 集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
- 系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)
- 系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
- 验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
- 验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能性能如同用户所合理期待的那样。
55、当开发人员说不是BUG时,你如何应付?
开发人员说不是bug,有2种情况,
- 一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。
- 二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。
56、为什么要在一个团队中开展软件测试工作?
- 因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。
- 在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。
57、一份测试计划应该包括哪些内容?
- 背景、项目简介、目的、测试范围、测试策略、人员分工、资源要求、进度计划、参考文档、常用术语、提交文档、风险分析。
58、针对于软件的行业背景,你如何理解软件的业务?
- 阅读用户手册了解软件的功能和操作流程;看一些业务的专业书籍补充业务知识;如果有用户实际的数据,可以拿实际的数据进行参考;参考以前的用例和BUG报告;在使用软件的过程中多思考;多与产品经理交流。
59、如何定位测试用例的作用?
- 组织性:编写、组织性、功能覆盖、重复性、跟踪、测试确认
60、什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。
- 主要验证软件产品在不同版本之间的兼容性。包括向下兼容和交错兼容,向下兼容是测试软件新版本保留它早期版本功能的情况,交错兼容是验证共同存在的两个相关但不相同的产品之间的兼容性。
61、对某软件进行测试,发现在WIN98上运行得很慢,怎么判别是该软件存在问题还是其软硬件系统问题?
- 看软件的运行环境要求。如果符合要求则是程序存在问题,若不符合要求则是硬件系统存在问题
62、需求测试的注意事项有哪些?
- 是否使用了公司的模板、
- 文档内容是否符合规范、
- 所有的需求是分级是否清析适当、
- 所有的需求是否具有一致性、
- 需求是否可行(即,该需求组合有解决方案)、
- 需求可否用己知的约束来实现、
- 需求是否足够(即,可以把它送到一个规范的开发组织,并有一个生产出所需要产品的合理的可能性)、
- 所有的其它需求是交叉引用是否正确、
- 用户描述是否清楚、
- 是否用客户的语言来描述需求、
- 每个需求描述是否清楚没有岐义,可以移交给一个独立的组去实现时也能理解、是否所有的需求都是可验证的、是否每条需求都具有独立性,
- 即使发生了变化也不会影响其它需求、性能指标是否明确、非功能性需求是否得到充分表现、是否完整列出适用的标准或协议、标准和协议之间是否存在冲突
63、主键、外键的作用,索引的优点与不足?
主键:是表中的唯一标示键。
- 作用:保证实体的完整性;加快数据库的操作速度;增加新的表记录时,数据库会自动检索新记录的主键值,不允许该值与其他表中记录的主键重复;数据库会按主键值的顺序显示记录,如果没有设定主键,则按输入的顺序显示记录。
外键:是主键的从属,表示了两个表之间的联系。
- 作用:使用外键可以避免冗余。
索引的
优点:
- 1、通过创建唯一性的索引,可以保证表中数据的唯一性;
- 2、加速数据的检索速度;
- 3、加快表与表之间的连接;
- 4、在使用分组与排序数据检索时,可以显著检索分组与排序的时间;
- 5、在查询的过程中使用优化隐藏器,提供系统性能。
缺点:
- 1、创建索引需要时间,且随着数据量的增加而增加;
- 2、索引需要占用物理空间;
- 3、当对表中数据进行修改时,索引也要动态维护,降低了数据的维护速度。
64、性能测试的流程?
- 1.测试需求分析
- 2.测试计划制定与评审
- 3.测试用例设计与开发
- 4.测试执行与监控
- 5.分析测试结果
- 6.编写性能测试报告
- 7.测试经验总结
65、简述bug的生命周期?
- 新建bug---指派---已解决---待验证---关闭
66、缺陷bug记录应包含的内容?
禅道提交bug界面
- 所属产品、所属模块、所属项目、影响版本
- 当前指派、截止日期
- Bug类型(代码错误、界面优化、配置相关、安装部署、安全相关、性能问题、标准规范、测试脚本、其他、设计缺陷)
- 操作系统、浏览器、Bug标题、严重程度、优先级、重现步骤、相关需求、抄送给、附件、相关任务、关键词
67、您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容。
- 评审计划->一审->二审(修改后有必要的话需要二审);
- 评审内容主要是测试用例对软件需求的覆盖程度,对于相关边界是否考虑,是否针对复杂流程准备多套测试数据,是否有专门针对非功能性需求的测试。
68、您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
性能测试的目的:
- 评估系统的能力----测试中得到的负荷和响应时间数据可被用于验证所计划的模型的能力,并帮助作出决策。
- 识别体系中的弱点----受控的负荷被增加到一个极端水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
- 系统调优---重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。检测软件中的问题,长时间的测试执行可导致程序发生由于内存泄漏引起的失败,揭示程序中的隐含问题或冲突。
- 验证稳定性,可靠性---在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
关注点:how much
做好性能测试工作的关键是强度测试(Stress Test): 强度测试
性能测试是:
- 1、性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
- 2、性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能的测试。通常情况下,三方面有效、合理的结合,可以达到对系统性能全面的分析和瓶颈的预测。
- 3、应用在客户端性能测试的目的是考察客户端应用的性能,测试的入口是客户端。它主要包括并发性能测试、疲劳强度测试、大数据量测试和速度测试等,其中并发性能性能测试图像测试是重点。
- 4、并发性能测试的目的主要体现在三个方面:以真实的业务为依据,选择有代表性的、关键的业务操作设计测试案例,以评价系统的当前性能;当扩展应用程序的功能或者新的应用程序将要被部署时,负载测试会帮助确定系统是否还能够处理期望的用户负载,以预测系统的未来性能;通过模拟成百上千个用户,重复执行和运行测试,可以确认性能瓶颈并优化和调整应用,目的在于寻找到瓶颈问题。
69、您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程。
- 禅道、CQ
- 结合此文档叙述:https://www.cnblogs.com/shouhu/p/12175193.html
70、您如何看待软件过程改进?在您曾经工作过的企业中,是否有一些需要改进的东西呢?您期望的理想的测试人员的工作环境是怎样的?
- 将先进的经验或思想固化到过程中,通过过程改进和能力提高来改进软件质量。
71、如果开发一直拖延版本作为测试应该怎么办?在需求分析中你提出过建议吗?
- 其实我们公司也有过这种情况,开发拖延导致测试时间严重压缩,然后加班很严重。后面从流程管理上面加强,计划阶段会进行开发、测试工期评估,会定里程碑的时间,比如概要设计、详细设计、具体编码具体的完成时间。然后项目老大会严格按照这个时间来实施及监督完成,出入不大于 2 天。
- 暂时没有提过什么建议,需求评审会议基本都是去听产品讲。
72、编码判断一个字符串是否为对称字符串,如“12321”为对称字符串,“12322”为非对称字符串
def is_test(str):
length = len(str)
for i in range(length // 2):
if str[i] != str[length - i - 1]:
return False
return True
if __name__ == '__main__':
input_pwd = input("请输入需要验证是否为对称字符串的内容:")
print(f"{input_pwd} 的倒序为:{is_test(input_pwd)}")
73、对字符串 “abcd” 进行倒序输出 “dcba”
def str_reverse5(s):
if len(s) <= 1:
return s
return str_reverse5(s[1:]) + s[0]
if __name__ == '__main__':
s = input("输入需要进行倒序的内容:")
print(f"{s} 的倒序为:{str_reverse5(s)}")
*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!*******