51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

楼主: 默默巫
打印 上一主题 下一主题

[活动]迎五一,庆周年,盖高楼(活动结束)

 关闭 [复制链接]

该用户从未签到

381#
发表于 2009-4-29 16:44:03 | 只看该作者
基于不同的立场,存在着两种完全不同的测试目的。从用户的角度出发,普遍希望通过软件测试暴露出软件中陷藏的错误和缺陷,以考虑是否可以接受该产品。而从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立用户对软件质量的信心。   

因为在程序中往往存在着许多预料不到的问题,可能会被疏漏,许多隐藏的错误只有在特定的环境下才可能暴露出来。如果不把着眼点放在尽可能查找错误这样一个基础上,这些隐藏的错误和缺陷就查不出来,会遗留到运行阶段中去。如果站在用户的角度替他们设想,就应当把测试活动的目标对准揭露程序中存在的错误。在选取测试用例时,考虑那些易于发现程序错误的数据。

下面这些规则也可以看作是测试的目的或定义:

1. 测试是为了发现程序中的错误而执行程序的过程;

2. 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;

3. 成功的测试是发现了至今为止尚未发现的错误的测试。

  从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。这和某些人通常想象的“测试是为了表明程序是正确的”,“成功的测试是没有发现错误的测试”等等是完全相反的。正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。   

由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。此外,应该认识到测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。
回复 支持 反对

使用道具 举报

该用户从未签到

382#
发表于 2009-4-29 16:44:31 | 只看该作者
白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。用白盒测试产生
的测试用例能够:
1 )保证一个模块中的所有独立路径至少被使用一次;
2 )对所有逻辑值均需测试 true 和 false ;
3 )在上下边界及可操作范围内运行所有循环;
4 )检查内部数据结构以确保其有效性。

“ 我们应该更注重于保证程序需求的实现,为什么要花费时间和精力来担心(和测试)逻辑细节? ” 答案在于软件自身的缺陷:
1 、逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。当我们设计和实现主流之外的功能、条件或控制时,错误往往开始
出现在我们工作中。日常处理往往被很好地了解,而 “ 特殊情况 ” 的处理则难于发现。
2 、我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的基础上被执行。程序的逻辑流有时是违反直觉的,这意味着
我们关于控制流和数据流的一些无意识的假设可能导致设计错误,只有路径测试才能发现这些错误。
3 、笔误是随机的。当一个程序被翻译为程序设计语言源代码时,有可能产生某些笔误,很多将被语法检查机制发现,但是,
其他的会在测试开始时才会被发现。笔误出现在主流上和不明显的逻辑路径上的机率是一样的。
回复 支持 反对

使用道具 举报

该用户从未签到

383#
发表于 2009-4-29 16:44:34 | 只看该作者
原帖由 walker1020 于 2009-4-29 15:59 发表


根据多数人的观点,LoadRunner是性能测试工具,不是自动化测试工具。莫非你说的是 winRunner?


版主,不好意思,急着发贴中奖。没表述清楚。
我的意思是自动化测试工具包括性能测试工具和功能测试工具,qtp,winRunner,silktest都属于功能测试工具,Loadrunner是性能测试工具。我觉得这些应该都属于自动化测试工具吧!

评分

参与人数 1综合技术指数 +15 收起 理由
默默巫 + 15 楼层尾数为5的参与奖

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

384#
发表于 2009-4-29 16:44:43 | 只看该作者
软件测试充分性准则

( 1 )空测试对任何软件都是不充分的。
( 2 )对任何软件都存在有限的充分测试集合。
( 3 )如果一个软件系统在一个测试数据集合上的测试是充分的,那么再多测试一些数据也应该是充分的。这一特性称为单调性。
( 4 )即使对软件所有成分都进行了充分的测试,也并不意味着整个软件的测试已经充分了。这一特性称为非复合性。
( 5 )即使对一个软件系统整体的测试是充分的,也并不意味着软件系统中各个成分都已经充分地得到了测试。这个特性称为非分解性。
( 6 )软件测试的充分性应该与软件的需求和软件的实现都相关。
( 7 )软件越复杂,需要的测试数据就越多。这一特性称为复杂性。
( 8 )测试得越多,进一步测试所能得到的充分性增长就越少。这一特性称为回报递减率。
回复 支持 反对

使用道具 举报

该用户从未签到

