<?xml version="1.0" encoding="gb2312" ?>
<rss version="2.0">
<channel>
<title>领测软件测试网</title>
<link>http://www.ltesting.net</link>
<description>领测软件测试网,专业软件测试技术网站,软件测试工程师讨论软件测试培训,软件测试技术,软件测试工具,性能测试技术,自动测试,软件测试流程,软件测试方法的中国第一软件测试门户网站</description>
<language>zh-cn</language>
<generator>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</generator>
<webmaster>ltesting@ltesting.com.cn</webmaster>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/rjcsgcsrm/2012/0518/204904.html</link>
<title><![CDATA[测试工作对测试工程师要求太高？]]></title>
<author>billliu</author>
<category>软件测试工程师入门</category>
<pubDate>Mon, 21 May 2012 09:19:35 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/rjcsgcsrm/2012/0518/204904.html</guid>
<description><![CDATA[<p>
	　　微软的软件质量控制实践三篇写完了，收到很多评论。不可能一一回答，所以在这里我挑几个评论最多的和有代表性的，和大家再多讨论一下。希望有所帮助。</p>
<p>
	　　1. 对测试的要求太高了</p>
<p>
	　　在国内培训的时候经常遇到的一个说法：&ldquo;(比如测试自动化，工具，流程)的确好处很多，但是它对测试的要求太高了&rdquo;。刚开始的时候我很惊讶，第一次听到对测试要求太高的说法，后来听多了才慢慢意识到这才是问题所在。如果你认为国内的测试比国外落后N年的话，我觉得&ldquo;对测试的要求太高了&ldquo;的观念就是导致这个落后的根本原因。我一直在观察和对比国内外测试的区别，当然有技术上的，工具上的，流程上的区别等等，但是这些差别都只是表象，根本的差别是观念上的差别，也就是测试在研发中的真正角色。这个不是找到多少个bug的问题，也不是采用什么测试方法的问题，而是是否把测试做为支撑研发两条腿中的一条腿的问题。测试是一个专门的职业，和开发一样有不同级别。初级人员解决简单的事情，高级人员必须负责解决复杂，高难度的事情。这样才能形成一个完善的测试人员职业发展体系。很多测试经理一直很困惑说我们也在加大在测试上的投资，参加很多技术、流程、管理培训，但是效果都不好。原因就是我们不能总是希望通过学习一个技术，或一个工具来解决观念上的问题，当然没有效果。也容易跟风，刚学会手工测试，又要测试自动化了;刚学会测试自动化;又要ET了。刚学会ET，又要敏捷了。没有观念就没有主见。所以改变观念才是提高软件质量的根本途径。</p>
<p>
	　　那么如何改变观念呢?我也不知道。公司老板不愿改变呢?我也没有办法。但是重要的是你知道问题所在了，这就是解决了最大的难题。如果自己都觉得测试没有难度，没有前途或者对测试要求太高了的话，如何指望得了别人?所以我们搞测试的人的一个重要职责就是：把这个观念灌输给其他人，把测试的门槛提高，对测试的要求没用很高只有更高，其它问题也都解决了。</p>
<p>
	　　2. Dev不愿意修改bug.</p>
<p>
	　　这是一个很多测试抱怨的问题：自己辛辛苦苦找到一个bug，开发却认为不是bug。或者更为令人气愤的是开发在没有沟通之前直接resolved as &ldquo;by design&rdquo; or &ldquo;not repro&rdquo;。这个情况通常在质量控制成熟度级别(1级或2级)较低的组出现较多。根本上解决的办法是提高整个组的成熟度级别，当然需要在很多方面加以提高，这个问题就随之而去了。可以使用以下几个策略：</p>
<p>
	　　首先这里牵涉到两个问题：一个是resolve as &ldquo;not repro&rdquo;的问题。很多时候dev resolve as &lsquo;not repro&rsquo;是因为bug本身不清楚没有足够的信息来判断或进一步investigate(当然他应该和你确认一下先)。所以测试在报bug是一定要记录足够信息。基本原则是当别人在看该bug是否有足够的信息来判断该bug是怎么回事或进一步investigate。我总结过一个好的bug描述应该是Concise,Accurate, Searchable, Entirety, 也就是 CASE 原则。可能你会觉得这需要太多的时间才能报一个bug了。的确是，但是总比你花了两天找到一个bug，花了10秒钟就把bug写完了，结果过两天dev resolve 成not repro强吧。另外就是自动报bug的工具，还有就是创建bug模板等都可以减少报bug的时间。</p>
<p>
	　　其次是&rsquo;by design&rsquo;的问题。很多时候测试不服气认为就是bug，但是开发不同意修改。我想借用一句话来说明我的观点：a good idea is not really good until it is accepted. 也就是说如果你不可以说服别人接受你的主意，再好的主意也没有用。同样的道理你认为的bug，如果不能说服别人，它也不是一个bug。或者bug只有在被修复时才是真正的bug。如果dev/test有分歧的话，通常PM负责一个功能，应该有PM做最后决定;如果没有PM的话，通常有整个team来决定。当然如果你非常肯定，可以继续找更多的理由来支持你的观点。但是最终如果还是不能说服别人的话，还是要服从team的决定，虽然我们常说真理往往掌握在少数人的手里，但是绝大多数时候都是少数人考虑不周。另外一点就是我们通常很少在是不是bug上有分歧，而是在什么时候修复上有分歧。这是另外一个话题了，需要考虑很多其它非技术因素了。</p>
<p>
	　　3. 如何做到自动报bug,并把相关的信息放到bug 里面.</p>
<p>
	　　我在comments里已经回答过了，就把它拷贝一下吧以是完整：我前面提到微软有很多工具来提高测试人员的工作效率，也就是说把时间花在需要专注的地方而不是在其他繁琐的地方浪费时间。其中一个好的实践就是自动报bug。其实整个过程比较直接：首先用来管理bug的工具应该会有API接口，所以可以使用工具来自动报bug。其次是添加分析处理工具，测试的出错信息比较容易获取，比如测试用例出错了，或者抛异常或者返回错误结果，可以容易地把异常信息或错误信息放到bug里面;分析产品的日志找到错误点有写难度，需要和dev共同努力把测试日志和产品日志通过某些属性(时间戳或操作id)关联起来。或者简单地把相关日志、windows event log,等拷贝到network share，在bug中指向该路径即可。还有对于UI测试，如果测试错误，一定要把当时的屏幕截图抓下来放到bug中去。还是那句话，专注于应该要专注的地方而不是把时间浪费在其它步骤上了，测试用例出错，不应该花太多时间去报bug (最多2分钟)。同样道理有了bug后dev可以直接去investigate，而不是花时间去找日志在那里?那里出错了?等等。有条件的产品组还可以进一步提高，比如工具自动报bug的时候可以到到数据库里根据异常或错误信息查找一遍看一看以前有没有类似的bug，或者做BI，这些信息对于将来的分析和决策非常有帮助，而且也可以帮助预防bug。</p>
<br /><b>文章分类</b>:软件测试工程师入门]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/webcs/2012/0518/204902.html</link>
<title><![CDATA[做Web开发需要了解开发技术]]></title>
<author>陈皓</author>
<category>Web测试</category>
<pubDate>Fri, 18 May 2012 10:28:16 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/webcs/2012/0518/204902.html</guid>
<description><![CDATA[<p>
	　　在StackExchange上有人问了这样一个问题：What should every programmer know about web development?(关于Web开发，什么是所有程序员需要知道的?)里面给出的答案非常不错，所以，我翻译转载过来。 顺便说一下，StackExchange真是非常好，大家可以对同一个答案做贡献和修订，看看这个问题的修订过程你就知道了&mdash;&mdash;专业的问答网站应该怎么去做。这就是我在这篇文章中也说过真正的用户体验是什么样的。</p>
<p>
	　　好了，下面是正文(我对原文做了一些批注，也许不对或有误导，请大家指正)</p>
<p>
	　　下面的这些东西可能对于大多数人并不陌生，但是可能会有些东西你以前并没有看过，或是没有完全搞懂，甚至都没有听说过。(陈皓注：我相信当你看完这个列表后，你会觉得对于我国的Web开发有点弱了，还是那句话，表面上的东西永远是肤浅的)</p>
<p>
	　　接口和用户体验</p>
<p>
	　　小心浏览器的实现标准上的不一致，确信让你的网站能够适当地跨浏览器。至少，你的网站需要测试一下下面的浏览器：</p>
<p>
	　　最新的 Gecko 引擎 (Firefox)，</p>
<p>
	　　一个 Webkit 引擎 (Safari, Chrome, 或是其它的移动设备上的浏览器)</p>
<p>
	　　IE 浏览器 (测试IE的兼容性你可以使用微软IE的 Application Compatibility VPC Images)</p>
<p>
	　　Opera 浏览器。</p>
<p>
	　　最后，你可以使用一下这个工具 来看看你的网页在不同的浏览器下是怎么被显示出来的(陈皓注：这个工具就是以前本站介绍过的在不同浏览器和平台上检查你的网站的兼容性)</p>
<p>
	　　多考虑一下人们是怎么来访问你的网站而不是那些主流的浏览器：手机，读屏软件和搜索引擎，例如：一些Accessibility的东西： WAI 和 Section508, 移动设备开发：MobiForge.</p>
<p>
	　　部署Staging：怎么部署网站的更新而不会影响用户的访问。 Ed Lucas的答案 可以让你了解一些(陈皓注：Ed说了一些如版本控制，自动化build，备份，回滚等机制)。</p>
<p>
	　　千万不要直接给用户显示不友好的错误信息。</p>
<p>
	　　千万不要把用户的邮件地址以明文显示出来，这样会被爬虫爬走并被让用户的邮箱被垃圾邮件搞死。</p>
<p>
	　　为用户的链接加上 rel=&quot;nofollow&quot; 的属性以 避免垃圾网站的干扰。(陈皓注：nofollow是HTML的一个属性，用于通知搜索引擎&ldquo;这个链接所指向的网页非我所能控制，对其内容不予置评&rdquo;，或者简单地说，该链接不是对目标网站或网页的&ldquo;投票&rdquo;，这样搜索引擎不会再访问这个链接。这个是用来减少一些特定垃圾页面对原网站的影响，从而可以改善搜索结果的质量，并且防止垃圾链接的蔓延。)</p>
<p>
	　　为网站建立一些的限制 - 这个属于安全性的范畴。(陈皓注：比如你在Google注册邮箱时，你一口气注册超过两个以上的邮箱，gmail要求给你发短信或是给你打电话认证，比如Discuz论坛的会限制你发贴或是搜索的间隔时间等等，更多的网站会用CAPTCHA来确认是人为的操作。 这些限制都是为了防止垃圾和恶意攻击)</p>
<p>
	　　学习如何做 Progressive Enhancement. (陈皓注：Progressive Enhancement是一个Web Design的理念，如：1)基础的内容和功能应该可以被所有的浏览器存取，2)页面布局的应该使用外部的CSS链接，3)Javascript也应该是外部链接还应该是 unobtrusive 的，4)应该让用户可以设置他们的偏好)</p>
<p>
	　　如果POST成功，要在POST方法后重定向网址，这样可以阻止用户通过刷新页面重复提交。</p>
<p>
	　　严重关注Accessibility。因为这是法律上的需求(陈皓注：Section 508是美国的508法案，其是美国劳工复健法的改进，它是一部联邦法律，这个法律要求所有技术要考虑到残障人士的应用，如果某个大众信息传播网站，如果某些用户群体(如残疾人)浏览该网站获取信息时，如果他们无法正常获得所期望的信息(如无法正常浏览)，那可以依据相关法规，可以对该网站依法起诉)。 WAI-ARIA 为这方面的事提供很不错的资源.</p>
<p>
	　　安全</p>
<p>
	　　在网上有很多关于安全的文章，但是 OWASP 开发指导 涵盖了几乎所有关于Web站点安全的东西。(陈皓注：OWASP(开放Web应用安全项目- Open Web Application Security Project)是一个开放的非营利性组织，目前全球有130个分会近万名会员，其主要目标是研议协助解决Web软体安全之标准、工具与技术文件，长期 致力于协助政府或企业了解并改善网页应用程式与网页服务的安全性。OWASP被视为Web应用安全领域的权威参考。2009年下列发布的美国国家和国际立法、标准、准则、委员会和行业实务守则参考引用了OWASP。美国联邦贸易委员会(FTC)强烈建议所有企业需遵循OWASP十大WEB弱点防护守则)</p>
<p>
	　　了解什么是 SQL 注入攻击 并知道怎么阻止这种攻击。</p>
<p>
	　　永远不要相信用户的输入(包括Cookies，因为那也是用户的输入)</p>
