软件测试_软件测试面试 - CSDN
软件测试 订阅
软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 展开全文
软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
信息
方    式
人工操作或者软件自动运行
领    域
IT行业、有信息化管理的各行业
工作内容
验证和确认
中文名
软件测试
目    的
鉴定、审核软件
外文名
software testing
软件测试概述
软件测试是伴随着软件的产生而产生的。早期的软件开发过程中软件规模都很小、复杂程度低,软件开发的过程混乱无序、相当随意,测试的含义比较狭窄,开发人员将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。对测试的投入极少,测试介入也晚,常常是等到形成代码,产品已经基本完成时才进行测试。到了上世纪80年代初期,软件和IT行业进入了大发展,软件趋向大型化、高复杂度,软件的质量越来越重要。这个时候,一些软件测试的基础理论和实用技术开始形成,并且人们开始为软件开发设计了各种流程和管理方法,软件开发的方式也逐渐由混乱无序的开发过程过渡到结构化的开发过程,以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征。人们还将“质量”的概念融入其中,软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且将测试作为软件质量保证(SQA)的主要职能,包含软件质量评价的内容,Bill Hetzel在《软件测试完全指南》(Complete Guide of Software Testing)一书中指出:“测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。”这个定义至今仍被引用。软件开发人员和测试人员开始坐在一起探讨软件工程和测试问题。软件测试已有了行业标准(IEEE/ANSI ),1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。它再也不是一个一次性的,而且只是开发后期的活动,而是与整个开发流程融合成一体。软件测试已成为一个专业,需要运用专门的方法和手段,需要专门人才和专家来承担。
收起全文
  • 软件测试2小时入门

    千人学习 2020-07-17 14:09:37
    本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、...
  • 混迹于测试行业这么长时间了,一直想写一篇关于软件测试的经验分享的文章,但苦于工作原因迟迟未下笔。最近终于有了些闲余时间,遂决定把自己的心路历程及所感所想记录下来,与各位同行共勉。 软件测试究竟是做什么...

    混迹于测试行业这么长时间了,一直想写一篇关于软件测试的经验分享的文章,但苦于工作原因迟迟未下笔。最近终于有了些闲余时间,遂决定把自己的心路历程及所感所想记录下来,与各位同行共勉。
    软件测试究竟是做什么的呢?
    软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
    简而言之就是证明程序的正确性,检察系统是否满足用户需求,发现bug,证明程序有错。(划重点:找bug不是改bug哦~)

    软件测试前景又如何?
    • 软件测试工程师行业前景好、职业寿命长:根据相关招聘网站发布的最新一期的IT职场人气排行榜,其中软件测试工程师、高级程序员、产品项目经理等高薪职位进入”三甲”,成为IT就业市场最新风向标。随着项目经验的增加,项目从业经验越久经历的项目越丰富,就更具有核心竞争力。
    •软件测试工程师职业空间大、发展方向多元化:顶测科技所培养的软件测试人员不仅仅局限于通信及互联网、应用软件二大行业,在金融及其他行业都占有一定的比量,行业范围非常广。同时由于工作的特殊性,测试人员不但需要对软件的质量进行检测,而且对于软件项目的立项、管理、售前、售后等领域都要涉及。向上可以发展成为测试经理、质量经理,横向可以发展成为项目经理等。
    好了说完了软件测试的概念和前景该说说自身了。
    自我定位
    在踏入软件测试行业的前几年,不少测试人员会陷入迷茫期,主要是对职业发展方向不清晰。网上很多谈软件测试人员职业发展方向及核心竞争力的文章,也确实能为各位测试同行提供不错的建议。作为一名软件测试从业者,也曾迷茫过,准确的说直至2016年才真正找准自我定位,在此就“自我定位”这个话题谈谈自己的一些看法。

    笔者曾接触不少测试同行,偶尔会听到测试人员抱怨没有得到应有的认可,主要体现在以下几个方面:
    1、被人觉得测试工作没有技术含量,相比开发,测试更像是一门体力活。
    2、测试人员缺乏相关的技术背景,慢慢形成了有事找开发的工作模式。
    3、大部分测试人员只专注于工作的完成度,缺乏更深度的思考和总结,比如如何提高测试效率、如何对业务进行连贯性总结等。

    以上三点,提到了两个关键词,“技术”和“业务”。结合《google软件测试之道》及看法,把测试人员的定位区分如下。
    功能测试:理论上说,该定位的测试人员应该是对业务需求理解最透彻的群体,专注于用户角度的测试,组织整体质量实践,分析测试运行结果,驱动测试执行。当然除了业务技能过硬,常用的测试工具也是必须掌握的。
    功能测试人员下一阶段的的发展轨迹一般是测试经理岗位,因为很多公司的测试经理并不要求具备很强的技术能力,测试经理更看重的是协调沟通、统筹全局、目标管理、执行管理等能力。
    性能测试:相比功能测试人员,性能测试人员对业务的理解相对没那么深入,其更偏向于技术的运用及数据分析,目的是找出系统瓶颈。性能测试是一个缺口比较大的岗位,最大的原因是由于对测试人员要求较高,市面上的优秀人才相对较少。我们不妨看看拉勾、猎聘、boss直聘等招聘网站对性能测试人员的常见要求。
    1、对经验尤为看重,一般要求3年以上的性能测试经验。
    2、熟练掌握主流的性能测试工具,Jmeter、LR等。
    3、掌握操作系统、数据库、网络知识等。
    4、能够独立规划和组织性能测试,搭建性能测试环境;能够设计性能测试场景,分析性能问题,定位系统瓶颈。
    结合自身的工作经历及调研,笔者整理了性能测试需具备的技能,欢迎各位同行拍砖。
    安全测试:提到这个岗位,估计很多童鞋也只是游离于“安全”两字的字面理解。但笔者想说的是,安全测试是异常复杂的,一个专业的安全测试专家在某种程度上来说就是一个全栈工程师,需具备以下专业素养(部分内容引用《为什么不推荐去做安全测试工程师》《致测试同仁们:让我们一起做安全测试吧》)。
    1、要使用别具一格的视角来审视需要测试的软件。
    2、要改变测试中模拟的对象。
    3、使用专用的测试工具。
    4、了解安全漏洞的原理。
    5、了解安全漏洞的测试方法及防范知识。
    6、掌握上图中“性能测试主要技能”的相关知识。
    笔者毕竟不是从事安全测试岗位的工作,以上理解也可能存在偏差,欢迎相关童鞋指正。
    测试开发:工作重心在可测试性和通用测试基础框架上,编写单元测试框架和自动化测试框架,关注质量的提升和测试覆盖率,持续集成实施等。除了具备业务技能,不同岗位对技术要求也不一样。

    测试架构师:可以说该岗位属于测试人员职业发展金字塔的顶端了,这也是笔者努力的方向。关于测试架构师所需具备的专业素养,有兴趣的童鞋可以拜读一下《一个测试架构师工作心得》这篇文章。总而言之,万丈高楼平地起,作为一名软件测试人员,只有不断的学习、积累,才能迈向金字塔顶端。
    另外,除了以上描述的发展定位,笔者经过多年的思索,感悟出了一套测试人员价值理论,越往上,价值越大,当然收入也会越高^_^,希望能对各位同行的发展有所帮助。
    1、基本技能,编写案例,发现bug等。每一个软件测试人员必须具备的,毋庸置疑。
    2、识别盲点,发现深层次的问题。这一层次更看重的是个人经验及思维方式,工作1年和工作5年的测试员对同一需求理解的深度和广度肯定有差距。
    3、发现痛点,提升团队效率。该层次更多是能站在团队角度思考,通过分析团队痛点,整合资源来改善团队工作模式,提升测试效率。笔者在文章《如何使用Jmeter提高接口测试效率》中提到的工作方法正是从提升团队效率角度出发。
    4、建立个人品牌,授人予渔,愚教于乐。该层次的人在某个领域已经具备了比较深度的知识体系,其通过博客、云课堂、线下培训等渠道面向大众传授知识,并挣取一定的费用,从而实现职业与财富自由。
    5、创新,整合资源,改善行业工作的方式。单凭个人的能力很难达到该层次,所以往往是指某些公司或组织。比如现在盛行的各类云测平台、DevOps等。
    广而不精,未能形成知识体系
    很多测试人员喜欢在简历上写着精通各类测试工具,比如Jmeter、selenium、robot framework等,结果面试的时候,自己却只能却只能游离于工具框架的基本使用,并没有深入去了解工具的精髓,这就是我们所讲的广而不精。
    一切工具的运用说到底是为了提高效率和保证质量,测试行业很推崇自动化测试,下面就以jmeter为例,来阐述如何建立知识体系。

    在开展这个话题前,我们先来简单说说有名的GROW模型,笔者的知识体系建立也是以该模型为基础。
    G(Goal setting):目标。
    R(Reality Check):现状分析。
    O(Options):解决方案。
    W(Way Forward):行动计划。
    16年跳槽到新公司后,本人确定了一个目标,那就是在测试组建立一体化测试管理体系(自动化测试+缺陷管理+案例管理集成)。通过对测试组工作内容(后台接口测试)及工作方式(传统手工测试)的分析,在对比postman、jmeter、soupui等接口测试工具的优劣势后,最终敲定使用jmeter作为测试组的自动化测试工具,主要原因是Jmeter支持外部jar包的方法调用,而笔者刚好有一定的java基础。依赖于jmeter提供的csv data config功能,我们采用数据驱动测试的模式,但是很快就碰到难题了,那就是jmeter的察看结果树对每个请求都是单独展现的,如果同时执行上百条测试案例,检查结果对测试人员来说无疑是个噩梦,于是,笔者致力于解决该问题,并把Jmter+jira+Testlink进行集成,最终我们形成了以下的测试体系。
    一体化测试管理体系的建立仅是笔者推广半自动化测试的开始,结合docker、moutebank等技术,笔者搭建了持续集成环境,进一步提升了回归测试的效率,同时高效地进行质量监控。
    以上笔者的经历更像一张横向的知识网,因为其中用到jenkins、docker、moutebank、java编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。

    展开全文
  • 软件测试_笔记(完整版)

    万次阅读 多人点赞 2018-07-02 08:54:13
    软件测试复习(部分) 概述 程序+文档+数据=软件 狭义的软件测试定义:为发现软件缺陷而执行程序或系统的过程 广义的软件测试定义:人工或自动地运行或测定某系统的过程,目的在于检验它是否满足规定的需求或...

    软件测试

    概述

    程序+文档+数据=软件

    狭义的软件测试定义:为发现软件缺陷而执行程序或系统的过程

    广义的软件测试定义:人工或自动地运行或测定某系统的过程,目的在于检验它是否满足规定的需求或弄清预期结果和实际结果间的差别

    为什么要做软件测试

    • 发现软件缺陷
      • 功能错
      • 功能遗漏
      • 超出需求部分(画蛇添足)
      • 性能不符合要求
    • 软件质量高低:是否符合用户习惯、符合用户需求

    测试的任务

    • 找出
    • 定位
    • 修改
    • 修改后要做回归测试,对已修改的部分进行再次的测试,避免引入新的错误

    测试用例的定义和组成部分

    • 测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。测试用例是执行的最小实体。简单地说,测试用例就是设计一个场景,使软件程序在这种场景下,必须能够正常运行并且达到程序所设计的执行结果。
    • 包含
      • 用例ID
      • 用例名称
      • 测试目的
      • 测试环境
      • 前提条件
      • 测试步骤
      • 预期结果
      • 其他信息

    一个好的高质量的测试用例在于能发现至今未发现的错误,一个成功的测试是发现了至今未发现的错误的测试(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

    两个方向

    • 找错误,反向思维。
    • 证明能正常工作,正向思维。
    • 目前的方法出发点一般是“找错误”,因为没法证明软件是正确的。

    用户需求

    要求(用户想要) 需求(用户目的) 需要(用户内在欲望)
    牙膏 清洁牙齿 个人魅力(个人外表整洁)

    什么时候停止测试

    • 继续测试没有产生新的失效
    • 继续测试没有发现新缺陷
    • 回报很小
    • 以达到要求的覆盖
    • 无法考虑新的测试用例(若已遵循测试规则和指导方针,则可以选择)

    测试过程模型

    缺陷具有放大的特点,随着阶段的推进发现bug的成本会指数型上升,所以并不是代码级的测试才叫测试,而是开发过程各个阶段越早开始测试越好。

    • 瀑布模型:需求分析->设计(概要、详细)->编程->测试(单元、集成、系统)->维护
    • V模型(瀑布-改):在软件开发的生存期,开发活动和测试活动几乎同时的开始,如概要设计阶段结束后集成测试的测试用例就出来了、详细设计阶段结束后单元测试的测试用例也就出来了等
    • W模型(V模型更加细化、每步都加测试,边造软件边进行测试):需求分析加了需求测试、概要设计加了功能测试、详细设计加了设计测试、编码加了单元测试、集成加了集成测试、确认加了确认测试、验收加了系统测试
    • H模型:无实际意义,仅说明可以独立测试

    软件测试的原则

    • 所有的测试都应追溯到用户的需求
    • 尽早地和不断地进行软件测试(缺陷具有放大的特点,测试成本随阶段深入而上升)
    • 8-2原则
      • 测试中发现的错误80%很可能起源于程序中的20%
      • 提前测试可发现80%,系统测试找出剩余bug的80%(总体的16%),最后的4%可能只有用户大范围长时间使用后才暴露出来
      • 80%的工程用在20%的需求上(即关键需求)
    • 软件缺陷的寄生虫性:找到的缺陷越多说明软件遗留的缺陷越多
    • 避免自己测试自己的程序
    • 回归测试:避免引入新的错误

    软件测试流程

    制定测试计划->测试设计->测试开发->测试执行->评估测试

    注意

    • 测试不是开发后期的一个阶段
    • 测试入门其实稍容易,但要求技术一样高
    • 测试多数情况下不能覆盖所有输入
    • 不要“有时间多测,没时间少测”
    • 软件测试不止是测试人员的事,也是开发人员的事
    • 调试和测试不一样
    • 测试绝非只运行一下软件看结果对不对

    L10N:本地化测试

    I18N:国际化测试

    黑盒测试

    等价类划分与边界值分析

    如何划分有效和无效等价类(一些常用原则)

    • 如果一个变量在某一个范围内,给它一个有效等价类两个无效等价类
    • 如果一个变量取值在某一个集合范围内,可在集合内取一个有效等价类在集合外取一个无效等价类
    • 如果一个变量的条件是“必须怎样”、“一定会是怎样”则去一个值满足“必须要”的条件再取多个不满足的从多个角度去违背这个条件
    • 如果一个变量是布尔类型,则取一个对的一个错的

    在找到有效等价类和无效等价类后如何找测试数据

    • 有效等价类:要尽可能多的覆盖有效等价类
    • 无效等价类:每找到一组数据要至少覆盖一组无效等价类

    如果功能模块的输入是多个,多个自变量放在一起如何找有效等价类、无效等价类、测试数据,4钟方法:

    以一个具有自变量X1、X2的函数F为例,X1取值范围为[a, b)、[b, c)、[c, d];X2取值范围为[e, f)、[f, g]。仅考虑有标记的方块内为一般等价类测试(不处理无效数据的测试)、所有方块都考虑为健壮等价类测试(进行无效数据处理的测试)

    g |_______|_______|_______|_______|_______|
    f |_______|///|///|///|_______|
    e |_______|///|///|///|_______|
      |_______|_______|_______|_______|_______|
              a       b       c       d
    • 弱一般等价类
      • 有假设前提:是单缺陷的,即假设系统出现的缺陷很少是由两个及以上的输入变量共同出现缺陷而引起的。
      • 选取的测试用例覆盖所有的有效等价类
        • 对于X1(横轴):[a, b)、[b, c)、[c, d]都需要覆盖到;对于X2(纵轴):[e, f)、[f, g]都需要覆盖到。保证了这两点的情况下,就可以任意取点了
    g |_______|_______|_______|_______|_______|
    f |_______|_______|____x__|_______|_______|
    e |_______|___x___|_______|___x___|_______|
      |_______|_______|_______|_______|_______|
              a       b       c       d
    • 强一般等价类
      • 基于多缺陷假设
      • 选取的测试用例覆盖所有的有效等价类的笛卡尔积(集合A{a1,a2,a3} 集合B{b1,b2} 他们的 笛卡尔积 是 A*B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)} )
        • 对于X1(横轴):[a, b)、[b, c)、[c, d];X2(纵轴):[e, f)、[f, g],笛卡尔积的结果就是所有的格子,所以必须所有格子都取点
    g |_______|_______|_______|_______|_______|
    f |_______|___x___|___x___|___x___|_______|
    e |_______|___x___|___x___|___x___|_______|
      |_______|_______|_______|_______|_______|
              a       b       c       d
    • 弱健壮等价类
      • 有假设前提:是单缺陷的,即假设系统出现的缺陷很少是由两个及以上的输入变量共同出现缺陷而引起的。
      • 考虑无效值,对有效输入,测试用例的设计等同于弱一般等价类;对无效输入,测试用例需要保证拥有一个无效值(比如某一变量的有效类的取值范围为x、y、z,则无效类为x-和z+,加起来取值范围一共:x-、x、y、z、z+),并保持其余的值都是有效的。

    所以如下图,在保证弱一般等价类的取点后,还需要分别保证X1、X2中有1个属于无效输入的两个额外的取值范围,另一个属于有效输入的原本取值范围(如X1取无效X2取有效或X1取有效X2取无效,并全部覆盖无效范围)

    g |_______|_______|_______|___O___|_______|
    f |_______|_______|___x___|_______|___O___|
    e |___O___|___x___|_______|___x___|_______|
      |_______|___O___|_______|_______|_______|
              a       b       c       d
    • 强健壮等价类
      • 基于多缺陷假设
      • 所有的取值范围取笛卡尔积(比如某一变量的有效类的取值范围为x、y、z,则无效类为x-和z+,加起来取值范围一共:x-、x、y、z、z+,再与另一变量的取值范围取笛卡尔积)
    g |___O___|___O___|___O___|___O___|___O___|
    f |___O___|___x___|___x___|___x___|___O___|
    e |___O___|___x___|___x___|___x___|___O___|
      |___O___|___O___|___O___|___O___|___O___|
              a       b       c       d

    在找测试数据时(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

    • 对于单缺陷的,即只有一个输入变量是处于无效等价类,其他所有输入变量都处在有效等价类中。包含:
      • 单缺陷有效值
      • 单缺陷无效值
    • 对于多缺陷的,即多个输入变量同时出现错误引起的。包含:
      • 有效值
      • 无效值

    与等价类划分密切相关的就是边界值分析。先划分等价类,再结合边界值产生测试用例。边界值分析中也有假设前提:单缺陷。包含4种设计测试用例的方法:

    • 一般的边界值分析
      • 有效范围:最小的、比最小大一点的、正常值、比最大小一点、最大值
      • 无效范围:比最小更小、比最大更大
      • 共7个,再分单缺陷和多缺陷,这样设计测试用例的个数就会指数上升
    - 单变量假设 多变量假设
    有效值 **一般边界值**5n-(n-1)【n-1个变量取正常值】=4n+1【仅考虑有效区间单个变量边界值(一般边界值):用最小值、略高于最小值、正常值、略低于最大值和最大值。】 **一般最坏情况边界值**5^n【仅考虑有效区间多个变量边界值同时作用(一般最坏情况边界值):用各个变量最小值、略高于最小值、正常值、略低于最大值和最大值的笛卡尔积。】
    无效值 **健壮性边界值**7n-(n-1)=6n+1【 同时考虑有效区间和无效区间单个变量边界值(健壮边界值):除了最小值、略高于最小值、正常值、略低于最大值、最大值,还要有略超过最大值和略小于最小值的值。】 **健壮最坏情况边界值**7^n【同时考虑有效区间和无效区间多个变量边界值同时作用(健壮最坏情况边界值):用各个变量最小值、略高于最小值、正常值、略低于最大值、最大值、略超过最大值和略小于最小值的笛卡尔积。】

    常见的边界值

    • 16bit整数32767~-32768
    • 报表第一行和最后一行
    • 屏幕光标最左上和最右下
    • 数组的第一个和最后一个
    • 循环的第0、1、倒数第一、倒数第二次

    决策表

    适合于问题有多个条件,条件有多种组合执行不同操作(有很多if、else if、else),不能表达循环结构

    最严格、最具有逻辑性

    判定表
    | 条件桩 | 条件项 | ... | 动作项 |
    | 动作桩 | 动作项 | ... | 动作项 |

    规则:条件的任意组合,判定表中的一列(贯穿条件项和动作项)。判定表有多少列就代表有多少条规则。

    规则的化简:有的规则相互包含,可以化简

    因果图

    找出所有的原因,找出结果,可能还有中间结果的产生,在画因果图时注意。

    • 从输入考虑
      • I:连虚线出去,如连到ab,表示ab中至少有一个必须成立
      • E:连虚线出去,如连到ab,表示ab不能同时成立
      • R:如处于a指向b的虚线三角箭头上,表示a出现时b也必须出现,不可能一个出现一个不出现
    • 从输出考虑
      • M:如处于a指向b的虚线三角箭头上,表示a为1时b必须为0,a为0时b值不定
    • 连线:恒等
    • ~:非
    • ∨:或
    • ∧:且
    • ci:原因
    • ei:结果

    画出因果图后,根据图得到决策表从而得到相应的测试数据:原因节点+中间节点为条件桩,结果结点为动作桩

    白盒测试

    逻辑覆盖

    语句覆盖->判定覆盖->判定/条件覆盖->条件组合覆盖->路径覆盖
          \_条件覆盖/
    • 语句覆盖:每条语句执行一次
    • 判定覆盖:每个判定分支至少执行一次
    • 条件覆盖:每个判定条件应取到各种可能的值
    • 判定/条件覆盖:同时满足判定和条件
    • 条件组合覆盖:每个判定条件的每一种组合各出现一次
    • 路径覆盖:每一条可能的路径至少执行一次

    关系:

    • 条件组合覆盖>判定覆盖>语句覆盖(即如果达到条件组合覆盖,就达到判定覆盖和语句覆盖:如果达到判定覆盖,就达到语句覆盖,下面类似理解)。
    • 条件组合覆盖>条件覆盖。
    • 条件覆盖不一定包含判定覆盖、语句覆盖。
    • 判定覆盖不一定包含条件覆盖。
    • 路径覆盖,判定覆盖>语句覆盖。

    基本路径测试

    基于程序圈复杂度产生的测试方法,画出控制流程图,算圈复杂度,找到独立路径并压缩为基本路径集合,根据集合中每条路径设计用例。把复合逻辑表达式拆成单个表达式

    圈复杂度用于计算程序的基本的独立路径数目(每条新的独立路径都必须包含一条新的有向边,从入口到出口互不相同的路径数)

    • 圈复杂的V(G) = e - n + 2p【边-节点+2*连接区域数,连接区域p通常为1】=P+1【判定节点数+1】
    • 一般来说,一个单元模块的最大复杂度V(G)<10

    如果把覆盖的路径数压缩到一定限度内,例如程序中的循环体只执行0次和1次,就成为基本路径测试,通过导出基本路径集合,从而设计测试用例,保证这些路径至少通过一次

    基于数据流的测试

    基于真的数据定义到数据的使用来进行测试,需要找到定义的节点(包括赋值的和比较的)和使用的节点(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

    • 定义节点DEF:输入语句、赋值语句、循环语句和过程调用;变量的值会发生变化的语句
    • 使用节点USE:数出语句、赋值语句、条件语句、循环控制语句、过程调用

    需要找到所有这段功能代码从哪里开始定义,到哪里开始执行,把路径找出来。什么是定义使用路径(某一变量在最初节点定义到最终节点被使用)、定义清除路径(某一个变量从它的定义节点到使用节点这个过程中没有对这个变量进行二次定义)

    循环测试

    前提是程序是结构化的。

    简单循环测试

    • 0次通过循环
    • 1次通过循环
    • 2次通过循环
    • m次通过循环(m<=循环最大次数)
    • m-1,m,m+1次通过循环

    测试的过程

    单元测试

    单元测试的内容:5点(简答题)

    • 模块接口的测试
    • 局部数据结构的测试
    • 独立路径测试
    • 错误处理测试
    • 边界测试

    单元测试的模块

    • 被测模块:被测试的程序的模块
    • 驱动模块:用来模拟测试模块的上一级模块,相当于被测模块的主程序
    • 桩模块:用来模拟被测模块工作过程中所调用的模块

    单元测试的工具:Junit相关的概念:以插入断言的方式进行测试(类似黑盒测试)

    • 针对被测代码或者被测的功能点先创建测试类,然后在类里面创建一个个测试方法。通过实例化对象调用被测方法,用断言进行实际值预期值比较。

    单元测试的方法

    • 以白盒测试法为主(覆盖),先静态检查代码是否符合规范,再动态运行代码,检查结果。除了需要验证结果是否正确,还需要检查程序的容错能力、边界值处理等问题。

    集成测试

    • 一次性的集成big-bang:把所有通过了单元测试的模块按设计要求一次全部组装起来,然后进行整体测试。时间随变短了但急于求成。
    • 渐进地集成
      • 自上而下:从主程序模块开始按深度或广度优先策略边组装边测试
      • 自下而上:从最底层模块开始组装和集成测试
      • 汉堡包:两者进行结合,树状图每层画线,顶层采用自顶向下,底层采用自底向上
        相邻的集成:上下三层进行集成
        成对集成:先成对再相邻
        基于MM路径的集成:MM路径不是可执行路径,描述单元之间的控制转移。

    最终得到调用图,然后就会到基本路径测试,找复杂度,找路径,得到测试用例的套路

    系统测试

    黑盒为主(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

    对哪些内容进行系统测试(9个):易用性、国际化本地化、性能、功能、界面、兼容性、安全性、文档、安装

    Web系统测试

    具体到如Web系统测试中的功能测试包含哪些内容、对cookies里面的内容进行测试属于Web系统测试里面的哪一项的测试(属于功能测试)

    • 功能测试
      • 页面内容测试
      • 页面链接测试
      • 表单测试
      • Cookies测试、Session测试
      • 设计语言测试
      • 数据库测试
    • 性能测试(负载/压力)
      • 连接速度测试
      • 测试工具 LoadRunner
        • 负载测试
        • 压力测试
      • 网页性能Firefox插件:Yslow,Findbug,PageSpeed
      • Dynatrace检查网页性能
    • 可靠性测试:不间断测试,看多久不出错
    • 用户界面测试/易用性测试
      • 导航测试
      • 图形测试
      • 内容测试
      • 整体界面测试
    • 安全性测试
    • 兼容性测试
    • 接口测试
      • 服务器接口
      • 外部接口
      • 错误处理

    主要讲了性能测试的含义和怎么做,如所涵盖的含义如压力测试怎么做、负载测试怎么做等

    • 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
      • 时间性能:软件的一个具体事务的响应时间
      • 空间性能:软件运行时所消耗的系统资源
      • 我让你背1袋米(轻松)
      • 我让你背1袋米,但让你去操场上跑圈,看多久累倒(吃力)
      • 我让你背3袋米去操场跑圈,看多久累倒(极限)
      • 我让你背1袋、2袋、3袋、4袋…发现最多背3袋
    • 负载测试让被测系统在其能忍受的压力的极限范围之内连续运行,来测试系统的可靠性。
      • 系统能否处理某个时刻同时访问Web系统/某个页面的用户数量
      • 超过了这个数量,会出现什么现象?
      • 在线数据处理的数量
    • 负载/压力测试关注什么?
      • 验证系统能否同一时间响应大量的用户,用户传送大量数据时能否响应,系统能否长时间运行。
        • 瞬间访问高峰
        • 每个用户传送大量数据
        • 长时间使用
    • LoadRunner性能测试工具原理:录制+回放模拟用户实际操作场景,监控并分析运行结果。

    自动化测试

    录制+回放+脚本 是主要的方式

    常用的自动化测试的工具,哪些种类,每种有什么工具

    • 功能测试工具:QTP
    • 性能测试工具:LoadRunner
      • 写脚本或者录制脚本
      • 使用用户自定义参数
      • 场景设计
      • 产生虚拟用户的机制:使用控制器,来控制模拟多少用户。
      • 使用监听器,查看测试结果

    (Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)


    visitor tracker
    访客追踪插件


    展开全文
  • 软件测试入门视频教程

    万人学习 2019-06-25 10:59:08
    软件测试入门视频培训教程:该课程将带你走进“软件测试”的大门,具体内容包括软件测试环境搭建、软件开发模型、产品模型、CMM模型、测试用例、等价类划分、边界值划分、白盒测试、单元测试、bugfree搭建、系统测试...
  • 您观看课程学习后 添加小助手免费领取【超全Python资料包+17本学习电子书】 ...想要学习软件测试自动化的同学,必须有一个扎实的编程基础,本课程作为自动化基础课程,适合大家入门学习。
  • 软件测试总结——常见的面试问题(一)

    万次阅读 多人点赞 2019-12-04 11:36:59
    1.软件测试级别? 单元测试:单元测试是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。Findyou又称为模块测试,一个单元测试是用于判断某个特定条件...

    1.软件测试级别?

    单元测试:单元测试是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。Findyou又称为模块测试一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。(测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试


    集成测试:集成测试也称联合测试、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。主要目的是检查软件单位之间的接口是否正确。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响


    系统测试:将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等


    验收测试:验收测试是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。总结验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务即软件的功能和性能如同用户所合理期待的那样。测试内容:同系统测试(功能...各类文档等)

     

     

    2.软件测试类型?

    功能测试:也叫黑盒测试,功能测试指测试软件各个功能模块是否正确,逻辑是否正确。对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接收、处理和检索是否正确,以及业务规则的实施是否恰当。此类测试基于黑盒技术,该技术通过图形用户界面(GUI) 与应用程序进行交互,并对交互的输出或结果进行分析,以此来核实应用程序及其内部进程。功能测试的主要参考为类似于功能说明书之类的文档。

    性能测试:指验证软件的性能可以满足系统规格给定的指定要求的性能指标。性能测试是一个比较大的范围,可以进一步衍生出负载测试、强度测试、压力测试、稳定性测试。通过自动化测试工具模拟多种正常、异常、峰值条件,对系统各项性能指标测试

    配置测试:用硬件来测试软件运行情况,1.软件在不同主机上运行的情况(Apple和Dell)2.在不同组件上运行情况(开发的拨号程序要测试不同厂商生产的Moden上运行情况)3.不同的外设、接口、内存的运行情况

    强度测试:强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。这类测试往往可以书写系统要求的软硬件水平要求。实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。

    负载测试通过在被测系统上不断加压,直到性能指标达到极限,例如“响应时间”超过预定指标或都某种资源已经达到饱和状态。负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。

    压力测试:压力测试方法测试系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。测试出系统所能承受的最大极限。是指系统在极限下的压力情况,系统在什么样的压力下会导致系统得到失效,无法正常运行。100个用户连续访问1小时可以看做是压力测试,连续访问10小时可以认为是负载测试

    稳定性测试:压力测试方法测试系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。一般是稍大于业务量的一个负载,对系统进行的一个持续的,长时间的测试,比如24*3,连续3天的施加压力,确定系统在较长运行时间的情况下,系统的稳定性情况

    网络测试:wifi、4G、3G、不同运营商网络测试、

    UI界面测试:UI测试指测试用户界面的风格是否满足客户要求,文字是否正确,页面美工是否好看,文字,图片组合是否完美,背景是否美观,操作是否友好等等。

    分辨率测试:测试在不同分辨率下,界面的美观程度,分为800*600,1024*768,1152*864,1280*768,1280*1024,1200*1600大小字体下测试。一个好的软件要有一个极佳的分辨率,而在其他分辨率下也都能可以运行。

    安装测试:安装测试有两个目的。第一个目的是确保该软件在正常情况和异常情况的不同条件下: 例如,进行首次安装、升级、完整的或自定义的安装_都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。第二个目的是核实软件在安装后可立即正常运行。这通常是指运行大量为功能测试制定的测试。

    内存测试:CPU测试、响应时间测试、唤醒率测试等,都属于性能测试。还有强度测试、容量测试、基准测试等。

    文档测试:文档测试是检验样品用户文档的完整性、正确性、一致性、易理解性、易浏览性。包括用户手册、使用说明、用户帮助文档等

    可靠性测试:这个主要是硬件方面的,比如高低温测试、防水防尘等测试

    安全测试:对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。可确保只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网管、关来访问。比如输入管理员账户,检查其密码是否容易猜取,或者可以从数据库中获得?

    兼容测试检查软件在不同软件、硬件平台是否可以正常运行。 主要查看在不同操作系统、浏览器、数据库、不同版本是否正常运行、向前兼容和向后兼容、、数据共享兼容

    浏览器兼容性测试:测试软件在不同产商的浏览器下是否能够正确显示与运行、比如测试IE,Natscape浏览器

    操作系统兼容性:测试软件在不同操作系统下是否能够正确显示与运行;比如测试WINDOWS98,WINDOWS 2000,WINDOWS XP,LINU, UNIX下是否可以运行这套软件?

    硬件兼容性

    测试与硬件密切相关的软件产品与其他硬件产品的兼容性,比如该软件是少在并口设备中的,测试同时使用其他并口设备,系统是否可以正确使用。比如在INTER,舒龙CPU芯片下系统是否能够正常运行?

    并发测试并发测试方法通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或其者他性能问题。也就是说,这种测试关注点是多个用户同时(并发)对一个模块或操作进行加压。

     

     

     

     

    3.测试方法:动态测试、静态测试;黑盒测试、白盒测试、灰盒测试。

    、黑盒测试方法:

    1>等价类划分:等价类划分是将系统的输入域划分为若干部分,然后从每个部分选取少量代表性数据进行测试。等价类可以划分为有效等价类和无效等价类,设计测试用例的时候要考虑这两种等价类。

    2>边界值分析法:边界值分析法是对等价类划分的一种补充,因为大多数错误都在输入输出的边界上。边界值分析就是假定大多数错误出现在输入条件的边界上,如果边界附件取值不会导致程序出错,

    那其他取值出错的可能性也就很小。

      边界值分析法是通过优先选择不同等价类间的边界值覆盖有效等价类和无效等价类来更有效的进行测试,因此该方法要和等价类划分法结合使用。

    3>错误猜测法:错误猜测法主要是针对系统对于错误操作时对于操作的处理法的猜测法,从而设计测试用例

    3、白盒测试方法:

    1>语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一个可执行语句至少执行一次。

    2>判定覆盖:使设计的测试用例保证程序中每个判断的每个取值分支至少经历一次。

    3>条件覆盖:条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支

    4>判定条件覆盖:判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行,即要求各个判断的所有可能的条件取值组合至少执行一次。

    5>条件组合覆盖:在白盒测试法中,选择足够的测试用例,使所有判定中各条件判断结果的所有组合至少出现一次,满足这种覆盖标准成为条件组合覆盖。

    6>路径覆盖:是每条可能执行到的路径至少执行一次

    灰盒测试
    定义:介于黑、白盒测试之间的,关注输出对于输入的正确性,同时也关注内部表现

    静态测试
    1,静态测试是指无需执行被测程序,而是通过评审软件文档或代码,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率


    动态测试
    1,动态测试是指通过运行被测程序,检查运行结果和预期结果的差异,并分析运行效率,正确性和健壮性等

    2,静态(看外观)和动态(发动车走一段路)可以用买车来说明


    手工测试
    由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。
    更适用针对深度的测试和强调主观判断的测试
    比如:众包测试和探索式测试

    自动化测试
    1.适用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查。

    2.手工测试和自动化测试的区别?

    手动测试:优点:易发现缺陷、容易实施、灵活性     缺点:覆盖量低、重复测试效率低、可靠性低、人力资源依赖

    自动化测试:优点:高效率,速度快、高复用性、覆盖率高、准确可靠、不知疲劳     缺点:机械发现缺陷率低、一次性投入大

     安全测试

    安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程 。

    Findyou觉现在对安全知识的普及,大家意识都提上来了。比如现在越来越多的不支持HTTP协议,转用HTTPS等。

    探索性测试

    探索性测试可以是一种测试思维技术。它没有很多实际的测试方法、技术和工具,但是却是所有测试人员都应该掌握的一种测试思维方式。探索性强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略

    随机测试

    随机测试主要是根据测试者的经验对软件进行功能和性能抽查。

    根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。

    随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例(TestCase)没有覆盖到的部分。

    冒烟测试

    关于冒烟测试,就是开发人员在个人版本的软件上执行目前的冒烟测试项目,确定新的程序代码不出故障。冒烟测试目的是确认软件基本功能正常,现基本执行对象为测试人员,在正规测试一个新版本之前,投入较少的人力和时间验证基本功能,通过则测试准入。

    α测试

    α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。

    大型通用软件,在正式发布前,通常需要执行Alpha和Beta测试。α测试不能由程序员或测试员完成。

    β测试

    Beta测试是一种验收测试。Beta测试由软件的最终用户们在一个或多个客房场所进行。

     

     

    4.alpha测试和beta测试的区别

    1、测试时间不同:

    Beta测试是软件产品完成了功能测试和系统测试之后,产品发布之前所进行的软件测试活动,它是技术测试的最后一个阶段。

    alpha测试简称“α测试”,可以从软件产品编码结束之时开始,或在模块(子系统)测试完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。

    2、测试的目的不同:

    α测试的目的是评价软件产品的(即功能、局域化、可用性、可靠性、性能和支持)。尤其注重产品的界面和特色。α测试即为非正式验收测试。

    Beta测试是一种验收测试,通过了验收测试,产品就会进入发布阶段。

    测试人员及场所不同:

    α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,α测试不能由程序员或测试员完成。α测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。

    Beta测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在Beta测试的现场,因Beta测试是软件在开发者不能控制的环境中的“真实”应用。

     

     

    5.测试设计方法:

    等价类划分、边界值、因果图划分、正交、场景、随机、错误推断、测试大纲

    等价类划分法: :  1:有效等价类:   2:无效等价类:

    案例:比如一个登陆输入框,规定只能输入中文,同时长度为6-10,

    通过等价类设计测试用例:

    测试用例中重要的三步: 输入 操作 预计结果 如果与预期结果不符合就是bug

    有效等价类: 输入:输入长度为6的中文,输入的为王小明,这就是有效等价类

    无效等价类:

    1: 输入长度为4的中文,输入位小名,点击登录,预计结果长度不符合要求

    2: 输入长度为6,但是是英文的,点击登录,预计结果 请输入中文

    3: 输入长度为4,而且不是中文的,是数字,1234,点击登录,预计结果请输入中文并且长度为6-10位

    4:输入长度为12而且不是中文的,比如qwertyuiopas,点击登录,预计结果请输入中文并且长度为6-10位

     

    二:边界值法:

    应用场景:边界值往往和等价类划分法一起使用,形成一套更为完善的测试方案,找到有效数据和无效数据的分界点,

    注解边界值一般和有效等价类划分法配合使用:

    案例:比如一个登陆输入框,规定只能输入中文,同时长度为6-10,

    上面输入框的边界的:如果固定大于等于6,并且小于等于10,

    那左边界就是 5和 6

    右边界是:10 和 11

    测试用例:

    1:输入的为王小明,这就是有效等价类和边界值的结合使用

    2:输入小名,这就是边界值为5,同时有效等价类

    3:输入欧阳致远家,这就是边界值10,同时等价类有效

    4:输入欧阳致远啦啦,这就是边界值为11,同时有效等价类

     

    三:因果图及判定表法:

     

    应用场景:在一个界面中有多个控件,如果控件之间有组合关系或者限制关系,不同的控件组合会产生不同的输入结果,为了弄清楚不同的输入组合会产生咋样的输出结果,可以使用因果图及判定表法:

    判断是儿童还是青年还是成年人:

    条件1:年龄 age

    条件2:身高height

    条件3:体重weight

    输入年龄5,体重80公斤,身高170,查无此人

    输入提高80,身高170,输入年龄20,成年人

    输入年龄5,体重30,身高60,小孩

     

    四:正交表:

    应用场景:在一个界面中有多个控件,每个控件有多个取值,测试时考虑不同的控件不同取值之间的多种组合,但组合数量巨大(>20种,20种以下一般考虑判定表因果图),没有必要全部测试,如何从所有的组合中挑选最少、最优的组合进行测试,可以使用正交排列法。

    正交表的测试思想特点:

    1)使用每个控件的每个取值参与组合的次数是基本相等的(均匀的)

    2)在所有的组合数据中,选取数据时,应该均匀的选取,而不能从局部选取。

    3)如果时间允许,尽可能的多测一些组合

    正交表:主要针对一个输入框里面可能有多个值,而且数量巨大

    年龄 体重 省 市 县

    比如:输入年龄 18,体重45,山西 大同 阳高

    五:测试大纲法

    适用场合:程序包含多个窗口,每个窗口中又有多个功能,这些功能之间又有一定的联系。为了梳理清楚窗口之间以及窗口不同功能之间的联系,使用测试大纲法。

    六:场景法

    适用场合:大多数的业务比较复杂的软件系统都适合使用场景法(便于将各个功能点串起来,便于形成完整的业务感觉)是一种基于软件业务的测试方法,把自己当成最终用户,尽可能的模拟用户在使用此软件的操作

    案例:

    场景一:比如买东西:输入袜子,点击查询,出现列表,点击七匹狼,点击进入详情,点击加入购物车,点击去购物车结算,点击收获地址,点击支付,支付成功

    场景二:比如买东西:输入袜子,点击查询,出现列表,点击七匹狼,点击进入详情,点击加入购物车,点击去购物车结算,点击收获地址,点击取消支付

    七: 错误推断法

    基于经验和直觉推测程序中所有可能存在的各种错误 , 从而有针对性的设 计测试用例的方法

    在进行灰盒测试的时候经常用到此方法

    八:随机测试

    随意测试,不考虑任何用例和需求,完全站在一个用户或者的角度对产品进行使用。

    适用场景:

    1) 所有之前设定的用例已经 执行完毕

    2)海量的条件组合无法一遍 历的时候

     

    6.软件测试风险:

    测试人员:业务不熟、人员变动、疲态、同化效应、定位效应

    测试材料:需求变更、质量标准不一样、测试用例或测试数据设计不充分

    测试环境:测试软件版本不统一、软件环境不统一、硬件环境不统一、硬件不到位

    测试时间:测试时间不足、测试时间延长

    测试方法:错误或缺失测试方法、场景缺失、测试用例实施不充分

     

     

    7.自动化测试软件作用(重点):

    一:jmeter: 纯java编写负载功能测试和性能测试开源工具, 支持接口自动化测试,录制、抓包、可进行压力测试(增加线程,考验服务器最大支持访问数)、弱网测试、添加请求、添加断言,查看断言、结果树,聚合报告,分析测试报告等

    聚合报告参数详解: 
    1. Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值 
    2. Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100 
    3. Average:平均响应时间——默认情况下是单个 Request 的平均响应时间
    4. Median:中位数,也就是 50% 用户的响应时间 
    5. 90% Line:90% 用户的响应时间 
    6. Min:最小响应时间 
    7. Max:最大响应时间 
    8. Error%:错误率——错误请求数/请求总数 
    9. Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)
    10. KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

     

    :ant: 将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,并生成测试报告并发送

     

    三:jenkins: Jenkins是一个开源CI服务器,基于Web访问,jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性,拥有大量的插件:这些插件极大的扩展了Jenkins的功能,持续集成工具,所有工作都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间和工作量;

     

    :monkey:它是Android SDK系统自带一个命令行工具,可以运行在模拟器里或者真是设备中运行。向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行稳定性测试。

     

    五:charles: 1.抓包(http、https):设置手机HTTP代理、https  charles也需要证书

    2.弱网测试:通过Throttle Settings(网络控制)、Enable Throttling(启用设置)、Throttle preset(通过预设网络值来拟定网络)、设置网络带宽值等

    3.网络请求的截取并动态修改:

    4.压力测试:通过右键点击链接,Repeat Advanced(重复),选择Iterations(重复次数)Concurrency(并发数)

    5.数据替换:通过链接右键点击Map Local(本地位置)进入设置,选择替换数据文件,替换即可

     

    :selenium :web自动化测试框架(测试浏览器兼容性的自动化)selenium不支持桌面软件自动化测试。软件测试报告,和用例管理只能依赖第三方插件unittest优点:兼容更多的平台( Windows、Linux 、 Macintosh等)以及浏览器(火狐,IE,谷歌等)

    定位元素方式:id、name、class_name、tagname、link_text、partial_link_text、xpath、css_selector

    强制等待:sleep()强制等待,不管你浏览器是否加载完,程序都得等待

    显示等待:WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了.它主要的意思就是:程序每隔多久查看一次,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

    隐式等待:implicitly_wait(),整个driver周期有效,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止

     

    :appium:开源测试自动化框架,可用于原生,混合和移动Web应用程序测试

    两大组件:

    一:Appium Server就是Appium的服务端——一个web接口服务,使用Node.js实现。

    二:Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,提供Appium自动化服务器的强大功能。

    Appium GUI是Appium desktop的前身。 也就是把Appium server封装成了一个图形界面,降低了使用门槛。

    因为Appium是一个C/S结构,有了服务端的肯定还有客户端,Appium Clients就是客户端,它会给服务端Appium Server发送请求会话来执行自动化任务。

    Appium-desktop主界面包含三个菜单:

    Simple

    • host:设置Appium server的ip地址,本地调试可以将ip地址修改为127.0.0.1
    • port:设置端口号,默认是4723不用修改
    • start server:启动 Appium server

    Advanced:高级参数配置修改,主要是Android和iOS设备,log路径等相关信息的配置。

    Presets:将Advanced中的一些配置信息作为预设配置。
     

     

    :pytest:pytest是一个全功能的Python测试框架,

    优点:

    • 1、简单灵活,容易上手,文档丰富;
    • 2、支持参数化,可以细粒度地控制要测试的测试用例;
    • 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
    • 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
    • 5、测试用例的skip和xfail处理;
    • 6、可以很好的和CI工具结合,例如jenkins

    编写规则:

    • 测试文件以test_开头(以_test结尾也可以)
    • 测试类以Test开头,并且不能带有 init 方法
    • 测试函数以test_开头
    • 断言使用基本的assert即可
    # -*- coding:utf-8 -*-
    import pytest
    
    @pytest.fixture(scope='function')
    def setup_function(request):
        def teardown_function():
            print("teardown_function called.")
        request.addfinalizer(teardown_function)  # 此内嵌函数做teardown工作
        print('setup_function called.')
    
    @pytest.fixture(scope='module')
    def setup_module(request):
        def teardown_module():
            print("teardown_module called.")
        request.addfinalizer(teardown_module)
        print('setup_module called.')
    
    @pytest.mark.website
    def test_1(setup_function):
        print('Test_1 called.')
    
    def test_2(setup_module):
        print('Test_2 called.')
    
    def test_3(setup_module):
        print('Test_3 called.')
        assert 2==1+1              # 通过assert断言确认测试结果是否符合预期

    fixture的scope参数

    scope参数有四种,分别是'function','module','class','session',默认为function。

    • function:每个test都运行,默认是function的scope
    • class:每个class的所有test只运行一次
    • module:每个module的所有test只运行一次
    • session:每个session只运行一次

    setup和teardown操作

    • setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等
    • teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等
    • 备注:也可以通过在fixture函数中通过yield实现setup和teardown功能

     

    :unitest: unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果

    unittest.TestCase:TestCase类,所有测试用例类继承的基本类:       class BaiduTest(unittest.TestCase)

    unittest.main():将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法并自动执行他们。

    unittest.TestSuite():unittest框架的TestSuite()类是用来创建测试套件的。

    unittest.TextTextRunner():unittest框架的TextTextRunner()类,通过该类下面的run()方法来运行suite所组装的测试用例。

    unittest.defaultTestLoader(): defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。用法如下:discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

    unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。

    TestCase类的属性:

    setUp():setUp()方法用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。

    tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。

    assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。

    TestSuite类的属性:

    addTest(): addTest()方法是将测试用例添加到测试套件中,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。   suite = unittest.TestSuite()                  suite.addTest(test_baidu.BaiduTest('test_baidu'))

    TextTextRunner的属性:

    run(): run()方法是运行测试套件的测试用例,入参为suite测试套件:    runner = unittest.TextTestRunner() runner.run(suite)

     

    微信朋友圈测试用例:

    这里写图片描述

     

    8.po模型?

    selenium自动用例脚本,相似功能地方,代码基本都是一样的,界面元素换个查找方式,把原来的使用 xpath方式,改为使用 id 查找,需要对每个用例脚本都要改,虽然几个用例看不出什么工作量,但是重复findElement的代码,已经让我们感到了代码的笨重。如果某些定位发生了改变,我们就得贯穿整个测试代码进行调整元素定位,这样就会导致我们的脚本在后期,难以维护。
    因此通过Page Object Model 我们可以创建更加健壮代码,并减少或者消除重复的测试代码,从而也能够提高代码的可读性,减少编写脚本的工作量。Page Object Model的实现,就是通过分离测试对象和测试脚本的抽象来实现的。简单来说就是代码的封装,将测试方法进行封装对外暴露方法实现调用,在调用界面直接调用某个方法输入具体元素值以及内容。

     

     

    9.Bug的生命周期?新建,提交,确认,分配,修复,验证,关闭

     

    10.软件开发过程中的角色分工?(测试的主要工作)

    测试配合开发等进行需求分析和讨论,根据需求说明书指定《项目测试计划》,编写测试用例,建立测试环境。

    测试负责新产品测试,原有产品的升级测试,负责软件问题解决过程跟踪,软件开发文档、开发工作的规范化,管理开发部        门的产品文档,制作用户手册、操作手册,产品上限测试,监督软件开发过程执行,提高软件质量。

     

    11.缺陷(bug)等级分类?       

    致命:测试过程死机、系统崩溃、数据跌势、功能没有实现

    严重:导致软件功能不稳定、功能实现错误、流程错误

    一般:校验错误、罕见故障、错别字,不影响功能,影响体验

    低级:没影响的小问题

     

    12.使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程?

     

    答:1) 测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,系统会自动通过Email通知项目组长或直接通知开发者。
    2) 经验证无误后,修改状态为VERIFIED(已证实).待整个产品发布后,修改为CLOSED(关闭)
    3) 还有问题,REOPENED(重新打开),状态重新变为“New",并发邮件通知。
    4) 项目组长根据具体情况,重新分配给bug所属的开发者。
    5) 若是,进行处理,断言并给出解决方法。(可创建补丁附件及补充说明)
    6) 开发者收到Email信息后,判断是否为自己的修改范围。
    7) 若不是,重新分配给项目组长或应该分配的开发者。
    8) 测试人员查询开发者已修改的bug,进行重新测试。确认无误后,关闭该bug。

     

     

    13.缺陷报告由哪些组成?(测试报告,测试用例)

       缺陷编号、日期、缺陷标题、 缺陷优先程度、缺陷所属模块、缺陷所属版本、执行流程、预计结果、输出结果、缺陷分析、缺陷所属开发    人员、缺陷描述缺陷有限等级等。提高质量:要有效的发现 Bug 需参考需求以及详细设计等前期文档设计出高效的测试用例,然后严格执行测试用例,对发现的问题要充分确认肯定,然后再向外发布如此才能提高提交 Bug 的质量。

    测试报告:项目说明 测试依据 人员及进度 测试概要 测试环境 测试用例 测试方法 覆盖分析 需求覆盖 测试覆盖

     

    14.如何设计测试用例?

          测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。检验是否满足客户需求;度量测试人员的工作量;展现测试用例的思路。

         测试用例包含:

         用例编号    唯一的编号。
         用例标题    当前测试用例的用途
         测试背景    这个用例属于哪个项目
         前置条件    用例执行前应该满足哪些条件
         重要级别    定义优先级,分为高低级别
         测试数据     具体输入内容
         测试步骤    每步做些什么
         预期结果     需求文档要求结果
         实际结果     实际输出结果
         备注     

         测试用例编写流程:需求分析--》提取测试点--》测试用例编写--》测试用例评审

         测试用例常用设计方法:等价类划分法、  边界值分析法、因果图法、场景法、正交表、测试大纲法、错误推断法、随机测试

       

    15.测试计划编写:

    编写测试计:      测试环境准备、     第一次功能测试、   性能测试、  回归测试、    测试报告总结  

    1. 测试目标:根据xxx需求,提炼测试功能点、制定测试策略、评估测试 风险,预估编写测试用例、执行功能测试和回归测试的工作量,进行人员和进度 安排。

    2. 测试范围:功能模块:(需要结合实际情况)

    3. 测试策略:对需求中的功能改进进行完整测试,并根据应用场景和并发数考虑兼容性和性能测试方案。 并需要指定出测试工具

    3.1 功能测试:见测试用例表

    3.2 性能测试
    3.3 系统兼容性测试
    4. 测试资源
    4.1 人员安排
    4.2 测试环境
    4.3 bug管理
    5试进度安排:任务    时间    执行人员    工作量         
    5.2输出文档:测试计划、测试报告
    6测试验收标准:1.完成所有类型测试 ,没有影响到用户业务使用的bug ,bug数量少于一定数量  , 功能业务,性能指标符合需求

    6.2 产品上线标准:产品 checkelist

    1. 已按照交互文档、需求文档完全的实现需求;
    2.  符合交互稿的交互设计规范、符合视觉要求,已经通过设计评审;
    3.  允许遗留可能会对用户正常使用造成一定影响的正常级缺陷,但应在发布前告知项目组,并经风险评估同意发布后方可发布

    7. 风险说明
    主要包括三个方面:1.测试范围风险 (测试遗漏,需求变更)、2.测试进度风险(预估量不准确,测试人员变动,其他业务工作,)、3.产品质量风险(代码质量,测试人员能力)

     

    16.软件测试的原则:

    1.测试软件存在缺陷。证明测试对象是有缺陷的。

    2.测试尽早介入,缺陷发现越早,修复成本越小。

    3.不可进行穷尽测试(无意义测试)。

    4.缺陷集群性(2/8原则)80%的缺陷发现在20%的模块中。

    5.杀虫剂悖论,如果一直使用相同的测试方法或手段,可能无法发现新的bug。

    6.测试环境的特殊新,测试活动依赖测试内容,不同的行业,测试活动的开展都有所不同,比如测试技术、测试工具的选择,测试流程都不尽相同,所以软件测试的活动开展依赖于所测试的内容

    7.不存在缺陷谬论,软件测试不仅是找出缺陷,同时也需要确认软件是否满足需求。

     

    17.简述集成测试的环境?

    1.硬件环境: 集成测试时,要尽可能的考虑用户使用的实际环境;当实际环境难以达到的时候,模拟环境考虑到与实际环境之间                        可能存在的差异。

    2.操作系统环境:考虑到不同的操作系统版本,对于可能使用的操作系统环境,要尽可能的测试到。

    3.数据库环境:数据库的选择合乎实际情况。容量,性能,版本等多方面考虑。

    4.网络环境:一般的网络环境可以使用以太网、wifi、3G、4G。

     

    18.集成测试通常都有那些策略?

    大爆炸集成
    2、自顶向下集成
    3、自底向上集成
    4、三明治集成适应于大部分软件开发项目
    5、基干集成
    6、分层集成
    7、基于功能的集成
    8、基于消息的集成
    9、基于风险的集成
    10、基于进度的集成

     

    19.测试策略:

    功能测试,性能测试,压力测试,容量测试,安全性测试,GUI测试,可用性测试,安装测试,配置测试,
    异常测试,备份测试,健壮性测试,文档测试,在线帮助测试,网络测试,稳定性测试
    在:正常情况下测试;非正常情况下测试;边界测试;非法,极端测试;

     

    20.什么是测试脚本?

    测试脚本是为了进行自动化测试而编写的脚本,测试脚本的编写必须对应相应的测试用例

    测试脚本是一段代码不假。但是这段代码可能是为了执行某一条,或很多条测试用例而写的。也有可能 ,本身就是一条用例。

    用例本身并不局限,在基于功能。脚本和用例没有并列的可比性。脚本可能是用例,也可能是执行用例用的功能。用例也可能是脚本。

     

    21.软件产品质量特性是什么? ?


    功能性:适应性、准确性、互操作性、依从性、安全性。
    可使用性:易理解性、易学习性、易操作性。
    效率:时间特性、资源特性。
    可维护性:易分析性、易变更性、稳定性、易测试性。
    可移植性: 适应性、易安装性、遵循性、易替换性。

     

    22. 一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?

    300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。300个用户在一个客户端上,需要更大的带宽。
    IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。
    所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。

     

     

    23.使用QTP做功能测试,录制脚本的时候,要验证多个用户的登录情况/查询情况,如何操作?

    分析用户登录的基本情况,得出一组数据,通过性测试/失败性测试的都有(根据TC来设计这些数据),然后录制登录的脚本,将关键的数据参数化,修改脚本,对代码进行加强,调试脚本。

    QTP中的action主要是用来管理代码的,Action的作用 1)用Action可以对步骤集进行分组 2)步骤重组,然后被整体调用 3)拥有自己的sheet 4)组合有相同需求的步骤,整体操作 5)具有独立的对象仓库

     

     

    24.TestDirector有些什么功能,如何对软件测试过程进行管理?

    管理测试需求,测试计划以及缺陷跟踪分析,主要有五个模块:1.服务测试管理器、2.需求管理器、3.测试实验室、4.缺陷管理器、5.测试计划  保证各阶段之间顺畅的信息流,完全基于Web。

    业务分析员:定义应用程序需求和测试目标

    QA测试员:运用手动和自动测试,报告执行测试结果,输入缺陷

    开发人员:数据库查看和解决缺陷

    测试经理和项目经理:设计测试计划,开发测试案例

    产品经理:决定是否准备发布应用

     

     

    25.测试自动化和自动化测试的区别?

    什么是测试自动化:这是一种让测试过程脱离人工的一次变革。对于控制成本,控制质量,回溯质量和减少测试周期都有积极影响的一种研发过程。


    什么是自动化测试:通过将测试执行部分部分或者全部交由机器执行的一种测试,叫做自动化测试。这种测试不需要人的实时参与。同时这种测试在小规模应用时会比手动测试昂贵许多。
    自动化测试可以看作测试自动化的一部分。


    一个自动化工程师,会比较专注于测试工具的研发。最主要的是这个工程师会从成本的角度去考虑问题。这一点比较像PM。他所做的一切是为了减少自己或者团队的工作量,尽可能的将重复的,有规律可循的工作代码化,自动化。

    一个自动化测试工程师,会比较专注于测试代码的开发,以及测试结果的分析。对于被测设备本身非常感兴趣。他们比较倾向于一种完美主义者,追求的是高质量而经常忽略成本。这一点更像开发人员。

     

    26.公司的测试环境?

    开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。

    测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。

    生产环境:是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用的环境都以这个为基础,然后根据客户的个性化需求来做调整或者修改。

    三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境。

    UAT环境:UAT,(User Acceptance Test),用户接受度测试 即验收测试,所以UAT环境主要是用来作为客户体验的环境。

    仿真环境:顾名思义是和真正使用的环境一样的环境(即已经出售给客户的系统所在环境,也成为商用环境),所有的配置,页面展示等都应该和商家正在使用的一样,差别只在环境的性能方面。

     

    27.公司做安全测试是怎么进行的?

    软件安全性测试主要包括程序、数据库安全性测试。根据系统安全指标不同测试策略也不同。

    详细的测试点:
    1.跨网站脚本攻击:通过脚本语言的缺陷模拟合法用户,控制其账户,盗窃敏感数据
    2.注入攻击:通过构造查询对数据库、LDAP和其他系统进行非法查询
    3.恶意文件执行:在服务器上执行Shell 命令Execute,获取控制权
    4.伪造跨站点请求:发起Blind 请求,模拟合法用户,要求转账等请求
    5.不安全对象引用:不安全对象的引入,访问敏感文件和资源,WEB应用返回敏感文件内容
    6.被破坏的认证和Session管理:验证Session token 保护措施,防止盗窃session
    7.Session的失效时间限制:Session的失效时间设置是否过长,会造成访问风险
    8.不安全的木马存储:过于简单的加密技术导致黑客破解编密码,隐秘信息被盗窃,验证其数据加密
    9.不安全的通讯:敏感信息在不安全通道中以非加密方式传送, 敏感信息被盗窃,验证其通讯的安全性
    10.URL访问限制失效:验证是否通过恶意手段访问非授权的资源链接,强行访问一些登陆网页,窃取敏感信息
    11.信息泄露和不正确错误处理测试:恶意系统检测,防止黑客用获取WEB站点的具体信息的攻击手段获取详细系统信息
    12.注册与登录测试:验证系统先注册后登录、验证登录用户名和密码匹配校验,密码长度及尝试登录次数,防止 非法用户登录
    13.超时限制:验证WEB应用系统需要有是否超时的限制,当用户长时间不做任何操作的时候,需要重新登录才能使用
    14.日志文件:验证服务器上日志是否正常工作,所有事务处理是否被记录
    15.目录文件:验证WEB服务器目录访问权限或者每个目录访问时有index.htm,防止 WEB 服务器处理不适当,将整个目录暴露
    16.身份验证:验证调用者身份、数据库身份、验证是否明确服务账户要求、是否强制式试用账户管理措施
    17.授权:验证如何向最终用户授权、如何在数据库中授权应用程序,确定访问系统资源权限
    18.会话:验证如何交换会话标识符、是否限制会话生存期、如何确保会话存储状态安全
    19.配置管理:验证是否支持远程管理、是否保证配置存储安全、是否隔离管理员特权
    20.备份与恢复:为了防止系统意外崩溃造成的数据丢失,验证备份与恢复功能正常实现、备份与恢复方式是否满足Web系统安全性要求
    21.数据库关键数据是否进行加密存储,是否在网络中传递敏感数据
    22.在登录或注册功能中是否有验证码存在,防止恶意大批量注册登录的攻击
    23.Cookie文件是否进行了加密存储,防止盗用cookie内容
    24.密码强度提醒:建议对密码的规则进行加强设置
    25.密码内容禁止拷贝粘贴

     

    用户身份认证安全的测试要考虑问题:
    1.明确区分系统中不同用户权限
    2.系统中会不会出现用户冲突
    3.系统会不会因用户的权限的改变造成混乱
    4.用户登陆密码是否是可见、可复制
    5.系统的密码策略,通常涉及到隐私,钱财或机密性的系统必须设置高可用的密码策略。
    5.是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)
    6.用户推出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入系统

    系统网络安全的测试要考虑问题:
    1.测试采取的防护措施是否正确装配好,有关系统的补丁是否打上
    2.模拟非授权攻击,看防护系统是否坚固
    3.采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI系列和 IPhacker IP )
    4.采用各种木马检查工具检查系统木马情况
    5.采用各种防外挂工具检查系统各组程序的客外挂漏洞


    数据库安全考虑问题:
    1.系统数据是否机密(比如对银行系统,这一点就特别重要,一般的网站就没有太高要求)
    2.系统数据的完整性(我刚刚结束的企业实名核查服务系统中就曾存在数据的不完整,对于这个系统的功能实现有了障碍)
    3.系统数据可管理性
    4.系统数据的独立性
    5.系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)

    浏览器安全
    同源策略:不同源的“document”或脚本,不能读取或者设置当前的“document”
    同源定义:host(域名,或者IP),port(端口号),protocol(协议)三者一致才属于同源。
    要注意的是,同源策略只是一种策略,而非实现。这个策略被用于一些特定的点来保护web的安全。
    <script>,<img>,<iframe>,<link>等标签都可以跨域加载资源,不受同源策略的限制。
    XMLHttpRequest,DOM,cookie受到同源策略的限制。
    网站可以通过提供crossdomain.xml来允许某些源跨域访问自己的资源。
    google chrome使用了多进程来隔离代码运行的环境,从而起到提高web安全的作用
    Q & A
    Q:cookie为什么需要同源策略?
    A:cookie有同源策略是必须的,这样可以保证A网站的用户(识别)信息不会被B网站获取到
    Q:XMLHttpRequest为什么需要同源策略?
    A:两个例子:
    (1)加入没有同源策略,某个网站的某张页面被你写入了一些js ,这些js有些ajax操作,如果某个用户访问了这张页面,你的js就可以获得用户的某些信息(cookie,本地文件等)然后通过ajax发送回你的服务器。 这就是安全问题,信息泄漏。
    (2)先假设浏览器没有限制跨域,A站的xhr请求B站的一个url,那么浏览器是要带上谁家的cookie一起请求呢?(每次http请求都要带上该站下的所有cookie)显然是B家的。假设B家的网站当前用户已经登录,那么cookie里自然记录下了sessionId相关的东西以标识当前用户的身份,那么本次xhr请求很easy的通过了身份认证,然后后果就是不堪设想的。
    这个就很正确,如果A可以用xhr跨站访问B,带着B的cookie自然可以通过B网站的验证,从而获取到敏感数据。所以这点是关键。

    web安全测试方法:
    工具扫描
    目前web安全扫描器针对OSinjection, XSS、SQL injection 、OPEN redirect 、PHP File Include漏洞的检测技术已经比较成熟。
    商业软件web安全扫描器:有IBM Rational Appscan、WebInspect、Acunetix WVS 、burp suite免费的扫描器:W3af 、Skipfish 根据业务资金,可以考虑购买商业扫描软件,也可以使用免费的,各有各的好处。
    首页可以对网站进行大规模的扫描操作,工具扫描确认没有漏洞或者漏洞已经修复后,再进行以下手工检测。


    关于越权操作的问题
    例如A用户的个人资料ID为1 B用户个人资料ID为2,我通过登陆B用户,把ID修改为1 就可以查看到用户A的个人资料,这就是越权。
    测试方法:通过查看URL的get参数对那些类似明显的顺序数字 进行修改,看是否能越权访问。


    关于登陆安全的问题
    除了SQL注入,还有找回密码功能会出现安全问题
    邮箱找回密码测试方法:
    先从邮箱参数修改开始,看填入用户名和自己修改的邮箱账号,看是否能收到邮箱,收到后是否能修改。
    如果不能修改邮箱参数那么,我们就让它邮箱找回,接着点击邮箱内修改密码的链接,看链接的邮箱参数是否可以修改,用户名是否可以修改,加密的urlcode 是否可以逆向解密。
    如果是手机找回密码功能:则测试手机收到的验证码是否是纯数字、纯字母的,如果是请修改为字母与数字的组合。

    关于用开源程序的问题
    关注网上你所用的开源程序的官网更新情况和安全事件。


    关于上传:
    1.上传文件是否有格式限制,是否可以上传exe文件;
    2.上传文件是否有大小限制,上传太大的文件是否导致异常错误,上传0K的文件是否会导致异常错误,上传并不存在的文件是否会导致异常错误;
    3.通过修改扩展名的方式是否可以绕过格式限制,是否可以通过压包方式绕过格式限制;
    4.是否有上传空间的限制,是否可以超过空间所限制的大小,如将超过空间的大文件拆分上传是否会出现异常错误。
    5.上传文件大小大于本地剩余空间大小,是否会出现异常错误。
    6.关于上传是否成功的判断。上传过程中,中断。程序是否判断上传是否成功。
    7.对于文件名中带有中文字符,特殊字符等的文件上传。

     

    28.移动端测试:

    Android手机和IOS手机,系统有什么区别?
    1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
    2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
    3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
     

    Android:

    1:使用灰盒进行功能测试

    2:使用fiddler或者Charles进行抓包测试

    3:兼容性测试,Android 从4.0版本的手机测试到9.0版本手机

    4:各大品牌的手机都的进行测试,比如:小米小米9 小米8 小米7 小米6 note 红米系列 7红米5,华为: 华为mate20 华为mate10,华为荣耀: 荣耀10,9,8 ,vivo: x21,27,23,oppo: R7,R9,R11,三星手机: note9, 8,7 S9,8。

    5:稳定性测试: 使用monkey命令进行稳定性测试

    6:专项测试,使用腾讯专项测试工具进行,测试耗电量,流量,CPU占用率

    7:性能测试,对app的接口进行性能测试,使用工具jmeter或者loadrunner

    8:对app接口进行接口测试,使用postman或者Jmeter都行

    9:如果有时间写自动化脚本

    ios:

    1:使用灰盒进行功能测试

    2:使用fiddler或者Charles进行抓包测试

    3:兼容性测试:ios版本测试从9-12,手机型号从4S测试到xmax

    4:性能测试接口和安卓的是一样的所以只需要进行一次就可以了

    5:专项测试:使用腾讯专项测试工具进行,测试耗电量,流量,CPU占用率

    6:编写自动化脚本

     

    29.web端测试:

    前端 :

    1:web也使用灰&测试方法

    2:兼容性测试:IE浏览器7-12,火狐浏览器 35-最新的,谷歌浏览器,别的浏览器有时间就可以测试

    3:对web端页面进行性能测试,使用jmeter或者loadrunner

    后端

    1:测试http接口

    2:测试https接口

    3:测试tcp接口

    4:测试dubbo接口

    5:对后台代码进行代码审核,进行白盒测试


     

    30.软件测试模型?

     

    1,传统的瀑布模型

    这里写图片描述

    瀑布模型的优缺点

    这里写图片描述

    2,V模型

    这里写图片描述

    3,W模型

    这里写图片描述

    4,X模型

    这里写图片描述

     

     

     

    31.在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?

    1、检查系统是否有中毒的特征                  2、检查软件/硬件的配置是否符合软件的推荐标准

    3、如果是C/S或者B/S结构的软件,需要检查是不是因为与服务器的连接问题或者访问问题造成的

    4、确认当前的系统是否是独立,是否存在负载,无对外提供消耗CPU资源的服务,查看性能监视器,确认应用程序对CPU/内存的访问情况

     

     

    32.MySQL外连接、内连接的区别?

    内连接 :连接的数据表相对应的匹配字段完全相等的连接。连接关键字是 inner join

    外连接:分为左外连接与右外连接、全连接。

    左连接的结果集包括指定的左表全部数据与匹配的右表数据,右表中没匹配的全为空值.关键字 left join

    右连接的结果集包含指定的右表全部数据与匹配的左边数据,左边中没匹配的全为空值.关键字 right join

    全连接返回左右数据表的所有行.关键字 full join

     

    33.测试通过的标准是什么?


    从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行 72 小时,目前 Bug
    Tracking System 中,本版本中没有一般严重的 BUG,普通 BUG 的数量在 3 以下,BUG 修复
    率 90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本 Release。

     

    34.测试退出标准:

    单元测试退出标准

    1) 单元测试用例设计已经通过评审
    2) 核心代码100% 经过Code Review
    3) 单元测试功能覆盖率达到100%
    4) 单元测试代码行覆盖率不低于80%
    5) 所有发现缺陷至少60%都纳入缺陷追踪系统且各级缺陷修复率达到标准
    6) 不存在A、B类缺陷
    7) C、D、E类缺陷允许存在
    8) 按照单元测试用例完成了所有规定单元的测试
    9) 软件单元功能与设计一致


    集成测试退出标准

    1) 集成测试用例设计已经通过评审
    2) 所有源代码和可执行代码已经建立受控基线,纳入配置管理受控库,不经过审批不能随意更改
    3) 按照集成构件计划及增量集成策略完成了整个系统的集成测试
    4) 达到了测试计划中关于集成测试所规定的覆盖率的要求
    5) 集成工作版本满足设计定义的各项功能、性能要求
    6) 在集成测试中发现的错误已经得到修改,各级缺陷修复率达到标准
    7) A、B类BUG不能存在
    8) C、D类BUG允许存在,但不能超过单元测试总BUG的50%。
    9) E类BUG允许存在

    系统测试退出标准

    1) 系统测试用例设计已经通过评审
    2) 按照系统测试计划完成了系统测试
    3) 系统测试的功能覆盖率达100%
    4) 系统的功能和性能满足产品需求规格说明书的要求
    5) 在系统测试中发现的错误已经得到修改并且各级缺陷修复率达到标准
    6) 系统测试后不存在A、B、C类缺陷
    7) D类缺陷允许存在,不超过总缺陷的5%
    8) E类缺陷允许存在,不超过总缺陷的10%
    注:这只是一套比较理想化的退出标准,但在实际工作中不可能达到这种程度,尤其是测试覆盖率和缺陷解决率不可能是100%。现在的军方标准是达到99%。对于通用软件来说就要根据公司实际情况了。

     

    39.查看LINUX进程内存占用

    1、lsof -i:端口号

    2、netstat -tunlp|grep 端口号都可以查看指定端口被哪个进程占用的情况

    查看所有端口、进程的使用情况:netstat -tunlp

    查看某一端口的使用情况:  netstat -tunlp|grep 5560

    在命令行中输入 “top”

      即可启动 top, top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。

      第一部分 -- 最上部的 系统信息栏 :

      第一行(top):“00:11:04”为系统当前时刻;“3:35”为系统启动后到现在的运作时间;

        “2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;

        “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;

      第二行(Tasks):

        “59 total”为当前系统进程总数;

        “1 running”为当前运行中的进程数;

        “58 sleeping”为当前处于等待状态中的进程数;

        “0 stoped”为被停止的系统进程数;

        “0 zombie”为被复原的进程数;

      第三行(Cpus):分别表示了 CPU 当前的使用率;

      第四行(Mem):分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;

     

    35.数据库:mysql语句

        大型数据库   Oracle  Db2
          中型数据库    sqlserver  
          小型数据库    mysql
          微型数据库    sqlite

    增:Insert  into 表名 value 值

    删:Delect from 表名  where  值

    改:Update 表名 set 字段=字段 where 字段;

    查:Select * from 表名

    自增  auto_increment       
    主键  primary key
    非空  not null
    唯一 unique
    默认值  default
    外键  foreign key 

    1. # 查看所有的数据库: SHOW DATABASES ;

    2. # 创建一个数据库: CREATE DATABASE k;

    3. # 删除一个数据库: DROP DATABASE k;

    4. # 使用这个数据库  USE k;

    1. # 查看所有的表  SHOW TABLES ;

    2. # 创建一个表  CREATE TABLE n(id INT, name VARCHAR(10));

    3. CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name));

    4. CREATE TABLE m(id INT, name VARCHAR(10));

    5. # 直接将查询结果导入或复制到新创建的表 : CREATE TABLE n SELECT * FROM m;

    6. # 新创建的表与一个存在的表的数据结构类似:  CREATE TABLE m LIKE n;

    7. # 临时表将在你连接MySQL期间存在。当断开连接时,MySQL将自动删除表并释放所用的空间。也可手动删除。

    8. CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10));

    9. # 直接将查询结果导入或复制到新创建的临时表  CREATE TEMPORARY TABLE tt SELECT * FROM n;

    10. # 删除一个存在表  DROP TABLE IF EXISTS m;

    11. # 更改存在表的名称

    12. ALTER TABLE n RENAME m;

    13. RENAME TABLE n TO m;

    14. # 查看表的结构(以下五条语句效果相同)

    15. DESC n; # 因为简单,所以建议使用

    16. DESCRIBE n;

    17. SHOW COLUMNS IN n;

    18. SHOW COLUMNS FROM n;

    19. EXPLAIN n;

    20. # 查看表的创建语句

    21. SHOW CREATE TABLE n;

    表的结构

    1. # 添加字段: ALTER TABLE n ADD age VARCHAR(2) ;

    2. # 删除字段: ALTER TABLE n DROP age;

    3. # 更改字段属性和属性:ALTER TABLE n CHANGE age a INT;

    4. # 只更改字段属性:ALTER TABLE n MODIFY age VARCHAR(7) ;

    表的数据

    1. # 增加数据

    2. INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');

    3. INSERT INTO n SELECT * FROM n; # 把数据复制一遍重新插入

    4. # 删除数据:DELETE FROM n WHERE id = 2;

    5. # 更改数据:UPDATE n SET name = 'tom' WHERE id = 2;

    6. # 数据查找 : SELECT * FROM n WHERE name LIKE '%h%';

    7. # 数据排序(反序) :SELECT * FROM n ORDER BY name, id DESC ;

    1. # 添加主键:ALTER TABLE n ADD PRIMARY KEY (id);

    2. # 删除主键:ALTER TABLE n DROP PRIMARY KEY ;

    3. # 添加外键

    4. ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id); # 自动生成键名m_ibfk_1

    5. ALTER TABLE m ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES n(id); # 使用定义的键名fk_id

    6. # 删除外键:ALTER TABLE m DROP FOREIGN KEY `fk_id`;

    7. # 修改外键:ALTER TABLE m DROP FOREIGN KEY `fk_id`, ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id); # 删除之后从新建

    联接

    1. # 内联接:SELECT * FROM m INNER JOIN n ON m.id = n.id;

    2. # 左外联接 :SELECT * FROM m LEFT JOIN n ON m.id = n.id;

    3. # 右外联接:SELECT * FROM m RIGHT JOIN n ON m.id = n.id;

    4. # 交叉联接: SELECT * FROM m CROSS JOIN n; # 标准写法

    5. # 类似全连接full join的联接用法

    6. SELECT id,name FROM m

    7. UNION

    8. SELECT id,name FROM n;

    函数

    1. # 聚合函数

    2. SELECT count(id) AS total FROM n; # 总数

    3. SELECT sum(age) AS all_age FROM n; # 总和

    4. SELECT avg(age) AS all_age FROM n; # 平均值

    5. SELECT max(age) AS all_age FROM n; # 最大值

    6. SELECT min(age) AS all_age FROM n; # 最小值

    7. # 数学函数

    8. SELECT abs(-5); # 绝对值

    9. SELECT bin(15), oct(15), hex(15); # 二进制,八进制,十六进制

    10. SELECT pi(); # 圆周率3.141593

    11. SELECT ceil(5.5); # 大于x的最小整数值6

    12. SELECT floor(5.5); # 小于x的最大整数值5

    13. SELECT greatest(3,1,4,1,5,9,2,6); # 返回集合中最大的值9

    14. SELECT least(3,1,4,1,5,9,2,6); # 返回集合中最小的值1

    15. SELECT mod(5,3); # 余数2

    16. SELECT rand(); # 返回0到1内的随机值,每次不一样

    17. SELECT rand(5); # 提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。

    18. SELECT round(1415.1415); # 四舍五入1415

    19. SELECT round(1415.1415, 3); # 四舍五入三位数1415.142

    20. SELECT round(1415.1415, -1); # 四舍五入整数位数1420

    21. SELECT truncate(1415.1415, 3); # 截短为3位小数1415.141

    22. SELECT truncate(1415.1415, -1); # 截短为-1位小数1410

    23. SELECT sign(-5); # 符号的值负数-1

    24. SELECT sign(5); # 符号的值正数1

    25. SELECT sqrt(9); # 平方根3

    26. SELECT sqrt(9); # 平方根3

    27. # 字符串函数

    28. SELECT concat('a', 'p', 'p', 'le'); # 连接字符串-apple

    29. SELECT concat_ws(',', 'a', 'p', 'p', 'le'); # 连接用','分割字符串-a,p,p,le

    30. SELECT insert('chinese', 3, 2, 'IN'); # 将字符串'chinese'从3位置开始的2个字符替换为'IN'-chINese

    31. SELECT left('chinese', 4); # 返回字符串'chinese'左边的4个字符-chin

    32. SELECT right('chinese', 3); # 返回字符串'chinese'右边的3个字符-ese

    33. SELECT substring('chinese', 3); # 返回字符串'chinese'第三个字符之后的子字符串-inese

    34. SELECT substring('chinese', -3); # 返回字符串'chinese'倒数第三个字符之后的子字符串-ese

    35. SELECT substring('chinese', 3, 2); # 返回字符串'chinese'第三个字符之后的两个字符-in

    36. SELECT trim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese'

    37. SELECT ltrim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese '

    38. SELECT rtrim(' chinese '); # 切割字符串' chinese '两边的空字符-' chinese'

    39. SELECT repeat('boy', 3); # 重复字符'boy'三次-'boyboyboy'

    40. SELECT reverse('chinese'); # 反向排序-'esenihc'

    41. SELECT length('chinese'); # 返回字符串的长度-7

    42. SELECT upper('chINese'), lower('chINese'); # 大写小写 CHINESE chinese

    43. SELECT ucase('chINese'), lcase('chINese'); # 大写小写 CHINESE chinese

    44. SELECT position('i' IN 'chinese'); # 返回'i'在'chinese'的第一个位置-3

    45. SELECT position('e' IN 'chinese'); # 返回'i'在'chinese'的第一个位置-5

    46. SELECT strcmp('abc', 'abd'); # 比较字符串,第一个参数小于第二个返回负数- -1

    47. SELECT strcmp('abc', 'abb'); # 比较字符串,第一个参数大于第二个返回正数- 1

    48. # 时间函数

    49. SELECT current_date, current_time, now(); # 2018-01-13 12:33:43 2018-01-13 12:33:43

    50. SELECT hour(current_time), minute(current_time), second(current_time); # 12 31 34

    51. SELECT year(current_date), month(current_date), week(current_date); # 2018 1 1

    52. SELECT quarter(current_date); # 1

    53. SELECT monthname(current_date), dayname(current_date); # January Saturday

    54. SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date); # 7 13 13

    55. # 控制流函数

    56. SELECT if(3>2, 't', 'f'), if(3<2, 't', 'f'); # t f

    57. SELECT ifnull(NULL, 't'), ifnull(2, 't'); # t 2

    58. SELECT isnull(1), isnull(1/0); # 0 1 是null返回1,不是null返回0

    59. SELECT nullif('a', 'a'), nullif('a', 'b'); # null a 参数相同或成立返回null,不同或不成立则返回第一个参数

    60. SELECT CASE 2

    61. WHEN 1 THEN 'first'

    62. WHEN 2 THEN 'second'

    63. WHEN 3 THEN 'third'

    64. ELSE 'other'

    65. END ; # second

    66. # 系统信息函数

    67. SELECT database(); # 当前数据库名-test

    68. SELECT connection_id(); # 当前用户id-306

    69. SELECT user(); # 当前用户-root@localhost

    70. SELECT version(); # 当前mysql版本

     

    36.Linux命令:

    mv 移动文件夹
    source  更新    
    tar -vxzf     解压
    cd /home       进入 '/ home' 目录' 
    cd ..              返回上一级目录 
    cd ../..           返回上两级目录 
    cd                 进入个人的主目录 
    cd ~user1    进入个人的主目录 
    cd -              返回上次所在的目录 
    pwd             显示工作路径 
    ls                查看目录中的文件 

    vi        编辑

    wq          编辑保存
    ls -F            查看目录中的文件 
    ls -l             显示文件和目录的详细资料 
    ls -a            显示隐藏文件 
    ls *[0-9]*     显示包含数字的文件名和目录名 
    tree            显示文件和目录由根目录开始的树形结构
    lstree          显示文件和目录由根目录开始的树形结构
    mkdir dir1   创建一个叫做 'dir1' 的目录' 
    mkdir dir1 dir2 同时创建两个目录 
    mkdir -p /tmp/dir1/dir2 创建一个目录树 
    rm -f file1 删除一个叫做 'file1' 的文件' 
    rmdir dir1 删除一个叫做 'dir1' 的目录' 
    rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 
    rm -rf dir1 dir2 同时删除两个目录及它们的内容 
    mv dir1 new_dir 重命名/移动 一个目录 
    cp file1 file2 复制一个文件 
    cp dir/* . 复制一个目录下的所有文件到当前工作目录 
    cp -a /tmp/dir1 . 复制一个目录到当前工作目录 
    cp -a dir1 dir2 复制一个目录 
    ln -s file1 lnk1 创建一个指向文件或目录的软链接 
    ln file1 lnk1 创建一个指向文件或目录的物理链接 
    文件搜索 
    find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 
    find / -user user1 搜索属于用户 'user1' 的文件和目录 
    find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 
    find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 
    find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 
    find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限 
    find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备 
    locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令 
    whereis halt 显示一个二进制文件、源码或man的位置 
    which halt 显示一个二进制文件或可执行文件的完整路径 

     

     

    37.adb命令:

    adb 使用的端口号,5037

    adb devices , 获取设备列表及设备状态

    adb get-state , 获取设备的状态

    adb install 用于安装

    adb uninstall 用于卸载

    adb push 命令将PC机上的文件推到 DLT-RK3288 机器上

    adb pull  命令将DLT-RK3288机器上的文件拉到PC机上

    ls, cd, rm, mkdir, touch, pwd, cp, mv, ifconfig, netstat, ping, ps, top等,进入adb shell即可执行,与linux相似

    打印默认日志数据adb logcat

    需要打印日志详细时间的简单数据adb logcat -v time

    需要打印级别为Error的信息adb logcat *:E

    • adb help, 列出所有的选项说明及子命令
    • adb devices , 获取设备列表及设备状态
    • adb get-state , 获取设备的状态,设备的状态有 3 钟,device , offline , unknown,其中device:设备正常连接,offline:连接出现异常,设备无响应,unknown:没有连接设备
    • adb kill-server , adb start-server , 结束 adb 服务, 启动 adb 服务,通常两个命令一起用,设备状态异常时使用 kill-server,然后运行 start-server 进行重启服务
    • adb logcat , 打印 Android 的系统日志    adb logcat -c,清除日志
    • adb bugreport , 打印dumpsys、dumpstate、logcat的输出,也是用于分析错误,输出比较多,建议重定向到一个文件中,如adb bugreport > d:\bugreport.log
    • adb install , 安装应用,adb install -r 重新安装
    • adb uninstall , 卸载应用,后面跟的参数是应用的包名,请区别于 apk 文件名
    • adb pull , 将 Android 设备上的文件或者文件夹复制到本地,如例如复制 Sdcard 下的 pull.txt 文件到 D 盘:adb pull sdcard/pull.txt d:\,重命名:adb pull sdcard/pull.txt d:\rename.txt
    • adb push , 推送本地文件至 Android 设备,如推送 D 盘下的 push.txt 至 Sdcard:adb push d:\push.txt sdcard/   sdcard 后面的斜杠不能少
    • adb reboot , 重启 Android 设备,    adb reboot recovery,重启到Recovery界面    adb reboot bootloader,重启到bootloader界面
    • adb root , adb remount,可以直接已这两个命令获取 root 权限,并挂载系统文件系统为可读写状态
    • adb get-serialno,返回设备序列号SN值    adb get-product,获取设备的ID
    • adb forward tcp:5555 tcp:8000,做为主机向模拟器或设备的请求端口
    • adb shell,进入设备shell
    • adb shell pm list package,列出所有的应用的包名
    • adb shell screencap -p /sdcard/screen.png ,截屏,保存至 sdcard 目录
    • adb shell screenrecord sdcard/record.mp4,执行命令后操作手机,ctrl + c 结束录制,录制结果保存至 sdcard
    • adb shell wm size,获取设备分辨率
    • adb shell pm dump 包名,列出指定应用的 dump 信息
    • adb shell pm path 包名, 列出对应包名的 .apk 位置
    • adb shell monkey –p 程序包 –v 测试次数 ,比如“adb shell monkey –p com.htc.Weather –v 20000”意思是对com.htc.Weather 这个程序包单独进行一次20000次的monkey测试,其中程序包名称可以在串口终端这句命令获得:ls data/data 显示所有程序包
    • adb shell ps | grep [process],找出对应的进程pid  adb shell dumpsys meminfo [pid],根据进程pid查看进程占用的内存    或者  adb shell dumpsys meminfo<package_name>,package_name 也可以换成程序的pid,pid可以通过 adb shell top | grep app_name 来查找
    • adb shell ps, 查看当前终端中的进程信息
    • ls // 查看目录   
    • date // 打印或设置当前系统时间   
    • cat /proc/meminfo // 查看内存信息   
    • cat /proc/cpuinfo // 查看CPU信息

    抓取App报错的log日志:

    按住win+r打开cmd,cd到安装adb的目录下,然后输入指令:adb logcat -v time > D:\\logcat.log(可以换成其他磁盘) ,输入完成之后敲击回车,这个时候在D盘下会生成一个logcat日志并且将近期的崩溃记录到这个日志当中。Ctrl+C以结束截取操作。

    1.adb logcat *:V           不过滤地输出所有调试信息,显示所有日志信息

    1.adb logcat *:D            Debug来表达调试信息,能输出Debug、Info、Warning、Error级别的Log信息。

    1.adb logcat *:I              Info来表达一些信息,能输出Info、Warning、Error级别的Log信息。

    1.adb logcat *:W            Warning表示警告,查找崩溃问题一般用:能输出Warning、Error级别的Log信息

    2.adb logcat *:E             Error表示出现错误,能输出Error级别的Log信息。

     

     

     

    40.Monkey命令

    查看设备的链接情况:adb devices

    手机里面的软件随机点击:adb shell monkey 1000

    查看包名(-s只查找系统包名,-3只查看第三方包,-f输出包和包相关联的文件-e只输出启用的包,-i只输出包和安装信息,-u只输出包和未安装包信息都不加显示所有,):adb shell pm list packages -s

    启动一个指定包名:adb shell monkey -p com.dyhoa.school 1000

    操作日志:adb shell monkey -p com.tencent.mobileqq -v -v 100

    1 参数: -p       用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,monkey将只允许系统启动指定的APP,如果不指定包,将允许系统启动设备中的所有APP.

    * 指定一个包: adb shell monkey -p cn.emoney.acg 10

    * 指定多个包:adb shell monkey -p cn.emoney.acg –p cn.emoney.wea -p cn.emoney.acg 100

    * 不指定包:adb shell monkey 100

     

    2 参数: -v用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:

    日志级别 0

    示例 adb shell monkey -p cn.emoney.acg –v 100

    说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息

    日志级别1

    示例 adb shell monkey -p cn.emoney.acg –v -v 100

    说明提供较为详细的日志,包括每个发送到Activity的事件信息

    日志级别 2

    示例 adb shell monkey -p cn.emoney.acg –v -v –v 100

    说明最详细的日志,包括了测试中选中/未选中的Activity信息

     

    3 参数: -s

    用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

    Monkey 测试1:adb shell monkey -p cn.emoney.acg -s 10  100

    Monkey 测试2:adb shell monkey -p cn.emoney.acg –s 10 100

    两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。


    4 参数: --throttle<毫秒>用于指定用户操作(即事件)间的时延,单位是毫秒;

    adb shell monkey -p cn.emoney.acg --throttle 5000 100

     

    5 参数: --ignore-crashes     用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。

    adb shell monkey -p cn.emoney.acg --ignore-crashes 1000        测试过程中即使程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止

    adb shell monkey -p cn.emoney.acg 1000          测试过程中,如果acg程序崩溃,Monkey将会停止运行

     

    6 参数: --ignore-timeouts                        用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

    adb shellmonkey -p cn.emoney.acg --ignore-timeouts 1000

     

    7 参数: --ignore-security-exceptions        用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

    adb shellmonkey -p cn.emoney.acg --ignore-security-exception 1000


    8 参数: --kill-process-after-error             用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态。应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程

    adb shellmonkey -p cn.emoney.acg --kill-process-after-error 1000


    9 参数: --monitor-native-crashes         用于指定是否监视并报告应用程序发生崩溃的本地代码。

    adb shellmonkey -p cn.emoney.acg --monitor-native-crashes 1000

     

    10 参数: --pct-{+事件类别}{+事件类别百分比}用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
    示例:
    --pct-touch{+百分比}
    调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)

    adb shell monkey -p cn.emoney.acg --pct-touch 10 1000
    --pct-motion {+百分比}
    调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随件机事和一个up事件组成)

    adb shell monkey -p cn.emoney.acg --pct-motion 20 1000
    --pct-trackball {+百分比}
    调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)

    adb shell monkey -p cn.emoney.acg --pct-trackball 30 1000
    --pct-nav {+百分比}

    调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

    adb shell monkey -p cn.emoney.acg --pct-nav 40 1000
    --pct-majornav {+百分比}
    调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

    adb shell monkey -p cn.emoney.acg --pct-majornav 50 1000

     

    七、输出monkeylog

    跑monkey的时候或者想抓程序log导出时,有时会提示:cannot create D:monkeytest.txt: read-only file system

    为什么有时候可以有时候不可以?

    后来发现跟使用使用习惯不一样,一会是先进入adb shell 再用命令,一会是直接命令进入。

    进入adb shell后再用命令就会失败~

    正确方法:退出shell或者执行命令时先不要进shell

    C:\Documents and Settings\Administrator>adb shell monkey -p 包名 -v 300  >e:\text.txt

    进入adb shell后就相当于进入linux的root下面,没有权限在里面创建文件~

     

     

    48.保证测试的覆盖率 ?

    测试需求分析分两步:

    1、测试需求的获取    需求的来源:

    显式需求:1.原始需求说明书   2.产品规格书   3.软件需求文档   4.有无继承性文档   5.经验库   6.通用的协议规范

    隐式需求:用户的主观感受,市场的主流观点,专业人士的评价分析

    2,需求的分析,产生测试需求文档

    将不同的需求来源划分成一个个需求点,针对每一点进行测试分析:界定测试范围,利用各种测试设计的方法产生测试点

    在测试方法方面,可做如下注意:

    其一,分析出口入口。从入口分析,将可能出现的环境,条件,操作等内容分类组合,然后根据各位测试达人的方法进行整合,逐一验证。从出口分析,将可能出现的结果进行统计,根据结果的不同追根溯源,再找到不同的操作以及条件等内容,统计成文档,逐一验证。

    其二,多种测试手法的学习和使用。大家可能更多的关心测试方法,但是具体操作的手法也是需要注意的。毕竟测试方法比较容易找到,各位达人都很熟悉。如果将每个人不同的测试手法总结出来并在自己的测试实施中加以使用,可能会收到意想不到的成果。

    二、当测试需求分析完成,并且形成文档后,要进行测试需求评审,保证需求的准确性以及完整性。

    三、测试需求完成以后,可以根据测试需求设计测试用例。

    要保证测试用例能够全面覆盖测试需求,要包含所有的情况。

    测试用例设计上划分为单功能测试用例和测试场景设计,单功能测试覆盖的需求中的功能点,测试场景覆盖需求中的业务逻辑。

    在设计测试用例的时候,可以使用多种测试用例设计方法。

    ●首先进行等价类划分,包括输入条件和输出条件的等价类划分,合理设置有效等价类和无效等价类,这是减少工作量和提高测试效率最有效的方法。

    ●必须使用边界值分析,经验表明,这种方法设计出的用例能发现很多程序错误。

    ●可以使用错误推测法追加一些测试用例,这需要依靠您的智慧和经验。

    ●对照程序逻辑检查已设计出的测试用例的逻辑覆盖度,如果没有达到覆盖标准应当再补充足够的测试用例。

    ●如果程序的功能说明中含有输入条件的组合情况,一开始就可选因果图和判定表驱动法。

    ●对于参数配置类的软件,要用正交试验法选择较少的组合方式达到最佳效果。

    ●对于业务流清晰的系统,可以利用场景法贯穿整个测试方案过程,在案例中综合使用各种测试方法。

    当测试用例设计完成后,要组织测试用例的评审,这样可以吸取别人的意见,减少遗漏,补全测试用例。

    四、测试用例编写完成后,就是测试执行

    1.测试用例执行100%覆盖。2.在测试执行过程中,要继续对测试用例补充完善,确保提高测试覆盖率。

    五、在整个测试过程中,需求都是不可能不变的,所以要及时的更新测试需求、测试用例。

    六、要将测试需求、测试用例以及发现的bug关联起来,便于管理和跟踪,同时也便于查看覆盖率。

     

     

    49.测试用例评审?

    1. 评审就是对测试用例进行检查

    2. 评审类型:同行评审、小组评审、部门评审、三方评审

    3. 评审目的:发现测试用例不足,方便测试人员改进测试用例,提高测试质量

    4. 评审过程:循环执行 “测试用例评审--》改进测试用例”

     

     

    50.做好测试(用例)计划的关键?

    1.明确测试计划

    2.明确测试内容、测试过程、测试目的

    3.测试范围与测试内容高度覆盖

    4.测试结果的直观性、准确性

    5.测试开始与结束时间

    6.测试方法与测试工具的实用性

    7.测试文档与测试软件

    8.采用评审和更新机制

    9.保证测试计划满足实际需求

     

    51.完整的测试组成?

    1.测试设计:需求分解,细化执行测试过程,为每个测试过程选择合适的测试用例

    2.测试计划:根据需求和性能指标说明,定制相应测试计划,安排测试测试人员,测试内容,测试时间以及测试需要的资源

    4.测试执行:建立自动化测试,对发现bug跟踪管理,按步骤测试(单元测试,集成测试,系统测试,验收测试)

    5.测试评估:结合量化测试覆盖域以及bug跟踪,对软件质量,开发进度,工作效率等综合评价

     

    52.所有的软件缺陷都可修复吗,都要修复吗?

    理论上软件的缺陷是可修复的,不过有的修复成本比较高,不能追求软件的完美,根据风险来确定是否修复缺陷

    1.没有足够的时间,在项目中没有足够时间修改缺陷可能会引出其他缺陷,导致项目的推迟

    2.有些缺陷只在特殊环境下出现,这种缺陷处于项目的利益考虑可以放在以后版本中进行修复升级

    3.不是缺陷的缺陷。缺陷的是否修改应该由测试人员、项目经理、程序员共同讨论决定,以确保项目的正常运行

     

     

     

     

     

     

    展开全文
  • 2019软件测试校招笔试题-软件测试基本理论

    千次阅读 多人点赞 2019-07-18 11:23:51
    软件测试面试题100道整理 1.什么是软件测试? 答:软件测试是为了发现错误而执行程序的过程。 2.软件测试的目的? 答;测试的目的是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正错误和缺陷...

    软件测试面试题100道整理

    1.什么是软件测试?

    答:软件测试是为了发现错误而执行程序的过程。

    2.软件测试的目的?

    答;测试的目的是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患带来的商业风险。

    3.什么是需求文档测试?

    答:主要测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现;

    4.什么是设计文档测试?

    答:测试设计是否符合全部需求以及设计是否合理。

    5.什么是α测试?

    答:Alpha测试(α测试)是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。Alpha测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。目的是评价软件产品的功能、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。Alpha测试可以从软件产品编码结束之后开始,或在模块(子系统)测试完成后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。有关的手册(草稿)等应该在Alpha测试前准备好。

    6.什么是β测试?

    答:Beta测试(β测试)是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。因而,Beta测试是在开发者无法控制的环境下进行的软件现场应用。在Beta测试中,由用户记下遇到的所有问题,包括真实的以及主管认定的,定期向开发者报告,开发者在综合用户的报告后,做出修改,最后将软件产品交付给全体用户使用。Beta测试着重于产品的支持性,包括文档、客户培训和支持产品的生产能力。只有当Alpha测试达到一定的可靠程度后,才能开始Beta测试。由于Beta测试的主要目标是测试可支持性,所以Beta测试应该尽可能由主持产品发行的人员来管理。

    7.什么是驱动模块?

    答:驱动模块在大多数场合称为"主程序",它接收测试数据并将这些数据传递到被测试模块.单元测试一个函数单元时,被测单元本身是不能独立运行的,需要为其传送数据,为此写驱动
    驱动模块主要完成以下事情:
    1、接受测试输入;
    2、对输入进行判断;
    3、将输入传给被测单元,驱动被测单元执行;
    4、接受被测单元执行结果,并对结果进行判断;
    5、将判断结果作为用例执行结果输出测试报告。

    8.什么是桩模块?

    答:比如对函数A做单元测试时,被测的函数单元下还包括了一个函数B,为了更好的错误,定位错误,就要为函数B写桩,来模拟函数B的功能,保证其正确。

    9.什么是白盒测试?

    答:白盒测试(White-box Testing,又称逻辑驱动测试,结构测试),它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
    对开发语言的支持:白盒测试工具是对源代码进行的测试,测试的主要内容包括词法分析与语法分析、静态错误分析、动态检测等。目前测试工具主要支持的开发语言包括:标准C、C++、Visual C++、Java、Visual J++等。

    10.什么是静态测试?

    答:通过运行程序测试软件称为动态测试.通过评审文档、阅读代码等方式测试软件称为静态测试,在动态测试中,通常使用白盒测试和黑盒测试从不同的角度设计测试用例,查找软件代码中的错误.
    静态测试方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。

    11.什么是回归测试?

    答:回归测试的目的是在程序有修改的情况下,保证原有功能正常的一种测试策略和方法。
    说白了就是,我们测试人员在对程序进行测试时发现bug,然后返还程序员修改,程序员修改后发布新的软件包或新的软件补丁包给我们测试人员,我们就要重新对这个程序测试,已保证程序在修正了以前bug的情况下,正常运行,且不会带来新的错误的这样一个过程。 一般情况下是不需要全面测试的,而是根据修改的情况进行有效的测试。

    12.白盒测试有哪几种方法?

    答:白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。

    13.软件的缺陷等级应如何划分?

    软件缺陷的等级可以用严重性和优先级来描述;
    严重性:衡量缺陷对客户满意度影响的满意程度,分为
    1,致命错误,可能导致本模块以及其他相关的模块异常,死机等问题;
    2.严重错误,问题局限在本模块,导致模块功能失常或异常退出;
    3.一般错误,模块功能部分失效;
    4.建议模块,有问题提出人对测试模块的改进建议;
    优先级:缺陷被修复的紧急程度;
    1.立即解决(P1级):缺陷导致系统功能几乎不能使用或者测试不能继续,需立即修复;
    2.高优先级(P2级):缺陷严重,影响测试,需优先考虑;
    3.正常排队(P3级):缺陷需要正常排队等待修复;
    4.低优先级(P4级):缺陷可以在有时间的时候被纠正;

    14.如果能够执行完美的黑盒测试,还需要进行白盒测试吗?(白盒与黑盒的区别)

    答:任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。
    黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。 白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
    软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
    1、是否有不正确或遗漏的功能?
    2、在接口上,输入是否能正确的接受?能否输出正确的结果?
    3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
    4、性能上是否能够满足要求?
    5、是否有初始化或终止性错误?
    软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
    1、对程序模块的所有独立的执行路径至少测试一遍。
    2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
    3、在循环的边界和运行的界限内执行循环体。
    4、测试内部数据结构的有效性,等等。
    以上事实说明,软件测试有一个致命的缺陷,即测试的不完全、不彻底性。由于任何程序只能进行少量(相对于穷举的巨大数量而言)的有限的测试,在未发现错误时,不能说明程序中没有错误。

    15.软件测试应该划分几个阶段?简述各个阶段应重点测试的点?各个阶段的含义?

    答:大体上来说可分为单元测试,集成测试,系统测试,验收测试,每个阶段又分为以下五个步骤: 测试计划,测试设计,用例设计,执行结果,测试报告
    初始测试集中在每个模块上,保证源代码的正确性,该阶段成为单元测试,主要用白盒测试方法。 接下来是模块集成和集成以便组成完整的软件包。集成测试集中在证实和程序构成问题上。主要采用黑盒测试方法,辅之以白盒测试方法。
    软件集成后,需要完成确认和系统测试。确认测试提供软件满足所有功能、性能需求的最后保证。确认测试仅仅应用黑盒测试方法。

    16.什么是单元测试?

    答:单元测试是对软件中的基本组成单位进行的测试,如一个模块、一个过程等等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。

    17.什么是集成测试

    答:集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。

    18.系统测试?

    答:系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确并非一项简单的任务,它被称为测试的“先知者问题”。

    19.验收测试

    答:验收测试旨在向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集.

    20.回归测试

    答:回归测试是在软件维护阶段,对软件进行修改之后进行的测试。其目的是检验对软件进行的修改是否正确。

    21.针对缺陷采取怎样的管理措施?

    答:1. 要更好的管理缺陷,必须引入缺陷管理工具,商用的或者开源的都可。
    2. 根据缺陷的生命周期,考虑缺陷提交的管理、缺陷状态的管理和缺陷分析的管理。
    3. 所有发现的缺陷(不管是测试发现的还是走读代码发现的)都必须全部即时的、准确的提交到缺陷管理工具中,这是缺陷提交的管理。
    4. 缺陷提交后,需要即时的指派给相应的开发人员,提交缺陷的人需要密切注意缺陷的状态, 帮助缺陷的尽快解决。缺陷解决后需要即时对缺陷的修复进行验证。这样的目的有两个:一个是让缺陷尽快解决;二是方便后面缺陷的分析(保证缺陷相关的信息准确,如龄期等),这是缺陷状态的管理。
    5. 为了更好的改进开发过程和测试过程,需要对缺陷进行分析,总结如缺陷的类别、缺陷的龄期分布等信息,这是缺陷分析的管理。

    22.单元测试、集成测试、系统测试的侧重点是什么?

    答:单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试,测试重点是系统的模块,包括子程序的正确性验证等。 集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求,组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。测试重点是模块间的衔接以及参数的传递等。
    系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。测试重点是整个系统的运行以及与其他软件的兼容性。

    23.设计用例的方法、依据有那些?

    答:白盒测试用例设计有如下方法:基本路径测试\边界值分析\覆盖测试\循环测试\数据流测试\程序插桩测试\变异测试.这时候依据就是详细设计说明书及其代码结构
    黑盒测试用例设计方法:基于用户需求的测试\功能图分析方法\等价类划分方法\边界值分析方法\错误推测方法\因果图方法\判定表驱动分析方法\正交实验设计方法.依据是用户需求规格说明书,详细设计说明书。

    24.描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程

    答:1) 测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,系统会自动通过Email通知项目组长或直接通知开发者。
    2) 经验证无误后,修改状态为VERIFIED.待整个产品发布后,修改为CLOSED.
    3) 还有问题,REOPENED,状态重新变为“New",并发邮件通知。
    4) 项目组长根据具体情况,重新reassigned分配给bug所属的开发者。
    5) 若是,进行处理,resolved并给出解决方法。(可创建补丁附件及补充说明)
    6) 开发者收到Email信息后,判断是否为自己的修改范围。
    7) 若不是,重新reassigned分配给项目组长或应该分配的开发者。
    8) 测试人员查询开发者已修改的bug,进行重新测试。

    25.请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试

    答;1、单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。
    2、集成测试:通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。

    自顶向下集成:模块集成的顺序是首先集成主模块,然后按照控制层次结构向下进行集成,隶属于主模块的模块按照深度优先或广度优先的方式集成到整个结构中去。

    自底向上集成:从原子模块开始来进行构造和测试,因为模块是自底向上集成的,进行时要求所有隶属于某个给顶层次的模块总是存在的,也不再有使用稳定测试桩的必要。

    3、系统测试:是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试。

    4、回归测试:回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。

    5、验收测试:验收测试是指系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。验收测试包括Alpha测试和Beta测试。

    Alpha测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行。

    Beta测试:由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。

    26.请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步

    答:这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,能够对软件所有功能进行功能测试,能够覆盖系统所有联合的部件,是针对整个产品系统进行的测试,能够验证系统是否满足了需求规格的定义,因此我认为系统测试很重要。

    27.请回答集成测试和系统测试的区别,以及它们的应用场景主要是什么?

    参考回答:

    区别:
    1、计划和用例编制的先后顺序:从V模型来讲,在需求阶段就要制定系统测试计划和用例,HLD的时候做集成测试计划和用例,有些公司的具体实践不一样,但是顺序肯定是先做系统测试计划用例,再做集成。

    2、用例的粒度:系统测试用例相对很接近用户接受测试用例,集成测试用例比系统测试用例更详细,而且对于接口部分要重点写,毕竟要集成各个模块或者子系统。

    3、执行测试的顺序:先执行集成测试,待集成测试出的问题修复之后,再做系统测试。

    应用场景:

    集成测试:完成单元测试后,各模块联调测试;集中在各模块的接口是否一致、各模块间的数据流和控制流是否按照设计实现其功能、以及结果的正确性验证等等;可以是整个产品的集成测试,也可以是大模块的集成测试;集成测试主要是针对程序内部结构进行测试,特别是对程序之间的接口进行测试。集成测试对测试人员的编写脚本能力要求比较高。测试方法一般选用黑盒测试和白盒测试相结合。

    系统测试:针对整个产品的全面测试,既包含各模块的验证性测试(验证前两个阶段测试的正确性)和功能性(产品提交个用户的功能)测试,又包括对整个产品的健壮性、安全性、可维护性及各种性能参数的测试。系统测试测试软件《需求规格说明书》中提到的功能是否有遗漏,是否正确的实现。做系统测试要严格按照《需求规格说明书》,以它为标准。测试方法一般都使用黑盒测试法。

    28.请问测试开发需要哪些知识?需要具备什么能力?

    需要的知识:
    软件测试基础理论知识,如黑盒测试、白盒测试等;

    考编程语言基础,如C/C++、java、python等;

    自动化测试工具,如Selenium、Appium、Robotium等;

    计算机基础知识,如数据库、Linux、计算机网络等;

    测试框架,如JUnit等。

    需要具备的能力:

    业务分析能力,分析整体业务流程、分析被测业务数据、分析被测系统架构、分析被测业务模块、分析测试所需资源、分析测试完成目标;

    缺陷洞察能力,一般缺陷的发现能力、隐性问题的发现能力、发现连带问题的能力、发现问题隐患的能力、尽早发现问题的能力、发现问题根源的能力;

    团队协作能力,合理进行人员分工、协助组员解决问题、配合完成测试任务、配合开发重现缺陷、督促项目整体进度、出现问题勇于承担;

    专业技术能力,掌握测试基础知识、掌握计算机知识、熟练运用测试工具;

    逻辑思考能力,判断逻辑的正确性、对可行性逻辑分析、站在客观角度思考;

    问题解决能力,技术上的问题、工作中的问题、沟通问题;

    沟通表达能力,和技术人员、产品人员、上下级的沟通;

    宏观把控能力,有效控制测试时间、有效控制测试成本、有效制定测试计划、有效进行风险评估、有效控制测试方向。

    29.请说一说黑盒与白盒的测试方法

    参考回答:

    黑盒测试:
    黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

    “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

    常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。

    白盒测试:

    白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

    白盒测试需要遵循的原则有:1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。

    常用白盒测试方法:

    静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

    动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

    白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:

    1.语句覆盖每条语句至少执行一次。

    2.判定覆盖每个判定的每个分支至少执行一次。

    3.条件覆盖每个判定的每个条件应取到各种可能的值。

    4.判定/条件覆盖同时满足判定覆盖条件覆盖。

    5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

    6.路径覆盖使程序中每一条可能的路径至少执行一次。

    30.请说一下手动测试与自动化测试的优缺点

    手工测试缺点:
    1、重复的手工回归测试,代价昂贵、容易出错。

    2、依赖于软件测试人员的能力。

    手工测试优点:

    1、测试人员具有经验和对错误的猜测能力。

    2、测试人员具有审美能力和心理体验。

    3、测试人员具有是非判断和逻辑推理能力。

    自动化测试的优点:

    1、对程序的回归测试更方便。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。

    2、可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。

    3、可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。

    4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。

    5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。

    6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。

    7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。

    自动化测试的缺点:

    1、不能取代手工测试

    2、手工测试比自动测试发现的缺陷更多

    3、对测试质量的依赖性极大

    4、测试自动化不能提高有效性

    5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。

    6、工具本身并无想像力

    31.请问你怎么看待软件测试的潜力和挑战

    软件测试是正在快速发展,充满挑战的领域。尽管现在许多自动化测试软件的出现使得传统手工测试的方式被代替,但自动化测试工具的开发、安全测试、测试建模、精准测试、性能测试、可靠性测试等专项测试中仍然需要大量具有专业技能与专业素养的测试人员,并且随着云计算、物联网、大数据的发展,传统的测试技术可能不再适用,测试人员也因此面临着挑战,需要深入了解新场景并针对不同场景尝试新的测试方法,同时敏捷测试、Devops的出现也显示了软件测试的潜力。

    32.你觉得软件测试的核心竞争力是什么

    测试人员的核心竞争力在于提早发现问题,并能够发现别人无法发现的问题。
    1、早发现问题:问题发现的越早,解决的成本越低。如果一个需求在还未实现的时候就能发现需求的漏洞,那么这种问题的价值是最高的。

    2、发现别人无法发现的问题:所有人都能发现的问题,你发现了,那就证明你是可以被替代的。别人发现不了,而你可以发现,那么你就是无法被替代。

    33.你觉得测试和开发需要怎么结合才能使软件的质量得到更好的保障

    参考回答:

    测试和开发应该按照W模型的方式进行结合,测试和开发同步进行,能够尽早发现软件缺陷,降低软件开发的成本。
    在这里插入图片描述

    在V模型中,测试过程被加在开发过程的后半部分,单元测试所检测代码的开发是否符合详细设计的要求。集成测试所检测此前测试过的各组成部分是否能完好地结合到一起。系统测试所检测已集成在一起的产品是否符合系统规格说明书的要求。而验收测试则检测产品是否符合最终用户的需求。V模型的缺陷在于仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析、系统设计的验证,因此需求阶段的缺陷很可能一直到后期的验收测试才被发现,此时进行弥补将耗费大量人力物力资源。

    相对于V模型,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。

    W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。

    在这里插入图片描述
    W模型中测试的活动与软件开发同步进行,测试的对象不仅仅是程序,还包括需求和设计,因此能够尽早发现软件缺陷,降低软件开发的成本。

    34.你觉得单元测试可行吗

    参考回答:

    可行,单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。事前可以保证质量,事后可以快速复现问题,并在修改代码后做回归自测。可行性考虑的是要用一些可行的方法做到关键的代码可测试,如通过边界条件、等价类划分、错误、因果,设计测试用例要覆盖常用的输入组合、边界条件和异常。

    35.你觉得自动化测试有什么意义,都需要做些什么

    自动化测试的意义在于
    1、可以对程序的新版本自动执行回归测试

    2、可以执行手工测试困难或者不可能实现的测试,如压力测试,并发测试,

    3、能够更好的利用资源,节省时间和人力

    执行自动化测试之前首先判断这个项目是不是和推广自动化测试,然后对项目做需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,评估

    36.请你回答一下测试的相关流程是什么?

    测试最规范的过程如下
    需求测试->概要设计测试->详细设计测试->单元测试->集成测试->系统测试->验收测试
    来自W模型

    37.请你说一下如何写测试用例?

    1、测试人员尽早介入,彻底理解清楚需求,这个是写好测试用例的基础
    2、如果以前有类似的需求,可以参考类似需求的测试用例,然后还需要看类似需求的bug情况

    3、清楚输入、输出的各种可能性,以及各种输入的之间的关联关系,理解清楚需求的执行逻辑,通过等价类、边界值、判定表等方法找出大部分用例

    4、找到需求相关的一些特性,补充测试用例

    5、根据自己的经验分析遗漏的测试场景

    6、多总结类似功能点的测试点,才能够写出质量越来越高的测试用例

    7、书写格式一定要清晰

    38.请问你觉得测试项目具体工作是什么?

    答;搭建测试环境
    撰写测试用例

    执行测试用例

    写测试计划,测试报告

    测试,并提交BUG表单

    跟踪bug修改情况

    执行自动化测试,编写脚本,执行,分析,报告

    进行性能测试,压力测试等其他测试,执行,分析,调优,报告

    39.请问如果想进行bug的测评,怎么去评测bug?

    Bug的priority()和severity()是两个重要属性,通常人员在提交bug的时候,只定义severity,而将priority交给leader定义,通常bug管理中,severity分为四个等级blocker、critical、major、minor/trivial,而priority分为五个等级immediate、urgent、high、normal、low。
    Severity:

    1、blocker:即系统无法执行,崩溃,或严重资源不足,应用模块无法启动或异常退出,无法测试,造成系统不稳定。常见的有严重花屏、内存泄漏、用户数据丢失或破坏、系统崩溃/死机/冻结、模块无法启动或异常退出、严重的数值计算错误、功能设计与需求严重不符、其它导致无法测试的错误, 如服务器500错误。

    2、critical:即映像系统功能或操作,主要功能存在严重缺陷,但不会映像到系统稳定性。常见的有:功能未实现,功能错误、系统刷新错误、数据通讯错误、轻微的数值计算错误、影响功能及界面的错误字或拼写错误。

    3、major:即界面、性能缺陷、兼容性,常见的有:操作界面错误,边界条件错误,提示信息错误,长时间操作无进度提示,系统未优化,兼容性问题。

    4、minor/trivial:即易用性及建议性问题。

    Priority

    1、immediate:即马上解决,

    2、urgent:急需解决

    3、high:高度重视,有时间要马上解决

    4、low:在系统发布前解决,或确认可以不用解决。

    40.请你说一说测试用例的边界?

    边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
    常见的边界值

    1)对16-bit 的整数而言 32767 和 -32768 是边界

    2)屏幕上光标在最左上、最右下位置

    3)报表的第一行和最后一行

    4)数组元素的第一个和最后一个

    5)循环的第 0 次、第 1 次和倒数第 2 次、最后一次

    41.请你说一下软件质量的六个特征?

    按照软件质量国家标准GB-T8566–2001G,软件质量可以用下列特征来评价:
    a.功能特征:与一组功能及其指定性质有关的一组属性,这里的功能是满足明确或隐含的需求的那些功能。

    b.可靠特征:在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性。

    c.易用特征:由一组规定或潜在的用户为使用软件所需作的努力和所作的评价有关的一组属性。

    d.效率特征:与在规定条件下软件的性能水平与所使用资源量之间关系有关的一组属性。

    e.可维护特征:与进行指定的修改所需的努力有关的一组属性。

    f.可移植特征:与软件从一个环境转移到另一个环境的能力有关的一组属性。

    42.请你说一下设计测试用例的方法

    黑盒测试:
    1.等价类划分

    等价类划分是将系统的输入域划分为若干部分,然后从每个部分选取少量代表性数据进行测试。等价类可以划分为有效等价类和无效等价类,设计测试用例的时候要考虑这两种等价类。

    2.边界值分析法

    边界值分析法是对等价类划分的一种补充,因为大多数错误都在输入输出的边界上。边界值分析就是假定大多数错误出现在输入条件的边界上,如果边界附件取值不会导致程序出错,那么其他取值出错的可能性也就很小。

    边界值分析法是通过优先选择不同等价类间的边界值覆盖有效等价类和无效等价类来更有效的进行测试,因此该方法要和等价类划分法结合使用。

    3.正交试验法

    正交是从大量的试验点中挑选出适量的、有代表性的点。正交试验设计是研究多因素多水平的一种设计方法,他是一种基于正交表的高效率、快速、经济的试验设计方法。

    4.状态迁移法

    状态迁移法是对一个状态在给定的条件内能够产生需要的状态变化,有没有出现不可达的状态和非法的状态,状态迁移法是设计足够的用例达到对系统状态的覆盖、状态、条件组合、状态迁移路径的覆盖。

    5.流程分析法

    流程分析法主要针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,这是从白盒测试中路径覆盖分析法借鉴过来的一种很重要的方法。

    6.输入域测试法

    输入域测试法是针对输入会有各种各样的输入值的一个测试,他主要考虑 极端测试、中间范围测试,特殊值测试 。

    7.输出域分析法

    输出域分析法是对输出域进行等价类和边界值分析,确定是要覆盖的输出域样点,反推得到应该输入的输入值,从而构造出测试用例,他的目的是为了达到输出域的等价类和边界值覆盖。

    8.判定表分析法

    判定表是分析和表达多种输入条件下系统执行不同动作的工具,他可以把复杂的逻辑关系和多种条件组合的情况表达的即具体又明确;

    9.因果图法

    因果图是用于描述系统输入输出之间的因果关系、约束关系。因果图的绘制过程是对被测系统的外部特征的建模过程,根据输入输出间的因果图可以得到判定表,从而规划出测试用例。

    10.错误猜测法

    错误猜测法主要是针对系统对于错误操作时对于操作的处理法的猜测法,从而设计测试用例

    11.异常分析法

    异常分析法是针对系统有可能存在的异常操作,软硬件缺陷引起的故障进行分析,分析发生错误时系统对于错误的处理能力和恢复能力依此设计测试用例。

    白盒测试:

    白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

    白盒测试需要遵循的原则有:1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。

    常用白盒测试方法:

    静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

    动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

    白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:

    1.语句覆盖每条语句至少执行一次。

    2.判定覆盖每个判定的每个分支至少执行一次。

    3.条件覆盖每个判定的每个条件应取到各种可能的值。

    4.判定/条件覆盖同时满足判定覆盖条件覆盖。

    5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

    6.路径覆盖使程序中每一条可能的路径至少执行一次。

    43.请你说一说测试工程师的必备技能

    需要的知识:
    • 软件测试基础理论知识,如黑盒测试、白盒测试等;

    • 编程语言基础,如C/C++、java、python等;

    • 自动化测试工具,如Selenium、Appium、Robotium等;

    • 计算机基础知识,如数据库、Linux、计算机网络等;

    • 测试框架,如JUnit等。

    需要具备的能力:

    • 业务分析能力,分析整体业务流程、分析被测业务数据、分析被测系统架构、分析被测业务模块、分析测试所需资源、分析测试完成目标;

    • 缺陷洞察能力,一般缺陷的发现能力、隐性问题的发现能力、发现连带问题的能力、发现问题隐患的能力、尽早发现问题的能力、发现问题根源的能力;

    • 团队协作能力,合理进行人员分工、协助组员解决问题、配合完成测试任务、配合开发重现缺陷、督促项目整体进度、出现问题勇于承担;

    • 专业技术能力,掌握测试基础知识、掌握计算机知识、熟练运用测试工具;

    • 逻辑思考能力,判断逻辑的正确性、对可行性逻辑分析、站在客观角度思考;

    • 问题解决能力,技术上的问题、工作中的问题、沟通问题;

    • 沟通表达能力,和技术人员、产品人员、上下级的沟通;

    • 宏观把控能力,有效控制测试时间、有效控制测试成本、有效制定测试计划、有效进行风险评估、有效控制测试方向。

    44.请你说一下app性能测试的指标

    1、内存:内存消耗测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性。当然关于内存测试,在这里我们需要引入几个概念:空闲状态、中等规格、满规格。
    空闲状态指打开应用后,点击home键让应用后台运行,此时应用处于的状态叫做空闲;中等规格和满规格指的是对应用的操作时间的间隔长短不一,中等规格时间较长,满规格时间较短。

    内存测试中存在很多测试子项,清单如下:

    ●空闲状态下的应用内存消耗;

    ●中等规格状态下的应用内存消耗;

    ●满规格状态下的应用内存消耗;

    ●应用内存峰值;

    ●应用内存泄露;

    ●应用是否常驻内存;

    ●压力测试后的内存使用。

    2、CPU:

    使用Android提供的view plaincopy在CODE上查看代码片派生到我的代码片

    adbshell dumpsys CPUinfo |grep packagename >/address/CPU.txt来获取;

    使用top命令view plaincopy在CODE上查看代码片派生到我的代码片

    adbshell top |grep packagename>/address/CPU.txt来获取。

    3、流量:

    网络流量测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试。

    流量测试包括以下测试项:

    应用首次启动流量提示;

    应用后台连续运行2小时的流量值;

    应用高负荷运行的流量峰值。

    4、电量:

    ●测试手机安装目标APK前后待机功耗无明显差异;

    ●常见使用场景中能够正常进入待机,待机电流在正常范围内;

    ●长时间连续使用应用无异常耗电现象。

    5、启动速度:

    第一类:首次启动–应用首次启动所花费的时间;

    第二类:非首次启动–应用非首次启动所花费的时间;

    第三类:应用界面切换–应用界面内切换所花费的时间。

    6、滑动速度、界面切换速度

    7、与服务器交互的网络速度

    45.请你说一说app测试的工具

    参考回答:

    功能测试自动化
    a) 轻量接口自动化测试

    jmeter,

    b) APP UI层面的自动化

    android:UI Automator Viewer,Android Junit,Instrumentation,UIAutomator,

    iOS:基于Instrument的iOS UI自动化,

    性能测试

    a) Web前端性能测试

    网络抓包工具:Wireshark

    网页文件大小

    webpagetest

    pagespeed insight

    chrome adb

    b) APP端性能测试

    Android内存占用分析:MAT

    iOS内存问题分析:ARC模式

    Android WebView性能分析:

    iOS WebView性能分析

    c) 后台服务性能测试

    负载,压力,耐久性

    可拓展性,基准

    工具:apacheAB,Jmeter,LoadRunner,

    专项测试

    a) 兼容性测试

    手工测试:操作系统,分辨率,rom,网络类型

    云平台:testin,脚本编写,Android。

    b) 流量测试

    Android自带的流量管理,

    iOS自带的Network

    tcpdump抓包

    WiFi代理抓包:Fiddler

    流量节省方法:压缩数据,json优于xml;WebP优于传统的JPG,PNG;控制访问的频次;只获取必要的数据;缓存;

    c) 电量测试

    基于测试设备的方法,购买电量表进行测试。

    GSam Battery Monitoe Pro

    iOS基于Instrument Energy工具

    d) 弱网络测试

    手机自带的网络状况模拟工具

    基于代理的弱网络的模拟:

    工具:windows:Network Delay Simulator

    Mac:Network Link Conditioner

    46.请你说一说bug的周期,以及描述一下不同类别的bug

    参考回答:

    1、New:(新的)
    当某个“bug”被第一次发现的时候,测试人员需要与项目负责人沟通以确认发现的的确是一个bug,如果被确认是一个bug,就将其记录下来,并将bug的状态设为New

    2、Assigned(已指派的)

    当一个bug被指认为New之后,将其反馈给开发人员,开发人员将确认这是否是一个bug,如果是,开发组的负责人就将这个bug指定给某位开发人员处理,并将bug的状态设定为“Assigned”

    3、Open(打开的)

    一旦开发人员开始处理bug的时候,他(她)就将这个bug的状态设置为“Open”,这表示开发人员正在处理这个“bug”

    4、Fixed(已修复的)

    当开发人员进行处理(并认为已经解决)之后,他就可以将这个bug的状态设置为“Fixed”并将其提交给开发组的负责人,然后开发组的负责人将这个bug返还给测试组

    5、Pending Reset(待在测试的)

    当bug被返还到测试组后,我们将bug的状态设置为Pending Reset”

    6、Reset(再测试)

    测试组的负责人将bug指定给某位测试人员进行再测试,并将bug的状态设置为“Reset”

    7、Closed(已关闭的)

    如果测试人员经过再次测试之后确认bug 已经被解决之后,就将bug的状态设置为“Closed”

    8、Reopen(再次打开的)

    如果经过再次测试发现bug(指bug本身而不是包括因修复而引发的新bug)仍然存在的话,测试人员将bug再次传递给开发组,并将bug的状态设置为“Reopen”

    9、Pending Reject(拒绝中)

    如果测试人员传递到开发组的bug被开发人员认为是正常行为而不是bug时,这种情况下开发人员可以拒绝,并将bug的状态设置为“Pending Reject”

    10、Rejected(被拒绝的)

    测试组的负责人接到上述bug的时候,如果他(她)发现这是产品说明书中定义的正常行为或者经过与开发人员的讨论之后认为这并不能算作bug的时候,开发组负责人就将这个bug的状态设置为“Rejected”

    11、Postponed(延期)

    有些时候,对于一些特殊的bug的测试需要搁置一段时间,事实上有很多原因可能导致这种情况的发生,比如无效的测试数据,一些特殊的无效的功能等等,在这种情况下,bug的状态就被设置为“Postponed“

    不同类别的bug:

    Bug类型

    • 代码错误

    • 界面优化

    • 设计缺陷

    • 配置相关

    • 安装部署

    • 安全相关

    • 性能问题

    • 标准规范

    • 测试脚本

    • 其他

    47.请你说一说PC网络故障,以及如何排除障碍

    (1)首先是排除接触故障,即确保你的网线是可以正常使用的。然后禁用网卡后再启用,排除偶然故障。打开网络和共享中心窗口,单击窗口左上侧“更改适配器设置”右击其中的“本地连接“或”无线网络连接”,单击快捷菜单中的“禁用”命令,即可禁用所选网络。接下来重启网络,只需右击后单击启用即可。
    (2)使用ipconfig查看计算机的上网参数

    1、单击“开始|所有程序|附件|命令提示符“,打开命令提示符窗口

    2、输入ipconfig,按Enter确认,可以看到机器的配置信息,输入ipconfig/all,可以看到IP地址和网卡物理地址等相关网络详细信息。

    (3)使用ping命令测试网络的连通性,定位故障范围

    在命令提示符窗口中输入”ping 127.0.0.1“,数据显示本机分别发送和接受了4个数据包,丢包率为零,可以判断本机网络协议工作正常,如显示”请求超时“,则表明本机网卡的安装或TCP/IP协议有问题,接下来就应该检查网卡和TCP/IP协议,卸载后重装即可。

    (4)ping本机IP

    在确认127.0.0.1地址能被ping通的情况下,继续使用ping命令测试本机的IP地址能否被ping通,如不能,说明本机的网卡驱动程序不正确,或者网卡与网线之间连接有故障,也有可能是本地的路由表面收到了破坏,此时应检查本机网卡的状态是否为已连接,网络参数是否设置正确,如果正确可是不能ping通,就应该重新安装网卡驱动程序。丢失率为零,可以判断网卡安装配置没有问题,工作正常。

    (5)ping网关

    网关地址能被ping通的话,表明本机网络连接以及正常,如果命令不成功,可能是网关设备自身存在问题,也可能是本机上网参数设置有误,检查网络参数。

    48.请你说一说测试的常用方法

    黑盒测试:
    黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

    “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

    常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。

    白盒测试:

    白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

    白盒测试需要遵循的原则有:1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。

    常用白盒测试方法:

    静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

    动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

    白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:

    1.语句覆盖每条语句至少执行一次。

    2.判定覆盖每个判定的每个分支至少执行一次。

    3.条件覆盖每个判定的每个条件应取到各种可能的值。

    4.判定/条件覆盖同时满足判定覆盖条件覆盖。

    5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

    6.路径覆盖使程序中每一条可能的路径至少执行一次。

    49.请你说一说你知道的自动化测试框架

    参考回答:

    1、模块化测试框架
    模块化测试脚本框架(TEST MODulARITY FRAMEWORK)需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。在五种框架中,模块化框架是最容易掌握和使用的。在一个组件上方建立一个抽象层使其在余下的应用中隐藏起来,这是众所周知的编程技巧。这样应用同组件中的修改隔离开来,提供了程序设计的模块化特性。模块化测试脚本框架使用这一抽象或者封装的原理来提高自动测试组合的可维护性和可升级性。

    2、测试库框架

    测试库框架(Test Library Architecture)与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。

    3、关键字驱动或表驱动的测试框架

    对于一个独立于应用的自动化框架,关键字驱动(KEYWORD DRIVEN)I9LJJ试和表驱动(TABLE DRIVEN)测试是可以互换的术语。这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似。在一个关键字驱动测试中,把待测应用程序的功能和每个测试的执行步骤一起写到一个表中。这个测试框架可以通过很少的代码来产生大量的测试用例。同样的代码在用数据表来产生各个测试用例的同时被复用。

    4、数据驱动测试框架

    数据驱动(DATA DRIVEN),LJ试是一个框架。在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测 试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。然而,数据驱动测试不同于表驱动测试,尽管导航数据并不包含在表结构中。在数据驱动测试中,数据文件中只包含测试数据。这个框架意图减少需要执行所有测试用例所需要的总的测试脚本数。数据驱动需要很少的代码来产生大量的测试用例,这与表驱动极其类似。

    5、混合测试自动化(Hybrid Test Automation)框架

    最普遍的执行框架是上面介绍的所有技术的一个结合,取其长处,弥补其不足。这个混合测试框架是由大部分框架随着时间并经过若干项目演化而来的

    50.请你说一说web测试和app测试的不同点

    系统架构方面:
    web项目,一般都是b/s架构,基于浏览器的

    app项目,则是c/s的,必须要有客户端,用户需要安装客户端。

    web测试只要更新了服务器端,客户端就会同步会更新。App项目则需要客户端和服务器都更新。

    性能方面:

    web页面主要会关注响应时间

    而app则还需要关心流量、电量、CPU、GPU、Memory这些。

    它们服务端的性能没区别,都是一台服务器。

    兼容方面:

    web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容

    app测试则要看分辨率,屏幕尺寸,还要看设备系统。

    web测试是基于浏览器的所以不必考虑安装卸载。

    而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件 。

    此外APP还有一些专项测试:如网络、适配性。

    51.请问你了解什么测试方法

    参考回答:

    等价类划分,边界值分析,错误推测,因果图法,逻辑覆盖法,程序插桩技术,基本路径法,符号测试,错误驱动测试

    52.请问黑盒测试和白盒测试有哪些方法

    黑盒测试方法有等价类划分,边界值分析,错误推测,因果图法
    白盒测试方法有逻辑覆盖法,程序插桩技术,基本路径法,符号测试,错误驱动测试

    53.请问你怎么看待测试,知道哪些测试的类型,有用过哪些测试方法?

    测试是软件开发中不可或缺的一环,测试通过经济,高效的方法,捕捉软件中的错误,从而达到保重软件内在质量的目的。
    测试分为功能测试和非功能测试,非功能测试又可以分为性能测试、压力测试、容量测试、健壮性测试、安全性测试、可靠性测试、恢复性测试、备份测试、协议测试、兼容性测试、可用性测试、配置测试、GUI测试。

    测试方法用过等价划分法、边值分析法、错误推测法、因果图法。

    54.请问你怎么测试网络协议?

    协议测试包括四种类型的测试
    1、一致性测试:检测协议实现本身与协议规范的符合程度

    2、互操作性测试:基于某一协议检测不同协议实现间互操作互通信的能力

    3、性能测试:检测协议实现的性能指标,比如数据传输速度,连接时间,执行速度,吞吐量,并发度,

    4、健壮性测试:检测协议是现在各种恶劣环境下运行的能力,比如注入干扰报文,通信故障,信道被切断

    展开全文
  • 软件测试实例

    千次阅读 2019-05-16 21:34:08
    手写这段代码,并写出测试用例 IP的格式:(1–255).(0–255).(0–255).(0–255) 判断字符串是否为空 字符串长度范围:1.0.0.0 – 255.255.255.255(7–15) 字符串第一位和最后一位必须是数字 字符串用“.”分割,...
  • 关于软件测试,你需要知道的一切都在这里了

    万次阅读 多人点赞 2019-10-24 09:07:31
    我曾今不止一次见过:对软件测试行业不甚了解的新人与已经在测试行业摸爬滚打几年的前辈之间的互相指责和争执。 新人因为不了解测试行业,也不了解提问的艺术,所以问的都是自己比较关注的问题和一些基础问题。前辈...
  • 软件测试流程详解

    万次阅读 2019-06-02 14:45:19
    1.软件测试的定义: 使用人工或自动手段,来运行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 百度百科定义:软件测试(英语:Software Testing),描述一种用来...
  • 软件测试需要具备的知识体系(个人总结)

    万次阅读 多人点赞 2018-09-10 14:15:25
    一、软件的生命周期(SDLC,Systems Development ...软件测试;运行与维护 生存周期划分  各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不 ...
  • 软件测试自学指南---从入门到精通

    万次阅读 多人点赞 2013-07-26 10:48:22
    越来越多的人加入了测试大军中,很多人也想通过自学来学习软件测试技术加入这个行业,但是现在软件测试的书籍越来越多,也良莠不齐,而且软件测试涉及的技术也越来越多。本文主要说明的是从事软件测试行业需要必备的...
  • 软件测试: 用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求 软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。 软件测试是为了发现错误...
  • 软件测试方法

    万次阅读 2016-04-03 23:23:25
     软件测试方法 1. 软件测试方法包括:白盒测试(White Box Testing)、黑盒测试(Black Box Testing)、灰盒测试、静态测试、动态测试。 2. 白盒测试:是一种测试用例设计方法,在这里盒子指的是被测试的...
  • 软件测试全套教程,软件测试自学线路图

    万次阅读 多人点赞 2020-06-29 11:31:36
    软件测试软件测试是为了发现程序中的错误而执行程序的过程。 通俗的说,软件测试需要在发布软件之前,尽可能的找软件的错误,尽量避免在发布之后给用户带来不好的体验,并要满足用户使用的需求。 现在市面上...
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友

    万次阅读 多人点赞 2020-04-19 20:48:45
    这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经...
  • 软件测试基础知识总结(一)

    万次阅读 多人点赞 2015-08-25 16:55:52
    第一部分:软件评测知识 1. 软件质量与软件测试 软件测试:在规定条件...软件测试只是质量保证工作中的一个环节,软件质量保证与软件测试是软件质量工程的两个不同层面的工作; 质量保证:通过预防、检查与改进来
  • 软件测试笔试面试题目完全汇总

    万次阅读 多人点赞 2019-03-22 22:41:43
    1、软件测试的流程 2、web测试和APP测试的区别 仅仅从功能测试的层面上来讲的话,在流程和功能测试上是没有区别的。那么区别在哪里呢? 由于载体不一样,所以系统测试和一些细节可能会不一样。 那么我们就要先...
  • 软件测试--用例编写

    万次阅读 多人点赞 2018-08-15 18:47:30
    测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。 在这里我们不讨论以上的...
  • 问:软件测试的原则? 答:https://blog.csdn.net/weixin_30363263/article/details/102986878 问:你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。 1、将问题提交到缺陷...
1 2 3 4 5 ... 20
收藏数 1,171,371
精华内容 468,548
关键字:

软件测试