385#
发表于 2009-4-29 16:46:27 | 只看该作者
单个软件模块测试正确之后,将所有模块集成起来进行测试。本阶段主要是找出各模块之间数据传递和系统组成后的逻辑结构的错误。在宿主机上采用黑盒与白盒相结合的方法进行测试,要最大限度地模拟实际运行环境,可以屏蔽掉一些不影响系统执行的和数据传递的难以模拟的函数。集成测试是模块化设计软件的测试优点充分体现的阶段。集成测试前,应该由程序员根据模块之间的数据的输入输出编写模块接口函数,这需要负责不同软件模块的程序员共同协调完成,然后将模块接口函数集成到接收数据模块的入口处。由前面的分析可知,单链路数据传递的软件模块集成测试时容易定位错误所在的软件模块。一个软件模块的数据不一定只有另外一个模块提供,即软件模块的数据链路不一定只是单链路的,测试时可以把复杂链路结构的数据传递划分为单链路结构数据传送进行错误定位。修改输出数据的软件模块时,可能导致输入数据的软件模块引入新的错误,因此在这里引入关联矩阵确定修改某一模块后需要重要测试的模块。假定模块化设计的嵌入式系统软件由软件模块Ai(i=1,2,…,m,n)组成,m表示矩阵的行号,n表示矩阵的列号。图5所示的矩阵即为其关联矩阵。在关联矩阵中,Aij=1表示Aj接受了Ai输出的数据,故修改了Ai重新测试Ai的同时也需重新测试Aj。集成测试是在拥有程序设计文档、程序结构和数据结构时,对软件模块在集成中出现的错误进行测试。集成测试时,根据模块接口函数定位错误修改代码,根据关联矩阵确定重新测试的软件模块。图6给出了模块化设计的嵌入式软件集成测试模型。
回复 支持 反对

使用道具 举报

该用户从未签到

386#
发表于 2009-4-29 16:47:00 | 只看该作者
哈哈,不小心中了个参与奖。。:)
回复 支持 反对

使用道具 举报

该用户从未签到

387#
发表于 2009-4-29 16:47:14 | 只看该作者
集成测试完成后,退出宿主机测试环境,把系统移植到目标机上来,完成应用到现场环境中,从用户的角度对系统进行黑盒测试,验证每一项具体的功能。由于测试者对程序内容程序执行情况一无所知,因此本测试阶段的错误定位比较困难。系统测试阶段应该进行意外测试和破坏性测试,即测试系统正常执行情况下不该发生的激发活动和人为的破坏性的测试,进一步验证系统性能。系统测试阶段不应该确定错误后立即修改代码,应根据一定的错误发生频率,确定测试周期,在每个测试周期结束时修改代码,进行反复测试;否则,不但增加了完全测试的任务量,而且降低了测试的可信度。
回复 支持 反对

使用道具 举报

该用户从未签到

388#
发表于 2009-4-29 16:47:47 | 只看该作者
测试结果的分析可以定位错误,指导程序员修改代码,同时指出测试进行的程序并进一步指明测试方向。测试结果的分析是一个由测试结果和测试预得结果进行分析、比较和定位错误的过程。测试结果的分析是一次测试的最后环节,分析时应该考虑软件的运行环境和实际运行环境的差异以及各种外界因素的影响等。
回复 支持 反对

使用道具 举报

该用户从未签到

389#
发表于 2009-4-29 16:48:06 | 只看该作者
测试用例是为了测试目标程序设计的包括输入项和预得结果的一种文件,根据测试环境和测试目标程序的不同,可分为某种格式的文档或某种输入行为(如一次按键)等。测试用例的构造要尽可能覆盖所有可能的取值范围,使测试尽可能地覆盖所有程序代码,提高代码的测试覆盖率,同时又不作多余、重复和无意义的测试。在嵌入式软件测试的不同阶段,要构造不同的测试用例;在系统平台测试阶段,要构造针对系统任务调度、实时性能和底层驱动程序的测试用例;在模块测试阶段,应构造针对某一模块进行测试的测试用例;在集成测试阶段,针对系统集成时数据传递、结构斜接的问题构造相应的测试用例;在系统 测试阶段,要构造针对某项功能的或多项功能结合在一起的测试用例,或使用已经在同类产品上已经验证正确的测试用例。测试用例是可复用的。此外大型的软件开发过程中,测试用例的种类繁多,应该按一定的方法进行管理。用数据库的来管理测试用例是一个很好的选择。根据测试阶段将测试用例进行划分,然后用关键字唯一确定。这样在使用、修改和保存测试用例时都很方便,直接用查询的方式就可以调出测试用例。
回复 支持 反对

使用道具 举报

该用户从未签到

390#
发表于 2009-4-29 16:48:21 | 只看该作者
数控系统软件测试

  本数控系统采用ARM7处理器,操作系统采用μC/OS实时操作系统,是一个典型的嵌入式系统。由于数控系统较为复杂,开发过程中将任务进行了详细的划分,软件的开发采用模块化开发。模块的划分及数据流向如图7所示。开发过程中,几个模块由不同的程序员分别进行编码,分别由程序员进行模块测试,并按白盒测试的方法进行覆盖测试。最后集成测试前,根据关联矩阵,程序员协作编写了模块接口函数F(A1-A2)、F(A1-A4)、F(A1-A5)、F(A1-A6)、F(F2-A3)、F(A3-A4)、F(A4-A5)、F(F5-A6)、F(A6-A2),然后根据图6所示的测试模型和图8所示的关联矩阵对系统进行了集成测试。分析可知,一些关键模块,如译码模块和刀补模块的测试代码覆盖率达到90%之上。图9所示的整个系统经过系统测试之后性能稳定,图10为其加工的零件,目前该系统已经小批量生产。
