<?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>Test Facebook &#187; Facebook application</title>
	<atom:link href="http://www.testfacebook.com/tag/facebook-application/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.testfacebook.com</link>
	<description>The community for testing Facebook applications</description>
	<lastBuildDate>Wed, 28 Jul 2010 16:21:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Facebook Testing: Which metric is important?</title>
		<link>http://www.testfacebook.com/2010/05/08/facebook-testing-metrics/</link>
		<comments>http://www.testfacebook.com/2010/05/08/facebook-testing-metrics/#comments</comments>
		<pubDate>Sun, 09 May 2010 02:20:31 +0000</pubDate>
		<dc:creator>Sander Smith</dc:creator>
				<category><![CDATA[General Testing]]></category>
		<category><![CDATA[Load Testing]]></category>
		<category><![CDATA[Facebook application]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.testfacebook.com/?p=231</guid>
		<description><![CDATA[Many people ask us which metric is best to use when performing a load test of a Facebook application. Common wisdom says that Page Load Time (PLT) works for web applications: it&#8217;s easy to calculate, seemingly applicable, and everyone understands what it means. However, it isn&#8217;t so useful in the Facebook world since it contains so much extraneous [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-276" title="fbmetrics" src="http://www.testfacebook.com/blog/wp-content/uploads/2010/05/fbmetrics.jpg" alt="fbmetrics" width="189" height="144" />Many people ask us which metric is best to use when performing a load test of a Facebook application. Common wisdom says that Page Load Time (PLT) works for web applications: it&#8217;s easy to calculate, seemingly applicable, and everyone understands what it means. However, it isn&#8217;t so useful in the Facebook world since it contains so much extraneous information that makes it hard to analyze anything with it.</p>
<h3>Facebook Canvas applications</h3>
<p>To understand why PLT is a bad idea for Canvas applications,  we must go back and understand the Canvas architecture. Users interact with Canvas applications by using a browser connected to the Facebook server which acts as a middleman and requests data from the app. The app may call APIs that interact with the Facebook server, and then ultimately return an FBML file to Facebook which renders it into HTML for return to the users bowser. The problem is that if we only look at PLT by measuring response time at the browser, we have all of this extra stuff being counted in the timing:</p>
<p><img class="aligncenter size-full wp-image-263" title="CanvasApps" src="http://www.testfacebook.com/blog/wp-content/uploads/2010/05/CanvasApps2.jpg" alt="CanvasApps" width="480" height="136" /></p>
<ul>
<li>Network latency between the browser and Facebook</li>
<li>Time required by Facebook to figure out which application must be called, authenticating the request, etc.</li>
<li>Time to render the FBML into HTML</li>
<li>Time spent at the Facebook server servicing API calls</li>
</ul>
<p>These &#8220;extraneous&#8221; functions will take an unpredictable amount of time depending on, among other things, the current load at the Facebook server. This will make it hard, if not impossible, to positively correlate the timings of two different test runs. Since one of the prime motivators of load testing is to see the effects of changes to the code on performance, metrics like these will ultimatly prove to be of little use.</p>
<h3>Facebook Connect applications</h3>
<p>Using PLT for Facebook Connect applications is a little bit better. Users interact with Facebook Connect applications directly, and do not need the Facebook server to act as the middleman. The only extraneous functionality being counted in the timing is the time spent at the Facebook Server responding to API calls. If there are many API calls being made, this will cause a bit of randomness in the metrics.</p>
<h3>Application Response Times</h3>
<p>In contrast to PLT, creating metrics based on the Application Response Time is much more meaningful and useful, although harder to calculate. Application Response Time should calculate the amount of time spent at the application <strong>and only</strong> the time spent at the application. Unfortunately, in contrast to PLT there&#8217;s no simple way to get the Application Response Time &#8211; you&#8217;ll need to do a little bit of work to get at it.</p>
<p>To calculate this, you&#8217;ll need to create a stopwatch function which starts when your application is called, and stops when the application completes the request and returns an FBML file to the caller. In between, the stopwatch needs to be paused when a Facebook API is called. Finally, those of you using PHP as your development platform should check out the microtime() function as it&#8217;s much more accurate than the standard time() function. If your application is able to keep up with all of the bookkeeping, you&#8217;ll have metrics that can accurately show you the effects on application performance from any changes you make.</p>
<p>For those of you who don&#8217;t want to be bothered with keeping track of all of these timing calculations, please note that <a href="http://www.friendrunner.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.friendrunner.com?referer=');">FriendRunner </a>does all of this for you automatically.</p>
<p class="getsocial" style="text-align:left;"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1001.png" alt="" /><a title="Add to Facebook" rel="nofollow" href="http://www.facebook.com/sharer.php?u=http://www.testfacebook.com/2010/05/08/facebook-testing-metrics" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/sharer.php?u=http_//www.testfacebook.com/2010/05/08/facebook-testing-metrics&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1011.png" alt="Add to Facebook" /></a><a title="Add to Digg" rel="nofollow" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.testfacebook.com%2F2010%2F05%2F08%2Ffacebook-testing-metrics&amp;title=Facebook%20Testing%3A%20Which%20metric%20is%20important%3F" target="_blank" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.testfacebook.com_2F2010_2F05_2F08_2Ffacebook-testing-metrics_amp_title=Facebook_20Testing_3A_20Which_20metric_20is_20important_3F&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1021.png" alt="Add to Digg" /></a><a title="Add to Del.icio.us" rel="nofollow" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.testfacebook.com%2F2010%2F05%2F08%2Ffacebook-testing-metrics&amp;title=Facebook%20Testing%3A%20Which%20metric%20is%20important%3F" target="_blank" onclick="pageTracker._trackPageview('/outgoing/del.icio.us/post?url=http_3A_2F_2Fwww.testfacebook.com_2F2010_2F05_2F08_2Ffacebook-testing-metrics_amp_title=Facebook_20Testing_3A_20Which_20metric_20is_20important_3F&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1031.png" alt="Add to Del.icio.us" /></a><a title="Add to Stumbleupon" rel="nofollow" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2010%2F05%2F08%2Ffacebook-testing-metrics&amp;title=Facebook%20Testing%3A%20Which%20metric%20is%20important%3F" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2010_2F05_2F08_2Ffacebook-testing-metrics_amp_title=Facebook_20Testing_3A_20Which_20metric_20is_20important_3F&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1041.png" alt="Add to Stumbleupon" /></a><a title="Add to Reddit" rel="nofollow" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2010%2F05%2F08%2Ffacebook-testing-metrics&amp;title=Facebook%20Testing%3A%20Which%20metric%20is%20important%3F" target="_blank" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2010_2F05_2F08_2Ffacebook-testing-metrics_amp_title=Facebook_20Testing_3A_20Which_20metric_20is_20important_3F&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1051.png" alt="Add to Reddit" /></a><a title="Add to Blinklist" rel="nofollow" href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Description=&amp;Url=http%3A%2F%2Fwww.testfacebook.com%2F2010%2F05%2F08%2Ffacebook-testing-metrics&amp;Title=Facebook%20Testing%3A%20Which%20metric%20is%20important%3F" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.blinklist.com/index.php?Action=Blink/addblink.php_amp_Description=_amp_Url=http_3A_2F_2Fwww.testfacebook.com_2F2010_2F05_2F08_2Ffacebook-testing-metrics_amp_Title=Facebook_20Testing_3A_20Which_20metric_20is_20important_3F&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1061.png" alt="Add to Blinklist" /></a><a title="Add to Twitter" rel="nofollow" href="http://twitter.com/home/?status=Facebook%20Testing%3A%20Which%20metric%20is%20important%3F+%40+http%3A%2F%2Fwww.testfacebook.com%2F2010%2F05%2F08%2Ffacebook-testing-metrics" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home/?status=Facebook_20Testing_3A_20Which_20metric_20is_20important_3F+_40+http_3A_2F_2Fwww.testfacebook.com_2F2010_2F05_2F08_2Ffacebook-testing-metrics&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1071.png" alt="Add to Twitter" /></a><a title="Add to Technorati" rel="nofollow" href="http://www.technorati.com/faves?add=http://www.testfacebook.com/2010/05/08/facebook-testing-metrics" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.technorati.com/faves?add=http_//www.testfacebook.com/2010/05/08/facebook-testing-metrics&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1081.png" alt="Add to Technorati" /></a><a title="Add to Yahoo Buzz" rel="nofollow" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fwww.testfacebook.com%2F2010%2F05%2F08%2Ffacebook-testing-metrics&amp;headline=Facebook%20Testing%3A%20Which%20metric%20is%20important%3F" target="_blank" onclick="pageTracker._trackPageview('/outgoing/buzz.yahoo.com/buzz?targetUrl=http_3A_2F_2Fwww.testfacebook.com_2F2010_2F05_2F08_2Ffacebook-testing-metrics_amp_headline=Facebook_20Testing_3A_20Which_20metric_20is_20important_3F&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1091.png" alt="Add to Yahoo Buzz" /></a><a title="Add to Newsvine" rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http%3A%2F%2Fwww.testfacebook.com%2F2010%2F05%2F08%2Ffacebook-testing-metrics&amp;h=Facebook%20Testing%3A%20Which%20metric%20is%20important%3F" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.newsvine.com/_wine/save?u=http_3A_2F_2Fwww.testfacebook.com_2F2010_2F05_2F08_2Ffacebook-testing-metrics_amp_h=Facebook_20Testing_3A_20Which_20metric_20is_20important_3F&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1101.png" alt="Add to Newsvine" /></a><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1111.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.testfacebook.com/2010/05/08/facebook-testing-metrics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The new Facebook Graph API</title>
		<link>http://www.testfacebook.com/2010/04/21/the-graph-api/</link>
		<comments>http://www.testfacebook.com/2010/04/21/the-graph-api/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 23:15:03 +0000</pubDate>
		<dc:creator>Sander Smith</dc:creator>
				<category><![CDATA[Application development]]></category>
		<category><![CDATA[Facebook application]]></category>

		<guid isPermaLink="false">http://www.testfacebook.com/?p=210</guid>
		<description><![CDATA[I&#8217;ve been listening very closely to the sessions at f8, and you know what? No location API. I&#8217;m not sure why, perhaps it will get released later. So what did we get instead?
The Graph API.
Very very cool. You need to read up on this, it changes the way that Facebook development happens from here on [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-215" title="Wheres_the_beef_commercial" src="http://www.testfacebook.com/blog/wp-content/uploads/2010/04/Wheres_the_beef_commercial2.jpg" alt="Wheres_the_beef_commercial" width="155" height="149" />I&#8217;ve been listening very closely to the sessions at f8, and you know what? No location API. I&#8217;m not sure why, perhaps it will get released later. So what did we get instead?</p>
<p><a href="http://developers.facebook.com/docs/api" onclick="pageTracker._trackPageview('/outgoing/developers.facebook.com/docs/api?referer=');">The Graph API</a>.</p>
<p>Very very cool. You need to read up on this, it changes the way that Facebook development happens from here on in. You no longer need to read a whole PHP API. You don&#8217;t even need PHP! Everything is based around RESTful APIs, so your favorite language + curl (or just use Java where everything is already included!) is all you&#8217;ll need to be a Facebook developer.</p>
<p>The old API will still work, as will FBML, FQL, etc. However any new development should be done in the new style API, it will be much easier.</p>
<p>Check it out &#8211; you&#8217;ll like it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testfacebook.com/2010/04/21/the-graph-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why is an Application Secret secret? (Part 1)</title>
		<link>http://www.testfacebook.com/2010/02/23/why-is-an-application-secret-secret-part-1/</link>
		<comments>http://www.testfacebook.com/2010/02/23/why-is-an-application-secret-secret-part-1/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 22:02:08 +0000</pubDate>
		<dc:creator>Sander Smith</dc:creator>
				<category><![CDATA[Application development]]></category>
		<category><![CDATA[Facebook application]]></category>

		<guid isPermaLink="false">http://www.testfacebook.com/?p=153</guid>
		<description><![CDATA[Facebook Application Secrets, along with API Keys, are familiar to Facebook developers &#8211; we copy them into our source code so that our apps can connect to the Facebook servers, but do you know their role in the Facebok platform, and how they work?
What&#8217;s an Application Secret for?
The Application Secret has two main purposes:

Mutual authentication between the Facebook servers and your application
Ensuring the integrity [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-186" title="Secret" src="http://www.testfacebook.com/blog/wp-content/uploads/2010/02/Secret.jpg" alt="Secret" width="226" height="223" />Facebook Application Secrets, along with API Keys, are familiar to Facebook developers &#8211; we copy them into our source code so that our apps can connect to the Facebook servers, but do you know their role in the Facebok platform, and how they work?</p>
<h3>What&#8217;s an Application Secret for?</h3>
<p>The Application Secret has two main purposes:</p>
<ul>
<li>Mutual authentication between the Facebook servers and your application</li>
<li>Ensuring the integrity of the data passed between them</li>
</ul>
<p>These benefits look a lot like the benefits of using SSL, although SSL adds the additional benefit of data encryption. And yes, SSL is typically authenticated only one way (server to client), but client-side certificates allow that authentication to be mutual. If you&#8217;re a little shaky remembering what SSL is all about, you can refresh yourself <a href="http://www.sericontech.com/Downloads/Introduction_to_SSL.pdf" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.sericontech.com/Downloads/Introduction_to_SSL.pdf?referer=');">here</a>.</p>
<p>So why did Facebook engineers choose not to simply use SSL to communicate with applications? Why did they instead create a rather baroque system that relies on Application Secrets?</p>
<h3>Why is authentication important?</h3>
<p>Clearly, ensuring that any passed data has provable fidelity is very important. But why do we authenticate? Who would try to impersonate the Facebook servers or an application? Let&#8217;s take a look at the reasons to authenticate in each direction, and we&#8217;ll see why it&#8217;s so important.</p>
<h5>Authenticating the Facebook Server to the Application</h5>
<p>There&#8217;s very little value for a hacker to try to convince your application that his server is a part of the authentic Facebook infrastructure. In fact, the only reasonable attack is a Denial-of-Service attack to try to shut your application down (from perhaps a competitive application). If a hacker  who learns the URL of your Canvas application (i.e. the Canvas Callback URL) pretends to be the Facebook server, he could launch loads of requests to your application until it becomes saturated and crashes. Of course, your app can detect this because only the real Facebook server can authenticate itself to your application with your Application Secret.</p>
<p>Aside from this, it&#8217;s hard to imagine why anyone would launch an attack pretending to be a Facebook server. Perhaps hackers are more creative and will come up with reasons to do this, but they won&#8217;t get past the authentication stage.</p>
<h5>Authenticating the Application to Facebook</h5>
<p>In contrast, there are many reasons  that a hacker can try to impersonate a popular Facebook application. Without authentication, the hacker can easily run a man-in-the-middle attack by positioning his application between the Facebook servers and the authentic application. Then the hacker can alter any data that the application creates that is destined for the application user&#8217;s browser. If the attack and data is malicious, this can damage the user&#8217;s computer, as well as the application developer&#8217;s reputation if the modified data displeases the application user. Of course, since all the mischief goes on behind the scenes, disconnected from the user&#8217;s browser, there&#8217;s no simple way for him to know that anything has gone wrong.</p>
<p>Additionally, without authentication, a masquarading application could asynchronously query the Facebook server to get all of the private information that a user has shared with the application. The user opts in to share this information with a known and trusted application &#8211; he doesn&#8217;t expect it to be available to some hacker who gets it by devious means.</p>
<p>So keeping your Application Secret secret is pretty important. Important enough that Facebook forbids you to share it (Section 3.7 of the <a href="http://developers.facebook.com/policy/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/developers.facebook.com/policy/?referer=');">Developer Policies</a>). In our next installment, we&#8217;ll discuss the dangers of Application Secrets, and how hackers can attempt to get yours.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testfacebook.com/2010/02/23/why-is-an-application-secret-secret-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook Application Verification Program: We Hardly Knew Ya</title>
		<link>http://www.testfacebook.com/2009/12/01/facebook-avp-hardly-knew-ya/</link>
		<comments>http://www.testfacebook.com/2009/12/01/facebook-avp-hardly-knew-ya/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 21:36:29 +0000</pubDate>
		<dc:creator>Sander Smith</dc:creator>
				<category><![CDATA[General Testing]]></category>
		<category><![CDATA[Facebook application]]></category>

		<guid isPermaLink="false">http://www.testfacebook.com/?p=17</guid>
		<description><![CDATA[Today marks the deprecation of the Application Verification Program  (AVP) as announced during the big Platform Roadmap announcement back in October. Why is Facebook doing this, and what does this mean to developers and testers. Let&#8217;s have a look:
The AVP was announced a year ago as a way for developers to differentiate their apps. Verification [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_84" class="wp-caption alignright" style="width: 220px"><img class="size-medium wp-image-84 " title="HelloGoodbye" src="http://www.testfacebook.com/blog/wp-content/uploads/2009/12/HelloGoodbye-300x293.jpg" alt="Hello Goodbye" width="210" height="205" /><p class="wp-caption-text">Hello Goodbye</p></div>
<p>Today marks the deprecation of the <a href="http://wiki.developers.facebook.com/index.php/Verification" target="_blank" onclick="pageTracker._trackPageview('/outgoing/wiki.developers.facebook.com/index.php/Verification?referer=');">Application Verification Program </a> (AVP) as announced during the big Platform Roadmap announcement back in October. Why is Facebook doing this, and what does this mean to developers and testers. Let&#8217;s have a look:</p>
<p>The AVP was announced a year ago as a way for developers to differentiate their apps. Verification was supposed to show that the apps met a set of criteria to reassure users that the apps provided a good user experience. The theory was that users would flock to these verified apps, Facebook would feel comfortable that these apps provided a consistent user experience, and developers would be rewarded for playing according to the rules with things like prominent placement in the app directory and an increase on notification allocations. So why was this program axed less than a year after announcement? The truth is, it didn&#8217;t work as well as planned. When the first wave of verified apps became available in May 2009, <a href="http://www.pcworld.com/businesscenter/article/165367/bugs_hit_facebook_application_verification_program.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.pcworld.com/businesscenter/article/165367/bugs_hit_facebook_application_verification_program.html?referer=');">bugs</a> prevented some of the promised developer benefits from actually working (e.g. the special green checkmark to denote a verified app did not always show up). Developers also weren&#8217;t thrilled with the $375 price that Facebook charged to verify their app, something that really hurt small developers. And finally, did any users really care whether the apps they were using were verified or not, and moreover, did they recognize when they were?</p>
<p>And so today, this program is being put to rest. But that doesn&#8217;t mean Facebook is giving up on consistent user experience. They&#8217;ve simply taken the criteria from the AVP, strengthened them, and reinvented them as the <a href="http://developers.facebook.com/policy" target="_blank" onclick="pageTracker._trackPageview('/outgoing/developers.facebook.com/policy?referer=');">Developer Principles and Policies </a>. This is not a voluntary program as the AVP was, everyone is supposed to live by these rules. Facebook is reserving the right to censure or cut off developers who don&#8217;t. We don&#8217;t know the circumstances under which Facebook will do an audit of an application, but one thing is for sure &#8211; it won&#8217;t be so easy for them.</p>
<p>Understanding why auditing for consistent user experience isn&#8217;t easy gets to the central issue that Facebook is trying to solve. Consistent user experience is important. Those of us old enough to remember that awkward time between command line DOS and the advent of Windows will remember the many applications that provided quasi-GUI interfaces on top of a DOS base. None of these applications looked or felt like any other, which made the process of learning to use one long and tedious. Say what you will about Microsoft, but they did users a great service by providing a Framework for consistency with Windows (okay, borrowed from Apple, borrowed from Xerox). Contrast this with my 8-year old son&#8217;s Super Mario games which he plays expertly on 3 different platforms with different sets of controls. Not only does he not read a manual, but mocks the idea that a manual even exists. This is the epitome of consistent user experience that Facebook would like all Platform apps to have.</p>
<p>The trouble is, consistency for Facebook apps is elusive. After all, they&#8217;re really just web apps, and developers can do pretty much anything they like (a la the pre-Windows GUI days). To compound problems, an application audited today may change how it works tomorrow. Even if the application code doesn&#8217;t explicitly change, any changes to its software stack (e.g. the libraries it uses, the application server, the operating system) may alter the way it works.</p>
<h3>Developer Principles and Policies: How to stay on Facebook&#8217;s good side</h3>
<p>Facebook breaks down proper application behavior into two Principles: <strong>Be trustworthy</strong>, and <strong>Create a great user experience</strong>. These principles are expanded into ten policies that Facebook says it will enforce. Upon reading the policies, you&#8217;ll find that most of them fall into the <strong>Be trustworthy</strong> category, or as I like to think about it, the &#8220;Don&#8217;t be a jerk category&#8221;. Most of these rules are simply an extension of civilized behavior for any application: Don&#8217;t misuse people&#8217;s information. Don&#8217;t SPAM the network. Don&#8217;t engage in illegal activity. Respect copyright. &#8230; and lots more. Facebook unfortunately has to list all of these things since when it shuts someone down who engages in one, they&#8217;ll need to point to the policy that was violated. <strong>Be trustworthy</strong> is a necessary evil that Facebook must delineate, and spend lots of time, effort, and money to police. After all, hate speech is really subjective, and cannot be determined through automated processes. It requires real people to make that determination.</p>
<p>On the other hand, <strong>Create a great user experience</strong> is a much more positive set of policies, mainly focused on Application Integration Points and Application Responses to User Actions. Whereas Windows codified consistent behavior like where the &#8220;File&#8221; menu was (and what the typical submenus should be) these policies outline the types of things a user should expect (or better yet, not expect) when using your application. Reading the list, one can remember various apps that used some of the techniques outlined before they were outlawed, and the user backlash that they caused. Some of the policies are:</p>
<ul>
<li><em>You must not prompt users to send invitations, requests, generate notifications, or use other Facebook communication channels immediately after a user allows access or returns to your application.</em></li>
</ul>
<p style="padding-left: 30px;">Invitations or notifications should really only be used once you use and like an application. This is a good policy since it spares your friends the application SPAM that was once common. This also signals to users who receive such invitations that their friends who sent it probably really do like the application and there may be some merit in trying it out themselves.</p>
<ul>
<li><em>You must only use one Facebook communication channel in response to a user&#8217;s single action.</em></li>
</ul>
<p style="padding-left: 30px;">When a user clicks on some choice that will generate some action, that user should not be surprised when additional actions are also generated.</p>
<ul>
<li><em>You must not prompt users to bookmark your application (e.g., by using a modal window or pop-up dialog). Instead, users must explicitly invoke any bookmark option you provide.</em></li>
</ul>
<p style="padding-left: 30px;">Nothing is worse than a modal dialog that forces you to take some action that you don&#8217;t necessarily agree with, but you must do because hey, it&#8217;s modal. Sure, you can go back and delete it, but this policy puts to rest this kind of nonsense that some applications used to pull.</p>
<ul>
<li><em>You must use discretion when publishing Stream stories and must not misuse the Stream by publishing an excessive amount of stories on a user&#8217;s behalf.</em></li>
</ul>
<p style="padding-left: 30px;">Forcing your friends to confront too much information about you and some application isn&#8217;t nice. Having an application use some discretion is good.</p>
<ul>
<li><em>Stream stories must be consistent with our design and be user-focused based on the user&#8217;s action that triggered the story. In no case should a Stream story serve primarily as a means to promote or advertise your application.</em></li>
</ul>
<p style="padding-left: 30px;">Time was when any sort of notification was simply an advertisement to your friends to come and check out this cool application. Well, maybe things stayed the same, but don&#8217;t be so blatant about it.</p>
<p>Going through the entire list, we begin to notice a common theme. Application consistency in the Facebook world is not about where the &#8220;File&#8221; menu is, it&#8217;s about the behavior of the application when dealing with the generation of privately and publically available information. But what it&#8217;s REALLY about is trying to ensure that you don&#8217;t look stupid in front of your friends (probably one of the greatest fears out there). It&#8217;s about allaying your fears to try out an application, lest that application begins to SPAM your friends who will get annoyed at you. Once we can all try out any application without worrying that bad things will happen, we all (especially Facebook) win.</p>
<p>One other interesting aspect of application consistency is that many of the rules of this principle can be tested in an automated way. Does Facebook have a way to do this automatically, it would sure save them a lot of legwork. How about your development organization? Would an automated tool to test compliance with Developer Principles be of use to you? Leave a comment and let us know!</p>
<p class="getsocial" style="text-align:left;"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1001.png" alt="" /><a title="Add to Facebook" rel="nofollow" href="http://www.facebook.com/sharer.php?u=http://www.testfacebook.com/2009/12/01/facebook-avp-hardly-knew-ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/sharer.php?u=http_//www.testfacebook.com/2009/12/01/facebook-avp-hardly-knew-ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1011.png" alt="Add to Facebook" /></a><a title="Add to Digg" rel="nofollow" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F12%2F01%2Ffacebook-avp-hardly-knew-ya&amp;title=Facebook%20Application%20Verification%20Program%3A%20We%20Hardly%20Knew%20Ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F12_2F01_2Ffacebook-avp-hardly-knew-ya_amp_title=Facebook_20Application_20Verification_20Program_3A_20We_20Hardly_20Knew_20Ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1021.png" alt="Add to Digg" /></a><a title="Add to Del.icio.us" rel="nofollow" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F12%2F01%2Ffacebook-avp-hardly-knew-ya&amp;title=Facebook%20Application%20Verification%20Program%3A%20We%20Hardly%20Knew%20Ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/del.icio.us/post?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F12_2F01_2Ffacebook-avp-hardly-knew-ya_amp_title=Facebook_20Application_20Verification_20Program_3A_20We_20Hardly_20Knew_20Ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1031.png" alt="Add to Del.icio.us" /></a><a title="Add to Stumbleupon" rel="nofollow" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F12%2F01%2Ffacebook-avp-hardly-knew-ya&amp;title=Facebook%20Application%20Verification%20Program%3A%20We%20Hardly%20Knew%20Ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F12_2F01_2Ffacebook-avp-hardly-knew-ya_amp_title=Facebook_20Application_20Verification_20Program_3A_20We_20Hardly_20Knew_20Ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1041.png" alt="Add to Stumbleupon" /></a><a title="Add to Reddit" rel="nofollow" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F12%2F01%2Ffacebook-avp-hardly-knew-ya&amp;title=Facebook%20Application%20Verification%20Program%3A%20We%20Hardly%20Knew%20Ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F12_2F01_2Ffacebook-avp-hardly-knew-ya_amp_title=Facebook_20Application_20Verification_20Program_3A_20We_20Hardly_20Knew_20Ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1051.png" alt="Add to Reddit" /></a><a title="Add to Blinklist" rel="nofollow" href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Description=&amp;Url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F12%2F01%2Ffacebook-avp-hardly-knew-ya&amp;Title=Facebook%20Application%20Verification%20Program%3A%20We%20Hardly%20Knew%20Ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.blinklist.com/index.php?Action=Blink/addblink.php_amp_Description=_amp_Url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F12_2F01_2Ffacebook-avp-hardly-knew-ya_amp_Title=Facebook_20Application_20Verification_20Program_3A_20We_20Hardly_20Knew_20Ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1061.png" alt="Add to Blinklist" /></a><a title="Add to Twitter" rel="nofollow" href="http://twitter.com/home/?status=Facebook%20Application%20Verification%20Program%3A%20We%20Hardly%20Knew%20Ya+%40+http%3A%2F%2Fwww.testfacebook.com%2F2009%2F12%2F01%2Ffacebook-avp-hardly-knew-ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home/?status=Facebook_20Application_20Verification_20Program_3A_20We_20Hardly_20Knew_20Ya+_40+http_3A_2F_2Fwww.testfacebook.com_2F2009_2F12_2F01_2Ffacebook-avp-hardly-knew-ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1071.png" alt="Add to Twitter" /></a><a title="Add to Technorati" rel="nofollow" href="http://www.technorati.com/faves?add=http://www.testfacebook.com/2009/12/01/facebook-avp-hardly-knew-ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.technorati.com/faves?add=http_//www.testfacebook.com/2009/12/01/facebook-avp-hardly-knew-ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1081.png" alt="Add to Technorati" /></a><a title="Add to Yahoo Buzz" rel="nofollow" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F12%2F01%2Ffacebook-avp-hardly-knew-ya&amp;headline=Facebook%20Application%20Verification%20Program%3A%20We%20Hardly%20Knew%20Ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/buzz.yahoo.com/buzz?targetUrl=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F12_2F01_2Ffacebook-avp-hardly-knew-ya_amp_headline=Facebook_20Application_20Verification_20Program_3A_20We_20Hardly_20Knew_20Ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1091.png" alt="Add to Yahoo Buzz" /></a><a title="Add to Newsvine" rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F12%2F01%2Ffacebook-avp-hardly-knew-ya&amp;h=Facebook%20Application%20Verification%20Program%3A%20We%20Hardly%20Knew%20Ya" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.newsvine.com/_wine/save?u=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F12_2F01_2Ffacebook-avp-hardly-knew-ya_amp_h=Facebook_20Application_20Verification_20Program_3A_20We_20Hardly_20Knew_20Ya&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1101.png" alt="Add to Newsvine" /></a><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1111.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.testfacebook.com/2009/12/01/facebook-avp-hardly-knew-ya/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Load testing Facebook apps (Part 2)</title>
		<link>http://www.testfacebook.com/2009/11/10/load-testing-facebook-apps-part-2/</link>
		<comments>http://www.testfacebook.com/2009/11/10/load-testing-facebook-apps-part-2/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 15:39:13 +0000</pubDate>
		<dc:creator>Sander Smith</dc:creator>
				<category><![CDATA[Load Testing]]></category>
		<category><![CDATA[Facebook application]]></category>

		<guid isPermaLink="false">http://www.testfacebook.com/?p=15</guid>
		<description><![CDATA[In Part 1 of this article, we discussed that one of the reasons load testing Facebook apps was difficult was because Facebook prohibits the use of automated tools. An obvious question is &#8220;Why does Facebook do this?&#8221;.
The simple answer: It protects you, the developer
Think for a moment what would happen if Facebook did not prohibit the use of automated [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://www.testfacebook.com/2009/11/01/load-testing-facebook-apps-part-1/" target="_blank">Part 1 of this article</a>, we discussed that one of the reasons load testing Facebook apps was difficult was because Facebook prohibits the use of automated tools. An obvious question is &#8220;Why does Facebook do this?&#8221;.</p>
<h3>The simple answer: It protects you, the developer</h3>
<p>Think for a moment what would happen if Facebook did not prohibit the use of automated tools to access their servers. Well for one, we&#8217;d be able to easily carry out load tests of our applications. This is good and builds value for your application as well as indirectly building value for the entire Facebook Platform.</p>
<p>However, it also opens up a world of possibilities to the vast armies of hackers and spammers who&#8217;d use this to their advantage. What could they do? Let&#8217;s think:</p>
<ul>
<li>They could launch Denial-of-Service attacks and crash your servers. Does your application have competition? Would your competition benefit if your (obviously superior) app was seen as unstable? Let the attacks begin!</li>
<li>Mischief. Facebook is now viewed as a prime target for all sorts of miscreants. Hardly a week goes by that we don&#8217;t hear about another type of attack launched at Facebook users, applications, or Facebook itself. Of course the methods by which most attacks are typically launched is by the use of automation.</li>
<li>Building up your own numbers. Actually not really attack &#8211; you could use a botnet to artificially inflate your own active user numbers. MAUs are used for a variety of reasons (which all ultimately relate to money). If MAU counts also included MAARs (Monthly Active Automated Robots), then all counts become meaningless. the entire system unwinds, and everyone loses.</li>
</ul>
<p>So let&#8217;s say that as a good developer you&#8217;d like to protect your application against a Denial-of-Service attack. You install an Intrusion Detection System, but wait - this won&#8217;t work in a Facebook environment! Remember that the Facebook Platform architecture is built so that all of the user traffic coming into your application is funneled through one place &#8211; the Facebook servers. Any attempts you make to try to distinguish good access from bad access will be foiled by the fact that the bad guys are on the other side of the Facebook servers from you. Your app has no way to distinguish good users from botnet users, it must rely on Facebook to do it for you. This simply pushes the detection of good vs. bad access out to the Facebook servers, so we can ask: &#8220;How can Facebook detect a DOS attack on my app?&#8221;</p>
<p>Facebook avoids Denial-of-Service attacks by using the same techniques as any other web site. This, of course, will preclude you from running an automated load test since it will simply look like a very basic (not even distributed) Denial-of-Service attack. Instead of trying to distinguish the good load tests from the bad attacks, Facebook simply says &#8220;Do not access our servers with automated tools or we&#8217;ll cut you off&#8221;. They aren&#8217;t trying to stifle our ability to get things done, but rather, they&#8217;re protecting us from a whole lot of other pain.</p>
<p>In the next part of this article, we&#8217;ll discuss some ideas that can be used to load test your Facebook app.</p>
<p class="getsocial" style="text-align:left;"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1005.png" alt="" /><a title="Add to Facebook" rel="nofollow" href="http://www.facebook.com/sharer.php?u=http://www.testfacebook.com/2009/11/10/load-testing-facebook-apps-part-2" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/sharer.php?u=http_//www.testfacebook.com/2009/11/10/load-testing-facebook-apps-part-2&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1015.png" alt="Add to Facebook" /></a><a title="Add to Digg" rel="nofollow" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F10%2Fload-testing-facebook-apps-part-2&amp;title=Load%20testing%20Facebook%20apps%20(Part%202)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F10_2Fload-testing-facebook-apps-part-2_amp_title=Load_20testing_20Facebook_20apps_20_Part_202&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1025.png" alt="Add to Digg" /></a><a title="Add to Del.icio.us" rel="nofollow" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F10%2Fload-testing-facebook-apps-part-2&amp;title=Load%20testing%20Facebook%20apps%20(Part%202)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/del.icio.us/post?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F10_2Fload-testing-facebook-apps-part-2_amp_title=Load_20testing_20Facebook_20apps_20_Part_202&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1035.png" alt="Add to Del.icio.us" /></a><a title="Add to Stumbleupon" rel="nofollow" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F10%2Fload-testing-facebook-apps-part-2&amp;title=Load%20testing%20Facebook%20apps%20(Part%202)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F10_2Fload-testing-facebook-apps-part-2_amp_title=Load_20testing_20Facebook_20apps_20_Part_202&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1045.png" alt="Add to Stumbleupon" /></a><a title="Add to Reddit" rel="nofollow" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F10%2Fload-testing-facebook-apps-part-2&amp;title=Load%20testing%20Facebook%20apps%20(Part%202)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F10_2Fload-testing-facebook-apps-part-2_amp_title=Load_20testing_20Facebook_20apps_20_Part_202&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1055.png" alt="Add to Reddit" /></a><a title="Add to Blinklist" rel="nofollow" href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Description=&amp;Url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F10%2Fload-testing-facebook-apps-part-2&amp;Title=Load%20testing%20Facebook%20apps%20(Part%202)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.blinklist.com/index.php?Action=Blink/addblink.php_amp_Description=_amp_Url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F10_2Fload-testing-facebook-apps-part-2_amp_Title=Load_20testing_20Facebook_20apps_20_Part_202&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1065.png" alt="Add to Blinklist" /></a><a title="Add to Twitter" rel="nofollow" href="http://twitter.com/home/?status=Load%20testing%20Facebook%20apps%20(Part%202)+%40+http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F10%2Fload-testing-facebook-apps-part-2" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home/?status=Load_20testing_20Facebook_20apps_20_Part_202_+_40+http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F10_2Fload-testing-facebook-apps-part-2&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1075.png" alt="Add to Twitter" /></a><a title="Add to Technorati" rel="nofollow" href="http://www.technorati.com/faves?add=http://www.testfacebook.com/2009/11/10/load-testing-facebook-apps-part-2" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.technorati.com/faves?add=http_//www.testfacebook.com/2009/11/10/load-testing-facebook-apps-part-2&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1085.png" alt="Add to Technorati" /></a><a title="Add to Yahoo Buzz" rel="nofollow" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F10%2Fload-testing-facebook-apps-part-2&amp;headline=Load%20testing%20Facebook%20apps%20(Part%202)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/buzz.yahoo.com/buzz?targetUrl=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F10_2Fload-testing-facebook-apps-part-2_amp_headline=Load_20testing_20Facebook_20apps_20_Part_202&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1095.png" alt="Add to Yahoo Buzz" /></a><a title="Add to Newsvine" rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F10%2Fload-testing-facebook-apps-part-2&amp;h=Load%20testing%20Facebook%20apps%20(Part%202)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.newsvine.com/_wine/save?u=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F10_2Fload-testing-facebook-apps-part-2_amp_h=Load_20testing_20Facebook_20apps_20_Part_202&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1105.png" alt="Add to Newsvine" /></a><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1115.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.testfacebook.com/2009/11/10/load-testing-facebook-apps-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Load testing Facebook apps (Part 1)</title>
		<link>http://www.testfacebook.com/2009/11/01/load-testing-facebook-apps-part-1/</link>
		<comments>http://www.testfacebook.com/2009/11/01/load-testing-facebook-apps-part-1/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 02:52:55 +0000</pubDate>
		<dc:creator>Sander Smith</dc:creator>
				<category><![CDATA[Load Testing]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Facebook application]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.testfacebook.com/?p=13</guid>
		<description><![CDATA[
Load testing Facebook applications is really important. Usually the whole point of deploying onto Facebook is to leverage the social graph and go viral. Developers want their applications to go viral, but there&#8217;s a nagging concern about what will happen if they do. Is the app as scalable as you think? Are the hosting choices correct? What&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<div class="mceTemp mceIEcenter" style="text-align:left;">
<div id="attachment_34" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-34" title="ch861126" src="http://www.testfacebook.com/blog/wp-content/uploads/2009/11/ch8611262.gif" alt="Calvin's dad on load testing" width="500" height="158" /><p class="wp-caption-text">Calvin&#39;s dad on load testing</p></div>
<p style="text-align: left;">Load testing Facebook applications is really important. Usually the whole point of deploying onto Facebook is to leverage the social graph and go viral. Developers <em><strong>want</strong></em> their applications to go viral, but there&#8217;s a nagging concern about what will happen if they do. Is the app as scalable as you think? Are the hosting choices correct? What&#8217;s the cost of deploying and crashing?</p>
<p style="text-align: left;"><img class="aligncenter size-full wp-image-30" title="devdream" src="http://www.testfacebook.com/blog/wp-content/uploads/2009/11/devdream2.jpg" alt="devdream" width="500" height="314" /></p>
<p class="mceTemp mceIEcenter" style="text-align:left;">The way to alleviate these concerns is to load test your app, but how do you do that in a Facebook environment? The simple answer is that it&#8217;s very hard due to two issues central to Facebook:</p>
<h3>Issue1: You must control enough Facebook users</h3>
<p>Testing your application with one or two simultaneous users is easy: simply use your own Facebook account and call up some friends and have them do the same. But running a test with hundreds or even thousands of simultaneous users is much more difficult. Where do you get the users from? That answer isn&#8217;t so simple. You can say &#8220;I&#8217;ll just go into Facebook and define a few hundred &#8216;phony&#8217; people that I can control&#8221;. While this may seem like a good idea, it isn&#8217;t:</p>
<ul>
<li>It violates the Facebook <a href="http://www.facebook.com/terms.php?ref=pf" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/terms.php?ref=pf&amp;referer=');">Terms of Use </a>(section 4.1) which prohibits you from creating phony accounts. When Facebook finds your phony account, they will delete it.</li>
<li>Real users have friends, become fans of pages, post updates, and hundreds of other things that Facebook allows you to do. This creates the richness of the social graph, and applications often need to take these things into account. Unless you&#8217;re willing to spend an inordinate amount of time &#8220;humanizing&#8221; your phony user army, your tests with them will not be realistic.</li>
<li>While Facebook does provide the concept of a <a href="http://wiki.developers.facebook.com/index.php?title=Test_Accounts" target="_blank" onclick="pageTracker._trackPageview('/outgoing/wiki.developers.facebook.com/index.php?title=Test_Accounts&amp;referer=');">Test Account</a> to developers to test with, these accounts are very limited in what they can do so are not of very much use for load testing.</li>
</ul>
<h3>Issue 2: Load testing must be automated</h3>
<p>Load testing web applications is hard. Traditionally, to test an application you&#8217;d deploy it into a &#8220;staging area&#8221; and then simulate many people using it with a tool such as HP&#8217;s <a href="https://h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto&amp;cp=1-11-126-17%5E8_4000_100__" target="_blank" onclick="pageTracker._trackPageview('/outgoing/h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto_amp_cp=1-11-126-17_5E8_4000_100&amp;referer=');">LoadRunner</a> or a cloud-based solution such as <a href="http://browsermob.com/performance-testing" target="_blank" onclick="pageTracker._trackPageview('/outgoing/browsermob.com/performance-testing?referer=');">BrowserMob</a>.</p>
<p>Load testing by it&#8217;s very nature must be an automated process. But this is a problem since Facebook applications must be accessed through the Facebook servers (for API support, FBML-to-HTML rendering, etc.)</p>
<p> </p>
<div id="attachment_35" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-35" title="traditional load testing" src="http://www.testfacebook.com/blog/wp-content/uploads/2009/11/traditional-load-testing.jpg" alt="Load testing the traditional way" width="500" height="184" /><p class="wp-caption-text">Load testing the traditional way</p></div>
<p>This is a problem because it violates Facebook&#8217;s <a href="http://www.facebook.com/terms.php?ref=pf" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/terms.php?ref=pf&amp;referer=');">Terms of Use </a>(section 3.2) which prohibits the use of accessing the Facebook servers with automated tools. This will force us to rethink our Facebook application load testing strategy.</p>
<p>In Part 2 of article, we&#8217;ll discuss why Facebook has a prohibition against automated tools, and why that is ultimately good for you, the developer.</p>
<p class="getsocial" style="text-align:left;"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1002.png" alt="" /><a title="Add to Facebook" rel="nofollow" href="http://www.facebook.com/sharer.php?u=http://www.testfacebook.com/2009/11/01/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/sharer.php?u=http_//www.testfacebook.com/2009/11/01/&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1012.png" alt="Add to Facebook" /></a><a title="Add to Digg" rel="nofollow" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F01%2F&amp;title=Load%20testing%20Facebook%20apps%20(Part%201)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F01_2F_amp_title=Load_20testing_20Facebook_20apps_20_Part_201&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1022.png" alt="Add to Digg" /></a><a title="Add to Del.icio.us" rel="nofollow" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F01%2F&amp;title=Load%20testing%20Facebook%20apps%20(Part%201)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/del.icio.us/post?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F01_2F_amp_title=Load_20testing_20Facebook_20apps_20_Part_201&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1032.png" alt="Add to Del.icio.us" /></a><a title="Add to Stumbleupon" rel="nofollow" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F01%2F&amp;title=Load%20testing%20Facebook%20apps%20(Part%201)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F01_2F_amp_title=Load_20testing_20Facebook_20apps_20_Part_201&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1042.png" alt="Add to Stumbleupon" /></a><a title="Add to Reddit" rel="nofollow" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F01%2F&amp;title=Load%20testing%20Facebook%20apps%20(Part%201)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F01_2F_amp_title=Load_20testing_20Facebook_20apps_20_Part_201&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1052.png" alt="Add to Reddit" /></a><a title="Add to Blinklist" rel="nofollow" href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Description=&amp;Url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F01%2F&amp;Title=Load%20testing%20Facebook%20apps%20(Part%201)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.blinklist.com/index.php?Action=Blink/addblink.php_amp_Description=_amp_Url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F01_2F_amp_Title=Load_20testing_20Facebook_20apps_20_Part_201&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1062.png" alt="Add to Blinklist" /></a><a title="Add to Twitter" rel="nofollow" href="http://twitter.com/home/?status=Load%20testing%20Facebook%20apps%20(Part%201)+%40+http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F01%2F" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home/?status=Load_20testing_20Facebook_20apps_20_Part_201_+_40+http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F01_2F&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1072.png" alt="Add to Twitter" /></a><a title="Add to Technorati" rel="nofollow" href="http://www.technorati.com/faves?add=http://www.testfacebook.com/2009/11/01/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.technorati.com/faves?add=http_//www.testfacebook.com/2009/11/01/&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1082.png" alt="Add to Technorati" /></a><a title="Add to Yahoo Buzz" rel="nofollow" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F01%2F&amp;headline=Load%20testing%20Facebook%20apps%20(Part%201)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/buzz.yahoo.com/buzz?targetUrl=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F01_2F_amp_headline=Load_20testing_20Facebook_20apps_20_Part_201&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1092.png" alt="Add to Yahoo Buzz" /></a><a title="Add to Newsvine" rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F11%2F01%2F&amp;h=Load%20testing%20Facebook%20apps%20(Part%201)" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.newsvine.com/_wine/save?u=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F11_2F01_2F_amp_h=Load_20testing_20Facebook_20apps_20_Part_201&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1102.png" alt="Add to Newsvine" /></a><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1112.png" alt="" /></p>
<p> </p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.testfacebook.com/2009/11/01/load-testing-facebook-apps-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Welcome to Test Facebook</title>
		<link>http://www.testfacebook.com/2009/10/31/welcome-to-test-facebook/</link>
		<comments>http://www.testfacebook.com/2009/10/31/welcome-to-test-facebook/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 03:20:04 +0000</pubDate>
		<dc:creator>Sander Smith</dc:creator>
				<category><![CDATA[General Testing]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Facebook application]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.testfacebook.com/?p=3</guid>
		<description><![CDATA[Welcome to Test Facebook, a resource for Facebook application developers who are interested in testing their apps.
You may be wondering&#8230; since Facebook apps are Web apps, why do I need a special place to discuss testing them? Can&#8217;t I apply the same tools and techniques for developing and testing web apps to my Facebook apps?
Well, [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome to Test Facebook, a resource for Facebook application developers who are interested in testing their apps.</p>
<p>You may be wondering&#8230; since Facebook apps are Web apps, why do I need a special place to discuss testing them? Can&#8217;t I apply the same tools and techniques for developing and testing web apps to my Facebook apps?</p>
<p>Well, as with many things in life, the answer is yes and no. Sure you can use PHP and your favorite tools to build your app. However, because of the uniqueness of the Facebook Platform, there are special considerations that you need to think about when testing a Facebook app. Perhaps you&#8217;ve already encountered some of these special issues:</p>
<ul>
<li>How can I perform load testing on my app without defining hundreds, if not thousands of phony Facebook users, and how do I control them all? (&#8230;and BTW, defining phony users violates the Facebook <a href="http://www.facebook.com/terms.php?ref=pf" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/terms.php?ref=pf&amp;referer=');">Terms of Use</a> Section 4.1)</li>
<li>If I&#8217;m doing performance testing, how do I factor out the time spent at the Facebook servers during API calls and FBML-to-HTML rendering?</li>
<li>Are there special security issues for social media applications, and how do I test for these?</li>
<li>How do I tell if if my application is usable?</li>
<li>How do I test my application when our development schedule is already behind?</li>
<li>Are there any special issues when testing applications written for Facebook Connect?</li>
<li>How do I do proper load testing when Facebook doesn&#8217;t allow me to hook up automated test tools? (Again, check the Facebook <a href="http://www.facebook.com/terms.php?ref=pf" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/terms.php?ref=pf&amp;referer=');">Terms of Use</a> Section 3.2)</li>
<li>Now that Facebook will proactively apply their <a href="http://developers.facebook.com/policy/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/developers.facebook.com/policy/?referer=');">Developer Principles</a>, how can I be sure that my app doesn&#8217;t violate them?</li>
<li>How do I test in an environment where the Platform is constantly changing?</li>
<li>How can I simulate some of the error conditions that Facebook returns when I call API functions so I&#8217;ll know my app is robust?</li>
</ul>
<p>We plan to discuss these, and many other similar topics here. But mostly, we want this to be a resource for you. If you have a question or topic that you&#8217;d like discussed, or want to be a part of our ongoing knowledge base of Facebook testing, please let us know at <a href="mailto:admin@testfacebook.com">admin@testfacebook.com</a></p>
<p class="getsocial" style="text-align:left;"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1002.png" alt="" /><a title="Add to Facebook" rel="nofollow" href="http://www.facebook.com/sharer.php?u=http://www.testfacebook.com/2009/10/31/welcome-to-test-facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/sharer.php?u=http_//www.testfacebook.com/2009/10/31/welcome-to-test-facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1012.png" alt="Add to Facebook" /></a><a title="Add to Digg" rel="nofollow" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F10%2F31%2Fwelcome-to-test-facebook&amp;title=Welcome%20to%20Test%20Facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F10_2F31_2Fwelcome-to-test-facebook_amp_title=Welcome_20to_20Test_20Facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1022.png" alt="Add to Digg" /></a><a title="Add to Del.icio.us" rel="nofollow" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F10%2F31%2Fwelcome-to-test-facebook&amp;title=Welcome%20to%20Test%20Facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/del.icio.us/post?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F10_2F31_2Fwelcome-to-test-facebook_amp_title=Welcome_20to_20Test_20Facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1032.png" alt="Add to Del.icio.us" /></a><a title="Add to Stumbleupon" rel="nofollow" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F10%2F31%2Fwelcome-to-test-facebook&amp;title=Welcome%20to%20Test%20Facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F10_2F31_2Fwelcome-to-test-facebook_amp_title=Welcome_20to_20Test_20Facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1042.png" alt="Add to Stumbleupon" /></a><a title="Add to Reddit" rel="nofollow" href="http://reddit.com/submit?url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F10%2F31%2Fwelcome-to-test-facebook&amp;title=Welcome%20to%20Test%20Facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F10_2F31_2Fwelcome-to-test-facebook_amp_title=Welcome_20to_20Test_20Facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1052.png" alt="Add to Reddit" /></a><a title="Add to Blinklist" rel="nofollow" href="http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Description=&amp;Url=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F10%2F31%2Fwelcome-to-test-facebook&amp;Title=Welcome%20to%20Test%20Facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.blinklist.com/index.php?Action=Blink/addblink.php_amp_Description=_amp_Url=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F10_2F31_2Fwelcome-to-test-facebook_amp_Title=Welcome_20to_20Test_20Facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1062.png" alt="Add to Blinklist" /></a><a title="Add to Twitter" rel="nofollow" href="http://twitter.com/home/?status=Welcome%20to%20Test%20Facebook+%40+http%3A%2F%2Fwww.testfacebook.com%2F2009%2F10%2F31%2Fwelcome-to-test-facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home/?status=Welcome_20to_20Test_20Facebook+_40+http_3A_2F_2Fwww.testfacebook.com_2F2009_2F10_2F31_2Fwelcome-to-test-facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1072.png" alt="Add to Twitter" /></a><a title="Add to Technorati" rel="nofollow" href="http://www.technorati.com/faves?add=http://www.testfacebook.com/2009/10/31/welcome-to-test-facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.technorati.com/faves?add=http_//www.testfacebook.com/2009/10/31/welcome-to-test-facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1082.png" alt="Add to Technorati" /></a><a title="Add to Yahoo Buzz" rel="nofollow" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F10%2F31%2Fwelcome-to-test-facebook&amp;headline=Welcome%20to%20Test%20Facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/buzz.yahoo.com/buzz?targetUrl=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F10_2F31_2Fwelcome-to-test-facebook_amp_headline=Welcome_20to_20Test_20Facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1092.png" alt="Add to Yahoo Buzz" /></a><a title="Add to Newsvine" rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http%3A%2F%2Fwww.testfacebook.com%2F2009%2F10%2F31%2Fwelcome-to-test-facebook&amp;h=Welcome%20to%20Test%20Facebook" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.newsvine.com/_wine/save?u=http_3A_2F_2Fwww.testfacebook.com_2F2009_2F10_2F31_2Fwelcome-to-test-facebook_amp_h=Welcome_20to_20Test_20Facebook&amp;referer=');"><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1102.png" alt="Add to Newsvine" /></a><img style="border:0;margin:0;padding:0;" src="http://getsocialserver.wordpress.com/files/2009/08/gs1112.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.testfacebook.com/2009/10/31/welcome-to-test-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
