<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Smart Testing &#187; 软件测试</title>
	<atom:link href="http://www.hiadmin.org/category/testing/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hiadmin.org</link>
	<description>专注于软件测试领域的技术讨论和研究、关注IT互联网、WordPress技巧的个人博客</description>
	<lastBuildDate>Thu, 15 Dec 2011 04:20:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Wireshark抓取网站弱口令和捕获FTP账号密码</title>
		<link>http://www.hiadmin.org/testing/wireshark-capture-password/</link>
		<comments>http://www.hiadmin.org/testing/wireshark-capture-password/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 12:18:02 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[wireshark]]></category>
		<category><![CDATA[捕获弱口令]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/?p=1571</guid>
		<description><![CDATA[看到那么的朋友要求写一章关于wireshark数据分析的文章、这次压力忒大、今天终于空下来有时间写这方面的内容。 

Wireshark本身是不能破解弱口令的、但是我们可以通过分析抓取到数据进行人工破解呗。 

今天我就用我的Smart Testing博客和FTP来做下实验了(账号密码都是新建也没啥权限、各位就不要也用这个了)。 

一：用wireshark抓取网站登录弱口令 
二：用wireshark抓取FTP的账号和密码 <a href="http://www.hiadmin.org/testing/wireshark-capture-password/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>看到那么的朋友要求写一章关于wireshark数据分析的文章、这次压力忒大、今天终于空下来有时间写这方面的内容。</p>
<p>Wireshark本身是不能破解弱口令的、但是我们可以通过分析抓取到数据进行人工破解呗。</p>
<p>今天我就用我的Smart Testing博客和FTP来做下实验了(账号密码都是新建也没啥权限、各位就不要也用这个了)。</p>
<h4>一：用wireshark抓取网站登录弱口令</h4>
<p><span id="more-1571"></span></p>
<h4></h4>
<p>1、 第一步我们设置捕获过滤器(这次我们抓取的是http的数据包、所有在捕获过滤器里面输入http就可以了)</p>
<p>2、 点击开始之后打开我的博客地址(<a href="http://www.hiadmin.org">http://www.hiadmin.org</a>)并点击登录、来到<a href="http://www.hiadmin.org/wp-login.php">http://www.hiadmin.org/wp-login.php</a>页面、输入用户名和密码之后点击登录即可。</p>
<p>3、 登录完成之后我们就可以结束wireshark的捕获过程了。</p>
<p>4、 然后我们设置下显示过滤器:使用ip.addr == 203.171.239.103 这个是我博客服务器的IP地址、这样可以减少不少的http的数据。(你可以通过在cmd下使用ping命令获取到你的网站的ip地址)</p>
<div id="attachment_1575" class="wp-caption aligncenter" style="width: 579px"><a href="http://www.hiadmin.org/wp-content/uploads/2011/12/Wireshark-display-filter.jpg"><img class="size-full wp-image-1575" title="Wireshark显示过滤器" src="http://www.hiadmin.org/wp-content/uploads/2011/12/Wireshark-display-filter.jpg" alt="" width="569" height="229" /></a><p class="wp-caption-text">Wireshark显示过滤器</p></div>
<p>5、 过滤之后我们查找有/wp-login.php字样的数据(wp-login.php是我博客的后台登录页面地址)。</p>
<p>6、 查看所有/wp-login.php的数据、其实里面一共就2条、我们在第二条数据中捕获到了(log=huaisha&amp;pwd=279478776&amp;wp-submit=)这样的这样、看到没有这就是我的账号和密码了(user:huaisha/pwd:279478776)</p>
<p>当然如果用户的密码很复杂的话基本上这样就获取到得密码是不对的、所以是只能获取弱口令。</p>
<div id="attachment_1582" class="wp-caption aligncenter" style="width: 576px"><a href="http://www.hiadmin.org/wp-content/uploads/2011/12/user-password1.jpg"><img class="size-full wp-image-1582" title="wireshark捕获的账号密码" src="http://www.hiadmin.org/wp-content/uploads/2011/12/user-password1.jpg" alt="" width="566" height="272" /></a><p class="wp-caption-text">wireshark捕获的账号密码</p></div>
<h4>二：用wireshark抓取FTP的账号和密码</h4>
<p>同样的使用上面的方式我们来抓取FTP的账号密码、在抓取FTP账号密码的时候可不是针对弱口令的、只要你能抓取到FTP得数据那么就能得到FTP的账号和密码。</p>
<p>操作</p>
<p>1、 设置捕获过滤器仅仅抓取ftp的数据包</p>
<p>2、 开启ftp工具登录你的FTP服务器</p>
<p>3、 然后结束捕获过程</p>
<p>4、 在设置显示过滤器(ip.addr == 192.168.9.1 你的FTP地址)</p>
<p>5、 然后我们就会发现FTP的账号和密码居然是明文显示的、爽吧。</p>
<p><a href="http://www.hiadmin.org/wp-content/uploads/2011/12/FTP-password.jpg"><img class="aligncenter size-full wp-image-1584" title="wireshark获取到FTP账号密码" src="http://www.hiadmin.org/wp-content/uploads/2011/12/FTP-password.jpg" alt="" width="567" height="202" /></a></p>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/testing/wireshark-displayfilters/" title="Wireshark之显示过滤器">Wireshark之显示过滤器</a> (15)</li><li><a href="http://www.hiadmin.org/testing/wireshark/" title="网络抓包工具之Wireshark">网络抓包工具之Wireshark</a> (11)</li><li><a href="http://www.hiadmin.org/testing/cs-bs/" title="软件测试之C/S B/S">软件测试之C/S B/S</a> (8)</li><li><a href="http://www.hiadmin.org/testing/testing-bug/" title="软件测试笔记-BUG的定义">软件测试笔记-BUG的定义</a> (2)</li><li><a href="http://www.hiadmin.org/testing/testing-policy/" title="软件测试笔记-测试策略">软件测试笔记-测试策略</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/wireshark-capture-password/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Wireshark之显示过滤器</title>
		<link>http://www.hiadmin.org/testing/wireshark-displayfilters/</link>
		<comments>http://www.hiadmin.org/testing/wireshark-displayfilters/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 08:38:57 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[DisplayFilters]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/testing/wireshark-displayfilters/</guid>
		<description><![CDATA[前面我介绍过如何使用Wireshark抓取需要的数据包,但是当抓取的数据包日志越来越大的时候一行一行的看、也是一个很大的工作量、这个时候我们就需要用到显示过滤器了。

显示过滤器（DisplayFilters）：在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。

捕捉过滤器（CaptureFilters）：用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。我之前文章里面讲解的如何抓取数据包就是用到捕捉过滤器。



那么我们应该使用哪一种过滤器呢？

两种过滤器的目的是不同的。
捕捉过滤器是数据经过的第一层过滤器，它用于控制捕捉数据的数量，以避免产生过大的日志文件。
显示过滤器是一种更为强大（复杂）的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。 <a href="http://www.hiadmin.org/testing/wireshark-displayfilters/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>前面我介绍过如何使用Wireshark抓取需要的数据包,但是当抓取的数据包日志越来越大的时候一行一行的看、也是一个很大的工作量、这个时候我们就需要用到显示过滤器了。  </p>
<p><b>显示过滤器</b>（DisplayFilters）：在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。  </p>
<p><b>捕捉过滤器</b>（CaptureFilters）：用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。我之前文章里面讲解的如何抓取数据包就是用到捕捉过滤器。</p>
<p><span id="more-1567"></span>
<p>那么我们应该使用哪一种过滤器呢？  </p>
<p>两种过滤器的目的是不同的。<br />捕捉过滤器是数据经过的第一层过滤器，它用于控制捕捉数据的数量，以避免产生过大的日志文件。<br />显示过滤器是一种更为强大（复杂）的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。<br />
<h4>显示过滤器</h4>
</p>
<p><b></b><br />
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>语法：</p>
</td>
<td>
<p>Protocol</p>
</td>
<td>
<p>.</p>
</td>
<td>
<p>String 1</p>
</td>
<td>
<p>.</p>
</td>
<td>
<p>String 2</p>
</td>
<td>
<p>Comparison<br />operator</p>
</td>
<td>
<p>Value</p>
</td>
<td>
<p>Logical<br />Operations</p>
</td>
<td>
<p>Other<br />expression</p>
</td>
</tr>
<tr>
<td>
<p>例子：</p>
</td>
<td>
<p>ftp</p>
</td>
<td>&nbsp;</td>
<td>
<p>passive</p>
</td>
<td>&nbsp;</td>
<td>
<p>ip</p>
</td>
<td>
<p>==</p>
</td>
<td>
<p>10.2.3.4</p>
</td>
<td>
<p>xor</p>
</td>
<td>
<p>icmp.type</p>
</td>
</tr>
</tbody>
</table>
<p>例子：<br />
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>snmp || dns || icmp</p>
</td>
<td>
<p>显示SNMP或DNS或ICMP封包。</p>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>ip.addr == 192.168.10.10</p>
</td>
</tr>
</tbody>
</table>
<p>显示来源或目的IP地址为192.168.10.10的封包。<br />
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>ip.src != 10.1.2.3 or ip.dst != 10.4.5.6</p>
</td>
</tr>
</tbody>
</table>
<p>显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。<br />换句话说，显示的封包将会为：<br />来源IP：除了10.1.2.3以外任意；目的IP：任意<br />以及<br />来源IP：任意；目的IP：除了10.4.5.6以外任意<br />
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>ip.src != 10.1.2.3 and ip.dst != 10.4.5.6</p>
</td>
</tr>
</tbody>
</table>
<p>显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。<br />换句话说，显示的封包将会为：<br />来源IP：除了10.1.2.3以外任意；同时须满足，目的IP：除了10.4.5.6以外任意<br />
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>tcp.port == 25</p>
</td>
<td>
<p>显示来源或目的TCP端口号为25的封包。</p>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>tcp.dstport == 25</p>
</td>
<td>
<p>显示目的TCP端口号为25的封包。</p>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>tcp.flags</p>
</td>
<td>
<p>显示包含TCP标志的封包。</p>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>tcp.flags.syn == 0×02</p>
</td>
<td>
<p>显示包含TCP SYN标志的封包。</p>
</td>
</tr>
</tbody>
</table>
<p>如果过滤器的语法是正确的，表达式的背景呈绿色。如果呈红色，说明表达式有误。  </p>
<p><b>可以使用6种比较运算符：</b><br />
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>英文写法：</p>
</td>
<td>
<p>C语言写法：</p>
</td>
<td>
<p>含义：</p>
</td>
</tr>
<tr>
<td>
<p>eq</p>
</td>
<td>
<p>==</p>
</td>
<td>
<p>等于</p>
</td>
</tr>
<tr>
<td>
<p>ne</p>
</td>
<td>
<p>!=</p>
</td>
<td>
<p>不等于</p>
</td>
</tr>
<tr>
<td>
<p>gt</p>
</td>
<td>
<p>&gt; </p>
</td>
<td>
<p>大于</p>
</td>
</tr>
<tr>
<td>
<p>lt</p>
</td>
<td>
<p>&lt; </p>
</td>
<td>
<p>小于</p>
</td>
</tr>
<tr>
<td>
<p>ge</p>
</td>
<td>
<p>&gt;=</p>
</td>
<td>
<p>大于等于</p>
</td>
</tr>
<tr>
<td>
<p>le</p>
</td>
<td>
<p>&lt;=</p>
</td>
<td>
<p>小于等于</p>
</td>
</tr>
</tbody>
</table>
<p>Logical expressions（逻辑运算符）:<br />
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>英文写法：</p>
</td>
<td>
<p>C语言写法：</p>
</td>
<td>
<p>含义：</p>
</td>
</tr>
<tr>
<td>
<p>and</p>
</td>
<td>
<p>&amp;&amp;</p>
</td>
<td>
<p>逻辑与</p>
</td>
</tr>
<tr>
<td>
<p>or</p>
</td>
<td>
<p>||</p>
</td>
<td>
<p>逻辑或</p>
</td>
</tr>
<tr>
<td>
<p>xor</p>
</td>
<td>
<p>^^</p>
</td>
<td>
<p>逻辑异或</p>
</td>
</tr>
<tr>
<td>
<p>not</p>
</td>
<td>
<p>!</p>
</td>
<td>
<p>逻辑非</p>
</td>
</tr>
</tbody>
</table>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/testing/wireshark-capture-password/" title="Wireshark抓取网站弱口令和捕获FTP账号密码">Wireshark抓取网站弱口令和捕获FTP账号密码</a> (14)</li><li><a href="http://www.hiadmin.org/testing/wireshark/" title="网络抓包工具之Wireshark">网络抓包工具之Wireshark</a> (11)</li><li><a href="http://www.hiadmin.org/testing/cs-bs/" title="软件测试之C/S B/S">软件测试之C/S B/S</a> (8)</li><li><a href="http://www.hiadmin.org/testing/testing-bug/" title="软件测试笔记-BUG的定义">软件测试笔记-BUG的定义</a> (2)</li><li><a href="http://www.hiadmin.org/testing/testing-policy/" title="软件测试笔记-测试策略">软件测试笔记-测试策略</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/wireshark-displayfilters/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>网络抓包工具之Wireshark</title>
		<link>http://www.hiadmin.org/testing/wireshark/</link>
		<comments>http://www.hiadmin.org/testing/wireshark/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 14:11:04 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[wireshark]]></category>
		<category><![CDATA[抓包工具]]></category>
		<category><![CDATA[网络分析]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/testing/wireshark/</guid>
		<description><![CDATA[如果你需要知道和你QQ聊天对面人在那个城市，你想知道从你在浏览器中输入域名开始到你看到内容这段时间网络中都做了哪些事情、甚至是你想知道TCP三次握手的详细过程、当然你也可以想知道登陆FTP的密码、那么我都可以使用Wireshark网络分析器来实现。 

Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据，并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样，Wireshark也使用pcap network library来进行封包捕捉，wireshark的原名是Ethereal，由于商标问题修改为现在的Wireshark。


  

所有和网络活动有关的都可以通过Wireshark来抓取数据包进行网络分析、在我从事测试工作中经常会用到Wireshark来分析抓包分析问题，虽然到目前为止对Wireshark还不精通但是这并不影响我对Wireshark的热爱。 <a href="http://www.hiadmin.org/testing/wireshark/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>如果你需要知道和你QQ聊天对面人在那个城市，你想知道从你在浏览器中输入域名开始到你看到内容这段时间网络中都做了哪些事情、甚至是你想知道TCP三次握手的详细过程、当然你也可以想知道登陆FTP的密码、那么我都可以使用Wireshark网络分析器来实现。  </p>
<p>Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据，并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样，Wireshark也使用pcap network library来进行封包捕捉，wireshark的原名是Ethereal，由于商标问题修改为现在的Wireshark。</p>
<p><span id="more-1566"></span>
<p>&nbsp; </p>
<p>所有和网络活动有关的都可以通过Wireshark来抓取数据包进行网络分析、在我从事测试工作中经常会用到Wireshark来分析抓包分析问题，虽然到目前为止对Wireshark还不精通但是这并不影响我对Wireshark的热爱。<br />
<h4>Wireshark使用说明：</h4>
</p>
<p><strong>Protocol（协议)</strong><br />可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.<br />如果没有特别指明是什么协议，则默认使用所有支持的协议。  </p>
<p><strong>Direction（方向)</strong><br />可能的值: src, dst, src and dst, src or dst<br />如果没有特别指明来源或目的地，则默认使用 “src or dst” 作为关键字。<br />例如，”host 192.168.10.1&#8243;与”src or dst host 192.168.10.1&#8243;是一样的。<br /><strong>Host(s):</strong><br />可能的值： net, port, host, portrange.<br />如果没有指定此值，则默认使用”host”关键字。<br />例如，”src 192.168.10.10&#8243;与”src host 192.168.10.10&#8243;相同。  </p>
<p><strong>Logical Operations（逻辑运算）:<br /></strong>可能的值：not, and, or.<br />否(“not”)具有最高的优先级。或(“or”)和与(“and”)具有相同的优先级，运算时从左至右进行。<br />例如，<br />“not tcp port 3128 and tcp port 23&#8243;与”(not tcp port 3128) and tcp port 23&#8243;相同。<br />“not tcp port 3128 and tcp port 23&#8243;与”not (tcp port 3128 and tcp port 23)”不同。  </p>
<p>例子：  </p>
<p>capture捉包：  </p>
<p>tcp dst port 21&nbsp; 显示目的TCP端口为21的封包。  </p>
<p>ip src host 192.168.10.30&nbsp; 显示来源IP地址为192.168.10.30&nbsp; 的封包。  </p>
<p>host 192.168.10.30&nbsp;&nbsp;&nbsp; 显示目的或来源IP地址为192.168.10.30&nbsp; 的封包。  </p>
<p>src portrange 2000-2500&nbsp; 显示来源为UDP或TCP，并且端口号在2000至2500范围内的封包。  </p>
<p>not imcp&nbsp; 显示除了icmp以外的所有封包。（icmp通常被ping工具使用）  </p>
<p>src host 10.7.2.12 and not dst net 192.168.30.0/24&nbsp; 显示来源IP地址为10.7.2.12，但目的地不是192.168.30.0/24的封包。  </p>
<p>(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 <br />显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16，目的地TCP端口号在200至10000之间，并且目的位于网络10.0.0.0/8内的所有封包。<br />
<h4>注意事项：</h4>
</p>
<p>当使用关键字作为值时，需使用反斜杠“”。<br />“ether proto ip” (与关键字”ip”相同).<br />这样写将会以IP协议作为目标。  </p>
<p>“ip proto icmp” (与关键字”icmp”相同).<br />这样写将会以ping工具常用的icmp作为目标。  </p>
<p>可以在”ip”或”ether”后面使用”multicast”及”broadcast”关键字。<br />当您想排除广播请求时，”no broadcast”就会非常有用。</p>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/testing/wireshark-capture-password/" title="Wireshark抓取网站弱口令和捕获FTP账号密码">Wireshark抓取网站弱口令和捕获FTP账号密码</a> (14)</li><li><a href="http://www.hiadmin.org/testing/wireshark-displayfilters/" title="Wireshark之显示过滤器">Wireshark之显示过滤器</a> (15)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/wireshark/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>QTP 异常处理及场景恢复</title>
		<link>http://www.hiadmin.org/testing/qtp-unusual/</link>
		<comments>http://www.hiadmin.org/testing/qtp-unusual/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 09:37:43 +0000</pubDate>
		<dc:creator>819longjiayan</dc:creator>
				<category><![CDATA[软件测试]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/?p=1511</guid>
		<description><![CDATA[在测试脚本执行过程中，由于所测试的软件可能会发生非预期测试检查点的异常，如UI报错退出、莫名的窗体提示等，登陆的WEB页面也会经常出现刷新异常，这样会直接导致脚本找不到UI、对象而运行失败。因为是未知地、随机地发生此异常，而不是测试设计的检查点异常，所以在自动化测试的角度无法确定测试失败的原因和步骤，更无法实施Bug查找。在无人值守的情况下，此类异常还会导致后面的自动化测试工作无法进行。为了解决次为题，可以使用异常处理及场景恢复机制来弥补当前QTP的测试缺陷。场景恢复存在的目的在于避免测试过程中因为异常而引起的中断。并不是所有测试脚本都需要场景恢复，设计完美的测试脚本不仅可以让自动化测试过程更顺畅，同事还能够捕获可能产生的程序缺陷。 1. 异常处理的解决方案 在QTP中，异常处理的方法很多，而且不同软件公司的使用情况也不尽相同。这里介绍一种常用的方法，供大家学习。 1) . 设计思路 (1) . VBScript脚本中的“On Error Resume Next”意为，当脚本发生错误时自动运行下一行代码。可以利用此语句来解决QTP代码异常的问题。 (2) . 通过VBScript脚本中得“Err.number”可以得出发生错误的信息代码，即通过判断当前程序是否发生了错误来进行Bug捕获。可以编写ErrorHandle（）函数置于组件函数库中，用于捕获异常及相应处理。 (3) . 处理的内容包括调用常规处理函数及场景恢复函数。 异常处理流程如下： 启动程序代码异常忽略&#8212;-&#62;程序声明&#8212;&#62; 测试代码&#8212;-&#62;是否有异常：1.有，捕获异常&#38;调用场景恢复；2.没有，执行下一个action 2 .异常处理机制伪代码及使用指南 建议在QTP安装目录中得Dat目录下新建文本文件，命名为“ActionTemplate.mst ”,在QTp新建Test或Action时自动读取这个模板内容作为Action代码的一部分，可以利用这一特性来进行异常捕获。例如，可以在ActionTemplate.mst下写入如下代码。 On Error Resume Next &#8216;代码编辑区______________________________ &#8216;结束编辑___________________________ call ErrorHandle() 捕获异常及异常处理函数 ‘********************************************************************************** &#8216;函数作者： &#8216;函数功能：错误句柄处理 &#8216;输入参数：无 &#8216;返回值：日志文件、错误抓图 &#8216;调用函数：LogPrint、SceneResume &#8216;******************************************************************* Public Function ErrorHandle() if Err.Number0 Then &#8216; 打印记录详细Bug信息 LogPrint TestName&#38;”\”&#38;ActName&#38;”\Error Num: ” &#38;Err.Number &#38; “; Error Src:” &#38; Err.Source &#38; “; Error Desc: &#8230; <a href="http://www.hiadmin.org/testing/qtp-unusual/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在测试脚本执行过程中，由于所测试的软件可能会发生非预期测试检查点的异常，如UI报错退出、莫名的窗体提示等，登陆的WEB页面也会经常出现刷新异常，这样会直接导致脚本找不到UI、对象而运行失败。因为是未知地、随机地发生此异常，而不是测试设计的检查点异常，所以在自动化测试的角度无法确定测试失败的原因和步骤，更无法实施Bug查找。在无人值守的情况下，此类异常还会导致后面的自动化测试工作无法进行。为了解决次为题，可以使用异常处理及场景恢复机制来弥补当前QTP的测试缺陷。场景恢复存在的目的在于避免测试过程中因为异常而引起的中断。并不是所有测试脚本都需要场景恢复，设计完美的测试脚本不仅可以让自动化测试过程更顺畅，同事还能够捕获可能产生的程序缺陷。<br />
1. 异常处理的解决方案<br />
<span id="more-1511"></span><br />
在QTP中，异常处理的方法很多，而且不同软件公司的使用情况也不尽相同。这里介绍一种常用的方法，供大家学习。<br />
1) . 设计思路<br />
(1) . VBScript脚本中的“On Error Resume Next”意为，当脚本发生错误时自动运行下一行代码。可以利用此语句来解决QTP代码异常的问题。<br />
(2) . 通过VBScript脚本中得“Err.number”可以得出发生错误的信息代码，即通过判断当前程序是否发生了错误来进行Bug捕获。可以编写ErrorHandle（）函数置于组件函数库中，用于捕获异常及相应处理。<br />
(3) . 处理的内容包括调用常规处理函数及场景恢复函数。<br />
异常处理流程如下：</p>
<p>启动程序代码异常忽略&#8212;-&gt;程序声明&#8212;&gt; 测试代码&#8212;-&gt;是否有异常：1.有，捕获异常&amp;调用场景恢复；2.没有，执行下一个action</p>
<p>2 .异常处理机制伪代码及使用指南</p>
<p>建议在QTP安装目录中得Dat目录下新建文本文件，命名为“ActionTemplate.mst ”,在QTp新建Test或Action时自动读取这个模板内容作为Action代码的一部分，可以利用这一特性来进行异常捕获。例如，可以在ActionTemplate.mst下写入如下代码。<br />
On Error Resume Next<br />
&#8216;代码编辑区______________________________</p>
<p>&#8216;结束编辑___________________________</p>
<p>call ErrorHandle()<br />
捕获异常及异常处理函数<br />
‘**********************************************************************************<br />
&#8216;函数作者：<br />
&#8216;函数功能：错误句柄处理<br />
&#8216;输入参数：无<br />
&#8216;返回值：日志文件、错误抓图<br />
&#8216;调用函数：LogPrint、SceneResume<br />
&#8216;*******************************************************************</p>
<p>Public Function ErrorHandle()</p>
<p>if Err.Number0 Then<br />
&#8216; 打印记录详细Bug信息<br />
LogPrint TestName&amp;”\”&amp;ActName&amp;”\Error Num: ” &amp;Err.Number &amp; “; Error Src:” &amp; Err.Source &amp; “; Error Desc: “&amp; err.Description</p>
<p>Err.Clear<br />
Setting.WebPackage(ReplayType”)=2 &#8216;Default is 1<br />
Desktop.CaptureBitmap Environment(“Dir”) &amp; “\错误抓图\”&amp;TestName&amp;”_”&amp;ActName&amp;”.bmp”,True<br />
Setting.WebPackage(“ReplayType”)=1<br />
SceneResume(LinkText) &#8216;调用场景恢复函数，后面会对此函数进行说明<br />
End If</p>
<p>End Function</p>
<p>2.场景恢复函数说明<br />
场景恢复函数是由几个函数组合而成的，包含了日志函数、系统自动抓图函数、场景恢复调用的业务组件函数等。<br />
在执行测试程序的某个功能模块前，需要进行应用程序登录。</p>
<p>场景恢复函数的作用如下。<br />
* 禁用被测试系统的所有相关进程。<br />
* 调用登录模块的业务组件。<br />
* 判断是否登录成功，并尝试连接5次。</p>
<p>针对场景恢复函数特别说明如下：<br />
(1) 在第一个Action发生一次而关闭的时候，用一个变量记录当前测试的页面。在场景恢复执行登录应用程序成功后，会自动根据发生异常时记录的变量，连接到异常发生时候的页面，并进行下一个Action的操作。<br />
(2) 设置在登录的时候每隔5分钟尝试一次登录，并且总计尝试5次登录。这样设置的好处是，当网络由于某些原因突然连接不上，又无法确定网络连通的时间，在25分钟内尝试了5次后仍然登录不成功，那么久可以认为异常恢复失败而退出整体自动化测试的执行，并且记录日志”可能由于网络问题或其它原因，应用程序当前无法正常登录“。此时就需要人工查找网络断开的原因并恢复自动化测试的整体运行。</p>
<p>以下函数的代码段为伪代码，思路叫清晰。由于每个项目不同，登录环节也会不同，因此大家可以根据不同项目对以下函数进行修改使用。</p>
<p>&#8216;**********************************************************************************************</p>
<p>&#8216;函数作者：</p>
<p>&#8216;函数功能：当程序发送异常，进行场景恢复</p>
<p>&#8216;输入参数：LinkName:Action发生异常时候，变量记录的模块链接名称</p>
<p>&#8216;返回值：无</p>
<p>&#8216;调用函数：业务组件函数</p>
<p>&#8216;调用函数：业务组件函数</p>
<p>’************************************************************************************</p>
<p>Function SceneResume（LinkText）</p>
<p>For check=0 to 4</p>
<p>&#8216;以IE为例，禁止用所有的IE进程</p>
<p>WQL=”SELECT * FROM Win32_Process WhereName=&#8217;IEXPLORE.EXE&#8217;”</p>
<p>Set objServices=GetObject(“WinMgmts:”)</p>
<p>Set colobjSevicesSet=objServices.ExecQuery(WQL)</p>
<p>For Each objSWbemObject In colobjServicesSet</p>
<p>obWbemObject.Terminate</p>
<p>Next</p>
<p>&#8216;登录应用程序（业务组件函数）</p>
<p>If  登录成功 Then</p>
<p>Exit For</p>
<p>else</p>
<p>TryID=5</p>
<p>End if</p>
<p>wait(300)</p>
<p>Next</p>
<p>If TryID=5  then</p>
<p>LogPrint  “可能由于网络问题或其它原因，应用程序当前无法正常登录”</p>
<p>End If</p>
<p>End Function</p>
<p>&nbsp;</p>
<p>大家还有什么其它的异常处理方法及场景恢复的方法都在评论的地方回复出来吧，大家一起学习</p>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/guestbook/" title="水缸">水缸</a> (160)</li><li><a href="http://www.hiadmin.org/shares/google/" title="获得Google+邀请码">获得Google+邀请码</a> (150)</li><li><a href="http://www.hiadmin.org/shares/harvard880-english-course/" title="哈佛大学880元的45天学会英语教程免费下载">哈佛大学880元的45天学会英语教程免费下载</a> (126)</li><li><a href="http://www.hiadmin.org/shares/free-kelaisoftware-key/" title="免费发放科来网络分析系统序列号">免费发放科来网络分析系统序列号</a> (82)</li><li><a href="http://www.hiadmin.org/testing/cronolog/" title="用cronolog分割apache日志">用cronolog分割apache日志</a> (56)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/qtp-unusual/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>测试人员如何有效的提交BUG</title>
		<link>http://www.hiadmin.org/testing/software-bug/</link>
		<comments>http://www.hiadmin.org/testing/software-bug/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 03:04:08 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[software-bug]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[有效提交BUG]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/testing/software-bug/</guid>
		<description><![CDATA[软件测试人员遇到的第一节课就是如何有效的提交BUG，下面的文章不是专为软件测试人员所写，但是却是所有软件测试人员必读。在不同的公司对提交有效的BUG的标准不同、但是下面文章的内容却适合所有测试专业人员阅读、当然对于非测试人员也大有裨益。

引言
为公众写过软件的人，大概都收到过很拙劣的bug（计算机程序代码中的错误或程序运行时的瑕疵——译者注）报告，例如： 

在报告中说“不好用”； 

所报告内容毫无意义； <a href="http://www.hiadmin.org/testing/software-bug/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>软件测试人员遇到的第一节课就是如何有效的提交BUG，下面的文章不是专为软件测试人员所写，但是却是所有软件测试人员必读。在不同的公司对提交有效的BUG的标准不同、但是下面文章的内容却适合所有测试专业人员阅读、当然对于非测试人员也大有裨益。</p>
<h5><a name="intro"></a>引言</h5>
<p>为公众写过软件的人，大概都收到过很拙劣的bug（计算机程序代码中的错误或程序运行时的瑕疵——译者注）报告，例如：</p>
<p><span id="more-1549"></span></p>
<p>在报告中说“不好用”；</p>
<p>所报告内容毫无意义；</p>
<p>在报告中用户没有提供足够的信息；</p>
<p>在报告中提供了<em>错误</em>信息；</p>
<p>所报告的问题是由于用户的过失而产生的；</p>
<p>所报告的问题是由于其他程序的错误而产生的；</p>
<p>所报告的问题是由于网络错误而产生的；</p>
<p>这便是为什么“技术支持”被认为是一件可怕的工作，因为有拙劣的bug报告需要处理。然而并不是所有的bug报告都令人生厌：我在业余时间维护自由软件，有时我会收到非常清晰、有帮助并且<em>“有内容”</em>的bug报告。</p>
<p>在这里我会尽力阐明如何写一个好的bug报告。我非常希望每一个人在报告bug之前都读一下这篇短文，当然我也希望用户在给<em>我</em>报告bug之前已经读过这篇文章。</p>
<p>简单地说，报告bug的目的是为了让程序员看到程序的错误。您可以亲自示范，也可以给出能导致程序出错的、详尽的操作步骤。如果程序出错了，程序员会收集额外的信息直到找到错误的原因；如果程序没有出错，那么他们会请您继续关注这个问题，收集相关的信息。</p>
<p>在bug报告里，要设法搞清什么是事实（例如：“我在电脑旁”和“XX出现了”）什么是推测（例如：“我<em>想</em>问题可能是出在……”）。如果愿意的话，您可以省去推测，但是千万别省略事实。</p>
<p>当您报告bug的时候（既然您已经这么做了），一定是希望bug得到及时修正。所以此时针对程序员的任何过激或亵渎的言语（甚至谩骂）都是与事无补的——因为这可能是程序员的错误，也有可能是您的错误，也许您有权对他们发火，但是如果您能多提供一些有用的信息（而不是激愤之词）或许bug会被更快的修正。除此以外，请记住：如果是免费软件，作者提供给我们已经是出于好心，所以要是太多的人对他们无礼，他们可能就要“收起”这份好心了。</p>
<h5><a name="respect"></a>“程序不好用”</h5>
<p>程序员不是弱智：如果程序一点都不好用，他们不可能不知道。他们不知道一定是因为程序在他们看来工作得很正常。所以，或者是您作过一些与他们不同的操作，或者是您的环境与他们不同。他们需要信息，报告bug也是为了提供信息。信息总是越多越好。</p>
<p>许多程序，特别是自由软件，会公布一个“已知bug列表”。如果您找到的bug在列表里已经有了，那就不必再报告了，但是如果您认为自己掌握的信息比列表中的丰富，那无论如何也要与程序员联系。您提供的信息可能会使他们更简单地修复bug。</p>
<p>本文中提到的都是一些指导方针，没有哪一条是必须恪守的准则。不同的程序员会喜欢不同形式的bug报告。如果程序附带了一套报告bug的准则，一定要读。如果它与本文中提到的规则相抵触，那么请以它为准。</p>
<p>如果您不是报告bug，而是寻求帮助，您应该说明您曾经到哪里找过答案，（例如：我看了第四章和第五章的第二节，但我找不到解决的办法。）这会使程序员了解用户喜欢到哪里去找答案，从而使程序员把帮助文档做得更容易使用。</p>
<h5><a name="showme"></a>“演示给我看”</h5>
<p>报告bug的最好的方法之一是“演示”给程序员看。让程序员站在电脑前，运行他们的程序，指出程序的错误。让他们看着您启动电脑、运行程序、如何进行操作以及程序对您的输入有何反应。</p>
<p>他们对自己写的软件了如指掌，他们知道哪些地方不会出问题，而哪些地方最可能出问题。他们本能地知道应该注意什么。在程序真的出错之前，他们可能已经注意到某些地方不对劲，这些都会给他们一些线索。他们会观察程序测试中的每一个<em>细节</em>，并且选出他们认为有用的信息。</p>
<p>这些可能还不够。也许他们觉得还需要更多的信息，会请您重复刚才的操作。他们可能在这期间需要与您交流一下，以便在他们需要的时候让bug重新出现。他们可能会改变一些操作，看看这个错误的产生是个别问题还是相关的一类问题。如果您不走运，他们可能需要坐下来，拿出一堆开发工具，花上几个小时来<em>好好地</em>研究一下。但是最重要的是在程序出错的时候让程序员在电脑旁。一旦他们看到了问题，他们通常会找到原因并开始试着修改。</p>
<h5><a name="showmehow"></a>“告诉我该怎么做”</h5>
<p>如今是网络时代，是信息交流的时代。我可以点一下鼠标把自己的程序送到俄罗斯的某个朋友那里，当然他也可以用同样简单的方法给我一些建议。但是如果我的程序出了什么问题，我<em>不可能</em>在他旁边。“演示”是很好的办法，但是常常做不到。</p>
<p>如果您必须报告bug，而此时程序员又不在您身边，那么您就要想办法让bug<em>重现</em>在他们面前。当他们亲眼看到错误时，就能够进行处理了。</p>
<p>确切地告诉程序员您做了些什么。如果是一个图形界面程序，告诉他们您按了哪个按钮，依照什么顺序按的。如果是一个命令行程序，精确的告诉他们您键入了什么命令。您应该尽可能详细地提供您所键入的命令和程序的反应。</p>
<p>把您能想到的所有的输入方式都告诉程序员，如果程序要读取一个文件，您可能需要发一个文件的拷贝给他们。如果程序需要通过网络与另一台电脑通讯，您或许不能把那台电脑复制过去，但至少可以说一下电脑的类型和安装了哪些软件（如果可以的话）。</p>
<h5><a name="discribe"></a>“哪儿出错了？在我看来一切正常哦！”</h5>
<p>如果您给了程序员一长串输入和指令，他们执行以后没有出现错误，那是因为您没有给他们足够的信息，可能错误不是在每台计算机上都出现，您的系统可能和他们的在某些地方不一样。有时候程序的行为可能和您预想的不一样，这也许是误会，但是您会认为程序出错了，程序员却认为这是对的。</p>
<p>同样也要描述发生了什么。精确的描述您看到了什么。告诉他们为什么您觉得自己所看到的是错误的，最好再告诉他们，您认为自己应该看到什么。如果您只是说：“程序出错了”，那您很可能漏掉了非常重要的信息。</p>
<p>如果您看到了错误消息，一定要仔细、准确的告诉程序员，这<em>确实</em>很重要。在这种情况下，程序员只要修正错误，而不用去找错误。他们需要知道是什么出问题了，系统所报的错误消息正好帮助了他们。如果您没有更好的方法记住这些消息，就把它们写下来。只报告“程序出了一个错”是毫无意义的，除非您把错误消息一块报上来。</p>
<p>特殊情况下，如果有错误消息号，<em>一定</em>要把这些号码告诉程序员。不要以为您看不出任何意义，它就没有意义。错误消息号包含了能被程序员读懂的各种信息，并且很有可能包含重要的线索。给错误消息编号是因为用语言描述计算机错误常常令人费解。用这种方式告诉您错误的所在是一个最好的办法。</p>
<p>在这种情形下，程序员的排错工作会十分高效。他们不知道发生了什么，也不可能到现场去观察，所以他们一直在搜寻有价值的线索。错误消息、错误消息号以及一些莫名其妙的延迟，都是很重要的线索，就像办案时的指纹一样重要，保存好。</p>
<p>如果您使用UNIX系统，程序可能会产生一个内核输出（coredump）。内核输出是特别有用的线索来源，别扔了它们。另一方面，大多数程序员不喜欢收到含有大量内核输出文件的EMAIL，所以在发邮件之前最好先问一下。还有一点要注意：内核输出文件记录了完整的程序状态，也就是说任何秘密（可能当时程序正在处理一些私人信息或秘密数据）都可能包含在内核输出文件里。</p>
<h5><a name="antelope"></a>“出了问题之后，我做了……”</h5>
<p>当一个错误或bug发生的时候，您可能会做许多事情。但是大多数人会使事情变的更糟。我的一个朋友在学校里误删了她所有的Word文件，在找人帮忙之前她重装了Word，又运行了一遍碎片整理程序，这些操作对于恢复文件是毫无益处的，因为这些操作搞乱了磁盘的文件区块。恐怕在这个世界上没有一种反删除软件能恢复她的文件了。如果她不做任何操作，或许还有一线希望。</p>
<p>这种用户仿佛一只被逼到墙角的鼬（黄鼠狼、紫貂一类的动物——译者注）：背靠墙壁，面对死亡的降临奋起反扑，疯狂攻击。他们认为做点什么总比什么都不做强。然而这些在处理计算机软件问题时并不适用。</p>
<p>不要做鼬，做一只羚羊。当一只羚羊面对料想不到的情况或受到惊吓时，它会一动不动，是为了不吸引任何注意，与此同时也在思考解决问题的最好办法（如果羚羊有一条技术支持热线，此时占线。）。然后，一旦它找到了最安全的行动方案，它便去做。</p>
<p>当程序出毛病的时候，立刻停止正在做的<em>任何操作</em>。不要按任何健。仔细地看一下屏幕，注意那些不正常的地方，记住它或者写下来。然后慎重地点击“确定” 或“取消”，选择一个最安全的。学着养成一种条件反射——一旦电脑出了问题，先不要动。要想摆脱这个问题，关掉受影响的程序或者重新启动计算机都不好，一个解决问题的好办法是让问题再次产生。程序员们喜欢可以被重现的问题，快乐的程序员可以更快而且更有效率的修复bug。</p>
<h5><a name="symptoms"></a>“我想粒子的跃迁与错误的极化有关”</h5>
<p>并不只是非专业的用户才会写出拙劣的bug报告，我见过一些非常差的bug报告出自程序员之手，有些还是非常优秀的程序员。</p>
<p>有一次我与另一个程序员一起工作，他一直在找代码中的bug，他常常遇到一个bug，但是不会解决，于是就叫我帮忙。“出什么毛病了？”我问。而他的回答却总是一些关于bug的意见。如果他的观点正确，那的确是一件好事。这意味着他已经完成了工作的一半，并且我们可以一起完成另一半工作。这是有效率并有用的。</p>
<p>但事实上他常常是错的。这就会使我们花上半个小时在原本正确的代码里来回寻找错误，而实际上问题出在别的地方。我敢肯定他不会对医生这么做。“大夫，我得了Hydroyoyodyne（真是怪病——译者），给我开个方子”，人们知道不该对一位医生说这些。您描述一下症状，哪个地方不舒服，哪里疼、起皮疹、发烧……让医生诊断您得了什么病，应该怎样治疗。否则医生会把您当做疑心病或精神病患者打发了，这似乎没什么不对。</p>
<p>做程序员也是一样。即便您自己的“诊断”有时真的有帮助，也要只说“症状”。“诊断”是可说可不说的，但是“症状”一定要说。同样，在bug报告里面附上一份针对bug而做出修改的源代码是有用处的，但它并不能替代bug报告本身。</p>
<p>如果程序员向您询问额外的信息，千万别应付。曾经有一个人向我报告bug，我让他试一个命令，我知道这个命令不好用，但我是要看看程序会返回一个什么错误（这是很重要的线索）。但是这位老兄根本就没试，他在回复中说“那肯定不好用”，于是我又花了好些时间才说服他试了一下那个命令。</p>
<p>用户多动动脑筋对程序员的工作是有帮助的。即使您的推断是错误的，程序员也应该感谢您，至少您<em>想</em>去帮助他们，使他们的工作变的更简单。不过千万别忘了报告“症状”，否则只会使事情变得更糟。</p>
<h5><a name="intermittent"></a>“真是奇怪，刚才还不好用，怎么现在又好了？”</h5>
<p>“间歇性错误”着实让程序员发愁。相比之下，进行一系列简单的操作便能导致错误发生的问题是简单的。程序员可以在一个便于观察的条件下重复那些操作，观察每一个细节。太多的问题在这种情况下不能解决，例如：程序每星期出一次错，或者偶然出一次错，或者在程序员面前从不出错（程序员一离开就出错。——译者）。当然还有就是程序的截止日期到了，那肯定要出错。</p>
<p>大多数“间歇性错误”并不是真正的“间歇”。其中的大多数错误与某些地方是有联系的。有一些错误可能是内存泄漏产生的，有一些可能是别的程序在不恰当的时候修改某个重要文件造成的，还有一些可能发生在每一个小时的前半个小时中（我确实遇到过这种事情）。</p>
<p>同样，如果您能使bug重现，而程序员不能，那很有可能是他们的计算机和您的计算机在某些地方是不同的，这种不同引起了问题。我曾写过一个程序，它的窗口可以<em>蜷缩</em>成一个小球呆在屏幕的左上角，它在别的计算机上只能在 800&#215;600 的解析度工作，但是在我的机器上却可以在 1024&#215;768 下工作。</p>
<p>程序员想要了解任何与您发现的问题相关的事情。有可能的话您到另一台机器上试试，多试几次，两次，三次，看看问题是不是经常发生。如果问题出现在您进行了一系列操作之后，不是您想让它出现它就会出现，这就有可能是长时间的运行或处理大文件所导致的错误。程序崩溃的时候，您要尽可能的记住您都做了些什么，并且如果您看到任何图形,也别忘了提一下。您提供的任何事情都是有帮助的。即使只是概括性的描述（例如：当后台有EMACS运行时，程序常常出错），这虽然不能提供导致问题的直接线索，但是可能帮助程序员重现问题。</p>
<p>最重要的是：程序员想要确定他们正在处理的是一个真正的“间歇性错误”呢，还是一个在另一类特定的计算机上才出现的错误。他们想知道有关您计算机的许多细节，以便了解您的机器与他们的有什么不同。有许多细节都依仗特定的程序，但是有一件东西您一定要提供——版本号。程序的版本、操作系统的版本以及与问题有关的程序的版本。</p>
<h5><a name="clarity"></a>“我把磁盘装进了 Windows……”</h5>
<p>表意清楚在一份bug报告里是最基本的要求。如果程序员不知道您说的是什么意思，那您就跟没说一样。我收到的bug报告来自世界各地，有许多是来自非英语国家，他们通常为自己的英文不好而表示歉意。总的来说，这些用户发来的bug报告通常是清晰而且有用的。几乎所有不清晰的bug报告都是来自母语是英语的人，他们总是以为只要自己随便说说，程序员就能明白。</p>
<ul>
<li><em>精确</em>。如果做相同的事情有两种方法，请说明您用的是哪一种。例如：“我选择了‘载入’”，可能意味着“我用鼠标点击‘载入’”或“我按下了‘ALT+L’”，说清楚您用了哪种方法，有时候这也有关系。</li>
<li><em>详细</em>。信息宁多毋少！如果您说了很多，程序员可以略去一部分，可是如果您说的太少，他们就不得不回过头再去问您一些问题。有一次我收到了一份bug报告只有一句话，每一次我问他更多事情时，他每次的回复都是一句话，于是我花了几个星期的时间才得到了有用的信息。</li>
<li><em>慎用代词</em>。诸如“它”，“窗体”这些词，当它们指代不清晰的时候不要用。来看看这句话：“我运行了FooApp，它弹出一个警告窗口，我试着关掉它，它就崩溃了。”这种表述并不清晰，用户究竟关掉了哪个窗口？是警告窗口还是整个FooApp程序？您可以这样说，“我运行FooApp程序时弹出一个警告窗口，我试着关闭警告窗口，FooApp崩溃了。”这样虽然罗嗦点，但是很清晰不容易产生误解。</li>
<li><em>检查</em>。重新读一遍您写的bug报告，<em>您</em>觉得它是否清晰？如果您列出了一系列能导致程序出错的操作，那么照着做一遍，看看您是不是漏写了一步。</li>
</ul>
<h5><a name="summary"></a>小结：</h5>
<ul>
<li>bug报告的首要目的是让程序员亲眼看到错误。如果您不能亲自做给他们看，给他们能使程序出错的详细的操作步骤。</li>
<li>如果首要目的不能达成，程序员<em>不能</em>看到程序出错。这就需要bug报告的第二个目的来描述程序的什么地方出毛病了。详细的描述每一件事情：您看到了什么，您想看到什么，把错误消息记下来，<em>尤其</em>是“错误消息号”。</li>
<li>当您的计算机做了什么您料想不到的事，<em>不要动</em>！在您平静下来之前什么都别做。不要做您认为不安全的事。</li>
<li>尽量试着自己“诊断”程序出错的原因（如果您认为自己可以的话）。即使做出了“诊断”，您仍然应该报告“症状”。</li>
<li>如果程序员需要，请准备好额外的信息。如果他们不需要，就不会问您要。他们不会故意为难自己。您手头上一定要有程序的版本号，它很可能是必需品。</li>
<li>表述清楚，确保您的意思不能被曲解。</li>
<li>总的来说，最重要的是要做到<em>精确</em>。程序员喜欢精确。</li>
</ul>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/testing/cs-bs/" title="软件测试之C/S B/S">软件测试之C/S B/S</a> (8)</li><li><a href="http://www.hiadmin.org/testing/software-testing-book/" title="软件测试技术-经典教程(第二版)">软件测试技术-经典教程(第二版)</a> (5)</li><li><a href="http://www.hiadmin.org/testing/testing-interview/" title="软件测试工程师面试杂谈">软件测试工程师面试杂谈</a> (10)</li><li><a href="http://www.hiadmin.org/testing/science/" title="软件测试所需知识">软件测试所需知识</a> (16)</li><li><a href="http://www.hiadmin.org/testing/testing-quality/" title="从发现缺陷到提高质量">从发现缺陷到提高质量</a> (14)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/software-bug/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>软件测试之C/S B/S</title>
		<link>http://www.hiadmin.org/testing/cs-bs/</link>
		<comments>http://www.hiadmin.org/testing/cs-bs/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 13:26:24 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[B/S]]></category>
		<category><![CDATA[C/S]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/testing/cs-bs/</guid>
		<description><![CDATA[最近在面试软件测试工程师的时候发现很多来面试朋友居然连C/S B/S都分不清的人居然大有人再、下面的内容来至51testing、希望对想入门做测试的朋友一个参考。

C/S结构与B/S结构的特点分析
随着计算机技术的不断发展与应用，计算模式从集中式转向了分布式，尤为典型的是C/S结构（Client/Server的简称，客户机/服务器模式）。两层结构C/S模式，在上个世纪八十年代及九十年代初得到了大量应用，最直接的原因是可视化开发工具的推广。之后，它开始向三层结构发展。近年来，随着网络技术不断发展，尤其是基于 <a href="http://www.hiadmin.org/testing/cs-bs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>最近在面试软件测试工程师的时候发现很多来面试朋友居然连C/S B/S都分不清的人居然大有人再、下面的内容来至51testing、希望对想入门做测试的朋友一个参考。<strong></strong><br />
<h4><strong>C/S</strong><strong>结构与</strong><strong>B/S</strong><strong>结构的特点分析</strong></h4>
</p>
<p>随着计算机技术的不断发展与应用，计算模式从集中式转向了分布式，尤为典型的是C/S结构（Client/Server的简称，客户机/服务器模式）。两层结构C/S模式，在上个世纪八十年代及九十年代初得到了大量应用，最直接的原因是可视化开发工具的推广。之后，它开始向三层结构发展。近年来，随着网络技术不断发展，尤其是基于</p>
<p><span id="more-1542"></span>
<p>Web的信息发布和检索技术、Java计算技术以及网络分布式对象技术的飞速发展，导致了很多应用系统的体系结构从C/S结构向更加灵活的多级分布结构演变，使得软件系统的网络体系结构跨入一个新阶段，即B/S体系结构（Browser/Server的简称，浏览器/服务器模式）。基于Web的B/S方式其实也是一种客户机/服务器方式，只不过它的客户端是浏览器。为了区别于传统的C/S模式，才特意将其称为B/S模式。认识到这些结构的特征，对于系统的选型而言是很关键的。<br />
<h4><strong>1</strong><strong>、系统的性能</strong></h4>
</p>
<p>在系统的性能方面，B/S占有优势的是其异地浏览和信息采集的灵活性。任何时间、任何地点、任何系统，只要可以使用浏览器上网，就可以使用B/S系统的终端。 </p>
<p>不过，采用B/S结构，客户端只能完成浏览、查询、数据输入等简单功能，绝大部分工作由服务器承担，这使得服务器的负担很重。采用C/S结构时，客户端和服务器端都能够处理任务，这虽然对客户机的要求较高，但因此可以减轻服务器的压力。而且，由于客户端使用浏览器，使得网上发布的信息必须是以HTML格式为主，其他格式文件多半是以附件的形式存放。而HTML格式文件（也就是Web页面）不便于编辑修改，给文件管理带来了许多不便。<br />
<h4><strong>2</strong><strong>、系统的开发</strong></h4>
</p>
<p>&nbsp;&nbsp;&nbsp; C/S结构是建立在中间件产品基础之上的，要求应用开发者自己去处理事务管理、消息队列、数据的复制和同步、通讯安全等系统级的问题。这对应用开发者提出了较高的要求，而且迫使应用开发者投入很多精力来解决应用程序以外的问题。这使得应用程序的维护、移植和互操作变得复杂。如果客户端是在不同的操作系统上，C/S结构的软件需要开发不同版本的客户端软件。 </p>
<p>但是，与B/S结构相比，C/S技术发展历史更为“悠久”。从技术成熟度及软件设计、开发人员的掌握水平来看，C/S技术应是更成熟、更可靠的。<br />
<h4><strong>3</strong><strong>、系统的升级维护</strong></h4>
</p>
<p>&nbsp;&nbsp;&nbsp; C/S系统的各部分模块中有一部分改变，就要关联到其它模块的变动，使系统升级成本比较大。B/S与C/S处理模式相比，则大大简化了客户端，只要客户端机器能上网就可以。对于B/S而言，开发、维护等几乎所有工作也都集中在服务器端，当企业对网络应用进行升级时，只需更新服务器端的软件就可以，这减轻了异地用户系统维护与升级的成本。如果客户端的软件系统升级比较频繁，那么B/S架构的产品优势明显——所有的升级操作只需要针对服务器进行，这对那些点多面广的应用是很有价值的，例如一些招聘网站就需要采用B/S模式，客户端分散，且应用简单，只需要进行简单的浏览和少量信息的录入。 </p>
<p>在系统安全维护上，B/S则略显不足，B/S结构尤其得考虑数据的安全性和服务器的安全性，毕竟现在的网络安全系数并不高。以OA软件为例，B/S结构要实现办公协作过程中复杂的工作流控制与安全性控制，还有很多技术上的难点。因此，当前虽然出现了B/S结构的OA系统产品，但尚未大范围推广</p>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/testing/testing-bug/" title="软件测试笔记-BUG的定义">软件测试笔记-BUG的定义</a> (2)</li><li><a href="http://www.hiadmin.org/testing/testing-policy/" title="软件测试笔记-测试策略">软件测试笔记-测试策略</a> (0)</li><li><a href="http://www.hiadmin.org/testing/wireshark-capture-password/" title="Wireshark抓取网站弱口令和捕获FTP账号密码">Wireshark抓取网站弱口令和捕获FTP账号密码</a> (14)</li><li><a href="http://www.hiadmin.org/testing/wireshark-displayfilters/" title="Wireshark之显示过滤器">Wireshark之显示过滤器</a> (15)</li><li><a href="http://www.hiadmin.org/testing/software-bug/" title="测试人员如何有效的提交BUG">测试人员如何有效的提交BUG</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/cs-bs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>软件测试技术-经典教程(第二版)</title>
		<link>http://www.hiadmin.org/testing/software-testing-book/</link>
		<comments>http://www.hiadmin.org/testing/software-testing-book/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 10:56:20 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[软件测试书籍]]></category>
		<category><![CDATA[软件测试技术]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/testing/software-testing-book/</guid>
		<description><![CDATA[软件测试行业在国内也算是蓬勃发展、然而相对应的软件测试类的书籍却真的不尽如人意、在国内能购买到大大部分书籍都是翻译过来的、很多翻译的水平让人怀疑译者是否有软件测试专业的资质、真正介绍软件测试知识的书不多、但是讲解测试工具的书籍却有10本左右、但都是介绍测试工具使用、原理性的东西几乎没有涉及。

软件测试技术-经典教程(第二版)是能书店找到的2011年出版的书籍之一、但是确是今年出版的软件测试类书籍中质量最好的一本书籍、值得大家一读。 <a href="http://www.hiadmin.org/testing/software-testing-book/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>软件测试行业在国内也算是蓬勃发展、然而相对应的软件测试类的书籍却真的不尽如人意、在国内能购买到大大部分书籍都是翻译过来的、很多翻译的水平让人怀疑译者是否有软件测试专业的资质、真正介绍软件测试知识的书不多、但是讲解测试工具的书籍却有10本左右、但都是介绍测试工具使用、原理性的东西几乎没有涉及。  </p>
<p>软件测试技术-经典教程(第二版)是能书店找到的2011年出版的书籍之一、但是确是今年出版的软件测试类书籍中质量最好的一本书籍、值得大家一读。</p>
<p><span id="more-1541"></span>
</p>
<p>全书共分4部分。  </p>
<p>第一部分主要介绍软件测试的基本概念、分类、常识,以及黑盒测试技术、缺陷管理、测试管理、软件测试工具等。  </p>
<p>第二部分主要讨论黑盒测试工具的LoadRunner11.0测试方法、TestDirector8.0测试方法、Ranorex自动化测试方法等。  </p>
<p>第三部分给出白盒测试技术简介,以及白盒测试工具的BoundsChecker教程、Logiscope6.1 教程、JUnit3.8 教程、JTest7.0教程等。  </p>
<p>第四部分给出了测试英文,这是知名外企内部培训的第一手资料,包括QA基础知识介绍、测试类型、Web程序的测试方法、测试团队的Scrum管理和TaskReports编写等。  </p>
<p>《软件测试技术经典教程(第2版)》还为各章节设计了针对性很强的思考题,以便读者理解和消化所学知识。书后附录部分给出了软件测试技术用语说明及中英文对照,测试工程师面试、笔试时的常见问题,c/c++编码规范,Java编码规范等,供读者?习参考。  </p>
<p>不管你是新入门的测试人员还是经验丰富的测试高手、知识永不嫌少、长读长新。于所有软件测试的朋友共勉。</p>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/testing/tseting-books/" title="软件测试书籍列表">软件测试书籍列表</a> (20)</li><li><a href="http://www.hiadmin.org/testing/software-bug/" title="测试人员如何有效的提交BUG">测试人员如何有效的提交BUG</a> (7)</li><li><a href="http://www.hiadmin.org/testing/cs-bs/" title="软件测试之C/S B/S">软件测试之C/S B/S</a> (8)</li><li><a href="http://www.hiadmin.org/testing/testing-interview/" title="软件测试工程师面试杂谈">软件测试工程师面试杂谈</a> (10)</li><li><a href="http://www.hiadmin.org/testing/science/" title="软件测试所需知识">软件测试所需知识</a> (16)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/software-testing-book/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>两个excel表对比的vbs脚本（原创）</title>
		<link>http://www.hiadmin.org/testing/vbs-excel/</link>
		<comments>http://www.hiadmin.org/testing/vbs-excel/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 04:17:29 +0000</pubDate>
		<dc:creator>819longjiayan</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[VBS脚本]]></category>
		<category><![CDATA[两个excel表对比的vbs脚本]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/?p=1509</guid>
		<description><![CDATA[最近工作中需要对比两次电脑启动的服务状态是否相同，服务数量是否相同，为了减少花费时间，就自己写了一段vbs脚本解决这个问题，具体脚本如下：

filepath=getProjectPath()
filepath1=filepath&#038;"\list1.xls" '这里输入EXCEL的实际路径
filepath2=filepath&#038;"\list2.xls" '这里输入EXCEL的实际路径
sqlrowcount="Select count(name) As RowCont from [Sheet1$]"
sql="Select name,status from [Sheet1$]"
If FilePathFind(Filepath1)And FilePathFind(Filepath2)Then
Set rowcount1=excel_Record(filepath1,sqlrowcount)
Set rowcount2=excel_Record(filepath2,sqlrowcount)
If rowcount1("RowCont")>=rowcount2("RowCont")Then
excel_compare filepath1,filepath2 <a href="http://www.hiadmin.org/testing/vbs-excel/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>最近工作中需要对比两次电脑启动的服务状态是否相同，服务数量是否相同，为了减少花费时间，就自己写了一段vbs脚本解决这个问题，具体脚本如下：</p>
<p>filepath=getProjectPath()<br />
filepath1=filepath&amp;”\list1.xls” &#8216;这里输入EXCEL的实际路径<br />
filepath2=filepath&amp;”\list2.xls” &#8216;这里输入EXCEL的实际路径<br />
sqlrowcount=”Select count(name) As RowCont from [Sheet1$]”<br />
sql=”Select name,status from [Sheet1$]”<br />
If FilePathFind(Filepath1)And FilePathFind(Filepath2)Then<br />
Set rowcount1=excel_Record(filepath1,sqlrowcount)<br />
Set rowcount2=excel_Record(filepath2,sqlrowcount)<br />
If rowcount1(“RowCont”)&gt;=rowcount2(“RowCont”)Then<br />
excel_compare filepath1,filepath2<br />
Else<span id="more-1509"></span><br />
excel_compare filepath2,filepath1<br />
End If<br />
Set rowcount1=nothing<br />
Set rowcount2=Nothing<br />
Else<br />
MsgBox “请检查文件是否存在!!”<br />
End if<br />
msgbox”比较完成，请到 “&amp;filepath&amp;”\result.txt”&amp;”下查看结果！”<br />
&#8216;*************************ADO打开EXCEL并返回记录集********************************start</p>
<p>Public Function excel_Record(filepath,sql)<br />
Set conn= createobject(“ADODB.Connection”) &#8216;创建ADO对象<br />
conn.Open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”&amp;filepath&amp;”;Extended Properties=Excel 8.0&#8243;<br />
Set rs=CreateObject(“ADODB.Recordset”) &#8216;创建记录集<br />
rs.Open sql,conn &#8216;打开记录集<br />
Set excel_Record=rs&#8217;将记录集作为函数返回值<br />
Set rs=nothing<br />
End Function</p>
<p>&#8216;********************************************************************************end</p>
<p>&#8216;*************************获取项目所在文件夹函数********************************start</p>
<p>Public Function getProjectPath()<br />
Set objFSO = CreateObject(“Scripting.FileSystemObject”) &#8216;创建SFO对象<br />
Set objFile = objFSO.GetFile(wscript.scriptfullname) &#8216;获取文件的完整路径<br />
getProjectpath= objFSO.GetParentFolderName(objFile) &#8216;获取上一级文件夹路径<br />
Set objFSO = Nothing<br />
Set objFile = Nothing<br />
End Function</p>
<p>&#8216;********************************************************************************end</p>
<p>&#8216;*************************判断当前文件是否存在*********************************start<br />
Public Function FilePathFind(Filepath)<br />
Set objFSO = CreateObject(“Scripting.FileSystemObject”)<br />
if objFSO.FileExists(Filepath) then<br />
FilePathFind=1<br />
else<br />
FilePathFind=0<br />
end if<br />
Set objFSO=nothing<br />
End Function<br />
&#8216;********************************************************************************end<br />
&#8216;*************************比较2excel数据*********************************start<br />
Public Function excel_compare(filepath1,filepath2)<br />
a1=split(filepath1,”/”)<br />
a2=split(filepath2,”/”)<br />
filename1=a1(ubound(a1))<br />
filename2=a2(ubound(a2))<br />
txt_write(“***********************”&amp;date()&amp;” “&amp;time()&amp;” ************************************************************”)<br />
Set rs1=excel_Record(filepath1,sql)<br />
Do<br />
If not rs1.eof Then<br />
name1=rs1(“name”)<br />
status1=rs1(“status”)<br />
&#8216;msgbox “name :”&amp;name1&amp;” status:”&amp;status1<br />
sqlname=”select name,status from [Sheet1$] where name=&#8217;”+name1+”&#8216;”<br />
Set rs2=excel_Record(filepath2,sqlname)<br />
If rs2.eof=false Then<br />
If status1=rs2(“status”) Then<br />
&#8216;MsgBox “服务 “&amp;name1&amp;” 状态相同,服务状态为：”&amp;status1<br />
msg=”服务 “&amp;name1&amp;” 状态相同,服务状态为：”&amp;status1<br />
txt_write(msg)<br />
Else<br />
&#8216;MsgBox “服务 “&amp;name1&amp;” 状态不相同 “&amp;status1<br />
msg=”服务 “&amp;name1&amp;” 状态不相同 “&amp;filepath1&amp;”中状态为：”&amp;status1&amp;” “&amp;filepath2&amp;” 中状态为：”&amp;rs2(“status”)<br />
txt_write(msg)<br />
End If<br />
Else<br />
&#8216;MsgBox “list2.xls中不存在 ：”&amp;name1&amp;” 服务”<br />
msg=filename2&amp;” 中不存在 ：”&amp;name1&amp;” 服务”<br />
txt_write(msg)<br />
End If<br />
rs1.MoveNext<br />
else<br />
msgbox “没有记录”<br />
End If<br />
loop until rs1.eof=True<br />
Set rs1=nothing<br />
Set rs2=nothing</p>
<p>Set rs3=excel_Record(filepath2,sql)<br />
Do<br />
name3=rs3(“name”)<br />
msgbox name3<br />
status3=rs3(“status”)<br />
If rs3.eof=false Then</p>
<p>&#8216;msgbox “name :”&amp;name1&amp;” status:”&amp;status1<br />
sqlname3=”select name,status from [Sheet1$] where name=&#8217;”+name3+”&#8216;”<br />
Set rs4=excel_Record(filepath1,sqlname3)<br />
If rs4.eof=true Then<br />
msg=filename1&amp;” 中不存在 ：”&amp;name3&amp;” 服务”<br />
txt_write(msg)<br />
End If<br />
rs3.MoveNext<br />
else<br />
msgbox “没有记录”<br />
End If<br />
loop until rs3.eof=True</p>
<p>txt_write(“***************************************************************************************”)<br />
End function<br />
&#8216;********************************************************************************end</p>
<p>&#8216;*************************打印比较结果函数*********************************start<br />
Public Function txt_write(msg)<br />
txtpath=filepath&amp;”\result.txt”<br />
Set fso = CreateObject(“Scripting.FileSystemObject”)<br />
If FilePathFind(txtpath) Then<br />
Set f = fso.OpenTextFile(txtpath, 8, True)<br />
f.Writeline msg<br />
Else</p>
<p>fso.CreateTextFile txtpath, True<br />
Set f = fso.OpenTextFile(txtpath, 8, True)<br />
f.Writeline msg<br />
End If<br />
set f=nothing<br />
Set fso =nothing<br />
End Function</p>
<p>&#8216;********************************************************************************end</p>
<p>不过这段脚本有个缺陷就是比较每个服务name都会提示msgbox做提示，这样显得不方便，如果服务的数量很多，那需要使用者一直守着点击msgbox的确定按钮，显得比较麻烦，所以这种需要改进，还有打印出来的日志结果也有点乱，需要做调整，暂时就这样，以后学习过程中不断改进。<br />
大家有什么好的建议也尽管给我提哦。。。谢谢。。</p>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/guestbook/" title="水缸">水缸</a> (160)</li><li><a href="http://www.hiadmin.org/shares/google/" title="获得Google+邀请码">获得Google+邀请码</a> (150)</li><li><a href="http://www.hiadmin.org/shares/harvard880-english-course/" title="哈佛大学880元的45天学会英语教程免费下载">哈佛大学880元的45天学会英语教程免费下载</a> (126)</li><li><a href="http://www.hiadmin.org/shares/free-kelaisoftware-key/" title="免费发放科来网络分析系统序列号">免费发放科来网络分析系统序列号</a> (82)</li><li><a href="http://www.hiadmin.org/testing/cronolog/" title="用cronolog分割apache日志">用cronolog分割apache日志</a> (56)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/vbs-excel/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>软件测试工程师面试杂谈</title>
		<link>http://www.hiadmin.org/testing/testing-interview/</link>
		<comments>http://www.hiadmin.org/testing/testing-interview/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 14:10:28 +0000</pubDate>
		<dc:creator>sam</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[测试工程师面试技巧]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/testing/testing-interview/</guid>
		<description><![CDATA[最近一段时间以来由于项目组进度实在是紧张所以从5月初就开始招人计划、到目前为止面试了20多位前来应聘软件测试岗位的同行、当然到现在为止都还没有招到合适的人选、见识过了形形色色的面试者、不吐不快、以至于有了这篇文章。
先来说说适合我们项目组所需要的技能

1、对计算机硬件知识有一定的了解

2、对操作系统有比较升入的了解、windows/Linux都需要、当然Linux的的要求还是比较宽松的能做甚至有的时候都跳过了。



3、对网络协议有一定的了解、互联网时代不是以前的单机、所以通信协议还是比较重要的

4、有一定的测试基础知识 <a href="http://www.hiadmin.org/testing/testing-interview/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>最近一段时间以来由于项目组进度实在是紧张所以从5月初就开始招人计划、到目前为止面试了20多位前来应聘软件测试岗位的同行、当然到现在为止都还没有招到合适的人选、见识过了形形色色的面试者、不吐不快、以至于有了这篇文章。  </p>
<p>我仅仅是一个测试负责人而已不属于管理层只不过由于我这个项目组需要招人所以技术面试都是我在面试的、作为面试官真的有很多想和那些想找测试工作的朋友聊聊。  </p>
<p>先来说说适合我们项目组所需要的技能  </p>
<p>1、对计算机硬件知识有一定的了解  </p>
<p>2、对操作系统有比较升入的了解、windows/Linux都需要、当然Linux的的要求还是比较宽松的能做甚至有的时候都跳过了。</p>
<p><span id="more-1501"></span>
</p>
<p>3、对网络协议有一定的了解、互联网时代不是以前的单机、所以通信协议还是比较重要的  </p>
<p>4、有一定的测试基础知识  </p>
<p>就以上4点技能来说前面3点对于一个计算机专业毕业的学生都应该可以达到的、计算机专业这些课程都是必须课程、至于测试基础知识对于有过一二年工作经验的来说应该是不成问题的、当然对于刚刚毕业或者是转行的朋友来说第四点也是不重要的。  </p>
<p>介绍完要求之后我们来谈谈在我们面试过程中的遇到的比较让刻苦铭心的事件<br />
<h4>我把我所有面试过的应试者分为3类、有工作经验的、刚刚毕业的学生、有工作经验准备转行做测试的 </h4>
<ul>
<li>1、在简历中只写自己真正会使用的一些测试软件、什么用过一次LR/QTP就敢往简历上写、结果问到的都说不会 </li>
<li>2、来面试者中不乏有华为网络认证、微软MCSA认证着、但是面试起来的却告诉我说都忘记了、考过华为网络认证的居然不知道生成树协议、DHCP中继、有微软MCSA居然连AD、ISA都不会配置、更有一个比较厉害的应试者做过AD ISA管理员可是居然连AD有几种级别和角色都搞不清楚。 </li>
<li>3、曾经看到一份简历上面工作了2年有6个项目经验、当然在面试的时候却告诉我有4个项目经验是在培训学校里面在老师的带领下做的实验性项目、真的很受伤。 </li>
<li>4、对于刚刚毕业的学生我们其实要求不高、只要对计算机硬件、网络、操作系统有一定的了解、想做测试的我们都会考虑、现实很残酷、来应试的毕业生中对计算机硬件的了解仅限于插拔下内存换下硬盘、对于网络不用说了7层协议搞清楚的一个没有、操作系统处于可以用ghost安装下系统仅此而已。 </li>
<li>5、对于最后一类从其他工作岗位转行做测试的应试者考察的内容会比较多一点、计算机硬件、网络、操作系统都必须要有了解、以及在以前工作中学到的那些技能是否都能应用、有位应试者在联想做了2年得硬件技术支持、居然连内存主频、CPU频率和主板总线之间的关系都没有搞清楚、对于自己从事的行业的知识都不了解怎么让我们相信你一个转行过来的能做好测试的工作 </li>
<li>6、对于转行过来的应试者还有一个是必须要问到的内容就是职业规划、这对于毕业生是不需要的但是对于一个在其他行业工作了几件的人转行过来做测试、肯定是有原因的如果没有职业规划你怎么就知道你是想做测试、还是说怎么让我们相信你不会做了2年测试之后又想做其他工作了或者又觉得还是我原来的工作更适合我 </li>
<li>7、对于转行的朋友还有一点也是我们比较在意的就是学习能力、毕竟从一个行业到另外一个行业学习能力太差或者是自觉性太差的一半也是不要的、今天刚刚面试一个应试者离职快2个月了一直在找测试方面的工作、但是他却没有看过一本测试方面的书籍、就这样的自学能力、2个月用来打酱油了、已经离开了学校难道还需要人来监督你去学习的应试者我们是坚决不会要的。 </li>
</ul>
<h4>写了这么多总结下 </h4>
<ul>
<li>1、千万不要把不会的或者就知道点皮毛的东西写在你的简历上面、 </li>
<li>2、当前工作都没有做好的想去跳槽或者说是转行怎么让对方相信你有这个实力 </li>
<li>3、对于已经有工作经验的朋友职业规划很重要、能让面试者知道你是一个做事有计划的人、编写测试计划可是一个比较严谨的工作。 </li>
<li>4、沟通能力能重要、尤其是测试、需要和研发沟通、设计沟通、甚至于需要和用户沟通、腼腆型的朋友得留意了。 </li>
<li>5、学习能力、知识每天都在更新、学历只能代表你的学习经历、学习能力才是面试者看中的。 </li>
</ul>
<p>以上内容与大家共勉</p>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/testing/software-bug/" title="测试人员如何有效的提交BUG">测试人员如何有效的提交BUG</a> (7)</li><li><a href="http://www.hiadmin.org/testing/cs-bs/" title="软件测试之C/S B/S">软件测试之C/S B/S</a> (8)</li><li><a href="http://www.hiadmin.org/testing/software-testing-book/" title="软件测试技术-经典教程(第二版)">软件测试技术-经典教程(第二版)</a> (5)</li><li><a href="http://www.hiadmin.org/testing/science/" title="软件测试所需知识">软件测试所需知识</a> (16)</li><li><a href="http://www.hiadmin.org/testing/testing-quality/" title="从发现缺陷到提高质量">从发现缺陷到提高质量</a> (14)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/testing-interview/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>谈软件工程管理的四大要素【转】</title>
		<link>http://www.hiadmin.org/testing/software-manage/</link>
		<comments>http://www.hiadmin.org/testing/software-manage/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 02:38:20 +0000</pubDate>
		<dc:creator>819longjiayan</dc:creator>
				<category><![CDATA[软件测试]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[软件工程管理]]></category>

		<guid isPermaLink="false">http://www.hiadmin.org/?p=1484</guid>
		<description><![CDATA[前言： 其实对于我们软件测试也好，软件开发也好，都隶属于整个软件工程。那么在软件工程中有哪些重要的元素值得我们去探讨呢？下面就让我们探讨下软件工程管理的四个重要组成部分。 1.软件工程计划(Software project plan) 软件项目计划（Software Project Planning）是一个软件项目进入系统实施的启动阶段,主要进行的工作包括:确定详细的项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定项目实施的时间计划、成本和预算计划、人力资源计划等。 (百度百科http://baike.baidu.com/view/2235776.htm) 2.软件工程执行(Software project execution 执行中最重要的一个问题就是提高执行力，每一个项目都要考虑到时间和管理等诸多要素。而真正为项目提供高效和高质量的服务的是小组的每一位成员，所以要在项目的一开始就应该明确项目的每位成员的责任。从而使项目能够在规定的时间内完成和用户达成的产品的效果和质量，这也是我们软件项目存在的意义。严格执行plan. 推荐文章：高效的测试执行力发布时间: 2010-11-26 10:57 作者: qiaoyan 来源: TaoBao QA Team http://www.51testing.com/html/70/n-223770.html 3.软件工程监控(Software monitor and control ) 在软件测试中有个team 是QA (Quality assurance),在这里我们谈的不是这个东西。而是作为team leader应该如何去做好项目的contorl，保证team能完成高质量的工作。 附上一段文字（无作者，引用百度搜索http://course.ecust.edu.cn/courses/rjgcgl/software/ruanjianceshi.doc） 既然测试经理只对质量负责，这就会衍生出来一个问题，测试经理对产品质量过于吹毛求疵，与开发人员造成对立，进而影响项目开发工作。如果这件事情发生了，有一个确切的信号已经传递了出来：测试人员和开发人员在沟通上存在问题。如何解决这个问题？首先，我们应该审视测试人员和开发人员的沟通技巧是否存在问题。其次，我们应该重新核对我们在项目开始时确定的质量目标，看看是测试人员人为拔高质量目标，提出超范围的要求，还是开发人员人为降低质量目标，生产出不符合质量要求的产品，以此作为对质量标准实施误差的一个判断。 在项目中作为对产品质量检验的负责人——测试经理工作的好坏或者对产品质量的客观评价，对公司的决策就会显现的非常重要。 为了能有效的降低这种风险，管理上采用的一般方式就是监控，即由第三方人员对被监控方的工作进行客观的评价。那谁是第三方人员？首先，这个人不在被监控的项目中负责具体的工作，其次，他代表公司或者所在部门，需要对项目的质量情况进行客观的评价。 针对一个具体的组织结构模型,可能对测试工作有监控需求的部门有：软件测试部门的主管，SQA人员或者其主管，技术或者开发部门的主管。他们的监控出于不同的目的，如：评估测试工作的有效性，了解具体项目的质量情况，了解开发的进度和效率等。不管出于什么目的，他们有一个共同的特征是：不参与项目组中具体的工作，并且需要在短时间内了解项目的实际情况，并且做出相对准确的判断。但是，不在项目组中，对项目组的实际情况不是非常了解，如何能在短时间内对项目的测试情况做出准确的判断？ 在实际工作过程中，我们可以采用如下的方法对测试工作进行监控： 一般采用的手段是： &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..(详见link ) 4.软件工程收尾(Software closure) 我们通常称之为signoff. 附上http://jpkc.hust.edu.cn/ec3.0/C155/uploadfiles/ppt/10.PPT 你可能也会喜欢这些文字水缸 (160)获得Google+邀请码 (150)哈佛大学880元的45天学会英语教程免费下载 (126)免费发放科来网络分析系统序列号 (82)用cronolog分割apache日志 (56)]]></description>
			<content:encoded><![CDATA[<p>前言： 其实对于我们软件测试也好，软件开发也好，都隶属于整个软件工程。那么在软件工程中有哪些重要的元素值得我们去探讨呢？下面就让我们探讨下软件工程管理的四个重要组成部分。</p>
<p>1.软件工程计划(Software project plan)</p>
<p>软件项目计划（Software Project Planning）是一个软件项目进入系统实施的启动阶段,主要进行的工作包括:确定详细的项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定项目实施的时间计划、成本和预算计划、人力资源计划等。 (百度百科http://baike.baidu.com/view/2235776.htm)</p>
<p>2.软件工程执行(Software project execution<br />
<span id="more-1484"></span><br />
执行中最重要的一个问题就是提高执行力，每一个项目都要考虑到时间和管理等诸多要素。而真正为项目提供高效和高质量的服务的是小组的每一位成员，所以要在项目的一开始就应该明确项目的每位成员的责任。从而使项目能够在规定的时间内完成和用户达成的产品的效果和质量，这也是我们软件项目存在的意义。严格执行plan.</p>
<p>推荐文章：高效的测试执行力发布时间: 2010-11-26 10:57 作者: qiaoyan 来源: TaoBao QA Team</p>
<p>http://www.51testing.com/html/70/n-223770.html</p>
<p>3.软件工程监控(Software monitor and control )</p>
<p>在软件测试中有个team 是QA (Quality assurance),在这里我们谈的不是这个东西。而是作为team leader应该如何去做好项目的contorl，保证team能完成高质量的工作。</p>
<p>附上一段文字（无作者，引用百度搜索http://course.ecust.edu.cn/courses/rjgcgl/software/ruanjianceshi.doc）</p>
<p>既然测试经理只对质量负责，这就会衍生出来一个问题，测试经理对产品质量过于吹毛求疵，与开发人员造成对立，进而影响项目开发工作。如果这件事情发生了，有一个确切的信号已经传递了出来：测试人员和开发人员在沟通上存在问题。如何解决这个问题？首先，我们应该审视测试人员和开发人员的沟通技巧是否存在问题。其次，我们应该重新核对我们在项目开始时确定的质量目标，看看是测试人员人为拔高质量目标，提出超范围的要求，还是开发人员人为降低质量目标，生产出不符合质量要求的产品，以此作为对质量标准实施误差的一个判断。</p>
<p>在项目中作为对产品质量检验的负责人——测试经理工作的好坏或者对产品质量的客观评价，对公司的决策就会显现的非常重要。</p>
<p>为了能有效的降低这种风险，管理上采用的一般方式就是监控，即由第三方人员对被监控方的工作进行客观的评价。那谁是第三方人员？首先，这个人不在被监控的项目中负责具体的工作，其次，他代表公司或者所在部门，需要对项目的质量情况进行客观的评价。</p>
<p>针对一个具体的组织结构模型,可能对测试工作有监控需求的部门有：软件测试部门的主管，SQA人员或者其主管，技术或者开发部门的主管。他们的监控出于不同的目的，如：评估测试工作的有效性，了解具体项目的质量情况，了解开发的进度和效率等。不管出于什么目的，他们有一个共同的特征是：不参与项目组中具体的工作，并且需要在短时间内了解项目的实际情况，并且做出相对准确的判断。但是，不在项目组中，对项目组的实际情况不是非常了解，如何能在短时间内对项目的测试情况做出准确的判断？</p>
<p>在实际工作过程中，我们可以采用如下的方法对测试工作进行监控：</p>
<p>一般采用的手段是：</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..(详见link )</p>
<p>4.软件工程收尾(Software closure)</p>
<p>我们通常称之为signoff.</p>
<p>附上http://jpkc.hust.edu.cn/ec3.0/C155/uploadfiles/ppt/10.PPT</p>
<h2  class="related_post_title">你可能也会喜欢这些文字</h2><ul class="related_post"><li><a href="http://www.hiadmin.org/guestbook/" title="水缸">水缸</a> (160)</li><li><a href="http://www.hiadmin.org/shares/google/" title="获得Google+邀请码">获得Google+邀请码</a> (150)</li><li><a href="http://www.hiadmin.org/shares/harvard880-english-course/" title="哈佛大学880元的45天学会英语教程免费下载">哈佛大学880元的45天学会英语教程免费下载</a> (126)</li><li><a href="http://www.hiadmin.org/shares/free-kelaisoftware-key/" title="免费发放科来网络分析系统序列号">免费发放科来网络分析系统序列号</a> (82)</li><li><a href="http://www.hiadmin.org/testing/cronolog/" title="用cronolog分割apache日志">用cronolog分割apache日志</a> (56)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hiadmin.org/testing/software-manage/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

