软件测试笔试练习题与参考答案(一)
测试习题
一.测试相关多选题
1.对手机软件的压力测试通常可以包括(ABC)
A 存储压力 B 响应能力压力
C 网络流量压力 D 并发压力
2.软件验收测试的合格通过准则(ABCD)
A 软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。
B 所有测试项没有残余一级、二级和三级错误。
C 立项审批表、需求分析文档、设计文档和编码实现一致。
D 验收测试工件齐全。
3.考察知识点:黑盒测试方法:等价类、边界值、因果图、错误推测(功能测试或数据驱动测试)
白盒测试:(结构测试或逻辑驱动测试)路径测试、条件判断、循环测试、语句覆盖、判定条件覆盖等
4.有关“测试驱动开发”,下列说法正确的有?(ABCD)
A.TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码
B.TDD的基本思路就是通过测试来推动整个开发得进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。
C.TDD的重要目的不仅仅是测试软件,测试工作保证代码质量仅仅是其中一部分,而且是在开发过程中帮助客户和程序员去除模棱两可的需求。
D.TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。
扩展:测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD得原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于敏感词开发方法和过程。TDD得基本思路就是通过测试来推动整个开发得进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD的重要目的不仅仅是测试软件,测试工作保证代码质量仅仅是其中一部分,而且是在开发过程中帮助客户和程序员去除模棱两可的需求。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。
优点:在任意一个开发节点都可以拿出一个可以使用,含少量bug并具一定功能的产品。
缺点:增加代码量。测试代码是系统代码的两倍或更多。
5.软件验收测试包括哪些?(ACD)
A 正式验收测试 B 白盒测试
C alpha测试 D beta测试
6.系统测试的策略有哪些?(ABCD)
A 负载测试 B 易用性测试
C 强度测试 D安全测试
7.设计系统测试计划需要参考的项目文档有哪些?(ACD)
A 软件测试计划 B 可行性研究报告
C 软件需求规范 D 迭代计划
8.下面关于软件测试,描述正确的是?(ABCD)
A 软件测试是使用人工操作或者软件自动运行的方式来检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。
B 软件测试的测试目标是发现一些可以通过测试避免的开发风险。
C 软件测试的原则之一是测试应该尽早进行,最好在需求阶段就开始介入。
D 软件测试主要工作内容是验证(verification)和确认(validation)
9.集成测试的过程包括有以下哪些?(ABCD)
A 构建的确认过程
B 系统集成测试测试组提交过程
C 测试用例设计过程
D Bug的报告过程
10.做好文档测试需要注意的点有哪些?(ABCD)
A 仔细阅读,跟随每个步骤,检查每个图形,尝试每个示例
B 检查文档的编写是否满足文档编写的目的
C 内容是否齐全,正确,完善
D 标记是否正确
11.下述有关负载测试,容量测试和强度测试的描述正确的有?(ABCD)
A 负载测试:在一定的工作负荷下,系统的负荷及响应时间。
B 强度测试:在一定的负荷条件下,在较长时间跨度内的系统连续运行给系统性能所造成的影响。
C 容量测试:容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。
D 容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。
12.下面描述测试工具的功能正确的有?(ABCD)
A JMeter: 基于JAVA的压力测试工具,Badboy用来进行脚本的录制
B Junit: 白盒测试工具:针对代码测试
C LoadRunner:负载压力测试
D TestLink: 用例管理工具
13.下面哪些属于网游的测试内容?(ABCD)
A 客户端性能
B 服务器端性能
C 从运行完 game.exe 打开游戏界面后可进行的各种操作、玩法
D 界面
14.测试的方法可以分为哪几种?(ABCD)
A 个人复查
B 抽查和会审
C 黑盒测试
D 白盒测试
15.假设京东有一个web API: http://p.jd.com?p1=90&p0=100,输入打折价p1和原价p0,返回折扣信息0.9,请设计测试用例进行测试。
1).输入不在范围内的打折价和不在范围内的原价(提示输入有误)
2).输入在范围内的打折价和不在范围内的原价(提示输入有误)
3).输入不在范围内的打折价和在范围内的原价(提示输入有误)
4).输入在范围的内打折价和原价(原价=打折价,返回折扣1.0)
5).输入在范围的内打折价和原价(原价>打折价,返回正确的折扣信息)
6). 输入 在范围的内打折价和原价(原价<打折价,返回错误信息)
16.以windows对文件的复制粘帖功能为例,尽可能多地写出测试思路。
参考答案:
1). 基本功能测试: 文件的复制粘贴功能,首先关键字“文件”,文件有不同的分类(图片、视频、音频、文档等),每个分类又有不同的类型(文档类型:txt doc execl pdf等),每个文件又有不同的大小,而且文件还有很多权限,是不是隐藏,是不是只是管理员可执行。选择不同分类的不同类型,不同大小的文件做测试资源。比如:文档类型里面txt文件可以分为 1.KB的txt文件、1MB的txt文件、1GB的txt文件。。。。下一个关键字 复制粘贴 复制有多种方式 右击选择、Ctrl+C、 拖动复制,对应粘贴也有各种方式。然后从哪复制,粘贴到哪,比如 可以有本机硬盘、移动硬盘、优盘、内存卡、软盘、光盘、连接手机存储,复制到网络地址等等。复制粘贴后文件是不是可用,文件权限是不是有变化。复制过去容量不够怎么处理?复制过后有重名文件怎么处理?复制过程中取消、关机、拔优盘怎么处理?复制过程能不能执行文件?
2).性能测试:复制粘贴功能性能怎么样?复制文件的速度可不可以接受?同时复制多个文件是不是可以完成?复制文件过程中占用CPU资源大不大,耗电量大不大?
3).兼容性测试 Windows XP, Windows 7, Windows 8 , Windows 8.1, Windows 10等各种windows版本是不是都支持这个功能。
4).交互测试; 复制粘贴文件时,使用windows存储的其他功能是否有影响?比如播放本地的音频、视频、等同时复制文件是不是有影响。一边复制,一边粘贴是不是有影响
17.已知String convert(String page)作用是将WEB页转码为方便移动设备查看的页面,为了确保转码的正确性,请设计相应测试策略。
参考答案:
1【基本功能测试】
功能:
输入正确的网址,进行转码,检查内容是否正确;
边界:
输入信息量非常大的网址
输入没有信息的网址
负值:
输入错误的网址,进行转码,系统是否有相应的提示;
输入的 web 的 page 为空,是否抛出异常;
2【兼容测试】
使用不同操作系统的移动设备查看转换后的页面,检查内容是否正确;
使用不同分辨率的移动设备查看转换后的页面,检查内容是否正确;
使用不同浏览器查看转换后的页面,检查内容是否正确;
3【性能测试】
测试转码的速度,或者系统的响应时间;
4【易用性 / 用户体验测试】
测试转码后,页面显示是否美观;
18.测试淘宝站内的搜索系统
1.功能方面,是否能按指定条件查到正确、完整的结果,具体:
1.1录入条件为可查到结果的正常关键字、词、语句,检索到的内容、链接正确性;
1.2录入条件为不可查到结果的关键字、词、语句;
1.3录入条件为一些特殊的内容,如空、特殊符、标点符、极限值等,可引入等价类划分的方法等;
2.性能方面,可利用测试工具或各种测试手段考虑功能在各方面的表现,具体:
2.1压力测试:在不同发用户数压力下的表现(评价指标如响应时间等)
2.2负载测试:看极限能承载多大的用户量同时正常使用
2.3稳定性测试:常规压力下能保持多久持续稳定运行
2.4内存测试:有无内存泄漏现象
2.5大数据量测试:如模拟从庞大的海量数据中搜索结果、或搜索出海量的结果后列示出来,看表现如何等等。
3.易用性方面,交互界面的设计是否便于、易于使用,具体:
3.1依据不同的查询结果会有相关的人性化提示,查不到时告知?查到时统计条数并告知?有疑似输入条件错误时提示可能正确的输入项等等处理;
3.2查询出的结果罗列有序,如按点击率或其他排序规则,确保每次查询出的结果位置按规则列示方便定位,显示字体、字号、色彩便于识别等等;
3.3标题查询、全文检索、模糊查询、容错查询、多关键字组织查询(空格间格开)等实用的检索方式是否正常?
3.4输入搜索条件的控件风格设计、位置摆放是否醒目便于使用者注意到,有否快照等快捷查看方式等人性化设计?
4.兼容性方面,跨平台、多语言等多样性环境组合情况下测试使用的正常性,具体:
4.1WINDOWS/LINUX/UNIX等各类操作系统下及各版本条件下的应用
4.2IE/FIREFOX/GOOGLE/360/QQ等各类浏览器下及各版本条件下、各种显示分辨率条件下的应用
4.3SQL/ORACLE/DB2/MYSQL等各类数据库存储情况下的兼容性测试
4.4简体中文、繁体中文、英文等各类语种软件平台下的兼容性测试
4.5IPHONE/IPAD、安卓等各类移动应用平台下的兼容性测试
4.6与各相关的监控程序的兼容性测试,如输入法、杀毒、监控、防火墙等工具同时使用
5.安全性方面,往往容易被忽视的环节,具体:
5.1被删除、加密、授权的数据,不允许被查出来的,是否有安全控制设计;
5.2录入一些数据库查询的保留字符,如单引号、%等等,造成查询SQL拼接出的语句产生漏洞,如可以查出所有数据等等,这方面要有一些黑客攻击的思想并引入一些工具和技术,如爬网等。
5.3通过白盒测试技术,检查一下在程序设计上是否存在安全方面的隐患;
5.4对涉及国家安全、法律禁止的内容是否进行了相关的过滤和控制;
6.异常性测试,各种破坏性的操作的影响测试,具体:
6.1查询过程中断网、关机
6.2查询过程中强行中断关闭页面
6.3查询过程中强行杀死相关进程等
- 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。
20.给定一个 query 和一个 text,均由小写字母组成。要求在 text 中找出以同样的顺序连 续出现在 query 中的最长连续字母序列的长度。例如, query 为“acbac”,text 为 “acaccbabb”,那么 text 中的“cba”为最长的连续出现在 query 中的字母序列,因此, 返回结果应该为其长度 3。请注意程序效率。
#include
#include
#include
#include
#define LEFTUP 0
#define LEFT 1
#define UP 2
using namespace std;
int Max(int a,int b,int c,int max){ //找最大者时a的优先级别最高,c的最低.最大值保存在max中
int res=0; //res记录来自于哪个单元格
*max=a;
if(b>*max){
*max=b;
res=1;
}
if(c>*max){
*max=c;
res=2;
}
return res;
}
//调用此函数时请注意把较长的字符串赋给str1,这主要是为了在回溯最长子序列时节省时间。如果没有把较长的字符串赋给str1不影响程序的正确执行。
string LCS(const string &str1,const string &str2){
int xlen=str1.size(); //横向长度
int ylen=str2.size(); //纵向长度
if(xlen==0||ylen==0) //str1和str2中只要有一个为空,则返回空
return "";
pair<int,int> arr[ylen+1][xlen+1]; //构造pair二维数组,first记录数据,second记录来源
for(int i=0;i<=xlen;i++) //首行清0
arr[0][i].first=0;
for(int j=0;j<=ylen;j++) //首列清0
arr[j][0].first=0;
for(int i=1;i<=ylen;i++){
char s=str2.at(i-1);
for(int j=1;j<=xlen;j++){
int leftup=arr[i-1][j-1].first;
int left=arr[i][j-1].first;
int up=arr[i-1][j].first;
if(str1.at(j-1)==s) //C1==C2
leftup++;
int max;
arr[i][j].second=Max(leftup,left,up,&arr[i][j].first);
// cout<<arr[i][j].first<<arr[i][j].second<<" ";
}
// cout<<endl;
} /*矩阵构造完毕*/
//回溯找出最长公共子序列
stack<int> st;
int i=ylen,j=xlen;
while(i>=0&&j>=0){
if(arr[i][j].second==LEFTUP){
if(arr[i][j].first==arr[i-1][j-1].first+1)
st.push(i);
--i;
--j;
}
else if(arr[i][j].second==LEFT){
--j;
}
else if(arr[i][j].second==UP){
--i;
}
}
string res="";
while(!st.empty()){
int index=st.top()-1;
res.append(str2.substr(index,1));
st.pop();
}
return res;
}
int main(){
string str1="GCCCTAGCG";
string str2="GCGCAATG";
string lcs=LCS(str1,str2);
cout<<lcs<<endl;
return 0;
}
下面给一个Java版本
public static List longestCommonSubsequence(E[] s1,E[] s2){
int[][] num=new int[s1.length+1][s2.length+1];
for(int i=1;i<s1.length+1;i++){
for(int j=1;j<s2.length+1;j++){
if(s1[i-1].equals(s2[j-1])){
num[i][j]=1+num[i-1][j-1];
}
else{
num[i][j]=Math.max(num[i-1][j],num[i][j-1]);
}
}
}
System.out.println("lenght of LCS= "+num[s1.length][s2.length]);
int s1position=s1.length,s2position=s2.length;
List<E> result=new LinkedList<E>();
while(s1position>0 && s2position>0){
if(s1[s1position-1].equals(s2[s2position-1])){
result.add(s1[s1position-1]);
s1position--;
s2position--;
}
else if(num[s1position][s2position-1]>=num[s1position-1][s2position]){
s2position--;
}
else{
s1position--;
}
}
Collections.reverse(result);
return result;
}