<p>
	　　对用户的口令进行Hash，并使用salt，以防止Rainbow 攻击(陈皓注：Hash算法可用MD5或SHA1等，对口令使用salt的意思是，user 在设定密码时，system 产生另外一个random string(salt)。在datbase 存的&#8203;&#8203;是与salt + passwd 产的md5sum 及salt。 当要验证密码时就把user 输入的string 加上使用者的salt，产生md5s&#8203;&#8203;um 来比对。 理论上用salt 可以大幅度让密码更难破解，相同的密码除非刚好salt 相同，最后&#8203;&#8203;存在database 上的内容是不一样的。google一下md5+salt你可以看到很多文章。关于Rainbow 攻击，其意思是很像密码字典表，但不同的是，Rainbow Table存的是已经被Hash过的密码了，而且其查找密码的速度更快，这样可以让攻击非常快)。使用慢一点的Hash算法来保存口令，如 bcrypt (被时间检证过了) 或是 scrypt (更强，但是也更新一些) (1, 2)。你可以阅读一下 How To Safely Store A Password(陈皓注：酷壳以前曾介绍过bcrypt这个算法，这里，我更建议我们应该让用户输入比较强的口令，比如Apple ID注册的过程需要用户输入超过8位，需要有大小写和数字的口令，或是做出类似于这样的用户体验的东西)。</p>
<p>
	　　不要试图自己去发明或创造一个自己的fancy的认证系统，你可能会忽略到一些不容易让你查觉的东西而导致你的站点被hack了。(陈皓注：我在腾讯那坑爹的申诉系统中说过这个事了，我说过这句话&mdash;&mdash;&ldquo;真正的安全系统是协同整个社会的安全系统做出来的一道安全长城，而不是什么都要自己搞&rdquo;，当然，很遗憾不是所有的人都能看懂这个事，包括一些资深的人)#p#分页标题#e#</p>
<p>
	　　了解 处理信用卡的一些规则 . (这里也有一个问题你可以查看一下) (陈皓注：有两上vendor可以帮助你，一个是 Authorize.Net 另一个是 PayFlow Pro)</p>
<p>
	　　使用 SSL/HTTPS 来加密传输登录页面或是任可有敏感信息的页面，比如信用卡号等。</p>
<p>
	　　知道如何对付session 劫持。(陈皓注：请参看wikipedia的这Session Hijacking，)</p>
<p>
	　　避免 跨站脚本攻击(XSS)。(陈皓注：参看酷壳站前几天发的《新浪微博的XSS攻击事件》)</p>
<p>
	　　避免 跨站伪造请求攻击 cross site request forgeries (XSRF).</p>
<p>
	　　保持你的系统里的所有软件更新到最新的patch。</p>
<p>
	　　确保你的数据库连接是安全的。</p>
<p>
	　　确保你能了解最新的攻击技术，以及你系统的脆弱处。</p>
<p>
	　　请读一下 The Google Browser Security Handbook.</p>
<p>
	　　请读一下 The Web Application Hacker&rsquo;s Handbook.</p>
<p>
	　　(陈皓注：之前本站的&ldquo;一些资源&rdquo;提到过Mozilla的安全编程规范，还有Ruby on Rails的Web安全的开发教程)</p>
<p>
	　　性能</p>
<p>
	　　只要需要，请实现cache机制，了解并合理地使用 HTTP caching 以及 HTML5 Manifest.</p>
<p>
	　　优化页面 &mdash;&mdash; 不要使用20KB图片来平铺网页背景。(陈皓注：还有很多网页页面优化性的文章，你可以STFG &ndash; Search The Fucking Google一下。如果你要调试的话，你可以使用firebug或是chrome内置的开发人员的工具来查看网页装载的性能)</p>
<p>
	　　学习如何 gzip/deflate 网页 (deflate 更好).</p>
<p>
	　　把多个CSS文件和Javascript文件合并成一个，这样可以减少浏览器的网络连数，并且使用gzip压缩被反复用到的文件。</p>
<p>
	　　学习一下 Yahoo Exceptional Performance 这个网站上的东西，上面有很多非常不错的改善前端性能的指导，以及 YSlow 这个工具。 Google page speed 是另一个用来做性能采样的工具。这两个工具都需要安装 Firebug 。</p>
<p>
	　　为那些小的图片使用 CSS Image Sprites，就像工具条一样。 (参看 &ldquo;最小化 HTTP 请求&rdquo; ) (陈皓注：把所有的小图片合并成一个图片，然后用CSS把显示其中的一块，这样，这些小图片只用传输一次，酷壳的Wordpress样式的那个RSS订阅列表中的小图标就是这样做的)</p>
<p>
	　　繁忙的网络应该考虑把网页的内容分开存放在不同的域名下。(陈皓注：比如有专门的图片服务器&mdash;&mdash;图片相当耗带宽，或是专门的Ajax服务器)</p>
<p>
	　　静态网页 (如，图片，CSS，JavaScript，以及一些不需要访问cookies的网页) 应该放在一个不使用cookies的独立的域名下，因为所有在同一个域名或子域名下的cookie会被这个域名下的请求一同发送。另一个好的选择是使用 Content Delivery Network (CDN).</p>
<p>
	　　使用单个页面的HTTP请求数最小化。</p>
<p>
	　　为Javascript使用 Google Closure Compiler 或是 其它压缩工具(陈皓注：压缩Javascript代码可以让你的页面减少网络传输从而可以得到很快的喧染。注意，并不是所有的工具都可以正确压缩Javascript的，Google的这个工具甚至还可以帮你优化你的代码)</p>
<p>
	　　确认你的网站有一个 favicon.ico 文件放在网站的根下，如 /favicon.ico. 浏览器会自动请求这个文件，就算这个图标文件没有在你的网页中明显说明，浏览器也会请求。如果你没有这个文件，就会出大量的404错误，这会消耗你的服务器带宽。(陈皓注：服务器返回404页面会比这个ico文件可能还大)</p>
<p>
	　　SEO (搜索引擎优化)</p>
<p>
	　　使用 &ldquo;搜索引擎喜欢的&rdquo; URL，如：使用 example.com/pages/45-article-title 而不是 example.com/index.php?page=45 (陈皓注：这里的URL是说Wordpress的，后者是默认的)</p>
<p>
	　　如果你的动态页面要使用 # ，那么请把其改成 #! ，而在服务端，你需要处理$_REQUEST[&quot;_escaped_fragment_&quot;] 这是Google搜索引擎需要的。换句话说，./#!page=1 会被Google搜索引擎转成 ./?_escaped_fragments_=page=1。 (陈皓注：通常来说URL中的#后的东西都不会被传到服务器上，所以，为了要让Google可以抓取AJAX的东西，你需要使用#!，而Google会把&ldquo;#!&rdquo;转成&ldquo;_escaped_fragment_&rdquo;来向服务器发请求，Twitter的大量的链接者是#!的，比如：https://twitter.com/#!/your_activity)。另外，用户也许会使用Firefox 或 Chromium， history.pushState({&quot;foo&quot;:&quot;bar&quot;}, &quot;About&quot;, &quot;./?page=1&quot;); 是一个很不错的命令。所以，就算是我们的地址栏上的地址改变了，页面也不会重新装载。这可以让你使用 ? 而不是 #! 也能无刷地保住当前的动态的页面，这可以让AJAX的请求被浏览器记住。</p>
<p>
	　　别使用 &ldquo;click here&rdquo; 这样的链接。这样一来，无法SEO，而且对于一些需要使用读屏人来说很不友好(陈皓注：关于读屏软件，可参看本站的&ldquo;如果看不见你还能编程吗&rdquo;)</p>
<p>
	　　做一个 XML sitemap，并放在网端的根下 /sitemap.xml. (陈皓注：这个文件可以让搜索引擎了解你的网站图)</p>
<p>
	　　当你有多个URL指向同一个网页的使用，使用 你可以使用 Google Webmaster Tools 来查看相关的问题。</p>
<p>
	　　使用 Google Webmaster Tools 和 Yahoo Site Explorer.</p>
<p>
	　　安装 Google Analytics (或是别的开源的网站分析工具，如： Piwik).</p>
<p>
	　　了解 robots.txt 和搜索引擎爬虫是如何工作的。</p>
<p>
	　　重定向请求 (使用 301 重定向网站) ，如果你要把 www.example.com 定向到 example.com(或是其它的变更) 这样可以防止Google的rank因为域名的变化发生改变。(陈皓注：301重定向一般用作域名变更)</p>
<p>
	　　知道并不是所有的爬虫都是好的，有些爬虫的行为并不好。(陈皓注：比如向你的网站发大量的请求导致服务器性能低下)</p>
<p>
	　　如果你有一些非文本的内容需要在 Google&rsquo;s sitemap 中，比如视频什么的。Tim Farley的答案，可以让你看到很多有价值的东西。</p>
<p>
	　　技术</p>
<p>
	　　理解什么是 HTTP 比如 GET, POST, sessions, cookies等，了解什么是 &ldquo;stateless&rdquo; 无状态。#p#分页标题#e#</p>
<p>
	　　让你的 XHTML/HTML 和 CSS 符合 W3C 规范，并确认他们都是 合格的。我们的目标是避免浏览器的 &ldquo;quirks mode&rdquo;，并且可以让其更容易地能和非标准的浏览器工作，比如读屏器或移动设备。</p>
<p>
	　　理解浏览器是怎么处理 JavaScript 的。(陈皓：你会看到有些Javascript代码在页面上前面，有些则是在后面，所以你需要对其了解清楚为什么是这样)</p>
<p>
	　　了解浏览器是怎么装载 JavaScript，CSS和其它资源的，了解其对视觉上的影响。(陈皓注：10年前我做网页的时候因为HTML还很弱，所以只能使用table来布局，使用table布局的问题就是整个table读完后页面才会显示，用户的视觉体验并不好)。在某些情况下，你可能需要把你的脚本放在页面的后面。</p>
<p>
	　　理解 JavaScript 的 sandbox 是怎么怎么工作的，尤其是你想使用iframes。</p>
<p>
	　　请注意 JavaScript 可能会被禁止，这样会让你的AJAX失效。就算是大多数用户都开启了Javascript功能，但是也可能在一些情况下脚本是不被运行的，比如移动终端上，搜索引擎抓网页的时候也并不会执行你的脚本。</p>
<p>
	　　学习 301 和 302 转向的区别 (这也是一个SEO的问题).</p>
<p>
	　　尽可能多地学习你的部署平台。(比如：操作系统，Web Server：Apache/Nginx，防火墙，数据库，等等)</p>
<p>
	　　考虑使用一个 Reset Style Sheet.</p>
<p>
	　　考虑使用 JavaScript 框架(如： jQuery, MooTools, Prototype, Dojo 或 YUI 3)，它们会很好的兼容于不同的浏览器。(陈皓注：强烈推荐你看一下本站的开源中最好的WEB开发资源一文)</p>
<p>
	　　把视觉效果和JS框架合在一起讨论，考虑使用一个Service，如：Google Libraries API 来装载框架，这样可以让浏览器可能早就把这个JS框架已经cache了而不需要再从你的网站上下载了。</p>
<p>
	　　Bug fixing</p>
<p>
	　　明白你会花20%的时间写代码，而80%的时候在维护，所以你要小心编码。(陈皓注：参看本站的&ldquo;多些时间可以少些代码&rdquo;一文)</p>
<p>
	　　设计一个好的错误报告机制。</p>
<p>
	　　设计一个入口可以让人们联系到你并给你建议和批评。</p>
<p>
	　　为你开发的东西形成文档，这样可以让后来的人容易维护你的软件和系统。</p>
<p>
	　　频繁备份(也可确保你的这些备份功能正常) Ed Lucas 的回答 有一些忠告。你还需要有一个恢复策略，而不只是一个备份策略。</p>
<p>
	　　使用一个版本控制系统来保存你的代码，如： Subversion 或 Git.</p>
<p>
	　　别忘了做Acceptance Testing，使用 Selenium 能帮到你。</p>
<p>
	　　确保你有足够的日志，你可以使用 log4j, log4n 或 log4r。如果出了问题，这是可以让你快速找到问题的方式。</p>
<p>
	　　当你写日志的时候，确保你记录了你捕获了处理和未处理异常。报告和分析日志可以让你知道你网站的问题。</p>
<p>
	　　这里有多的东西被省略了，并不是因为那些可能不是有帮助的答案，而是因为那些东西都太细节了，超出了这个问题的范围，因为这本来就是一个Web开发需要了解东西的Overview。我想你可以去看一下其它人的答案，我有时间，我也会补充别人的答案进来。请随意编辑这个答案，因为可能有些东西忘了，也有可能有些东西不对。</p>
<br /><b>文章分类</b>:Web测试]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/mercury/loadrunner/2012/0517/204897.html</link>
<title><![CDATA[Loadrunner message函数详细分析]]></title>
<author>付民</author>
<category>LoadRunner</category>
<pubDate>Fri, 18 May 2012 09:17:01 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/mercury/loadrunner/2012/0517/204897.html</guid>
<description><![CDATA[<p>
	　　Loadrunner提供了若干message函数，以在脚本回放中和脚本运行中，对外输入信息，主要的函数有：</p>
<p>
	　　【lr_message】</p>
<p>
	　　int lr_message (const char *format, exp1, exp2,...expn.);</p>
<p>
	　　中文解释：lr_message函数将信息发送到日志文件和输入窗口。在VuGen中运行时，输入文件为output.txt。</p>
<p>
	　　【lr_log_message】</p>
<p>
	　　int lr_log_message (const char *format, exp1, exp2,...expn.);</p>
<p>
	　　中文解释：lr_log_message函数将消息发送到Vuser或代理日志文件(取决于应用程序)，而不是发送到输出窗口。通过向日志文件</p>
<p>
	　　发送错误消息或其他信息性消息，可以将该函数用于调试。</p>
<p>
	　　【lr_error_message】</p>
<p>
	　　int lr_error_message (const char *format, exp1, exp2,...expn. );</p>
<p>
	　　中文解释：lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。要发送不是特定错误消息的特殊通知，请使用lr_output_message。</p>
<p>
	　　【lr_output_message】</p>
<p>
	　　int lr_output_message (const char *format, exp1, exp2,...expn.);</p>
<p>
	　　中文解释：lr_output_message函数将带有脚本部分的行号的消息发送到输出窗口和日志文件。</p>
<p>
	　　【lr_vuser_status_message】</p>
<p>
	　　int lr_vuser_status_message (const char *format);</p>
<p>
	　　中文解释：lr_vuser_status_message函数向控制器或优化模块控制台的vuser窗口的&ldquo;状态&rdquo;区域发送字符串。它还将该字符串发送</p>
<p>
	　　到vuser日志。从VuGen运行时，消息被发送到output.txt。</p>
<p>
	　　下面大家看例子：</p>
<p>
	　　Action()</p>
<p>
	　　{</p>
<p>
	　　int i,j,k;</p>
<p>
	　　char *message;</p>
<p>
	　　j = k = 1000;</p>
<p>
	　　message = &quot;信息&quot;;</p>
<p>
	　　lr_message(&quot;****************输出区域开始*****************&quot;);</p>
<p>
	　　lr_message(&quot; lr_message %s:十进制=%d,八进制=%o,十六进制=0x%x&quot;,message,j,j,j);</p>
<p>
	　　lr_log_message(&quot; lr_log_message %s:十进制=%d,八进制=%o,十六进制=0x%x&quot;,message,j,j,j);</p>
<p>
	　　lr_error_message(&quot; lr_error_message %s:十进制=%d,八进制=%o,十六进制=0x%x&quot;,message,j,j,j);</p>
<p>
	　　lr_output_message(&quot; lr_output_message %s:十进制=%d,八进制=%o,十六进制=0x%x&quot;,message,j,j,j);</p>
<p>
	　　lr_message(&quot;****************输出区域结束*****************&quot;);</p>
<p>
	　　for (i=1;i&lt;6;i++)</p>
<p>
	　　{</p>
<p>
	　　k += 1000;</p>
<p>
	　　lr_think_time (5);</p>
<p>
	　　lr_vuser_status_message(&quot;第%d次:%s，十进制=%d,八进制=%o,十六进制=0x%x&quot;,i,message,k,k,k);</p>
<p>
	　　}</p>
<p>
	　　return 0;</p>
<p>
	　　}</p>
<p>
	　　例子说明：</p>
<p>
	　　1、message系列的函数参数格式和c语言中的printf格式是完全相同的。</p>
<p>
	　　2、格式化输入标志符号&quot;%&quot;，想必大家也比较熟悉。其中%d是十进制，%o是八进制,%x是十六进制，%s是字符;还有%g、%u、%c等，自己去查。</p>
<p>
	　　3、回放这个脚本后，进入脚本根目录查看mdrv.log，所有输出都可以在这里找到。</p>
<p>
	　　4、lr_error_message回放日志中显示的是红色的字体，且显示语句所在行号;同时，如果脚本在controllor中运行时，会生成一个error信息。</p>
<p>
	　　5、lr_vuser_status_message会在controllor的vuser list的status列中显示，controllor每5秒刷新一次。</p>
<p>
	　　6、当然，也支持转义字符的使用，列表如下：</p>
<p>
	　　\a 铃声(警告)</p>
<p>
	　　\b Backspace 键</p>
<p>
	　　\f 换页</p>
<p>
	　　\n 换行</p>
<p>
	　　\r 回车</p>
<p>
	　　\t 水平制表符</p>
<p>
	　　\v 垂直制表符</p>
<p>
	　　\&#39; 单引号标记</p>
<p>
	　　\&quot; 双引号标记</p>
<p>
	　　\\ 反斜杠</p>
<p>
	　　\? 文本问号</p>
<p>
	　　\ooo ASCII 字符 - 八进制</p>
<p>
	　　支持的转换字符有：</p>
<p>
	　　%a ASCII 表示形式</p>
<p>
	　　%BX 大端(网络顺序)十六进制</p>
<p>
	　　%BO 大端(网络顺序)八进制</p>
<p>
	　　%BD 大端(网络顺序)十进制</p>
<p>
	　　%LX 小端十六进制</p>
<p>
	　　%LO 小端八进制</p>
<p>
	　　%LD 小端十进制</p>
<p>
	　　==============================================================</p>
<p>
	　　此外，loadrunner还提供了在脚本中控制runtime-setting的log设置的函数。</p>
<p>
	　　【lr_debug_message函数组】</p>
<p>
	　　int lr_debug_message (unsigned int message_level, const char *format, ... );</p>
<p>
	　　中文解释：lr_debug_message函数在指定的消息级别处于活动状态时发送一条调试信息。如果指定的消息级别未出于活动状态，则不</p>
<p>
	　　发送消息。您可以从用户界面或者使用lr_set_debug_message， 将处于活动状态的消息级别设置为MSG_CLASS_BRIEF_LOG</p>
<p>
	　　或MSG_CLASSS_EXTENDED_LOG。要确定当前级别，请使用lr_get_debug_message。</p>
<p>
	　　unsigned int lr_get_debug_message ( );</p>
<p>
	　　中文解释：lr_get_debug_message函数返回当前的日志运行时设置。该设置确定发送到输出端的信息。日志设置是使用运行时设置对</p>
<p>
	　　话框或通过使用lr_set_debug_message函数指定的。</p>
<p>
	　　int lr_set_debug_message (unsigned int message_level, unsigned int on_off);</p>
<p>
	　　中文解释：lr_set_debug_message函数设置脚本执行的调试消息级别message_lvl。通过设置消息级别，可以确定发送哪些信息。 启</p>
<p>
	　　动设置的方法是将LR_SWITCH_ON作为on_off传递，禁用设置的方法是传递LR_SWITCH_OFF。</p>
<p>
	　　参数message_level说明：</p>
<table border="1" cellpadding="1" cellspacing="1" style="text-align: left; background-color: rgb(255,255,255); width: 728px; font-family: Arial, Helvetica, sans-serif; height: 303px; color: rgb(0,0,0); font-size: 12px; word-break: break-all" width="728">
	<tbody style="word-break: break-all">
		<tr style="word-break: break-all">
			<td style="word-break: break-all">
				<p align="center" style="line-height: 1.8em !important; margin: 10px 0px; word-break: break-all">
					&nbsp;<strong style="line-height: normal !important; word-break: break-all">日志级别</strong></p>
			</td>
			<td style="word-break: break-all">
				<p align="center" style="line-height: 1.8em !important; margin: 10px 0px; word-break: break-all">
					<strong style="line-height: normal !important; word-break: break-all">&nbsp;C语言标志</strong></p>
			</td>
			<td style="word-break: break-all">
				<p align="center" style="line-height: 1.8em !important; margin: 10px 0px; word-break: break-all">
					<strong style="line-height: normal !important; word-break: break-all">&nbsp;值</strong></p>
			</td>
			<td style="word-break: break-all">
				<p align="center" style="line-height: 1.8em !important; margin: 10px 0px; word-break: break-all">
					<strong style="line-height: normal !important; word-break: break-all">&nbsp;Runtime-setting - Log操作</strong></p>
			</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="word-break: break-all">
				&nbsp;Disabled</td>
			<td style="word-break: break-all">
				&nbsp;LR_MSG_CLASS_DISABLE_LOG</td>
			<td style="word-break: break-all">
				&nbsp;0</td>
			<td style="word-break: break-all">
				&nbsp;不勾选Enable logging</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="word-break: break-all">
				&nbsp;Brief</td>
			<td style="word-break: break-all">
				&nbsp;LR_MSG_CLASS_BRIEF_LOG</td>
			<td style="word-break: break-all">
				&nbsp;1</td>
			<td style="word-break: break-all">
				&nbsp;勾选Standard log</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="word-break: break-all">
				&nbsp;Extended Log</td>
			<td style="word-break: break-all">
				&nbsp;LR_MSG_CLASS_EXTENDED_LOG</td>
			<td style="word-break: break-all">
				&nbsp;16</td>
			<td style="word-break: break-all">
				&nbsp;勾选Extended log</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="word-break: break-all">
				&nbsp;Result Data</td>
			<td style="word-break: break-all">
				&nbsp;LR_MSG_CLASS_RESULT_DATA</td>
			<td style="word-break: break-all">
				&nbsp;2</td>
			<td style="word-break: break-all">
				&nbsp;勾选Data returned by server</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="word-break: break-all">
				&nbsp;Parameter Substitution</td>
			<td style="word-break: break-all">
				&nbsp;LR_MSG_CLASS_PARAMETERS</td>
			<td style="word-break: break-all">
				&nbsp;4</td>
			<td style="word-break: break-all">
				&nbsp;勾选Parameter substitution</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="word-break: break-all">
				&nbsp;Full Run-Time Trace</td>
			<td style="word-break: break-all">
				&nbsp;LR_MSG_CLASS_FULL_TRACE</td>
			<td style="word-break: break-all">
				&nbsp;8</td>
			<td style="word-break: break-all">
				&nbsp;勾选 Advanced trace</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="word-break: break-all">
				&nbsp;Only on error</td>
			<td style="word-break: break-all">
				&nbsp;LR_MSG_CLASS_JIT_LOG_ON_ERROR</td>
			<td style="word-break: break-all">
				&nbsp;512</td>
			<td style="word-break: break-all">
				&nbsp;勾选send messages only when an error occurs</td>
		</tr>
	</tbody>
</table>
#p#分页标题#e#
<p>
	　　参数on_off说明：</p>
<p>
	　　【LR_SWITCH_ON】启用设置</p>
<p>
	　　【LR_SWITCH_OFF】禁用设置</p>
<p>
	　　看下面的小例子：</p>
<p>
	　　Action()</p>
<p>
	　　{</p>
<p>
	　　int log_leavl;</p>
<p>
	　　log_leavl = lr_get_debug_message();</p>
<p>
	　　lr_error_message (&quot;当前是:%d&quot;,log_leavl);</p>
<p>
	　　return 0;</p>
<p>
	　　}</p>
<p>
	　　当我设置只有错误信息(error)打印【勾选send messages only when an error occurs】，例子运行结果是：当前是:513;</p>
<p>
	　　为什么不是512呢，我发现我实际选择的是【Enable logging + send messages only when an error occurs】，按上面的</p>
<p>
	　　参数说明，就是【1+512】，也就是513了;因此：</p>
<p>
	　　lr_get_debug_message返回的int数其实是所有勾选操作的代表值相加!</p>
<p>
	　　再看下面设置的例子：</p>
<p>
	　　Action()</p>
<p>
	　　{</p>
<p>
	　　//设置runtime-setting的日志选项【不勾选Enable logging】</p>
<p>
	　　char *a;</p>
<p>
	　　a = &quot;ABC&quot;;</p>
<p>
	　　lr_set_debug_message (LR_MSG_CLASS_EXTENDED_LOG |LR_MSG_CLASS_PARAMETERS,LR_SWITCH_ON);</p>
<p>
	　　//打开Runtime-setting Log 的Parameter substitution设置</p>
<p>
	　　lr_debug_message(LR_MSG_CLASS_PARAMETERS,&quot;打开参数保存的系统日志&quot;);</p>
<p>
	　　lr_save_string(&quot;aa&quot;,a);</p>
<p>
	　　lr_debug_message(LR_MSG_CLASS_PARAMETERS,&quot;关闭参数保存的系统日志&quot;);</p>
<p>
	　　lr_set_debug_message (LR_MSG_CLASS_EXTENDED_LOG |LR_MSG_CLASS_PARAMETERS,LR_SWITCH_OFF);</p>
<p>
	　　//关闭Runtime-setting Log 的Parameter substitution设置</p>
<p>
	　　return 0;</p>
<p>
	　　}</p>
<p>
	　　因为设置了runtime-setting不打印任何日志，所以正常运行脚本应该没有任何日志输出;</p>
<p>
	　　但是使用lr_set_debug_message函数打开了日志的设置(输出保存参数操作的日志)</p>
<p>
	　　因此脚本运行到lr_save_string(&quot;aa&quot;,a)时，就输出了日志如下：</p>
<p>
	　　打开参数保存的系统日志</p>
<p>
	　　Action.c(7): Notify: Saving Parameter &quot;ABC = aa&quot;</p>
<p>
	　　关闭参数保存的系统日志</p>
<br /><b>文章分类</b>:LoadRunner]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/mercury/loadrunner/2012/0517/204898.html</link>
<title><![CDATA[LR脚本实战：消息message输出函数]]></title>
<author>付民</author>
<category>LoadRunner</category>
<pubDate>Fri, 18 May 2012 09:16:13 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/mercury/loadrunner/2012/0517/204898.html</guid>
<description><![CDATA[<p>
	　　lr_output_message</p>
<p>
	　　lr_debug_message</p>
<p>
	　　lr_log_message</p>
<p>
	　　lr_error_message</p>
<p>
	　　// Save current data time into a parameter</p>
<p>
	　　lr_save_datetime</p>
<p>
	　</p>
<p>
	　　Loadrunner提供了若干message函数，以在脚本回放中和脚本运行中，对外输入信息，主要的函数有：</p>
<p>
	　　【lr_message】</p>
<p>
	　　int lr_message (const char *format, exp1, exp2,...expn.);</p>
<p>
	　　中文解释：lr_message函数将信息发送到日志文件和输入窗口。在VuGen中运行时，输入文件为output.txt。</p>
<p>
	　　【lr_log_message】</p>
<p>
	　　int lr_log_message (const char *format, exp1, exp2,...expn.);</p>
<p>
	　　中文解释：lr_log_message函数将消息发送到Vuser或代理日志文件(取决于应用程序)，而不是发送到输出窗口。通过向日志文件</p>
<p>
	　　发送错误消息或其他信息性消息，可以将该函数用于调试。</p>
<p>
	　　【lr_error_message】</p>
<p>
	　　int lr_error_message (const char *format, exp1, exp2,...expn. );</p>
<p>
	　　中文解释：lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。要发送不是特定错误消息的特殊通知，请使用lr_output_message。</p>
<p>
	　　【lr_output_message】</p>
<p>
	　　int lr_output_message (const char *format, exp1, exp2,...expn.);</p>
<p>
	　　中文解释：lr_output_message函数将带有脚本部分的行号的消息发送到输出窗口和日志文件。</p>
<p>
	　　【lr_vuser_status_message】</p>
<p>
	　　int lr_vuser_status_message (const char *format);</p>
<p>
	　　中文解释：lr_vuser_status_message函数向控制器或优化模块控制台的vuser窗口的&ldquo;状态&rdquo;区域发送字符串。它还将该字符串发送</p>
<p>
	　　到vuser日志。从VuGen运行时，消息被发送到output.txt。</p>
<p>
	　　下面大家看例子：</p>
<p>
	　　Action()</p>
<p>
	　　{</p>
<p>
	　　int i,j,k;</p>
<p>
	　　char *message;</p>
<p>
	　　j = k = 1000;</p>
<p>
	　　message = &quot;信息&quot;;</p>
<p>
	　　lr_message(&quot;****************输出区域开始*****************&quot;);</p>
<p>
	　　lr_message(&quot; lr_message %s:十进制=%d,八进制=%o,十六进制=0x%x&quot;,message,j,j,j);</p>
<p>
	　　lr_log_message(&quot; lr_log_message %s:十进制=%d,八进制=%o,十六进制=0x%x&quot;,message,j,j,j);</p>
<p>
	　　lr_error_message(&quot; lr_error_message %s:十进制=%d,八进制=%o,十六进制=0x%x&quot;,message,j,j,j);</p>
<p>
	　　lr_output_message(&quot; lr_output_message %s:十进制=%d,八进制=%o,十六进制=0x%x&quot;,message,j,j,j);</p>
<p>
	　　lr_message(&quot;****************输出区域结束*****************&quot;);</p>
<p>
	　　for (i=1;i&lt;6;i++)</p>
<p>
	　　{</p>
<p>
	　　k += 1000;</p>
<p>
	　　lr_think_time (5);</p>
<p>
	　　lr_vuser_status_message(&quot;第%d次:%s，十进制=%d,八进制=%o,十六进制=0x%x&quot;,i,message,k,k,k);</p>
<p>
	　　}</p>
<p>
	　　return 0;</p>
<p>
	　　}</p>
<p>
	　　例子说明：</p>
<p>
	　　1、message系列的函数参数格式和c语言中的printf格式是完全相同的。</p>
<p>
	　　2、格式化输入标志符号&quot;%&quot;，想必大家也比较熟悉。其中%d是十进制，%o是八进制,%x是十六进制，%s是字符;还有%g、%u、%c等，自己去查。</p>
<p>
	　　3、回放这个脚本后，进入脚本根目录查看mdrv.log，所有输出都可以在这里找到。</p>
<p>
	　　4、lr_error_message回放日志中显示的是红色的字体，且显示语句所在行号;同时，如果脚本在controllor中运行时，会生成一个error信息。</p>
<p>
	　　5、lr_vuser_status_message会在controllor的vuser list的status列中显示，controllor每5秒刷新一次。</p>
<p>
	　　6、当然，也支持转义字符的使用，列表如下：</p>
<p>
	　　\a 铃声(警告)</p>
<p>
	　　\b Backspace 键</p>
<p>
	　　\f 换页</p>
<p>
	　　\n 换行</p>
<p>
	　　\r 回车</p>
<p>
	　　\t 水平制表符</p>
<p>
	　　\v 垂直制表符</p>
<p>
	　　\&#39; 单引号标记</p>
<p>
	　　\&quot; 双引号标记</p>
<p>
	　　\\ 反斜杠</p>
<p>
	　　\? 文本问号</p>
<p>
	　　\ooo ASCII 字符 - 八进制</p>
<p>
	　　支持的转换字符有：</p>
<p>
	　　%a ASCII 表示形式</p>
<p>
	　　%BX 大端(网络顺序)十六进制</p>
<p>
	　　%BO 大端(网络顺序)八进制</p>
<p>
	　　&#65533; 大端(网络顺序)十进制</p>
<p>
	　　%LX 小端十六进制</p>
<p>
	　　%LO 小端八进制</p>
<p>
	　　%LD 小端十进制</p>
<p>
	　　==============================================================</p>
<p>
	　　此外，loadrunner还提供了在脚本中控制runtime-setting的log设置的函数。</p>
<p>
	　　【lr_debug_message函数组】</p>
<p>
	　　int lr_debug_message (unsigned int message_level, const char *format, ... );</p>
<p>
	　　中文解释：lr_debug_message函数在指定的消息级别处于活动状态时发送一条调试信息。如果指定的消息级别未出于活动状态，则不</p>
<p>
	　　发送消息。您可以从用户界面或者使用lr_set_debug_message， 将处于活动状态的消息级别设置为MSG_CLASS_BRIEF_LOG</p>
<p>
	　　或MSG_CLASSS_EXTENDED_LOG。要确定当前级别，请使用lr_get_debug_message。</p>
<p>
	　　unsigned int lr_get_debug_message ( );</p>
<p>
	　　中文解释：lr_get_debug_message函数返回当前的日志运行时设置。该设置确定发送到输出端的信息。日志设置是使用运行时设置对</p>
<p>
	　　话框或通过使用lr_set_debug_message函数指定的。</p>
<p>
	　　int lr_set_debug_message (unsigned int message_level, unsigned int on_off);#p#分页标题#e#</p>
<p>
	　　中文解释：lr_set_debug_message函数设置脚本执行的调试消息级别message_lvl。通过设置消息级别，可以确定发送哪些信息。 启</p>
<p>
	　　动设置的方法是将LR_SWITCH_ON作为on_off传递，禁用设置的方法是传递LR_SWITCH_OFF。</p>
<p>
	　　参数message_level说明：</p>
<table border="1" cellpadding="1" cellspacing="1" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; width: 728px; padding-right: 0px; height: 303px; word-break: break-all; padding-top: 0px" width="728">
	<tbody style="word-break: break-all">
		<tr style="word-break: break-all">
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				<p align="center" style="padding-bottom: 0px; line-height: 1.8em !important; border-right-width: 0px; list-style-type: none; margin: 10px 0px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: break-all; border-left-width: 0px; padding-top: 0px">
					&nbsp;<strong style="line-height: normal !important; word-break: break-all">日志级别</strong></p>
			</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				<p align="center" style="padding-bottom: 0px; line-height: 1.8em !important; border-right-width: 0px; list-style-type: none; margin: 10px 0px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: break-all; border-left-width: 0px; padding-top: 0px">
					<strong style="line-height: normal !important; word-break: break-all">&nbsp;C语言标志</strong></p>
			</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				<p align="center" style="padding-bottom: 0px; line-height: 1.8em !important; border-right-width: 0px; list-style-type: none; margin: 10px 0px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: break-all; border-left-width: 0px; padding-top: 0px">
					<strong style="line-height: normal !important; word-break: break-all">&nbsp;值</strong></p>
			</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				<p align="center" style="padding-bottom: 0px; line-height: 1.8em !important; border-right-width: 0px; list-style-type: none; margin: 10px 0px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: break-all; border-left-width: 0px; padding-top: 0px">
					<strong style="line-height: normal !important; word-break: break-all">&nbsp;Runtime-setting - Log操作</strong></p>
			</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;Disabled</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;LR_MSG_CLASS_DISABLE_LOG</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;0</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;不勾选Enable logging</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;Brief</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;LR_MSG_CLASS_BRIEF_LOG</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;1</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;勾选Standard log</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;Extended Log</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;LR_MSG_CLASS_EXTENDED_LOG</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;16</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;勾选Extended log</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;Result Data</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;LR_MSG_CLASS_RESULT_DATA</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;2</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;勾选Data returned by server</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;Parameter Substitution</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;LR_MSG_CLASS_PARAMETERS</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;4</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;勾选Parameter substitution</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;Full Run-Time Trace</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;LR_MSG_CLASS_FULL_TRACE</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;8</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;勾选 Advanced trace</td>
		</tr>
		<tr style="word-break: break-all">
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;Only on error</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;LR_MSG_CLASS_JIT_LOG_ON_ERROR</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;512</td>
			<td style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Verdana, 宋体, sans-serif; font-size: 12px; word-break: break-all; padding-top: 0px">
				&nbsp;勾选send messages only when an error occurs</td>
		</tr>
	</tbody>
</table>
#p#分页标题#e#
<p>
	　　参数on_off说明：</p>
<p>
	　　【LR_SWITCH_ON】启用设置</p>
<p>
	　　【LR_SWITCH_OFF】禁用设置</p>
<p>
	　　看下面的小例子：</p>
<p>
	　　Action()</p>
<p>
	　　{</p>
<p>
	　　int log_leavl;</p>
<p>
	　　log_leavl = lr_get_debug_message();</p>
<p>
	　　lr_error_message (&quot;当前是:%d&quot;,log_leavl);</p>
<p>
	　　return 0;</p>
<p>
	　　}</p>
<p>
	　　当我设置只有错误信息(error)打印【勾选send messages only when an error occurs】，例子运行结果是：当前是:513;</p>
<p>
	　　为什么不是512呢，我发现我实际选择的是【Enable logging + send messages only when an error occurs】，按上面的</p>
<p>
	　　参数说明，就是【1+512】，也就是513了;因此：</p>
<p>
	　　lr_get_debug_message返回的int数其实是所有勾选操作的代表值相加!</p>
<p>
	　　再看下面设置的例子：</p>
<p>
	　　Action()</p>
<p>
	　　{</p>
<p>
	　　//设置runtime-setting的日志选项【不勾选Enable logging】</p>
<p>
	　　char *a;</p>
<p>
	　　a = &quot;ABC&quot;;</p>
<p>
	　　lr_set_debug_message (LR_MSG_CLASS_EXTENDED_LOG |LR_MSG_CLASS_PARAMETERS,LR_SWITCH_ON);</p>
<p>
	　　//打开Runtime-setting Log 的Parameter substitution设置</p>
<p>
	　　lr_debug_message(LR_MSG_CLASS_PARAMETERS,&quot;打开参数保存的系统日志&quot;);</p>
<p>
	　　lr_save_string(&quot;aa&quot;,a);</p>
<p>
	　　lr_debug_message(LR_MSG_CLASS_PARAMETERS,&quot;关闭参数保存的系统日志&quot;);</p>
<p>
	　　lr_set_debug_message (LR_MSG_CLASS_EXTENDED_LOG |LR_MSG_CLASS_PARAMETERS,LR_SWITCH_OFF);</p>
<p>
	　　//关闭Runtime-setting Log 的Parameter substitution设置</p>
<p>
	　　return 0;</p>
<p>
	　　}</p>
<p>
	　　因为设置了runtime-setting不打印任何日志，所以正常运行脚本应该没有任何日志输出;</p>
<p>
	　　但是使用lr_set_debug_message函数打开了日志的设置(输出保存参数操作的日志)</p>
<p>
	　　因此脚本运行到lr_save_string(&quot;aa&quot;,a)时，就输出了日志如下：</p>
<p>
	　　打开参数保存的系统日志</p>
<p>
	　　Action.c(7): Notify: Saving Parameter &quot;ABC = aa&quot;</p>
<p>
	　　关闭参数保存的系统日志</p>
<br /><b>文章分类</b>:LoadRunner]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/sjcs/android/2012/0517/204896.html</link>
<title><![CDATA[Android客户端每周自动化回归报告]]></title>
<author>wirelessqa</author>
<category>Android</category>
<pubDate>Thu, 17 May 2012 09:26:09 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/sjcs/android/2012/0517/204896.html</guid>
<description><![CDATA[<p>
	　　有多少人写Android自动化用例啊? 每周都发报告吗? ok，这个是我以前发的报告，写的算是详细了，给大家做个参考。</p>
<center>
	<img alt="" border="1" height="554" src="/uploads/allimg/120517/0933245431-0.png" width="839" /></center>
<center>
	<img alt="" border="1" height="244" src="/uploads/allimg/120517/093324A48-1.png" width="839" /></center>
<br /><b>文章分类</b>:Android]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/news/itdongtai/2012/0517/204895.html</link>
<title><![CDATA[Android分化严重，全球3000余款安卓设备]]></title>
<author>bxmeng</author>
<category>IT动态</category>
<pubDate>Thu, 17 May 2012 09:05:37 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/news/itdongtai/2012/0517/204895.html</guid>
<description><![CDATA[<center>
	<img alt="" src="/uploads/allimg/120517/0ZJUW2-0.jpg" style="border-bottom: 1px solid; border-left: 1px solid; width: 580px; height: 330px; border-top: 1px solid; border-right: 1px solid" /></center>
<p>
	　　Android的分化已经成为一个众所周知的事实，但是，实际Android的分化到底有多严重呢?在过去的六个月，一家创业公司OpenSignalMaps对所有下载了他们某款监测应用的Android设备进行了标记，覆盖了来自世界上195个国家的681,900部Android设备。最后的Android设备统计数据或许会让你哑然：</p>
<p>
	　　在上述的所有Android设备中，总共标记出了3997款机型。而且，因为并不是所有的Android的用户都下载了这款应用，所以实际的Android的机型会不会更多呢?</p>
<p>
	　　而且，正如你所预期的，在所有的3997个机型中，三星的Galaxy S II成为了最大的赢家，在上述的681,900个设备中占到61,389部。而三星的其他设备在用户中的使用度也很高，远远超过了其他机型。所以，这里就出现另一个问题，那些其他厂商的其他机型该怎样瓜分剩下的那部分用户呢?</p>
<p>
	　　关于这个问题，你可以点击这里查看。只要将鼠标移动到相应的机型色块上，你就能看到对应的品牌和设备信息(色块面积代表设备的占有百分比)。</p>
<center>
	<img alt="" src="/uploads/allimg/120517/0ZJQ626-1.jpg" style="border-bottom: 1px solid; border-left: 1px solid; width: 580px; height: 441px; border-top: 1px solid; border-right: 1px solid" /></center>
<p>
	　　为了安抚民心，在今年的CES大会上，Google主席斯密特故意弱化了Android的&ldquo;分化&rdquo;问题，将其称为&ldquo;差异化&rdquo;。斯密特的这一说法实际是有一定道理的，因为Android的很大一个优势就是，针对不同的用户会推出不同价位和规格的机型，以保证一个更宽广的市场覆盖。而Android作为一个开放的平台，差异化实际不可避免。</p>
<p>
	　　但是，由此带来的应用开发和用户体验问题也不容小觑。而这在之前我们也已经讨论过了：对应用开发者而言，他们需要根据不同设备的屏幕大小，分辨率，处理器规格等对应用做相应的测试和调整，工作量加大很多。这也是为什么像Animoca这样的应用开发者实际在推出一款应用时，只能在400款左右的Android设备上先进行测试;而对用户来说，只要他们使用不同的Android应用，就很有可能存在用户体验不同的问题。</p>
<p>
	　　此外，Android的分化实际还不仅仅体现在硬件上，Android的不同版本或多或少也存在这个问题。根据OpenSignalMaps的数据，Android两大最受欢迎的版本实际在设备中的使用度只占到75%，而去年这一数据还占到了90%。</p>
<center>
	<img alt="" src="/uploads/allimg/120517/0ZJW353-2.jpg" style="border-bottom: 1px solid; border-left: 1px solid; width: 580px; height: 229px; border-top: 1px solid; border-right: 1px solid" /></center>
<p>
	　　不过，对那些小型的应用开发者来说，实际他们只要选好一些有代表性的机型，应用的测试问题还是可以解决。</p>
<p>
	　　而根据今天华尔街日报的报道，Google将支持多个硬件生产商生产自己的Nexus品牌手机。而这前，这个数目往往会限制在一家生产商，这家生产商通常也会在其他手机生产商之前，最先获得新版的Android。可以说，这是Google智能手机战略上的一大转型。实际Google这样做，也是因为这样一个事实：一家手机生产商通常都要经过数月才能将手机升级到最新的Android版本，而现在Google联合了其他的手机生产商，就是为了让Android版本得到最快更新，解决Android版本的分化问题。</p>
<br /><b>文章分类</b>:IT动态]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/sjcs/android/2012/0516/204887.html</link>
<title><![CDATA[Android开发环境最新配置]]></title>
<author>wirelessqa</author>
<category>Android</category>
<pubDate>Wed, 16 May 2012 10:58:17 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/sjcs/android/2012/0516/204887.html</guid>
<description><![CDATA[<p>
	　　这几天尝试android测试覆盖率和切面测试，发现老的SDK已经满足不了现在的需求了，于是升级，没想到SDK升级没那么简单，相关的软件都得升级，而且都要升级到最好的。</p>
<p>
	　　于是整理了一下升级所需的东东</p>
<p>
	　　1. SDK 本身检测升级就好了，这里不多讲。</p>
<center>
	<img alt="" border="1" height="543" src="/uploads/allimg/120516/1104492437-0.png" width="694" /></center>
<p>
	　　2.eclipse最新版，下载完成功双击打开就行了，无需安装。</p>
<p>
	　　eclipse 3.7 下载地址:</p>
<p>
	　　http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.7-201106131736/eclipse-SDK-3.7-win32.zip</p>
<center>
	<img alt="" border="1" height="245" src="/uploads/allimg/120516/11044951X-1.png" width="513" /></center>
<center>
	<img alt="" border="1" height="109" src="/uploads/allimg/120516/1104496291-2.png" width="599" /></center>
<p>
	　　3.最新版ADT下载安装。</p>
<p>
	　　ADT 18.0 下载地址：</p>
<p>
	　　http://dl.google.com/android/ADT-18.0.0.zip</p>
<p>
	　　安装步骤：</p>
<p>
	　　打开Eclipse--&gt;Help--&gt;Install new Software--&gt;输入名字--&gt;点击Archive选择ADT.zip--&gt;OK--&gt;Next......</p>
<p>
	　　图解：</p>
<center>
	<img alt="" border="1" height="497" src="/uploads/allimg/120516/1104495256-3.png" width="493" /></center>
<center>
	<img alt="" border="1" height="646" src="/uploads/allimg/120516/110449C44-4.png" width="849" /></center>
<center>
	<img alt="" border="1" height="738" src="/uploads/allimg/120516/1104494N3-5.png" width="733" /></center>
<p>
	　　设置Android Preferences:</p>
<p>
	　　将SDK Location Browse你的Android SDK存放路径，如图示：</p>
<center>
	<img alt="" border="1" height="684" src="/uploads/allimg/120516/11044942D-6.png" width="764" /></center>
<p>
	　　OK，启动一下看看，恭喜你，完成了，哈哈!</p>
<br /><b>文章分类</b>:Android]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/qtxg/2012/0516/204886.html</link>
<title><![CDATA[如何用DOS命令关闭进程]]></title>
<author>wirelessqa</author>
<category>其它相关</category>
<pubDate>Wed, 16 May 2012 10:48:32 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/qtxg/2012/0516/204886.html</guid>
<description><![CDATA[<p>
	　　1. 打开Dos命令窗口</p>
<p>
	　　开始-运行，输入cmd后回车</p>
<p>
	　　2. 用tasklist获取进程的 PID</p>
<p>
	　　在DOS提示符下，先用命令 tasklist 回车来获取进程的 PID ，(例如获取了Explorer.EXE进程的PID为1988);</p>
<center>
	<img alt="" border="1" height="747" src="/uploads/allimg/120516/1055213041-0.png" width="617" /></center>
<p>
	　　3. 用taskkill /pid /f结束进程</p>
<p>
	　　再输入命令：taskkill /pid 1988 /f 回车，即可结束相应的进程了。</p>
<center>
	<img alt="" border="1" height="51" src="/uploads/allimg/120516/1055214A4-1.png" width="352" /></center>
<p>
	　　另外:还可以用这个命令：ntsd -c q -p 1988 ，跟taskkill的作用基本相同，也可以结束进程</p>
<p>
	　　&mdash;&mdash; &mdash;&mdash; &mdash;&mdash; EOF &mdash;&mdash; &mdash;&mdash; &mdash;&mdash;</p>
<br /><b>文章分类</b>:其它相关]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/csrz/istqb/2012/0516/204885.html</link>
<title><![CDATA[ISTQB认证考试通过秘籍]]></title>
<author>不详</author>
<category>ISTQB</category>
<pubDate>Wed, 16 May 2012 10:40:37 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/csrz/istqb/2012/0516/204885.html</guid>
<description><![CDATA[<p>
	　　前不久一个写了一片关于ISTQB Advanced Level (Test Manager) 认证的博客，有一些同行咨询相关的问题，大致包括下面这些，现在我一一来回答，并传授亲身经历的通过认证秘籍。</p>
<p>
	　　问题一、ISTQB是什么?有哪些分类?</p>
<p>
	　　ISTQB(International Software Testing Qualification Board)是国际唯一权威的软件测试资质认证机构， 主要负责制订和推广国际通用资质认证框架，即&ldquo;国际软件测试资质认证委员会推广的软件测试工程师认证&rdquo;(ISTQB Certified Tester)项目。ISTQB现有包括美国、德国、英国、法国、日本等四十几个成员国，超过十四万人员通过了该认证。中国于2005年开始在中国上海筹备CSTQB(Chinese Software Testing Qualification Board)并于2006年5月26日在美国奥兰多举行的ISTQB2006年年会上得到正式批准，成为ISTQB的成员。</p>
<p>
	　　ISTQB有初级/Foundation和高级/Advanced两大类。</p>
<p>
	　　高级/Advanced的又分成测试经理/Test Manager、测试分析师/Test Analyst、测试技术分析师/Test Technical Analyst三类，三类的考试是分开的，三类之间没有任何关联关系。</p>
<p>
	　　通过初级/Foundation、测试经理/Test Manager、测试分析师/Test Analyst、测试技术分析师/Test Technical Analyst任何一个考试，颁发相应的证书，但是如果想靠高级的，必须通过初级的考试，这个消息是从培训机构那里得知的。这也是为什么我们很多同事明明可以直接参加高级的培训，还去先参加初级的培训。</p>
<p>
	　　问题二、ISTQB有用吗?</p>
<p>
	　　一个有牌子的商品，总比没牌子的可信度高些;但是有牌子的商品，质量就一定比没牌子的商品质量好吗?不一定。ISTQB就像是一个牌子，有了这个认证，找工作时，可以拿来当叩门砖，当然如果能力就那么回事，有叩门砖也没啥用。</p>
<p>
	　　还有就是欧美企业可能比较熟悉ISTQB，其他企业也不一定知道ISTQB。现在ISTQB在中国的普及度不高，含金量还是比较高的，所以高级的考试应该还是蛮有用的。</p>
<p>
	　　再说说参加ISTQB培训能不能学到东西。如果你本来就知道的挺多，那ISTQB培训没啥好学的，除非为了认证。如果是你对软件测试一无所知，这个培训也帮不了多少，因为很短的培训，也吸收不了那么多东西。但是如果你知道些测试的东西，但是觉得自己所知道不系统，那这个培训还是帮助很大的。在这里说下，培训的只是主要是用来考试认证的，有些东西比较好，可以用到自己的工作当中，但是有些不适合，考完试，就不需要了。</p>
<p>
	　　问题三、自己看教程能通过考试吗?</p>
<p>
	　　这个我还真没办法回答，但是我个人认为如果你曾经有过一年软件测试的经验，并且在公司里接受过正规的系统的测试培训，你看初级考试的材料，应该能通过。对于高级考试，我觉得自己看材料能通过的概率很低，像测试经理/Test Manager考试，参加完培训考过的通过率也就在60%。</p>
<p>
	　　问题四、培训的费用是多少?</p>
<p>
	　　初级的培训费用在2500左右，包括培训和考试。高级的培训费用，公开课在10000左右，企业组织的培训，如果人多，可能会实惠些，比如7000。目前，初级的培训机构在北京上海广州都有;高级的培训机构上海广州有，其他地方还不知道。不过目前高级的培训做的比较滥，也许是因为做的少吧。目前通过高级考试的，全国好像也就几十个人。</p>
<p>
	　　ISTQB考试通过秘籍</p>
<p>
	　　下面奉送考试通过秘籍，这是培训机构反复强调的，也是我个人验证过的秘籍。</p>
<p>
	　　秘籍一、看大纲，不管哪个级别的考试，都需要看大纲，因为试题是根据大纲出的，所以看大纲没错的。考初级的时候，我是什么都没看，就听听课，就过了，因为那会我在软件测试行业已经三年多了。高级考试的时候，培训老师反复强调要看大纲，看的人都通过了，而且分数还不低。</p>
<p>
	　　秘籍二、如果培训老师在培训的时候给一些习题做，不同意给大家拷贝拍照等，那大家注意了，这极有可能就是真题。因为培训的费用都很高，出那么多钱参加培训，不是说这个培训值那么多钱，而是那个通过后拿到的证书值钱，所以培训机构也会想方设法让参加培训的通过，这具体的操作就各不相同了。</p>
<br /><b>文章分类</b>:ISTQB]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/news/itdongtai/2012/0516/204884.html</link>
<title><![CDATA[扎克伯格：取经盖茨乔布斯 如海绵般善于学习]]></title>
<author>不详</author>
<category>IT动态</category>
<pubDate>Wed, 16 May 2012 09:53:15 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/news/itdongtai/2012/0516/204884.html</guid>
<description><![CDATA[<p>
	　　一位风险资本家表示，2005年当他遇到扎克伯格时，这位年轻人不仅仅需要获得获得风险投资的资助，而且还希望被引荐认识盖茨。&rdquo; 扎克伯格在随后4年中一直追随格拉汉姆，参加他的会议以及面向分析师的介绍，希望了解格拉汉姆如何运营一家大公司。</p>
<center>
	<img alt="" border="1" height="362" src="/uploads/allimg/120516/103J4GF-0.jpg" width="550" /></center>
<p>
	　　扎克伯格漫画(腾讯科技配图)</p>
<p>
	　　腾讯科技讯(无忌)北京时间5月14日消息，《纽约时报》周日发表分析文章称，在Facebook创始人、首席执行官马克扎克伯格(Mark Zuckerberg)即将引来28岁生日之时，这家全球最大的社交网站也即将开启首次公开招股之门。这笔交易要么表明Facebook正在改变一切，要么表明围绕Facebook的狂热正在失控。</p>
<p>
	　　以下为文章全文：</p>
<p>
	　　上周一早晨，扎克伯格的观众&mdash;&mdash;华尔街掌控着无数资金的显赫人物都坐在会场静静等待一个人。会场纸张发出沙沙作响的声音，黑莓手机在嗡嗡直响。但是扎克伯格又跑到哪里去了?身着卫衣的Facebook男孩扎克伯格，仍然呆在洗手间内。很明显，这些西装革履的投资界大亨们仍然在等待他。</p>
<p>
	　　Facebook二号人物谢丽尔桑德伯格(Sheryl Sandberg)在台上耸了耸肩，向与会者说：你们了解扎克伯格。台下的金融界权贵们笑做一团：是的，我们都了解他。优雅的企业高管桑德伯格和书呆子式的程序员扎克伯格成为Facebook的阴阳两面。</p>
<p>
	　　这是5月7日发生的事情，当时距离扎克伯格28岁的生日还有一周的时间。正如华尔街、硅谷和全世界都知道的一样，一件大事将要发生：这要么证明，Facebook正在改变全球各地的一切，要么表明围绕社交媒体和Facebook的狂热正在失控。</p>
<p>
	　　在纽约曼哈顿喜来登酒店的会议厅，Facebook的高管、银行家们正在为这家公司的首次公开招股进行着编排。这不仅仅是一个简单的首次公开招股交易。它有点像一场文化盛会，像是科技产业史上的巅峰。财力雄厚的人们都来到喜来登酒店参与这场数十亿美元的产品销售会。如果一切进展的顺利，Facebook将会在本周五以近1000亿美元的估值进行首次公开招股。1000亿美元&mdash;&mdash;要知道这是对一家在8年前尚不存在的公司的估值。</p>
<center>
	<img alt="" border="1" height="401" src="/uploads/allimg/120516/103J42F0-1.jpg" width="550" /></center>
<p>
	　　扎克伯格与家人2005年在加州办公室的合影(腾讯科技配图)</p>
<p>
	　　在Facebook的发展过程中，无人比扎克伯格更重要。他是《社交网络》电影中的英雄和恶魔，是世界的毁灭者，是人们的&ldquo;时间杀手&rdquo;。他延续了自古登堡(西方活字印刷术发明人)以来的一系列变革，改变了人们交流和思考问题的方式。扎克伯格的故事，包括他在纽约州Dobbs Ferry的儿童时代，在哈佛大学因&ldquo;thefacebook&rdquo;而起的纠纷已经被人们熟知。Facebook的首席公开招股将开启一个新篇章，这也将是当代商业史上最伟大的故事之一。扎克伯格也将借此成为世界首富之一，坐拥187亿美元的资产。</p>
<p>
	　　除去令人难以置信的个人财富外，许多人不禁迸发出一个同样的问题：扎克伯格是否已为此做好了准备?他是否有能力领导一家市值超过了麦当劳或是高盛的上市公司?对于这一问题的回答，将会决定Facebook的未来，以及该公司新公众投资人的财富。这也是扎克伯格第一次将接受无情的证券市场的考验。企业的首席执行官们都非常明白，这个市场绝没有慈悲之心。</p>
<p>
	　　LinkedIn联合创始人里德霍夫曼(Reid Hoffman)说，&ldquo;你们可以打赌，赌注是&lsquo;创始人是否会离开公司?&rsquo;在这一点上，扎克伯格做得非常出色。&rdquo;霍夫曼不仅是扎克伯格的顾问，而且也是Facebook的早期投资人之一。</p>
<p>
	　　扎克伯格的好友和同事们都认为，扎克伯格的目标是成为一名长期的首席执行官。与编写程序的软件工程师一样，他一直在努力填补个人代码中的空白，就像程序员所做的一样，确保自己的代码不会被破解。这些人表示，尽管坐拥百亿美元的财富，但扎克伯格依然清楚得认识到自己的局限性。他强于产品设计和战略，以此作为自己的主攻方向;他弱于企业日常管理和运营，招募了经验丰富的管理者来参与管理，这其中就包括了现年42岁、令人敬畏的桑德伯格。扎克伯格的好友和同事们表示，桑德伯格一直在指导扎克伯格如何与员工进行交流，以及打造Facebook的业务。</p>
<p>
	　　善于学习</p>
<p>
	　　除桑德伯格之外，66岁的华盛顿邮报公司首席执行官兼董事长唐纳德格拉汉姆(Donald Graham)也是扎克伯格的导师，并担任Facebook董事。市场研究公司Altimeter Group分析师丽贝卡勒布(Rebecca Lieb)表示，扎克伯格拥有一批&ldquo;经验丰富的副官&rdquo;。Facebook首席财务官大卫埃博斯曼(David Ebersman)则是另一个例子：扎克伯格2009年从生物科技公司Genentech把他挖了过来，并表示埃博斯曼帮助增长迅猛的基因科技扩大了财务部门，这一经验&ldquo;对Facebook至关重要&rdquo;。</p>
<p>
	　　在Facebook总部之外，扎克伯格还有着一些个人智囊团。这个智囊团包括了比尔盖茨(Bill Gates)、已故的史蒂夫乔布斯(Steve Jobs)等科技巨头，以及网景创始人马克安德森(Marc Andreessen)等人。</p>
<p>
	　　一位风险资本家表示，2005年当他遇到扎克伯格时，这位年轻人不仅仅需要获得获得风险投资的资助，而且还希望被引荐认识盖茨。(扎克伯格最终自己认识了盖茨。如今，盖茨会经常性的向扎克伯格就慈善和管理问题提供建议。)</p>
<p>
	　　Salesforce首席执行官马克贝尼奥夫(Marc Benioff)认识扎克伯格已有多年。他说，&ldquo;最有趣的是，扎克伯格知道如何把自己发展成为一名企业领袖。他对产业不仅有着难以置信的愿景，而且对个人发展也有着惊人的愿景。&rdquo;</p>
<p>
	　　不过即便是如此，扎克伯格依然被认为不适宜参加社交活动，特别是在华尔街参加社交活动。举例来说，身着卫衣参加在喜来登酒店举办的活动，就招致了市场批评，认为这种做法对金融产业极不尊重。</p>
<p>
	　　证券公司Webush Securities分析师迈克尔帕赫特(Michael Pachter)上周在接受彭博电视台采访时表示，扎克伯格的态度着装表现出&ldquo;对股东的高傲&rdquo;。他说，&ldquo;他很关心用户和员工，除此之外，我不知道他是否还关心其他人&hellip;&hellip;如果他要上市，就必须对股东负责。这正是谷歌当年聘请埃里克施密特(Eric Schmidt)出任首席执行官的原因，也是乔布斯最终被逐出苹果的原因。&rdquo;#p#分页标题#e#</p>
<p>
	　　毫无疑问，华尔街以及Facebook在全球的9亿用户已经习惯于扎克伯格，而且像乔布斯、盖茨等人长期以来一直对首席执行官的着装要求发起着挑战，但是扎克伯格同样也得面临相同的问题。他的一位好友表示，&ldquo;他像海绵一样善于学习。他提问的比率远远超过一般人。他总是在不停的问&lsquo;为什么?为什么?为什么?他非常明白自己擅长于什么。&rsquo;&rdquo;</p>
<p>
	　　扎克伯格哈佛大学的舍友乔伊格林(Joe Green)表示，早年间扎克伯格非常自信，因此表现得有一些孤僻。当时的扎克伯格并不是最好的沟通者。他表示：&ldquo;你可以认为这样不好，但你必须有极强的自信，才能启动类似Facebook这样的项目。&rdquo;格林目前是Facebook平台知名应用Causes的联合创始人。</p>
<p>
	　　扎克伯格曾被古希腊和古罗马的文化深深吸引。在儿童时代，他最喜爱的一款视频游戏是《文明》。该游戏的获胜目标是&ldquo;建设能经受时间考验的帝国&rdquo;。扎克伯格的一名好友表示，《文明》是扎克伯格&ldquo;发展Facebook的基石&rdquo;。</p>
<p>
	　　拒绝雅虎</p>
<p>
	　　2006年，扎克伯格差点失去了对公司的掌控权。这也是他作为Facebook首席执行官遭遇的最大失败。当时，雅虎高管丹尼尔罗森斯维格(Daniel Rosensweig)在疯狂的向Facebook示好，希望雅虎能收购该公司。扎克伯格开出的价格为10亿美元，仅相当于Facebook本周上市后市值的百分之一。</p>
<p>
	　　罗森斯维格目前是Chegg首席执行官。扎克伯格和罗森斯维格当时已非正式地达成了交易。然而由于雅虎股价大幅下跌，雅虎将收购价格下调至8.5亿美元。</p>
<p>
	　　也正是因为这样，扎克伯格最终放弃了这一交易，并表示自己再也不会犯同样的错误。在去年10月斯坦福大学举办的一次创业企业会议上，扎克伯格表示：&ldquo;如果你不希望出售公司，那么不要进入这样的流程，与其他人讨论这一问题。&rdquo;扎克伯格随后加强了对Facebook的控制，赶走了支持与雅虎交易的Facebook员工。</p>
<p>
	　　隐私困扰</p>
<p>
	　　扎克伯格对Facebook用户隐私权的态度也引起了广泛争议。当Facebook在2006年推出&ldquo;动态汇总&rdquo;功能时，扎克伯格认为这必将引起轰动。然而许多用户对此感到愤怒，因为他们的个人主页将自动广播所有的个人页面修改和新增活动。Facebook一度接到了加利福尼亚州帕洛阿尔托市警察部门的电话，询问该公司是否能关闭动态汇总功能，因为愤怒的人群计划上街游行，对Facebook的做法表示抗议。</p>
<p>
	　　扎克伯格随后做出道歉，但仍保留了动态汇总的大部分功能。实际上，即使是现在，扎克伯格也仍在推动用户更多地分享信息，并且常常是以用户无法理解的方式，而只有在用户不满积累到一定程度时才会做出退让。</p>
<center>
	<img alt="" border="1" height="354" src="/uploads/allimg/120516/103J441T-2.jpg" width="550" /></center>
<p>
	　　扎克伯格去年9月谈论网站的新功能(腾讯科技配图)</p>
<p>
	　　Facebook曾经推出了广告服务Beacon，自动发布用户的网上购物详情。该服务也遭到激励批评。扎克伯格随后决定放弃Beacon，并宣布将支出950万美元建立一家隐私权组织，以解决相关的集体诉讼。不过扎克伯格并未停止步伐。Facebook一名前员工表示：&ldquo;扎克伯格不会停歇，如果一种方法行不通，他仍会不断尝试。&rdquo;</p>
<p>
	　　广泛学习</p>
<p>
	　　华盛顿邮报集团总部位于华盛顿特区的西北部，这是一个与硅谷完全不同的地区。2005年初，Facebook也给当地带来改变。当时，通过哈佛大学同学引荐，扎克伯格见到了华盛顿邮报集团首席执行官格拉汉姆。</p>
<p>
	　　扎克伯格当时和Facebook时任总裁希恩帕克(Sean Parker)一同前往华盛顿，希望华盛顿邮报集团能够对Facebook进行投资。在《Facebook效应》一书中，作者大卫柯克帕特里克(David Kirkpatrick)回忆说，扎克伯格被华盛顿邮报集团和硅谷科技公司之间的差异震惊。扎克伯格表示：&ldquo;我对于文化差异感到惊讶。他们关注长期发展，专注于品牌。&rdquo;</p>
<p>
	　　扎克伯格在随后4年中一直追随格拉汉姆，参加他的会议以及面向分析师的介绍，希望了解格拉汉姆如何运营一家大公司。2009年，扎克伯格邀请格拉汉姆加入Facebook董事会。不过华盛顿邮报集团从未投资Facebook。扎克伯格不仅被格拉汉姆的远见所吸引，同时也非常关注华盛顿邮报的股权结构。与许多其他媒体公司一样，华盛顿邮报公司采用两级的股权结构，这确保格拉汉姆家族拥有足够的投票权。扎克伯格在Facebook模仿了这样的结构。当Facebook上市后，扎克伯格只持有该公司的小部分股份，但投票权却超过一半。</p>
<p>
	　　扎克伯格从帕克身上获得了有价值的经验。帕克曾辅导扎克伯格保持对公司控制权的重要性。帕克自己曾遇到过这样的问题。作为在线地址簿服务Plaxo的创始人，帕克与风险投资公司之间发生了持续的纠纷，并最终导致了Plaxo的失败。</p>
<p>
	　　为了保护扎克伯格，帕克起草了法律文件，确保扎克伯格拥有Facebook董事会的两个席位，当时的另一个席位分配给了帕克本人。只要扎克伯格仍拥有董事会席位，那么他所持股份就不会减少。而当帕克从Facebook离职时，他将自己的董事会席位还给了扎克伯格。</p>
<center>
	<img alt="" border="1" height="500" src="/uploads/allimg/120516/103J42191-3.jpg" width="313" /></center>
<p>
	　　扎克伯格2005年在办公室与公司早期员工的合影(腾讯科技配图)</p>
<p>
	　　帕克在Facebook还扮演了另一个非常重要的角色，帮助该公司招聘了大量的早期员工，其中包括随后成为LinkedIn明星的马特科勒尔(Matt Cohler)、Facebook首任销售主管凯文科尔兰(Kevin Colleran)和Facebook首席设计师阿隆希提格(Aaron Sittig)。帕克还主导了Facebook最初几轮融资，吸引来了PayPal联合创始人皮特希尔(Peter Thiel)等知名投资人。</p>
<p>
	　　乔布斯也曾指导扎克伯格如何招聘。在苹果发展早期，乔布斯常常在散步时决定招聘对象。在Facebook成立之初，扎克伯格曾向乔布斯寻求建议。两人常常在下午一同散步，从而形成了很好的私人关系。扎克伯格甚至从苹果的设计中获得灵感，并仿照Macworld的形式每年召开F8大会。在招聘时，扎克伯格也模仿乔布斯。当Facebook在帕洛阿尔托建立公司总部之后，扎克伯格常常在散步时做出招聘某些高管的决定。#p#分页标题#e#</p>
<p>
	　　一些以这种方式加入Facebook的员工表示，扎克伯格与应聘者一同散步，在路上提出相关问题，并在一块警示标志前停下。在那里，扎克伯格会向应聘者介绍眼前的景观，以及他对未来的看法。</p>
<p>
	　　去年由扎克伯格招聘的一名Facebook员工说：&ldquo;他指着苹果总部，随后是惠普和其他一些大型科技公司的总部。最后他指着Facebook说，这家公司的规模将超过之前那些公司的总和，而如果我加入Facebook，我将成为它的一部分。&rdquo;</p>
<p>
	　　疯狂收购</p>
<p>
	　　在希望收购其他公司时，扎克伯格常常会通过电话或Facebook即时通讯工具这样说道，&ldquo;我们不需要律师参与此事。我们单独谈谈。&rdquo;在过去8年时间里，Facebook收购了一系列的创新公司，如FriendFeed、Snaptu和Gowalla等。今年4月份，Facebook又宣布斥资10亿美元收购照片分享服务Instagram。</p>
<p>
	　　作为Facebook的首席执行官，扎克伯格已证明自己是出色的交易谈判者。一位曾与扎克伯格举行过谈判的首席执行官表示，&ldquo;扎克伯格能够说服被收购对象，他们应当以合理的估值接受收购要约。然后，他会去找希望投资Facebook的投资者，并说这家创业企业将会以这样的估值加入我们，因此你应当进行这一数额的投资。&rdquo;</p>
<p>
	　　举例来说，在收购Instagram时，扎克伯格和该公司首席执行官凯文希斯特罗姆(Kevin Systrom)在扎克伯格家中私下达成了协议。律师和顾问均没有参与这一过程。一名在场人士表示：&ldquo;当交易完成时，扎克伯格和希斯特罗姆坐在外面，吃着牛排和冰激凌，而律师都坐在里面观看《权力的游戏》。&rdquo;这两个20多岁的年轻人独自商定了交易条款。</p>
<p>
	　　收购Instagram的交易，体现出扎克伯格在过去8年中如何运用自己权力的方式。有消息称，Facebook董事会直到交易宣布前几天才通过一封简短的电子邮件获悉此事，并且也没有提出反对。</p>
<p>
	　　考虑到即将到来的首次公开招股，作为公司首席执行官，扎克伯格目前非常安全。在Facebook以外，扎克伯格有几名好友，以及女友普里西拉陈(Priscilla Chan)和一只宠物犬Beast。与它的主人一样，Beast也有着自己的Facebook主页。</p>
<p>
	　　当夜幕降临后，扎克伯格有时会和他的助手在Facebook总部外玩轮式曲棍球，有时也可能喝一两瓶啤酒。轮式曲棍球刚刚进入硅谷不久，但扎克伯格早在儿童时代就在纽约州玩过这种运动。在院子外，许多20多岁的年轻人喧哗着溜冰，直到天色完全暗下来。在院子里，巨大的黑色砖块拼写出单词&ldquo;hack&rdquo;。他们将自己的溜冰场称作&ldquo;黑客体育场&rdquo;。&ldquo;Facebook帮&rdquo;和他们的船长扎克伯格正在奋力滑行。他们谨慎地瞄准，并试图获得胜利。</p>
<br /><b>文章分类</b>:IT动态]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/news/itdongtai/2012/0516/204883.html</link>
<title><![CDATA[微软CEO鲍尔默被评为最差CEO]]></title>
<author>bxmeng</author>
<category>IT动态</category>
<pubDate>Wed, 16 May 2012 09:10:07 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/news/itdongtai/2012/0516/204883.html</guid>
<description><![CDATA[<center>
	<img alt="" border="1" height="297" src="/uploads/allimg/120516/0Z11V402-0.jpg" width="452" /></center>
<p>
	　　周末雅虎CEO 斯科特&middot;汤普森(Scott Thompson)因为&ldquo;学历门&rdquo;丑闻而灰溜溜下台了，除他以外，你知道谁还应该下台呢?在福布斯杂志眼里，微软CEO 史蒂夫&middot;鲍尔默 (Steve Ballmer) 首当其冲，因为他&ldquo;毫无疑问&rdquo; 是美国大型上市公司中最差的CEO (在福布斯评选的五大最差当中名列榜首)。</p>
<p>
	　　这位喜欢大声叫嚷标志性的&ldquo;developers, developers, developers&rdquo;的微软CEO 在2000年就从比尔盖茨手中接过了掌门人权杖，在世界财富排行榜上位列第19位。但福布斯认为，微软当下遇到的诸多难题鲍尔默都难辞其咎，其中的一个例子就是在新兴市场尤其是在智能手机领域的行动缓慢而导致微软陷入了极大的被动。</p>
<p>
	　　以下为福布斯的评选理由，翻译如下，说得在不在理就请读者自己拿捏了：</p>
<p>
	　　毫无疑问，鲍尔默是美国大型上市公司中最差的一位。他不但凭一己之力将微软从增长最快、利润最高的科技市场 (移动音乐、手机和平板) 中拽了出来，还在这个过程中牺牲了自己公司和其他&ldquo;生态系统&rdquo;公司的增长和利润，戴尔、惠普甚至诺基亚都蒙受了损失。他糟糕的领导力不但伤害了微软，还波及到了股东利益，就业岗位也不能幸免。</p>
<p>
	　　鲍尔默在2000年刚上台接手微软时，微软的股价曾达到最高每股60美元。但两年后则回落至每股20美元，直到最近，公司股价才重回每股30美元的低位。由于新品发布计划经常性被推迟，最后出来的产品也没有增加太明显的价值，这让顾客不得不想方设法避免升级。鲍尔默也承认，Vista 操作系统的研发花掉了太多的人力物力，历经多年后推出，用户却不愿升级了。Windows 7 和 Office 2010 也没有让企业或家庭用户感到兴奋，而就在此时，苹果公司占据了个人技术领域的头把交椅。</p>
<p>
	　　在放弃Zune、放弃平板、放弃Windows CE 和其它移动产品后，今天微软的模样与十年前鲍尔默刚刚接手的微软并无二致：微软就是一家PC公司，再无其它，而人们对PC的需求却转向了移动设备。在移动市场迟到多年后，他把宝押在了Windows 8上面，戴尔、惠普、诺基亚等公司的未来也与微软绑到了一块。对任何一位CEO来说，这都是一次疯狂的赌局&mdash;&mdash;如果微软董事会能在多年前聘请一位懂得科技快速发展步伐的CEO来替代鲍尔默的话，微软就能跟上目前的市场趋势了。</p>
<br /><b>文章分类</b>:IT动态]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/news/itdongtai/2012/0515/204876.html</link>
<title><![CDATA[马克·扎克伯格的股权谈判艺术：这个十足的混球]]></title>
<author>不详</author>
<category>IT动态</category>
<pubDate>Tue, 15 May 2012 12:01:47 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/news/itdongtai/2012/0515/204876.html</guid>
<description><![CDATA[<p>
	　　其实原词不应该是「混球」。</p>
<p>
	　　这个词最初是我在知乎一个问题回答里引用的 John Gruber 当时评论 Mark ZuckerBerg 持有 Facebook 大量股权和投票权的一句话。</p>
<p>
	　　Zuckerberg was able to hold onto so much stock and an astounding majority of the voting rights is proof that his success is no fluke. The guy must be a badass at the negotiating table.</p>
<p>
	　　扎克伯格可以在 Facebook 现在持有如此多的股权和绝大多数投票权，说明他的成功不是侥幸。这小子在谈判桌上一定是个十足的「Badass」。</p>
<p>
	　　这个「Badass」，翻译成混球当然不妥，我比较词穷，也没想到什么好词儿。</p>
<p>
	　　实事上，英文里「badass」这个词有点意思是指一个人我行我素，按照自己的方式做事，有点点酷的感觉，甚至还带点褒义。</p>
<p>
	　　Mark 自己不也常说：「保持酷的状态很重要」嘛。</p>
<center>
	<img alt="" border="1" height="384" src="http://img.nooidea.com/2012/04/mark_zukcerberg_early_time_facebook_workstation.jpeg" width="600" /></center>
<p>
	　　(image credit: LATimes.com)</p>
<p>
	　　后来知乎的回答下有一个网友留言问：</p>
<p>
	　　保留了这么多的投票权和混球之间是什么关系呢?强势?无赖?请指教。</p>
<p>
	　　(一)</p>
<p>
	　　先来看一看 Facebook 未 IPO 前的融资情况(数据来源是 Crunchbase )：</p>
<center>
	<img alt="" border="1" height="600" src="/uploads/allimg/120515/095545D51-0.png" width="291" /></center>
<p>
	　　融资数据来看，从天使到四轮私募，然后风投的入场，经过至少 6 轮大的融资下来后，Mark Zuckerberg 还可以持有 28.4% 的股权，和 56.9% 的投票权。</p>
<p>
	　　很多情况下，互联网公司在完成第一轮或第二轮融资后，公司创始人基本上就不再能够完全拥有公司的控制权了(50% 以上投票权)。</p>
<p>
	　　Mark Zuckerberg 可以有 56.9% 的绝对控制权，那最直接的就是两个因素：</p>
<p>
	　　1. 股权(Shareholding)</p>
<p>
	　　2. 投票协议(Voting agreement)</p>
<p>
	　　第一个因素很好理解，Sean Parker 给 Mark 当时提出的公司结构，$FB 的 S-1 表 127 页的股权信息注释里也有详细解释，Mark 所持有股权均为 B Class，Pre IPO 一共有 533,801,850 股。B class 的一股在投票权上相当于 10 个 A class。这也就让 Mark 有大于他 28.4% 股权的投票权，但也不过 28.2% 的投票权。</p>
<p>
	　　(这种结构其实很普遍，许多科技互联网公司都有类似安排，比如 Google 也是有 Dual Class Structure，B Class 也相当于10倍 的 A Class投票权，保证两个创始人和施密特当年对 Google 有绝对控制权。在这篇 Thoughts on Google 文章里有提到过。)</p>
<p>
	　　另外 30.6% 的投票权则来自其他 Executives(执行高管)和 Employees(员工)所给与的 Proxy vote(代理投票)。</p>
<p>
	　　这里需要提一下，事实上任何对一个公司的控制，并不一定需要 50% 的投票权。</p>
<p>
	　　通常情况下 30% 控股对应的投票权就可以让你可以基本上有效控制(effective control)，因为大多数情况下公司发展到一定规模基本上 20% 的控股就已经很大了。当你拥有超过 20% 的控股，很多时候机构投资者、「大」股东、员工、其他控股人，如果不是一心要把你赶出去，大多时候是选择和你合作，把投票权给你让你代理(proxy vote)，很多时候他们也懒得插手公司发展的方向问题。</p>
<p>
	　　然后我们再来看看第二个因素，Voting Agreement。</p>
<p>
	　　这个在 S-1 表的 132 也有详细说明。CEO Mark Zuckerberg 与部分股东签有投票协议，这项协议在 IPO 结束 Facebook 上市后依旧有效。其中包括有大概 42,245,203 股 Class A 普通股和 485,199,231 股 Class B 普通股，相当于 IPO后 %(S-1 表也是留空)的投票权。</p>
<p>
	　　一共有三类投票协议。其中主要的信息就是：</p>
<p>
	　　首先公司主要的几个高管和员工授予 Mark 30.6% 的投票权，这样他一共有 56.9% 的投票权。</p>
<p>
	　　其次，在协议下几个初始投资人包括后期的风险投资均也将手中的投票权留给了 Mark Zuckerberg。</p>
<p>
	　　这其中包括 Dustin Moscovitz、Sean Parker 和其他几个硅谷的投资人，另外还包括 DST、Greylock、Accel Partners 以及主要的公司和投资机构。</p>
<p>
	　　最后，就是那个有意思的 Class B 普通股。协议里明确，如果公司的高管和员工在 IPO 以后哪天要卖掉手上的 Class B 普通股，这些 ClassB 将自动转换为 Class A，也就是说这些 Class B 普通股转入公众投资者(public investor)之后 10：1 的投票权丧失。</p>
<p>
	　　IPO 发行的股票为 Class A 普通股。(Public investor 获得的都是 Class A。)</p>
<p>
	　　最后那点说明了什么呢?</p>
<p>
	　　说明了即便那些给 Mark Zuckerberg 代理投票权利的高管和员工放弃交出 Proxy vote，决定将手头的这些股票卖给公众投资者， Mark 依旧可以维持他的绝对投票权。同时如果卖出去的是 Class B 普通股，更是意味着 Mark 手头上的 Class B 普通股的投票权会加重。</p>
<p>
	　　这种投资人和机构公司全部把投票权交给创始人的情况在硅谷也并不是特别的常见。</p>
<p>
	　　要说原因，我想也不过就两个可能比较大：</p>
<p>
	　　1. 这些人(Dustin Moscovitz、Sean Parker 和 DST 一些机构)对 Mark 的运营和掌管很放心。</p>
<p>
	　　从何看出?很简单，Facebook 一直以来都是「Staying private longer movement(不上市运动)」的代表 [这里有解释]，Mark 也知道上市后会对 Facebook 运营团队、财务、产品开发、利润上有很大压力，很可能就毁了这个公司。上市也是迫不得已 [阅读这篇文章最后的部分「Facebook 为什么要上市」]。</p>
<p>
	　　然后之前 Facebook 拒绝 Yahoo 几十亿收购的报价。</p>
<p>
	　　这说明什么?说明 Mark 心里应该很明白 Facebook 的价值，也很明白要带领 Facebook 如何发展。</p>
<p>
	　　基于这一点，所以有了这第一个可能的猜测。</p>
<p>
	　　2. 这是「钱(股票)换权(投票)的交易」「quid-pro-quo trade of money (shares) for powers (votes)」。</p>
<p>
	　　这些人不太在乎 Facebook 的运营。要么他们觉得挺放心，要么他们无所谓 Facebook 未来几年后是什么样子。#p#分页标题#e#</p>
<p>
	　　总之，投资人当然还是会关心自己什么时候退场的。</p>
<p>
	　　也有一些特殊的情况下，在不可预见的未来 Mark 无法行使他的绝对投票权利。(不是我瞎说，招股书里写着的)</p>
<p>
	　　1. Mark Zuckerberg 挂了(die)</p>
<p>
	　　2. 他放弃(divest)</p>
<p>
	　　(二)</p>
<p>
	　　Mark Zuckerberg 56.9% 的绝对投票权又有什么意义呢?</p>
<p>
	　　当然是让 Mark 可以牢牢的把握住自己对 Facebook 未来的掌控。</p>
<p>
	　　就像之前拒绝 Yahoo 的收购报价，他可以继续在公司关键的决策上有决定性的作用。</p>
<p>
	　　包括：董事会调整、并购，甚至将 Facebook 部分分离运营。另外，在未来如果有遇到恶心收购，作为创始人的他也可以一票否决。</p>
<p>
	　　实事上前些日子收购 Instagram 项目上，他在绝对控制权上就已经有所体现：</p>
<p>
	　　据说收购前，他给 Instagram 的 CEO Kevin Systrom 打了一个电话，说想要购买这个图片分享服务，随后不到 48 小时，两家公司的高管就敲定了收购细节。然后周一 Facebook 就对外宣布以 10 亿美元的现金和股票收购 Instagram。</p>
<p>
	　　WSJ 报道里称，Mark Zuckerberg 达成这笔交易未和董事会商讨。</p>
<p>
	　　另外，Facebook 收购 Instagram 的信息来源就是 Mark Zuckerberg 的 Facebook Wall 更新。以至于我都觉得莫非以后 Mark Zuckerberg 新闻发布会都直接在 Facebook 上以这种形式发布?</p>
<p>
	　　另外还不只 Instagram 这事儿。</p>
<p>
	　　上个月 3 月 19 日(美国时间)，Facebook 秘密举办了一场「上市启动会议(IPO &ldquo;kickoff&rdquo; meeting)」，与会的有银行家(bankers)和分析师(analysts)，当然还有公司高管。</p>
<p>
	　　通常情况下，这样的会议里银行家是老大(kings of the castle)。这些人会把那些又激动又稍稍紧张的公司经理介绍给有钱的「庄家」。</p>
<p>
	　　公司经理做完演示介绍(presentation)，期待银行家和分析师能觉得不错，然后投钱，给公司上市股票买账。</p>
<p>
	　　但显然 Facebook 不吃这一套。</p>
<p>
	　　很简单，Facebook 不缺钱，如上文提到 Facebook 私募的钱都用不完。再者说，Facebook 高管也清楚这次 IPO 没有卖不出去的单。</p>
<p>
	　　这次 3 月 19 日的会议上，Mark Zuckerberg 就没去。到场的只有负责 Facebook 日常运营的 COO Sheryl Sandberg 和首席财务官(CFO)David Ebersman。</p>
<p>
	　　为何 Mark Zuckerberg 没去?</p>
<p>
	　　1. 是因为 Mark 觉得自己有更重要的事情要做。去继续开发完善 Facebook 这个产品。</p>
<p>
	　　就如几个月前那张他办公桌照片里的 Poster 所说的一样：「Stay Focus &amp; Keep Shipping.」</p>
<p>
	　　2. Mark 自始至终都是对 Bankers、上市等竖中指的。(虽然他也不能牛到对融资不屑&hellip;&hellip;)</p>
<p>
	　　Facebook 在 IPO &ldquo;roadshow(路演)&rdquo;前阶段的工作，基本上就都是 Sheryl 和 David 以及其他管理层人员参与。</p>
<p>
	　　这件事情让我想到两点：</p>
<p>
	　　第一、Mark Zuckerberg 的确和 Steve Jobs 很像，有着对产品的那种热情。Focus on Products，所有的一切都以 Product 为中心。</p>
<p>
	　　第二、Mark Zuckerberg 在公司管理上很老练。从 04 年自己写代码，然后 Facebook 上线，大大小小的事情发生了很多。Facebook 这个产品也有了很大的改进和变化，刚刚更新的 S-1 表上显示，Facebook 已经有 9 亿用户，每日活跃用户达 5 亿 2600 万。</p>
<p>
	　　更厉害的是，他不光做产品。04 年到现在的 8 年间，他雇佣保留的许多得力高管，协助他一同经营管理公司。</p>
<p>
	　　例如 Sheryl Sandberg 和 David Ebersman，两人非常有能力、有天赋。基本上这次 IPO 的营销和与公众投资们的交流 Mark Zuckerberg 都是直接交给两人打理。</p>
<p>
	　　整个场面就像是，无论如何，Mark Zuckerberg 都是 Facebook 这艘船的掌舵手。</p>
<p>
	　　56.9% 的投票权绝不是侥幸，绝不是捡白菜捡来的。</p>
<p>
	　　「The guy must be a badass at the negotiating table.」</p>
<p>
	　　这个家伙，你觉得就算不是直接和那些投行、机构在一张桌子上谈，没有一点本事会行吗?</p>
<p>
	　　想像一下《社交网络》里的那些场景，想像一下 Facebook 初期时的情形。Mark Zuckerberg 一直都是死死的对 Facebook 有着绝对的掌控权。</p>
<br /><b>文章分类</b>:IT动态]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/rjcsgcsrm/2012/0515/204875.html</link>
<title><![CDATA[开发与测试人员的前世今生]]></title>
<author>Gil Zilberfeld</author>
<category>软件测试工程师入门</category>
<pubDate>Tue, 15 May 2012 11:50:22 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/rjcsgcsrm/2012/0515/204875.html</guid>
<description><![CDATA[<p>
	　　从此以后他们幸福地生活在一起</p>
<p>
	　　关于开发人员和测试人员的关系，人们阐述了很多，讨论了很多，争论了很多。而貌似一旦这两者坐在一起，对峙便开始了，两者间的争论多于相互认同。显然，这不利于实现两者合作的目标&mdash;&mdash;向用户提供价值。</p>
<p>
	　　让我们来分析事情的来龙去脉和现状，思考如何做得更好。</p>
<p>
	　　史前时期</p>
<p>
	　　在最开始，不存在测试人员，只有开发人员。软件开发人员和软件项目的其他人员比起来并没有特别大的不同，除了如下事实：他们是软件项目的主要成本。准确地 说这里的成本并不完全是指开发人员自身(虽然那时优秀的开发人员并不好找)，而是开发时间以及运行软件所需的资源(比如巨型计算机)。从经济角度考虑，专 门成立测试人员是行不通的：开发软件的时间如此昂贵，为测试人员分配时间显得很浪费。</p>
<p>
	　　没有专门人员检查工作，软件开发人员只好自己做测试。因为开发软件的时间如此昂贵，他们通过检查日志、打印信息以及离线&ldquo;调试&rdquo;来确保软件正常运行。那时 还没有可用于调试的IDE，开发时间如此昂贵，可不能在查看成百上千页的打印数据上花费太多的时间。因此检查数据的人都是开发人员，这样大家使用彼此熟悉 的术语，对问题心知肚明。这样，尽管速度还不够快，但整个团队能够和谐地前进，。</p>
<p>
	　　开始分裂</p>
<p>
	　　随着软件行业的高速发展以及计算机成本的降低，软件公司在考虑成本的同时也开始关注软件质量。软件使用者开始变得挑剔，他们经常在初次使用时就不满意，要求软件公司修复或改善他们所购买的软件。</p>
<p>
	　　保证软件质量的方案之一就是验收测试：客户在软件系统上执行应用场景。这些场景就像是软件公司和客户之间的契约：软件系统只有通过这些场景测试才能够被客户接受。</p>
<p>
	　　最初，开发人员会自己执行验收测试，或者由客户执行验收测试，然后将问题反馈给开发人员。但软件公司很快就意识到开发人员不擅长于处理和客户的关系，于是隔离客户和开发团队的想法开始萌芽。</p>
<p>
	　　存在的问题不仅仅是客户和开发人员之间的沟通。因为验收测试有时无法达到预期效果，人们越来越意识到应该对开发团队进行更加严格的质量监控。若由其他团队 的开发人员进行质量监控，则会导致软件成本增加;而进行质量监控不需要理解错综复杂的软件是如何工作的，因此软件测试人员这个职业便产生了。</p>
<p>
	　　当然，这种组织结构的变化并不是自然而然产生的，组织结构变化需要管理上的支撑和协调。所以经过几年的发展，软件项目中开发人员和测试人员两种角色的界限还是不清晰，</p>
<p>
	　　随着软件测试领域的发展，越来越多的测试人员需要提升自身的技能，于是开始产生了相关的方法论和培训需求。培训和认证机构看到了这个市场机会，开始提供测 试人员以及开发人员培训服务。随着方法论的逐渐成熟，测试专家开始涌现。之后开发和测试领域都有各自的专家，开发人员和测试人员的界限清晰起来了。</p>
<p>
	　　双城记</p>
<p>
	　　开发人员和工作人员在思维和工作方式上截然不同。开发人员认为自己是创新家，他们从无到有创建出软件，却常常招测试人员指手画脚。另一方面，测试人员苦苦 忍耐开发进度，而当终于从开发人员手里接过软件时却发现软件是个废物。质量始终难以过关，测试人员重复测试出主要应用场景的错误，花费了不少时间。由于时 间有限，很多应用程序没能完全通过测试。</p>
<p>
	　　开发人员认为测试人员就是敌人，因此可能会把软件发布抛在脑后，使出浑身解术避开测试人员。测试人员认为开发人员不够专业，产生了很多本可以避免的bug。软件团队中弥漫者诸多不信任。</p>
<p>
	　　软件公司中的这两个党派之间还存在另一个问题：软件需求以及测试场景的沟通问题。因为思维方式的差异和语言的歧义性，软件需求经过再次表述，接着再次被理解，结果和实际会有很大出入。而这些理解上的出入直到测试阶段才被发现，相互指责随之爆发。</p>
<p>
	　　最后一个会引发两党冲突的问题是时间鸿沟。开发人员说可以测了，测试人员便开始测试，开发人员接着进行新功能的开发以保持生产率。然而，当测试人员报告bug时开发人员的开发工作被扰乱了，开发人员开始抱怨测试人员见缝插针，指手画脚。</p>
<p>
	　　开发派和测试派之间的紧张局势显然不利于减少浪费和产生有价值的产品。两派之间的冲突导致了重复工作，相互指责，而软件产品难以有见光的一天。</p>
<p>
	　　敏捷之桥</p>
<p>
	　　敏捷实践一开始就以开发出能良好运转的软件作为目标。这是很重要的一步：敏捷宣言的倡导者来自软件行业的各个领域(开发人员、测试人员和管理人员)，他们把业务价值放在第一位，任何事情都应以它为依托。</p>
<p>
	　　&ldquo;完整团队&rdquo;是其解决方案，这是试图将客户和开发团队捆绑在一起的极限编程实践。敏捷组织也有测试人员的概念。</p>
<p>
	　　因为开发人员与测试人员有了共同点并需要紧密协作，他们恢复了之前抗拒的行为：交流。</p>
<p>
	　　他们开始使用相同的术语交流需求是什么。语言障碍消除了，双方在应该怎样做和哪些事情还未解决上达成一致。</p>
<p>
	　　最重要的是，在一个sprint中，功能特性被开发和测试，所有发现的bug都被修正。这样，开发人员和测试人员之间的时间鸿沟消失了，因为他们始终在相同的迭代周期中协作。</p>
<p>
	　　当开发人员和测试人员在同一迭代周期中协作时，他们发现了更好的情况：测试人员在流程早期捕获错误和决定怎么处理，这样对开发工作产生正面的推动，开发人 员也从迭代中受益：在sprint中捕获和修正的bug都不算是真正的&ldquo;bug&rdquo;，只有逃脱出迭代周期的bug才会被当作真正的bug记录下来&mdash;&mdash;开发人 员可不愿意成天被别人说自己开发的软件是有bug的。</p>
<p>
	　　改造</p>
<p>
	　　敏捷团队实践也产生了奇特的社会学副作用：开发人员和测试人员之间的界限不再清晰。敏捷团队中开发人员做着各种各样的事情，他们介于开发人员和测试人员之 间。开发人员开始参与测试，而测试人员则学会了怎样开发以及怎样编写代码做自动化测试。没有人能够做所有事情，但每个人都学会了额外的技能。</p>
<p>
	　　另一个边际效应是软件质量的提升。敏捷实践认为每个人都应该关注质量。开发人员肩负起本来的职责：保证他们的代码能够正常运行。软件质量提高了，测试人员则可以在一般性测试之后开始探索式测试，使软件质量更上一层楼。#p#分页标题#e#</p>
<p>
	　　美好结局?</p>
<p>
	　　试图获得成功的敏捷团队还一直处于发展变化之中。敏捷软件公司正在尝试创建功能特性团队，这样的团队不仅仅由开发人员和测试人员组成，还包括了其他角色。</p>
<p>
	　　但这样的公司还是少数。大多数公司还没有涉及真正的协同敏捷软件开发。开发人员和测试人员仍然被相互隔离，他们认为从业务角度考量这两种角色就应该被分开。</p>
<p>
	　　敏捷实践已经证实，通过流程以及协作可以打破开发人员和测试人员之间的隔阂。成功的敏捷实践必然包括开发团队和测试团队的融合。没有重新组织以使两者融合，是不可能获得成功的，或者用敏捷的术语：不可能获得良好运转的软件。</p>
<br /><b>文章分类</b>:软件测试工程师入门]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/ceshijishu/agiletest/2012/0515/204874.html</link>
<title><![CDATA[敏捷中如何做代码审查的指南]]></title>
<author>不详</author>
<category>敏捷测试</category>
<pubDate>Tue, 15 May 2012 11:13:15 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/ceshijishu/agiletest/2012/0515/204874.html</guid>
<description><![CDATA[<p>
	　　&ldquo;通过一次真正彻底地代码审查(code reviews)，仔细阅读你的代码，找出问题，这是我知道的最好的方式去检测早期的bug，但是他们很少去这样干过。某种意义上是因为他们花了大量的时间去写好代码，但是我认为主要是因为绝大部分程序员害怕其他人审查自己的代码。作为专业的程序员我们要克服阻力，如果你不愿意别人阅读你的代码，然后只是按照自己的意愿写，如果其他人没法读懂它，又怎能让别人使用呢?&rdquo;Jim Waldo &ndash; 《Java语言精粹》的作者</p>
<p>
	　　我强烈赞同code review 是软件生命周期管理中重要的一部分，因为它能帮助我们交付高质量代码、合格作品。</p>
<p>
	　　传统上code review仅是一个形式，通常在代码提交之前由团队负责人或高级程序员负责。在敏捷开发环境中，通过团队合作code review 更系统化，代码的目标和期望应该能用编码指南清晰的定义出来，code review的目标是协同合作，而不是查错。总之code review对整个团队尤其每个程序员都有好处，所以每个人都应该参与进来。</p>
<center>
	<img alt="code review" border="1" height="259" src="/uploads/allimg/120515/0923354230-0.png" width="400" /></center>
<p>
	　　code review的好处：</p>
<p>
	　　俗话说三个臭皮匠赛过诸葛亮，code review 更易于发现代码bug等问题</p>
<p>
	　　3、保证代码质量以及提高代码可读性</p>
<p>
	　　2、团队之间建立信任</p>
<p>
	　　1、指导初级程序员</p>
<p>
	　　编码标准是独立于语言的，对于Java 程序员来说，我想从以下几个范围来做code review</p>
<p>
	　　Java code review的标准：</p>
<p>
	　　合适的变量声明;如：实例变量还是静态变量、常量等</p>
<p>
	　　9、性能问题;如：当没有线程安全问题时使用ArrayList，HashMap替代Vector,Hashtable</p>
<p>
	　　8、内存问题;如：本应使用对象重用或者对象池时却被不恰当的初始化，没有在finally块中关闭昂贵的资源。</p>
<p>
	　　7、数据访问问题：从数据库一次获取数据太多，请求太多的数据库调用。</p>
<p>
	　　6、 线程安全问题;如：Java API类像SimpleDateFormat,Calendar,DecimalFormat等不是线程完全的，在JSP中声明变量也不是安全的，存储状态信息在Struts action类中或者多线程servlet也不是线程安全的。</p>
<p>
	　　5、 对错误的处理：异常抛出而没有保持原始模型(希望Java7修复它)，没有记录到日志系统中</p>
<p>
	　　4、 System.out常被log4j替换</p>
<p>
	　　3、设计问题：没有重用代码，没有清晰的责任分离。如：业务逻辑嵌套在servlet中，而没有使用业务逻辑层，可视化元素(如HTML，CSS)嵌入在后台。</p>
<p>
	　　2、 代码文档：没有注释，没有头文件等</p>
<p>
	　　1、 从给定的框架中遵循最佳实践：如Spring3中注解替代xml文件对于IOC, 对于每一个简单的部署使用外部属性替代硬编码值等</p>
<p>
	　　你应该为团队做个code review的文档和模板，随着项目的开始同步更新，学习更多你项目中选择的软件。</p>
<p>
	　　工欲善其事必先利其器</p>
<p>
	　　code review 工具：</p>
<p>
	　　3、 Crucible 是 Atlassian公司的工具用来不间断处理的审查工作，Crucible能做代码审查而且高度集成在JIRA和FishEye中，支持Subversion、Git等其他类型的VCS。一个通用的例子就是Crucible提供一个转换凭证的工作流，从打开》审查》解决，另一种情景是在代码改变后check- in了之后自动审查。</p>
<p>
	　　2、Gerrit ，Gerrit一个基于web的code review系统。通过Git版本控制系统能方便在线做code reviews。</p>
<p>
	　　1、Checkstyle: 并不只是一个code review 工具，更是一个开发工具确保开发者的代码遵循标准，在每一次code review中节省时间。</p>
<p>
	　　最重要的是，使用Checkstyle能使代码检查成为一个相对简单的任务，你可以把code review 作为日常活动中的一部分而不需要在项目结束的时候才开始，因为那时候项目的交付期限让你的生活一团糟了。</p>
<br /><b>文章分类</b>:敏捷测试]]></description>
</item>
<item>
<link>http://www.ltesting.net/ceshi/news/itdongtai/2012/0515/204873.html</link>
<title><![CDATA[一代人的向往破灭了《暗黑破坏神3》来了又走了！]]></title>
<author>bxmeng</author>
<category>IT动态</category>
<pubDate>Tue, 15 May 2012 10:32:27 +0800</pubDate>
<guid>http://www.ltesting.net/ceshi/news/itdongtai/2012/0515/204873.html</guid>
<description><![CDATA[<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="412" src="/uploads/allimg/120515/09195Q1K-0.jpg" width="550" /></center>
<p>
	　　暴雪终于摆脱了跳票王的称号，《暗黑破坏神3》于2012年5月15日凌晨0点准时上线，全球同步发售的地区包括伟大祖国的宝岛台湾，因此我们大陆玩家也能第一时间玩到官方中文版的暗黑3，虽然语言是繁体中文但相信没有人会看不懂，真是万幸啊!</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="416" src="/uploads/allimg/120515/09195R333-1.jpg" width="550" /></center>
<p>
	　　官方提供的下载地址很慢，不如用BT下载，迅雷离线可以达到满速，应该会很快的。笔者的很多朋友深更半夜才发现《暗黑3》发布了，着急忙慌的要下载地址，先挂上吧一时半会还搞不定，这段时间赶紧注册帐号去吧，不然下载完了也玩不了。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="434" src="/uploads/allimg/120515/09195Q342-2.jpg" width="550" /></center>
<p>
	　　相信之前急于体验《星际争霸2》或《魔兽世界》资料片的玩家们都有台服的战网帐号，比起中国大陆低下的审核效率，台湾总是能够全球同步上线暴雪的精品游戏，而且繁体中文版大家都看得懂。此次《暗黑3》又是台服同步首发，没有台服帐号的赶紧去注册一个吧!注册地址http://tw.battle.net/zh/</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="462" src="/uploads/allimg/120515/09195S4D-3.jpg" width="550" /></center>
<p>
	　　台服帐号注册可能需要填身份证号，如果不想实名的话随便搜一个位数差不多的就行。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="409" src="/uploads/allimg/120515/09195QS6-4.jpg" width="550" /></center>
<p>
	　　使用一个有效的邮箱作为用户名，身份证年龄地区什么的都可以瞎编(但必须符合格式)。所以建议大家还是选中国大陆比较容易一些，当然实名更好以免被盗。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="406" src="/uploads/allimg/120515/09195SP6-5.jpg" width="550" /></center>
<p>
	　　设定一个战网昵称，系统会自动在昵称后面加一串数字，这样人人都可以使用自己喜爱的昵称，战网上加好友组队什么的也比较方便。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="389" src="/uploads/allimg/120515/09195Q412-6.jpg" width="550" /></center>
<p>
	　　暗黑3官方售价1499新台币，折合人民币是320元，暗黑3并非网游不是以点卡形式贩售，购买一次就可以永久性的玩了。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="411" src="/uploads/allimg/120515/09195V3K-7.jpg" width="550" /></center>
<p>
	　　看来黄牛党真的是无孔不入啊，由于涌入台服的玩家实在太多，导致台服电子商城暂停服务，于是囤积居奇的JS们哄抬物价，把暗黑3的战网点数炒到了原来的两倍，让人叹为观止!还好笔者早早就预定了点数，暗黑3一发布就能玩了。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="423" src="/uploads/allimg/120515/09195SE4-8.jpg" width="550" /></center>
<p>
	　　暗黑3官方电子商城地址是：台湾MyCard网站 大家把这个网址保存一下，如果刷新有货的话就买了吧。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="398" src="/uploads/allimg/120515/09195SE6-9.jpg" width="550" /></center>
<p>
	　　如果您既没有国际信用卡也没有支付宝，那还是找朋友帮忙代购吧。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="397" src="/uploads/allimg/120515/09195WK8-10.jpg" width="550" /></center>
<p>
	　　安装暗黑3需要15GB空间，注意合理安排硬盘使用空间，尤其是SSD用户，安装完会自动更新一些文件，然后就可以启动了。</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195Q5D-11.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195Vb6-12.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195WC2-13.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195R591-14.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195R1D-15.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195SU7-16.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195V050-17.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195T351-18.jpg" width="550" />#p#分页标题#e#</center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195R4T-19.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195TW9-20.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195Q123-21.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195QT4-22.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195WP2-23.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195W935-24.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="370" src="/uploads/allimg/120515/09195WT8-25.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195Q121-26.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195R609-27.jpg" width="550" /></center>
<p>
	　　十年磨一剑!暗黑3公测试玩体验 20款显卡10颗CPU![暗黑3]最全面评测</p>
<center>
	<img alt="挤爆台服！暗黑3繁体版正式发布试玩" border="1" height="309" src="/uploads/allimg/120515/09195R5E-28.jpg" width="550" /></center>
<p>
	　　</p>
<p>
	<strong>　　开服夜玩家吐槽&ldquo;315&rdquo;</strong></p>
<p>
	　　暴雪2000年推出的《暗黑破坏神2》被无数玩家奉为经典，然而让外界不曾想到的是，这款游戏的续作《暗黑破坏神3》直到12年后才正式揭开面纱。</p>
<p>
	　　按照计划，这款游戏将于今日在全球正式发售，但由于代理审批等方面的原因，大陆地区的玩家只能再次涌向台服。昨晚23点左右，台服《暗黑破坏神3》开始提供游戏下载安装，不少用户赶在0零点正式开服之前，已经完成客户端的安装。</p>
<p>
	　　网上的微博和相关社区中，关于《暗黑破坏神3》的讨论逐渐热烈，网易收购运营的著名暗黑社区凯恩之角，甚至一度出现无法正常访问的情况。</p>
<p>
	　　最更让玩家着急的是，已经安装好客户端后，迟迟不能进入游戏。有相当数量的用户被各种报错所&ldquo;折磨&rdquo;，常见的有Error_12、Error_3003、Error_24000、灰色的登陆按钮乃至崩溃等等，而最为普遍的是Error_315300，也被简称为315。</p>
<p>
	　　据了解，出现315错误是因为玩家的帐号在暴雪的后台还没有同步完成，出现这种情况只有继续等待。有资深游戏人戏称，恢复正常的速度与&ldquo;人品&rdquo;有关。也有玩家在凯恩之角论坛上吐槽称：恭喜各位玩家获得了&ldquo;315成就&rdquo;。</p>
<p>
	<strong>　　点卡代购价格翻涨3倍多</strong></p>
<p>
	　　与这些进入游戏出现错误，或者异常等待的玩家相比，那些没有拿到激活码(CDKey)的玩家，更是心急如焚。临时抱佛脚的弊端显现无疑。</p>
<p>
	　　对于不在全球发售之列的大陆晚间来说，获得CDKey有几种方式，包括直接从网上预购繁体中文盒装版的激活码，当然卖家是不负责把安装光盘、外盒等其他内容寄送回来;另外还可以通过支付宝等渠道，直接在台湾网站上购买台服点卡。</p>
<p>
	　　实际上至少一个多月前，网上就开始出售《暗黑破坏神3》的台服点卡，那时一套点卡的价格约在200多元，而现在网上已经炒至700多元，有的甚至接近千元。</p>
<p>
	　　而台服点卡充值网站，也长期出现访问缓慢，甚至出现&ldquo;挤爆&rdquo;的情况。</p>
<p>
	　　热情高涨的不止是大陆玩家。来自官方的数据显示，《暗黑破坏神3》已经成为暴雪有史以来预订量最大的游戏;而在线零售商亚马逊发布的信息显示，这款游戏的预订量也已超过暴雪《星际争霸2：自由之翼》及《魔兽世界：大地的裂变》所创下的记录。</p>
<p>
	<strong>　　&ldquo;悲催&rdquo;用户微博晒意外</strong></p>
<p>
	　　在上述各种用户抱怨与期待之外，还有一类《暗黑破坏神3》拥趸这一夜的感受，或许可以用&ldquo;悲催&rdquo;两个字来形容。</p>
<p>
	　　比方著名的《魔兽世界》舅舅党玩家老刀99，昨晚开始一直在微博上直播下载安装《暗黑破坏神3》的过程，然而一切就绪后，他却突然发现他的中国电信网络&ldquo;莫名的断了&rdquo;，而且修复至少需要两个小时。&ldquo;暗黑3今夜注定登不上了，大杯具!&rdquo;老刀99说。</p>
<p>
	<strong>　　还有更离奇的遭遇。</strong></p>
<p>
	　　网友@无染子发微博说：&ldquo;正在安装暗黑3&hellip;&hellip;期间居然有小偷跳进家里的顶层。狗狗拼命吼叫引起我们的注意，马上报警10分钟内赶到，给力!非法入侵的家伙居然说自己是被追赶的，擦，还不如说来偷暗黑3的KEY我还比较相信啊!&rdquo;</p>
<p>
	　　不过似乎也不全是坏消息。还是微博上流传的一张内部邮件截图显示，台湾有家公司的老总决定今天给全员放假一天，用以体恤熬夜玩《暗黑破坏神3》的员工。</p>
<p>
	　　对于很多老玩家而言，被戏称为&ldquo;大菠萝&rdquo;的暗黑(Diablo)系列，与一段过往的记忆有关。在十余年的等待之后，有人因《暗黑破坏神3》彻夜难眠，也有人难掩失望。有位网友总结说：红颜暗与流年换，暗黑蹉跎已枉然。</p>
<br /><b>文章分类</b>:IT动态]]></description>
</item>

</channel>
</rss>

