☆☆☆软件测试分为几个阶段,各个阶段的测试策略和要求是什么?
需求测试阶段:测试需求设计文档是否合理,是否满足用户的使用习惯;
单元测试阶段:最终目的
集成测试阶段:
系统测试阶段:
验收测试阶段:怎么样才算完成验收测试?
延伸问题:怎么样才算完成产品的整个测试?
☆☆☆目前主要的测试用例设计方法是什么?
解答:等价类划分法,边界值法,因果图/判定表法,正交表分析法,场景法,错误分析法等。
☆☆☆在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高效的软件缺陷(Bug)记录?
解答:缺陷报告包括缺陷标题,缺陷编号,缺陷所在版本,缺陷所在模块,缺陷对应的开发者,缺陷优先级,缺陷严重程度,缺陷描述,缺陷截图
①搜索出来的最后一个字‘怕’不符合搜索要求‘ba’;
②字母‘O’上标注数字‘9’和其他数字不在一行;
③字母键盘有两个‘M’字母,缺少一个‘W’字母,根据键盘排列习惯应该把左上第二位‘M’更改为‘W’字母;
④字母‘K’上缺少一个左半个圆括号‘(’;
⑤最下排‘中/英’文切换键显示状态与键盘显示内容不一致;
延伸问题:如何测试‘中/英’文切换键?要考虑中英文切换之间大小写的情况
⑥最下排第一个‘符’号键,第三个符号键和第五个符号键功能一样,可以合并为一个按键;
⑦键盘显示字母应该是小写状态,原因是当前大小写状态键‘⇧’显示为‘小写状态’,且当前输入的是中文;
⑧键盘中缺少‘删除’键;
⑨‘启用听写’键和‘空格’键应该拆分为两个按键;
⑩倒数第二排的最后一个‘enter’键,和‘确认’键功能一样,可以合并为一个按键;
。。。。。。。。。。。暂时看出这么多不合理的地方,虚心请教。。。。。。。。。。。。
☆☆☆在数据库的城市表(city表)中,按城市热度(hot)由高到低显示美国国家(country)下的所有城市。
select * from city
where country='America'
order by hot desc;
延伸问题:如何向数据库添加一条新的记录?add
☆☆☆请根据以下需求文档和设计图的内容,编写测试用例。
思考:说一下设计思路?
☆☆☆延伸问题:比如测试淘宝加入购物车,购物车商品在进行购买,怎么测试?提示:比如购买37码灰色小熊的袜子,加入购物车之前应该检查库存,检查是否有符合的样式和尺码,满足需求点击加入购物车,进入购物车页面,检查购物车的商品规格是否是自己添加到购物车的商品(规格,样式等)
☆☆☆你认为web和移动端测试有哪些区别?
☆☆☆Bug定位,比如如何判断问题是前台页面还是后台服务器的问题?
☆☆☆给一个命题设计测试用例,如登录界面,电梯,一张白纸等。
☆☆☆工作中印象较深的bug,什么原因造成的?
☆☆☆什么是软件缺陷?
1.软件未达到产品说明书指明的功能;
2.软件出现了产品说明书指明不会出现的错误;
3.软件功能超出产品说明书指明的范围;
4.软件未达到产品说明书虽未指出但应该达到的目标;
5.软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。
☆☆☆测试的V/W模型图?软件测试模型(V和W)要表达的是测试阶段和开发阶段的对应关系。
V模型:
优点:①开发和测试阶段划分明确,对应关系明确;
②体现测试阶段既包含单元测试(代码,专业级)又包含验收测试(用户级)。
缺点:没表达出文档测试阶段的测试工作,容易理解为项目或软件完成后的收尾工作。
W模型:
优点:①第一个v是开发的完整过程;第二个v是测试的完整过程。
②在测试过程中增加了文档测试的内容。
☆☆☆比较黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系?
黑盒测试:又称为功能测试(或者数据驱动测试)。是不考虑程序内部结构特征,只关注输入输出的情况下进行的功能测试。
白盒测试:又称为结构测试(或者基于程序的测试)。考虑程序内部结构,而不考虑程序功能的测试。
单元测试【unit testing】:又称为模块测试。是指对软件中的最小可测试单元进行检查和验证。(这个单元,可以是C语言中的一个函数,可以是C++/Java里的一个类,也可以是图形化软件中的一个窗口或一个菜单等)。总体来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
单元测试要求测试人员编写桩模块和驱动模块。实际工作中为了节约成本,一般由程序员自己来完成,不严格,不能保证质量。
桩模块:模拟被测模块的下一级模块(被 被测模块调用的那个模块)。
驱动模块:模拟被测模块的上一级模块(调用被测模块的那个模块)。
集成测试:又称组装测试(难点是冒烟测试。在逐渐组装完成的过程中,会形成很多临时版本,所以需要先进行冒烟测试)。
集成测试主要是以黑盒测试为主,核心模块适当采用白盒测试。通常是在单元测试的基础上进行,是把软件的功能模块逐步合并在一起测试的过程。
系统测试:是对集成了硬件、软件的完整系统进行的测试。重点在于模拟真实的系统环境下整个系统的正确运行,以及系统的兼容性。该阶段全部是黑盒测试。注意:一般在系统测试之前,会安排“确认测试”,主要确认:①该系统是否可以进入全面的“系统测试”阶段;②确认相关文档是否齐全(尤其是给用户的文档和准备验收的文档要做文档测试,还有一些参与认证的文档也要做文档测试)。
确认测试一般时间较短,参与人员较少,所以一般不把它和单元测试、集成测试、系统测试所并列。
验收测试【UAT:User acceptance Testing】:又称用户接受度测试。该阶段由用户参与检查过程。
可以分成两个小阶段:
①α测试(Alpha):在软件公司的环境下,由用户或者第三方测试机构对软件进行检查。(也经常会由软件公司替代用户进行)。
②β测试(Bata):在用户实际环境中进行,由最终用户对软件进行检查。一般会把软件做成一个免费版的发放给最终用户,通过用户使用收集问题(bug)——公测版本。
☆☆☆我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?
1)检查系统是否有中毒的特征;
2)检查软硬件配置是否符合软件的推荐标准;
3)确认当前系统是否是独立的,是否有对外提供什么消耗CPU资源的服务;
4)如果是C/S或者B/S结构的软件,需要检查是不是因为与服务器的连接有问题,或者访问有问题造成的;
5)在系统没有任何负载的情况下,查看性能监视器,确认应用程序对CPU/内存的访问情况。
☆☆☆什么是性能测试?
性能测试是根据需求,制定性能测试计划,搭建性能测试环境,使用测试工具比如LoadRunner执行计划(三大组件),并编写性能测试报告。
关键词:需求、计划、环境、工具、执行、分析、报告
☆☆☆是否了解性能测试,如果了解。LoadRunner分哪三部分?
LoadRunner分为:
1)虚拟用户脚本生成器VuGen(Visual User Generator):功能是录制、编辑、调试,增强性能测试脚本。
2)压力调度控制器(Controller):功能是设置、运行和监控场景Scenario,获取测试结果数据。
3)压力结果分析器(Analysis):功能是把收集到的测试数据以各种图标形式展示,便于分析性能情况,得出测试结果报告。
延伸:LoadRunner工作原理:录制--回放 的工作方式。
1)录制时,VuGen根据相关协议、业务流程录制生成脚本,代表自动化执行的业务流程。
2)回放时,使用工具模拟真实客户端向服务器发请求。
☆☆☆什么是并发?在LoadRunner中,如何进行并发的测试?
并发:多用户在几乎同一时刻执行某一业务操作,形成一种严格的并发访问(LR精确到毫秒级别)。多任务抢占少量资源“一起运行”。
并发测试(ConcurrencyTesting)的三要素:
1)Action脚本中要添加事务;
2)事务开始之前要加集合点(并发点);
3)控制台场景中要设置并发策略。
☆☆☆什么是压力测试(强度测试)?
答案:压力测试是一种破坏性测试,它故意让软件在比较少的资源环境下运行,如低内存、小硬盘、慢CPU上运行、考验程序直至程序无法运行,从而发现软件缺陷。
☆☆☆☆☆你以前工作时的测试流程是什么(灵活回答)
☆☆☆☆☆测试中各种文档或表(测试计划,测试用例,缺陷报告,测试报告)包含的字段都有哪些?你认为哪些字段比较重要?
☆☆☆☆☆你比较熟悉哪种自动化测试工具?用的什么语言?
☆☆☆☆☆QTP中Action有什么作用?有几种?
☆☆☆☆☆QTP中定义变量的语句?
☆☆☆☆☆Selenium
☆☆☆☆☆自动化测试的软件是C/S框架还是B/S框架,介绍一下自动化测试中你担任的工作。
☆☆☆测试覆盖的类型(属于白盒测试)
☆☆☆☆☆你认为作为一个软件测试工程师应该具备哪些技能和素质?
答:(仅个人看法)作为一名软件测试工程师应具备计算机专业方面综合能力,如计算机专业技能,软件测试专业技能,软件编程技能等;
素质:应具备良好的沟通能力,协调能力;勇于承担责任,做事稳重;要有怀疑和破坏精神;善于自我总结,自我督促,有进取心,在工作中不断追求上进,有求知欲,不断更新自己的思想和认知。
☆☆☆☆☆将Linux当前目录下的文件myfile的权限由-rw-rw-rw-修改为-rwxr--r--
答:chmod u+x,g-w,o-w myfile
☆☆☆☆☆Linux试题:如何修改目录默认权限,比如修改目录默认权限为754
答:chmod 754 dir(目录名)
解读:改变文件/目录的权限:chmod 规则 文件/目录名
规则:
角色:u(自己) g(同组) o(其他) a(所有人)
操作: +(增加权限) -(去除权限)
权限: r(可读) w(可写) x(可执行)
简易规则:数字表达法
644 rw- r-- r--
755 rwx r-x r-x
777 rwx rwx rwx
744 rwx r-- r--
☆☆☆☆☆Linux试题:压缩/解压命令
答:tar
解读:tar
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。【参数-f是必须的】
压缩
tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar -cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux
解压
tar -xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar -xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
1、*.tar 用 tar -xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar -xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar -xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar -xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压
☆☆☆☆☆有三根蚊香,三根蚊香的长短都一样,每根蚊香燃烧完都是一个小时通过燃烧如何确定15分钟,30分钟,45分钟?
答:假设三根蚊香分别为a,b,c,把蚊香a从两端点燃(开始计时),另蚊香b从一端点燃,确保a,b同时点燃,这样蚊香a烧完时正好用时30分钟,此时点燃蚊香b的另一端,同时点燃蚊香c的两端(再次计时),观察蚊香b烧完正好用时15分钟,等蚊香c烧完正好是45分钟。【其实本题只需要两根蚊香即可确定15min,30min,45min】
一只小猴子边上有100香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里?
答:猴子先搬50根,走17米,再回来搬50根走完17米处,回来后再搬剩下的49根走完33米,最后搬到家剩16根。
数据库如下,写出对应的SQL:
em_info(eid,ename,work_age)员工表
(eid:员工id,主键;ename:员工姓名;work_age:工龄)
company(cid,cname,status)公司表
(cid:公司id,主键;cname:公司名称;status:0-审核中;1-审核通过;2-审核驳回;3-未审核)
em_basic(eid,cid,phone)员工关系表
(eid:员工id;cid:公司id;phone:手机号)
1.查询公司状态为“审核通过”的且公司中员工平均工龄大于3的公司的个数?
第一种:count()函数就是统计条数的函数,里面用什么变量都可以,可以是*可以是cname可以是1等。
select count(1) from company c, em_info e, em_basic eb
where c.cid = eb.cid and e.eid = eb.eid
and c.status = '1'
group by c.cid having avg(a.work_age) > 3;
第二种:
select count(cname) from em_info a
left join em_basic b on a.eid = b.eid
left join company c on c.cid = b.cid
where c.status = '1'
group by c.cid having avg(a.work_age) > 3;