<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0QDQn0zfip7ImA9WhBaE08.&quot;"><id>tag:blogger.com,1999:blog-15045980</id><updated>2013-05-23T08:02:53.386-07:00</updated><category term="John Penix" /><category term="Joe Allan Muharsky" /><category term="Alberto Savoia" /><category term="Simon Stewart" /><category term="Radoslav Vasilev" /><category term="Vojta Jína" /><category term="John Thomas" /><category term="Zuri Kemp" /><category term="Yvette Nameth" /><category term="Sharon Zhou" /><category term="Christopher Semturs" /><category term="BITE" /><category term="Julian Harty" /><category term="Patricia Legaspi" /><category term="Joel Hynoski" /><category term="Ekaterina Kamenskaya" /><category term="C++" /><category term="RPF" /><category term="Alan Faulkner" /><category term="TotT" /><category term="Pooja Gupta" /><category term="Rajat Dewan" /><category term="Goranka Bjedov" /><category term="Patrick Copeland" /><category term="Chrome" /><category term="Mark Striebeck" /><category term="Karin Lundberg" /><category term="Jason Elbaum" /><category term="Jonathan Velasquez" /><category term="Misko Hevery" /><category term="Chaitali Narla" /><category term="Shyam Seshadri" /><category term="Jason Arbon" /><category term="Alan Myrvold" /><category term="Test Analytics" /><category term="Sean Jordan" /><category term="Phil Rollet" /><category term="Jim Reardon" /><category term="Tejas Shah" /><category term="ScriptCover" /><category term="Dave Chen" /><category term="Richard Bustamante" /><category term="GTAC" /><category term="Noel Yap" /><category term="Jay Han" /><category term="Allen Hutchison" /><category term="Mark Ivey" /><category term="Jessica Tomechak" /><category term="DOM Snitch" /><category term="Marc Kaplan" /><category term="Adam Porter" /><category term="Roshan Sembacuttiaratchy" /><category term="Tony Voellm" /><category term="Michael Bachman" /><category term="Chrome OS" /><category term="Rajat Jain" /><category term="Antoine Picard" /><category term="Havard Rast Blok" /><category term="Jobs" /><category term="Andrew Trenk" /><category term="Jason Huggins" /><category term="Java" /><category term="APIs" /><category term="Stephen Ng" /><category term="Philip Zembrod" /><category term="App Engine" /><category term="Alek Icev" /><category term="Harry Robinson" /><category term="George Pirocanac" /><category term="Conferences" /><category term="Anthony Vallone" /><category term="Aaron Jacobs" /><category term="Diego Salas" /><category term="Coverage" /><category term="James Whittaker" /><category term="Zhanyong Wan" /><category term="JavaScript" /><category term="Bruce Leban" /><category term="Markus Clermont" /><title type="text">Google Testing Blog</title><subtitle type="html">If it ain't broke, you're not trying hard enough.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://googletesting.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Asim</name><uri>http://www.blogger.com/profile/15225094984685742326</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>264</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/RLXA" /><feedburner:info uri="blogspot/rlxa" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>blogspot/RLXA</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;D08AR3o6fSp7ImA9WhBUFkU.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-8981809450625382685</id><published>2013-05-04T09:44:00.000-07:00</published><updated>2013-05-04T09:44:06.415-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-04T09:44:06.415-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><title>GTAC 2013 Wrap-up</title><content type="html">&lt;i&gt;by The GTAC Committee&lt;/i&gt;
&lt;br /&gt;
&lt;div style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img border="0" height="180" src="https://developers.google.com/google-test-automation-conference/2013/images/event_thumb/003.jpg" style="float: left; margin: 0px 10px 10px 0px;" /&gt;
The Google Test Automation Conference (&lt;a href="https://developers.google.com/google-test-automation-conference/"&gt;GTAC&lt;/a&gt;) was held last week in NYC on April 23rd &amp;amp; 24th. The theme for this year's conference was focused on Mobile and Media. We were fortunate to have a cross section of attendees and presenters from industry and academia. This year’s talks focused on trends we are seeing in industry combined with compelling talks on tools and infrastructure that can have a direct impact on our products. We believe we achieved a conference that was focused for engineers by engineers. GTAC 2013 demonstrated that there is a strong trend toward the emergence of test engineering as a computer science discipline across companies and academia alike.
&lt;br /&gt;
&lt;div style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img border="0" height="180" src="https://developers.google.com/google-test-automation-conference/2013/images/event_thumb/044.jpg" style="float: right; margin: 0px 0px 10px 10px;" /&gt;
All of the &lt;a href="https://developers.google.com/google-test-automation-conference/2013/presentations"&gt;slides, video recordings&lt;/a&gt;, and &lt;a href="https://developers.google.com/google-test-automation-conference/2013/photos"&gt;photos&lt;/a&gt; are now available on the GTAC site. Thank you to all the &lt;a href="https://developers.google.com/google-test-automation-conference/2013/speakers"&gt;speakers&lt;/a&gt; and attendees who made this event spectacular. We are already looking forward to the next GTAC. If you have suggestions for next year’s location or theme, please comment on this post. To receive GTAC updates, subscribe to the &lt;a href="http://googletesting.blogspot.com/"&gt;Google Testing Blog&lt;/a&gt;. 
&lt;br /&gt;
&lt;div style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img border="0" height="180" src="https://developers.google.com/google-test-automation-conference/2013/images/event_thumb/065.jpg" style="float: left; margin: 0px 10px 10px 0px;" /&gt;
Here are some responses to GTAC 2013:
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;“My first GTAC, and one of the best conferences of any kind I've ever been to. The talks were consistently great and the chance to interact with so many experts from all over the map was priceless.”&lt;/i&gt; - Gareth Bowles, &lt;a href="http://www.netflix.com/"&gt;Netflix&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;“Adding my own thanks as a speaker (and consumer of the material, I learned a lot from the other speakers) -- this was amazingly well run, and had facilities that I've seen many larger conferences not provide. I got everything I wanted from attending and more!”&lt;/i&gt; - James Waldrop, &lt;a href="https://twitter.com/"&gt;Twitter&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;“This was a wonderful conference. I learned so much in two days and met some great people. Can't wait to get back to Denver and use all this newly acquired knowledge!”&lt;/i&gt; - Crystal Preston-Watson, &lt;a href="https://www.pingidentity.com/"&gt;Ping Identity&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;“GTAC is hands down the smoothest conference/event I've attended. Well done to Google and all involved.”&lt;/i&gt; - Alister Scott, &lt;a href="http://www.thoughtworks.com/"&gt;ThoughtWorks&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;“Thanks and compliments for an amazingly brain activity spurring event. I returned very inspired. First day back at work and the first thing I am doing is looking into improving our build automation and speed (1 min is too long. We are not building that much, groovy is dynamic).”&lt;/i&gt; - Irina Muchnik, &lt;a href="http://www.zynxhealth.com/"&gt;Zynx Health&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=aM88zAXSw04:4na5_OA4DHc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=aM88zAXSw04:4na5_OA4DHc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=aM88zAXSw04:4na5_OA4DHc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/aM88zAXSw04" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/8981809450625382685/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2013/05/gtac-2013-wrap-up.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/8981809450625382685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/8981809450625382685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/aM88zAXSw04/gtac-2013-wrap-up.html" title="GTAC 2013 Wrap-up" /><author><name>Google Testing Bloggers</name><uri>http://www.blogger.com/profile/03153388556673050910</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="7" src="http://3.bp.blogspot.com/-H1YTvw0kdFA/UTf_IXv4N2I/AAAAAAAAABY/ghqaO2KBOSA/s1600/gtb3.png" /></author><thr:total>2</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2013/05/gtac-2013-wrap-up.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYHQnYzfSp7ImA9WhBUFkU.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-5079707763558922357</id><published>2013-04-13T08:42:00.000-07:00</published><updated>2013-05-04T08:58:53.885-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-04T08:58:53.885-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><title>GTAC is Almost Here!</title><content type="html">&lt;i&gt;by The GTAC Committee&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
GTAC is just around the corner, and we’re all very busy and excited. I know we say this every year, but this is going to be the best GTAC ever! We have updated the GTAC site with important details:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li style="line-height: 1em;"&gt;&lt;a href="https://developers.google.com/google-test-automation-conference/2013/schedule"&gt;The Schedule&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="line-height: 1em;"&gt;&lt;a href="https://developers.google.com/google-test-automation-conference/2013/speakers"&gt;Speaker Profiles&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="line-height: 1em;"&gt;&lt;a href="https://developers.google.com/google-test-automation-conference/2013/committee"&gt;Committee Profiles&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
If you are on the attendance list, we’ll see you on April 23rd. If not, check out the &lt;a href="https://developers.google.com/google-test-automation-conference/2013/stream"&gt;Live Stream&lt;/a&gt; page where you can watch the conference live and can get involved in Q&amp;amp;A after each talk. Perhaps your team can gather in a conference room and attend remotely.&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=ee_KzjIPPXw:42_YUKmPNwc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=ee_KzjIPPXw:42_YUKmPNwc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=ee_KzjIPPXw:42_YUKmPNwc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/ee_KzjIPPXw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/5079707763558922357/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2013/04/gtac-is-almost-here.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/5079707763558922357?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/5079707763558922357?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/ee_KzjIPPXw/gtac-is-almost-here.html" title="GTAC is Almost Here!" /><author><name>Google Testing Bloggers</name><uri>http://www.blogger.com/profile/03153388556673050910</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="7" src="http://3.bp.blogspot.com/-H1YTvw0kdFA/UTf_IXv4N2I/AAAAAAAAABY/ghqaO2KBOSA/s1600/gtb3.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2013/04/gtac-is-almost-here.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EGR3s9fip7ImA9WhBWF0o.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-2012075819086436887</id><published>2013-04-12T08:13:00.000-07:00</published><updated>2013-04-12T08:13:46.566-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-12T08:13:46.566-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jonathan Velasquez" /><category scheme="http://www.blogger.com/atom/ns#" term="Chaitali Narla" /><category scheme="http://www.blogger.com/atom/ns#" term="Sean Jordan" /><category scheme="http://www.blogger.com/atom/ns#" term="Karin Lundberg" /><category scheme="http://www.blogger.com/atom/ns#" term="Anthony Vallone" /><category scheme="http://www.blogger.com/atom/ns#" term="Dave Chen" /><category scheme="http://www.blogger.com/atom/ns#" term="Diego Salas" /><category scheme="http://www.blogger.com/atom/ns#" term="Yvette Nameth" /><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>Two New Videos About Testing at Google</title><content type="html">by Anthony Vallone&lt;br /&gt;
&lt;br /&gt;
We have two excellent, new videos to share about testing at Google. If you are curious about the work that our Test Engineers (TEs) and Software Engineers in Test (SETs) do, you’ll find both of these videos very interesting.&lt;br /&gt;
&lt;br /&gt;
The 
&lt;a href="http://www.youtube.com/lifeatgoogle"&gt;Life at Google&lt;/a&gt; 
team produced a video series called 
&lt;a href="http://www.youtube.com/watch?v=eZHEnPCEe0o&amp;amp;feature=c4-overview-vl&amp;amp;list=PLllx_3tLoo4fd1deqnzvyZrIrJzRdSC6-"&gt;Do Cool Things That Matter&lt;/a&gt;. 
This series includes a video from an SET and TE on the Maps team (Sean Jordan and Yvette Nameth) discussing their work on the Google Maps team.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.youtube.com/watch?v=FcwMMEsRFW4&amp;amp;list=PLllx_3tLoo4fd1deqnzvyZrIrJzRdSC6-"&gt;Meet Yvette and Sean from the Google Maps Test Team&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/FcwMMEsRFW4?list=PLllx_3tLoo4fd1deqnzvyZrIrJzRdSC6-" width="560"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
The 
&lt;a href="https://plus.sandbox.google.com/u/0/101571483150813305324"&gt;Google Students&lt;/a&gt; 
team hosted a 
&lt;a href="http://www.google.com/+/learnmore/hangouts/onair.html"&gt;Hangouts On Air&lt;/a&gt; 
event with several Google SETs (Diego Salas, Karin Lundberg, Jonathan Velasquez, Chaitali Narla, and Dave Chen) 
discussing the SET role.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://plus.google.com/u/0/101571483150813305324/posts/diXcYNHmMvM"&gt;Software Engineers in Test at Google - Covering your (Code)Bases&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/OZk8nlcpe3w" width="560"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested in joining the ranks of TEs or SETs at Google? Search for &lt;a href="http://goo.gl/I0w5J"&gt;Google test jobs&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=J8d6ucmkn9M:dK6HJ8YVd8U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=J8d6ucmkn9M:dK6HJ8YVd8U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=J8d6ucmkn9M:dK6HJ8YVd8U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/J8d6ucmkn9M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/2012075819086436887/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2013/04/two-new-videos-about-testing-at-google.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2012075819086436887?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2012075819086436887?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/J8d6ucmkn9M/two-new-videos-about-testing-at-google.html" title="Two New Videos About Testing at Google" /><author><name>Google Testing Bloggers</name><uri>http://www.blogger.com/profile/03153388556673050910</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="7" src="http://3.bp.blogspot.com/-H1YTvw0kdFA/UTf_IXv4N2I/AAAAAAAAABY/ghqaO2KBOSA/s1600/gtb3.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/FcwMMEsRFW4/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2013/04/two-new-videos-about-testing-at-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUHQX84cCp7ImA9WhBbEU8.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-8874631609951045109</id><published>2013-03-22T18:48:00.000-07:00</published><updated>2013-05-09T12:03:50.138-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-09T12:03:50.138-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TotT" /><category scheme="http://www.blogger.com/atom/ns#" term="Andrew Trenk" /><title>Testing on the Toilet: Testing State vs. Testing Interactions</title><content type="html">&lt;i&gt;By Andrew Trenk&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;This article was adapted from a &lt;a href="http://googletesting.blogspot.com/2007/01/introducing-testing-on-toilet.html"&gt;Google Testing on the Toilet&lt;/a&gt; (TotT) episode. You can download a printer-friendly &lt;a href="http://goo.gl/8x1Ha"&gt;version&lt;/a&gt; of this TotT episode and post it in your office.&lt;/i&gt;
&lt;br /&gt;
&lt;br /&gt;
There are typically two ways a unit test can verify that the code under test is working properly: by testing state or by testing interactions. What’s the difference between these?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Testing state means you're verifying that the code under test returns the right results.&lt;/b&gt;
&lt;br /&gt;
&lt;pre style="background: #fffcd0; border: solid 1px #AAAAAA; overflow: auto; padding: 10px;"&gt;public void testSortNumbers() {
  NumberSorter &lt;b&gt;numberSorter&lt;/b&gt; = new NumberSorter(&lt;b&gt;quicksort, bubbleSort&lt;/b&gt;);
  &lt;span style="color: blue;"&gt;// Verify that the returned list is sorted. It doesn't matter which sorting
  // algorithm is used, as long as the right result is returned.&lt;/span&gt;
  assertEquals(
      new ArrayList(1, 2, 3),
      &lt;b&gt;numberSorter&lt;/b&gt;.sortNumbers(new ArrayList(3, 1, 2)));
}&lt;/pre&gt;
&lt;b&gt;Testing interactions means you're verifying that the code under test calls certain methods properly.&lt;/b&gt;
&lt;br /&gt;
&lt;pre style="background: #fffcd0; border: solid 1px #AAAAAA; overflow: auto; padding: 10px;"&gt;public void &lt;b&gt;testSortNumbers_quicksortIsUsed&lt;/b&gt;() {
  &lt;span style="color: blue;"&gt;// Pass in mocks to the class and call the method under test.&lt;/span&gt;
  NumberSorter &lt;b&gt;numberSorter&lt;/b&gt; = new NumberSorter(&lt;b&gt;mockQuicksort, mockBubbleSort&lt;/b&gt;);
  &lt;b&gt;numberSorter&lt;/b&gt;.sortNumbers(new ArrayList(3, 1, 2));
  &lt;span style="color: blue;"&gt;// Verify that numberSorter.sortNumbers() used quicksort. The test should
  // fail if mockQuicksort.sort() is never called or if it's called with the
  // wrong arguments (e.g. if mockBubbleSort is used to sort the numbers).&lt;/span&gt;
  verify(&lt;b&gt;mockQuicksort&lt;/b&gt;).sort(new ArrayList(3, 1, 2));
}&lt;/pre&gt;
The second test may result in good code coverage, but it doesn't tell you whether sorting works properly, only that quicksort.sort() was called. &lt;b&gt;Just because a test that uses interactions is passing doesn't mean the code is working properly&lt;/b&gt;. This is why &lt;b&gt;in most cases, you want to test state, not interactions.&lt;/b&gt;
&lt;br /&gt;
In general, &lt;b&gt;interactions should be tested when correctness doesn't just depend on what the code's output is, but also how the output is determined&lt;/b&gt;. In the above example, you would only want to test interactions in addition to testing state if it's important that quicksort is used (e.g. the method would run too slowly with a different sorting algorithm), otherwise the test using interactions is unnecessary.
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;What are some other examples of cases where you want to test interactions?&lt;/b&gt;
&lt;br /&gt;
- &lt;b&gt;The code under test calls a method where differences in the number or order of calls would cause undesired behavior&lt;/b&gt;, such as side effects (e.g. you only want one email to be sent), latency (e.g. you only want a certain number of disk reads to occur) or multithreading issues (e.g. your code will deadlock if it calls some methods in the wrong order). Testing interactions ensures that your tests will fail if these methods aren't called properly.
&lt;br /&gt;
- &lt;b&gt;You're testing a UI where the rendering details of the UI are abstracted away from the UI logic&lt;/b&gt; (e.g. using MVC or MVP). In tests for your controller/presenter, you only care that a certain method of the view was called, not what was actually rendered, so you can test interactions with the view. Similarly, when testing the view, you can test interactions with the controller/presenter.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=gI97MlzyXjE:bzb4XwRYXE8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=gI97MlzyXjE:bzb4XwRYXE8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=gI97MlzyXjE:bzb4XwRYXE8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/gI97MlzyXjE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/8874631609951045109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2013/03/testing-on-toilet-testing-state-vs.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/8874631609951045109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/8874631609951045109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/gI97MlzyXjE/testing-on-toilet-testing-state-vs.html" title="Testing on the Toilet: Testing State vs. Testing Interactions" /><author><name>Google Testing Bloggers</name><uri>http://www.blogger.com/profile/03153388556673050910</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="7" src="http://3.bp.blogspot.com/-H1YTvw0kdFA/UTf_IXv4N2I/AAAAAAAAABY/ghqaO2KBOSA/s1600/gtb3.png" /></author><thr:total>4</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2013/03/testing-on-toilet-testing-state-vs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8BQ386eip7ImA9WhBUFkU.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-870791818819003209</id><published>2013-03-06T17:46:00.000-08:00</published><updated>2013-05-04T08:54:12.112-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-04T08:54:12.112-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><title>Announcing the GTAC 2013 Agenda</title><content type="html">&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;by The GTAC Committee&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We have completed selection and confirmation of all speakers for GTAC 2013. You can find the detailed agenda at:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp; &lt;a href="http://developers.google.com/gtac/2013/schedule"&gt;developers.google.com/gtac/2013/schedule&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Thank you to all who submitted proposals! It was very hard to make selections from so many fantastic submissions.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If you were not extended an invitation, don’t forget that you can join us via YouTube live streaming. We’ll be setting up &lt;a href="http://www.google.com/moderator/"&gt;Google Moderator&lt;/a&gt;, so remote attendees can get involved in Q&amp;amp;A after each talk. Information about live streaming, Moderator, and other details will be posted on the GTAC site soon and announced here.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=BPQCrqyyZXU:CEjdcR4Ma84:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=BPQCrqyyZXU:CEjdcR4Ma84:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=BPQCrqyyZXU:CEjdcR4Ma84:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/BPQCrqyyZXU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/870791818819003209/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2013/03/announcing-gtac-2013-agenda.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/870791818819003209?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/870791818819003209?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/BPQCrqyyZXU/announcing-gtac-2013-agenda.html" title="Announcing the GTAC 2013 Agenda" /><author><name>Google Testing Bloggers</name><uri>http://www.blogger.com/profile/03153388556673050910</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="7" src="http://3.bp.blogspot.com/-H1YTvw0kdFA/UTf_IXv4N2I/AAAAAAAAABY/ghqaO2KBOSA/s1600/gtb3.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2013/03/announcing-gtac-2013-agenda.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFR3w_eyp7ImA9WhNbFUk.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-5497299513095045520</id><published>2013-01-18T14:01:00.000-08:00</published><updated>2013-01-18T14:01:56.243-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-18T14:01:56.243-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><title>The Deadline to Signup for GTAC is Jan 23</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;By The GTAC Committee&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If you would like to attend or speak at GTAC 2013, the deadline to sign-up is January 23rd, 2013.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We are really excited about hosting this event at our fabulous New York City office. We’ve received many interesting presentation proposals so far, and this year’s GTAC will certainly be a fascinating, important event for test automation professionals. We are still accepting proposals, so it’s not too late to add yours for consideration.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;You can find details about the conference at our new site:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp; &lt;a href="http://developers.google.com/gtac"&gt;developers.google.com/gtac&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We will be making regular updates to this site over the next several weeks.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;For those that have already signed up to attend or speak, we will contact you directly in early February.&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=w3ZQ8TfZZTQ:GilycyeXF2g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=w3ZQ8TfZZTQ:GilycyeXF2g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=w3ZQ8TfZZTQ:GilycyeXF2g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/w3ZQ8TfZZTQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/5497299513095045520/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2013/01/the-deadline-to-signup-for-gtac-is-jan.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/5497299513095045520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/5497299513095045520?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/w3ZQ8TfZZTQ/the-deadline-to-signup-for-gtac-is-jan.html" title="The Deadline to Signup for GTAC is Jan 23" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2013/01/the-deadline-to-signup-for-gtac-is-jan.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HR306eSp7ImA9WhBXGUk.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-4993778204490136867</id><published>2013-01-14T11:27:00.000-08:00</published><updated>2013-04-02T15:13:56.311-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T15:13:56.311-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Yvette Nameth" /><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>Test Engineers @ Google</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;By Yvette Nameth&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;At Google, we’re very big into highlighting individuals’ strengths and using them to make teams and products better. However, we frequently get asked “What do Test Engineers (aka TEs) do?” I pause when I get this question since it’s hard to speak for my peers - I test &lt;a href="http://google-latlong.blogspot.com/2011/07/evolving-look-of-google-maps-redux.html"&gt;Google Maps rendering&lt;/a&gt;, which is just one small portion of what Google’s Test Engineers test.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;In order to get a clearer picture of what Test Engineers are responsible for, I chatted with three of my colleagues. We were able to identify the underlying Test Engineers’ similarities, while highlighting the differences.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;So what common themes do Test Engineers specialize in at Google?&lt;/span&gt;&lt;br /&gt;

