﻿<?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>BlogJava-Sung in Blog-文章分类-Ｔｅｓｔｉｎｇ</title><link>http://www.blogjava.net/qq13367612/category/4121.html</link><description>&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font class="subhead" size=3&gt;&lt;b&gt;一些技术文章 &amp; 一些生活杂碎&lt;/b&gt;&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 09:14:51 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 09:14:51 GMT</pubDate><ttl>60</ttl><item><title>Web应用程序测试方法和测试技术详述</title><link>http://www.blogjava.net/qq13367612/articles/16017.html</link><dc:creator>Sung</dc:creator><author>Sung</author><pubDate>Tue, 13 Sep 2005 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/qq13367612/articles/16017.html</guid><wfw:comment>http://www.blogjava.net/qq13367612/comments/16017.html</wfw:comment><comments>http://www.blogjava.net/qq13367612/articles/16017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qq13367612/comments/commentRss/16017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qq13367612/services/trackbacks/16017.html</trackback:ping><description><![CDATA[<P><FONT face=宋体><SPAN lang=EN-US>1. </SPAN>概述</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>随着<SPAN lang=EN-US>web</SPAN>应用的增多，新的模式解决方案中以<SPAN lang=EN-US>web</SPAN>为核心的应用也越来越多， 很多公司各种应用的架构都以<SPAN lang=EN-US>B/S</SPAN>及<SPAN lang=EN-US>web</SPAN>应用为主，但是有关<SPAN lang=EN-US>WEB</SPAN>测试方面的内容并没有相应的总结，所以我在这里对<SPAN lang=EN-US>web</SPAN>的测试方法和采用的测试技术进行总结，便于内部交流。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>测试方法尽量涵盖<SPAN lang=EN-US>web</SPAN>程序的各个方面，测试技术方面在继承传统测试技术的技术上结合<SPAN lang=EN-US>web</SPAN>应用的特点。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>相关的测试和实现技术也有着很大的关系，由于本公司使用<SPAN lang=EN-US>J2EE</SPAN>体系，也许例子中只有<SPAN lang=EN-US>JAVA</SPAN>平台可以使用，<SPAN lang=EN-US>.NET</SPAN>平台测试技术暂时不涉及，如果你有请与我联系。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>2. </SPAN>测试方法</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>说明：测试方法的选择取决你的测试策略。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>一般的<SPAN lang=EN-US>web</SPAN>测试和以往的应用程序的测试的侧重点不完全相同，基本包括以下几个方面。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>当然圆满的完成测试还要有好的团体和流程等的方方面面的支持，你同样应该对这些方面进行注意。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>有些测试方法设计到了流程，哪些应该在你的测试团队建设中建立。 <SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体><SPAN lang=EN-US>2.1 </SPAN>界面测试</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>现在一般人都有使用浏览器浏览网页的经历，用户虽然不是专业人员但是对界面效果的印象是很重要的。如果你注重这方面的测试，那么验证应用程序是否易于使用就非常重要了。很多人认为这是测试中最不重要的部分，但是恰恰相反界面对不懂技术的客户来说那相当关键，慢慢体会你会明白的。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>方法上可以根据设计文档，如果够专业的话可以专业美工人员，来确定整体风格页面风格，然后根据这个可以页面人员可以生成静态的<SPAN lang=EN-US>HTML</SPAN>，<SPAN lang=EN-US>CSS</SPAN>等甚至生成几套不用的方案来讨论，或者交给客户评审，最后形成统一的风格的页面<SPAN lang=EN-US>/</SPAN>框架。注意不要靠程序员的美术素养形成你的<SPAN lang=EN-US>web</SPAN>风格，那样可能会很糟糕。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>主要包括以下几个方面的内容：</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>站点地图和导航条 位置、是否合理、是否可以导航等内容布局 布局是否合理，滚动条等简介说明 说明文字是否合理，位置，是否正确</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>背景<SPAN lang=EN-US>/</SPAN>色调 是否正确、美观，是否符合用户需求；</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面在窗口中的显示是否正确、美观（在调整浏览器窗口大小时，屏幕刷新是否正确）表单样式 大小，格式，是否对提交数据进行验证（如果在页面部分进行验证的话）等</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>连接 连接的形式，位置，是否易于理解等</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>web</SPAN>测试的主要页面元素</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面元素的容错性列表（如输入框、时间列表或日历）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面元素清单（为实现功能，是否将所需要的元素全部都列出来了，如按钮、单选框、复选框、列表框、超连接、输入框等等）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面元素的容错性是否存在</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面元素的容错性是否正确</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面元素基本功能是否实现（如文字特效、动画特效、按钮、超连接）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面元素的外形、摆放位置（如按钮、列表框、核选框、输入框、超连接等）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面元素是否显示正确（主要针对文字、图形、签章）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>元素是否显示（元素是否存在）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>页面元素清单（为实现功能，是否将所需要的元素全部都列出来了，如按钮、单选框、复选框、列表框、超连接、输入框等等）</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>测试技术</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>     </SPAN>通过页面走查，浏览确定使用的页面是否符合需求。可以结合兼容性测试对不用分辨率下页面显示效果，如果有影响应该交给设计人员提出解决方案。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>    </SPAN>可以结合数据定义文档查看表单项的内容，长度等信息。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>    </SPAN>对于动态生成的页面最好也能进行浏览查看。如<SPAN lang=EN-US>Servelet</SPAN>部分可以结合编码规范，进行代码走查。是否支持中文，如果数据用<SPAN lang=EN-US>XM<SPAN style="mso-spacerun: yes">  </SPAN></SPAN>封装要做的工作会多一点等等。 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>界面测试要素</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>符合标准和规范<SPAN lang=EN-US>,</SPAN>灵活性<SPAN lang=EN-US>,</SPAN>正确性<SPAN lang=EN-US>,</SPAN>直观性<SPAN lang=EN-US>,</SPAN>舒适性<SPAN lang=EN-US>,</SPAN>实用性<SPAN lang=EN-US>,</SPAN>一致性</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>1.</SPAN>直观性</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>用户界面是否洁净<SPAN lang=EN-US>,</SPAN>不唐突<SPAN lang=EN-US>,</SPAN>不拥挤<SPAN lang=EN-US>.</SPAN>界面不应该为用户制造障碍<SPAN lang=EN-US>.</SPAN>所需功能或者期待的响应应该明显<SPAN lang=EN-US>,</SPAN>并在预期出现的地方</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>界面组织和布局合理吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>是否允许用户轻松地从一个功能转到另一个功能<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>下一步做什么明显吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>任何时刻都可以决定放弃或者退回<SPAN lang=EN-US>,</SPAN>退出吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>输入得到承认了吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>菜单或者窗口是否深藏不露</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>有多余功能吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>软件整体抑或局部是否做得太多<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>是否有太多特性把工作复杂化了<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>是否感到信息太庞杂</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>如果其他所有努力失败<SPAN lang=EN-US>,</SPAN>帮助系统真能帮忙吗</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>2.</SPAN>一致性</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>快速键和菜单选项<SPAN lang=EN-US>.</SPAN>在<SPAN lang=EN-US>Windows </SPAN>中按<SPAN lang=EN-US>F1</SPAN>键总是得到帮助信息</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>术语和命令<SPAN lang=EN-US>.</SPAN>整个软件使用同样的术语吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>特性命名一致吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>例如<SPAN lang=EN-US>,Find</SPAN>是否一直叫<SPAN lang=EN-US>Find,</SPAN>而不是有时叫</FONT><FONT face=宋体><SPAN lang=EN-US>Search<SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件是否一直面向同一级别用户<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>带有花哨用户界面的趣味贺卡程序不应该显示泄露技术机密的错误提示信息</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>按钮位置和等价的按键<SPAN lang=EN-US>.</SPAN>大家是否注意到对话框有<SPAN lang=EN-US>OK</SPAN>按钮和<SPAN lang=EN-US>Canc<SPAN style="mso-spacerun: yes">  </SPAN>e</SPAN>按钮时<SPAN lang=EN-US>,OK</SPAN>按钮总是在上方或者左方<SPAN lang=EN-US>,</SPAN>而<SPAN lang=EN-US>Canc<SPAN style="mso-spacerun: yes">  </SPAN>e</SPAN>按钮总是在下方或右方<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>同样原因<SPAN lang=EN-US>,Canc<SPAN style="mso-spacerun: yes">  </SPAN>e</SPAN>按钮的等价按键通常是<SPAN lang=EN-US>Esc,</SPAN>而选中按钮的等价按钮通常是<SPAN lang=EN-US>Enter.</SPAN>保持一致</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>3.</SPAN>灵活性</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>状态跳转<SPAN lang=EN-US>.</SPAN>灵活的软件实现同一任务有多种选择方式</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>状态终止和跳过<SPAN lang=EN-US>,</SPAN>具有容错处理能力</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>数据输入和输出<SPAN lang=EN-US>.</SPAN>用户希望有多种方法输入数据和查看结果<SPAN lang=EN-US>.</SPAN>例如<SPAN lang=EN-US>,</SPAN>在写字板插入文字可用键盘输入<SPAN lang=EN-US>,</SPAN>粘贴<SPAN lang=EN-US>,</SPAN>从<SPAN lang=EN-US>6</SPAN>种文件格式读入<SPAN lang=EN-US>,</SPAN>作为对象插入<SPAN lang=EN-US>,</SPAN>或者用鼠标从其他程序拖动</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>4.</SPAN>舒适性</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>恰当<SPAN lang=EN-US>.</SPAN>软件外观和感觉应该与所做的工作和使用者相符</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>错误处理<SPAN lang=EN-US>.</SPAN>程序应该在用户执行严重错误的操作之前提出警告<SPAN lang=EN-US>,</SPAN>并允许用户恢复由于错误操作导致丢失的数据<SPAN lang=EN-US>.</SPAN>如大家认为<SPAN lang=EN-US>undo /redo</SPAN>是当然的</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>性能<SPAN lang=EN-US>.</SPAN>快不见得是好事<SPAN lang=EN-US>.</SPAN>要让用户看得清程序在做什么<SPAN lang=EN-US>,</SPAN>它是有反应的<SPAN lang=EN-US>. <o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体><SPAN lang=EN-US>2.2 </SPAN>功能测试</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>对功能测试是测试中的重点</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>主要包括一下几个方面的内容</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>连接这个连接和界面测试中的连接不同那里注重的是连接方式和位置，如是图像还是文字放置的位置等，还是其他的方式。这里的连接注重功能。如是否有连接，连接的是否是说明的位置等。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>表单提交应当模拟用户提交，验证是否完成功能，如注册信息，要测试这些程序，需要验证服务器能正确保存这些数据，而且后台运行的程序能正确解释和使用这些信息。还有数据正确性验证，异常处理等，最好结合易用性要求等。<SPAN lang=EN-US>B/S</SPAN>结构实现的功能可能主要的就在这里，提交数据，处理数据等如果有固定的操作流程可以考虑自动化测试工具的录制功能，编写可重复使用的脚本代码，可以在测试、回归测试时运行以便减轻测试人员工作量。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>Cookies </SPAN>验证 如果系统使用了<SPAN lang=EN-US>cookie</SPAN>，测试人员需要对它们进行检测。如果在<SPAN lang=EN-US> cookies </SPAN>中保存了注册信息，请确认该<SPAN lang=EN-US> cookie</SPAN>能够正常工作而且已对这些信息已经加密。如果使用<SPAN lang=EN-US> cookie </SPAN>来统计次数，需要验证次数累计正确。关于<SPAN lang=EN-US>cookie</SPAN>的使用可以参考浏览器的帮助信息。如果使用<SPAN lang=EN-US>B/S</SPAN>结构<SPAN lang=EN-US>cookies</SPAN>中存放的信息更多。功能易用性测试 完成了功能测试可以对应用性进行了解，最好听听客户的反映，在可以的情况下对程序进行改进是很有必要的，和客户保持互动对系统满意度也是很有帮助的。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>测试技术功能测试的测试技术可是很多的，我们可以结合实际环境选择使用</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>白盒测试技术<SPAN lang=EN-US>(White Box Testing) </SPAN>深入到代码一级的测试，使用这种技术发现问题最早，效果也是最好的。该技术主要的特征是测试对象进入了代码内部<SPAN lang=EN-US>,</SPAN>根据开发人员对代码和对程序的熟悉程度<SPAN lang=EN-US>,</SPAN>对有需要的部分进行在软件编码阶段，开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主，在<SPAN lang=EN-US>JAVA</SPAN>平台使用<SPAN lang=EN-US>Xunit</SPAN>系列工具进行测试，<SPAN lang=EN-US>Xunit</SPAN>测试工具是类一级的测试工具对每一个类和该类的方法进行测试。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>黑盒测试技术（<SPAN lang=EN-US>Black Box Testing</SPAN>）黑盒测试的内容主要有以下几个方面，但是主要还是功能部分。主要是覆盖全部的功能，可以结合兼容，性能测试等方面进行，根据软件需求，设计文档，模拟客户场景随系统进行实际的测试，这种测试技术是使用最多的测试技术涵盖了测试的方方面面，可以考虑以下方面</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>正确性<SPAN lang=EN-US> (Correctness)</SPAN>：计算结果，命名等方面</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>可用性<SPAN lang=EN-US> (Usability)</SPAN>：是否可以满足软件的需求说明。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>边界条件<SPAN lang=EN-US> (Boundary Condition)</SPAN>输入部分的边界值<SPAN lang=EN-US>,</SPAN>就是使用一般书中说的等价类划分<SPAN lang=EN-US>,</SPAN>试试最大最小和非法数据等等</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>性能<SPAN lang=EN-US> (Performance) </SPAN>正常使用的时间内系统完成一个任务需要的时间<SPAN lang=EN-US>,</SPAN>多人同时使用的时候响应时间<SPAN lang=EN-US>,</SPAN>在可以接受范围内<SPAN lang=EN-US>.J2EE</SPAN>技术实现的系统在性能方面更是需要照顾的<SPAN lang=EN-US>,</SPAN>一般原则是<SPAN lang=EN-US>3</SPAN>秒以下接受<SPAN lang=EN-US>,3-5</SPAN>秒可以接受<SPAN lang=EN-US>,5</SPAN>秒以上就影响易用性了<SPAN lang=EN-US>. </SPAN>如果在测试过程中发现性能问题，修复起来是非常艰难的，因为这常常意味着</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>程序的算法不好，结构不好，或者设计有问题。因此在产品开发的开始阶段，就要考虑到软件的性能问题</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>压力测试<SPAN lang=EN-US> (Stress) </SPAN>多用户情况 可以考虑使用压力测试工具<SPAN lang=EN-US>,</SPAN>建议将压力和性能测试结合起来进行<SPAN lang=EN-US>.</SPAN>如果有负载平衡的话还要在服务器端打开监测工具<SPAN lang=EN-US>,</SPAN>查看服务器<SPAN lang=EN-US>CPU</SPAN>使用率<SPAN lang=EN-US>,</SPAN>内存占用情况<SPAN lang=EN-US>,</SPAN>如果有必要可以模拟大量数据输入<SPAN lang=EN-US>,</SPAN>对硬盘的影响等等信息<SPAN lang=EN-US>.</SPAN>如果有必要的话必须进行性能优化<SPAN lang=EN-US>(</SPAN>软硬件都可以<SPAN lang=EN-US>).</SPAN>这里的压力测试针对的是某几项功能</FONT><FONT face=宋体><SPAN lang=EN-US>,. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>错误恢复<SPAN lang=EN-US> (Error Recovery) </SPAN>错误处理，页面数据验证<SPAN lang=EN-US>,</SPAN>包括突然间断电<SPAN lang=EN-US>,</SPAN>输入脏数据等</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR></SPAN>安全性测试<SPAN lang=EN-US>(Security)</SPAN>这个领域正在研究中<SPAN lang=EN-US>,</SPAN>不过防火墙<SPAN lang=EN-US>,</SPAN>补丁包<SPAN lang=EN-US>.</SPAN>杀毒软件等的就不必说了<SPAN lang=EN-US>,</SPAN>不过可以考虑破坏性测试时任意<SPAN lang=EN-US>.</SPAN>看了一些资料后得知<SPAN lang=EN-US>,</SPAN>这里面设计到的知识<SPAN lang=EN-US>\</SPAN>内容可以写本书了<SPAN lang=EN-US>,</SPAN>不是一两句可以说清的<SPAN lang=EN-US>,</SPAN>特别是一些商务网站<SPAN lang=EN-US>,</SPAN>或者跟钱有关<SPAN lang=EN-US>,</SPAN>或者和公司秘密有关的<SPAN lang=EN-US>web</SPAN>更是<SPAN lang=EN-US>,</SPAN>需要这方面的测试<SPAN lang=EN-US>,</SPAN>在外国有一种专门干这一行的人叫安全顾问<SPAN lang=EN-US>,</SPAN>可以审核代码<SPAN lang=EN-US>,</SPAN>提出安全建议<SPAN lang=EN-US>,</SPAN>出现紧急事件是的处理办法等<SPAN lang=EN-US>,</SPAN>在国内没有听说哪里有专门搞安全技术测试的内容</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>兼容性<SPAN lang=EN-US> (Compatibility) </SPAN>不同浏览器，不同应用程序版本在实现功能时的表现<SPAN lang=EN-US>,</SPAN>不同的上网方式<SPAN lang=EN-US>,</SPAN>如果你测试的是一个公共网站的话</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>兼容性测试内容详述</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>硬件平台</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>浏览器软件和版本<SPAN lang=EN-US>:</SPAN>浏览器插件<SPAN lang=EN-US>,</SPAN>浏览器选项<SPAN lang=EN-US>,</SPAN>视频分辨率和色深<SPAN lang=EN-US>.</SPAN>文字大小<SPAN lang=EN-US>,</SPAN>调制解调器速率</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件配置<SPAN lang=EN-US> (Configuration) </SPAN>如<SPAN lang=EN-US>IE</SPAN>浏览器的不用选项<SPAN lang=EN-US>-</SPAN>安全设定最高<SPAN lang=EN-US>,</SPAN>禁用脚本程序<SPAN lang=EN-US>,</SPAN>等等<SPAN lang=EN-US>,</SPAN>你们的程序在各种不用的设置下表现如何<SPAN lang=EN-US>. <o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体>单元测试技术</FONT><FONT face=宋体><SPAN lang=EN-US>(Unit Test): <BR>2.2.1 </SPAN>下面是对白盒测试和单元测试的区别的论述</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>单元测试和白盒测试是不同的<SPAN lang=EN-US>,</SPAN>虽然单元测试和白盒测试都是关注功能虽然他们都需要代码支持<SPAN lang=EN-US>,</SPAN>但是级别不同<SPAN lang=EN-US>,</SPAN>白盒测试关注的是类中一个方法的功能是更小的单位<SPAN lang=EN-US>,</SPAN>但是完成一个单元测试可能需要<SPAN lang=EN-US>N</SPAN>多类<SPAN lang=EN-US>,</SPAN>所以说作单元测试需要什么写驱动和稳定桩<SPAN lang=EN-US>,</SPAN>比如查询单元是一个查询包包<SPAN lang=EN-US>N</SPAN>多的测试类<SPAN lang=EN-US>,</SPAN>测试数据<SPAN lang=EN-US>,</SPAN>运行他需要提供数据的部分<SPAN lang=EN-US>,</SPAN>输入参数和发出命令的驱动等等<SPAN lang=EN-US>.</SPAN>是比类大的一个整体进行的</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>另一个明显的区别是白盒测试不会关注类接口<SPAN lang=EN-US>,</SPAN>但是单元测试主要的内容就是类接口测试</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>不过很多时候是很少区分的<SPAN lang=EN-US>,</SPAN>因为这两种技术实现起来有很多相互关联的部分<SPAN lang=EN-US>.</SPAN>不过要看你对质量的关注程度来决定</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR>2.2.2 </SPAN>功能测试边界测试<SPAN lang=EN-US>\</SPAN>越界测试技术详述</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>边界条件</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>边界条件是指软件计划的操作界限所在的边缘条件</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR></SPAN>如果软件测试问题包含确定的边界<SPAN lang=EN-US>,</SPAN>那么数据类型可能是</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>数值 速度 字符 地址 位置 尺寸 数量</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>同时<SPAN lang=EN-US>,</SPAN>考虑这些类型的下述特征</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>第一个<SPAN lang=EN-US>/</SPAN>最后一个 最小值<SPAN lang=EN-US>/</SPAN>最大值</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>开始<SPAN lang=EN-US>/</SPAN>完成 超过<SPAN lang=EN-US>/</SPAN>在内</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>空<SPAN lang=EN-US>/</SPAN>满 最短<SPAN lang=EN-US>/</SPAN>最长</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>最慢<SPAN lang=EN-US>/</SPAN>最快 最早<SPAN lang=EN-US>/</SPAN>最迟</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>最大<SPAN lang=EN-US>/</SPAN>最小 最高<SPAN lang=EN-US>/</SPAN>最低</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>相邻<SPAN lang=EN-US>/</SPAN>最远</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>越界测试</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>通常是简单加<SPAN lang=EN-US>1</SPAN>或者很小的数<SPAN lang=EN-US>(</SPAN>对于最大值<SPAN lang=EN-US>)</SPAN>和减少<SPAN lang=EN-US>1</SPAN>或者很小的数<SPAN lang=EN-US>(</SPAN>对于最小值<SPAN lang=EN-US>),</SPAN>例如</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR></SPAN>第一个减<SPAN lang=EN-US>1/</SPAN>最后一个加</FONT><FONT face=宋体><SPAN lang=EN-US>1 <BR></SPAN>开始减<SPAN lang=EN-US>1/</SPAN>完成加</FONT><FONT face=宋体><SPAN lang=EN-US>1 <BR></SPAN>空了再减<SPAN lang=EN-US>/</SPAN>满了再加</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>慢上加慢<SPAN lang=EN-US>/</SPAN>快上加快</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>最大数加<SPAN lang=EN-US>1/</SPAN>最小数减</FONT><FONT face=宋体><SPAN lang=EN-US>1 <BR></SPAN>最小值减<SPAN lang=EN-US>1/</SPAN>最大值加</FONT><FONT face=宋体><SPAN lang=EN-US>1 <BR></SPAN>刚好超过<SPAN lang=EN-US>/</SPAN>刚好在内</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>短了再短<SPAN lang=EN-US>/</SPAN>长了再长</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>早了更早<SPAN lang=EN-US>/</SPAN>晚了更晚</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>最高加<SPAN lang=EN-US>1/</SPAN>最低减</FONT><FONT face=宋体><SPAN lang=EN-US>1 <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>另一些该注意的输入<SPAN lang=EN-US>:</SPAN>默认<SPAN lang=EN-US>,</SPAN>空白<SPAN lang=EN-US>,</SPAN>空值<SPAN lang=EN-US>,</SPAN>零值和无<SPAN lang=EN-US>;</SPAN>非法<SPAN lang=EN-US>,</SPAN>错误<SPAN lang=EN-US>,</SPAN>不正确和垃圾数据</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR>2.2.3 </SPAN>状态测试技术</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件可能进入的每一种独立状态</FONT><FONT face=宋体><SPAN lang=EN-US>; <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>从一种状态转入另一种状态所需的输入和条件</FONT><FONT face=宋体><SPAN lang=EN-US>; <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>进入或退出某种状态时的设置条件及输入结果</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>具体测试方法可以参考如下</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>每种状态至少访问一次</FONT><FONT face=宋体><SPAN lang=EN-US>; <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>测试看起来最常见最普遍的状态转换</FONT><FONT face=宋体><SPAN lang=EN-US>; <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>测试状态之间最不常用的分支</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>测试所有错误状态及其返回值</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>测试随机状态转换</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>2.2.4 </SPAN>竞争条件测试技术</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>竞争条件典型情形参考如下</FONT><FONT face=宋体><SPAN lang=EN-US>: <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>两个不同的程序同时保存或打开同一个文档</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>共享同一台打印机<SPAN lang=EN-US>,</SPAN>通信端口或者其他外围设备</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>当软件处于读取或者修改状态时按键或者单击鼠标</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>同时关闭或者启动软件的多个实例</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>同时使用不同的程序访问一个共同数据库 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体><SPAN lang=EN-US>2.3 </SPAN>负载<SPAN lang=EN-US>\</SPAN>压力测试</FONT><FONT face=宋体><SPAN lang=EN-US>(StressTest) <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>在这里的负载<SPAN lang=EN-US>\</SPAN>压力和功能测试中的不同<SPAN lang=EN-US>,</SPAN>他是系统测试的内容<SPAN lang=EN-US>,</SPAN>是基本功能已经通过后进行的<SPAN lang=EN-US>.</SPAN>可以在集成测试阶段<SPAN lang=EN-US>,</SPAN>亦可以在系统测试阶段进行</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>使用负载测试工具进行<SPAN lang=EN-US>,</SPAN>虚拟一定数量的用户看一看系统的表现<SPAN lang=EN-US>,</SPAN>是否满足定义中的指标</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>负载测试一般使用工具完成，<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN>oadrunner</SPAN>，<SPAN lang=EN-US>web<SPAN style="mso-spacerun: yes">  </SPAN>oad</SPAN>，<SPAN lang=EN-US>was</SPAN>，<SPAN lang=EN-US>ew<SPAN style="mso-spacerun: yes">  </SPAN></SPAN>，<SPAN lang=EN-US>e-test</SPAN>等，主要的内容都是编写出测试脚本，脚本中一般包括用户一般常用的功能，然后运行，得出报告。所以负载测试包括的主要内容就不介绍了。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>负载测试技术在各种极限情况下对产品进行测试<SPAN lang=EN-US> (</SPAN>如很多人同时使用该软件，或者反复运行该软件<SPAN lang=EN-US>)</SPAN>，以检查产品的长期稳定性。例如，使用压力测试工具对<SPAN lang=EN-US>web</SPAN>服务器进行压力测试<SPAN lang=EN-US>. </SPAN>本项测试可以帮助找到一些大型的问题，如死机、崩损、内存泄漏等，因为有些存在内存泄漏问题的程序，在运行一两次时可能不会出现问题，但是如果运行了成千上万次，内存泄漏得越来越多，就会导致系统崩滑。用<SPAN lang=EN-US>J2EE</SPAN>实现的系统很少但是并不是没有内存问题</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>无论什么工具基本的技术都是利用线程技术模仿和虚拟用户，在这里主要的难点在与测试脚本的编写，每种工具使用的脚本都不一样，但是大多数工具都提供录制功能就算是不会编码的测试人员同样可以测试。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>对负载工具的延伸使用可以进行系统稳定性测试，系统极限测试，如使用<SPAN lang=EN-US>100</SPAN>的<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN>oad Size</SPAN>连续使用<SPAN lang=EN-US>24</SPAN>小时，微软定义的通过准则是通过<SPAN lang=EN-US>72</SPAN>小时测试的程序一般不会出现稳定性的问题。 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体><SPAN lang=EN-US>2.4 </SPAN>回归测试</FONT><FONT face=宋体><SPAN lang=EN-US> (Regression Test) <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>过一段时间以后，再回过头来对以前修复过的<SPAN lang=EN-US>Bug</SPAN>重新进行测试，看该<SPAN lang=EN-US>Bug </SPAN>是否会重新出现。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>回归测试技术可以在测试的各个阶段出现，无论是单元测试还是集成测试还是系统测试。是对以前问题进行验证的过程。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>回归测试的目的就是保证以前已经修复的<SPAN lang=EN-US>Bug</SPAN>不会再出现。实际上，许多<SPAN lang=EN-US>Bug</SPAN>都是在回归测试时发现的，在此阶段，我们首先要检查以前找到的<SPAN lang=EN-US>Bug </SPAN>是否已经更正了。值得注意的是，已经更正的<SPAN lang=EN-US>Bug </SPAN>也可能又回来了，有的<SPAN lang=EN-US>Bug </SPAN>经过修改之后可能又产生了新的<SPAN lang=EN-US>Bug</SPAN>。所以，回归测试可保证已更正的<SPAN lang=EN-US>Bug</SPAN>不再重现，不产生新的<SPAN lang=EN-US>Bug</SPAN>。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>2.5 A<SPAN style="mso-spacerun: yes">  </SPAN>pha </SPAN>和<SPAN lang=EN-US>Beta </SPAN>测试</FONT><FONT face=宋体><SPAN lang=EN-US> (A<SPAN style="mso-spacerun: yes">  </SPAN>pha and Beta Test): <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>在正式发布产品之前往往要先发布一些测试版，让用户能够反馈出相关信息，或者找到存在的<SPAN lang=EN-US>Bug</SPAN>，以便在正式版中得到解决。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>特别是在有客户参加的情况下，对系统进行测试可能会出现一些我们没有考虑的情况，还可以解决一些客户实际关心的问题 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体>不同的测试技术区分</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>3.1 </SPAN>覆盖测试技术</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>说明<SPAN lang=EN-US>:</SPAN>测试覆盖率可以看出测试的完成度<SPAN lang=EN-US>,</SPAN>在测试分析报告中可以作为量化指标的依据，测试覆盖率越高效果越好。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>覆盖测试可以是程序代码的执行路径覆盖，亦可以是功能实现的步骤覆盖（可以理解成流程图的路径覆盖）。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>该技术可以用在任何测试阶段，包括单元测坏死、集成测试、系统测试。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>使用该技术时可以使用以上的任何测试方法和测试技术。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>3.2 </SPAN>白盒测试和黑盒测试技术</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>白盒测试技术<SPAN lang=EN-US> (White Box Testing)</SPAN>该技术主要的特征是测试对象进入了代码内部<SPAN lang=EN-US>,</SPAN>根据开发人员对代码和对程序的熟悉程度<SPAN lang=EN-US>,</SPAN>对有需要的部分进行在软件编码阶段，开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主，使用<SPAN lang=EN-US>Xunit</SPAN>系列工具进行测试，可以包括很多方面如功能性能等。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>黑盒测试<SPAN lang=EN-US> (Black Box Testing)</SPAN>测试的主体部分黑盒测试的内容主要有以下几个方面，但是主要还是功能部分。主要是覆盖全部的功能，可以结合兼容，性能测试等方面进行<SPAN lang=EN-US>,</SPAN>包括的不同测试类型请参考以上内容。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>3.3 </SPAN>手工测试和自动化测试</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>手工测试（<SPAN lang=EN-US>Manual <SPAN style="mso-spacerun: yes"> </SPAN>Testing</SPAN>）：即依靠人力来查找<SPAN lang=EN-US>Bug</SPAN>。方法可以参考上边的测试，也可以根据对实现技术及经验等进行不同的测试。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>自动测试（<SPAN lang=EN-US>Automation Testing</SPAN>）使用有针对工具实行。可以作出自动化测试的计划<SPAN lang=EN-US>,</SPAN>对可以进行自动化测试的部分编写或者录制相应的脚本<SPAN lang=EN-US>,</SPAN>可以加入功能<SPAN lang=EN-US>,</SPAN>容错<SPAN lang=EN-US>,</SPAN>表单提交等<SPAN lang=EN-US>,</SPAN>可以参考<SPAN lang=EN-US>MI,Rationa<SPAN style="mso-spacerun: yes">  </SPAN></SPAN>或者其他类测试工具说明</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>根据权威的软件测试经验，手工测试还是主要的测试方法，自动测试不够灵活，在这里不再详述。微软的测试过程<SPAN lang=EN-US>80</SPAN>％还是手工完成。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>自动测试永远也代替不了手工测试，但是手工测试的工作量很大是不争的事实。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>3.4 </SPAN>根据<SPAN lang=EN-US>RUP</SPAN>标准按阶段区分测试</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>单元测试在上边有详细的叙述，还有针对单元测试和集成测试的论述，请参考。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>集成测试分为功能集成测试和系统集成测试，相互有调用的功能集成，在系统环境下功能相互调用的影响等，使用方法可以任意选用上面的内容。注重功能方面。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>系统测试在功能实现的基础上，可以加入兼容性，易用性，性能等等</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>验收测试可以包括<SPAN lang=EN-US>Alpha</SPAN>和<SPAN lang=EN-US>Beta</SPAN>测试，在这里就不再详述。 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体><SPAN lang=EN-US>4. </SPAN>存在风险及解决方法</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>说明：测试不能找出所有的问题，只是尽量将问题在开发阶段解决大多数的问题而已。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>测试风险如下：</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软硬件的测试环境提供上也对测试结果有很大的影响。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>测试团队的水平，经验，合作效果等</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>整个开发流程对测试的重视程度，测试的进入时间等</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>由于测试环境操作系统，网络环境，带宽等情况可能产生的测试结果可能不同这是就需要经验以及对测试环境的保护等方面下一些功夫。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR>5. </SPAN>软件缺陷的原则</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件缺陷区别于软件<SPAN lang=EN-US>bug,</SPAN>它是在测试过程中出现的对系统有影响的<SPAN lang=EN-US>,</SPAN>但是在设计中没有的或者对修改后的<SPAN lang=EN-US>bug</SPAN>测试和开发人员有不同意见等</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件未达到产品说明书标明的功能。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件出现了产品说明书指明不会出现的错误。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件功能超出产品说明书指明范围。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件未达到产品说明书虽未指出但应达到的目标。</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>软件测试员认为软件难以理解、不易使用、运行速度缓慢，或者最终用户认为不好。 <SPAN lang=EN-US><o:p></o:p></SPAN></FONT></P>
<P><FONT face=宋体><SPAN lang=EN-US>6. </SPAN>文档测试</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>产品说明书属性检查清单</FONT><FONT face=宋体><SPAN lang=EN-US> <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>完整<SPAN lang=EN-US>.</SPAN>是否有遗漏和丢失<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>完全吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>单独使用是否包含全部内容</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>准确<SPAN lang=EN-US>.</SPAN>既定解决方案正确吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>目标明确吗<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>有没有错误</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>精确<SPAN lang=EN-US>,</SPAN>不含糊<SPAN lang=EN-US>,</SPAN>清晰<SPAN lang=EN-US>.</SPAN>描述是否一清二楚<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>还是自说自话<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>容易看懂和理解吗</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>一致<SPAN lang=EN-US>.</SPAN>产品功能能描述是否自相矛盾<SPAN lang=EN-US>,</SPAN>与其他功能有没有冲突</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>贴切<SPAN lang=EN-US>.</SPAN>描述功能的陈述是否必要<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>有没有多余信息<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>功能是否原来的客户要求</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>合理<SPAN lang=EN-US>.</SPAN>在特定的预算和进度下<SPAN lang=EN-US>,</SPAN>以现有人力<SPAN lang=EN-US>,</SPAN>物力和资源能否实现</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>代码无关<SPAN lang=EN-US>.</SPAN>是否坚持定义产品<SPAN lang=EN-US>,</SPAN>而不是定义其所信赖的软件设计<SPAN lang=EN-US>,</SPAN>架构和代码</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>可测试性<SPAN lang=EN-US>.</SPAN>特性能否测试<SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN></SPAN>测试员建立验证操作的测试程序是否提供足够的信息</FONT><FONT face=宋体><SPAN lang=EN-US><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN><BR><BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>产品说明书用语检查清单</FONT><FONT face=宋体><SPAN lang=EN-US> <BR></SPAN>说明 对问题的描述通常表现为粉饰没有仔细考虑的功能<SPAN lang=EN-US>----</SPAN>可归结于前文所述的属性<SPAN lang=EN-US>.</SPAN>从产品说明书上找出这样的用语<SPAN lang=EN-US>,</SPAN>仔细审视它们在文中是怎样使用的<SPAN lang=EN-US>.</SPAN>产品说明书可能会为其掩饰和开脱<SPAN lang=EN-US>,</SPAN>也可能含糊其词<SPAN lang=EN-US>----</SPAN>无论是哪一种情况都可视为软件缺陷</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>总是<SPAN lang=EN-US>,</SPAN>每一种<SPAN lang=EN-US>,</SPAN>所有<SPAN lang=EN-US>,</SPAN>没有<SPAN lang=EN-US>,</SPAN>从不<SPAN lang=EN-US>.</SPAN>如果看到此类绝对或肯定的<SPAN lang=EN-US>,</SPAN>切实认定的叙述<SPAN lang=EN-US>,</SPAN>软件测试员就可以着手设计针锋相对的案例</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>当然<SPAN lang=EN-US>,</SPAN>因此<SPAN lang=EN-US>,</SPAN>明显<SPAN lang=EN-US>,</SPAN>显然<SPAN lang=EN-US>,</SPAN>必然<SPAN lang=EN-US>.</SPAN>这些话意图诱使接受假定情况<SPAN lang=EN-US>.</SPAN>不要中了圈套</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>某些<SPAN lang=EN-US>,</SPAN>有时<SPAN lang=EN-US>,</SPAN>常常<SPAN lang=EN-US>,</SPAN>通常<SPAN lang=EN-US>,</SPAN>惯常<SPAN lang=EN-US>,</SPAN>经常<SPAN lang=EN-US>,</SPAN>大多<SPAN lang=EN-US>,</SPAN>几乎<SPAN lang=EN-US>.</SPAN>这些话太过模糊<SPAN lang=EN-US>."</SPAN>有时<SPAN lang=EN-US>"</SPAN>发生作用的功能无法测试</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>等等<SPAN lang=EN-US>,</SPAN>诸如此类<SPAN lang=EN-US>,</SPAN>依此类推<SPAN lang=EN-US>.</SPAN>以这样的词结束的功能清单无法测试<SPAN lang=EN-US>.</SPAN>功能清单要绝对或者解释明确<SPAN lang=EN-US>,</SPAN>以免让人迷惑<SPAN lang=EN-US>,</SPAN>不知如何推论</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>良好<SPAN lang=EN-US>,</SPAN>迅速<SPAN lang=EN-US>,</SPAN>廉价<SPAN lang=EN-US>,</SPAN>高效<SPAN lang=EN-US>,</SPAN>小<SPAN lang=EN-US>,</SPAN>稳定<SPAN lang=EN-US>.</SPAN>这些是不确定的说法<SPAN lang=EN-US>,</SPAN>不可测试<SPAN lang=EN-US>.</SPAN>如果在产品说明书中出现<SPAN lang=EN-US>,</SPAN>就必须进一步指明含义</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>已处理<SPAN lang=EN-US>,</SPAN>已拒绝<SPAN lang=EN-US>,</SPAN>已忽略<SPAN lang=EN-US>,</SPAN>已消除<SPAN lang=EN-US>.</SPAN>这些廉洁可能会隐藏大量需要说明的功能</FONT><FONT face=宋体><SPAN lang=EN-US>. <BR><SPAN style="mso-spacerun: yes">  </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN>如果<SPAN lang=EN-US>...</SPAN>那么<SPAN lang=EN-US>...(</SPAN>没有否则<SPAN lang=EN-US>).</SPAN>找出有<SPAN lang=EN-US>"</SPAN>如果<SPAN lang=EN-US>...</SPAN>那么<SPAN lang=EN-US>..."</SPAN>而缺少配套的<SPAN lang=EN-US>"</SPAN>否则<SPAN lang=EN-US>"</SPAN>结构的陈述<SPAN lang=EN-US>.</SPAN>想一想<SPAN lang=EN-US>"</SPAN>如果<SPAN lang=EN-US>"</SPAN>没有发生会怎样<SPAN lang=EN-US>. <o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P>
<P> </P><img src ="http://www.blogjava.net/qq13367612/aggbug/16017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qq13367612/" target="_blank">Sung</a> 2005-09-13 14:46 <a href="http://www.blogjava.net/qq13367612/articles/16017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件测试与可靠性评估方法研究</title><link>http://www.blogjava.net/qq13367612/articles/16018.html</link><dc:creator>Sung</dc:creator><author>Sung</author><pubDate>Tue, 13 Sep 2005 06:38:00 GMT</pubDate><guid>http://www.blogjava.net/qq13367612/articles/16018.html</guid><wfw:comment>http://www.blogjava.net/qq13367612/comments/16018.html</wfw:comment><comments>http://www.blogjava.net/qq13367612/articles/16018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qq13367612/comments/commentRss/16018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qq13367612/services/trackbacks/16018.html</trackback:ping><description><![CDATA[摘要：随着科学技术的飞速发展，软件的功能越来越强大，软件的复杂性也越来越高，从而大大增加了软件测试与可靠性评估的难度。为了保证一个软件系统的质量，有必要针对软件的测试与可靠性评估方法进行专门地研究。本文就是针对这一领域所做的一些研究。 <BR><BR>　　关键词：软件测试 可靠性 软件评估 <BR><BR>　　<B>一.软件测试的定义</B> <BR><BR>　　软件测试（Software testing）是软件生存期（Software life cycle）中的一个重要阶段，是软件质量保证的关键步骤。通俗地讲，软件测试就是在软件投入运行前，对软件需求分析、设计规格说明和编码进行最终复审的活动。1983年IEEE提出的软件工程术语中给软件测试下的定义是：“使用人工或自动的手段来运行或测定某个软件系统的过程，其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出：软件测试的目的是为了检验软件系统是否满足需求。 <BR><BR>　　从用户的角度来看，普遍希望通过软件测试暴露软件中隐藏的错误和缺陷，所以软件测试应该是“为了发现错误而执行程序的过程”。或者说，软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例（即输入数据及其预期的输出结果），并利用这些测试用例去运行程序，以发现程序错误或缺陷。 <BR><BR>　　<B>二.软件测试的生命周期</B> <BR><BR>　　测试主要依据是被试系统的研制任务书和技术规格书，是对软件整体功能和性能的综合测试与评估。测试原理是软件测试活动的理论基础，测试方法是测试原理的实际应用和获得测试数据的手段。基于软件的共性，对于软件的测试要遵循一般软件的测试原理和方法。同时，针对软件的特性，必须找到合适的测试方法。测试用例的合理性对于软件的测试与评估具有关键作用，而如何使设计的用例合情、合理并且典型有效并不容易。所以应该与软件的研制人员以及最终用户一起，有针对性地研究实际操作环境并加以描述，形成合理的测试用例集。另一方面，软件运行环境的复杂程度对软件评估具有重要作用，所以应产生尽量逼真的运行背景以便于研究。软件测试的周期如图1所示。 <BR><BR>　　实践证明，尽管人们在开发软件的过程中使用了许多保证软件质量的方法和技术，但开发出的软件中还会隐藏许多错误和缺陷。这对于规模大、复杂性高的软件更是如此。所以，严格的软件测试对于保证软件质量具有重要作用。 <BR><BR>　　软件测试在软件生存期中横跨两个阶段。在软件编码阶段，当编写出一个模块后，通常要对它进行必要的测试（称为单元测试），这时测试与编码属于同一个阶段。在编码阶段结束后，对软件系统还要进行各种综合测试（集成测试与系统测试），这是一个独立阶段，即软件测试阶段。在这个测试阶段又有两种性质不同的测试：研制单位内部进行的集成测试和系统测试与用户（或第三方）进行的验收性测试。 <BR><BR>　　在软件测试生命周期内，错误在软件开发的每个阶段都可能被带入。在软件测试中，某些错误被发现、分类、隔离，最终被纠正。由于软件不断被修改，所以这个过程是一个反复进行的过程。 <BR><BR>　　<B>三.测试方法和流程</B> <BR><BR>　　软件测试方法主要有黑箱测试方法与白箱测试两类。黑箱测试又称功能测试、数据驱动测试或基于规格说明的测试，是在完全不考虑程序内部结构和内部特性的情况下，检查输入与输出之间关系是否符合要求。白箱测试又称结构测试、逻辑驱动测试或基于程序的测试，是在已知程序内部结构的情况下设计测试用例的测试方法。显然，白箱测试适合在单元测试中运用，而在独立测试阶段多采用黑箱测试方法。 <BR><BR>　　测试用例（Test case）实际上是对软件运行过程中所有可能存在的目标、运动、行动、环境和结果的描述，是对客观世界的一种抽象。设计测试用例即设计针对特定功能或组合功能的测试方案，并编写成文档。测试用例应该体现软件工程的思想和原则。测试用例的选择既要有一般情况，也应有极限情况以及最大和最小的边界值情况。因为测试的目的是暴露应用软件中隐藏的缺陷，所以在设计选取测试用例和数据时要考虑那些易于发现缺陷的测试用例和数据，结合复杂的运行环境，在所有可能的输入条件和输出条件中确定测试数据，来检查应用软件是否都能产生正确的输出。 <BR><BR>　　软件测试所得到的数据经过处理以后，可以用来作为评估软件系统是否满足用户需求的依据。软件测试阶段的信息流如图2所示： <BR><BR>　　<B>四.软件评估理论及其发展现状</B> <BR><BR>　　软件的评估理论是进行评估的理论依据，评估方法是评估理论的实际应用和处理测试数据的方法。对于评估指标体系中的不同指标，应该根据测试数据的不同，选取相应的评估理论和方法。软件评估（Software assessment）的实质是对软件质量的度量与评价。 <BR><BR>　　我们对软件质量评估的定义是：“为了确定一特定的软件模块、软件包或软件产品是否验收合格或发布而把特定的评估准则应用到该软件模块、软件包或软件产品上去的活动”。 <BR><BR>　　可见，软件评估的对象是“软件模块、软件包或软件产品”，软件评估的目的是“确定被评对象是否验收合格或发布”。定义中提到的评估准则是“根据特定的软件产品和质量需求，确定产品是否通过验收或发布的一组成文的规则和条件的集合”。从广泛意义上讲，评估准则已经包括了评估方法和指标体系，即如何处理获得的测试数据与如何应用评估准则到被评估软件上。 <BR><BR>　　软件可靠性评估（Software reliability assessment）的完整含义是：根据软件系统可靠性结构（单元与系统间可靠性关系）、寿命类型和各单元的可靠性试验信息，利用概率统计方法，评估出系统的可靠性特征量。 <BR><BR>　　目前，软件可靠性工程是一门虽然得到普遍承认，但还处于不成熟的正在发展确立阶段的新兴工程学科。国外从60年代后期开始加强软件可靠性的研究工作，经过20年左右的研究推出了各种可靠性模型和预测方法，于1990年前后形成较为系统的软件可靠性工程体系。同时，从80年代中期开始，西方各主要工业强国均确立了专门的研究计划和课题，如英国的AIVEY（软件可靠性和度量标准）计划、欧洲的ESPRIT（欧洲信息技术研究与发展战略）计划、SPMMS（软件生产和维护管理保障）课题、Eureka（尤里卡）计划等。每年，都有大量人力物力投入软件可靠性研究项目，并取得一定成果。 <BR><BR>　　国内对于软件可靠性的研究工作起步较晚，在软件可靠性量化理论、度量标准（指标体系）、建模技术、设计方法、测试技术等方面与国外差距较大。国内多数软件的生产方式还处于计算机时代的早期阶段，缺点很明显，主要表现在：1、透明度差；2、软件交付系统联调前只靠自检，质量得不到保证；3、用户对交付的软件可靠性缺乏信心。多数所谓的“软件测试”仅仅对几个预先指定的用例进行一下表演就算通过。目前还没有像硬件那样完善的检验体系，交付软件的质量不高。典型统计表明，“开发阶段平均每千行代码有50-60个缺陷，交付后平均每千行代码有15-18个缺陷”，有时会留下严重隐患。 <BR><BR>　　目前，软件可靠性管理方面还没有建立起具有权威性的管理体系和规范。比如，如何描述软件可靠性、如何测试、如何评估、如何设计、如何提高等。由于目前国内外对于软件可靠性模型的研究多集中在软件的研制阶段，而很少有涉及测试与评估阶段的可靠性模型，所以从事软件可靠性测试与评估研究是一个有理论价值和实际意义、并且存在一定难度的课题。 <BR><BR>　　随着计算机软件编制的规范化，必然要将软件可靠性考核纳入科学、规范的轨道。具体表现在：1、在软件系统研制任务中，制定软件可靠性量化指标，使软件考核有明确的标准；2、建立完善的软件测试、可靠性信息收集系统，使在计算机软件开发中通过科学的软件测试不断减少缺陷；3、通过研究软件可靠性考核方法，制定相应的软件考核规程、标准；4、开发软件可靠性评估软件，使软件鉴定更加方便。 <BR><BR>　　<B>五.软件可靠性评估的定义</B> <BR><BR>　　可靠性（reliability）是产品在规定的条件下和规定的时间内完成规定功能的能力，它的概率度量称为可靠度。 <BR><BR>　　软件可靠性（software reliability）是软件系统的固有特性之一，它表明了一个软件系统按照用户的要求和设计的目标，执行其功能的正确程度。软件可靠性与软件缺陷有关，也与系统输入和系统使用有关。理论上说，可靠的软件系统应该是正确、完整、一致和健壮的。但是实际上任何软件都不可能达到百分之百的正确，而且也无法精确度量。一般情况下，只能通过对软件系统进行测试来度量其可靠性。 <BR><BR>　　这样，给出如下定义：“软件可靠性是软件系统在规定的时间内及规定的环境条件下，完成规定功能的能力”。根据这个定义，软件可靠性包含了以下三个要素： <BR><BR>　　1.规定的时间 <BR><BR>　　软件可靠性只是体现在其运行阶段，所以将“运行时间”作为“规定的时间”的度量。“运行时间”包括软件系统运行后工作与挂起（开启但空闲）的累计时间。由于软件运行的环境与程序路径选取的随机性，软件的失效为随机事件，所以运行时间属于随机变量。 <BR><BR>　　2.规定的环境条件 <BR><BR>　　环境条件指软件的运行环境。它涉及软件系统运行时所需的各种支持要素，如支持硬件、操作系统、其它支持软件、输入数据格式和范围以及操作规程等。不同的环境条件下软件的可靠性是不同的。具体地说，规定的环境条件主要是描述软件系统运行时计算机的配置情况以及对输入数据的要求，并假定其它一切因素都是理想的。有了明确规定的环境条件，还可以有效判断软件失效的责任在用户方还是研制方。 <BR><BR>　　3.规定的功能 <BR><BR>　　软件可靠性还与规定的任务和功能有关。由于要完成的任务不同，软件的运行剖面会有所区别，则调用的子模块就不同（即程序路径选择不同），其可靠性也就可能不同。所以要准确度量软件系统的可靠性必须首先明确它的任务和功能。 <BR><BR>　　在讲到软件可靠性评估的时候，我们不得不提到软件可靠性模型。软件可靠性模型（Software reliability model）是指为预计或估算软件的可靠性所建立的可靠性框图和数学模型。建立可靠性模型是为了将复杂系统的可靠性逐级分解为简单系统的可靠性，以便于定量预计、分配、估算和评价复杂系统的可靠性。 <BR><BR>　　<B>六.软件的缺陷和失效</B> <BR><BR>　　缺陷（defect/fault）是指软件的内在缺陷。在软件生命周期的各个阶段，特别是在早期设计和编码阶段，设计者和编程人员的行动（如需求不完整、理解有歧义、没有完全实现需求或潜在需求、算法逻辑错、编程问题等）会使软件在一定条件下不能或将不能完成规定功能，这样就不可避免地存在“缺陷”。 <BR><BR>　　软件一旦有缺陷，它将潜伏在软件中，直到它被发现和正确修改。反之，在一定的环境下，软件一旦运行正确，它将继续保持这种正确性，除非环境发生变化。此外，软件中的缺陷不会为因使用而“损耗”。所以缺陷是“无损耗”地潜伏在软件中。 <BR><BR>　　如果软件在运行时没有用到有缺陷的部分，软件就可以正常运行且正确工作；若用到了有缺陷的部分，则软件的计算或判断就会与规定的不符从而使软件丧失执行要求的功能的能力。软件不能完成规定功能即“失效”（failure）或“故障”。对于无容错设计的软件而言，局部失效则整个软件失效。对于采取容错设计的软件，局部故障或失效并不一定导致整个软件失效。 <BR><BR>　　判断软件是否失效的判据有：系统死机、系统无法启动、不能输入输出显示记录、计算数据有误、决策不合理以及其它削弱或使软件功能丧失的事件或状态。 <BR><BR>　　<B>七.软件的可靠性测试过程</B> <BR><BR>　　完整的测试过程包括测试前的检查、设计测试用例、测试实施、可靠性数据收集和编写测试报告5个步骤，下面逐一对这5个步骤进行说明。 <BR><BR>　　1.测试前的检查 <BR><BR>　　在进行应用软件的可靠性测试前有必要检查软件需求与研制任务书是否一致，检查所交付程序和数据以及相应的软件支持环境是否符合要求，检查文档与程序的一致性，检查软件研制过程中形成的文档是否齐全、文档的准确性和完整性以及是否通过了有关评审。 <BR><BR>　　根据软件行业的有关标准，我们知道，软件研制过程中形成的文档共有十六种：《系统和段设计文件》、《软件开发计划》、《软件需求规格说明》、《接口需求规格说明》、《接口设计文档》、《软件设计文档》、《软件产品规格说明》、《版本说明文档》、《软件测试计划》、《软件测试说明》、《软件测试报告》、《计算机系统操作员手册》、《软件用户手册》、《软件程序员手册》、《固件保障手册》、《计算机资源综合保障手册》。 <BR><BR>　　应该注意：这里的《软件测试计划》、《软件测试说明》和《软件测试报告》是指研制方在研制过程中进行测试所形成的测试文档。原则上若软件规模不太大，某些文档可以合并。 <BR><BR>　　这些检查虽然增加了工作量，但对于在测试早期发现错误和提高软件的质量是非常必要的。 <BR><BR>　　2.设计测试用例 <BR><BR>　　设计测试用例就是针对特定功能或组合功能设计测试方案，并编写成文档。测试用例的选择既要有一般情况，也应有极限情况以及最大和最小的边界值情况。因为测试的目的是暴露应用软件中隐藏的缺陷，所以在设计选取测试用例和数据时要考虑那些易于发现缺陷的测试用例和数据，结合复杂的运行环境，在所有可能的输入条件和输出条件中确定测试数据，来检查应用软件是否都能产生正确的输出。 <BR><BR>　　一个典型的测试用例应该包括下列详细信息： <BR><BR>　　a.测试目标； <BR><BR>　　b.待测试的功能； <BR><BR>　　c.测试环境及条件； <BR><BR>　　d.测试日期； <BR><BR>　　e.测试输入； <BR><BR>　　f.测试步骤； <BR><BR>　　g.预期的输出； <BR><BR>　　h.评价输出结果的准则。 <BR><BR>　　所有的测试用例应该经过专家评审才可以使用。 <BR><BR>　　设计与选取测试用例集的第一步是对测试用例进行描述，这种描述是否权威、完整、可理解与规范化，则决定了该测试用例能否或多大程度上可以被操作人员、软件研制人员和试验鉴定人员所理解接受。所以，规范化的测试用例描述在软件测试与评估中具有重要的作用。 <BR><BR>　　3.测试实施 <BR><BR>　　做好上述准备工作后，就可以实施测试了。研制方交付的任何软件文档中与可靠性质量特性有关的部分，包括产品说明书、用户文档、程序以及数据都应当按照需求说明和质量需求进行测试。在项目合同、需求说明书和用户文档中规定的所有配置情况下，程序和数据都必须进行测试。 <BR><BR>　　在测试中，可以考虑进行“强化输入”，即输入比正常输入更恶劣（合理程度的恶劣）的输入。如果软件在强化输入下可靠，只能说明比正规输入下可靠得多。 <BR><BR>　　为了获得更多的可靠性数据，应该采用多台计算机同时运行软件，以增加累计运行时间。 <BR><BR>　　4.可靠性数据收集 <BR><BR>　　软件可靠性数据是可靠性评估的基础。应该建立软件错误报告、分析与纠正措施系统。按照相关标准的要求，制定和实施软件错误报告和可靠性数据收集、保存、分析和处理的规程，完整、准确地记录软件测试阶段的软件错误报告和收集可靠性数据。 <BR><BR>　　用时间定义的软件可靠性数据可以分为四类：1、失效时间数据，记录发生一次失效所累积经历的时间；2、失效间隔时间数据，记录本次失效与上一次失效间的间隔时间；3、分组数据，记录某个时间区内发生了多少次失效；4、分组时间内的累积失效数，记录某个区间内的累积失效数。这四类数据可以互相转化。 <BR><BR>　　每个测试记录必须包含充分的信息，包括： <BR><BR>　　a.测试时间； <BR><BR>　　b.含有测试用例的测试计划或测试说明； <BR><BR>　　c.所有与测试有关的测试结果，包括所有测试时发生的故障； <BR><BR>　　d.参与测试的个人身份。 <BR><BR>　　5.编写测试报告 <BR><BR>　　测试活动结束后必须编写《软件可靠性测试报告》，对测试项及测试结果在测试报告中加以总结归纳。编写时可以参考GJB 438A-97中提供的《软件测试报告》格式，并应根据情况进行剪裁。测试报告应具备下列内容： <BR><BR>　　a.产品标识； <BR><BR>　　b.使用的配置（硬件和软件）； <BR><BR>　　c.使用的文档； <BR><BR>　　d.产品说明、用户文档、程序和数据的测试结果； <BR><BR>　　e.与需求不相符的项的列表； <BR><BR>　　f.测试的最终日期。 <BR><BR>　　这种规范化的过程管理控制有利于获得真实有效的数据，为最终得到客观的评估结果奠定基础。 <BR><BR>　　<B>八.结束语</B> <BR><BR>　　本文针对软件的测试与可靠性评估方法进行了专门地研究。当然，最好的软件可靠性评估方法是完全用现场试验的方法。评估软件的可靠性受到许多客观条件限制，其中最大的限制就是可靠性信息不足。所以应该利用构成软件的各个模块的历史可靠性试验信息统计评估全系统的可靠性。这需要：收集到足够的软件以及各个模块的历史可靠性试验信息；各个模块与软件的可靠性关系明确；各模块寿命类型已知；以及软件研制部门的配合（因为软件历史信息数据主要由研制方掌握）。 <BR><BR>　　<B>参考文献： <BR><BR>　　[1].杨为民等，可靠性维修性保障性丛书，国防工业出版社，1995. <BR><BR>　　[2].梅启智、廖炯生、孙惠中，系统可靠性工程基础，科学出版社，1992. <BR></B><img src ="http://www.blogjava.net/qq13367612/aggbug/16018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qq13367612/" target="_blank">Sung</a> 2005-09-13 14:38 <a href="http://www.blogjava.net/qq13367612/articles/16018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>