回复 支持 反对

使用道具 举报

该用户从未签到

391#
发表于 2009-4-29 16:48:55 | 只看该作者
图形用户界面( GUI )对软件测试提出了有趣的挑战,因为 GUI 开发环境有可复用的构件,开发用户界面更加省时而且更加精确。
同时, GUI 的复杂性也增加了,从而加大了设计和执行测试用例的难度。因为现在 GUI 设计和实现有了越来越多的类似,
所以也就产生了一系列的测试标准。
回复 支持 反对

使用道具 举报

该用户从未签到

392#
发表于 2009-4-29 16:49:13 | 只看该作者
客户 / 服务器软件的测试发生在三个不同的层次:
( 1 )个体的客户端应用以 “ 分离的 ” 模式被测试 —— 不考虑服务器和底层网络的运行;
( 2 )客户端软件和关联的服务器端应用被一起测试,但网络运行不被明显的考虑;
( 3 )完整的 C/S 体系结构,包括网络运行和性能,被测试。
回复 支持 反对

使用道具 举报

该用户从未签到

393#
发表于 2009-4-29 16:49:25 | 只看该作者
单元测试的内容

模块接口测试:对通过被测模块的数据流进行测试。为此,对模块接口,包括参数表、调用子模块的参数、全程数据、文件输入/输出操作都必须检查。

局部数据结构测试:设计测试用例检查数据类型说明、初始化、缺省值等方面的问题,还要查清全程数据对模块的影响。

路径测试:选择适当的测试用例,对模块中重要的执行路径进行测试。对基本执行路径和循环进行测试可以发现大量路径错误。

错误处理测试:检查模块的错误处理功能是否包含有错误或缺陷。例如,是否拒绝不合理的输入;出错的描述是否难以理解、是否对错误定位有误、是否出错原因报告有误、是否对错误条件的处理不正确;在对错误处理之前错误条件是否已经引起系统的干预等。

边界测试:要特别注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。

此外,如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。这类信息对进行性能评价是十分有用的。

评分

参与人数 1综合技术指数 +15 收起 理由
默默巫 + 15 楼层尾数为5的参与奖

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

394#
发表于 2009-4-29 16:49:50 | 只看该作者
从管理的角度而言,在有限的时间内,在人员有限甚至短缺的情况下,要考虑如何分工,如何合理地利用资源来开展测试。当然还要考虑以下问题:

1.  当测试人员测试的执行不到位、敷衍了事时该如何解决?

2.  测试效率问题,怎样提高测试效率?

3.  根据版本的不同特点是只做验证测试还是采取冒烟测试亦或是系统全面测试?

4.  当测试过程中遇到一些偶然性随机问题该怎样处理?

5.  当版本中出现很多新问题时该怎样对待?测试停止标准?

6.  ……

总之,测试执行过程中会遇到很多复杂的问题,还是那句话,具体问题具体解决
回复 支持 反对

使用道具 举报

该用户从未签到

395#
发表于 2009-4-29 16:50:18 | 只看该作者
单元测试的步骤

通常单元测试在编码阶段进行。在源程序代码编制完成,经过评审和验证,确认没有语法错误之后,就开始进行单元测试的测试用例设计。利用设计文档,设计可以验证程序功能、找出程序错误的多个测试用例。对于每一组输入,应有预期的正确结果。

模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与被测模块相联系的其它模块。这些辅助模块分为两种:

驱动模块:相当于被测模块的主程序。它接收测试数据,把这些数据传送给被测模块,最后输出实测结果。

桩模块:用以代替被测模块调用的子模块。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不允许什么事情也不做。

被测模块、与它相关的驱动模块及桩模块共同构成了一个“测试环境”。
回复 支持 反对

使用道具 举报

该用户从未签到

396#
发表于 2009-4-29 16:51:01 | 只看该作者
LAODRUNNER8.1 作为专业的性能测试工具,通过模拟成千上万的用户对被测应用进行操作和请求,在实验室环境中精确重现生产环境中任意可能出现的业务压力,然后通过在测试过程中获取的信息和数据来确认和查找软件的性能问题,分析性能瓶颈.
LOADRUNNER提供了三个大主要模块,这三个模块既可以作为独立的工具分别完成各自的功能,又可以作为LOADRUNNER的一部分彼此衔接,与其他模块共同完成软件性能的整体测试.这三大模块主要是:
        VITUAL USER GENERATOR--------用于录制脚本
        MERCURY LOADRUNNER CONTROLLER---------用于创建,运行和监视场景
        MERCURY LOADRUNNER ANALYSIS--------用于分析测试结果;