&lt;div style="margin-left: 20px;"&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;We’re product experts:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Test Engineers need to become a “go-to” person for how their product works and integrates with other Google products. (You aren’t expected to have this before working with a product, but you need to figure out how to become one on any product you work on!) TEs need to understand use cases and contracts with other services, products, and features. We aren’t expected to write unit tests for other engineer’s code; instead we ensure product quality on the functional and integration aspects of the product.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;We’re flexible:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Test Engineers are required to switch tasks and re-prioritize frequently. From unplanned catastrophes, to shifting launch calendars, to people asking us questions, our work is filled with interrupts. We determine how to ensure quality in the face of the interrupts.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We also modify our tests based on the pace of the development and understand that there is no one right way to test a product. Test Engineers adapt tools to meet their needs and understand when a tool just can’t get the job done.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;We’re clear communicators:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We have to be able to communicate via test plans, design docs, bugs, email and code. Every day we work with a wide variety of people in different roles: Software Engineers, Software Engineers in Test, Product Managers, Usability Researchers, Designers, Legal Counsel, etc. We need to address these different audiences to make sure we’re either gathering the information that will help us build better strategies or presenting feedback that will help influence the product.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;We’re good at coordination:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We are people who use our “in between the product and user” status to coordinate integration testing efforts between products. We may coordinate manual testing efforts by our manual testers; or we may make sure that test gaps are being addressed by “someone” (Test Engineer, Software Engineer in Test, or Software Engineer). We put our product knowledge and communication together with a bit of coordination and make sure that bugs are looked at and the product is getting tested hourly / daily.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;We have impact:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Google Test Engineers have big impact. We hold responsibility thinking of ways that our products could fail in “real scenarios”; and then we add tests to make sure that the worst won’t come to pass.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;How big is this? Well, in my case, I’m responsible for making sure Google Maps represents a map that is useful to my relatives in the middle of rural Montana as well as my friends living in London, Paris or Sydney. When you add to that the billions of other users in different regions, speaking different languages and using the map for different reasons, I know that my testing is impacting their ability to get around and find out information about the physical world around them safely.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;We code:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The other most common question is “Do you write code?” The answer is yes; Test Engineers at Google do code.&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;

&lt;/div&gt;

&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The three aspects that generally differentiate what a Test Engineer does day-to-day depend on the following:&lt;/span&gt;&lt;br /&gt;

&lt;div style="margin-left: 20px;"&gt;
&lt;br /&gt;

