📄 200602271215442.html
字号:
<html>
<head><title>软件测试</title></head>
<center><h1>软件测试</h1></center>
<div><P align=right><FONT face=Verdana><FONT color=#f70938><FONT face=黑体><a href="200604112229525.html" tppabs="http://www.itisedu.com/phrase/200604112229525.html" target="_new">中科永联</a>高级技术培训中心(</FONT><FONT face=黑体>www.itisedu.com</FONT><FONT face=黑体>)<IMG src="200632885251256.jpg" tppabs="http://www.itisedu.com/manage/Upload/image/200632885251256.jpg" border=0></FONT></FONT><FONT face=Verdana><STRONG></STRONG></FONT></FONT></P>
<P> <FONT face=Verdana><a href="200602271215442.html" tppabs="http://www.itisedu.com/phrase/200602271215442.html" target="_new">软件测试</a>是<a href="200603282233345.html" tppabs="http://www.itisedu.com/phrase/200603282233345.html" target="_new">软件开发</a>过程的重要组成部分,是用来确认一个<a href="200604232224305.html" tppabs="http://www.itisedu.com/phrase/200604232224305.html" target="_new">程序</a>的品质或性能是否符合开发之前所提出的一些要求。</FONT><a href="200604232134205.html" tppabs="http://www.itisedu.com/phrase/200604232134205.html" target="_new">软件</a>测试就是在软件投入运行前,对<a href="200603061756235.html" tppabs="http://www.itisedu.com/phrase/200603061756235.html" target="_new">软件需求</a>分析、设计规格说明和编码的最终<a href="200604161505135.html" tppabs="http://www.itisedu.com/phrase/200604161505135.html" target="_new">复审</a>,是<a href="200603081234105.html" tppabs="http://www.itisedu.com/phrase/200603081234105.html" target="_new">软件质量保证</a>的关键步骤。软件测试是为了发现错误而执行程序的过程。软件测试在软件生存期中横跨两个阶段:通常在编写出每一个模块之后就对它做必要的测试(称为<a href="200602281036115.html" tppabs="http://www.itisedu.com/phrase/200602281036115.html" target="_new">单元测试</a>)。编码和单元测试属于软件生存期中的同一个阶段。在结束这个阶段后对<a href="200602281706245.html" tppabs="http://www.itisedu.com/phrase/200602281706245.html" target="_new">软件系统</a>还要进行各种综合测试,这是软件生存期的另一个独立阶段,即测试阶段。</P>
<P>
<P><FONT face=Verdana></FONT></P><FONT face=Verdana><STRONG>一、软件测试的目的</STRONG>
<P></P>
<P><FONT face=Verdana> 软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right)。</FONT></P>
<P><FONT face=Verdana> 第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息。</FONT></P>
<P><FONT face=Verdana> 第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个目的是保证整个软件开发过程是高质量的。</FONT></P>
<P><FONT face=Verdana> 软件质量是由几个方面来衡量的:一、在正确的时间用正确的的方法把一个工作做正确(Doing the right things right at the right time.)。二、符合一些应用标准的要求,比如不同国家的用户不同的操作习惯和要求,项目工程中的可维护性、可测试性等要求。三、质量本身就是软件达到了最开始所设定的要求,而代码的优美或精巧的技巧并不代表软件的高质量(Quality is defined <a href="200604232104015.html" tppabs="http://www.itisedu.com/phrase/200604232104015.html" target="_new">as</a> conformance to requirements, not as “goodness” or “elegance”.)。四、质量也代表着它符合客户的需要(Quality also means “meet customer needs”.)。作为软件测试这个行业,最重要的一件事就是从客户的<a href="200603101518295.html" tppabs="http://www.itisedu.com/phrase/200603101518295.html" target="_new">需求</a>出发,从客户的角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题。只有这些问题都解决了,软件产品的质量才可以说是上去了。</FONT></P><FONT face=Verdana>
<P><FONT face=Verdana> 测试人员在软件开发过程中的任务:</FONT></P>
<P><FONT face=Verdana> 1、寻找Bug;<BR> 2、避免软件开发过程中的缺陷;<BR> 3、衡量软件的品质;<BR> 4、关注用户的需求。</FONT></P>
<P><FONT face=Verdana> 总的目标是:确保软件的质量。</FONT></P></FONT>
<P><STRONG>二、软件测试的原则</STRONG></P>
<P><BR> 软件测试从不同的角度出发会派生出两种不同的测试原则,从用户的角度出发,就是希望通过软件测试能充分暴露软件中存在的问题和缺陷,从而考虑是否可以接受该产品,从开发者的角度出发,就是希望测试能表明软件产品不存在错误,已经正确地实现了用户的需求,确立人们对软件质量的信心。</P>
<P> 为了达到上述的原则,那么需要注意以下几点:<BR>1.应当把“尽早和不断的测试”作为开发者的座右铭<BR>2.程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完。<BR>3.设计<a href="200603291707535.html" tppabs="http://www.itisedu.com/phrase/200603291707535.html" target="_new">测试用例</a>时应该考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。<BR>4.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。<BR>5.对测试错误结果一定要有一个确认的过程,一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。<BR>6.制定严格的测试计划,并把测试时间安排的尽量宽松,不要希望在极短的时间内完成一个高水平的测试。<BR>7.<a href="200603120943595.html" tppabs="http://www.itisedu.com/phrase/200603120943595.html" target="_new">回归测试</a>的关联性一定要引起充分的注意,修改一个错误而引起更多的错误出现的现象并不少见。<BR>8.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。</P>
<P><BR><STRONG>三、软件测试的<a href="200603090845215.html" tppabs="http://www.itisedu.com/phrase/200603090845215.html" target="_new">对象</a></STRONG></P>
<P> 软件测试并不等于程序测试。软件测试应该贯穿整个软件定义与开发整个期间。因此<a href="200603062220345.html" tppabs="http://www.itisedu.com/phrase/200603062220345.html" target="_new">需求分析</a>、概要设计、详细设计以及程序编码等各阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应该是软件测试的对象。 </P>
<P> 在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节发生了问题都可能在软件测试中表现出来。 </P>
<P><BR><STRONG>四、软件测试方法</STRONG> <BR> <BR> <BR>软件测试的基本方法 <BR>单元测试的基本方法<BR>综合测试的基本方法<BR><a href="200603291526545.html" tppabs="http://www.itisedu.com/phrase/200603291526545.html" target="_new">确认测试</a>的基本方法<BR><a href="200603111950135.html" tppabs="http://www.itisedu.com/phrase/200603111950135.html" target="_new">系统测试</a>的基本方法<BR>软件测试的基本方法</P>
<P> 软件测试的方法和技术是多种多样的。<BR> 对于软件测试技术,可以从不同的角度加以分<a href="200603090857555.html" tppabs="http://www.itisedu.com/phrase/200603090857555.html" target="_new">类</a>:</P>
<P> 从是否需要执行被测软件的角度,可分为静态测试和动态测试。<BR> 从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为<a href="200603101705575.html" tppabs="http://www.itisedu.com/phrase/200603101705575.html" target="_new">白盒测试</a>和<a href="200603101655385.html" tppabs="http://www.itisedu.com/phrase/200603101655385.html" target="_new">黑盒测试</a>;</P>
<P>1、黑盒测试</P>
<P> 黑盒测试也称<a href="200604241204115.html" tppabs="http://www.itisedu.com/phrase/200604241204115.html" target="_new">功能测试</a>或<a href="200604241204265.html" tppabs="http://www.itisedu.com/phrase/200604241204265.html" target="_new">数据驱动测试</a>,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如<a href="200602271218062.html" tppabs="http://www.itisedu.com/phrase/200602271218062.html" target="_new">数据库</a>或<a href="200602282323195.html" tppabs="http://www.itisedu.com/phrase/200602282323195.html" target="_new">文件</a>)的完整性。黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等,主要用于软件确认测试。 “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。</P>
<P>2、白盒测试</P>
<P> 白盒测试也称<a href="200604240856565.html" tppabs="http://www.itisedu.com/phrase/200604240856565.html" target="_new">结构测试</a>或<a href="200604240856395.html" tppabs="http://www.itisedu.com/phrase/200604240856395.html" target="_new">逻辑驱动测试</a>,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。</P>
<P> “白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。</P>
<P>3.ALAC(Act-like-a-customer)测试</P>
<P> </P>
<P> ALAC测试是一种基于客户使用产品的知识开发出来的测试方法。ALAC测试是基于复杂的软件产品有许多错误的原则。最大的受益者是用户,缺陷查找和改正将针对哪些客户最容易遇到的错误。</P>
<P>单元测试的基本方法</P>
<P>单元测试的对象是软件设计的最小单位模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试<a href="200604240937105.html" tppabs="http://www.itisedu.com/phrase/200604240937105.html" target="_new">用例</a>,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。<BR>单元测试任务</P>
<P> 单元测试任务包括:1 模块接口测试;2 模块局部数据结构测试;3 模块边界条件测试;4 模块中所有独立执行通路测试;5 模块的各条错误处理通路测试。</P>
<P> 模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试接口正确与否应该考虑下列因素:<BR> 1 输入的实际参数与形式参数的个数是否相同;<BR> 2 输入的实际参数与形式参数的属性是否匹配;<BR> 3 输入的实际参数与形式参数的量纲是否一致;<BR> 4 调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;<BR> 5 调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;<BR> 6调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;<BR> 7 调用预定义函数时所用参数的个数、属性和次序是否正确;<BR> 8 是否存在与当前入口点无关的参数引用;<BR> 9 是否修改了只读型参数;<BR> 10 对全程变量的定义各模块是否一致;<BR> 11是否把某些约束作为参数传递。</P>
<P> 如果模块内包括外部输入输出,还应该考虑下列因素:<BR> 1 文件属性是否正确;<BR> 2 OPEN/CLOSE语句是否正确;<BR> 3 格式说明与输入输出语句是否匹配;<BR> 4缓冲区大小与记录长度是否匹配;<BR> 5文件使用前是否已经打开;<BR> 6是否处理了文件尾;<BR> 7是否处理了输入/输出错误;<BR> 8输出信息中是否有文字性错误;</P>
<P> 检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:<BR> 1 不合适或不相容的<a href="200603051002565.html" tppabs="http://www.itisedu.com/phrase/200603051002565.html" target="_new">类型</a>说明;<BR> 2变量无初值;<BR> 3变量初始化或省缺值有错;<BR> 4不正确的变量名(拼错或不正确地截断);<BR> 5出现上溢、下溢和地址异常。</P>
<P> 除了局部数据结构外,如果可能,单元测试时还应该查清全局数据(例如FORTRAN的公用区)对模块的影响。</P>
<P> 在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基本路径测试和循环测试是最常用且最有效的测试技术。计算中常见的错误包括:<BR> 1 误解或用错了算符优先级;<BR> 2混合类型运算;<BR> 3变量初值错;<BR> 4精度不够;<BR> 5表达式符号错。</P>
<P> 比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:<BR> 1不同数据类型的对象之间进行比较;<BR> 2错误地使用逻辑运算符或优先级;<BR> 3因<a href="200603021438435.html" tppabs="http://www.itisedu.com/phrase/200603021438435.html" target="_new">计算机</a>表示的局限性,期望理论上相等而实际上不相等的两个量相等;<BR> 4比较运算或变量出错;<BR> 5循环终止条件或不可能出现;<BR> 6迭代发散时不能退出;<BR> 7错误地修改了循环变量。</P>
<P> 一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题:<BR> 1输出的出错信息难以理解;<BR> 2记录的错误与实际遇到的错误不相符;<BR> 3在程序自定义的出错处理段运行之前,系统已介入;<BR> 4异常处理不当;<BR> 5错误陈述中未能提供足够的定位出错信息。</P>
<P> 边界条件测试是单元测试中最后,也是最重要的一项任务。众的周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。</P>
<P>单元测试过程</P>
<P> 一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。在确定测试用例的同时,应给出期望结果。</P>
<P> 应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),下图显示了一般单元测试的环境。驱动模块在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,“主程序”打印“进入-退出”<a href="200603090938465.html" tppabs="http://www.itisedu.com/phrase/200603090938465.html" target="_new">消息</a>。</P>
<P> 驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,但它需要一定的开发费用。若驱动和桩模块比较简单,实际开销相对低些。遗憾的是,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用下面讨论的综合测试方法。</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -