﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C++ Programmer's Cookbook-随笔分类-soft test</title><link>http://www.cppblog.com/mzty/category/1814.html</link><description>&lt;br/&gt;  
&lt;br/&gt;
&lt;a href = "http://www.cppblog.com/mzty/archive/2007/03/02/19109.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C++ 基础}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/08/13/29922.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C++ 高级}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/04/16/22064.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{C#界面，C++核心算法}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "http://www.cppblog.com/mzty/archive/2007/03/04/19163.html"&gt;&lt;font size = 5 color ="#00FFFF"&gt;{设计模式}&lt;font/&gt;&lt;/a&gt;

&lt;a href = "
http://www.cppblog.com/mzty/archive/2007/03/04/19167.html"&gt;&lt;font size = 5 color ="#FF0000"&gt;{C#基础}&lt;font/&gt;&lt;/a&gt;





</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 14:35:03 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 14:35:03 GMT</pubDate><ttl>60</ttl><item><title>软件测试试题</title><link>http://www.cppblog.com/mzty/archive/2006/06/09/8332.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 09 Jun 2006 04:34:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/06/09/8332.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/8332.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/06/09/8332.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/8332.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/8332.html</trackback:ping><description><![CDATA[
		<h1 class="block_title">
				<a id="viewpost1_TitleUrl" href="http://mayingbao.cnblogs.com/archive/2006/06/07/419225.html">
				</a> </h1>
		<div class="post">
				<div class="postcontent">
						<br />
						<br />
						<br />【5-1】从供选择的答案中选出应填入下列(   )中的字句。<br />软件测试的目的是（ A ）。为了提高测试的效率，应该（ B ）。使用白盒测试方法时，确定测试数据应根据（ C ）和指定的覆盖标准。与设计测试数据无关的文档是（ D ）。<br />软件的集成测试工作最好由（ E ）承担，以提高集成测试的效果。<br />供选择的答案：<br />A.      ① 评价软件的质量                        ② 发现软件的错误<br />③ 找出软件中的所有错误            ④ 证明软件是正确的<br />B.      ① 随机地选取测试数据                  <br />② 取一切可能的输入数据作为测试数据<br />③ 在完成编码以后制定软件的测试计划<br />④ 选择发现错误的可能性大的数据作为测试数据<br />C.      ① 程序的内部逻辑                        ② 程序的复杂程度<br />③ 使用说明书                        ④ 程序的功能<br />D.      ① 该软件的设计人员                  ② 程序的复杂程度<br />③ 源程序                              ④ 项目开发计划<br />E.      ① 该软件的设计人员                  ② 该软件开发组的负责人<br />③ 该软件的编程人员                  ④ 不属于该软件开发组的软件设计人员<br />【5-2】请从供选择的答案中选出应填入下列（   ）中的字句。<br />程序的三种基本控制结构是（ A ）。它们的共同点是（ B ）。结构化程序设计的一种基本方法是（ C ）。软件测试的目的是（ D ）。软件调试的目的是（ E ）。<br />供选择的答案：<br />A.      ① 过程，子程序，分程序                  ② 顺序，条件，循环<br />③ 递归，堆栈，队列                        ④ 调用，返回，转移<br />B.      ① 不能嵌套使用                              ② 只能用来写简单的程序<br />③ 已经用硬件实现                              ④ 只有一个入口和一个出口<br />C.      ① 筛选法            ② 递归法            ③ 归纳法            ④ 逐步求精法<br />D.      ① 证明程序中没有错误                  ② 发现程序中的错误<br />③ 测量程序的动态特性                  ④ 检查程序中的语法错误<br />E.      ① 找出错误所在并改正之                  ② 排除存在错误的可能性<br />③ 对错误性质进行分类                  ④ 统计出错的次数 <br />【5-3】从下列关于软件测试的叙述中，选出5条正确的叙述。<br />(1) 用黑盒法测试时，测试用例是根据程序内部逻辑设计的。<br />(2) 尽量用公共过程或子程序去代替重复的代码段。<br />(3) 测试是为了验证该软件已正确地实现了用户的要求。<br />(4) 对于连锁型分支结构，若有n个判定语句，则有2n条路径。<br />(5) 尽量采用复合的条件测试，以避免嵌套的分支结构。<br />(6) GOTO语句概念简单，使用方便，在某些情况下，保留GOTO语句反能使写出的程序更加简洁。<br />(7) 发现错误多的程序模块，残留在模块中的错误也多。<br />(8) 黑盒测试方法中最有效的是因果图法。<br />(9) 在做程序的单元测试时，桩（存根）模块比驱动模块容易编写。<br />(10) 程序效率的提高主要应通过选择高效的算法来实现。<br />【5-4】从供选择的答案中选出同下列关于软件测试的各条叙述关系最密切的字句。<br />(1) 对可靠性要求很高的软件，例如操作系统，由第三者对源代码进行逐行检查。<br />(2) 已有的软件被改版时，由于受到变更的影响，改版前正常的功能可能发生异常，性能也可能下降。因此，对变更的软件进行测试是必要的。<br />(3) 在意识到被测试模块的内部结构或算法的情况下进行测试。<br />(4) 为了确认用户的需求，先做出系统的主要部分，提交给用户试用。<br />(5) 在测试具有层次结构的大型软件时，有一种方法是从上层模块开始，由上到下进行测试。此时，有必要用一些模块替代尚未测试过的下层模块。<br />供选择的答案：<br />A  E：      ① 仿真器         ② 代码审查   ③ 模拟器       ④ 桩             ⑤ 驱动器 <br />⑥ 域测试       ⑦ 黑盒测试       ⑧ 原型               ⑨ 白盒测试       ⑩ 退化测试<br />【5-5】对小的程序进行穷举测试是可能的，用穷举测试能否保证程序是百分之百正确呢？<br />【5-6】在任何情况下单元测试都是可能的吗？都是需要的吗？<br />【5-7】从供选择的答案中选出应填入下面有关软件测试的叙述的（   ）内的正确答案。<br />软件测试方法可分为黑盒测试法和白盒测试法两种。<br />黑盒测试法是通过分析程序的（ A ）来设计测试用例的方法。除了测试程序外，它还适用于对（ B ）阶段的软件文档进行测试。<br />白盒测试法是根据程序的（ C ）来设计测试用例的方法。除了测试程序外，它也适用于对（ D ）阶段的软件文档进行测试。<br />白盒法测试程序时常按照给定的覆盖条件选取测试用例。（ E ）覆盖比（ F ）覆盖严格，它使得每一个判定的每一条分支至少经历一次。（ G ）覆盖既是判定覆盖，又是条件覆盖，但它并不保证使各种条件都能取到所有可能的值。（ H ）覆盖比其他条件都要严格，但它不能保证覆盖程序中的每一条路径。<br />单元测试一般以（ I ）为主，测试的依据是（ J ）。<br />供选择的答案：<br />A, C：① 应用范围      ② 内部逻辑        ③ 功能            ④ 输入数据<br />B, D：① 编码              ② 软件详细设计      ③ 软件总体设计 ④ 需求分析<br />E, F, G, H：① 语句      ② 判定            ③ 条件            ④ 判定/条件<br />⑤ 多重条件      ⑥ 路径<br />I：① 白盒法          ② 黑盒法<br />J：① 模块功能规格说明      ② 系统模块结构图      ③ 系统需求规格说明<br />【5-8】从供选择的答案中选出应该填入下列关于软件测试的叙述的( )内的正确答案。<br />软件测试中常用的静态分析方法是（ A ）和（ B ）。（ B ）用于检查模块或子程序间的调用是否正确。分析方法（白盒方法）中常用的方法是（ C ）方法。非分析方法（黑盒方法）中常用的方法是（ D ）方法和（ E ）方法。（ E ）方法根据输出对输入的依赖关系设计测试用例。<br />供选择的答案：<br />A  B：      ① 引用分析         ② 算法分析       ③ 可靠性分析       ④ 效率分析 <br />         ⑤ 接口分析         ⑥ 操作分析<br />C ~ E：      ① 路径测试   ② 等价类       ③ 因果图       ④ 归纳测试<br />⑤ 综合测试   ⑥ 追踪             ⑦ 深度优先       ⑧ 调试<br />⑨ 相对图<br /><font face="Arial">【5-9】下面是选择排序的程序，其中datalist是数据表，它有两个数据成员：一是元素类型为Element的数组V，另一个是数组大小n。算法中用到两个操作，一是取某数组元素V</font><font face="Arial">的关键码操作getKey ( )，一是交换两数组元素内容的操作Swap( )：： <br />      void SelectSort ( datalist &amp; list ) {<br />      //对表list.V[0]到list.V[n-1]进行排序, n是表当前长度。<br />        for ( int i = 0; i &lt; list.n-1; i++ ) {<br />              int k = i;               //在list.V</font><font face="Arial">.key到list.V[n-1].key中找具有最小关键码的对象<br />              for ( int j = i+1; j &lt; list.n; j++)<br />                if ( list.V[j].getKey ( ) &lt; list.V[k].getKey ( ) ) k = j;       //当前具最小关键码的对象<br />              if ( k != i ) Swap ( list.V</font><font face="Arial">, list.V[k] );                         //交换<br />      }<br />    }<br />(1) 试计算此程序段的McCabe复杂性；<br />(2) 用基本路径覆盖法给出测试路径；<br />(3) 为各测试路径设计测试用例。<br />【5-10】根据下面给出的规格说明，利用等价类划分的方法，给出足够的测试用例。<br />“一个程序读入三个整数。把此三个数值看成是一个三角形的三个边。这个程序要打印出信息，说明这个三角形是三边不等的、是等腰的、还是等边的。”<br />【5-11】设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下：<br />“有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币，按下“可乐”、“雪碧”或“红茶”按钮，相应的饮料就送出来。若投入的是2元硬币，在送出饮料的同时退还5角硬币。”<br />(1) 试利用因果图法，建立该软件的因果图；<br />(2) 设计测试该软件的全部测试用例。<br />【5-12】对一个长度为100,000条指令的程序进行测试，记录下来的数据如下：<br /> 测试开始, 发现错误个数为0;<br /> 经过160小时的测试, 累计改正100个错误, 此时, MTTF = 0.4小时；<br /> 又经过160小时的测试, 累计改正300个错误, 此时, MTTF = 2小时；<br />(1) 估计程序中固有的错误总数;<br />(2) 为使MTTF达到10小时, 必须测试和调试这个程序多长时间? <br />(3) 给出MTTF与测试时间t之间的函数关系。<br />【5-13】应该由谁来进行确认测试？是软件开发者还是软件用户？为什么？<br /><br /><br /><br /><br /><font face="Times New Roman"> </font><font face="Times New Roman"><b><span>软件测试工程师笔试试题<br /></span></b><b><span>请根据您以往的学习和工作经历，结合您的个人经验回答以下问题。您可以尽可能详细和完整的表达出自己的思想，如果书写空间不够，您可以将答案写在题目所在页的背面。如果需要稿纸请同接待人员联系。</span></b></font><p><span><span>01.<span>   </span></span></span><span>为什么要在一个团队中开展软件测试工作？<br /></span><span><span>02.<span>   </span></span></span><span>您是否了解以往所工作的企业的软件测试过程？如果了解，请试述在这个过程中都有哪些工作要做？分别由哪些不同的角色来完成这些工作？<br /></span><span><span>03.<span>   </span></span></span><span>您是否了解以往所工作的企业的软件开发过程？如果了解，请试述一个完整的开发过程需要完成哪些工作？分别由哪些不同的角色来完成这些工作？（对于软件测试部分，可以简述）<br /></span><span><span>04.<span>   </span></span></span><span>您在以往的测试工作中都曾经具体从事过哪些工作？其中最擅长哪部分工作？<br /></span><span><span>05.<span>   </span></span></span><span>您所熟悉的软件测试类型都有哪些？请试着分别比较这些不同的测试类型的区别与联系（如功能测试、性能测试……）<br /></span><span><span>06.<span>   </span></span></span><span>请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。<br /></span><span><span>07.<span>   </span></span></span><span>测试计划工作的目的是什么？测试计划工作的内容都包括什么？其中哪些是最重要的？<br /></span><span><span>08.<span>   </span></span></span><span>您认为做好测试计划工作的关键是什么？</span></p><p><span><span>09.<span>   </span></span></span><span>您所熟悉的测试用例设计方法都有哪些？请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。1</span><span><span>0.<span>   </span></span></span><span>您认为做好测试用例设计工作的关键是什么？<br /></span></p></font></div>
		</div>
<img src ="http://www.cppblog.com/mzty/aggbug/8332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-06-09 12:34 <a href="http://www.cppblog.com/mzty/archive/2006/06/09/8332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件测试过程管理实践介绍</title><link>http://www.cppblog.com/mzty/archive/2006/05/19/7402.html</link><dc:creator>梦在天涯</dc:creator><author>梦在天涯</author><pubDate>Fri, 19 May 2006 02:20:00 GMT</pubDate><guid>http://www.cppblog.com/mzty/archive/2006/05/19/7402.html</guid><wfw:comment>http://www.cppblog.com/mzty/comments/7402.html</wfw:comment><comments>http://www.cppblog.com/mzty/archive/2006/05/19/7402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mzty/comments/commentRss/7402.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mzty/services/trackbacks/7402.html</trackback:ping><description><![CDATA[
		<p>引言</p>
		<p>1963年，在美国发生了这样一件事：编程人员把一个FORTRAN程序的循环语句DO 5 I=1，3误写为DO 5 I=1.3。一点之差导致飞往火星的火箭爆炸，造成1000多万美元的损失。这种情况的发生，迫使人们考虑在软件投入使用之前必须进行彻底的测试。今天，在软件比较发达的国家，软件测试已经成为一个独立的产业，软件公司纷纷建立独立的测试队伍研究测试技术并开展测试工作。中国的软件测试起步较晚，但随着我国软件产业的蓬勃发展以及人们对软件质量的重视，软件测试正在成为一个新兴的产业。近两年来，国内新成立专业性测试机构10余家，一批批专业的软件测试人员正涌现出来。每年国内都有大量的测试技术交流会议举办，有大量的测试研究论文在专业刊物上发表。在测试技术发展的同时，测试过程的管理显得犹为重要。一个成功的测试项目，离不开对测试过程科学的组织和监控，过程管理已成为测试成功的重要保证。</p>
		<p>1 测试过程概述</p>
		<p>1．1 软件测试过程概述</p>
		<p>    软件测试过程是一种抽象的模型，用于定义软件测试的流程和方法。众所周知，开发过程的质量决定了软件的质量，同样的，测试过程的质量将直接影响测试结果的准确性和有效性。软件测试过程和软件开发过程一样，都遵循软件工程原理，遵循管理学原理。<br />    随着测试过程管理的发展，软件测试专家通过实践总结出了很多很好的测试过程模型。这些模型将测试活动进行了抽象，并与开发活动有机的进行了结合，是测试过程管理的重要参考依据。</p>
		<p>1．2 软件测试过程模型介绍</p>
		<p>Ｖ模型</p>
		<p>    V模型最早是由Paul Rook在２０世纪８０年代后期提出的，旨在改进软件开发的效率和效果。Ｖ模型反映出了测试活动与分析设计活动的关系。在图1-1中，从左到右描述了基本的开发过程和测试行为，非常明确的标注了测试过程中存在的不同类型的测试，并且清楚的描述了这些测试阶段和开发过程期间各阶段的对应关系。</p>
		<p>
				<img hspace="0" src="http://images.csdn.net/20060518/20060518042813.jpg" align="baseline" border="0" />  <br />图1-1　软件测试V模型</p>
		<p>    V模型指出，单元和集成测试应检测程序的执行是否满足软件设计的要求；系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标；验收测试确定软件的实现是否满足用户需要或合同的要求。<br />但V模型存在一定的局限性，它仅仅把测试作为在编码之后的一个阶段，是针对程序进行的寻找错误的活动，而忽视了测试活动对需求分析、系统设计等活动的验证和确认的功能。</p>
		<p>Ｗ模型</p>
		<p>    W模型由Evolutif公司公司提出，相对于V模型，W模型增加了软件各开发阶段中应同步进行的验证和确认活动。如图1-2所示，W模型由两个V字型模型组成，分别代表测试与开发过程，图中明确表示出了测试与开发的并行关系。<br />    W模型强调：测试伴随着整个软件开发周期，而且测试的对象不仅仅是程序，需求、设计等同样要测试，也就是说，测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。例如，需求分析完成后，测试人员就应该参与到对需求的验证和确认活动中，以尽早地找出缺陷所在。同时，对需求的测试也有利于及时了解项目难度和测试风险，及早制定应对措施，这将显著减少总体测试时间，加快项目进度。<br />    但W模型也存在局限性。在W模型中，需求、设计、编码等活动被视为串行的，同时，测试和开发活动也保持着一种线性的前后关系，上一阶段完全结束，才可正式开始下一个阶段工作。这样就无法支持迭代的开发模型。对于当前软件开发复杂多变的情况，W模型并不能解除测试管理面临着困惑。</p>
		<p> <img hspace="0" src="http://images.csdn.net/20060518/20060518042956.jpg" align="baseline" border="0" />  <br />图1-2　软件测试W模型</p>
		<p>Ｈ模型</p>
		<p>    V模型和W模型均存在一些不妥之处。如前所述，它们都把软件的开发视为需求、设计、编码等一系列串行的活动，而事实上，这些活动在大部分时间内是可以交叉进行的，所以，相应的测试之间也不存在严格的次序关系。同时，各层次的测试（单元测试、集成测试、系统测试等）也存在反复触发、迭代的关系。<br />为了解决以上问题，有专家提出了H模型。它将测试活动完全独立出来，形成了一个完全独立的流程，将测试准备活动和测试执行活动清晰地体现出来，如图1-3所示。</p>
		<p> <img hspace="0" src="http://images.csdn.net/20060518/20060518043026.jpg" align="baseline" border="0" />   <br />图1-3　软件测试H模型</p>
		<p>    这个示意图仅仅演示了在整个生产周期中某个层次上的一次测试“微循环”。图中标注的其他流程可以是任意的开发流程。例如，设计流程或编码流程。也就是说，只要测试条件成熟了，测试准备活动完成了，测试执行活动就可以（或者说需要）进行了。<br /> <br />    H模型揭示了一个原理：软件测试是一个独立的流程，贯穿产品整个生命周期，与其他流程并发地进行。H模型指出软件测试要尽早准备，尽早执行。不同的测试活动可以是按照某个次序先后进行的，但也可能是反复的，只要某个测试达到准备就绪点，测试执行活动就可以开展。</p>
		<p>其他模型</p>
		<p>    除上述几种常见模型外，业界还流传着其他几种模型，例如X模型、前置测试模型等。X模型提出针对单独的程序片段进行相互分离的编码和测试，此后通过频繁的交接，通过集成最终合成为可执行的程序。前置测试模型体现了开发与测试的结合，要求对每一个交付内容进行测试。这些模型都针对其他模型的缺点提出了一些修正意见，但本身也可能存在一些不周到的地方。所以在测试过程管理中，正确选取过程模型是一个关键问题。</p>
		<p>1．3 软件测试过程模型选取策略</p>
		<p>    前面介绍的测试过程模型中，V模型强调了在整个项目开发中需要经历的不同的测试级别，但忽视了测试的对象不应该仅仅是程序。而W模型在这一点上进行了补充，明确指出应该对需求、设计进行测试。但是V模型和W模型都没有将一个完整的测试过程抽象出来，成为一个独立的流程，这并不适合当前软件开发中广泛应用的迭代模型。H模型则明确指出测试的独立性，也就是说只要测试条件成熟了，就可以开展测试。</p>
		<p>    在实际测试工作中我们应该尽可能地去应用各模型中对项目有实用价值的方面，不能强行的为使用模型而使用模型。在测试实践中，我们采用的方法是：以W模型作为框架，及早的、全面的开展测试。同时灵活运用H模型独立测试的思想，在达到恰当的就绪点时就应该开展独立的测试工作，同时将测试工作进行迭代，最终保证完成测试目标。</p>
		<p>2 测试过程管理理念</p>
		<p>    生命周期模型为我们提供了软件测试的流程和方法，为测试过程管理提供了依据。但实际的测试工作是复杂而烦琐的，可能不会有哪种模型完全适用于某项测试工作。所以，我们应该从不同的模型中抽象出符合实际现状的测试过程管理理念，依据这些理念来策划测试过程，以不变应万变。当然测试管理牵涉的范围非常的广泛，包括过程定义、人力资源管理、风险管理等等，本节仅介绍几条从过程模型中提炼出来的，对实际测试有指导意义的管理理念。</p>
		<p>2．1 尽早测试</p>
		<p>    “尽早测试”是从W模型中抽象出来的理念。我们说测试并不是在代码编写完成之后才开展的工作，测试与开发是两个相互依存的并行的过程，测试活动在开发活动的前期已经开展。<br />    “尽早测试”包含两方面的含义：第一，测试人员早期参与软件项目，及时开展测试的准备工作，包括编写测试计划、制定测试方案以及准备测试用例；第二，尽早的开展测试执行工作，一旦代码模块完成就应该及时开展单元测试，一旦代码模块被集成成为相对独立的子系统，便可以开展集成测试，一旦有BUILD提交，便可以开展系统测试工作。<br />    由于及早的开展了测试准备工作，测试人员能够于早期了解测试的难度、预测测试的风险，从而有效提高了测试效率，规避测试风险。由于及早的开展测试执行工作，测试人员尽早的发现软件缺陷，大大降低了BUG修复成本。但是需要注意，“尽早测试”并非盲目的提前测试活动，测试活动开展的前提是达到必须的测试就绪点。</p>
		<p>2．2 全面测试</p>
		<p>    软件是程序、数据和文档的集合，那么对软件进行测试，就不仅仅是对程序的测试，还应包括软件“副产品”的“全面测试”，这是W模型中一个重要的思想。需求文档、设计文档作为软件的阶段性产品，直接影响到软件的质量。阶段产品质量是软件质量的量的积累，不能把握这些阶段产品的质量将导致最终软件质量的不可控。<br />    “全面测试”包含两层含义：第一，对软件的所有产品进行全面的测试，包括需求、设计文档，代码，用户文档等等。第二，软件开发及测试人员（有时包括用户）全面的参与到测试工作中，例如对需求的验证和确认活动，就需要开发、测试及用户的全面参与，毕竟测试活动并不仅仅是保证软件运行正确，同时还要保证软件满足了用户的需求。<br />    “全面测试”有助于全方位把握软件质量，尽最大可能的排除造成软件质量问题的因素，从而保证软件满足质量需求。</p>
		<p>2．3 全过程测试</p>
		<p>    在W模型中充分体现的另一个理念就是“全过程测试”。双V字过程图形象的表明了软件开发与软件测试的紧密结合，这就说明软件开发和测试过程会彼此影响，这就要求测试人员对开发和测试的全过程进行充分的关注。<br />    “全过程测试”包含两层含义：第一，测试人员要充分关注开发过程，对开发过程的各种变化及时做出响应。例如开发进度的调整可能会引起测试进度及测试策略的调整，需求的变更会影响到测试的执行等等。第二，测试人员要对测试的全过程进行全程的跟踪，例如建立完善的度量与分析机制，通过对自身过程的度量，及时了解过程信息，调整测试策略。<br />    “全过程测试”有助于及时应对项目变化，降低测试风险。同时对测试过程的度量与分析也有助于把握测试过程，调整测试策略，便于测试过程的改进。</p>
		<p>2．4 独立的、迭代的测试</p>
		<p>    我们知道，软件开发瀑布模型只是一种理想状况。为适应不同的需要，人们在软件开发过程中摸索出了如螺旋、迭代等诸多模型，这些中需求、设计、编码工作可能重叠并反复进行的，这时的测试工作将也是迭代和反复的。如果不能将测试从开发中抽象出来进行管理，势必使测试管理陷入困境。<br />    软件测试与软件开发是紧密结合的，但并不代表测试是依附于开发的一个过程，测试活动是独立的。这正是H模型所主导的思想。“独立的、迭代的测试”着重强调了测试的就绪点，也就是说，只要测试条件成熟，测试准备活动完成，测试的执行活动就可以开展。</p>
		<p>    所以，我们在遵循尽早测试、全面测试、全过程测试理念的同时，应当将测试过程从开发过程中适当的抽象出来，作为一个独立的过程进行管理。时刻把握独立的、迭代测试的理念，减小因开发模型的繁杂给测试管理工作带来的不便。对于软件过程中不同阶段的产品和不同的测试类型，只要测试准备工作就绪，就可以及时开展测试工作，把握产品质量。</p>
		<p>3 测试过程管理实践</p>
		<p>    本节以一个实际项目系统测试过程（不对单元测试和集成测试过程进行分析）的几个关键过程管理行为为例，来阐述上节中提出的测试理念。在一个构件化ERP项目中，由于前期需求不明确，开发周期相对较长，为了对项目进行更好的跟踪和管理，项目采用增量和迭代模型进行开发。整个项目开发共分三个阶段完成：第一阶段实现进销存的简单的功能和工作流；第二阶段：实现固定资产管理、财务管理，并完善第一阶段的进销存功能；第三阶段：增加办公自动化的管理（OA）。该项目每一阶段工作是对上一阶段成果的一次迭代完善，同时将新功能进行了一次叠加。</p>
		<p>3．1 策划测试过程</p>
		<p>    依据传统的方法，将系统测试作为软件开发的一个阶段，系统测试执行工作将在三个阶段完成后开展，很明显，这样做不利于BUG的及时暴露。有些缺陷可能会埋藏至后期发现，这时的修复成本将大大提高。我们依据“独立和迭代”的测试理念，在本系统中，对测试过程进行独立的策划，找出测试准备就绪点，在就绪点及时开展测试。该系统的三个阶段具有相对的独立性，在每一阶段完成所提交的阶段产品具有相对的独立性，可以作为系统测试准备的就绪点。故而，在该系统开发过程中，系统测试组计划开展三阶段的系统测试，每个阶段系统测试具有不同的侧重点，目的在于更好的配合开发工作尽早发现软件BUG，降低软件成本。软件开发与系统测试过程的关系如图3-1所示。<br />    实践证明，这种做法起到了预期的效果，与开发过程紧密结合而又相对独立的测试过程，有效的于早期发现了许多系统缺陷，降低了开发成本，同时也使基于复杂开发模型的测试管理工作更加清晰明了。<br />  <img hspace="0" src="http://images.csdn.net/20060518/20060518043121.jpg" align="baseline" border="0" /><br />3．2 把握需求</p>
		<p>    在本系统开发过程中，需求的获取和完善贯穿每个阶段。对需求的把握很大程度上决定了软件测试是否能够成功。系统测试不仅仅确认软件是否正确实现功能，同时还要确认软件是否满足用户的需要。依据“尽早测试”和“全面测试”原则，在需求的获取阶段，测试人员参与到了对需求的讨论之中。测试人员与开发人员及用户一起讨论需求的完善性与正确性，同时从可测试性角度为需求文档提出建议。这些建议对开发人员来说，是从一个全新的思维角度提出的约束。同时，测试组结合前期对项目的把握，很容易制定出了完善的测试计划和方案，将各阶段产品的测试方法及进度、人员安排进行了策划，使整个项目的进展有条不紊。<br />实践证明，测试人员早期参与需求的获取和分析中，有助于加深测试人员对需求的把握和理解，同时也大大促进需求文档的质量。在需求人员把握需求的同时，于早期制定项目计划和方案，及早准备测试活动，大大提高了测试效率。</p>
		<p>3．3 变更控制</p>
		<p>    变更控制体现的是“全过程测试”理念。在软件开发过程中，变更往往是不可避免的，变更也是造成软件风险的重要因素。在本系统测试中，仅第一阶段就发生了7次需求变更，调整了两次进度计划。依据“全过程测试”理念，测试组密切关注开发过程，跟随进度计划的变更调整测试策略，依据需求的变更及时补充和完善测试用例。由于充分的测试准备工作，在测试执行过程中，没有废弃一个测试用例，测试的进度并没有因为变更而受到过多影响。</p>
		<p>3．4 度量与分析</p>
		<p>    对测试过程的度量与分析同样体现的“全过程测试”理念。对测试过程的度量有利于及时把握项目情况，对过程数据进行分析，很容易发现优势劣势，找出需要改进的地方，及时调整测试策略。<br />    在ERP项目中，我们在测试过程中对不同阶段的BUG数量进行了度量，并分析测试执行是否充分。如图3-2所示，通过分析我们得出：相同时间间隔内发现的BUG数量呈收敛状态，测试是充分的。在BUG数量收敛的状态下结束细测是恰当的。<br /> <img hspace="0" src="http://images.csdn.net/20060518/20060518043310.jpg" align="baseline" border="0" /><br />图3-2　软件开发与系统测试关系图</p>
		<p>    测试中，我们对不同功能点的测试数据覆盖率和发现问题数进行度量，以便分析测试用例的充分度与BUG发现率之间的关系。如表3-1所示，对类似模块进行对比发现：某一功能点上所覆盖的测试数据组越多，BUG的用例发现率越高。如果再结合工作量、用例执行时间等因素进行统计分析，便可以找到适合实际情况的测试用例书写粒度，从而帮助测试人员判断测试成本和收益间的最佳平衡点。</p>
		<p>表3-1 测试数据覆盖率与BUG发现率对应表<br />模块名称 功能点数 测试数据数 测试数据覆盖率 BUG的用例发现率（）<br />模块AA 6个 75组 12.5组/每功能点 40% （6/15）<br />模块BB 30个 96组 3.3组/每功能点 17% （7/42）<br />模块CC 15个 87组 5.1组/每功能点 18% （5/28）<br />模块DD 16个 46组 2.8组/每功能点 23% （5/22）<br />… …          … … ...</p>
		<p>注：通过统计可以得出测试数据与BUG发现率之间的关系，便于及时调整测试用例编写策略。<br />    所有这些度量都是对测试全过程进行跟踪的结果，是及时调整测试策略的依据。对测试过程的度量与分析能有效的提高了测试效率，降低了测试风险。同时，度量与分析也是软件测试过程可持续改进的基本。</p>
		<p>4 测试过程可持续改进</p>
		<p>    测试技术发展到今天，已经存在诸多可供参考的测试过程管理思想和理念。但信息技术发展一日千里，新技术不断涌现，这就注定测试过程也需要不断的改进。我们提倡基于度量与分析的可持续过程改进方法（本文不做详细论述）。在这种方法中，对现状的度量被制度化，并作为过程改进的基础。组织可以自定义需要度量的过程数据，将收集来的数据加以分析，以找出需要改进的因素。在不断的改进中，同步的调整需要度量的过程数据，使度量与分析始终为了过程改进服务，而过程改进也包含对度量和分析的改进。<br />    掌握了基于度量和分析的可持续过程改进方法，测试过程管理将能够不断完善，测试活动将能够始终处于优化状态。</p>
<img src ="http://www.cppblog.com/mzty/aggbug/7402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mzty/" target="_blank">梦在天涯</a> 2006-05-19 10:20 <a href="http://www.cppblog.com/mzty/archive/2006/05/19/7402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>