&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Individual’s Strengths &amp;amp; Interests:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Everyone is different and every TE has different passions, strengths and areas of expertise. Thankfully, Google’s a big enough company that many different areas of testing are available, and we gravitate to testing products we like. All TEs start with core competencies in testing, coding, and algorithms. How a TE applies this knowledge varies.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;The Type of Product:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Desktop, web app or mobile? Frontend or backend? The technologies that our products use and run on create a lot of variation in what and how we test.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;The Product’s History / Lifecycle:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Early concept products don’t resemble those that exist in production. And the amount of testing that a product already has will determine what testing the TE is focused on. We work creating a test roadmap that parallels the product’s development cycle and addresses any testing gaps.&lt;/span&gt;
&lt;br /&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If you still want to know what the day in the life of a Test Engineer entails, we’ll never be able to give you a general answer for that. Instead I suggest that you check out &lt;a href="http://googletesting.blogspot.com/2012/09/conversation-with-test-engineer.html"&gt;what Alan Faulkner is doing&lt;/a&gt; or ask the next Google Test Engineer you meet.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Interested in joining the ranks of Test Engineers (or Software Engineers in Test)? Check out &lt;a href="http://goo.gl/2RDKj"&gt;http://goo.gl/2RDKj&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;About the Contributors:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Albert Drona has been at Google for 5 years and is currently working on Google Maps for Mobile.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Jatin Shah has been at Google for 9 months on Google+.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Mohammad Khan has been at Google for 7 years and is currently working on Google+ releases.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;About the Author:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Yvette Nameth has been at Google for 5 years and is currently working on Google Maps rendering.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=DSARboQ44uM:IkOSHujmsd0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=DSARboQ44uM:IkOSHujmsd0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=DSARboQ44uM:IkOSHujmsd0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/DSARboQ44uM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/4993778204490136867/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2013/01/test-engineers-google.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/4993778204490136867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/4993778204490136867?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/DSARboQ44uM/test-engineers-google.html" title="Test Engineers @ Google" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><thr:total>9</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2013/01/test-engineers-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4DQH85eCp7ImA9WhBUFkU.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-304727347061456184</id><published>2012-12-11T09:59:00.001-08:00</published><updated>2013-05-04T08:56:11.120-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-04T08:56:11.120-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><title>GTAC: Call for Proposals &amp; Attendance</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;i&gt;By The GTAC Committee&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We are happy to announce that the application process is now open for presentation proposals and attendance for the seventh &lt;a href="https://developers.google.com/google-test-automation-conference/"&gt;GTAC&lt;/a&gt; (Google Test Automation Conference) to be held at the &lt;a href="http://www.google.com/about/jobs/locations/new-york/"&gt;Google New York office&lt;/a&gt; on April 23 - 24th, 2013.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;GTAC brings together engineers from many organizations to discuss test automation. It is a great opportunity to present, learn, and challenge modern testing technologies and strategies. GTAC will be streamed live on YouTube this year, so even if you can’t attend, you’ll be able to watch the conference from your computer.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Speakers&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Presentations are targeted at student, academic, and experienced engineers working on test automation. Full presentations and lightning talks are 45 minutes and 15 minutes respectively. Speakers should be prepared for a question and answer session following their presentation. As mentioned in our &lt;a href="http://googletesting.blogspot.com/2012/10/gtac-coming-to-new-york-in-spring.html"&gt;recent post&lt;/a&gt;, the main theme is on testing media and mobile, however, we will consider proposals on other topics.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Application&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;For presentation proposals and/or attendance, complete &lt;a href="https://docs.google.com/a/google.com/forms/d/1cMUiW1-NmWnJTuk6FXXR482S3QPmLh1wSLa_MYsnFCo/edit?sid=1c11b47afa3a0440&amp;amp;token=PAtgSTsBAAA.NeiQ_Buclch7VH9Y4C3NFQ.hgJCZMXlgKX-g9zd5cs7Jg"&gt;this form&lt;/a&gt;. We will be selecting about 200 applicants for the event.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Deadline&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The due date for both presentation and attendance applications is Jan 23rd, 2013.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Fees&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;There are no registration fees. We will send out detailed registration instructions to each invited applicant. We will provide meals. Attendees must arrange their own travel and accommodations.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=LSH16sjqSt0:SKAEMg0LDkg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=LSH16sjqSt0:SKAEMg0LDkg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=LSH16sjqSt0:SKAEMg0LDkg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/LSH16sjqSt0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/304727347061456184/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/12/gtac-call-for-proposals-attendance.html#comment-form" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/304727347061456184?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/304727347061456184?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/LSH16sjqSt0/gtac-call-for-proposals-attendance.html" title="GTAC: Call for Proposals &amp; Attendance" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><thr:total>12</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/12/gtac-call-for-proposals-attendance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cMSXo-fip7ImA9WhBXGUk.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-2509229146182532905</id><published>2012-11-27T15:19:00.000-08:00</published><updated>2013-04-02T15:18:08.456-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T15:18:08.456-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Vojta Jína" /><title>Testacular - Spectacular Test Runner for JavaScript</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;By &lt;a href="https://twitter.com/vojtajina"&gt;Vojta Jína&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;[NOTE: After this post was published, Testacular was renamed &lt;a href="http://karma-runner.github.com/"&gt;Karma&lt;/a&gt;.]&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;“Testacular has changed my life. Now I test-drive everything.”&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;-- Matias Cudich, YouTube on TV team lead&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;
At Google we believe in testing. On the &lt;a href="http://angularjs.org/"&gt;AngularJS&lt;/a&gt; team, it’s even worse - we are super crazy about testing. Every feature of the framework is designed with testability in mind.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
We found that we were struggling with existing tools, so we decided to write our own test runner. We wanted a test runner that would meet all of our needs for both quick development and continuous integration -- a truly spectacular test runner. We've called it &lt;a href="http://testacular.github.com/"&gt;Testacular&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
Let's walk through some mental tests for what we believe makes for an ideal test runner...&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;it(‘should be fast’)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;In order to be productive and creative you need instant feedback. Testacular watches the files in your application. Whenever you change any of them, it immediately executes the specified tests and reports the results. You never have to leave your text editor.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
This enables a new way of developing. Instead of moving back and forth between the editor and the browser, you can simply stay in the editor and experiment. You instantly see the results at the command line whenever your changes are saved.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
Besides that, our experience says that if test execution is slow, people don’t write tests. Testacular eliminates many barriers that keep folks from writing tests. When developers get instant feedback from their tests, the tests become an asset rather than annoyance.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;it(‘should use real browsers’)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;JavaScript itself is pretty consistent between different browsers, so one could potentially test browser code in non-browser environments like &lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt;. Unfortunately, that’s not the case with the DOM APIs. AngularJS does a lot of DOM manipulation, and we need to be sure that it works across browsers. Executing tests on real browsers is a must.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
And because Testacular communicates with browsers through a common protocols (eg. HTTP or WebSocket), you can test not only on desktop browsers but also on other devices such as mobile phones and tablets. For instance, the YouTube team uses Testacular to run continuous integration builds on PlayStation 3.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
Another advantage of using real browsers is that you can use any of the tools that the browser provides. For example, you can jump into a debugger and step through your test.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;it(‘should be reliable/stable’)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;To be honest, most of these ideas were already implemented in &lt;a href="http://code.google.com/p/js-test-driver/"&gt;JsTD&lt;/a&gt; almost three years ago. I think these are truly great ideas. Unfortunately, the implementation was flaky. It’s very easy to get JsTD into an inconsistent state, so you end up restarting it pretty much all day.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
Testacular solves that. It can run for days, without restarting. That’s because every test run is executed in a fresh iframe. It reconnects browsers that have lost their connection to the server. And yep, it can gracefully recover from other issues, like syntax errors in the code under test.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
We'd like to invite you to take Testacular for a spin. You can learn a bit more in this screencast. Please let us know what you think!&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/MVw8N3hTfCI/0.jpg" height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/MVw8N3hTfCI&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="640" height="385"  src="http://www.youtube.com/v/MVw8N3hTfCI&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The project is open sourced and developed on &lt;a href="https://github.com/testacular/testacular"&gt;GitHub&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=-XqyPApqYhQ:BuSzGCumO6s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=-XqyPApqYhQ:BuSzGCumO6s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=-XqyPApqYhQ:BuSzGCumO6s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/-XqyPApqYhQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/2509229146182532905/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/11/testacular-spectacular-test-runner-for.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2509229146182532905?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2509229146182532905?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/-XqyPApqYhQ/testacular-spectacular-test-runner-for.html" title="Testacular - Spectacular Test Runner for JavaScript" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><thr:total>5</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/11/testacular-spectacular-test-runner-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcAQXc-eyp7ImA9WhBUFkU.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-8451314851199265358</id><published>2012-10-30T11:18:00.000-07:00</published><updated>2013-05-04T08:57:20.953-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-04T08:57:20.953-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><title>GTAC Coming to New York in the Spring</title><content type="html">&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;i&gt;By The GTAC Committee&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The next and seventh &lt;a href="https://developers.google.com/google-test-automation-conference/"&gt;GTAC&lt;/a&gt; (Google Test Automation Conference) will be held on April 23-24, 2013 at the beautiful &lt;a href="http://www.google.com/about/jobs/locations/new-york/"&gt;Google New York&lt;/a&gt; office! We had a late start preparing for GTAC, but things are now falling into place. This will be the second time it is hosted at our second largest engineering office. We are also sticking with our tradition of changing the region each year, as the last GTAC was held in California.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The GTAC event brings together engineers from many organizations to discuss test automation. It is a great opportunity to present, learn, and challenge modern testing technologies and strategies. We will soon be recruiting speakers to discuss their innovations.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;This year’s theme will be “Testing Media and Mobile“. In the past few years, substantial changes have taken place in both the media and mobile areas. Television is no longer the king of media. Over 27 billion videos are streamed in the U.S. per month. Over 1 billion people now own smartphones. HTML5 includes support for audio, video, and scalable vector graphics, which will liberate many web developers from their dependence on third-party media software. These are incredibly complex technologies to test. We are thrilled to be hosting this event in which many in the industry will share their innovations.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Registration information for speakers and attendees will soon be posted here and on the GTAC site (&lt;a href="https://developers.google.com/google-test-automation-conference/"&gt;https://developers.google.com/gtac&lt;/a&gt;). Even though we will be focusing on “Testing Media and Mobile”, we will be accepting proposals for talks on other topics.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=2u6fIw7_W2k:_1d8FoxwesM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=2u6fIw7_W2k:_1d8FoxwesM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=2u6fIw7_W2k:_1d8FoxwesM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/2u6fIw7_W2k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/8451314851199265358/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/10/gtac-coming-to-new-york-in-spring.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/8451314851199265358?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/8451314851199265358?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/2u6fIw7_W2k/gtac-coming-to-new-york-in-spring.html" title="GTAC Coming to New York in the Spring" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><thr:total>6</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/10/gtac-coming-to-new-york-in-spring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQDSXY8eyp7ImA9WhBXGUk.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-3777332459169811011</id><published>2012-10-26T17:16:00.001-07:00</published><updated>2013-04-02T15:06:18.873-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T15:06:18.873-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="Zhanyong Wan" /><title>Why Are There So Many C++ Testing Frameworks?</title><content type="html">&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;By&amp;nbsp;Zhanyong Wan -&amp;nbsp;Software Engineer&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;These days, it seems that everyone is rolling their own C++ testing framework, if they haven't done so already. Wikipedia has a &lt;a href="http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B"&gt;partial list&lt;/a&gt; of such frameworks. This is interesting because many OOP languages have only one or two major frameworks. For example, most Java people seem happy with either &lt;a href="http://junit.org/"&gt;JUnit&lt;/a&gt; or &lt;a href="http://testng.org/"&gt;TestNG&lt;/a&gt;. Are C++ programmers the do-it-yourself kind?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;When we started working on &lt;a href="http://code.google.com/p/googletest/"&gt;Google Test&lt;/a&gt; (Google’s C++ testing framework), and especially after we &lt;a href="http://googletesting.blogspot.com/2008/07/announcing-new-google-c-testing.html"&gt;open-sourced it&lt;/a&gt;, people began asking us why we were doing it. The short answer is that we couldn’t find an existing C++ testing framework that satisfied all our needs. This doesn't mean that these frameworks were all poorly designed or implemented. Rather, many of them had great ideas and tricks that we learned from. However, Google had a huge number of C++ projects that got compiled on various operating systems (Linux, Windows, Mac OS X, and later Android, among others) with different compilers and all kinds of compiler flags, and we needed a framework that worked well in all these environments and ccould handle many different types and sizes of projects.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Unlike Java, which has the famous slogan "Write once, run anywhere," C++ code is being written in a much more diverse environment. Due to the complexity of the language and the need to do low-level tasks, compatibility between different C++ compilers and even different versions of the same compiler is poor. There is a C++ standard, but it's not well supported by compiler vendors. For many tasks you have to rely on unportable extensions or platform-specific functionality. This makes it hard to write a reasonably complex system that can be built using many different compilers and works on many platforms.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;To make things more complicated, most C++ compilers allow you to turn off some standard language features in return for better performance. Don't like using exceptions? You can turn it off. Think dynamic cast is bad? You can disable &lt;a href="http://en.wikipedia.org/wiki/RTTI"&gt;Run-Time Type Identification&lt;/a&gt;, the feature behind dynamic cast and run-time access to type information. If you do any of these, however, code using these features will fail to compile. Many testing frameworks rely on exceptions. They are automatically out of the question for us since we turn off exceptions in many projects (in case you are curious, Google Test doesn’t require exceptions or run-time type identification by default; when these language features are turned on, Google Test will try to take advantage of them and provide you with more utilities, like the &lt;a href="http://code.google.com/p/googletest/wiki/AdvancedGuide#Exception_Assertions"&gt;exception assertions&lt;/a&gt;.).&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Why not just write a portable framework, then? Indeed, that's a top design goal for Google Test. And authors of some other frameworks have tried this too. However, this comes with a cost. Cross-platform C++ development requires much more effort: you need to test your code with different operating systems, different compilers, different versions of them, and different compiler flags (combine these factors and the task soon gets daunting); some platforms may not let you do certain things and you have to find a workaround there and guard the code with conditional compilation; different versions of compilers have different bugs and you may have to revise your code to bypass them all; etc. In the end, it's hard unless you are happy with a bare-bone system.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;So, I think a &lt;b&gt;major reason that we have many C++ testing frameworks is that C++ is different in different environments, making it hard to write portable C++ code&lt;/b&gt;. John's framework may not suit Bill's environment, even if it solves John's problems perfectly.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Another reason is that &lt;b&gt;some limitations of C++ make it impossible to implement certain features really well, and different people chose different ways to workaround the limitations&lt;/b&gt;. One notable example is that C++ is a statically-typed language and doesn't support reflection. Most Java testing frameworks use reflection to automatically discover tests you've written such that you don't have to register them one-by-one. This is a good thing as manually registering tests is tedious and you can easily write a test and forget to register it. Since C++ has no reflection, we have to do it differently. Unfortunately there is no single best option. Some frameworks require you to register tests by hand, some use scripts to parse your source code to discover tests, and some use macros to automate the registration. We prefer the last approach and think it works for most people, but some disagree. Also, there are different ways to devise the macros and they involve different trade-offs, so the result is not clear cut.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Let’s see some actual code to understand how Google Test solves the test registration problem. The simplest way to add a test is to use the &lt;/span&gt;&lt;a href="http://code.google.com/p/googletest/wiki/Primer#Simple_Tests"&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;TEST&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;macro (what else would we name it?):&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;TEST(&lt;i&gt;Subject, HasCertainProperty&lt;/i&gt;) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; … testing code goes here …&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;This defines a test method whose purpose is to verify that the given subject has the given property. The macro automatically registers the test with Google Test such that it will be run when the test program (which may contain many such &lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;TEST&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; definitions) is executed.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Here’s a more concrete example that verifies a Factorial() function works as expected for positive arguments:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;TEST(FactorialTest, HandlesPositiveInput) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; EXPECT_EQ(1, Factorial(1));&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; EXPECT_EQ(2, Factorial(2));&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; EXPECT_EQ(6, Factorial(3));&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; EXPECT_EQ(40320, Factorial(8));&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Finally, &lt;b&gt;many C++ testing framework authors neglected extensibility and were happy just providing canned solutions&lt;/b&gt;, so we ended up with many solutions, each satisfying a different niche but none general enough. A versatile framework must have a good extension story. Let's face it: you cannot be all things to all people, no matter what. Instead of bloating the framework with rarely used features, we should provide good out-of-box solutions for maybe 95% of the use cases, and leave the rest to extensions. If I can easily extend a framework to solve a particular problem of mine, I will feel less motivated to write my own thing. Unfortunately, many framework authors don't seem to see the importance of extensibility. I think that mindset contributed to the plethora of frameworks we see today. In &lt;a href="http://code.google.com/p/googletest/"&gt;Google Test&lt;/a&gt;, we try to make it easy to expand your testing vocabulary by &lt;a href="http://code.google.com/p/googletest/wiki/AdvancedGuide#Predicate_Assertions_for_Better_Error_Messages"&gt;defining custom assertions&lt;/a&gt; that generate informative error messages. For instance, here’s a naive way to verify that an int value is in a given range:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;bool IsInRange(int value, int low, int high) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; return low &amp;lt;= value &amp;amp;&amp;amp; value &amp;lt;= high;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; ...&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; EXPECT_TRUE(IsInRange(SomeFunction(), low, high));&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The problem is that when the assertion fails, you only know that the value returned by SomeFunction() is not in range [low, high], but you have no idea what that return value and the range actually are -- this makes debugging the test failure harder.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;You &lt;i&gt;could&lt;/i&gt; provide a custom message to make the failure more descriptive:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; EXPECT_TRUE(IsInRange(SomeFunction(), low, high))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;"SomeFunction() = "&lt;/span&gt; &amp;lt;&amp;lt; SomeFunction()&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;", not in range ["&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; low &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;", "&lt;/span&gt; &amp;lt;&amp;lt; high &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;"]"&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Except that this is incorrect as &lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;SomeFunction()&lt;/span&gt; &lt;i style="font-family: Arial, Helvetica, sans-serif;"&gt;may&lt;/i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; return a different answer each time. &amp;nbsp;You can fix that by introducing an intermediate variable to hold the function’s result:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; int result = SomeFunction();&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; EXPECT_TRUE(IsInRange(result, low, high))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;"result (return value of SomeFunction()) = "&lt;/span&gt; &amp;lt;&amp;lt; result&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;", not in range ["&lt;/span&gt; &amp;lt;&amp;lt; low &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;", "&lt;/span&gt; &amp;lt;&amp;lt; high &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;"]"&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;However this is tedious and obscures what you are really trying to do. &amp;nbsp;It’s not a good pattern when you need to do the “is in range” check repeatedly. What we need here is a way to abstract this pattern into a reusable construct.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Google Test lets you define a test predicate like this:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;AssertionResult IsInRange(int value, int low, int high) {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; if (value &amp;lt; low)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; return &lt;b&gt;AssertionFailure&lt;/b&gt;()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;" &amp;lt; lower bound "&lt;/span&gt; &amp;lt;&amp;lt; low;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; else if (value &amp;gt; high)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; return &lt;b&gt;AssertionFailure&lt;/b&gt;()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;" &amp;gt; upper bound "&lt;/span&gt; &amp;lt;&amp;lt; high;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; return &lt;b&gt;AssertionSuccess&lt;/b&gt;()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; value &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;" is in range ["&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt; low &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;", "&lt;/span&gt; &amp;lt;&amp;lt; high &amp;lt;&amp;lt; &lt;span style="color: blue;"&gt;"]"&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Then the statement &lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;EXPECT_TRUE(IsInRange(SomeFunction(), low, high))&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; may print (assuming that &lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;SomeFunction()&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; returns 13):&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;Value of: IsInRange(SomeFunction(), low, high)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Actual: false (13 &amp;lt; lower bound 20)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;Expected: true&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The same &lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;IsInRange()&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; definition also lets you use it in an &lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;EXPECT_FALSE&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; context, e.g. &lt;/span&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;EXPECT_FALSE(IsInRange(AnotherFunction(), low, high))&lt;/span&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; could print:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;Value of: IsInRange(AnotherFunction(), low, high)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Actual: true (25 is in range [20, 60])&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;Expected: false&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;This way, you can build a library of test predicates for your problem domain, and benefit from clear, declarative test code and descriptive failure messages.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;In the same vein, &lt;a href="http://code.google.com/p/googlemock/"&gt;Google Mock&lt;/a&gt; (our C++ mocking framework) allows you to &lt;a href="http://code.google.com/p/googlemock/wiki/CookBook#Writing_New_Matchers_Quickly"&gt;easily define matchers&lt;/a&gt; that can be used exactly the same way as built-in matchers. &amp;nbsp;Also, we have included an &lt;a href="http://code.google.com/p/googletest/wiki/AdvancedGuide#Extending_Google_Test_by_Handling_Test_Events"&gt;event listener API&lt;/a&gt; in Google Test for people to write plug-ins. We hope that people will use these features to extend Google Test/Mock for their own need and contribute back extensions that might be generally useful.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Perhaps one day we will solve the C++ testing framework fragmentation problem, after all. :-)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=S810FG2TXhw:aahKun_YOoA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=S810FG2TXhw:aahKun_YOoA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=S810FG2TXhw:aahKun_YOoA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/S810FG2TXhw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/3777332459169811011/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/10/why-are-there-so-many-c-testing.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/3777332459169811011?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/3777332459169811011?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/S810FG2TXhw/why-are-there-so-many-c-testing.html" title="Why Are There So Many C++ Testing Frameworks?" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/10/why-are-there-so-many-c-testing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4FSXw5eyp7ImA9WhBXGUk.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-3357254256212116946</id><published>2012-10-03T12:08:00.000-07:00</published><updated>2013-04-02T15:15:18.223-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T15:15:18.223-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Chaitali Narla" /><category scheme="http://www.blogger.com/atom/ns#" term="Diego Salas" /><title>Hermetic Servers</title><content type="html">&lt;div&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;By &lt;a href="https://plus.google.com/112344924130503126632/"&gt;Chaitali Narla&lt;/a&gt; and &lt;a href="https://plus.google.com/106528103954793102526/"&gt;Diego Salas&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Consider a complex and rich web app. Under the hood, it is probably a maze of servers, each performing a different task and most talking to each other. Any user action navigates this server maze on its round-trip from the user to the datastores and back. A lot of Google’s web apps are like this including &lt;a href="https://mail.google.com/"&gt;GMail&lt;/a&gt; and &lt;a href="https://plus.google.com/"&gt;Google+&lt;/a&gt;. So how do we write end-to-end tests for them?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;The “End-To-End” Test&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;An end-to-end test in the Google testing world is a test that exercises the entire server stack from a user request to response. Here is a simplified view of the System Under Test (SUT) that an end-to-end test would assert. Note that the frontend server in the SUT connects to a third backend which this particular user request does not need.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-lwP4J6FcN34/UGx-bU41ImI/AAAAAAAAAP8/l5M0J3A0Xgk/s1600/1-SUT.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://1.bp.blogspot.com/-lwP4J6FcN34/UGx-bU41ImI/AAAAAAAAAP8/l5M0J3A0Xgk/s640/1-SUT.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
One of the challenges to writing a &lt;b&gt;fast&lt;/b&gt; and &lt;b&gt;reliable&lt;/b&gt; end-to-end test for such a system is avoiding network access. Tests involving network access are slower than their counterparts that only access local resources, and accessing external servers might lead to &lt;a href="http://googletesting.blogspot.com/2008/04/tott-avoiding-flakey-tests.html"&gt;flakiness&lt;/a&gt; due to lack of determinism or unavailability of the external servers.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Hermetic Servers&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
One of the tricks we use at Google to design end-to-end tests is &lt;b&gt;Hermetic Servers&lt;/b&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What is a Hermetic Server? The short definition would be a “&lt;i&gt;server in a box&lt;/i&gt;”. If you can start up the entire server on a single machine that has no network connection AND the server works as expected, you have a hermetic server! This is a special case of the more general “hermetic” concept which applies to an isolated system not necessarily on a single machine.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Why is it useful to have a hermetic server? Because if your entire SUT is composed of hermetic servers, it could all be started on a single machine for testing; no network connection necessary! The single machine could be a physical or virtual machine.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Designing Hermetic Servers&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The process for building a hermetic server starts early in the design phase of any new server. Some things we watch out for:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;All connections to other servers are injected into the server at runtime using a suitable form of &lt;a href="http://en.wikipedia.org/wiki/Dependency_injection"&gt;dependency injection&lt;/a&gt; such as commandline flags or &lt;a href="http://code.google.com/p/google-guice/"&gt;Guice&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;All required static files are bundled in the server binary.&lt;/li&gt;
&lt;li&gt;If the server talks to a datastore, make sure the datastore can be &lt;a href="http://xunitpatterns.com/Fake%20Object.html"&gt;faked&lt;/a&gt; with data files or in-memory implementations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Meeting the above requirements ensures we have a highly configurable server that has potential to become a hermetic server. But it is not yet ready to be used in tests. We do a few more things to complete the package:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Make sure those connection points which our test won’t exercise have appropriate &lt;a href="http://xunitpatterns.com/Fake%20Object.html"&gt;fakes&lt;/a&gt; or mocks to verify this non-interaction.&lt;/li&gt;
&lt;li&gt;Provide modules to easily populate datastores with test data.&lt;/li&gt;
&lt;li&gt;Provide logging modules that can help trace the request/response path as it passes through the SUT.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Using Hermetic Servers in tests&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Let’s take the SUT shown earlier and assume all the servers in it are hermetic servers. Here is how an end-to-end test for the same user request would look:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Y3IxG8HH1Og/UGyJPxQE4EI/AAAAAAAAAQM/RMxO1VsdovI/s1600/2-E2ETest.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="327" src="http://2.bp.blogspot.com/-Y3IxG8HH1Og/UGyJPxQE4EI/AAAAAAAAAQM/RMxO1VsdovI/s640/2-E2ETest.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The end-to-end test does the following steps:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;starts the entire SUT as shown in the diagram on a single machine&lt;/li&gt;
&lt;li&gt;makes requests to the server via the test client&lt;/li&gt;
&lt;li&gt;validates responses from the server&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
One thing to note here is the mock server connection for the backend is not needed in this test. If we wish to test a request that needs this backend, we would have to provide a hermetic server at that connection point as well.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This end-to-end test is more reliable because it uses no network connection. It is faster because everything it needs is available in-memory or in the local hard disk. We run such tests on our continuous builds, so they run at each changelist affecting any of the servers in the SUT. If the test fails, the logging module helps track where the failure occurred in the SUT.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
We use hermetic servers in a lot of end-to-end tests. Some common cases include&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Startup tests for servers using &lt;a href="http://code.google.com/p/google-guice/"&gt;Guice&lt;/a&gt; to verify that there are no Guice errors on startup.&lt;/li&gt;
&lt;li&gt;API tests for backend servers.&lt;/li&gt;
&lt;li&gt;Micro-benchmark performance tests.&lt;/li&gt;
&lt;li&gt;UI and API tests for frontend servers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Hermetic servers do have some limitations. They will increase your test’s runtime since you have to start the entire SUT each time you run the end-to-end test. If your test runs with limited resources such as memory and CPU, hermetic servers might push your test over those limits as the server interactions grow in complexity. The dataset size you can use in the in-memory datastores will be much smaller than production datastores.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Hermetic servers are a great testing tool. Like all other tools, they need to be used thoughtfully where appropriate.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=J9QTHN7BtEw:YJHFJ5OYuIw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=J9QTHN7BtEw:YJHFJ5OYuIw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=J9QTHN7BtEw:YJHFJ5OYuIw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/J9QTHN7BtEw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/3357254256212116946/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/10/hermetic-servers.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/3357254256212116946?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/3357254256212116946?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/J9QTHN7BtEw/hermetic-servers.html" title="Hermetic Servers" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-lwP4J6FcN34/UGx-bU41ImI/AAAAAAAAAP8/l5M0J3A0Xgk/s72-c/1-SUT.jpg" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/10/hermetic-servers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEERHk6cSp7ImA9WhBXGUk.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-2141901324499719420</id><published>2012-09-19T09:31:00.000-07:00</published><updated>2013-04-02T15:10:05.719-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T15:10:05.719-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Alan Myrvold" /><category scheme="http://www.blogger.com/atom/ns#" term="Alan Faulkner" /><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>Conversation with a Test Engineer</title><content type="html">By Alan Myrvold&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Alan Faulkner is a Google Test Engineer working on DoubleClick Bid Manager, which enables advertising agencies and advertisers to bid on multiple ad exchanges. Bid Manager is the next generation of the Invite Media product, acquired by Google in 2010. Alan Faulkner has been focused on the migration component of Bid Manager, which transitions advertiser information from Invite Media to Bid Manager. He joined Google in August 2011, and works in the Kirkland, WA office.&lt;/i&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a 1em="1em" href="http://3.bp.blogspot.com/--ob5yQA5e7w/UFntL46s_PI/AAAAAAAAAPs/-ep49qPrRv0/s1600/alan.png" imageanchor="1" margin-bottom:="margin-bottom:" margin-right:="margin-right:" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://3.bp.blogspot.com/--ob5yQA5e7w/UFntL46s_PI/AAAAAAAAAPs/-ep49qPrRv0/s200/alan.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;b&gt;Are you a Test Engineer, or a Software Engineer in Test, and what’s the difference?&lt;/b&gt;&lt;br /&gt;
Right now, I’m a Test Engineer, but the two roles can be very similar. As a Test Engineer, you’re more focused on the overall quality of the product and speed of releases, while a Software Engineer in Test might focus more on test frameworks, automation, and refactoring code for testability. I think of the difference as more of a shift in focus and not capabilities, since both roles at Google need to be able to write production quality code. Example test engineering tasks I worked on are introducing an automated release process, identifying areas for the team to improve code coverage, and reducing the manual steps needed to validate data correctness.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What is a typical day for you?&lt;/b&gt;&lt;br /&gt;
When I get in, I look at any code reviews I need to respond to, look for any production bugs from technical account managers that are high priority, and then start writing code. In my current role, I focus my development effort on improving the efficiency and coverage of our large scale integration tests and frameworks. I also work on adding additional features to our product that improve our testability. I typically spend anywhere from 50% to 75% of my time either writing code or participating in code reviews.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Do you write only test code?&lt;/b&gt;&lt;br /&gt;
No, I write a lot of code that is included in the product as well. One of the great things about being an SET or TE at Google is that you can write product code as easily as test code. I write both. My test code focuses on improving test frameworks and enabling developers to write integration tests. The production code that I write focuses on increasing the verification of external inputs. I also focus on adding features that improve testability. This pushes more quality features into the product itself rather than relying on test code for correctness.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What programming languages do you use?&lt;/b&gt;&lt;br /&gt;
Both the test and product code are mostly Java. Occasionally I use Python or C++ too.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How much time to do you spend doing manual testing?&lt;/b&gt;&lt;br /&gt;
Right now, with the role I am in, I spend less than 5% of my time doing manual testing. Although some exploratory testing helps develop product knowledge and find risky areas, it doesn’t scale as a repeated process. There are a small amount of manual steps and I focus on ways to help reduce this so our team does not spend our time doing repeated manual steps as part of our data migration.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Do you write unit tests for code that isn’t yours?&lt;/b&gt;&lt;br /&gt;
At Google, the responsibility of testing is shared across all product engineers, not just Test Engineers. Everyone is responsible for writing unit tests as well as integration tests for their components. That being said, I have written unit tests for components that are outside of what I developed but that has been to illustrate how to write a unit test for said component. This component usually involved a abnormally complex set of code or to illustrate using a new mocking framework, such as &lt;a href="http://code.google.com/p/mockito/"&gt;Mockito&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What do you like about working on the Google advertising products?&lt;/b&gt;&lt;br /&gt;
I like the challenges of the scalability problems we need to solve, from handling massive amounts of data to dealing with lots of real time ad requests that need to be responded to in milliseconds. I also like the impact, since the products affect a lot of people. It’s rewarding to work on stuff like that.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How is testing at Google different from your experience at other companies?&lt;/b&gt;&lt;br /&gt;
I feel the role is more flexible at Google. There are fewer SET’s and TE’s in my group at Google per developer, and you have the flexibility to pick what is most important. For example, I get to write a lot of production code to fix bugs, make the code more testable, and increasing the visibility into errors encountered during our data migrations. Plus, developers at Google spend a lot of time writing tests, so testing isn’t just my responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;How does the Google Kirkland office differ from the headquarters in Mountain View?&lt;/b&gt;&lt;br /&gt;
What I really like about the offices at Google is that each of them has their own local feel and personality. Google encourages this! For instance, the office here in Kirkland has a climbing wall, boats and all the conference rooms in our building are named after local bands in the area. The office in Seattle has kayaks and the New York office has an actual food truck in its cafeteria.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What’s the future of testing at Google?&lt;/b&gt;&lt;br /&gt;
I think the future is really bright. We have a lot of flexibility to make a big impact on quality, testability and improving our release velocity. We need to release new features faster and with good quality. The problems that we face are complex and at an extreme scale. We need engineering teams focused on ensuring that we have efficient ways to simulate and test. There will always be a need for testers and developers that focus on these areas here at Google.&lt;br /&gt;
&lt;br /&gt;
Interested in &lt;a href="http://goo.gl/2RDKj"&gt;test jobs at Google&lt;/a&gt;?&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=NoGVjoQlydQ:-f0UbXM3yAM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=NoGVjoQlydQ:-f0UbXM3yAM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=NoGVjoQlydQ:-f0UbXM3yAM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/NoGVjoQlydQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/2141901324499719420/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/09/conversation-with-test-engineer.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2141901324499719420?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2141901324499719420?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/NoGVjoQlydQ/conversation-with-test-engineer.html" title="Conversation with a Test Engineer" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/--ob5yQA5e7w/UFntL46s_PI/AAAAAAAAAPs/-ep49qPrRv0/s72-c/alan.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/09/conversation-with-test-engineer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMNQH04eyp7ImA9WhBXGUk.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-7093760927597907920</id><published>2012-08-30T17:44:00.000-07:00</published><updated>2013-04-02T15:08:11.333-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T15:08:11.333-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tony Voellm" /><title>Testing 2.0</title><content type="html">&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;i&gt;By Anthony F. Voellm (aka Tony the perfguy)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;It’s amazing what has happened in the field of test in the last 20 years... a lot of “art” has turned into “science”. Computer scientists, engineers, and many other disciplines have worked on &lt;a href="http://en.wikipedia.org/wiki/Automated_theorem_proving"&gt;provable systems and calculus&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Model_based_testing"&gt;pioneered model based testing&lt;/a&gt;, invented &lt;a href="http://en.wikipedia.org/wiki/Fuzzing"&gt;security fuzz testing&lt;/a&gt;, and even settled on a common pattern for unit tests called &lt;a href="http://en.wikipedia.org/wiki/XUnit"&gt;xunit&lt;/a&gt;. The xunit pattern shows up in open source software like JUnit as well as in Microsoft development &lt;a href="http://msdn.microsoft.com/en-us/library/dd380763.aspx"&gt;test tools&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;With all this innovation in test, there’s no wonder &lt;a href="http://www.youtube.com/watch?v=X1jWe5rOu3g"&gt;test is dead&lt;/a&gt;. &amp;nbsp;The situation is no different from the late 1800’s when &lt;a href="http://tomreeder.wordpress.com/2010/01/07/the-patent-office-legend/"&gt;patents were declared dead&lt;/a&gt;. Everything had been invented. So now that everything in test has been invented, it’s dead.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Well... if you believe everything in test has been invented then please stop reading now :)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;As an aside: &amp;nbsp;“&lt;a href="http://www.youtube.com/watch?v=X1jWe5rOu3g"&gt;Test is dead&lt;/a&gt;” was a keynote at the Google Test Automation Conference (GTAC) in 2011. &amp;nbsp;You can watch that talk and many other GTAC test talks on YouTube, and I definitely recommend you check them out &lt;a href="http://www.youtube.com/results?search_query=google+test+automation+conference+GTAC&amp;amp;oq=google+test+automation+conference+GTAC&amp;amp;gs_l=youtube.3...4802.6080.0.6294.5.5.0.0.0.0.79.250.5.5.0...0.0...1ac.kN7P0oFI1Ck"&gt;here&lt;/a&gt;. &amp;nbsp;Talks span a wide range of topics ranging from &lt;a href="http://www.youtube.com/watch?v=OsNkcUq0veI"&gt;GUI Automation&lt;/a&gt; to &lt;a href="http://www.youtube.com/watch?v=nXIA3VYN1To"&gt;Cloud&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What really excites me these days is that we have closed a chapter on test. A lot of the foundation of writing and testing great software has been laid (examples at the beginning of the post, tools like Webdriver for UI, FIO for storage, and much more), which I think of as Testing 1.0. We all use Testing 1.0 day in and day out. In fact at Google, most of the developers (called Software Engineers or SWEs) do the basic Testing 1.0 work and we have a high bar on quality. &amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Donald_knuth"&gt;Knuth&lt;/a&gt; once said "Be careful about using the following code -- I've only proven that it works, I haven't tested it."&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;This brings us to the current chapter in test which I call Testing 1.5. &amp;nbsp;This chapter is being written by computer scientists, applied scientists, engineers, developers, statisticians, and many other disciplines. &amp;nbsp;These people come together in the Software Engineer in Test (&lt;a href="http://googletesting.blogspot.com/2012/08/covering-all-your-codebases.html"&gt;SET&lt;/a&gt;) and Test Engineer (TE) roles at Google. SET/TEs focus on; developing software faster, building it better the first time, testing it in depth, releasing it quicker, and making sure it works in all environments. &amp;nbsp;We often put deep test focus on Security, Reliability and Performance. &amp;nbsp;I sometimes think of the SET/TE’s as risk assessors whose role is to figure out the probability of finding a bug, and then working to reduce that probability. Super interesting computer science problems where we take a solid engineering approach, rather than a process oriented / manual / people intensive based approach. &amp;nbsp;We always look to scale with machines wherever possible.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;While Testing 1.0 is done and 1.5 is alive and well, it’s Testing 2.0 that gets me up early in the morning to start my day. Imagine if we could reinvent how we use and think about tests. &amp;nbsp;What if we could automate the complex decisions on good and bad quality that humans are still so good at today? What would it look like if we had a system collecting all the “quality signals” (think: tests, production information, developer behavior, …) and could predict how good the code is today, and what it most likely will be tomorrow? That would be so awesome...&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Google is working on Testing 2.0 and we’ll continue to contribute to Testing 1.0 and 1.5. Nothing is static... keep up or miss an amazing &lt;a href="http://goo.gl/2RDKj"&gt;ride&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Peace.... Tony&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;i&gt;Special thanks to Chris, Simon, Anthony, Matt, Asim, Ari, Baran, Jim, Chaitali, Rob, Emily, Kristen, Annie, and many others for providing input and suggestions for this post.&lt;/i&gt;&lt;/span&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=2AEWffPu22o:D_FyAgcX3Jw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=2AEWffPu22o:D_FyAgcX3Jw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=2AEWffPu22o:D_FyAgcX3Jw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/2AEWffPu22o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/7093760927597907920/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/08/testing-20.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/7093760927597907920?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/7093760927597907920?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/2AEWffPu22o/testing-20.html" title="Testing 2.0" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><thr:total>3</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/08/testing-20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08CSX46eSp7ImA9WhBXGU0.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-4855659507592727347</id><published>2012-08-20T17:27:00.000-07:00</published><updated>2013-04-02T06:37:48.011-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T06:37:48.011-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="APIs" /><category scheme="http://www.blogger.com/atom/ns#" term="Anthony Vallone" /><title>Testing Google's New API Infrastructure</title><content type="html">&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;By Anthony Vallone&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If you haven’t noticed, Google has been launching &lt;a href="https://developers.google.com/apis-explorer/#p/"&gt;many public APIs&lt;/a&gt; recently. These APIs are empowering mobile app, desktop app, web service, and website developers by providing easy access to Google tools, services, and data. In the past couple of years, we have invested heavily in building a new API infrastructure for our APIs. Before this infrastructure, our teams had numerous technical challenges to solve when releasing an API: scalability, authorization, quota, caching, billing, client libraries, translation from external REST requests to internal RPCs, etc. The new infrastructure generically solves these problems and allows our teams to focus on their service. Automating testing of these new APIs turned out to be quite a large problem. Our solution to this problem is somewhat unique within Google, and we hope you find it interesting.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;System Under Test (SUT)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Let’s start with a simplified view of the SUT design:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-Qapl5fSCIO0/UDLT79IUMAI/AAAAAAAAAOs/2-FnqPQWL7g/s1600/api-sut.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Qapl5fSCIO0/UDLT79IUMAI/AAAAAAAAAOs/2-FnqPQWL7g/s1600/api-sut.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;A developer’s application uses a Google-supplied API Client Library to call Google API methods. The library connects to the API Infrastructure service and sends the request. Part of the request defines the particular API and version being used by the client. This service is knowledgeable of all Google APIs, because they are defined by API Configuration files. These files are created by each API providing team. Configuration files declare API versions, methods, method parameters, and other API settings. Given an API request and information about the API, the API Infrastructure Service can translate the request to Google’s internal RPC format and pass it to the correct API Provider Service. This service then satisfies the request and passes the response back to the developer’s app via the API Infrastructure Service and API Client Library.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Now, the Fun Part&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;As of this writing, we have released 10 &lt;a href="https://developers.google.com/api-client-library/"&gt;language-specific client libraries&lt;/a&gt; and 35 public APIs built on this infrastructure. Also, each of the libraries need to work on multiple platforms. Our test space has three dimensions: API (35), language (10), and platform (varies by lib). How are we going to test all the libraries on all the platforms against all the APIs when we only have two engineers on the team dedicated to test automation?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Step 1: Create a Comprehensive API&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Each API uses different features of the infrastructure, and we want to ensure that every feature works. Rather than use the APIs to test our infrastructure, we create a Test API that uses every feature. In some cases where API configuration options are mutually exclusive, we have to create API versions that are feature-specific. Of course, each API team still needs to do basic integration testing with the infrastructure, but they can assume that the infrastructure features that their API depends on are well tested by the infrastructure team.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Step 2: Client Abstraction Layer in the Tests&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We want to avoid creating library-specific tests, because this would lead to mass duplication of test logic. The obvious solution is to create a test library to be used by all tests as an abstraction layer hiding the various libraries and platforms. This allows us to define tests that don’t care about library or platform.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Step 3: Adapter Servers&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;When a test library makes an API call, it should be able to use any language and platform. We can solve this by setting up servers on each of our target platforms. For each target language, create a language-specific server. These servers receive requests from test clients. The servers need only translate test client requests into actual library calls and return the response to the caller. The code for these servers is quite simple to create and maintain.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Step 4: Iterate&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Now, we have all the pieces in place. When we run our tests, they are configured to run over all supported languages and platforms against the test API:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-WdJ4_srcEn4/UDgKas7pOEI/AAAAAAAAAPM/NCMvHSV5g7k/s1600/api-adapter2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-WdJ4_srcEn4/UDgKas7pOEI/AAAAAAAAAPM/NCMvHSV5g7k/s1600/api-adapter2.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Test Nirvana Achieved&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;We have a suite of straightforward tests that focus on infrastructure features. When the tests run, they are quick, reliable, and test all of our supported features, platforms, and libraries. When a feature is added to the API infrastructure, we only need to create one new test, update each adapter server to handle a new call type, and add the feature to the Test API.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=m5U70ONqmTU:EKtq8_16vYg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=m5U70ONqmTU:EKtq8_16vYg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=m5U70ONqmTU:EKtq8_16vYg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/m5U70ONqmTU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/4855659507592727347/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/08/testing-googles-new-api-infrastructure.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/4855659507592727347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/4855659507592727347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/m5U70ONqmTU/testing-googles-new-api-infrastructure.html" title="Testing Google's New API Infrastructure" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Qapl5fSCIO0/UDLT79IUMAI/AAAAAAAAAOs/2-FnqPQWL7g/s72-c/api-sut.png" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/08/testing-googles-new-api-infrastructure.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GQno6eip7ImA9WhJXF04.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-7345919547454496350</id><published>2012-08-11T10:41:00.000-07:00</published><updated>2012-08-11T19:50:23.412-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-11T19:50:23.412-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>Covering all your codebases: A conversation with a Software Engineer in Test</title><content type="html">&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Cross-posted from the &lt;a href="http://googleforstudents.blogspot.com/2012/05/covering-all-your-codebases.html"&gt;Google Student Blog&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Today we’re featuring Sabrina Williams, a Software Engineer in Test who joined Google in August 2011. Software Engineers in Test undertake a broad range of challenges on a daily basis, designing and building intelligent systems that can explore various use cases and scenarios for distributed computing infrastructure. Read on to learn more about Sabrina’s path to Google and what she works on now that she’s here!&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-FCmJ-f6baKE/UCaWN2joSJI/AAAAAAAAAOM/kBrZuijpvSY/s1600/sabrinaw.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="276" src="http://4.bp.blogspot.com/-FCmJ-f6baKE/UCaWN2joSJI/AAAAAAAAAOM/kBrZuijpvSY/s320/sabrinaw.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Tell us about yourself and how you got to Google.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;I grew up in rural Prunedale, Calif. and went to Stanford where I double-majored in philosophy and computer science. After college I spent six years as a software engineer at HP, working primarily on printer drivers. I began focusing on testing my last two years there—reading books, looking up information and prototyping test tools in my own time. By the time I left, I’d started a project for an automated test framework that most of our lab used.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;I applied for a software engineering role at Google four years ago and didn’t do well in my interviews. Thankfully, a Google recruiter called last year and set me up for software engineer (SWE) interviews again. After a day of talking about testing and mocking for every design question I answered, I was told that there were opportunities for me in SWE and SET. I ended up choosing the SET role after speaking with the SET hiring manager. He said two things that convinced me. First, SETs spend as much time coding as SWEs, and I wanted a role where I could write code. Second, the SETs job is to creatively solve testing problems, which sounded more interesting to me than writing features for a product. This seemed like a really unique and appealing opportunity, so I took it!&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;