回复 支持 反对

使用道具 举报

该用户从未签到

397#
发表于 2009-4-29 16:51:21 | 只看该作者
LOADRUNNER脚本的开发过程一般需要以下几个过程
        使用LOADRUNNER的VIRTUAL USER GENERATOR录制基本的测试脚本;
        根据系统需求编辑测试脚本,看能否通过,
        在单机模式下运行脚本看能否通过,
1.选择协议
要想正确的选择LOADRUNNER的脚本协议,首先要从LOADRNNER的工作原理上深入理解协议的作用和意义。LOADRUNER启动后,在任务栏上会有一个LOADRNNER AGENT PROCESS的进程,这个进程的一项重要的工作就是监视各种协议的客户端和服务器端的通信。只要是能够支持的协议,LOADRUNNER在录制的过程中就可以通过脚本语言将通信过程录制下来。所以只要明确了被测软件的通信过程和所使用的协议,LOADRUNNER才能正确的录制脚本。对于常见的应用软件,我们可以根据被测应用是B/S结构还是C/S结构来选择协议;
        对于B/S结构,可以选择WEB(HTTP/HTTML)协议;
        对于C/S结构,可以根据后端数据库的类型来选择,如SYBASECTLIB协议用于测试后台数据库为SYBASE的应用,MS SQL SERVER协议用于测试后台数据库为SQL SERVER的应用;
        对于没有数据库的WINDOWS应用,可以选择WINDOWS SOCKETS这个底层的协议;
这里需要说明的是,无论使用哪种协议,LOADRUNNER的测试流程都基本是一样的,只有在设定细节上有所不同,测试人员只要对被测应用的技术架构熟悉了,就能够成功完成脚本的录制。
回复 支持 反对

使用道具 举报

该用户从未签到

398#
发表于 2009-4-29 16:51:41 | 只看该作者
小概率BUG的验证:

  1. 小概率BUG的验证应当由发现此BUG的测试人员来进行。

  2. 若小概率BUG相对轻微,在产品经理确认不必修改时,可以将其关闭或保留。

  3. 若小概率BUG在验证时再次发生,应及时通知开发人员。

  4. 小概率BUG连续验证3轮之后没有发生(每轮验证根据BUG的复杂度可分为20-50次),可将其关闭。

  5. 对于特别严重,而开发人员又束手无策的小概率BUG,在条件允许的情况下,可让开发人员发布T版本来进行测试。

  6. 对于特别严重的,而开发人员又未确认修改的小概率BUG,可在风险中提出此小概率BUG风险。
回复 支持 反对

使用道具 举报

该用户从未签到

399#
发表于 2009-4-29 16:51:48 | 只看该作者
多用户同时加载并发,并发过程仅仅体现在开始执行的那一刹那,随着服务器对请求的响应时间的不一致或系统环境条件的限制,在运行过程中能集合到一点的可能性微乎其微,所以将一定数量的用户同时加载并不是真正意义上的并发.
系统压力最大的情况是:所有用户都集中到系统瓶颈的某个点上进行操作,从脚本的角度来讲,这个点就是执行脚本的某一条或一段语句,为了真实模拟这个最坏的情况,查看系统在最坏情况下的反映,LOADRUNNER提供了集合点的功能,帮助测试人员实现真正意义上的并发.
使用LOADRUUNER实现集合点功能的方法如下:
        在脚本准备访问的语句上面插入一个空白行,并将光标移到该空白行上;
        选择INSERT|RENDEZVOUS命令,系统弹出RENDEZVOUS对话框,
        输入集合点名称后点击OK按钮.
系统会自动在脚本中插入下面语句
LR_RENDEZVOUS(“集合点名称”)
这样的脚本在运行的时候,就可以在集合点处实现真正的并发了.运行带有集合点的脚本时可以在SCENARIO GROUP列表的RENDEZ一栏看到虚拟用户的聚集过程.
需要说明的是,这部分内容仅介绍了如何在LOADRUNNER的脚本中插入集合点,LOADRUNNER允许测试人员对集合点的执行过程进行更详细的设定,如聚集的用户数,系统等待时间和等待策略等.
回复 支持 反对

使用道具 举报

该用户从未签到

400#
发表于 2009-4-29 16:52:26 | 只看该作者
验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。(Do the right thing)
  1.确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;
  2.程序正确性的形式证明,即采用形式理论证明程序符号设一计规约规定的过程;
  3.评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-18 22:25 , Processed in 0.080464 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表