3、了解哪些测试工具?你是用过和知道的测试工具有哪些?各有什么用途?答:Jmeter:接口测试、压力测试soapui:接口测试xshell、xftp:管理linux系统禅道:管理BUGnavictt:管理数据库
4、先有一个程序,页面提供3个输入框a、b、c,一个输出框d,根据a、b、c的输入判断数据层是否只能组成一个三角形(三角形两边之和大于第三边),在d中输出:是,否答:等价类划分法:有效等价类:a、b、c的值都大于0a+b>c且b+c>a且a+c>b无效等价类:a/b/c为0或负数a/b/c为空a/b/c为非数字a+b<=cb+c<=aa+b<=b
5、你认为一个测试工程师应具备哪些素质和技能答:技能:计算机专业技能,测试专业技能,软件编程技能素质:.沟通能力,要有严谨、敢于承担责任、稳重的做事风格,具有怀疑与破坏的精神,善于自我总结、自我督促。
6、问题单都有哪些属性?答:我所知道的有:产品模块、所属项目、所属版本、bug标题、步骤及测试数据、bug及日志截图、类型及严重程度、系统/浏览器
9、如何定位BUG,是前端还是后端的问题,用什么工具,还是利用别的?答:如果是功能性的问题,那么就是后端问题,如果是界面的效果或者是按钮问题,那么也许是前端问题,分析问题,有的时候需要开发的协作,大师这些也是经验的问题,多工作就可以总结出来
1、HTTP协议有什么特点?有哪几类状态码,分别表示什么意思?
1.特点:
无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
媒体独立:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。
无状态:无状态是指协议对于事务处理没有记忆能力。
各个状态码的含义:1xx:请求成功继续处理2xx:请求发送成功3xx:重定向4xx:客户端错误,请求有误无法实现5xx:服务端错误:未能实现合法请求
2.简述cookies和session是怎么工作的?
cookis:发送HTTP请求时请求头加上特殊的指示提示浏览器生成指示对应的cookis
session:是一种服务端的机制,类似于用散列表的形式保存信息
4.用你熟悉的一种编程语言,写出计算以下结果的代码。1+2+3+…+100=?
j=0foriintrange(1,101)j=j+iprint("计算的结果为d%"j%)
5.创建一个UC表,字段如下:FID(INT)/NAME(VARCHAR)姓名/EMAIL(VARCHAR)邮件/FBAL(decimal(20,2))/金额
a.增加数据
INSERTINTOUC(NAME,EMAIL,FBAL)VALUES('黄斌','34@163.com','550')INSERTINTOUC(NAME,EMAIL,FBAL)VALUES('李毅','35@163.com','250')INSERTINTOUC(NAME,EMAIL,FBAL)VALUES('张梭','36@163.com','250')INSERTINTOUC(NAME,EMAIL,FBAL)VALUES('李冰','37@163.com','450')
B.查询用户金额不小于300的用户名称
SELECTNAMEFROMUCWHEREFBAL<=300
一、什么是静态测试?动态测试?二、什么是回归测试?三、如果能够执行完美的黑盒测试,还需要进行白盒测试吗(黑盒和白盒的区别?)四、软件测试分几个阶段?各阶段重点测试什么?各个阶段的含义?五、针对缺陷采取怎样的管理措施?六、软件测试的V模型和W模型七、测试方法可以分为哪几种?八、白盒测试之六种覆盖九、其他问题记录
通过运行程序测试软件:动态测试(有白盒和黑盒,从不同角度设计测试用例)通过评审文档、阅读代码:静态测试静态测试方法是指不运行被测程序本身,仅通过分析或检查源代码的语法、结构、接口等来检查程序的正确性。对照需求规格说明书,软件设计说明书,源程序做结构分析,流程图分析。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,如不匹配的参数,不合适的嵌套循环和分支嵌套,不允许的递归,未使用过的变量、空指针的引用和可疑的计算。用于进一步的差错,并为测试用例选取提供指导。
目的是程序有修改的情况下,保证原有功能正常的一种测试策略和方法。测试人员在程序进行测试时发现bug,然后返回程序员修改,程序员修改后发布新的软件包或软件补丁包给测试人员,重新测试,保证程序修正了以前bug的情况下,正常运行且不会带来新的错误的过程,一般不需要全面测试,根据修改情况进行有效的测试。
1.要更好的管理缺陷,必须引入缺陷管理工具,商用的或者开源的。2.根据缺陷的生命周期,考虑缺陷提交的管理,缺陷状态的管理和缺陷分析的管理。3.所有发现的缺陷必须全部即时的,准确的提交到缺陷管理工具中,这就是缺陷提交的管理。4.缺陷提交后,需要即时的指派给相应的开发人员,提交缺陷的人需要密切注意缺陷的状态,帮助缺陷的尽快解决,缺陷解决后需要即时对缺陷的修复进行验证。目的有2个:1.让缺陷尽快解决2.方便后面缺陷的分析5.为了更好的改进开发计划和测试过程,需要对缺陷进行分析,总结如缺陷的类型,缺陷的龄期分布等信息。
软件测试可以是人工测试:如个人复查,抽查和会审等也可以是机器自动测试,又有不同的分类:按照否关软件内部结构具体实现角度划==A.白盒测试B.黑盒测试C.灰盒测试==按照软件发程按阶段划A.单元测试B.集测试C.确认测试D.系统测试E.验收测试
1.语句覆盖:可执行语句至少被执行一次;2.判断覆盖:每个判断的取真分支和取假分支至少经历一次;3.条件覆盖:每个条件的取值至少满足一次;4.判断条件覆盖:判断和条件都满足;5.条件组合覆盖:每个条件的所有可能都至少出现一次,并且判定结果至少出现一次;他与条件覆盖的区别:他不是简单要求每个条件出现“真”和“假”两种结果,而是要求这些结果所有可能至少出现一次;6.路径测试:执行所有可能的执行路径;7.基本路径测试:路径测试执行了每个路径,每个判定的结果肯定经历过一次6种覆盖标准,强度由弱到强依次是:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖
常用的黑盒测试方法:等价类划分法、边界值分析法、正交实验设计法、因果图法、决策表法。等值分析测试=等价类划分+边界值分析测试边界值法既是白盒又是黑盒测试方法因果图法:等价类划分法和边界值分析方法都是着重考虑输入条件,如果程序输入之间没有什么联系,采用等价类划分和边界值分析是一种比较有效的方法。如果输入之间有关系,例如,约束关系、组合关系,这种关系用等价类划分和边界值分析是很难描述的,测试效果难以保障,因此必须考虑使用一种适合于描述对于多种条件的组合,产生多个相应动作的测试方法,因果图正是在此背景下提出的。因果图法着重测试规格说明中的输入与输出间的依赖关系。因果图法测试用例的设计步骤:(1)确定软件规格(需求)中的原因和结果(2)确定原因和结果之间的逻辑关系(3)确定因果图中的各个约束(constraints)(4)画出因果图并转换为决策表(5)根据决策表设计测试用例
答:软件测试是为了发现错误而执行程序的过程。
答:主要测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现;
答:测试设计是否符合全部需求以及设计是否合理。
答:Alpha测试(α测试)是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。Alpha测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。目的是评价软件产品的功能、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。Alpha测试可以从软件产品编码结束之后开始,或在模块(子系统)测试完成后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。有关的手册(草稿)等应该在Alpha测试前准备好。
答:Beta测试(β测试)是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。因而,Beta测试是在开发者无法控制的环境下进行的软件现场应用。在Beta测试中,由用户记下遇到的所有问题,包括真实的以及主管认定的,定期向开发者报告,开发者在综合用户的报告后,做出修改,最后将软件产品交付给全体用户使用。Beta测试着重于产品的支持性,包括文档、客户培训和支持产品的生产能力。只有当Alpha测试达到一定的可靠程度后,才能开始Beta测试。由于Beta测试的主要目标是测试可支持性,所以Beta测试应该尽可能由主持产品发行的人员来管理。
答:驱动模块在大多数场合称为"主程序",它接收测试数据并将这些数据传递到被测试模块.单元测试一个函数单元时,被测单元本身是不能独立运行的,需要为其传送数据,为此写驱动驱动模块主要完成以下事情:1、接受测试输入;2、对输入进行判断;3、将输入传给被测单元,驱动被测单元执行;4、接受被测单元执行结果,并对结果进行判断;5、将判断结果作为用例执行结果输出测试报告。
答:比如对函数A做单元测试时,被测的函数单元下还包括了一个函数B,为了更好的错误,定位错误,就要为函数B写桩,来模拟函数B的功能,保证其正确。
答:白盒测试(White-boxTesting,又称逻辑驱动测试,结构测试),它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。对开发语言的支持:白盒测试工具是对源代码进行的测试,测试的主要内容包括词法分析与语法分析、静态错误分析、动态检测等。目前测试工具主要支持的开发语言包括:标准C、C++、VisualC++、Java、VisualJ++等。
答:通过运行程序测试软件称为动态测试.通过评审文档、阅读代码等方式测试软件称为静态测试,在动态测试中,通常使用白盒测试和黑盒测试从不同的角度设计测试用例,查找软件代码中的错误.静态测试方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。
答:回归测试的目的是在程序有修改的情况下,保证原有功能正常的一种测试策略和方法。说白了就是,我们测试人员在对程序进行测试时发现bug,然后返还程序员修改,程序员修改后发布新的软件包或新的软件补丁包给我们测试人员,我们就要重新对这个程序测试,已保证程序在修正了以前bug的情况下,正常运行,且不会带来新的错误的这样一个过程。一般情况下是不需要全面测试的,而是根据修改的情况进行有效的测试。
答:白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。
答:任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求.
答:大体上来说可分为单元测试,集成测试,系统测试,验收测试,每个阶段又分为以下五个步骤:测试计划,测试设计,用例设计,执行结果,测试报告初始测试集中在每个模块上,保证源代码的正确性,该阶段成为单元测试,主要用白盒测试方法。接下来是模块集成和集成以便组成完整的软件包。集成测试集中在证实和程序构成问题上。主要采用黑盒测试方法,辅之以白盒测试方法。软件集成后,需要完成确认和系统测试。确认测试提供软件满足所有功能、性能需求的最后保证。确认测试仅仅应用黑盒测试方法。
答:单元测试是对软件中的基本组成单位进行的测试,如一个模块、一个过程等等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。
答:集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。
答:系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确并非一项简单的任务,它被称为测试的“先知者问题”。
答:验收测试旨在向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集.
答:回归测试是在软件维护阶段,对软件进行修改之后进行的测试。其目的是检验对软件进行的修改是否正确。
答:单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试,测试重点是系统的模块,包括子程序的正确性验证等。
集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求,组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。测试重点是模块间的衔接以及参数的传递等。
系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。测试重点是整个系统的运行以及与其他软件的兼容性。
答:白盒测试用例设计有如下方法:
基本路径测试\边界值分析\覆盖测试\循环测试\数据流测试\程序插桩测试\变异测试.
这时候依据就是详细设计说明书及其代码结构黑盒测试用例设计方法:
基于用户需求的测试\功能图分析方法\等价类划分方法\边界值分析方法\错误推测方法\因果图方法\判定表驱动分析方法\正交实验设计方法.
依据是用户需求规格说明书,详细设计说明书。
答:1)测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,系统会自动通过Email通知项目组长或直接通知开发者。2)经验证无误后,修改状态为VERIFIED.待整个产品发布后,修改为CLOSED.3)还有问题,REOPENED,状态重新变为“New",并发邮件通知。4)项目组长根据具体情况,重新reassigned分配给bug所属的开发者。5)若是,进行处理,resolved并给出解决方法。(可创建补丁附件及补充说明)6)开发者收到Email信息后,判断是否为自己的修改范围。7)若不是,重新reassigned分配给项目组长或应该分配的开发者。8)测试人员查询开发者已修改的bug,进行重新测试。
答;1、单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。2、集成测试:通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。
自顶向下集成:模块集成的顺序是首先集成主模块,然后按照控制层次结构向下进行集成,隶属于主模块的模块按照深度优先或广度优先的方式集成到整个结构中去。
自底向上集成:从原子模块开始来进行构造和测试,因为模块是自底向上集成的,进行时要求所有隶属于某个给顶层次的模块总是存在的,也不再有使用稳定测试桩的必要。
3、系统测试:是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试。
4、回归测试:回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。
Alpha测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行。
Beta测试:由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。
答:这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,能够对软件所有功能进行功能测试,能够覆盖系统所有联合的部件,是针对整个产品系统进行的测试,能够验证系统是否满足了需求规格的定义,因此我认为系统测试很重要。
参考回答:
区别:1、计划和用例编制的先后顺序:从V模型来讲,在需求阶段就要制定系统测试计划和用例,HLD的时候做集成测试计划和用例,有些公司的具体实践不一样,但是顺序肯定是先做系统测试计划用例,再做集成。
2、用例的粒度:系统测试用例相对很接近用户接受测试用例,集成测试用例比系统测试用例更详细,而且对于接口部分要重点写,毕竟要集成各个模块或者子系统。
3、执行测试的顺序:先执行集成测试,待集成测试出的问题修复之后,再做系统测试。
应用场景:
集成测试:完成单元测试后,各模块联调测试;集中在各模块的接口是否一致、各模块间的数据流和控制流是否按照设计实现其功能、以及结果的正确性验证等等;可以是整个产品的集成测试,也可以是大模块的集成测试;集成测试主要是针对程序内部结构进行测试,特别是对程序之间的接口进行测试。集成测试对测试人员的编写脚本能力要求比较高。测试方法一般选用黑盒测试和白盒测试相结合。
系统测试:针对整个产品的全面测试,既包含各模块的验证性测试(验证前两个阶段测试的正确性)和功能性(产品提交个用户的功能)测试,又包括对整个产品的健壮性、安全性、可维护性及各种性能参数的测试。系统测试测试软件《需求规格说明书》中提到的功能是否有遗漏,是否正确的实现。做系统测试要严格按照《需求规格说明书》,以它为标准。测试方法一般都使用黑盒测试法。
需要的知识:软件测试基础理论知识,如黑盒测试、白盒测试等;
考编程语言基础,如C/C++、java、python等;
自动化测试工具,如Selenium、Appium、Robotium等;
计算机基础知识,如数据库、Linux、计算机网络等;
测试框架,如JUnit等。
需要具备的能力:
业务分析能力,分析整体业务流程、分析被测业务数据、分析被测系统架构、分析被测业务模块、分析测试所需资源、分析测试完成目标;
缺陷洞察能力,一般缺陷的发现能力、隐性问题的发现能力、发现连带问题的能力、发现问题隐患的能力、尽早发现问题的能力、发现问题根源的能力;
团队协作能力,合理进行人员分工、协助组员解决问题、配合完成测试任务、配合开发重现缺陷、督促项目整体进度、出现问题勇于承担;
专业技术能力,掌握测试基础知识、掌握计算机知识、熟练运用测试工具;
逻辑思考能力,判断逻辑的正确性、对可行性逻辑分析、站在客观角度思考;
问题解决能力,技术上的问题、工作中的问题、沟通问题;
沟通表达能力,和技术人员、产品人员、上下级的沟通;
黑盒测试:黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。
白盒测试:
白盒测试需要遵循的原则有:1.保证一个模块中的所有独立路径至少被测试一次;2.所有逻辑值均需要测试真(true)和假(false);两种情况;3.检查程序的内部数据结构,保证其结构的有效性;4.在上下边界及可操作范围内运行所有循环。
常用白盒测试方法:
静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。
动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。
白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:
1.语句覆盖每条语句至少执行一次。
2.判定覆盖每个判定的每个分支至少执行一次。
3.条件覆盖每个判定的每个条件应取到各种可能的值。
4.判定/条件覆盖同时满足判定覆盖条件覆盖。
5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
6.路径覆盖使程序中每一条可能的路径至少执行一次。
手工测试缺点:1、重复的手工回归测试,代价昂贵、容易出错。
2、依赖于软件测试人员的能力。
手工测试优点:
1、测试人员具有经验和对错误的猜测能力。
2、测试人员具有审美能力和心理体验。
3、测试人员具有是非判断和逻辑推理能力。
自动化测试的优点:
3、可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。
4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。
5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。
6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。
7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。
自动化测试的缺点:
1、不能取代手工测试
2、手工测试比自动测试发现的缺陷更多
3、对测试质量的依赖性极大
4、测试自动化不能提高有效性
5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。
6、工具本身并无想像力
软件测试是正在快速发展,充满挑战的领域。尽管现在许多自动化测试软件的出现使得传统手工测试的方式被代替,但自动化测试工具的开发、安全测试、测试建模、精准测试、性能测试、可靠性测试等专项测试中仍然需要大量具有专业技能与专业素养的测试人员,并且随着云计算、物联网、大数据的发展,传统的测试技术可能不再适用,测试人员也因此面临着挑战,需要深入了解新场景并针对不同场景尝试新的测试方法,同时敏捷测试、Devops的出现也显示了软件测试的潜力。
测试人员的核心竞争力在于提早发现问题,并能够发现别人无法发现的问题。1、早发现问题:问题发现的越早,解决的成本越低。如果一个需求在还未实现的时候就能发现需求的漏洞,那么这种问题的价值是最高的。
2、发现别人无法发现的问题:所有人都能发现的问题,你发现了,那就证明你是可以被替代的。别人发现不了,而你可以发现,那么你就是无法被替代。
在V模型中,测试过程被加在开发过程的后半部分,单元测试所检测代码的开发是否符合详细设计的要求。集成测试所检测此前测试过的各组成部分是否能完好地结合到一起。系统测试所检测已集成在一起的产品是否符合系统规格说明书的要求。而验收测试则检测产品是否符合最终用户的需求。V模型的缺陷在于仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析、系统设计的验证,因此需求阶段的缺陷很可能一直到后期的验收测试才被发现,此时进行弥补将耗费大量人力物力资源。
相对于V模型,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。
可行,单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。事前可以保证质量,事后可以快速复现问题,并在修改代码后做回归自测。可行性考虑的是要用一些可行的方法做到关键的代码可测试,如通过边界条件、等价类划分、错误、因果,设计测试用例要覆盖常用的输入组合、边界条件和异常。
自动化测试的意义在于1、可以对程序的新版本自动执行回归测试
2、可以执行手工测试困难或者不可能实现的测试,如压力测试,并发测试,
执行自动化测试之前首先判断这个项目是不是和推广自动化测试,然后对项目做需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,评估
测试最规范的过程如下需求测试->概要设计测试->详细设计测试->单元测试->集成测试->系统测试->验收测试来自W模型
1、测试人员尽早介入,彻底理解清楚需求,这个是写好测试用例的基础2、如果以前有类似的需求,可以参考类似需求的测试用例,然后还需要看类似需求的bug情况
3、清楚输入、输出的各种可能性,以及各种输入的之间的关联关系,理解清楚需求的执行逻辑,通过等价类、边界值、判定表等方法找出大部分用例
5、根据自己的经验分析遗漏的测试场景
6、多总结类似功能点的测试点,才能够写出质量越来越高的测试用例
7、书写格式一定要清晰
答;搭建测试环境撰写测试用例
执行测试用例
写测试计划,测试报告
测试,并提交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:即映像系统功能或操作,主要功能存在严重缺陷,但不会映像到系统稳定性。常见的有:功能未实现,功能错误、系统刷新错误、数据通讯错误、轻微的数值计算错误、影响功能及界面的错误字或拼写错误。
4、minor/trivial:即易用性及建议性问题。
Priority
1、immediate:即马上解决,
2、urgent:急需解决
4、low:在系统发布前解决,或确认可以不用解决。
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。常见的边界值
1)对16-bit的整数而言32767和-32768是边界
2)屏幕上光标在最左上、最右下位置
3)报表的第一行和最后一行
4)数组元素的第一个和最后一个
5)循环的第0次、第1次和倒数第2次、最后一次
按照软件质量国家标准GB-T8566–2001G,软件质量可以用下列特征来评价:a.功能特征:与一组功能及其指定性质有关的一组属性,这里的功能是满足明确或隐含的需求的那些功能。
c.易用特征:由一组规定或潜在的用户为使用软件所需作的努力和所作的评价有关的一组属性。
d.效率特征:与在规定条件下软件的性能水平与所使用资源量之间关系有关的一组属性。
e.可维护特征:与进行指定的修改所需的努力有关的一组属性。
f.可移植特征:与软件从一个环境转移到另一个环境的能力有关的一组属性。
黑盒测试:1.等价类划分
等价类划分是将系统的输入域划分为若干部分,然后从每个部分选取少量代表性数据进行测试。等价类可以划分为有效等价类和无效等价类,设计测试用例的时候要考虑这两种等价类。
2.边界值分析法
边界值分析法是对等价类划分的一种补充,因为大多数错误都在输入输出的边界上。边界值分析就是假定大多数错误出现在输入条件的边界上,如果边界附件取值不会导致程序出错,那么其他取值出错的可能性也就很小。
边界值分析法是通过优先选择不同等价类间的边界值覆盖有效等价类和无效等价类来更有效的进行测试,因此该方法要和等价类划分法结合使用。
3.正交试验法
正交是从大量的试验点中挑选出适量的、有代表性的点。正交试验设计是研究多因素多水平的一种设计方法,他是一种基于正交表的高效率、快速、经济的试验设计方法。
4.状态迁移法
状态迁移法是对一个状态在给定的条件内能够产生需要的状态变化,有没有出现不可达的状态和非法的状态,状态迁移法是设计足够的用例达到对系统状态的覆盖、状态、条件组合、状态迁移路径的覆盖。
5.流程分析法
流程分析法主要针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,这是从白盒测试中路径覆盖分析法借鉴过来的一种很重要的方法。
6.输入域测试法
输入域测试法是针对输入会有各种各样的输入值的一个测试,他主要考虑极端测试、中间范围测试,特殊值测试。
7.输出域分析法
输出域分析法是对输出域进行等价类和边界值分析,确定是要覆盖的输出域样点,反推得到应该输入的输入值,从而构造出测试用例,他的目的是为了达到输出域的等价类和边界值覆盖。
8.判定表分析法
判定表是分析和表达多种输入条件下系统执行不同动作的工具,他可以把复杂的逻辑关系和多种条件组合的情况表达的即具体又明确;
9.因果图法
因果图是用于描述系统输入输出之间的因果关系、约束关系。因果图的绘制过程是对被测系统的外部特征的建模过程,根据输入输出间的因果图可以得到判定表,从而规划出测试用例。
10.错误猜测法
错误猜测法主要是针对系统对于错误操作时对于操作的处理法的猜测法,从而设计测试用例
11.异常分析法
异常分析法是针对系统有可能存在的异常操作,软硬件缺陷引起的故障进行分析,分析发生错误时系统对于错误的处理能力和恢复能力依此设计测试用例。
编程语言基础,如C/C++、java、python等;
内存测试中存在很多测试子项,清单如下:
●空闲状态下的应用内存消耗;
●中等规格状态下的应用内存消耗;
●满规格状态下的应用内存消耗;
●应用内存峰值;
●应用内存泄露;
●应用是否常驻内存;
●压力测试后的内存使用。
2、CPU:
使用Android提供的viewplaincopy在CODE上查看代码片派生到我的代码片
adbshelldumpsysCPUinfo|greppackagename>/address/CPU.txt来获取;
使用top命令viewplaincopy在CODE上查看代码片派生到我的代码片
adbshelltop|greppackagename>/address/CPU.txt来获取。
3、流量:
流量测试包括以下测试项:
应用首次启动流量提示;
应用后台连续运行2小时的流量值;
应用高负荷运行的流量峰值。
4、电量:
●测试手机安装目标APK前后待机功耗无明显差异;
●常见使用场景中能够正常进入待机,待机电流在正常范围内;
5、启动速度:
6、滑动速度、界面切换速度
7、与服务器交互的网络速度
功能测试自动化a)轻量接口自动化测试
jmeter,
b)APPUI层面的自动化
android:UIAutomatorViewer,AndroidJunit,Instrumentation,UIAutomator,
iOS:基于Instrument的iOSUI自动化,
性能测试
a)Web前端性能测试
网络抓包工具:Wireshark
网页文件大小
webpagetest
pagespeedinsight
chromeadb
b)APP端性能测试
Android内存占用分析:MAT
iOS内存问题分析:ARC模式
AndroidWebView性能分析:
iOSWebView性能分析
c)后台服务性能测试
负载,压力,耐久性
可拓展性,基准
工具:apacheAB,Jmeter,LoadRunner,
专项测试
a)兼容性测试
手工测试:操作系统,分辨率,rom,网络类型
云平台:testin,脚本编写,Android。
b)流量测试
Android自带的流量管理,
iOS自带的Network
tcpdump抓包
WiFi代理抓包:Fiddler
流量节省方法:压缩数据,json优于xml;WebP优于传统的JPG,PNG;控制访问的频次;只获取必要的数据;缓存;
c)电量测试
基于测试设备的方法,购买电量表进行测试。
GSamBatteryMonitoePro
iOS基于InstrumentEnergy工具
d)弱网络测试
手机自带的网络状况模拟工具
基于代理的弱网络的模拟:
工具:windows:NetworkDelaySimulator
Mac:NetworkLinkConditioner
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、PendingReset(待在测试的)
当bug被返还到测试组后,我们将bug的状态设置为PendingReset”
6、Reset(再测试)
测试组的负责人将bug指定给某位测试人员进行再测试,并将bug的状态设置为“Reset”
7、Closed(已关闭的)
如果测试人员经过再次测试之后确认bug已经被解决之后,就将bug的状态设置为“Closed”
8、Reopen(再次打开的)
如果经过再次测试发现bug(指bug本身而不是包括因修复而引发的新bug)仍然存在的话,测试人员将bug再次传递给开发组,并将bug的状态设置为“Reopen”
9、PendingReject(拒绝中)
如果测试人员传递到开发组的bug被开发人员认为是正常行为而不是bug时,这种情况下开发人员可以拒绝,并将bug的状态设置为“PendingReject”
10、Rejected(被拒绝的)
测试组的负责人接到上述bug的时候,如果他(她)发现这是产品说明书中定义的正常行为或者经过与开发人员的讨论之后认为这并不能算作bug的时候,开发组负责人就将这个bug的状态设置为“Rejected”
11、Postponed(延期)
不同类别的bug:
Bug类型
代码错误
界面优化
设计缺陷
安装部署
性能问题
标准规范
测试脚本
其他
(1)首先是排除接触故障,即确保你的网线是可以正常使用的。然后禁用网卡后再启用,排除偶然故障。打开网络和共享中心窗口,单击窗口左上侧“更改适配器设置”右击其中的“本地连接“或”无线网络连接”,单击快捷菜单中的“禁用”命令,即可禁用所选网络。接下来重启网络,只需右击后单击启用即可。(2)使用ipconfig查看计算机的上网参数
1、单击“开始|所有程序|附件|命令提示符“,打开命令提示符窗口
(3)使用ping命令测试网络的连通性,定位故障范围
在命令提示符窗口中输入”ping127.0.0.1“,数据显示本机分别发送和接受了4个数据包,丢包率为零,可以判断本机网络协议工作正常,如显示”请求超时“,则表明本机网卡的安装或TCP/IP协议有问题,接下来就应该检查网卡和TCP/IP协议,卸载后重装即可。
(4)ping本机IP
在确认127.0.0.1地址能被ping通的情况下,继续使用ping命令测试本机的IP地址能否被ping通,如不能,说明本机的网卡驱动程序不正确,或者网卡与网线之间连接有故障,也有可能是本地的路由表面收到了破坏,此时应检查本机网卡的状态是否为已连接,网络参数是否设置正确,如果正确可是不能ping通,就应该重新安装网卡驱动程序。丢失率为零,可以判断网卡安装配置没有问题,工作正常。
(5)ping网关
网关地址能被ping通的话,表明本机网络连接以及正常,如果命令不成功,可能是网关设备自身存在问题,也可能是本机上网参数设置有误,检查网络参数。
1、模块化测试框架模块化测试脚本框架(TESTMODulARITYFRAMEWORK)需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。在五种框架中,模块化框架是最容易掌握和使用的。在一个组件上方建立一个抽象层使其在余下的应用中隐藏起来,这是众所周知的编程技巧。这样应用同组件中的修改隔离开来,提供了程序设计的模块化特性。模块化测试脚本框架使用这一抽象或者封装的原理来提高自动测试组合的可维护性和可升级性。
2、测试库框架
测试库框架(TestLibraryArchitecture)与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。
3、关键字驱动或表驱动的测试框架
对于一个独立于应用的自动化框架,关键字驱动(KEYWORDDRIVEN)I9LJJ试和表驱动(TABLEDRIVEN)测试是可以互换的术语。这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似。在一个关键字驱动测试中,把待测应用程序的功能和每个测试的执行步骤一起写到一个表中。这个测试框架可以通过很少的代码来产生大量的测试用例。同样的代码在用数据表来产生各个测试用例的同时被复用。
4、数据驱动测试框架
数据驱动(DATADRIVEN),LJ试是一个框架。在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。然而,数据驱动测试不同于表驱动测试,尽管导航数据并不包含在表结构中。在数据驱动测试中,数据文件中只包含测试数据。这个框架意图减少需要执行所有测试用例所需要的总的测试脚本数。数据驱动需要很少的代码来产生大量的测试用例,这与表驱动极其类似。
5、混合测试自动化(HybridTestAutomation)框架
系统架构方面:web项目,一般都是b/s架构,基于浏览器的
app项目,则是c/s的,必须要有客户端,用户需要安装客户端。
web测试只要更新了服务器端,客户端就会同步会更新。App项目则需要客户端和服务器都更新。
性能方面:
而app则还需要关心流量、电量、CPU、GPU、Memory这些。
它们服务端的性能没区别,都是一台服务器。
兼容方面:
web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容
app测试则要看分辨率,屏幕尺寸,还要看设备系统。
web测试是基于浏览器的所以不必考虑安装卸载。
而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件。
此外APP还有一些专项测试:如网络、适配性。
等价类划分,边界值分析,错误推测,因果图法,逻辑覆盖法,程序插桩技术,基本路径法,符号测试,错误驱动测试
黑盒测试方法有等价类划分,边界值分析,错误推测,因果图法白盒测试方法有逻辑覆盖法,程序插桩技术,基本路径法,符号测试,错误驱动测试
测试是软件开发中不可或缺的一环,测试通过经济,高效的方法,捕捉软件中的错误,从而达到保重软件内在质量的目的。测试分为功能测试和非功能测试,非功能测试又可以分为性能测试、压力测试、容量测试、健壮性测试、安全性测试、可靠性测试、恢复性测试、备份测试、协议测试、兼容性测试、可用性测试、配置测试、GUI测试。
测试方法用过等价划分法、边值分析法、错误推测法、因果图法。
协议测试包括四种类型的测试1、一致性测试:检测协议实现本身与协议规范的符合程度
2、互操作性测试:基于某一协议检测不同协议实现间互操作互通信的能力
4、健壮性测试:检测协议是现在各种恶劣环境下运行的能力,比如注入干扰报文,通信故障,信道被切断
1)软件未实现产品说明书要求的功能
2)软件出现了产品说明书指明不应该出现的错误
3)软件实现了产品说明书未提到的功能
4)软件未实现产品说明书虽未明确提及但应该实现的目标
5)软件难以理解、不易使用、运行缓慢或者从测试员的角度看最终用户会认为不好。
软件测试:为了发现软件产品中的各种缺陷,而对软件产品进行验证和确认的活动过程,此过程贯穿整个软件开发生命周期。简单的说,软件测试是以发现错误为目的而执行的一个程序或系统的过程。
1.验证软件需求和功能是否得到完整实现2.验证软件是否可以发布3.尽可能多的发现软件中的bug4.尽可能早的发现软件中的bug5.对软件质量做出合理评估6.预防下个版本可能出现的问题7.预防用户使用可能出现的问题8.发现开发过程中的问题和风险
1、所有测试的标准都是建立在用户需求之上。2、合理控制测试深度与广度,完全测试不可能,测试的投入与产出要均衡。3、80-20原则,软件中80%的bug可以在分析、设计与评审阶段就能被发现与修正,16%的缺陷在系统的软件测试中发现,最后剩下的4%是用户长期使用的过程中才能暴露出来。4、尽可能早的开展测试,越早发现错误,修改的代价越小。5、发现错误较多的程序段,应进行更深入的测试。6、软件项目一启动,软件测试也就是开始,而不是等程序写完,才开始进行测试。7、软件开发人员即程序员应当避免测试自己的程序8、严格执行测试计划,排除测试的随意性,以避免发生疏漏或者重复无效的工作
仅仅从功能测试的层面上来讲的话,在流程和功能测试上是没有区别的。那么区别在哪里呢?由于载体不一样,所以系统测试和一些细节可能会不一样。那么我们就要先来了解,web和app的区别。
web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端。那么在系统测试测试的时候就会产生区别了。
首先从系统架构来看的话,web测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是app端是不能够保证完全一致的,除非用户更新客户端。如果是app下修改了服务端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。
相比较web测试,app更是多了一些专项测试:
健壮性测试:
一些异常场景的考虑以及弱网络测试。这里的异常场景就是中断,来电,短信,关机,重启等。
1)沟通能力与表达能力2)好奇心与怀疑精神3)责任感与抗压能力4)自信心,坚持自己的观点5)耐心与细心6)逆向思维的能力7)善于学习与总结8)团队协作精神9)文档编写能力
1)精通业务知识2)具备软件编程能力,比如C,C++,JAVA等。3)可以用脚本语言编写小测试工具4)主流操作系统应用与网络知识,可以搭建测试环境5)熟练掌握各种数据库知识6)精通软件测试理论与方法7)掌握常用测试与开发工具的使用8)优秀的文档编写能力
1)按照是否执行被测试软件来分:
静态测试:是指不运行软件,测试包括代码检查、静态结构分析、代码质量度量等,主要对软件需求说明书、设计说明书、软件源代码进行检查与分析。
动态测试:指通过运行被测程序,检查运行结果与预期结果的差异,分析差异原因,并分析软件运行效率、健壮性等性能。动态测试是目前公司主要的测试方式
2)按照测试技术分为黑盒测试和白盒测试:
黑盒测试:黑盒测试又叫功能测试或数据驱动测试,在完全不考虑程序内部结构和内部特性的情况下,通过软件的外部表现来发现其缺陷和错误。
白盒测试:白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构进行测试程序,通过测试来检测产品内部逻辑是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
3)按照测试手段来分,可以分为手工测试和自动化测试
4)按照过程阶段来分,可以分为单元测试、集成测试、系统测试和验收测试
单元测试:通过模块(类/方法/函数)测试,使代码达到设计要求主要目的是针对编码过程中可能存在的各种错误,例如用户输入验证过程中的边界值的错误。
集成测试:将经过单元测试的模块逐步组装成完整的程序。主要目的是检查各单元与其它程序部分之间的接口是否存在问题,各模块功能之间是否有影响。
系统测试:是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起进行测试。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,进行改正。
验收测试:验收测试是在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的最后一次软件测试活动,也称为交付测试。通常由业务专家或用户进行,以确认产品能真正符合用户业务上的需要。
软件开发流程(软件生命周期):
计划-》需求分析-》设计-》程序编写-》测试-》运行/维护
软件测试流程:
测试计划-》需求分析-》测试用例-》测试用例执行-》提交bug-》回归测试
白盒测试方法有语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
测试分为白盒测试和黑盒测试,回答时,要注意分开说。白盒测试用例设计有如下方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。依据就是代码结构。
黑盒测试用例设计方法:基于用户需求的测试、等价类划分方法、边界值分析方法、错误推测方法、因果图方法、判定表驱动分析方法、正交实验法、场景法。依据是用户需求规格说明书,详细设计说明书。
一个好的测试工程师,不仅要基础扎实,对自身的性格、责任心都有非常高的要求。具体如下:(1)掌握基本的测试基础理论(2)本着找出软件存在的问题的态度进行测试,即客观吧,不要以挑刺形象出现(3)可熟练阅读需求规格说明书等文档(4)以用户的观点看待问题(5)有着强烈的质量意识(6)细心和责任心(7)良好的有效的沟通方式(与开发人员及客户)(8)具有以往的测试经验(9)能够及时准确地判断出高危险区在何处.
大致说四点即可,当然说全更好。集成测试有十种策略:(1)大爆炸集成(2)自顶向下集成(3)自底向上集成(4)三明治集成(5)分层集成(6)基干集成(7)基于功能的集成(8)基于消息的集成(9)基于风险的集成(10)基于进度的集成.
兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。
兼容的类型,如果细分的话,有平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容。
兼容测试的重点是,对兼容环境的分析。通常,是在运行软件的环境不是很确定的情况下,才需要做兼容。根据软件运行的需要,或者根据需求文档,一般都能够得出用户会在什么环境下使用该软件,把这些环境整理成表单,就得出做兼容测试的兼容环境了。
1、检查系统是否有中毒的特征;
2、检查软件/硬件的配置是否符合软件的推荐标准;
3、确认当前的系统是否是独立,即没有对外提供什么消耗CPU资源的服务;
4、如果是C/S或者B/S结构的软件,需要检查是不是因为与服务器的连接有问题,或者访问有问题造成的;
5、在系统没有任何负载的情况下,查看性能监视器,确认应用程序对CPU/内存的访问情况。
黑盒/白盒,静态/动态,手工/自动,冒烟测试,回归测试,公测(Beta测试的策略)
用最少的实验覆盖最多的操作,测试用例设计很少,效率高,但是很复杂;
对于基本的验证功能,以及二次集成引起的缺陷,一般都能找出来;但是更深的缺陷,更复杂的缺陷,还是无能为力的;
具体的环境下,正交表一般都很难做的。大多数,只在系统测试的时候使用此方法。
在Bugzilla中,Bug报告状态分为以下几种状态,
待确认的unconfirmed新提交的new已分配的assigned问题未解决的reopened待返测的resolved待归档的verified已归档的closed12345678910111213Bug处理意见(Resolution)
界面不稳定;
根据需要配置它的不同的部分,过程很烦琐。
流程控制上,安全性不好界定,很容易对他人的Bug进行误操作;
没有综合的评分指标,不好确认修复的优先级别。
需求分析+需求变更的维护工作;
根据需求得出测试需求;
设计测试方案,评审测试方案;
方案评审通过后,设计测试用例,再对测试用例进行评审;
1、单元接口。
2、局部数据结构。
3、独立路径。
4、出错处理。
5、边界条件
在单元测试时,由于单元本身不是一个独立的程序,一个完整的可运行的软件系统并没有构成,所以需要设置一些辅助测试单元,辅助测试单元有两种,一种是驱动单元,另外一种是桩单元。
1、驱动单元(Driver):用来模拟被测单元的上层单元,相当于被测函数的主函数,如main函数。所以驱动单元主要完成以下4个步骤:
(1)接受测试数据,包含测试用例输入和预期输出;
(2)把测试用例输入传送给被测单元,驱动被测单元测试;
(3)将被测单元的实际输出和预期输出进行比较,得到测试结果;
(4)将测试结果输出到指定位置。
2、桩单元(Stub):用来代替被测单元工作过程中调用的子单元。
桩单元模拟的单元可能是自定义函数:这些自定义函数可能尚未编写完成,为了测试被测单元,需要构造桩单元来代替它们,可能存在错误,会影响测试结果,所以需要构造正确无误的桩单元来达到隔离的目的。
驱动单元和桩单元都是额外的开销,虽然在单元测试的时候必须写,但是并不需要作为最终的产品提供给客户。
单元测试策略
一般的单元执行策略有三种:孤立的单元测试策略(IsolationUnitTesting),自顶向下的单元测试策略(TopDownUnitTesting)和自底向上的单元测试策略(BottomUpUnitTesting)。需要注意的是:在集成测试中也有自顶向下和自底向上的测试策略,但是测试对象不同。
1、孤立的单元测试策略(IsolationUnitTesting)
方法:不考虑每个模块与其它模块之间的关系,为每个模块设计桩模块和驱动模块,每个模块进行独立的单元测试。
优点:这个方法比较简单,最容易操作,可以达到很高的结构覆盖率,可以并行开展,该方法是纯粹的单元测试。
缺点:桩函数和驱动函数工作量很大,效率低。
2、自顶向下的单元测试策略(TopDownUnitTesting)
方法:先对最顶层的单元进行测试,把顶层所调用的单元做成桩模块,其次对第二层进行测试,使用上面已经测试过的单元做驱动模块,以此类推,直到测试完所有模块。
优点:可以节省驱动函数的开发工作,效率高。
缺点:随着被测单元一个一个被加入,测试过程将变得越来越复杂,并且开发和维护的成本将增加。
3、自底向上的单元测试策略(BottomUpUnitTesting)
方法:先对最底层的模块进行单元测试,将模拟调用该模块的模块设置为驱动模块,然后再对上面一层做单元测试,用下面已经测试好的模块做桩模块,以此类推,直到测试完所有模块。
优点:可以节省桩函数的开发工作量,测试效率较高。
缺点:不是纯粹的单元测试,底层函数的测试质量对上层函数的测试将产生很大影响。
脚本生成器;
场景控制器;
结果分析器。
1、测试设计
2、创建虚拟用户脚本
3、创建运行场景
4、运行场景
5、监视场景
6、分析测试的结果
以上,最好是结合一个案例,根据以上流程来介绍。
LoadRunner中提供IP伪装,集合点,配合虚拟用户的设计,以及在多台电脑上设置,可以比较好的模拟真实的并发。
集合点,即是多个用户在某个时刻,某个特定的环境下同时进行虚拟用户的操作的。集合点失败,则集合点的操作就会取消,测试就不能进行。
需求管理
n定义测试范围
n定义需求树
n描述需求树的功能点
测试计划
n定义测试目标和测试策略。
n分解应用程序,建立测试计划树。
n确定每个功能点的测试方法。
n将每个功能点连接到需求上,使测试计划覆盖全部的测试需求。
n描述手工测试的测试步骤
n指明需要进行自动测试的功能点
测试执行
n定义测试集合。
n为每个测试人员制定测试任务和测试日程安排。
n运行自动测试。
缺陷跟踪
n记录缺陷
n查看新增缺陷,并确定哪些是需要修正的
n回归测试
n分析缺陷统计图表,分析应用程序的开发质量。
CompatibilityTesting(兼容性测试),也称“Configurationtesting(配置测试)”,测试软件是否和系统的其它与之交互的元素之间兼容,如:浏览器、操作系统、硬件等。验证测试对象在不同的软件和硬件配置中的运行情况。
Functionaltesting(功能测试),也称为behavioraltesting(行为测试),根据产品特征、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。本地化软件的功能测试,用于验证应用程序或网站对目标用户能正确工作。使用适当的平台、浏览器和测试脚本,以保证目标用户的体验将足够好,就像应用程序是专门为该市场开发的一样。Performancetesting(性能测试),评价一个产品或组件与性能需求是否符合的测试。包括负载测试、强度测试、数据库容量测试、基准测试等类型。
Betatesting(β测试),测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场Alphatesting(α测试),是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试
在正式的会议上将软件项目的成果(包括各阶段的文档、产生的代码等)提交给用户、客户或有关部门人员对软件产品进行评审和批准。其目的是找出可能影响软件产品质量、开发过程、维护工作的适用性和环境方面的设计缺陷,并采取补救措施,以及找出在性能、安全性和经济方面的可能的改进。
人员:用户、客户或有关部门开发人员,测试人员,需求分析师都可以,就看处于评审那个阶段
阶段评审对项目各阶段评审:对阶段成果和工作
项目评审对项目总体评审:对工作和产品
参考答案:
扇入:被调次数,扇出:调其它模块数目
桩模块:被测模块调用模块
驱动模块:调用被测模块
做好测试计划工作的关键:目的,管理,规范
1、明确测试的目标,增强测试计划的实用性编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
2.坚持“5W”规则,明确内容与过程“5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
3.采用评审和更新机制,保证测试计划满足实际需求测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
4、分别创建测试计划与测试详细规格、测试用例应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。
提交->确认->分配->修复->验证->关闭
(1)用户认证机制:如数据证书、智能卡、双重认证、安全电子交易协议
(2)加密机制
(3)安全防护策略:如安全日志、入侵检测、隔离防护、漏洞扫描
(4)数据备份与恢复手段:存储设备、存储优化、存储保护、存储管理
(5)防病毒系统
软件测试配置管理包括4个最基本的活动:
配置项标识
配置项控制
配置项状态报告
配置审计
软件配置管理通常借助工具来辅助,主要有MSSourceSafe、RationalClearCase等1你觉得软件测试通过的标准应该是什么样的?
缺陷密度值达到客户的要求1引入测试管理的含义?风险分析,进度控制、角色分配、质量控制
参考答案:测试计划、测试设计与开发、测试实施、测试评审与测试结论
模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试
(1)在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
(2)一个模块的功能是否会对另一个模块的功能产生不利的影响;
(3)各个子功能组合起来,能否达到预期要求的父功能;
(4)全局数据结构是否有问题;
(5)单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。
(1)集成测试的主要依据概要设计说明书,系统测试的主要依据是需求设计说明书;
用户手册
安装和设置指导
联机帮助
指南、向导
样例、示例和模板
最终用户许可协议
开发文档
软件需求说明书
数据库设计说明书概要设计说明书详细设计说明书可行性研究报告1234567管理文档
项目开发计划测试计划测试报告开发进度月报开发总结报告123456789简述软件系统中用户文档的测试要点?(1)读者群。文档面向的读者定位要明确。对于初级用户、中级用户以及高级用户应该有不同的定位
(2)术语。文档中用到的术语要适用与定位的读者群,用法一致,标准定义与业界规范相吻合。
(4)完整性。对照软件界面检查是否有重要的分支没有描述到,甚至是否有整个大模块没有描述到。
(5)一致性。按照文档描述的操作执行后,检查软件返回的结果是否与文档描述的相同。
(6)易用性。对关键步骤以粗体或背景色给用户以提示,合理的页面布局、适量的图表都可以给用户更高的易用性。需要注意的是文档要有助于用户排除错误。不但描述正确操作,也要描述错误处理办法。文档对于用户看到的错误信息应当有更详细的文档解释。
(7)图表与界面截图。检查所有图表与界面截图是否与发行版本相同。
(8)样例与示例。像用户一样载入和使用样例。如果是一段程序,就输入数据并执行它。以每一个模块制作文件,确认它们的正确性。
(9)语言。不出现错别字,不要出现有二义性的说法。特别要注意的是屏幕截图或绘制图形中的文字。
(10)印刷与包装。检查印刷质量;手册厚度与开本是否合适;包装盒的大小是否合适;有没有零碎易丢失的小部件等等。
单元测试大多数由开发人员来完成,测试人员技术背景较好或者开发系统软件时可能会安排测试人员进行单元测试,大多数进行的单元测试都是开发人员调试程序或者开发组系统联合调试的过程。讨论这个问题主要是扩充一下读者的视野。
单元测试一般包括五个方面的测试:
(1)模块接口测试:模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。模块接口测试也是集成测试的重点,这里进行的测试主要是为后面打好基础。测试接口正确与否应该考虑下列因素:
-输入的实际参数与形式参数的个数是否相同;
-输入的实际参数与形式参数的属性是否匹配;
-输入的实际参数与形式参数的量纲是否一致;
-调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;
-调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;
-调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;
-调用预定义函数时所用参数的个数、属性和次序是否正确;
-是否存在与当前入口点无关的参数引用;
-是否修改了只读型参数;
-对全程变量的定义各模块是否一致;
-是否把某些约束作为参数传递。
如果模块功能包括外部输入输出,还应该考虑下列因素:
-文件属性是否正确;
-OPEN/CLOSE语句是否正确;
-格式说明与输入输出语句是否匹配;
-缓冲区大小与记录长度是否匹配;
-文件使用前是否已经打开;
-是否处理了文件尾;
-是否处理了输入/输出错误;
-输出信息中是否有文字性错误。
-局部数据结构测试;
-边界条件测试;
-模块中所有独立执行通路测试;
(2)局部数据结构测试:检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确,局部功能是整个功能运行的基础。重点是一些函数是否正确执行,内部是否运行正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:
-不合适或不相容的类型说明;
-变量无初值;
-变量初始化或省缺值有错;
-不正确的变量名(拼错或不正确地截断);
-出现上溢、下溢和地址异常。
(3)边界条件测试:边界条件测试是单元测试中最重要的一项任务。众所周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。边界条件测试是一项基础测试,也是后面系统测试中的功能测试的重点,边界测试执行的较好,可以大大提高程序健壮性。
(4)模块中所有独立路径测试:在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。测试目的主要是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。具体做法就是程序员逐条调试语句。常见的错误包括:
-误解或用错了算符优先级;
-混合类型运算;
-变量初值错;
-精度不够;
-表达式符号错。
-不同数据类型的对象之间进行比较;
-错误地使用逻辑运算符或优先级;
-因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;
-比较运算或变量出错;
-循环终止条件或不可能出现;
-迭代发散时不能退出;
-错误地修改了循环变量。
模块的各条错误处理通路测试:程序在遇到异常情况时不应该退出,好的程序应能预见各种出错条件,并预设各种出错处理通路。如果用户不按照正常操作,程序就退出或者停止工作,实际上也是一种缺陷,因此单元测试要测试各种错误处理路径。一般这种测试着重检查下列问题:
-输出的出错信息难以理解;
-记录的错误与实际遇到的错误不相符;
-在程序自定义的出错处理段运行之前,系统已介入;
-异常处理不当;
-错误陈述中未能提供足够的定位出错信息。
强度测试是为了确定系统在最差工作环境的工作能力,也可能是用于验证在标准工作压力下的各种资源的最下限指标。
它和压力测试的目标是不同的,压力测试是在标准工作环境下,不断增加系统负荷,最终测试出该系统能力达到的最大负荷(稳定和峰值),而强度测试则是在非标准工作环境下,甚至不断人为降低系统工作环境所需要的资源,如网络带宽,系统内存,数据锁等等,以测试系统在资源不足的情况下的工作状态,通过强度测试,可以确定本系统正常工作的最差环境.
强度测试需要对系统的结构熟悉,针对系统的特征设计强度测试的方法
性能测试是一个较大的范围,实际上性能测试本身包含了性能、强度、压力、负载等多方面的测试内容。
压力测试是对服务器的稳定性以及负载能力等方面的测试,是一种很平常的测试。增大访问系统的用户数量、或者几个用户进行大数据量操作都是压力测试。而负载测试是压力相对较大的测试,主要是测试系统在一种或者集中极限条件下的相应能力,是性能测试的重要部分。100个用户对系统进行连续半个小时的访问可以看作压力测试,那么连续访问8个小时就可以认为负载测试,1000个用户连续访问系统1个小时也可以看作是负载测试。
瓶颈主要是指整个软硬件构成的软件系统某一方面或者几个方面能力不能满足用户的特定业务要求,“特定”是指瓶颈会在某些条件下会出现,因为毕竟大多数系统在投入前。
严格的从技术角度讲,所有的系统都会有瓶颈,因为大多数系统的资源配置不是协调的,例如CPU使用率刚好达到100%时,内存也正好耗尽的系统不是很多见。因此我们讨论系统瓶颈要从应用的角度讨论:关键是看系统能否满足用户需求。在用户极限使用系统的情况下,系统的响应仍然正常,我们可以认为改系统没有瓶颈或者瓶颈不会影响用户工作。
因此我们测试系统瓶颈主要是实现下面两个目的:
-发现“表面”的瓶颈。主要是模拟用户的操作,找出用户极限使用系统时的瓶颈,然后解决瓶颈,这是性能测试的基本目标。
-发现潜在的瓶颈并解决,保证系统的长期稳定性。主要是考虑用户在将来扩展系统或者业务发生变化时,系统能够适应变化。满足用户目前需求的系统不是最好的,我们设计系统的目标是在保证系统整个软件生命周期能够不断适应用户的变化,或者通过简单扩展系统就可以适应新的变化。
在国内软件开发管理中,文档管理几乎是最弱的一项,因而在测试工作中特别容易忽略文档测试也就不足为奇了。要想给用户提供完整的产品,文档测试是必不可少的。文档测试一般注重下面几个方面:
文档的完整性:主要是测试文档内容的全面性与完整性,从总体上把握文档的质量。例如用户手册应该包括软件的所有功能模块。
描述与软件实际情况的一致性:主要测试软件文档与软件实际的一致程度。例如用户手册基本完整后,我们还要注意用户手册与实际功能描述是否一致。因为文档往往跟不上软件版本的更新速度。
易理解性:主要是检查文档对关键、重要的操作有无图文说明,文字、图表是否易于理解。对于关键、重要的操作仅仅只有文字说明肯定是不够的,应该附有图表使说明更为直观和明了。
文档中提供操作的实例:这项检查内容主要针对用户手册。对主要功能和关键操作提供的应用实例是否丰富,提供的实例描述是否详细。只有简单的图文说明,而无实例的用户手册看起来就像是软件界面的简单拷贝,对于用户来说,实际上没有什么帮助。
印刷与包装质量:主要是检查软件文档的商品化程度。有些用户手册是简单打印、装订而成,过于粗糙,不易于用户保存。优秀的文档例如用户手册和技术白皮书,应提供商品化包装,并且印刷精美。
配置测试的核心内容就是使用各种硬件来测试软件的运行情况,一般包括:
(1)软件在不同的主机上的运行情况,例如Dell和Apple;
(2)软件在不同的组件上的运行情况,例如开发的拨号程序要测试在不同厂商生产的Modem上的运行情况;
(3)不同的外设;
(4)不同的接口;
(5)不同的可选项,例如不同的内存大小;
兼容性测试的核心内容:
(1)测试软件是否能在不同的操作系统平台上兼容;
(2)测试软件是否能在同一操作系统平台的不同版本上兼容;
(3)软件本身能否向前或者向后兼容;
(5)数据兼容性测试,主要是指数据能否共享;
配置和兼容性测试通称对开发系统类软件比较重要,例如驱动程序、操作系统、数据库管理系统等。具体进行时仍然按照测试用例来执行。
随着软件文档系统日益庞大,文档测试已经成为软件测试的重要内容。文档测试对象主要如下:
-包装文字和图形;
-最终用户许可协议;
-安装和设置向导;
-用户手册;
-联机帮助;
-样例、示范例子和模板;
-……
文档测试的目的是提高易用性和可靠性,降低支持费用,因为用户通过文档就可以自己解决问题。因文档测试的检查内容主要如下:
-读者对象——主要是文档的内容是否能让该级别的读者理解;
-术语——主要是检查术语是否适合读者;
-内容和主题——检查主题是否合适、是否丢失、格式是否规范等;
-图标和屏幕抓图——检查图表的准确度和精确度;
-样例和示例——是否与软件功能一致;
-拼写和语法;
文档测试是相当重要的一项测试工作,不但要给予充分的重视,更要要认真的完成,象做功能测试一样来对待文档测试。
这个问题是国内测试工程师经常遇到的问题,根源就是国内软件开发文档管理不规范,对变更的管理方法就更不合理了。实际上没有任何文档的时候,测试人员是能够进行黑盒测试的,这种测试方式我们可以称之为探索测试,具体做法就是测试工程师根据自己的专业技能、领域知识等不断的深入了解测试对象、理解软件功能,进而发现缺陷。
在这种做法基本上把软件当成了产品说明书,测试过程中要和开发人员不断的进行交流。尤其在作项目的时候,进度压力比较大,可以作为加急测试方案。最大的风险是不知道有些特性是否被遗漏。
##3测试中的“杀虫剂怪事”是指什么?“杀虫剂怪事”一词由BorisBeizer在其编著的《软件测试技术》第二版中提出。用于描述测试人员对同一测试对象进行的测试次数越多,发现的缺陷就会越来越少的现象。就像老用一种农药,害虫就会有免疫力,农药发挥不了效力。这种现象的根本原因就是测试人员对测试软件过于熟悉,形成思维定势。
为了克服这种现象,测试人员需要不断编写新的测试程序或者测试用例,对程序的不同部分进行测试,以发现更多的缺陷。也可以引用新人来测试软件,刚刚进来的新手往往能发现一些意想不到的问题。
在进行配置测试时,测试工程师仍然会发现一些普通的缺陷,也就是与配置环境无关的缺陷。因此判断新发现的问题,需要在不同的配置中重新执行发现软件缺陷的步骤,如果软件缺陷不出现了,就可能是配置缺陷;如果在所有的配置中都出现,就可能是普通缺陷。
需要注意的是,配置问题可以在一大类配置中出现。例如,拨号程序可能在所有的外置Modem中都存在问题,而内置的Modem不会有任何问题。
软件测试初学者可能认为拿到软件后需要进行完全测试,找到全部的软件缺陷,使软件“零缺陷”发布。实际上完全测试是不可能的。主要有以下一个原因:
-完全测试通常意味着较多资源投入,这在现实中往往是行不通的;
-输入量太大,不能一一进行测试;
-输出结果太多,只能分类进行验证;
-软件实现途径太多;
-软件产品说明书没有客观标准,从不同的角度看,软件缺陷的标准不同;
因此测试的程度要根据实际情况确定。
我们没有对软件进行完全测试,实际就是选择了风险,因为缺陷极有可能存在没有进行测试的部分。举个例子,程序员为了方便,在调试程序时会弹出一些提示信息框,而这些提示只在某种条件下会弹出,碰巧程序发布前这些代码中的一些没有被注释掉。在测试时测试工程师又没有对其进行测试。如果客户碰到它,这将是代价昂贵的缺陷,因为交付后才被客户发现。
因此,我们要尽可能的选择最合适的测试量,把风险降低到最小。
这是一个比较常见的现象。测试工程师在没有找到缺陷前会绞尽脑汁的思考,但是找到一个后,会接二连三的发现很多缺陷,颇有个人成就感。其中的原因主要如下:
-代码复用、拷贝代码导致程序员容易犯相同的错误。类的继承导致所有的子类会包含基类的错误,反复拷贝同一代码意味可能也复制了缺陷。
-程序员比较劳累是可以导致某些连续编写的功能缺陷较多。程序员加班是一种司空见惯的现象,因此体力不只时容易编写一些缺陷较多的程序。而这些连续潜伏缺陷恰恰时测试工程师大显身手的地方。
“缺陷一个连着一个”不是一个客观规律,只是一个常见的现象。如果软件编写的比较好,这种现象就不常见了。测试人员只要严肃认真的测试程序就可以了。
从技术上讲,所有的软件缺陷都是能够修复的,但是没有必要修复所有的软件缺陷。测试人员要做的是能够正确判断什么时候不能追求软件的完美。对于整个项目团队,要做的是对每一个软件缺陷进行取舍,根据风险决定那些缺陷要修复。发生这种现象的主要原因如下:
-有些缺陷只是特殊情况下出现,这种缺陷处于商业利益考虑,可以在以后升级中进行修复。
最后要说的是,缺陷是否修改要由软件测试人员、项目经理、程序员共同讨论来决定是否修复,不同角色的人员从不同的角度来思考,以做出正确的决定。
软件测试人员的职责是尽可能早的找出软件缺陷,确保得以修复。而质量保证人员(QA)主要职责是创建或者制定标准和方法,提高促进软件开发能力和减少软件缺陷。测试人员的主要工作是测试,质量保证人员日常工作重要内容是检查与评审,测试工作也是测试保证人员的工作对象。
软件测试和质量是相辅相成的关系,都是为了提高软件质量而工作。
在IT行业里跳槽已经是一种司空见惯的现象,而且跳槽无论给公司还是给个人都会带来一定的损失。测试队伍也无疑会面临跳槽的威胁,作为测试经理管理者,只有从日常工作中开始做起,最能最大限度的减少损失。建议我们从以下两个方面做起:
-加强部门内员工之间的互相学习,互相学习是建立学习型组织的基本要求,是知识互相转移的过程。在此基础上,可以把个人拥有的技术以知识的形式沉积下来,也就完成了隐性知识到显性知识的转化。
-通常情况下,企业能为员工提供足够大的发展空间时,如果不是待遇特别低,员工都不会主动离开企业。因此我们要想留住员工,管理者就应该把员工的个人成长和企业的发展联系起来,为员工设定合理发展规划并付诸实现。不过这项要求做起来比较,要有比较好的企业文化为依托.
1、基本功能测试:文件的复制粘贴功能,首先关键字“文件”,文件有不同的分类(图片、视频、音频、文档等),每个分类又有不同的类型(文档类型:txtdocexeclpdf等),每个文件又有不同的大小,而且文件还有很多权限,是不是隐藏,是不是只是管理员可执行。选择不同分类的不同类型,不同大小的文件做测试资源。比如:文档类型里面txt文件可以分为1.KB的txt文件、1MB的txt文件、1GB的txt文件。。。。下一个关键字复制粘贴复制有多种方式右击选择、Ctrl+C、拖动复制,对应粘贴也有各种方式。然后从哪复制,粘贴到哪,比如可以有本机硬盘、移动硬盘、优盘、内存卡、软盘、光盘、连接手机存储,复制到网络地址等等。复制粘贴后文件是不是可用,文件权限是不是有变化。复制过去容量不够怎么处理?复制过后有重名文件怎么处理?复制过程中取消、关机、拔优盘怎么处理?复制过程能不能执行文件?
2.性能测试:复制粘贴功能性能怎么样?复制文件的速度可不可以接受?同时复制多个文件是不是可以完成复制文件过程中占用CPU资源大不大,耗电量大不大?
3.兼容性测试WindowsXP,Windows7,Windows8,Windows8.1,Windows10等各种windos版本是不是都支持这个功能。
4.交互测试;复制粘贴文件时,使用windows存储的其他功能是否有影响?比如播放本地的音频、视频、等同时复制文件是不是有影响。一边复制,一边粘贴是不是有影响。
粘贴的稳定性:粘贴完了大小会不会变化,内容格式会不会变化,粘贴不上,误操作以后还能不能找到复制的内容等
粘贴的安全性:粘贴的内容粘贴好了以后会不会存在别处泄露等
5.界面测试:复制粘贴时进度条的显示界面是否与系统的设计风格一致?显示界面是否有文字性错误?显示界面的布是否合理?界面上的按钮是否可用(如:是否可以选择中止?是否可用最小化?)
6.本地化测试:不同语言环境下的显示正常
7.辅助性测试:高对比度下能否显示正常
1、复制粘贴方法
快捷键测试:测试Ctrl+C,是否正确执行复制、Ctrl+v是否支持粘贴功能
右键测试:查看复制粘贴功能是否正确执行;
在cmd命令行中使用复制粘贴命令;
2、文件大小测试
源文件为空,0字节;
源文件正常大小;
源文件为超大文件:**G/等;
3、文件格式
测试各种文件格式下是否正常复制粘贴:如:图片、声音、视频、压缩文件、办公文件:word\excel\ppt等、二进制文件;
测试共享文件、隐藏文件
4、复制和粘贴文件路径
在系统不同文件路径下复制粘贴,
测试相对路径和绝对路径下文件复制粘贴;
测试文件夹下和另一个不同文件夹复制粘贴;
测试不同C\D\E盘之间;
测试复制粘贴至:移动硬盘、U盘、读卡器以及其它外部存储设备;
5、异常测试
测试被损坏文件、不完整文件名称、禁止复制和粘贴的文件、超出规定大小文件等;
同名称文件测试是否提醒替换或覆盖;
6、兼容性
7、性能测试:
一次支持不同格式的文件同时操作;
支持大量文件同时复制粘贴;
一、界面测试点:
1、界面的设计风格是否与UI的设计风格统一;
2、界面中的文字简洁易懂;
3、界面中没有错别字;
二、用户名与密码在输入时,要考虑:
1、正确的用户名与正确的密码;
2、正确的用户名与错误的密码;
3、错误的用户名与正确的密码;
4、错误的用户名与错误的密码;
5、空的用户名和空的密码;
6、正确的用户名和空的密码;
7、空的用户名和正确的密码;
8、用户名的前/中/后含有空格;
9、密码的前/中/后含有空格;
10、用户名与密码使用的字符范围及位数限制的测试(等价类及边界值,会用到强制的复制与粘贴来实现不允许输入的字符,以及一些保留字的测试);
11、牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使用者),刷新或换一个按钮是否好用;
三、安全性测试:
1、密码是否隐蔽显示;
3、不能直接输入,就copy,是否数据检验出错;
还要准确定位每一个输入框的功能,每一种错误情况下,出现的错误提示要准确或者合适。
四、兼容性测试:
1.不同浏览器测试2.浏览器不同版本测试12五、其他测试点:
1、输入框之间考虑tab键是否支持;
3、取消后的默认位置(一般为空白的用户名输入框);
选择题一、数量关系1、甲乙2人比赛爬楼梯,已知每层楼梯相同,速度不变,当甲到3层时,乙到2层,照这样计算,当甲到9层时,乙到(D)层A.5B.6C.7D.8
2、有一份选择题试卷共6个小题,其得分标准是:一道小题答对得8分,答错得0分,不答得2分,某位同学得了20分,则他(D)A.至多答对一道题B.至少有三个小题没答C.至少答对三个小题D.答错两小题
3、有只蜗牛要从一口井底爬出来。井深20尺。蜗牛每天白天向上爬3尺,晚上向下滑2尺。请问该蜗牛几天才能爬出井口(A)A.20B.19C.18D.154、下列哪一个计算结果最接近1.25×8的值AA.3.3×3B.1.7×6C.1.6×6D.2.1×5
一.选择题
1、系统测试使用(C)技术,主要测试被测应用的高级互操作性需求,而无需考虑被测试应用的内部结构。
A、单元测试B、集成测试C、黑盒测试D、白盒测试
2、单元测试主要的测试技术不包括(B)。
A、白盒测试B、功能测试
C、静态测试D、以上都不是
3、(A)的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
A、系统测试B、集成测试
C、单元测试D、功能测试
4、如果一个产品中次严重的缺陷基本完成修正并通过复测,这个阶段的成品是(A)。
A、Alpha版B、Beta版
C、正版D、以上都不是
5、自底向上法需要写(A)。
A、驱动程序B、桩程序C、驱动程序和桩程序D、.以上都不是
6、测试ATM取款功能,已知取款数只能输入正整数,每次取款数要求是100的倍数且不能大于500,下面哪个是正确的无效等价类(C)
A、(0,100)、(100,200)、(200,300)、(300,400)、(400,500)、(500,+∞);
B、(500,+∞)
C、(500,+∞)、任意大于0小于500的非100倍数的整数;
D、(-∞,100)、(100,200)、(200,300)、(300,400)、(400,500)、(500,+∞);
7、因果图/判定表工程方法在以下那种情况下不适用(C)
A、输入输出明确,或输入输出因果关系明确的情况下
B、被分析的特性或功能点复杂,输入项目很多的情况下
C、系统输入之间相互约束多,需要做大范围的组合测试情况下
D、系统输入之间基本没有相互联系
8、以下说法不正确的是(D)
A、测试原始需要明确了产品将要实现了什么
B、产品测试规格明确了测试设计内容
C、测试用例明确了测试实现内容
D、以上说法均不正确
9、可测试性中,有关系统可观察性的理解,下面说法那个是错误的(B)
A、系统所有的输出结果可观察,错误输出易于识别;
B、系统运行状态和内部处理的过程信息可观察;
C、系统内部变量名及其取值可观察;
D、系统内部重要对象的状态和属性可观察;
F、系统内部重要的资源的占用情况及单个资源的创建、保持、释放过程可观察
10、测试脚本的编写规范强调:(ABCD)
A、可读行B、可重用性C、可维护性D、可移植性
11、当继承某个特性是,通常会从哪些角度对该特性进行测试分析?(AC)
A、失效影响度B、成熟度C、继承方式D、用户原始需求
12、从下列关于软件测试的叙述中,选出正确的叙述(CD)
A、用黑盒法测试时,测试用例是根据程序内部逻辑设计的
B、测试的目的是验证该软件已正确的实现了用户的要求
C、发现错误多的程序块,残留在模块中的错误也多
D、测试设计时,应充分考虑异常的输入情况
13、软件验收测试的合格通过准则是:(ABCD)
A.软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。
B.所有测试项没有残余一级、二级和三级错误。
C.立项审批表、需求分析文档、设计文档和编码实现一致。
D.验收测试工件齐全。
14、软件测试计划评审会需要哪些人员参加?(ABCD)
A.项目经理
B.SQA负责人
C.配置负责人
D.测试组
15.测试设计员的职责有:(BC)
A.制定测试计划
B.设计测试用例
C.设计测试过程、脚本
D.评估测试活动
16.软件实施活动的进入准则是:(ABC)
A.需求工件已经被基线化
B.详细设计工件已经被基线化
C.构架工件已经被基线化
D.项目阶段成果已经被基线化
二、判断题
1.软件测试的目的是尽可能多的找出软件的缺陷。(Y)
2.负载测试是验证要检验的系统的能力最高能达到什么程度。(N)
3.测试人员要坚持原则,缺陷未修复完坚决不予通过。(N)
4.自动化测试能比手工测试发现更多的缺陷(N)
错误猜测法基于这样一种假设,以前犯过的错误,以后同样会犯,我犯过的错误别人同样会犯,前人犯过的错误,后人同样会犯(N)
软件测试中的二八原则暗示着测试发现的错误中的80%很可能起源于程序模块的20%(Y)
8.在确定性能测试指标值时,参考的国际标准、国标、运营商规范中对此要求并不一样,可以视情况选择有利于我们的指标值,但必须要比竞争对手高,这样才有利于市场竞争力(N)
9.测试执行时,应该对每一个测试结果做全面的检查,包括日志,这种说法是否正确(N)
笔试题有三份,分别考python、SQL、java和计算机网络Linux命令等基础知识。
python部分
1、选择题
python中没有字符类型,只有字符串类型string
A、intB、charC、floatD、dictionary
考简单的python语句是否有错。按照语法就可以了
A.min=xifx
C.if(x>y)printxD.whileTrue:pass(while后面加分号,pass语句空语句,不做任何事情)
2、简答题
a,b=b,a二、s="ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"方法1
#由于数据类型set本身具有无序,唯一值的特性,可以用内置函数set对字符串和列表进行去重s="ajldjlajfdljfddd"s1=set(s)#去重s2=list(s1)#转为列表s2.sort()#排序,注意没有返回值s3=''.join(s2)#列表转字符串print(s3)#输出方法2
s="ajldjlajfdljfddd"s1=set(s)#去重s2=list(s1)#转为列表s3=sorted(s2)#排序s4=''.join(s3)#列表转字符串print(s4)#输出方法3,一行代码搞掂,熟悉的话应该很容易写。
s="ajldjlajfdljfddd"s1=''.join(sorted(list(set(s))))print(s1)三、用至少三种方法从字符串"helloboy<[www.doiido.com]>byebye"中提取字符串'www.doiido.com'①使用切片法截取字符串。切片语法:[起始:结束:步长],****步长默认为1,可为负数,切片区间左闭右开
str="helloboy<[www.doiido.com]>byebye"print(str[11:25:1])#第一个w第11位,最后m第24位,注意切片区间左闭右开输出:
www.doiido.com②使用split函数。
语法:str.split(str="",num=string.count(str))[n]参数:str默认为空格num为分割次数[n]表示取第n个分片,可不写则不取,下标同样从零开始返回值:分割后的字符串列表(列表元素=分割次数num+1)
思路:
1.网址在[]里面,用第一个[将字符串分隔成列表str.split("[")
['helloboy<','www.doiido.com]>byebye']2.再取列表里的索引为1的元素str.split("[")[1]
www.doiido.com]>byebye3.再用分隔符]将列表分隔开str.split("[")[1].split("]")
['www.doiido.com','>byebye']4.再取第一个元素str.split("[")[1].split("]")[0]
www.doiido.com代码:
str="helloboy<[www.doiido.com]>byebye"print(str.split("[")[1].split("]")[0])#是先输出[后的内容以及]前的内容,下标从0开始输出:
www.doiido.com③使用replace函数
*语法:str.replace(old,new[,max])参数1.old--这是要进行更换的旧子串。2.new--这是新的子串,将取代旧的子字符串。3.max--如果这个可选参数max值给出,就只替代max个,除max个外若还有old值,也不替代。返回值:把新的子串取代旧的子串后,形成的新的字符串。注意:并不返回原字符串里,请赋给一个新的string。*
1.网址在w之前的字符串用空格替换掉str.replace('helloboy<[','')
www.doiido.com]>byebye2.网址在m后面的字符串用空格替换掉str1.replace(']>byebye','')
str="helloboy<[www.doiido.com]>byebye"str1=str.replace('helloboy<[','')#删除网址之前的字符串print(str1.replace(']>byebye',''))#删除网址之后的字符串输出:
www.doiido.com④目前到这里。。。可能还有其他的函数楼主还没想到
语法:
1、打开文件或者新建一个文件(不指定访问方式,默认只读方式打开文件)
2、读/写数据
3、关闭文件
代码:
f1=open('testA.txt','w')#新建testA.txtf1.write('IamQualityTestingEngineer')#往testA.txt写数据f1.close()#关闭文件f2=open('testA.txt','r')#读模式content=f2.read()#读testA.txt数据str=content.replace("","")#把数据中的空格全部去掉f3=open('testB.txt','w')#新建testB.txtf3.write(str)#往testB.txt写数据f2.close()#关闭文件f3.close()#关闭文件看看运行后py文件目录下的结果:
成功。注意读之前一定要关闭文件,否则读取会失败。可以删除f1.close()这一行代码试一试(运行后testB.txt内容为空)。
A0=dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))#先zip返回对象,再dict转字典A1=range(10)#即range(0,10,1)A2=[iforiinA1ifiinA0]#即[iforiinrange(10)ifiinA0],A0与A1交集A3=[A0[s]forsinA0]#即[A0[s]forsinA0.keys()],A0[s]字典知道键通过下标取值A4=[iforiinA1ifiinA3]#即既满足A1,又满足A3,A1和A3交集A5={i:i*iforiinA1}#即{i:i*iforiinrange(10)},字典键值对A6=[[i,i*i]foriinA1]#即[[i:i*i]foriinrange(10)],列表元素又是列表print('A0:',A0)print('A1:',A1)print('A2:',A2)print('A3:',A3)print('A4:',A4)print('A5:',A5)print('A6:',A6)话不多说,马上看看结果
A0:zip函数作用,dict函数作用。#先zip返回对象,再dict转字典
A1:range函数作用。#即range(0,10,1)
A2:forif用法。#即[iforiinrange(10)ifiinA0],A0与A1交集
A3:取字典元素,for用法。#即[A0[s]forsinA0.keys()],A0[s]字典知道键通过下标取值
A4:同A2。#即既满足A1,又满足A3,A1和A3交集
A5:for输出字典元素。#即{i:i*iforiinrange(10)},字典键值对
A6:for输出列表元素。#即[[i:i*i]foriinrange(10)],列表元素又是列表
后面对这些函数单独研究。
SQL部分
笔试的时候是看一张成绩表,包括姓名,课程,成绩,学号。三个问题,第一,查询某科成绩大于80分的学生。二,学生成绩统计并排名。三,展示一个表格,增加一列,展示每一个学生低于60分就算不及格的,高于60算及格。
具体题目忘记了,从网上找了个相似的练习下。工作上用的比较多的是查询,其它的毕竟好几年没复习了,早就忘了。
成绩表数据如下:
考察聚合函数sum(),用于返回数值列的总数(总额)。。groupby分组(配合聚合函数使用),排序用orderby,默认从小到大,加个desc,从大到小。没有where子句查询所有记录
selectname,SUM(score),stidfromdbo.stuscoregroupbyname,stidorderbySUM(score)desc;运行结果(一块复制进来了)(Navicat命令列界面,输入sql语句按回车enter键)
mysql>selectname,SUM(score),stidfromdbo.stuscoregroupbyname,stidorderbySUM(score)desc;+------+------------+------+|name|SUM(score)|stid|+------+------------+------+|张三|218|1||李四|200|2||王五|191|3|+------+------------+------+3rowsinset(0.03sec)二、查询每个人单科最高成绩(要求显示字段:学号,姓名,课程,最高成绩)考察派生表(需要别名),max()函数,用于返回一列中的最大值,NULL值不包括在计算中。先查学号与最高成绩,再把学号,姓名,课程,最高成绩查出来
selecttable1.stid,table1.name,table1.subject,table1.scorefromstuscoretable1,(selectstid,max(score)asmaxscorefromstuscoregroupbystid)table2wheretable1.stid=table2.stidandtable1.score=table2.maxscore;先查括号里面的
mysql>selecttable1.stid,table1.name,table1.subject,table1.scorefromstuscoretable1,(selectstid,max(score)asmaxscorefromstuscoregroupbystid)table2wheretable1.stid=table2.stidandtable1.score=table2.maxscore;+------+------+---------+-------+|stid|name|subject|score|+------+------+---------+-------+|1|张三|数学|89||2|李四|英语|80||3|王五|数学|91|+------+------+---------+-------+3rowsinset(0.04sec)三、查询每个人的平均成绩(要求显示字段:学号,姓名,平均成绩)考察avg()函数,用于返回数值列的平均值,NULL值不包括在计算中。和分组groupby用法
selectname,stid,avg(score)fromdbo.stuscoregroupbyname,stid;运行结果
mysql>selectname,stid,avg(score)fromdbo.stuscoregroupbyname,stid;+------+------+------------+|name|stid|avg(score)|+------+------+------------+|张三|1|72.6667||李四|2|66.6667||王五|3|63.6667|+------+------+------------+3rowsinset(0.04sec)四、查询各门课程成绩最好的学生(要求显示字段:学号,姓名,科目,成绩)类似第二题。第一步查询把学号换成科目
selecttable1.stid,table1.name,table1.subject,table1.scorefromstuscoretable1,(selectsubject,max(score)asmaxscorefromstuscoregroupbysubject)table2wheretable1.subject=table2.subjectandtable1.score=table2.maxscore;运行结果
mysql>selecttable1.stid,table1.name,table1.subject,table1.scorefromstuscoretable1,(selectsubject,max(score)asmaxscorefromstuscoregroupbysubject)table2wheretable1.subject=table2.subjectandtable1.score=table2.maxscore;+------+------+---------+-------+|stid|name|subject|score|+------+------+---------+-------+|2|李四|语文|70||2|李四|英语|80||3|王五|数学|91|+------+------+---------+-------+3rowsinset(0.04sec)五、查询各门课程成绩最好的两位学生(要求显示字段:学号,姓名,科目,成绩)服了,还没找到更好的方法,将就下。按照最快的思路还没调试好,用top应该更快(找到科目相同的,成绩的,前两列)
SELECTt1.name,t1.SUBJECT,t1.scoreFROMstuscoret1WHERE(SELECTCOUNT(*)FROMstuscoret2WHEREt1.SUBJECT=t2.SUBJECTANDt2.score>=t1.score)<=2orderbysubjectdesc;运行结果
mysql>SELECTt1.name,t1.SUBJECT,t1.scoreFROMstuscoret1WHERE(SELECTCOUNT(*)FROMstuscoret2WHEREt1.SUBJECT=t2.SUBJECTANDt2.score>=t1.score)<=2orderbysubjectdesc;+------+---------+-------+|name|SUBJECT|score|+------+---------+-------+|李四|语文|70||王五|语文|60||张三|英语|70||李四|英语|80||张三|数学|89||王五|数学|91|+------+---------+-------+6rowsinset(0.06sec)六、查询结果统计如下学号姓名语文数学英语总分平均分考察casewhen函数。sum(case...then...else0end)固定用法
selectstid学号,name姓名,sum(casewhensubject='语文'thenscoreelse0end)as语文,sum(casewhensubject='数学'thenscoreelse0end)as数学,sum(casewhensubject='英语'thenscoreelse0end)as英语,SUM(score)总分,avg(score)平均分fromstuscoregroupbystid,nameorderby总分;运行结果
mysql>selectstid学号,name姓名,sum(casewhensubject='语文'thenscoreelse0end)as语文,sum(casewhensubject='数学'thenscoreelse0end)as数学,sum(casewhensubject='英语'thenscoreelse0end)as英语,SUM(score)总分,avg(score)平均分fromstuscoregroupbystid,nameorderby总分;+------+------+------+------+------+------+---------+|学号|姓名|语文|数学|英语|总分|平均分|+------+------+------+------+------+------+---------+|3|王五|60|91|40|191|63.6667||2|李四|70|50|80|200|66.6667||1|张三|59|89|70|218|72.6667|+------+------+------+------+------+------+---------+3rowsinset(0.05sec)七、查询各门课程的平均成绩(要求显示字段:课程,平均成绩)考察avg函数,groupby分组
selectsubject,avg(score)fromstuscoregroupbysubject;运行结果
mysql>selectsubject,avg(score)fromstuscoregroupbysubject;+---------+------------+|subject|avg(score)|+---------+------------+|数学|76.6667||英语|63.3333||语文|63.0000|+---------+------------+3rowsinset(0.03sec)八、查询数学成绩的排名(要求显示字段:学号,姓名,成绩,排名)考察count用法,orderby排序,注意:比较的次数+1=排名
selectstid,name,score,(selectcount(*)fromstuscoret1wheresubject='数学'andt1.score>t2.score)+1as名次fromstuscoret2wheresubject='数学'orderbyscoredesc;--注释:排序,比较大小,比较的次数+1=排名。运行结果
mysql>selectstid,name,score,(selectcount(*)fromstuscoret1wheresubject='数学'andt1.score>t2.score)+1as名次fromstuscoret2wheresubject='数学'orderbyscoredesc;+------+------+-------+------+|stid|name|score|名次|+------+------+-------+------+|3|王五|91|1||1|张三|89|2||2|李四|50|3|+------+------+-------+------+3rowsinset(0.13sec)九、查询数学成绩在2-3名的学生(要求显示字段:学号,姓名,科目,成绩)有很多种方法,下面只是其中的一种,顺着第八题做下来
selectt3.*from(selectstid,name,subject,score,(selectcount(*)fromstuscoret1wheresubject='数学'andt1.score>t2.score)+1as名次fromstuscoret2wheresubject='数学')t3wheret3.名次between2and3orderbyt3.scoredesc;运行结果
mysql>selectt3.*from(selectstid,name,subject,score,(selectcount(*)fromstuscoret1wheresubject='数学'andt1.score>t2.score)+1as名次fromstuscoret2wheresubject='数学')t3wheret3.名次between2and3orderbyt3.scoredesc;+------+------+---------+-------+------+|stid|name|subject|score|名次|+------+------+---------+-------+------+|1|张三|数学|89|2||2|李四|数学|50|3|+------+------+---------+-------+------+2rowsinset(0.49sec)十、查询李四的数学成绩的排名方法很多,下面列出其中的一种,顺着第八题做
selectstid,name,subject,score,(selectcount(*)fromstuscoret1wheresubject='数学'andt1.score>t2.score)+1as名次fromstuscoret2wheresubject='数学'andname='李四'orderbyscoredesc;运行结果
mysql>selectstid,name,subject,score,(selectcount(*)fromstuscoret1wheresubject='数学'andt1.score>t2.score)+1as名次fromstuscoret2wheresubject='数学'andname='李四'orderbyscoredesc;+------+------+---------+-------+------+|stid|name|subject|score|名次|+------+------+---------+-------+------+|2|李四|数学|50|3|+------+------+---------+-------+------+1rowinset(0.05sec)十一、查询统计如下课程不及格(0-59)个良(60-80)个优(81-100)个考察casewhen
selectsubject科目,sum(casewhenscorebetween0and59then1else0end)as不及格,sum(casewhenscorebetween60and80then1else0end)as良,sum(casewhenscorebetween81and100then1else0end)as优秀fromstuscoregroupbysubject;运行结果
mysql>selectsubject科目,sum(casewhenscorebetween0and59then1else0end)as不及格,sum(casewhenscorebetween60and80then1else0end)as良,sum(casewhenscorebetween81and100then1else0end)as优秀fromstuscoregroupbysubject;+------+--------+----+------+|科目|不及格|良|优秀|+------+--------+----+------+|数学|1|0|2||英语|1|2|0||语文|1|2|0|+------+--------+----+------+3rowsinset(0.06sec)十二、查询统计如下数学:张三(50分),李四(90分),王五(90分),赵六(76分)
查了下答案,先贴上
declare@snvarchar(1000)set@s=''select@s=@s+','+name+'('+convert(nvarchar(10),score)+'分)'fromstuscorewheresubject='数学'set@s=stuff(@s,1,1,'')print'数学:'+@sMysql增删改查语句增加:INSERTINTO表名(字段名1,字段名2)VALUE(字段值1,字段值2)例:INSERTINTOa(id,name)VALUE(2,'李四');删除:DELETEFROM表名WHERE条件例:DELETEFROMaWHEREid=1;修改:UPDATE表名SET字段名=字段值WHERE条件例:UPDATEaSETid=1,name='张三'WHEREid=2;查询:SELECT(字段名,*代表全部)FROM表名WHERE条件例:SELECTid,nameFROMaWHEREid=1;常见软件测试笔试题1、测试用例的设计方法有哪些?请阐述判定表设计测试用例的步骤。
答:等价类划分,边界值分析,错误推断法,因果图法,正交表分析法,场景分析法。
判定表设计测试用例的步骤:确定规则的个数;列出所有的条件桩和动作桩;填入条件项,得到初始判定表;简化合并相似规则。
2、自动化测试框架有哪几种?
答:模块化框架,
函数库框架;
关键字驱动测试框架;
数据驱动框架。
3、测试覆盖率分为哪几种统计方式?分别是什么?
答:代码覆盖率;功能模块覆盖率;数据库覆盖率;需求覆盖率。
4、什么是FMEA?
答:失效模式与影响分析,它是可靠性设计的重要方法,对各种风险进行评价,分析,以便在现有技术的基础上消除这些风险或将风险减少到可以接受的水平。
5、列举出你所了解的EMC测试和环境测试项目。
答:EMC测试是对电子产品在电磁场方面干扰大小和抗干扰能力的综合评定,是产品质量重要的指标之一,电磁兼容的测量有测试场地和测试仪器组成。EMC包括两部分,分别是EMI(干扰)和EMS(敏感度,抗干扰)。
6、如何制定测试计划?
答:产品基本情况,测试需求情况,测试策略和记录,计划表,问题跟踪报告,测试计划的评定和结果。
7、什么叫做有效等价有效类,无效等价类?
答:有效等价类值对于程序规格来说是合理的,有意义的输入数据构成的集合。利用有效等价类可以检验程序是否实现了规格说明书的预先设定的功能和特性。无效等价类是指对于软件规格来说是没有意义和不合理的输入的数据集合。
8、请描述TCP/IP建立连接的过程
答:采用三次握手,建立一个连接。
第一次握手,客户端发送syn包(syn=j)到服务端,并进入SYN_SEND状态,等待服务器确认;
第二次握手,服务端收到syn包,必须确认客户的SYN(ack=j+1),同时也发送一个syn包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手,客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入EATABLISHED状态,完成三次握手。
9、调用一个DLL(动态链接库)有哪几种方式?
答:一种是编程的时候,直接调用include库文件。编好的程序使用时为操作系统直接调用。
第二种为编程的时候使用LoadLibrary,FreeLibrary,GetProcAddress来动态装载程序。则编好的程序使用库文件时,是程序自己主动载入。
10、白盒测试有哪些覆盖方法?
答:语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,组合覆盖,路径覆盖。
11、进程与线程的区别?
答:线程是进程的一个执行单元,也是进程的可调度实体。
与进程的区别:
(1)、地址空间:进程内的一个执行单元;进程至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间;
(2)、资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源;