&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;So what exactly do SETs do?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;SETs are SWEs who are really into testing. We help SWEs design and refactor their code so that it is more testable. We work with test engineers (TEs) to figure out how to automate difficult test cases. We also write harnesses, frameworks and tools to make test automation possible. SETs tend to have the best understanding of how everything plays together (production code, manual tests, automated tests, tools, etc.) and we have to make that information accessible to everyone on the team.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;


&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What project do you work on?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;I work on the &lt;a href="http://www.google.com/cloudprint/learn/"&gt;Google Cloud Print&lt;/a&gt; team. Our goal is to make it possible to print anywhere from any device. You can use Google Cloud Print to connect home and work printers to the web so that you (and anyone you share your printers with) can access them from your phone, tablet, Chromebook, PC or any other supported web-connected device.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;


&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;What advice would you give to aspiring SETs?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;First, for computer science majors in general: if there’s any other field about which you are passionate, at least minor in it. CS is wonderfully chameleonic in that it can be applied to anything. So if, for example, you love art history, minor in art and you can write software to help restore images of old paintings.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;For aspiring SETs, challenge yourself to write tests for all of the code you write for school. If you can get an internship where you have access to a real-world code base, study how that company approaches testing their code. If it’s well-tested, see how they did it. If it’s not well-tested, think about how you would test it. I don’t (personally) know of a CS program that has even a full course based on testing, so you’ll have to teach yourself. Start by looking up buzzwords like “unit test” and “test-driven development.” Look up the different types of tests (unit, integration, component, system, etc.). Find a code coverage tool (if a free/cheap one is available for your language of choice) and see how well you’re covering your code with your tests. Write a tool that will run all of your tests every time you build your code. If all of this sounds like fun...well...we need more people like you!&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;If you’re interested in applying for a Software Engineer in Test position, please apply for our general &lt;a href="http://goo.gl/4KWWa"&gt;Software Engineer&lt;/a&gt; position, then indicate in your resume objective line that you’re interested in the SET role.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;i&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Posted by Jessica Safir, University Programs&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=kNbPYWW-4gk:cLyAjlc3OkA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=kNbPYWW-4gk:cLyAjlc3OkA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=kNbPYWW-4gk:cLyAjlc3OkA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/kNbPYWW-4gk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/7345919547454496350/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/08/covering-all-your-codebases.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/7345919547454496350?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/7345919547454496350?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/kNbPYWW-4gk/covering-all-your-codebases.html" title="Covering all your codebases: A conversation with a Software Engineer in Test" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-FCmJ-f6baKE/UCaWN2joSJI/AAAAAAAAAOM/kBrZuijpvSY/s72-c/sabrinaw.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/08/covering-all-your-codebases.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08CSX46eyp7ImA9WhBXGU0.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-7625424751797977655</id><published>2012-08-04T11:11:00.000-07:00</published><updated>2013-04-02T06:37:48.013-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T06:37:48.013-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Anthony Vallone" /><title>Welcome to the Next Generation of Google Testing</title><content type="html">&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;By Anthony Vallone&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Wow... it has been a long time since we’ve posted to the blog. This past year has been a whirlwind of change for many test teams as Google has restructured leadership with a focus on products. Now that the dust has settled, our teams are leaner, more focused, and more effective. We have learned quite a bit over the past year about how best to tackle and manage test problems at monumental scale. The next generation of test teams at Google are looking forward to sharing all that we have learned. Stay tuned for a revived Google Testing Blog that will provide deep insight into our latest testing technologies and strategies.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=V-pqPphX9vQ:8i5sDeAc-is:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=V-pqPphX9vQ:8i5sDeAc-is:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=V-pqPphX9vQ:8i5sDeAc-is:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/V-pqPphX9vQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/7625424751797977655/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2012/08/welcome-to-next-generation-of-google.html#comment-form" title="13 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/7625424751797977655?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/7625424751797977655?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/V-pqPphX9vQ/welcome-to-next-generation-of-google.html" title="Welcome to the Next Generation of Google Testing" /><author><name>Anthony Vallone</name><uri>http://www.blogger.com/profile/12778167230770494358</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-mMMvj_rgsRA/UWrU8owVDWI/AAAAAAAAASc/AL8qyALz3m4/s220/avallone.png" /></author><thr:total>13</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2012/08/welcome-to-next-generation-of-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcCRHw-fyp7ImA9WhBXGUg.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-8181824926851031728</id><published>2011-11-17T05:26:00.001-08:00</published><updated>2013-04-02T18:37:45.257-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T18:37:45.257-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RPF" /><category scheme="http://www.blogger.com/atom/ns#" term="Jason Arbon" /><category scheme="http://www.blogger.com/atom/ns#" term="BITE" /><title>RPF: Google's Record Playback Framework</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
By Jason Arbon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span id="internal-source-marker_0.25297700078226626" style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;At &lt;/span&gt;&lt;a href="http://www.gtac.biz/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;GTAC&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, folks asked how well the Record/Playback (RPF) works in the Browser Integrated Test Environment (&lt;/span&gt;&lt;a href="http://googletesting.blogspot.com/2011/10/take-bite-out-of-bugs-and-redundant.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;BITE&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;). We were originally skeptical ourselves, but figured somebody should try. Here is some anecdotal data and some background on how we started measuring the quality of RPF.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The idea is to just let users use the application in the browser, record their actions, and save them as a javascript to play back as a regression test or repro later. Like most test tools, especially code generating ones, it works most of the time but its not perfect. Po Hu had an early version working, and decided to test this out on a real world product. Po, the developer of RPF, worked with the chrome web store team to see how an early version would work for them. Why &lt;/span&gt;&lt;a href="https://chrome.google.com/webstore/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;chrome web store&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;? It is a website with lots of data-driven UX, authentication, file upload, and it was changing all the time and breaking existing &lt;/span&gt;&lt;a href="http://seleniumhq.org/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;Selenium&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; scripts: a pretty hard web testing problem, only targeted the chrome browser, and most importantly they were sitting 20 feet from us. &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Before sharing with the chrome web store test developer Wensi Liu, we invested a bit of time in doing something we thought was clever: fuzzy matching and inline updating of the test scripts. Selenium rocks, but after an initial regression suite is created, many teams end up spending a lot of time simply maintaining their Selenium tests as the products constantly change. Rather than simply fail like the existing Selenium automation would do when a certain element isn’t found, and require some manual DOM inspection, updating the Java code and re-deploying, re-running, re-reviewing the test code what if the test script just kept running and updates to the code could be as simple as point and click? We would keep track of all the attributes in the element recorded, and when executing we would calculate the percent match between the recorded attributes and values and those found while running. If the match isn’t exact, but within tolerances (say only its parent node or class attribute had changed), we would log a warning and keep executing the test case. If the next test steps appeared to be working as well, the tests would keep executing during test passes only log warnings, or if in debug mode, they would pause and allow for a quick update of the matching rule with point and click via the BITE UI. We figured this might reduce the number of false-positive test failures and make updating them much quicker.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We were wrong, but in a good way!&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We talked to the tester after a few days of leaving him alone with RPF. He’d already re-created most of his Selenium suite of tests in RPF, and the tests were already breaking because of product changes (its a tough life for a tester at google to keep up with the developers rate of change). He seemed happy, so we asked him how this new fuzzy matching fanciness was working, or not. Wensi was like “oh yeah, that? Don’t know. Didn’t really use it...”. We started to think how our update UX could have been confusing or not discoverable, or broken. Instead, Wensi said that when a test broke, it was just far easier to re-record the script. He had to re-test the product anyway, so why not turn recording on when he manually verified things were still working, remove the old test and save this newly recorded script for replay later? &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;During that first week of trying out RPF, Wensi found:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;77% of the features in Webstore were testable by RPF&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Generating regression test scripts via this early version of RPF was about 8X faster than building them via Selenium/WebDriver&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The RPF scripts caught 6 functional regressions and many more intermittent server failures.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Common setup routines like login should be saved as modules for reuse (a crude version of this was working soon after)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;RPF worked on Chrome OS, where Selenium by definition could never run as it required client-side binaries. RPF worked because it was a pure cloud solution, running entirely within the browser, communicating with a backend on the web.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Bugs filed via bite, provided a simple link, which would install BITE on the developers machine and re-execute the repros on their side. No need for manually crafted repro steps. This was cool.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Wensi wished RPF was cross browser. It only worked in Chrome, but people did occasionally visit the site with a non-Chrome browser.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;So, we knew we were onto something interesting and continued development. In the near term though, chrome web store testing went back to using Selenium because that final 23% of features required some local Java code to handle file upload and secure checkout scenarios. In hindsight, a little testability work on the server could have solved this with some AJAX calls from the client.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We performed a check of how RPF faired on some of the top sites of the web. This is shared on the &lt;/span&gt;&lt;a href="https://docs.google.com/spreadsheet/ccc?key=0AsbIZrIYVyF0dEJGQV91WW9McW1fMjItRmhzcWkyanc"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;BITE project wiki&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. This is now a little bit out of date, with lots more fixes, but it gives you a feel for what doesn’t work. Consider it Alpha quality at this point. It works for most scenarios, but there are still some serious corner cases. &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Joe Muharsky drove a lot of the UX (user experience) design for BITE to turn our original and clunky developer and functional-centric UX into something intuitive. Joe’s key focus was to keep the UX out of the way until it is needed, and make things as self-discoverable and findable as possible. We’ve haven't done formal usability studies yet, but have done several experiments with external crowd testers using these tools, with minimal instructions, as well as internal dogfooders filing bugs against Google Maps with little confusion. Some of the fancier parts of RPF have some hidden easter eggs of awkwardness, but the basic record and playback scenarios seem to be obvious to folks.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;RPF has graduated from the experimental centralized test team to be a formal part of the Chrome team, and used regularly for regression test passes. The team also has an eye on enabling non-coding crowd sourced testers generate regression scripts via BITE/RPF.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Please join us in maintaining &lt;/span&gt;&lt;a href="http://code.google.com/p/bite-project/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;BITE/RPF&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, and be nice to Po Hu and Joel Hynoski who are driving this work forward within Google. &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=0IyDVwm9R0c:ACT6cBZHgCQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=0IyDVwm9R0c:ACT6cBZHgCQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=0IyDVwm9R0c:ACT6cBZHgCQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/0IyDVwm9R0c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/8181824926851031728/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2011/11/rpf-googles-record-playback-framework.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/8181824926851031728?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/8181824926851031728?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/0IyDVwm9R0c/rpf-googles-record-playback-framework.html" title="RPF: Google's Record Playback Framework" /><author><name>James Whittaker</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://4.bp.blogspot.com/_9ywu5aylLpo/Si2Q6zzZexI/AAAAAAAAAAM/AEIWjunK8uE/S220/PA030048.JPG" /></author><thr:total>9</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2011/11/rpf-googles-record-playback-framework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EESH06fip7ImA9WhJXEEw.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-2702459051349044892</id><published>2011-11-15T07:30:00.001-08:00</published><updated>2012-08-03T10:40:09.316-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-03T10:40:09.316-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><title>GTAC Videos Now Available</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
By James Whittaker&lt;br /&gt;
&lt;br /&gt;
All the GTAC 2011 talks are now available at&amp;nbsp;&lt;a href="http://www.gtac.biz/talks" style="background-color: rgba(255, 255, 255, 0.917969); color: #1155cc; font-family: arial, sans-serif; font-size: 14px; text-align: -webkit-auto;" target="_blank"&gt;http://www.gtac.biz/talks&lt;/a&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px; text-align: -webkit-auto;"&gt;&amp;nbsp;and also up on You Tube. A hearty thanks to all the speakers who helped make this the best GTAC ever.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 14px; text-align: -webkit-auto;"&gt;Enjoy!&lt;/span&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=HsjVMEue-SI:d1bML8x64RI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=HsjVMEue-SI:d1bML8x64RI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=HsjVMEue-SI:d1bML8x64RI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/HsjVMEue-SI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/2702459051349044892/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2011/11/gtac-videos-now-available.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2702459051349044892?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2702459051349044892?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/HsjVMEue-SI/gtac-videos-now-available.html" title="GTAC Videos Now Available" /><author><name>James Whittaker</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://4.bp.blogspot.com/_9ywu5aylLpo/Si2Q6zzZexI/AAAAAAAAAAM/AEIWjunK8uE/S220/PA030048.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2011/11/gtac-videos-now-available.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMRns7cSp7ImA9WhBWEEo.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-2139052876781135390</id><published>2011-10-25T16:02:00.000-07:00</published><updated>2013-04-04T05:04:47.509-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-04T05:04:47.509-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="ScriptCover" /><category scheme="http://www.blogger.com/atom/ns#" term="Coverage" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="Ekaterina Kamenskaya" /><title>ScriptCover makes Javascript coverage analysis easy</title><content type="html">&lt;span class="Apple-style-span" style="background-color: white; color: #1e1e1e; font-family: inherit; white-space: pre-wrap;"&gt;By Ekaterina Kamenskaya, Software Engineer in Test, YouTube&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-indent: 36pt;"&gt;
&lt;span style="background-color: white; color: #1e1e1e; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Today we introduce the Javascript coverage analysis tool&lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="http://code.google.com/p/script-cover/"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;ScriptCover&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. It is a Chrome extension that provides line-by-line Javascript code coverage statistics for web pages in real time without any user modifications required. The results are collected both when the page loads and as users interact with it. &lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The tool reports details about total web page coverage and for each external/internal script, as well as annotated code sources with individually highlighted executed lines.

