软件测试工程师的资料整理
如何解决死锁问题 原理:产生死锁的原因主要是
因为系统资源不足。
进程运行推进的顺序不合适。
资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
死锁的条件
互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。 循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。
处理死锁的策略
1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
2.检测死锁并且恢复。
3.仔细地对资源进行动态分配,以避免死锁。
4.通过破除死锁四个必要条件之一,来防止死锁产生。
有两个小组对同一个软件进行测试(测试的时间不清楚,软件的规模不清
楚),A组测试出50个Bug;B组测试出55个Bug,提交汇总后发现其中有25个是相同的;我的问题是:请你估算一下这个软件还有多少个Bug没被发现?
听一个同事说有次面试的时候主考官给他出了这样一道题,正好在很久以前
看到过类似的资料,这里给大家共享出来,看看这种算法合理不。
先说这个问题的答案是30,怎么算出来的呢?可以按照下面的公式:
可以估计出的软件的缺陷共有:50*55/25=110个
目前已经发现的有:50+55-25=80个
没有发现的bug有:110-80=30个
这个公式又是怎么得出来的呢,可以看看下面的推导过程:
B---组A和组B都发现的缺陷数
N1---组A发现的缺陷数
N2---组B发现的缺陷数
T---软件所有的缺陷数
根据原理:组A发现的缺陷数占总缺陷数的比例等于组A和组B都发现的缺陷
数占组B发现的缺陷数的比例,即N1/T=B/N2
上面的公式改变形式即:T= N1*N2/B(软件总bug数)
一个程序读入3个整数,a:输出最大值或最小值
A:最大值:(最小值把“>”替换为“<”,“max”替换为“min”)
#include
#definr max(x,y) (((x) > (y)) ? (x) : (y))
int main()
{
int a,b,c,d;
scanf(“%d,%d,%d”.&a,&b,&c);
d=max(a,max(b,c));
printf(“max=%d\n”,d)
}
白箱测试和黑箱测试是什么?什么是回归测试?
白盒测试是 测试人员要了解程序结构和处理过程,按照程序内部逻辑测试程序,检查程序中的每条通路是否按照预定要求正确工作.它主要的针对被测程序的源代码,测试着可以完全不考虑程序的功能.
白盒测试流程:源程序-->分析程序内部逻辑结构-->流程图-->制定测试用例-->被测程序-->执行路径-->覆盖情况分析
黑盒测试:主要是根据功能需求来测试程序是否按照预期工作,是要从用户的角度分析.尽量发现代码所表现的外部行为的错误.黑盒测试应该是由测试团队来完成的.根据某个给定的输入,应该能够理解并详细说明程序的预期输出.
黑盒测试流程:功能需求-->产生测试用例-->被测程序-->输出实际结果-->与预期结果比较-->分析功能是否实现.
回归测试:在对软件进行修正后进行的有选择的重新测试过程.一般要重复已用的测试用例.目的是检验软件在更改后所引起的错误,验证软件在修改后未引起不希望的有害效果.如果想成为一个比较好的软件测试工程师的话,以下这些条件是需要具备的:
1.你要有较好的编写代码的水平,最好是自己亲自独立完成过某软件的开发工作
2.需要对数据库有较为清楚的认识,以及会编写数据库脚本
3.了解至少2种以上的操作系统,并且对问题有较强的分析判断能力
5.集成测试通常都有那些策略?
1、在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
2、各个子功能组合起来,能否达到预期要求的父功能;
3、一个模块的功能是否会对另一个模块的功能产生不利的影响;
5、单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
请问单元测试、集成测试、系统测试的侧重点是什么?
单元测试的重点是系统的模块,包括子程序的正确性验证等。
集成测试的重点是模块间的衔接以及参数的传递等。
系统测试的重点是整个系统的运行以及与其他软件的兼容性。
软件测试工具有哪些?
AutoRunner是一款自动化测试工具。AutoRunner可以用来执行重复的手工测试。主要用于:功能测试、回归测试的自动化。它采用数据驱动和参数化的理念,通过录制用户对被测系统的操作,生成自动化脚本,然后让计算机执行自动化脚本,达到提高测试效率,降低人工测试成本。
TestCenter是一款功能强大的测试管理工具,它实现了:测试需求管理、测试用例管理、测试业务组件管理、测试计划管理、测试执行、测试结果日志察看、测试结果分析、缺陷管理,并且支持测试需求和测试用例之间的关联关系,可以通过测试需求索引测试用例。
7.一个缺陷测试报告的组成
缺陷的标题,缺陷的基本信息,复现缺陷的操作步骤,缺陷的实际结果描述,期望的正确结果描述,
注释文字和截取的缺陷图象。
8.基于WEB信息管理系统测试时应考虑的因素有哪些?
性能测试:1连接速度测试2负载测试3压力测试( 、
可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试)
9.软件本地化测试比功能测试都有哪些方面需要注意?
本地化测试需要注意翻译为目标语言后,是否符合当地人民的风俗习惯,文化风格。不要出现当地敏感的信息。
如果看不懂目标语言,就很简单了,只需要注意该翻译的都翻译了,不该翻译的没有被翻译,然后没有图片或文字的截断,翻译明显不合适的这些点就ok了。
此外还要大体的点一点功能,没有严重的功能问题,就可以了。
软件本地化测试的目的:
软件本地化测试的测试策略:1.本地化软件要在各种本地化操作系统上安装并测试。2.源语言软件安装在另一台相同源语言操作系统上,作为对比测试。3.重点测试因本地化引起的软件的功能和软件界面的
错误。4.
测试本地化软件的翻译质量。5.手工测试和自动测试相结合。
软件测试项目从什么时候开始,?为什么?
当接到一个开发项目是,软件测试就要介入,一般认为从需求分析开始!
你可以看看双V模型,国内游一部分公司采用这种模型进行软件开发、测试流程。
软件测试界有一句名言叫做:尽早了解被测系统!但是真正能做到这一点的又能有几个呢?!
11.需求测试注意事项有哪些?
一个良好的需求应当具有一下特点:
完整性:每一项需求都必须将所要实现的功能描述清楚,以使开发人员获得设计和实现这些功能所
需的所有必要信息。
正确性:每一项需求都必须准确地陈述其要开发的功能。
一致性:一致性是指与其它软件需求或高层(系统,业务)需求不相矛盾。
可行性:每一项需求都必须是在已知系统和环境的权能和限制范围内可以实施的`。
无二义性:对所有需求说明的读者都只能有一个明确统一的解释,由于自然语言极易导致二义性,
所以尽量把每项需求用简洁明了的用户性的语言表达出来。
健壮性:需求的说明中是否对可能出现的异常进行了分析,并且对这些异常进行了容错处理。
必要性:“必要性”可以理解为每项需求都是用来授权你编写文档的“根源”。要使每项需求都能回溯至
某项客户的输入,如Use Case或别的来源。
可测试性:每项需求都能通过设计测试用例或其它的验证方法来进行测试。
可跟踪性:应能在每项软件需求与它的根源和设计元素、源代码、测试用例之间建立起链接链,这种可跟踪性要求每项需求以一种结构化的,粒度好(f i n e - g r a i n e d )的方式编写并单独标明,而不
是大段大段的叙述。
有关内存的思考题
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:程序崩溃。
因为GetMemory 并不能传递动态内存,
Test 函数中的 str 一直都是 NULL。
strcpy(str, "hello world");将使程序崩
溃。
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:
(1) 能够输出hello
(2) 内存泄漏
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
简述软件生命周期有那些阶段
软件生命周期——需求分析——软件设计——程序编码——软件测试——运行维护
21、简述一下缺陷的生命周期
软件缺陷的生命周期指的是一个软件缺陷被发现、报告到这个缺陷被修复、验证直至最后关闭的完整过程。
简单的软件缺陷生命周期:
1、发现——打开:测试人员找到软件缺陷并将软件缺陷提交给开发人员;
2、打开——修复:开发人员再现、修复缺陷,然后提交测试人员去验证;
3、修复——关闭:测试人员验证修复过的软件,关闭已不存在的缺陷。
但是这是一种理想的状态,在实际的工作中是很难有这样的顺利的,需要考虑的各种情况都还是非常多的。
复杂的软件缺陷生命周期:
1、新建一个软件缺陷,这个软件缺陷是(open)状态,进行bug审查,不是代码问题,就是设计需要修改;
2、新建一个软件缺陷,这个软件缺陷是(open)状态,进行bug审查,以后修改的,就可以延期;
3、新建一个软件缺陷,这个软件缺陷是(open)状态,进行bug审查,实际没有这个bug,可以将其关闭;
4、新建一个软件缺陷,这个软件缺陷是(open)状态,看是否 清楚可重现,如果不能重现,就是缺少信息,需要返回到(open)状态;如果能够重现,就进行修正,修正后关闭,进行回归测试。
软件缺陷生命
、软件测试的目的?
答:测试的目的是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患带来的商业风险。
2、需求文档测试、设计文档测试?
需求文档测试:主要测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现;
设计文档测试:测试设计是否符合全部需求以及设计是否合理。
3、什么是软件测试?
答:软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
测试分析测试用例注意事项:
1、首先根据需求写出测试用例大纲(很重要:测试大纲的目的在于罗列出所有的测试点。当你测试大纲写完之后和项目组的人员讨论、研发、设计都需要参加、以确定不会因为理解偏差导致的遗漏或者是方向不对)
2、然后根据测试大纲开始编写完整的测试用例
3、在用例编写的时候进行分类(如:业务流程测
试,安装测试,功能测试,兼容性测试,安全性测试等等)4、设计测试用例的方法(等价类,边界值,因果图,流程分析,等等)
5、用例编写的时候需要考虑到用例的复用性。
6、设计用例的时候最好在有疑问的时候找人讨论(一个人的思维决定了你的用例颗粒度、换个思维你会发现用例有很多地方不足)
软件测试中的软件的缺陷等级如何划分
可以划分为 重大错误--严重错误--一般错误--轻微错误
也可以按照 S--A--B--C 来划分,这个东西不是死,并没有什么规定,只要你喜欢,你可以
用自己词语去划分,只要词语描述清晰即可