&lt;/span&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/-tGgMCJzqsUg/UCFPMKeSqFI/AAAAAAAAAN0/XBmruGAzQpA/s1600/ek1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center; text-indent: 36pt;"&gt;&lt;img border="0" height="454" src="http://4.bp.blogspot.com/-tGgMCJzqsUg/UCFPMKeSqFI/AAAAAAAAAN0/XBmruGAzQpA/s640/ek1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: white; color: #1e1e1e; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: white; color: #1e1e1e; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Short report in Chrome extension’s popup, detailing both overall scores and per-script coverage. &lt;/span&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #1e1e1e; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: white; color: #1e1e1e; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Main features:&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: transparent; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Report current and previous total Javascript coverage percentages and total number of instrumented code instructions.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Report Javascript coverage per individual instruction for each internal and external script.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Display detailed reports with annotated Javascript source code.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Recalculate coverage statistics while loading the page and on user actions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-qh8lX8HaRrc/UCFPbTo6qLI/AAAAAAAAAN8/_3-qimC3BLs/s1600/ek2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://3.bp.blogspot.com/-qh8lX8HaRrc/UCFPbTo6qLI/AAAAAAAAAN8/_3-qimC3BLs/s640/ek2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: white; color: #1e1e1e; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sample of annotated source code from detailed report. First two columns are line number and number of times each instruction has been executed.&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: white; color: #1e1e1e; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Here are the benefits of &lt;/span&gt;&lt;a href="https://code.google.com/p/script-cover/"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;ScriptCover&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; over other existing tools:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: white; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Per instructions coverage for external and internal scripts:&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; The tool formats original external and internal Javascript code from ‘&amp;lt;script&amp;gt;’ tags to ideally place one instruction per line and then calculates and displays Javascript coverage statistics. &lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;It is useful even when the code is compressed to one line.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: white; color: #1e1e1e; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: white; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Dynamic:&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; Users can get updated Javascript coverage statistics while the web page is loading and while interacting with the page.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: white; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: white; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Easy to use:&lt;/span&gt;&lt;span style="text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; Users with different levels of expertise can install and use the tool to analyse coverage. Additionally, there is no need to write tests, modify the web application’s code, save the inspected web page locally, manually change proxy settings, etc. &lt;/span&gt;&lt;span style="color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;When the extension is activated in a Chrome browser, users just navigate through web pages and get coverage statistics on the fly.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: white; color: #1e1e1e; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style="background-color: white; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="color: #1e1e1e; font-family: inherit; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;It’s free and open source!&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: transparent; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Want to try it out? &lt;/span&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Install &lt;/span&gt;&lt;a href="https://code.google.com/p/script-cover/"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;ScriptCover&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; and let us know what you think&lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-family: inherit; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We envision many potential features and improvements for &lt;/span&gt;&lt;a href="https://code.google.com/p/script-cover"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;ScriptCover.&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; If you are passionate about code coverage, read our &lt;/span&gt;&lt;a href="https://code.google.com/p/script-cover/w/list"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;and &lt;/span&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;participate in &lt;/span&gt;&lt;a href="http://groups.google.com/group/script-cover"&gt;&lt;span style="background-color: transparent; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;discussion group&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. &lt;/span&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Your contributions to the project’s &lt;/span&gt;&lt;a href="https://code.google.com/p/script-cover/wiki/ScriptCoverDesign"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;design&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, &lt;/span&gt;&lt;a href="https://code.google.com/p/script-cover/source/browse/"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;code base &lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;and &lt;/span&gt;&lt;a href="https://code.google.com/p/script-cover/issues/list"&gt;&lt;span style="background-color: white; color: #000099; vertical-align: baseline; white-space: pre-wrap;"&gt;feature requests&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #1e1e1e; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; are welcome! &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=RKFuR3AXX9Y:l5moaoZB50o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=RKFuR3AXX9Y:l5moaoZB50o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=RKFuR3AXX9Y:l5moaoZB50o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/RKFuR3AXX9Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/2139052876781135390/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2011/10/scriptcover-makes-javascript-coverage.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2139052876781135390?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2139052876781135390?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/RKFuR3AXX9Y/scriptcover-makes-javascript-coverage.html" title="ScriptCover makes Javascript coverage analysis easy" /><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-tGgMCJzqsUg/UCFPMKeSqFI/AAAAAAAAAN0/XBmruGAzQpA/s72-c/ek1.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2011/10/scriptcover-makes-javascript-coverage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4CQnw9cCp7ImA9WhBXGUk.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-2148517028552401960</id><published>2011-10-19T13:03:00.000-07:00</published><updated>2013-04-02T15:16:03.268-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T15:16:03.268-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Jim Reardon" /><category scheme="http://www.blogger.com/atom/ns#" term="Test Analytics" /><title>Google Test Analytics - Now in Open Source</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span id="internal-source-marker_0.7736793777439743" style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;By &lt;/span&gt;&lt;span style="background-color: transparent; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"&gt;Jim Reardon&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The test plan is dead!&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Well, hopefully. &amp;nbsp;At a STAR West session this past week, &lt;/span&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"&gt;J&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"&gt;ames Whittaker&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; asked a group of test professionals about test plans. &amp;nbsp;His first question: “How many people here write test plans?” &amp;nbsp;About 80 hands shot up instantly, a vast majority of the room. &amp;nbsp;“How many of you get value or refer to them again after a week?” &amp;nbsp;Exactly three people raised their hands.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;That’s a lot of time being spent writing documents that are often long-winded, full of paragraphs of details on a project everyone already knows to get abandoned so quickly.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;A group of us at Google set about creating a methodology that can replace a test plan -- it needed to be comprehensive, quick, actionable, and have sustained value to a project. &amp;nbsp;In the past few weeks, James has posted a few blogs about this methodology, which we’ve called ACC. &amp;nbsp;It's a tool to break down a software product into its constituent parts, and the method by which we created "10 Minute Test Plans" (that only take 30 minutes!)&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Comprehensive&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The ACC methodology creates a matrix that describes your project completely; several projects that have used it internally at Google have found coverage areas that were missing in their conventional test plans.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Quick&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The ACC methodology is fast; we’ve created ACC breakdowns for complex projects in under half an hour. &amp;nbsp;Far faster than writing a conventional test plan.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Actionable&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As part of your ACC breakdown, risk is assessed to the capabilities of your appliciation. &amp;nbsp;Using these values, you get a heat map of your project, showing the areas with the highest risk -- great places to spend some quality time testing.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Sustained Value&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We’ve built in some experimental features that bring your ACC test plan to life by importing data signals like bugs and test coverage that quantify the risk across your project.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Today, I'm happy to announce we're &lt;/span&gt;&lt;a href="http://code.google.com/p/test-analytics"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"&gt;open sourcing Test Analytics&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, a tool built at Google to make generating an ACC simple -- and which brings some experimental ideas we had around the field of risk-based testing that work hand-in-hand with the ACC breakdown.&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-t873f8PpQaY/UBwK4O8uvrI/AAAAAAAAAMQ/dwVICl1RimE/s1600/1-Attributes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://1.bp.blogspot.com/-t873f8PpQaY/UBwK4O8uvrI/AAAAAAAAAMQ/dwVICl1RimE/s320/1-Attributes.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;span style="background-color: transparent; font-size: 10pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Defining a project’s ACC model.&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Test Analytics has two main parts: first and foremost, it's a step-by-step tool to create an ACC matrix that's faster and much simpler than the Google Spreadsheets we used before the tool existed. &amp;nbsp;It also provides visualizations of the matrix and risks associated with your ACC Capabilities that were difficult or impossible to do in a simple spreadsheet.&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-BZtUDMLdwG4/UBwLCBDN1jI/AAAAAAAAAMY/ZdTmW_xYNjA/s1600/2-Capabilities.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="253" src="http://2.bp.blogspot.com/-BZtUDMLdwG4/UBwLCBDN1jI/AAAAAAAAAMY/ZdTmW_xYNjA/s320/2-Capabilities.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;span style="background-color: transparent; font-size: 10pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;A project’s Capabilities grid.&lt;/span&gt;&lt;span style="background-color: transparent; font-size: 10pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The second part is taking the ACC plan and making it a living, automatic-updating risk matrix. &amp;nbsp;Test Analytics does this by importing quality signals from your project: Bugs, Test Cases, Test Results, and Code Changes. &amp;nbsp;By importing these data, Test Analytics lets you visualize risk that isn't just estimated or guessed, but based on quantitative values. &amp;nbsp;If a Component or Capability in your project has had a lot of code change or many bugs are still open or not verified as working, the risk in that area is higher. &amp;nbsp;Test Results can provide a mitigation to those risks -- if you run tests and import passing results, the risk in an area gets lower as you test.&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-HzZdQvRghvs/UBwLOBeoy-I/AAAAAAAAAMg/7RoxQlFMtfo/s1600/3-Risk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://3.bp.blogspot.com/-HzZdQvRghvs/UBwLOBeoy-I/AAAAAAAAAMg/7RoxQlFMtfo/s320/3-Risk.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;span style="background-color: transparent; font-size: 10pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;A project’s risk, calculated as a factor of inherent risk as well as imported quality signals.&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This part's still experimental; we're playing around with how we calculate risk based on these signals to best determine risk. &amp;nbsp;However, we wanted to release this functionality early so we can get feedback from the testing community on how well it works for teams so we can iterate and make the tool even more useful. &amp;nbsp;It'd also be great to import even more quality signals: code complexity, static code analysis, code coverage, external user feedback and more are all ideas we've had that could add an even higher level of dynamic data to your test plan.&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-tk56hDpZrX4/UBwLVwCkUHI/AAAAAAAAAMo/s5Qq0tQfprQ/s1600/4-Imported+Data+Summary.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-tk56hDpZrX4/UBwLVwCkUHI/AAAAAAAAAMo/s5Qq0tQfprQ/s320/4-Imported+Data+Summary.png" width="296" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;span style="background-color: transparent; font-size: 10pt; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;An overview of test results, bugs, and code changes attributed to a project’s capability. &amp;nbsp;The Capability’s total risk is affected by these factors. &lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;You can check out a &lt;/span&gt;&lt;a href="https://test-analytics.appspot.com/"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"&gt;live hosted version&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, browse or check out &lt;/span&gt;&lt;a href="http://code.google.com/p/test-analytics"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"&gt;the code&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; along with &lt;/span&gt;&lt;a href="http://code.google.com/p/test-analytics/wiki/AccExplained"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"&gt;documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, and of course if you have any feedback let us know - there's a &lt;/span&gt;&lt;a href="http://groups.google.com/group/test-analytics-discuss"&gt;&lt;span style="background-color: transparent; color: #000099; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"&gt;Google Group set up for discussion&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, where we'll be active in responding to questions and sharing our experiences with Test Analytics so far.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; font-size: 12pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Long live the test plan!&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=UvTN146F2bg:lXlGjWr4GrE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=UvTN146F2bg:lXlGjWr4GrE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=UvTN146F2bg:lXlGjWr4GrE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/UvTN146F2bg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/2148517028552401960/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2011/10/google-test-analytics-now-in-open.html#comment-form" title="16 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2148517028552401960?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/2148517028552401960?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/UvTN146F2bg/google-test-analytics-now-in-open.html" title="Google Test Analytics - Now in Open Source" /><author><name>James Whittaker</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://4.bp.blogspot.com/_9ywu5aylLpo/Si2Q6zzZexI/AAAAAAAAAAM/AEIWjunK8uE/S220/PA030048.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-t873f8PpQaY/UBwK4O8uvrI/AAAAAAAAAMQ/dwVICl1RimE/s72-c/1-Attributes.png" height="72" width="72" /><thr:total>16</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2011/10/google-test-analytics-now-in-open.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4HQ3k6fSp7ImA9WhBWEEo.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-5537504377629238596</id><published>2011-10-17T10:38:00.000-07:00</published><updated>2013-04-04T05:02:12.715-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-04T05:02:12.715-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Aaron Jacobs" /><title>Google JS Test, now in Open Source</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 15px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="padding-bottom: 0px;"&gt;
By Aaron Jacobs&lt;/div&gt;
&lt;div style="padding-bottom: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="padding-bottom: 0px;"&gt;
&lt;a href="http://code.google.com/p/google-js-test/" target="blank"&gt;Google JS Test&lt;/a&gt;&amp;nbsp;is a JavaScript unit testing framework that runs on the&amp;nbsp;&lt;a href="http://code.google.com/p/v8/" target="blank"&gt;V8 JavaScript Engine&lt;/a&gt;, the same open source project that is responsible for Google Chrome’s super-fast JS execution speed. Google JS Test is used internally by several Google projects, and we’re pleased to announce that it has been released as an open source project.&lt;br /&gt;
&lt;br /&gt;
Features of Google JS Test include:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Extremely fast startup and execution time, without needing to run a browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Clean, readable output in the case of both passing and failing tests.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;An optional browser-based test runner that can simply be refreshed whenever JS is changed.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Style and semantics that resemble&amp;nbsp;&lt;a href="http://code.google.com/p/googletest/" target="blank"&gt;Google Test&lt;/a&gt;&amp;nbsp;for C++.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;A built-in mocking framework that requires minimal boilerplate code (e.g. no&amp;nbsp;&lt;span style="font-family: 'courier new';"&gt;$tearDown&lt;/span&gt;&amp;nbsp;or&lt;span style="font-family: 'courier new';"&gt;$verifyAll&lt;/span&gt;&amp;nbsp;calls), with style and semantics based on the&amp;nbsp;&lt;a href="http://code.google.com/p/googletest/" target="blank"&gt;Google C++ Mocking Framework&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;A system of&amp;nbsp;&lt;a href="http://code.google.com/p/google-js-test/wiki/Matchers" target="blank"&gt;matchers&lt;/a&gt;&amp;nbsp;allowing for expressive tests and easy to read failure output, with many built-in matchers and the ability for the user to add their own.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-k6633PjXL0I/ToSssXafqgI/AAAAAAAAAQI/t5Ux_dHrA6E/s1600/image00.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5657836910083549698" src="http://3.bp.blogspot.com/-k6633PjXL0I/ToSssXafqgI/AAAAAAAAAQI/t5Ux_dHrA6E/s320/image00.png" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; cursor: pointer; display: block; height: 320px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: center; width: 214px;" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
See the Google JS Test&amp;nbsp;&lt;a href="http://code.google.com/p/google-js-test/" target="blank"&gt;project home page&lt;/a&gt;&amp;nbsp;for a quick introduction, and the&amp;nbsp;&lt;a href="http://code.google.com/p/google-js-test/wiki/GettingStarted" target="blank"&gt;getting started&lt;/a&gt;&amp;nbsp;page for a tutorial that will teach you the basics in just a few minutes.&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=M7_c720yjoA:W7AD-0z6dD0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=M7_c720yjoA:W7AD-0z6dD0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=M7_c720yjoA:W7AD-0z6dD0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/M7_c720yjoA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/5537504377629238596/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2011/10/google-js-test-now-in-open-source.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/5537504377629238596?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/5537504377629238596?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/M7_c720yjoA/google-js-test-now-in-open-source.html" title="Google JS Test, now in Open Source" /><author><name>James Whittaker</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://4.bp.blogspot.com/_9ywu5aylLpo/Si2Q6zzZexI/AAAAAAAAAAM/AEIWjunK8uE/S220/PA030048.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-k6633PjXL0I/ToSssXafqgI/AAAAAAAAAQI/t5Ux_dHrA6E/s72-c/image00.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2011/10/google-js-test-now-in-open-source.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcFRng_eyp7ImA9WhBXGUg.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-4224168680663407109</id><published>2011-10-12T09:21:00.000-07:00</published><updated>2013-04-02T18:36:57.643-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T18:36:57.643-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joe Allan Muharsky" /><category scheme="http://www.blogger.com/atom/ns#" term="BITE" /><title>Take a BITE out of Bugs and Redundant Labor</title><content type="html">&lt;div style="background-color: transparent; font-family: Times; font-size: medium;"&gt;
&lt;span id="internal-source-marker_0.5106434298213571" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In a time when more and more of the web is becoming streamlined, the process of filing bugs for websites remains tedious and manual. Find an issue. Switch to your bug system window. Fill out boilerplate descriptions of the problem. Switch back to the browser, take a screenshot, attach it to the issue. Type some more descriptions.  The whole process is one of context switching; from the tools used to file the bug, to gather information about it, to highlight problematic areas, most of your focus as the tester is pulled away from the very application you’re trying to test.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Browser Integrated Testing Environment, or BITE, is an open source &lt;a href="http://code.google.com/chrome/extensions/index.html"&gt;Chrome Extension&lt;/a&gt; which aims to fix the manual web testing experience. To use the extension, it must be linked to a server providing information about bugs and tests in your system. BITE then provides the ability to file bugs from the context of a website, using relevant templates.&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times; font-size: medium;"&gt;&lt;img height="367px;" src="https://lh5.googleusercontent.com/ZH7GzUXHsfo1TzxEoVmlmeh8XsXvhWfdiLiQypB7sW-cp81CExw8oOMvEF_GEcwd1tX8NgBJgFvR_8II6PDF1gMpc4ZiksQGP_bzAKyWaJ6t5mo0Z70" width="604px;" /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;When filing a bug, BITE automatically grabs screenshots, links, and problematic UI elements and attaches them to the bug.  This gives developers charged with investigating and/or fixing the bug a wealth of information to help them determine root causes and factors in the behavior.&lt;/span&gt;&lt;/div&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;img height="375px;" src="https://lh4.googleusercontent.com/Pw0rOhKvFlJ-CzcF0LuI-YkdtoLmwR4eMPHLej2dWbNnluSFLaongBcPR_ObzCgLfX_gV65zUCEdF8Aczz7E3WIhXdnVUwmMWgGt5AZreFXX3kAqfQs" width="616px;" /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;When it comes to reproducing a bug, testers will often labor to remember and accurately record the exact steps taken.  With BITE, however, every action the tester takes on the page is recorded in JavaScript, and can be played back later.  This enables engineers to quickly determine if the steps of a bug repro in a specific environment, or whether a code change has resolved the issue.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Also included in BITE is a Record/Playback console to automate user actions in a manual test.  Like the BITE recording experience, the RPF console will automatically author javascript that can be used to replay your actions at a later date.  And BITE’s record and playback mechanism is fault tolerant; UI automation tests will fail from time to time, and when they do, it tends to be for test issues, rather than product issues.  To that end, when a BITE playback fails, the tester can fix their recording in real-time, just by repeating the action on the page.  There’s no need to touch code, or report a failing test; if your script can’t find a button to click on, just click on it again, and the script will be fixed!  For those times when you do have to touch the code, we’ve used the Ace &lt;/span&gt;&lt;a href="about:blank" style="font-family: Times; font-size: medium;"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;(http://ace.ajax.org/)&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; as an inline editor, so you can make changes to your javascript in real-time.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Check out the BITE project page at &lt;a href="http://code.google.com/p/bite-project"&gt;http://code.google.com/p/bite-project&lt;/a&gt;. Feedback is welcome at bite-feedback@google.com.  Posted by Joe Allan Muharsky from the Web Testing Technologies Team (Jason Stredwick, Julie Ralph, Po Hu and Richard Bustamante are the members of the team that delivered the product).&lt;/span&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=uCNiGi0FO_c:eAPRs3s478U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=uCNiGi0FO_c:eAPRs3s478U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=uCNiGi0FO_c:eAPRs3s478U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/uCNiGi0FO_c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/4224168680663407109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2011/10/take-bite-out-of-bugs-and-redundant.html#comment-form" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/4224168680663407109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/4224168680663407109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/uCNiGi0FO_c/take-bite-out-of-bugs-and-redundant.html" title="Take a BITE out of Bugs and Redundant Labor" /><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>14</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2011/10/take-bite-out-of-bugs-and-redundant.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4DQ30yeSp7ImA9WhBXGUg.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-6623143857469937895</id><published>2011-10-06T13:52:00.000-07:00</published><updated>2013-04-02T18:36:12.391-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-02T18:36:12.391-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="App Engine" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="Richard Bustamante" /><title>Unleash the QualityBots</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
By Richard Bustamante&lt;br /&gt;
&lt;br /&gt;
Are you a website developer that wants to know if Chrome updates will break 
your website before they reach the stable release channel? Have you ever wished 
there was an easy way to compare how your website appears in all channels of 
Chrome? Now you can!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://code.google.com/p/qualitybots/" target="blank"&gt;QualityBots&lt;/a&gt; is a new open source tool for web developers 
created by the Web Testing team at Google. It’s a comparison tool that examines 
web pages across different Chrome channels using pixel-based DOM analysis. As 
new versions of Chrome are pushed, QualityBots serves as an early warning system 
for breakages. Additionally, it helps developers quickly and easily understand 
how their pages appear across Chrome channels.
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-M0RnzjKe3dU/To3n21D40RI/AAAAAAAAAQ8/tRHGTZ4fFbg/s1600/image01.png"&gt;&lt;img alt="" border="0" height="286" id="BLOGGER_PHOTO_ID_5660435235816919314" src="http://3.bp.blogspot.com/-M0RnzjKe3dU/To3n21D40RI/AAAAAAAAAQ8/tRHGTZ4fFbg/s400/image01.png" style="display: block; margin: 0px auto 10px; text-align: center;" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
QualityBots 
is built on top of &lt;a href="http://code.google.com/appengine/" target="blank"&gt;Google AppEngine&lt;/a&gt; for the frontend and Amazon EC2 for the 
backend workers that crawl the web pages. Using QualityBots requires an Amazon 
EC2 account to run the virtual machines that will crawl public web pages with 
different versions of Chrome. The tool provides a web frontend where users can 
log on and request URLs that they want to crawl, see the results from the latest 
run on a dashboard, and drill down to get detailed information about what 
elements on the page are causing the trouble.&lt;br /&gt;
&lt;br /&gt;
Developers and testers can 
use these results to identify sites that need attention due to a high amount of 
change and to highlight the pages that can be safely ignored when they render 
identically across Chrome channels. This saves time and the need for tedious 
compatibility testing of sites when nothing has changed.&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" border="0" height="251" id="BLOGGER_PHOTO_ID_5660227647872301122" src="http://3.bp.blogspot.com/-iteL8ECp8qg/To0rDntF-EI/AAAAAAAAAQw/ak5qIOHvb-o/s400/image00.png" style="display: block; margin: 0px auto 10px; text-align: center;" width="400" /&gt;&lt;br /&gt;
&lt;br /&gt;
We 
hope that interested website developers will take a deeper look and even join 
the project at the QualityBots &lt;a href="http://code.google.com/p/qualitybots/" target="blank"&gt;project page&lt;/a&gt;. Feedback is more than welcome at 
qualitybots-discuss@googlegroups.com.&lt;/div&gt;
&lt;span class="byline-author"&gt;Posted by Ibrahim El Far, Web Testing Technologies&amp;nbsp;Team (Eriel Thomas, Jason Stredwick, Richard Bustamante, and Tejas Shah are the members of the team that delivered this product)&lt;/span&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=TNHyD7f3Bm8:bSIiowsYTT8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=TNHyD7f3Bm8:bSIiowsYTT8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=TNHyD7f3Bm8:bSIiowsYTT8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/TNHyD7f3Bm8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/6623143857469937895/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2011/10/unleash-qualitybots.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/6623143857469937895?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/6623143857469937895?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/TNHyD7f3Bm8/unleash-qualitybots.html" title="Unleash the QualityBots" /><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-M0RnzjKe3dU/To3n21D40RI/AAAAAAAAAQ8/tRHGTZ4fFbg/s72-c/image01.png" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2011/10/unleash-qualitybots.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkACRXo6fCp7ImA9WhdWGE4.&quot;"><id>tag:blogger.com,1999:blog-15045980.post-7097248018576480169</id><published>2011-09-12T07:46:00.000-07:00</published><updated>2011-09-12T07:46:04.414-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-12T07:46:04.414-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GTAC" /><title>Announcing the Final GTAC Agenda</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
By James Whittaker&lt;br /&gt;
&lt;br /&gt;
The GTAC agenda is now finalized and available at:&amp;nbsp;&lt;a href="http://www.gtac.biz/agenda"&gt;http://www.gtac.biz/agenda&lt;/a&gt;. Looking forward to seeing everyone there. Stay tuned to this blog for updates to any pre- and post- events.&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=8Dd_stQhA58:WV7ON23D2iM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/RLXA?a=8Dd_stQhA58:WV7ON23D2iM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/RLXA?i=8Dd_stQhA58:WV7ON23D2iM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/RLXA/~4/8Dd_stQhA58" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://googletesting.blogspot.com/feeds/7097248018576480169/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://googletesting.blogspot.com/2011/09/announcing-final-gtac-agenda.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/7097248018576480169?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/15045980/posts/default/7097248018576480169?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/RLXA/~3/8Dd_stQhA58/announcing-final-gtac-agenda.html" title="Announcing the Final GTAC Agenda" /><author><name>James Whittaker</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://4.bp.blogspot.com/_9ywu5aylLpo/Si2Q6zzZexI/AAAAAAAAAAM/AEIWjunK8uE/S220/PA030048.JPG" /></author><thr:total>2</thr:total><feedburner:origLink>http://googletesting.blogspot.com/2011/09/announcing-final-gtac-agenda.html</feedburner:origLink></entry></feed>
