<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' 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'><id>tag:blogger.com,1999:blog-2553431402654150871</id><updated>2024-02-26T05:52:57.917-05:00</updated><category term="automation"/><category term="perl"/><category term="selenium"/><category term="web test"/><category term="functional testing"/><category term="opinion"/><category term="testing"/><category term="data driven test"/><category term="Webdriver"/><category term="CDT"/><category term="ISO29119"/><category term="context-aware tester"/><category term="parallelization"/><category term="qt"/><category term="quality engineering"/><category term="squish"/><category term="CAT"/><category term="ISTQB"/><category term="TDD"/><category term="certification"/><category term="mysql"/><category term="object oriented"/><category term="process engineering"/><category term="quality center"/><category term="Professional Testers Manifesto"/><category term="QTP"/><category term="TestComplete"/><category term="beckman-coulter-life-sciences&#xa;incompetent-testing&#xa;irresponsible-testing"/><category term="commentary"/><category term="introduction"/><category term="pdf file verification"/><category term="qc"/><category term="quality"/><category term="sdlc"/><category term="test cases"/><category term="troubleshooting"/><category term="unit testing"/><category term="windows"/><title type='text'>The Final Rant</title><subtitle type='html'>I blog mostly about solving software development and testing problems using Automation and Quality Engineering.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-7523621120576042968</id><published>2024-02-22T12:32:00.089-05:00</published><updated>2024-02-26T05:52:24.921-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="beckman-coulter-life-sciences&#xa;incompetent-testing&#xa;irresponsible-testing"/><title type='text'>It&#39;s not you, it&#39;s me - a tale of a spoiled Dunning-Kruger award recipient</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;Introduction&amp;nbsp;&lt;/h3&gt;&lt;div&gt;On one fine day not so long ago, I got into a debate with a so-called &quot;context-driven tester&quot; on the LinkedIn platform. The debate went on for a few days back and forth it revolved mainly around his assertion that the ISTQB (an organization that, for some unknown to me, the reason he hates and that he associates with a &quot;Factory School&quot;) is &quot;beating the curiosity out of &quot;testers&quot;.

My main objection was that the ISTQB is not about &quot;testers&quot; at all. It&#39;s about engineers that test and a process around all that, and I asked him to elaborate on why he thought this. This turned into a series of back-and-forths where he kept moving the goalpost and talking about irrelevant things. Responding to my questions with more questions and otherwise just evaded the topic on which he was being challenged. Long story short, he wound up blocking me and then writing a long post describing my supposed behavior, which led to his taking the decision to block me. In this post, he basically projected the behavior he was displaying ONTO ME! LOL. Onto &quot;The Fable&quot;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span&gt;The Exchange&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;Below was the final interchange, which led to his blocking me. The parts enclosed in quotes are his statements to which I am replying to:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Caleb Crandall:&lt;/i&gt;
&lt;blockquote&gt;“I&#39;ve observed a strong inverse correlation between showing some curiosity/imagination/interest and years of experience. In general, college students fare far better on simple, simple testing exercises (e.g. testing a hypothetical program for determining the type of triangle given three inputs representing side length) than most senior candidates.… This suggests to me that _something_ is effectively discouraging creativity, critical thinking, and imagination  for many of these candidates the longer they have been in the industry, versus a problem with the interview questions or style.”&lt;/blockquote&gt;

&lt;i&gt;Me:&lt;/i&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;“Are you sure creativity is being discouraged? Tell me how do you get to know your candidates in short time you have in an interview? Also, what position were you hiring for that would prompt you to give them a “simple programming test” or any test for that matter? What are the questions you ask related to? You work in life sciences right? I imagine a certain level of rigor needs to be applied to your SDLC if your product is a SaMD or even for the software that is part of a Hardware medical device. Something similar to IEC 62304. You would also have to have a Quality Management System instituted and I doubt that it isn’t 13485 certified.  You work for Coulter right?&lt;/blockquote&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;Where I’m going with this is that it may be you that is discouraging creativity. Does that blow your mind?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And by the way I’m not referring to QA and QE as two distinct disciplines of testing. I am saying that neither of those are testing. I am saying that one of the encompasses testing. So there is a substantiating factor to my comment about comprehension.”&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;i&gt;Caleb Crandall:&lt;/i&gt;
&lt;blockquote&gt;“Also many certified candidates answer open-ended questions that I expect a candidate to have questions about to clarify context with a closed-minded, one-dimensional &quot;this is how you should do it&quot;, which, frankly, is how the ISTQB material treats testing.”&lt;/blockquote&gt;

&lt;i&gt;Me:&lt;/i&gt;&amp;nbsp;&lt;div&gt;&lt;blockquote&gt;“You work for Coulter right? Don’t you think that the mentality senior candidates come with is that of a rigorous place? Do you set the context by telling them it isn’t? (If in fact it isn’t, I’m beginning to wonder what kind of place this is). Do you expect them to guess? Treat them like adults not children.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How do you know how the ISTQB treats testing? Is that an assumption based on how you read the syllabus or other people’s opinions about it? Are you certified by the way? I keep asking you all these questions and you keep coming back with either the same question or don’t answer at all. I’ve answered all your questions in detail.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One last comment is that it seems to me (based on our very limited interactions) that you are allowing what’s you read to temp your experience.
You claim that it’s not your interview style but I asked you about it. You answer is “trust me it’s not me it’s them” see where I’m going with this?”

Would you like to interview me? I’ll give you some unbiased feedback on your style.
I can provide references to the types of candidates I’ve hired into my company. All successful to date not even reporting to me anymore.”&lt;/div&gt;&lt;/blockquote&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;The Blocking&amp;nbsp;&lt;/h3&gt;&lt;div&gt;At this point, he decided to block me and then proceeded to lie to his few readers, stating that, for some unknown reason, I decided to delete all my comments. As if completely unaware that my comments had disappeared because he blocked me! &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh2KEZPYRFdS8QPUjQsmyRHSuS2udrXWcHnVFKYrP4ABqFbxDRn33O7uSAbg0ZtQmoiGh19WTvRBldovKve4J3RsY_Wfdy4GSOwy3TSgG95oi6dhLioLsnpoPR5vTK6wBbFPWM-LNTt4Zz1upOcK7S9Ma3giFzTUo-gDJHjH6d2wC5L4beAVqTdZ-hi9hDV&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;153&quot; data-original-width=&quot;464&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh2KEZPYRFdS8QPUjQsmyRHSuS2udrXWcHnVFKYrP4ABqFbxDRn33O7uSAbg0ZtQmoiGh19WTvRBldovKve4J3RsY_Wfdy4GSOwy3TSgG95oi6dhLioLsnpoPR5vTK6wBbFPWM-LNTt4Zz1upOcK7S9Ma3giFzTUo-gDJHjH6d2wC5L4beAVqTdZ-hi9hDV=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And then build a lie as an excuse where he mentions that I was acting in the exact way that he himself was behaving instead! Project much? I think it&#39;s funny, actually, but it&#39;s a testament to how so-called &quot;experts&quot; in testing try to push this human tester bullshit (as this person does).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEilsIfd9RYPYf2QZpdcj577-jR4j3CPc5Rl-x02ouM8BhIAetAl36Vcmlb9fjfaZhJ5wMmnHD85JUIttJQ5ZHDsR0WSyjRULGKfGygP6378PQum9eEWR2hPzpOy-L_tubUJIh-D2YbUjRyAF9cPIZe1sBoNajD2Fvb9A_5b4VCAldRL6wiKXeyCK7I8050M&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;428&quot; data-original-width=&quot;436&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEilsIfd9RYPYf2QZpdcj577-jR4j3CPc5Rl-x02ouM8BhIAetAl36Vcmlb9fjfaZhJ5wMmnHD85JUIttJQ5ZHDsR0WSyjRULGKfGygP6378PQum9eEWR2hPzpOy-L_tubUJIh-D2YbUjRyAF9cPIZe1sBoNajD2Fvb9A_5b4VCAldRL6wiKXeyCK7I8050M=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Luckily for me, I do have other accounts, and I was able to catch him in that lie. And while he promptly blocked that account as well (hopefully, he doesn&#39;t think that I deleted this message, too! LOL), I was able to get my response to him so that he knows that he&#39;s full of stuff that stinks!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh9oKX0F-BAmcAXCC2r8lm6JvfC2-npEfEqlsFkrmxDfmWqRni_5G7hcHBlefai_35GqbKyGl1-ahl4Y9AQ8lx40V-kHgNfadj940fj_QYLynfHm2iCpWwwMSr_3ExMclaIq299nwr4M8F0bwkylYF7E-Nv5ASubHVLJ1FA6iNhaNvWM2r5tM3DCZeICxsm&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;608&quot; data-original-width=&quot;489&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh9oKX0F-BAmcAXCC2r8lm6JvfC2-npEfEqlsFkrmxDfmWqRni_5G7hcHBlefai_35GqbKyGl1-ahl4Y9AQ8lx40V-kHgNfadj940fj_QYLynfHm2iCpWwwMSr_3ExMclaIq299nwr4M8F0bwkylYF7E-Nv5ASubHVLJ1FA6iNhaNvWM2r5tM3DCZeICxsm=s16000&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;The gift that keeps on giving (drama update)&lt;br /&gt;&lt;/h3&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;A few colleagues mentioned to me this morning that I should have a look at a recent post from Caleb where he is further going into projecting and defaming mode via his #echochamber, continuing to project onto me the behaviors that he himself was exhibiting! Link to full post for your reading enjoyment and possible pleasure! &lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7166441089858482177/&quot; target=&quot;_blank&quot;&gt;https://www.linkedin.com/feed/update/urn:li:activity:7166441089858482177/&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&amp;nbsp;This is his explanation as to why he blocked me (see the third paragraph in the linked post above:&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&lt;blockquote&gt;&quot;&lt;span class=&quot;break-words&quot;&gt;&lt;span&gt;&lt;span dir=&quot;ltr&quot;&gt;In the end, I decided to block them after 
their last reply consisted of 3 or 4 posts full of loaded questions, 
assumptions, and a pattern of dodging my own questions--as I explained 
in the last two comments on that thread.&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;Now please consider that I had to answer in a 4 part comment because he replied to a singular comment that I made with a 4 part reply as you can see in the image below. Since I also try to be tidy, of course I&#39;m going to reply to each part with a corresponding comment labeled in the same way; so that folks can follow the conversation. Isn&#39;t that what folks do in internet speak? So, I ask, again, &quot;project much? Caleb?&quot;. 😂&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Link to original post and comments that caused him to block me: &lt;a href=&quot;https://www.linkedin.com/posts/caleb-crandall-a02478bb_a-couple-weeks-ago-i-shared-a-list-of-symptoms-activity-7163879646428688385-sWWB&quot; target=&quot;_blank&quot;&gt;https://www.linkedin.com/posts/caleb-crandall-a02478bb_a-couple-weeks-ago-i-shared-a-list-of-symptoms-activity-7163879646428688385-sWWB&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;span class=&quot;break-words&quot;&gt;&lt;span&gt;&lt;span dir=&quot;ltr&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh92_RWjQrEMpepHOEdOccgOAxzaKaaaVwAws4UsM517CR6xQKMICs9Sk7x3WQ0t7H7oINdS6T_WNNYMBnMGaUk2k6zvblsyo-TQRwntidr_BWthh4T1qA-B7S8e8Ydkl0pnybX4oTv3QYGYjNIXB0hymKAcKTOvKHkQqHZ3erxWHvAx9Kj0y8MxypkZtvv/s903/Capture12.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;903&quot; data-original-width=&quot;633&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh92_RWjQrEMpepHOEdOccgOAxzaKaaaVwAws4UsM517CR6xQKMICs9Sk7x3WQ0t7H7oINdS6T_WNNYMBnMGaUk2k6zvblsyo-TQRwntidr_BWthh4T1qA-B7S8e8Ydkl0pnybX4oTv3QYGYjNIXB0hymKAcKTOvKHkQqHZ3erxWHvAx9Kj0y8MxypkZtvv/s16000/Capture12.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;break-words&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;break-words&quot;&gt;&lt;span&gt;I&#39;ll remind the reader that this is all in answer to one of my comments. I make it a habit to only try to reply within the constraints of the 1250 character LinkedIn limit. Mind you that at this time he is replying to me about Standards in general (how bad they are), ISTQB, ISO-29119 and sticking to his point that Quality Assurance and Quality Engineering are just two different labels for &quot;testing&quot;. Which by the way this is the entirety of the point I am trying to get Caleb to see. That these things are NOT testing! Ok, and I&#39;m the one that according to him is &quot;dodging questions&quot;. Whoa!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;break-words&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;break-words&quot;&gt;&lt;span&gt;As the saying goes, you can bring a horse to water but you can&#39;t force him to drink. Will the saga continue? Stay tuned! &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style=&quot;clear: both; text-align: left;&quot;&gt;The Conclusion&lt;/h3&gt;&lt;div&gt;What I find the most amusing out of this whole tale is the fact that Caleb feels that I am attacking him! He even went as far as reporting me to LinkedIn as attacking him. A report that was actually denied since I did not attack him. Having a different point of view than a person and being relentless and gazelle focused about it, an attack does not mean.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;So no, Caleb Crandall, the problem is not with the hundreds of people you&#39;ve interviewed and somehow weren&#39;t able to pass your muster because they weren&#39;t &quot;creative&quot;! The problem is with you! If folks come into a Medical Device Manufacturer, they expect a certain level of rigor, and if these folks are as senior as you claim they were, they probably knew much more about this level of rigor than you do working at Beckman Coulter. Giving them, per your own admission, &quot;simple tests to count the sides of a triangle&quot; has nothing to do with an FDA certification or an IEC 62304 rigorous SDLC. Especially if you have a medical device with a high classification (which I&#39;m sure most Beckman Coulter products are!).&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;P.S. As an added bonus I was so happy to see yet another fan praise me for my debating skills! 😆&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgap8yVFCCnmCVCJ-Bft2IEoz9S8CkL-ISZ9L4IxKk4JXTPoOcoRDqK8KqWXFamPRAnJtYqVMH9PGQsNTwz_zP_WMP5hDInaEhmvKPAzQMewn-FbYwzE0bdF3CGRHsE86vWiAlEnFbd6aCsJsmYPkOMoMxN-q3XYLdGMqabbIXSwdbKTJdWI7KYP7P4wqOG/s552/Jimmy.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;137&quot; data-original-width=&quot;552&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgap8yVFCCnmCVCJ-Bft2IEoz9S8CkL-ISZ9L4IxKk4JXTPoOcoRDqK8KqWXFamPRAnJtYqVMH9PGQsNTwz_zP_WMP5hDInaEhmvKPAzQMewn-FbYwzE0bdF3CGRHsE86vWiAlEnFbd6aCsJsmYPkOMoMxN-q3XYLdGMqabbIXSwdbKTJdWI7KYP7P4wqOG/s16000/Jimmy.PNG&quot; /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;This character has had me blocked for over a decade! Because he couldn&#39;t handle a taste of his own medicine! Whoa, I&#39;m beginning to see a pattern with these people. &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enjoy living in your echo chamber; I&#39;m capturing this here for posterity! I invite you to debate me here. This is a blocking free zone.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Sarcasm Disclaimer: Any similarity to real names and companies is intentional!&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/7523621120576042968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2024/02/a-fable-about-feeble-context-driven.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/7523621120576042968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/7523621120576042968'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2024/02/a-fable-about-feeble-context-driven.html' title='It&#39;s not you, it&#39;s me - a tale of a spoiled Dunning-Kruger award recipient'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh2KEZPYRFdS8QPUjQsmyRHSuS2udrXWcHnVFKYrP4ABqFbxDRn33O7uSAbg0ZtQmoiGh19WTvRBldovKve4J3RsY_Wfdy4GSOwy3TSgG95oi6dhLioLsnpoPR5vTK6wBbFPWM-LNTt4Zz1upOcK7S9Ma3giFzTUo-gDJHjH6d2wC5L4beAVqTdZ-hi9hDV=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-8272472796723306460</id><published>2021-10-04T08:47:00.007-04:00</published><updated>2021-10-04T08:57:19.780-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="quality"/><category scheme="http://www.blogger.com/atom/ns#" term="quality engineering"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Some comments / observations on this valiant attempt at a Software Testing Manifesto</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://lh3.googleusercontent.com/-sBRyrY22_Ls/YVr2eqM42nI/AAAAAAABHgo/gLHC_Lu3svkiBXJotd9w2Ak4zn2sdN0OgCLcBGAsYHQ/image.png&quot; style=&quot;background-color: white; font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; margin-left: 1em; margin-right: 1em; text-align: center; white-space: pre-wrap;&quot;&gt;&lt;img data-original-height=&quot;561&quot; data-original-width=&quot;1099&quot; height=&quot;327&quot; src=&quot;https://lh3.googleusercontent.com/-sBRyrY22_Ls/YVr2eqM42nI/AAAAAAABHgo/gLHC_Lu3svkiBXJotd9w2Ak4zn2sdN0OgCLcBGAsYHQ/w640-h327/image.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;CREDIT: &lt;a href=&quot;https://www.linkedin.com/in/daniel-flieger-7642a980&quot; target=&quot;_blank&quot;&gt;Daniel Flieger&lt;/a&gt;&lt;/p&gt;&lt;p&gt;While I understand the purpose of this (or any other manifesto) I think it’s counter intuitive to the mission of Quality to do (or value) any one thing over another.&lt;/p&gt;&lt;p&gt;If we agree that, especially within software development, things depends on context, then I would feel more comfortable if the manifesto instead expressed an &quot;it depends&quot; stance as opposed to &quot;this over that&quot;.&lt;/p&gt;&lt;p&gt;For example:&lt;/p&gt;&lt;p&gt;depending on the context&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&amp;nbsp;there is value in preventing bugs (let’s make sure we are accurately implementing the things) AND finding bugs (integration testing, etc)&lt;/li&gt;&lt;li&gt;&amp;nbsp;there is value in testing throughout (help the team by providing constant feedback/information) AND testing at the end (user needs met? fit for purpose?)&lt;/li&gt;&lt;li&gt;&amp;nbsp;there is value in testing what the product team understands what the user needs are (validation) AND there is also value in checking functionality (verification)&lt;/li&gt;&lt;li&gt;&amp;nbsp;there is value in ensuring that we build the best system (verification) AND attempting to break the system we just built (validation of resiliency, recoverability, usability, etc)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;The last one is spot on. Quality is not only a team sport and responsibility, it&#39;s an entire organization sport that starts from executive management and trickles down to the product development team and ultimately to the user.&lt;/p&gt;&lt;p&gt;I&#39;m interested in folks thoughts on the manifesto as well as my modification to it.&lt;/p&gt;&lt;p&gt;(&lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6850373611660824576/&quot; target=&quot;_blank&quot;&gt;link to original post on LinkedIn&lt;/a&gt;)&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/8272472796723306460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2021/10/some-comments-observations-on-this.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8272472796723306460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8272472796723306460'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2021/10/some-comments-observations-on-this.html' title='Some comments / observations on this valiant attempt at a Software Testing Manifesto'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/-sBRyrY22_Ls/YVr2eqM42nI/AAAAAAABHgo/gLHC_Lu3svkiBXJotd9w2Ak4zn2sdN0OgCLcBGAsYHQ/s72-w640-h327-c/image.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-927844499921566430</id><published>2021-03-14T17:20:00.002-04:00</published><updated>2021-03-14T17:20:48.402-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="quality engineering"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>About Manual vs Automated</title><content type='html'>&lt;p&gt;In my opinion, focusing energies on non existent dichotomies takes away from the real work / focus of system verification and validation: system design, test strategy, risk identification and reduction, test techniques to incorporate based on system design and strategy, &amp;nbsp;controlled and uncontrolled experiments to both verify and validate the product, etc. &lt;/p&gt;&lt;div class=&quot;_2m1qj&quot;&gt;&lt;p&gt;In other words (basic triage here) if the important work is to understand testing and all that it encompasses (as mentioned above) then focusing on manual vs automation is like (in a ER situation) focusing on placing band-aids on scratches when a person is bleeding and the bleeding is synchronized with heart beat. &amp;nbsp;Focusing on the distinction first is a bit backwards (not to mention controversial - see my last sentence). &lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;_2m1qj&quot;&gt;&lt;p&gt;From my perspective once a person learns system design (the building blocks of a system), testing techniques (what to do in each situation), testing strategy (your overall approach), etc then, by design and as part of the learning they would have already realized (intuitively) the distinction this false dichotomy is trying to make (which is a really hard distinction to make because both (manual and automated) are intertwined, hence why its controversial to folks that understand this already).&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/927844499921566430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2021/03/about-manual-vs-automated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/927844499921566430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/927844499921566430'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2021/03/about-manual-vs-automated.html' title='About Manual vs Automated'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-8973401232833994763</id><published>2021-02-27T19:47:00.005-05:00</published><updated>2021-03-14T17:16:14.299-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="context-aware tester"/><category scheme="http://www.blogger.com/atom/ns#" term="quality engineering"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>About Flaky Tests</title><content type='html'>&lt;p&gt;&amp;nbsp;I&#39;ve been hearing on the LinkedIn circuit that we should stop using the term flaky test. Not because a test is not really flaky, but because we are pointing the finger at the test strategy itself. So I decided to share my concise thoughts on the topic far and wide.&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;break-words&quot;&gt;&lt;span&gt;&lt;span dir=&quot;ltr&quot;&gt;A test is an experiment 
through which we aim to learn information. In Automation (that 
is, when you are in the process of getting a computer to execute all or 
part of your experiment) all tests begin as a “flaky test”. This is not 
only expected but it’s the testing portion of automation; which includes
 more than just automating steps. During this portion we are looking for
 unknowns and how it impacts our test (experiment). It’s an iterative 
process. &lt;br /&gt;&lt;br /&gt;It is also an investigation to reveal unknowns or 
“flakiness” of all things about the experiment I’m automating: The 
environment, the variables, the constants, the content, etc. &lt;br /&gt;&lt;br /&gt;So I
 don’t call a test “flaky” just because it fails for an unknown reason. 
all automated tests start out flaky. I call a test flaky while it’s in 
the investigation portion and we are working to reveal all of the 
unknowns as mentioned above. &lt;br /&gt;&lt;br /&gt;To summarize: is a test strategy really flaky if it takes &quot;flakiness&quot; into account as I have outlined above?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/8973401232833994763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2021/02/about-flaky-tests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8973401232833994763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8973401232833994763'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2021/02/about-flaky-tests.html' title='About Flaky Tests'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-7357857499570506729</id><published>2015-12-04T10:55:00.002-05:00</published><updated>2015-12-16T10:11:22.609-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="pdf file verification"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="squish"/><title type='text'>Verifying PDF file contents </title><content type='html'>Sometimes the applications we are testing require some level of verification of reports that are output by the application under test under a variety&amp;nbsp; of formats. One of these formats is the ever popular PDF. &lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;An option for verifying PDFs might be using &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PDFLib&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; Text Extraction Toolkit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; from &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PDFlib&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;SpellingError SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;GmbHT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;.&amp;nbsp; T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;his toolkit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; appears to be&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; very powerful and supports the extraction of text, images as well as all objects that make up a PDF &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;SpellingError SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;file.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;SpellingError SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;SpellingError SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;The example below are using Squish&#39;s API to drive an application developed using Qt framework. As well, while the script examples here are in Perl, you can replace it with the language of&amp;nbsp; your choice. As long as it offers similar services to the programmer.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;SpellingError SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;SpellingError SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;In&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; the following example:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;SCX223988707&quot;&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{28}&quot; paraid=&quot;537238545&quot; style=&quot;background-color: transparent; color: windowtext; font-family: &#39;Segoe UI&#39;,Tahoma,Verdana,&#39;Sans-Serif&#39;; font-size: 6pt; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;OutlineElement Ltr SCX223988707&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-7U77e82EEgE/VmG7QH7jfjI/AAAAAAAABdY/LHlSaCpJlkk/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-7U77e82EEgE/VmG7QH7jfjI/AAAAAAAABdY/LHlSaCpJlkk/s1600/1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
The function &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;get_pdf_objs&lt;/span&gt; conceptually uses the external application tet.exe (Text Extraction Toolkit) in combination with Perl’s system function to extract all text and images from a PDF file and store it in a txt file or image file respectively.
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{37}&quot; paraid=&quot;757001450&quot; style=&quot;background-color: transparent; color: windowtext; font-family: &#39;Segoe UI&#39;,Tahoma,Verdana,&#39;Sans-Serif&#39;; font-size: 6pt; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-mXPQx5cayA4/VmG7otAwnrI/AAAAAAAABdg/aJEQ5IhnC8A/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-mXPQx5cayA4/VmG7otAwnrI/AAAAAAAABdg/aJEQ5IhnC8A/s1600/2.png&quot; /&gt;&lt;/a&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;OutlineElement Ltr SCX223988707&quot;&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{48}&quot; paraid=&quot;44390197&quot; style=&quot;background-color: transparent; color: windowtext; font-family: &#39;Segoe UI&#39;,Tahoma,Verdana,&#39;Sans-Serif&#39;; font-size: 6pt; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;parse_pdf&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt; is not really a parser&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;, in this example &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;SpellingError SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;its&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt; only role is to produce an array of text strings that it will extract from the text file produced by &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: small;&quot;&gt;get_pdf_objs&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{48}&quot; paraid=&quot;44390197&quot; style=&quot;background-color: transparent; color: windowtext; font-family: &#39;Segoe UI&#39;,Tahoma,Verdana,&#39;Sans-Serif&#39;; font-size: 6pt; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{48}&quot; paraid=&quot;44390197&quot; style=&quot;background-color: transparent; color: windowtext; font-family: &#39;Segoe UI&#39;,Tahoma,Verdana,&#39;Sans-Serif&#39;; font-size: 6pt; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-DXwxIzdAdn0/VmG7wIofvAI/AAAAAAAABdo/gnKlnls3MGw/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-DXwxIzdAdn0/VmG7wIofvAI/AAAAAAAABdo/gnKlnls3MGw/s1600/3.png&quot; /&gt;&lt;/a&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{51}&quot; paraid=&quot;5387981&quot; style=&quot;background-color: transparent; color: windowtext; font-family: &#39;Segoe UI&#39;,Tahoma,Verdana,&#39;Sans-Serif&#39;; font-size: 6pt; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;OutlineElement Ltr SCX223988707&quot;&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{62}&quot; paraid=&quot;1911996915&quot; style=&quot;background-color: transparent; color: windowtext; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;U&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;sing Perl or any other of the supported scripting languages, we can &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;easily script the handling of PDF files using an external tool like &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PDFLib&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; TET&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; and a custom utility function developed for this purpose&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; The above e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;xample illustrates this concept; the process is outlined below:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;line-height: 20px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;SCX223988707&quot;&gt;
&lt;ol class=&quot;NumberListStyle1 SCX223988707&quot; start=&quot;1&quot;&gt;
&lt;li class=&quot;OutlineElement Ltr SCX223988707&quot; style=&quot;font-style: normal; font-weight: normal; margin-left: 48px; vertical-align: baseline;&quot;&gt;&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{66}&quot; paraid=&quot;298400086&quot; style=&quot;background-color: transparent; color: windowtext; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Start the&amp;nbsp;application&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;line-height: 20px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;OutlineElement Ltr SCX223988707&quot; style=&quot;font-style: normal; font-weight: normal; margin-left: 48px; vertical-align: baseline;&quot;&gt;&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{66}&quot; paraid=&quot;298400086&quot; style=&quot;background-color: transparent; color: windowtext; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Navigate the UI until a report is generated&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;OutlineElement Ltr SCX223988707&quot; style=&quot;font-style: normal; font-weight: normal; margin-left: 48px; vertical-align: baseline;&quot;&gt;&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{66}&quot; paraid=&quot;298400086&quot; style=&quot;background-color: transparent; color: windowtext; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Print that report&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;line-height: 20px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;OutlineElement Ltr SCX223988707&quot; style=&quot;font-style: normal; font-weight: normal; margin-left: 48px; vertical-align: baseline;&quot;&gt;&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{66}&quot; paraid=&quot;298400086&quot; style=&quot;background-color: transparent; color: windowtext; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Pass the file to a &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PDFLib&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; function to extract text, images, etc.

&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;OutlineElement Ltr SCX223988707&quot; style=&quot;font-style: normal; font-weight: normal; margin-left: 48px; vertical-align: baseline;&quot;&gt;&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{66}&quot; paraid=&quot;298400086&quot; style=&quot;background-color: transparent; color: windowtext; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX223988707&quot; style=&quot;line-height: 20px;&quot; xml:lang=&quot;EN-US&quot;&gt;&lt;span class=&quot;NormalTextRun SCX223988707&quot; style=&quot;background-color: inherit;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Parse the extracted text, images, etc. and compare to known good&amp;nbsp;values&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{84}&quot; paraid=&quot;1944950657&quot; style=&quot;background-color: transparent; color: windowtext; font-family: &amp;quot;Segoe UI&amp;quot;,Tahoma,Verdana,&amp;quot;Sans-Serif&amp;quot;; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;font-family: &amp;quot;calibri&amp;quot; , sans-serif; font-size: 11pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX223988707&quot; paraeid=&quot;{eecc2525-ffbf-4c44-95f1-ca6d93451afd}{84}&quot; paraid=&quot;1944950657&quot; style=&quot;background-color: transparent; color: windowtext; font-style: normal; font-weight: normal; margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span class=&quot;EOP SCX223988707&quot; style=&quot;line-height: 20px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;I&#39;d like to know your thoughts via comments.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;ListGhost SCX223988707&quot;&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;u&gt;&lt;/u&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sup&gt;&lt;/sup&gt;&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/7357857499570506729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2015/12/verifying-pdf-file-contents.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/7357857499570506729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/7357857499570506729'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2015/12/verifying-pdf-file-contents.html' title='Verifying PDF file contents '/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-7U77e82EEgE/VmG7QH7jfjI/AAAAAAAABdY/LHlSaCpJlkk/s72-c/1.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-3891428217839081475</id><published>2015-10-24T09:47:00.000-04:00</published><updated>2015-10-31T09:53:18.562-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="test cases"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Test Cases - Some Benefits Derived</title><content type='html'>On numerous occasions I&#39;ve been involved in discussions regarding test cases with other folks involved in a software development life cycle where the overall accepted sentiment is that when all test cases are &quot;executed&quot; we are done testing; or testing has not been done unless test cases have been executed.&lt;br /&gt;
&lt;br /&gt;
Unfortunately for our field, I&#39;ve often found myself alone in trying to show that just because you executed 100 test cases does not necessarily mean that you did any testing at all. You could have, but this depends on the person executing the test cases and whether they understand test cases and how to use them in testing.&lt;br /&gt;
&lt;br /&gt;
The below presentation I gave at a former employer that had a huge catalog of test cases with detailed steps and was still struggling with product quality. They were hesitant, however, to accept that they weren&#39;t really testing when purely executing the test cases. Mainly because they feared that all the effort that went into the creation and maintenance of the test cases would be wasted.&lt;br /&gt;
&lt;br /&gt;
In the session I explained to them how they can actually use these test cases to get the maximum return on your investment in the creation of these artifacts. Test cases, since they are designed by subject matter experts, contain all the information that most real world users of your product will need to perform the very same functions; and since they contain detailed steps, are suitable for many applications.&lt;br /&gt;
&lt;br /&gt;
Your thoughts, comments are welcomed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;355&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//www.slideshare.net/slideshow/embed_code/key/rp7DCKzkyNifpy&quot; style=&quot;border: 1px solid rgb(204, 204, 204); margin-bottom: 5px; max-width: 100%;&quot; width=&quot;425&quot;&gt; &lt;/iframe&gt; &lt;br /&gt;
&lt;div style=&quot;margin-bottom: 5px;&quot;&gt;
&lt;b&gt; &lt;a href=&quot;https://www.slideshare.net/FreddyVega5/test-cases-benefits-derived-54268264&quot; target=&quot;_blank&quot; title=&quot;Test Cases - Benefits Derived&quot;&gt;Test Cases - Benefits Derived&lt;/a&gt; &lt;/b&gt; from &lt;b&gt;&lt;a href=&quot;https://www.slideshare.net/FreddyVega5&quot; target=&quot;_blank&quot;&gt;Freddy Vega&lt;/a&gt;&lt;/b&gt; &lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/3891428217839081475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2015/10/test-cases-some-benefits-derived.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/3891428217839081475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/3891428217839081475'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2015/10/test-cases-some-benefits-derived.html' title='Test Cases - Some Benefits Derived'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-8184188040315920799</id><published>2015-02-28T10:33:00.000-05:00</published><updated>2015-02-28T10:33:21.358-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="functional testing"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Virtual (Simulated) Users Rock!</title><content type='html'>I&#39;ve been absent from blogosphere for the last two months because I&#39;ve been busy working on a new assignment. This assignment has me&amp;nbsp;knee deep into designing an automated web application framework for a leading&amp;nbsp;SaaS company.&lt;br /&gt;
&lt;br /&gt;
One of the first things I identified as being needed for this implementation of my framework&amp;nbsp;(other than the basics: reporting, logging, etc.) was the need to have a group of virtual users (little robots if you will) that will mimic not only real users of the system, but their&amp;nbsp;behaviors as well.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;User State System&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
Enter the User State System.&amp;nbsp;While the name may sound fancy this is nothing more than a series of database tables who&#39;s sole responsibility is to keep stored the state of each user as well as their interactions with the SaaS system and any artifacts they create along the way. When running tests in parallel (or even sequentially) keeping track of user state has the following advantages: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;Restore the entire user list to a known default state &lt;/li&gt;
&lt;li&gt;&amp;nbsp;Restore a particular user to a known or default state &lt;/li&gt;
&lt;li&gt;&amp;nbsp;Test scripts can share users and their current states (e.g. logged in, not logged in) &lt;/li&gt;
&lt;/ul&gt;
A&amp;nbsp;user&amp;nbsp;state system&amp;nbsp;holds the application&#39;s user information (e.g. user name, password, email), as well as current user state as it relates to the application under test (e.g. user is&amp;nbsp;busy, paid user, free user, security answers). &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;An Example&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
As an example, lets say you have a system that supports a SaaS for an accounting firm. You have SLA&#39;s in place that guarantee certain response times and load times as well as unscheduled down time. In a user state table for this type of system all users will share a common starting state, however this state is only guaranteed when the user record is first added or reset to a default state; from then on each user’s state will be represented in this table. In other words this is a dynamic table constantly being updated / changed by the running test scripts or it may be updated by resetting it to a default state either globally (for all users) or for a particular group of users (i.e. 1 or more users).&lt;br /&gt;
&lt;br /&gt;
With a user state system implemented when test scripts execute they request, as part of the test setup, a specific user with a specific set of characteristics from the user state system. The specific set of characteristics would be determined by the features /&amp;nbsp;functions being tested. Test scripts then execute using the requested user. For example if you wanted to test invoices being generated properly you would request a user that has the appropriate rights (i.e. is able to add invoices) and that has an account configured with a budget with enough money to satisfy the invoice. Or conversely a user that has an account configured with a budget that does not have enough money to satisfy the invoice.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;Conclusion&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
As you can see in the above example you can effectively use a state system to pinpoint specific functionality as required by the test you are designing without the need of building this test data into the test. This level of abstraction gives the test designer, and the automated test system, the flexibility and speed that is gained from using shared virtual users with a known current state.&lt;br /&gt;
&lt;br /&gt;
As well, although there is no one size fit all solution when it comes to saving user state, there are some common features that can be shared in any user state system that will be utilized for functional verification in QA or even for TiP (testing in production). I will share some of these in a future post.</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/8184188040315920799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2015/02/virtual-simulated-users-rock.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8184188040315920799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8184188040315920799'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2015/02/virtual-simulated-users-rock.html' title='Virtual (Simulated) Users Rock!'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-993418746941798547</id><published>2014-11-12T11:22:00.000-05:00</published><updated>2014-11-12T11:22:52.856-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="functional testing"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Testing with Perl - Test::More</title><content type='html'>The &lt;a href=&quot;http://search.cpan.org/~exodist/Test-Simple-1.001008/lib/Test/More.pm&quot; target=&quot;_blank&quot;&gt;More&lt;/a&gt; module available via CPAN is part of the Test::* series and provides a wide range of testing functions. In the &lt;a href=&quot;http://vgp-miami.blogspot.com/2014/11/testing-with-perl-tap-test-anything.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt; we learned that TAP is just a simple text-based interface between testing modules that are part of&amp;nbsp; a test harness; Test::More is one of these modules that utilizes TAP and expands the &quot;simpleness&quot; of the protocol by providing various ways to say &quot;ok&quot;. It includes, among other things:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Better diagnostics (not just OK / NOT OK, but also for example WHY)&lt;/li&gt;
&lt;li&gt;Capability to skip tests given a range of criteria&lt;/li&gt;
&lt;li&gt;Capability to test futures features (using TODO)&lt;/li&gt;
&lt;li&gt;Compare complicated data structures &lt;/li&gt;
&lt;/ul&gt;
Lets jump right in and use the above referenced module to test a web application available at myapp.com (this is a fictitious web site that does not exist). As part of our test we should:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Navigate the login page&lt;/li&gt;
&lt;li&gt;Make sure we are in the correct starting point&lt;/li&gt;
&lt;li&gt;Enter our login credentials&lt;/li&gt;
&lt;li&gt;Login to the site&lt;/li&gt;
&lt;li&gt;Verify our landing page after the login operation.&lt;/li&gt;
&lt;/ol&gt;
Implemented as a Perl test script that uses Selenium::Remote::Driver and Test::More we might write the above as:&lt;br /&gt;
&lt;pre style=&quot;background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;1:  $driver-&amp;gt;get($page);  
2:  my $loc1 = $driver-&amp;gt;get_current_url();  
3:  is ( $loc1, LOGINHOME, &#39;Verify landing page&#39; );  # THIS IS TEST 1
4:  login_as( $user_id, $password );  
5:  my $loc2 = $driver-&amp;gt;get_current_url();  
6:  is ( $loc2, APPHOME, &#39;Verify landing page after login&#39; );  # THIS IS TEST 2
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
In line 1 we navigate to our starting page (the login page) using Selenium&#39;s &lt;code&gt;get&lt;/code&gt; method. In line 2 we declare a variable that will hold the URL we just navigated to and that will be returned by Selenium&#39;s &lt;code&gt;get_current_url&lt;/code&gt; method. Then, in line 3, we utilize Test::More&#39;s &lt;code&gt;is()&lt;/code&gt; is function to assert that the page we landed on, &#39;$loc1&#39;, is in fact the expected one &#39;LOGINHOME&#39;. Line 4 executes a &lt;a href=&quot;http://vgp-miami.blogspot.com/2011/07/page-object-anyone.html&quot; target=&quot;_blank&quot;&gt;page object &lt;/a&gt;who&#39;s sole purpose is to login to the web application under test. After the login operation we once again get the url of the page we landed on, &#39;$loc2&#39;, and compare that to the page we expect to be after the login which is &#39;APPHOME&#39;.&lt;br /&gt;
&lt;br /&gt;
NOTE: I used the term Selenium above for readability to refer to &lt;a href=&quot;http://search.cpan.org/~gempesaw/Selenium-Remote-Driver/&quot; target=&quot;_blank&quot;&gt;Selenium::Remote::Driver&lt;/a&gt; - the Perl binding to WebDriver.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Below is the output that would be sent to the harness in a PASS case:&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; ok 1 - Verify landing page  
 ok 2 - Verify landing page after login  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
And the output for a FAIL case:&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; not ok 1 - Verify landing page  
 not ok 2 - Verify landing page after login  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Whenever a test fails, one of the features of Test::More is that it gives you meaningful information (the whys) you can use when evaluating test failures. For example, in the above failure the following would be sent to the error output file:&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; #  Failed test &#39;Verify landing page&#39;  
 #  at C:\Users\Freddy Vega\SsApp\create_decision_tree.pl line 107.  
 #        got: &#39;http://myapp.com/myloginpage&#39;  
 #   expected: &#39;http://myapp.com/Account/Login&#39;  
 #  Failed test &#39;Verify landing page after login&#39;  
 #  at C:\Users\Freddy Vega\SsApp\create_decision_tree.pl line 113.  
 #        got: &#39;http://myapp.com/Apphome&#39;  
 #   expected: &#39;http://myapp.com/Home&#39;  
 # Looks like you failed 2 tests of 2.  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
As you can probably see by now, testing with Perl means not to re-invent the wheel every time a testing problem arises. 
In our solution we were able to use &lt;a href=&quot;http://search.cpan.org/~gempesaw/Selenium-Remote-Driver/&quot; target=&quot;_blank&quot;&gt;Selenium::Remote::Driver&lt;/a&gt; to drive 
our application under test (a web app). We used Test::More to make our 
assertions while we are testing and TAP::Harness to tie it all together 
and produce results that can later be mined, interpreted and presented 
to different audience types (management, users, developers, etc).&lt;br /&gt;
&lt;br /&gt;
In the next post in this series I tell you about test harnesses and how you can combine these with other tools to help you design a robust automation framework.</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/993418746941798547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/11/testing-with-perl-testmore.html#comment-form' title='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/993418746941798547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/993418746941798547'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/11/testing-with-perl-testmore.html' title='Testing with Perl - Test::More'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-158878964097924082</id><published>2014-11-10T17:22:00.000-05:00</published><updated>2014-11-10T17:22:22.793-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="functional testing"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Testing with Perl - TAP (the Test Anything Protocol)</title><content type='html'>While there are many programming languages out there that folks seem to prefer when implementing automation for web and PC based applications (e.g. Python, Ruby), I&#39;ve been inclined to choose Perl just about every time I have been asked to solve some testing problem. There are several reasons, I believe, why I have always chosen Perl over other candidates, below are my current top three:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Cross platform support for your tests (write once run everywhere)&lt;/li&gt;
&lt;li&gt;Powerful text parsing&lt;/li&gt;
&lt;li&gt;No need to re-invent the wheel (there are thousands of modules available on &lt;a href=&quot;http://www.cpan.org/&quot; target=&quot;_blank&quot;&gt;CPAN&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;a href=&quot;http://testanything.org/&quot; target=&quot;_blank&quot;&gt;TAP (or Test Anything Protocol)&lt;/a&gt; is a &quot;simple text-based interface between testing modules in a test harness. 
TAP started life as part of the test harness for Perl&quot;; it should be noted that, even though it was originally designed for and used in the development of Perl itself, TAP now has 
implementations in C, C++, Python, PHP, Perl, Java, JavaScript, and 
others as well. So this should tell you that at least programmers have noticed and have found the protocol helpful enough to port it to their language.&lt;br /&gt;
&lt;br /&gt;
Our purpose for TAP is very simple: to say &#39;ok&#39; or &#39;not ok&#39; in a standard way with the aim of facilitating communication between the tests and the services used to run / support the tests. That is we use the Test Anything Protocol to report their successes or failures. We can then use other tools to aggregate the information produced by our tests and present it in a human readable form. Below is a sample TAP stream so you can get an idea of what it looks like.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;  1..4  
  ok 1 - Input file opened  
  not ok 2 - First line of the input valid  
  ok 3 - Read the rest of the file  
  not ok 4 - Summarized correctly # TODO Not written yet  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
The above stream output states that we ran 4 tests (1..4). Two of them passed (1,3) while two of them failed (2,4). Simple, isn&#39;t it?&lt;br /&gt;
&lt;br /&gt;
So what do you need to test with Perl? You need three things:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;The AUT&lt;/li&gt;
&lt;li&gt;TAP producer (e.g. &lt;a href=&quot;http://search.cpan.org/~exodist/Test-Simple-1.001008/lib/Test/More.pm&quot; target=&quot;_blank&quot;&gt;Test::More module&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;TAP consumer (e.g. &lt;a href=&quot;http://search.cpan.org/~andya/Test-Harness/lib/TAP/Harness.pm&quot; target=&quot;_blank&quot;&gt;TAP::Harness module&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
I&#39;ll go into details on each one of these on future posts but for now just know that a TAP producer is just a module that does &quot;automation magic&quot; (such as Test::More) and communicates its successes and failures to a TAP consumer (such as TAP::Harness) using the test anything protocol.&lt;br /&gt;
&lt;br /&gt;
There are many testing modules on &lt;a href=&quot;http://www.cpan.org/&quot; target=&quot;_blank&quot;&gt;CPAN&lt;/a&gt; that use TAP to report their successes or failures. In this blog series we will focus on Test::More. We&#39;ll also cover (briefly) the other modules in the Test::* family of modules mainly just to be aware that they are there for you if you need them. To write robust tests in Perl to verify a web application or web site, however, you&#39;ll find that Test::More is more than adequate (no pun intended).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/158878964097924082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/11/testing-with-perl-tap-test-anything.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/158878964097924082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/158878964097924082'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/11/testing-with-perl-tap-test-anything.html' title='Testing with Perl - TAP (the Test Anything Protocol)'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-4356918257593807151</id><published>2014-10-30T08:10:00.000-04:00</published><updated>2021-01-29T08:13:13.523-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CDT"/><category scheme="http://www.blogger.com/atom/ns#" term="ISO29119"/><title type='text'>Same or Different?</title><content type='html'>Can anyone recognize this statement?&lt;br /&gt;
&quot;standard for software testing that can be used within any software development lifecycle or organization.&quot;&lt;br /&gt;
&lt;br /&gt;
What about this one?&lt;br /&gt;
&quot;This is a general testing methodology. It adapts to any kind of project or product&quot;&lt;br /&gt;
&lt;br /&gt;
Give up?&lt;br /&gt;
I find it interesting that these statements are each from a group that have two very opposite points of view regarding standardization.&lt;br /&gt;
&lt;br /&gt;
The first quote is from the ISO 29119 standard. While the second quote is from slide #5 of the Rapid Software Testing class given by the CDT folks James Bach and Michael Bolton.&lt;br /&gt;
&lt;br /&gt;
So I ask: how is it that, if the first statement has raised so much opposition from the Context-Driven school of testing resulting in a #stop29119 petition to be circulated around the community, the second one hasn&#39;t?&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/4356918257593807151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/11/same-or-different.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/4356918257593807151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/4356918257593807151'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/11/same-or-different.html' title='Same or Different?'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-7547741000745815029</id><published>2014-10-22T14:22:00.000-04:00</published><updated>2014-11-01T15:02:55.668-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="opinion"/><title type='text'>#stop29119. Campaign? Or a classic example of the &amp;quot;We Have to Do Something&amp;quot; fallacy?</title><content type='html'>&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;There is no denying that there has been a lot of activity regarding ISO29119 since August of this year and it doesn&#39;t seem like its going to be dying down anytime soon. The standard has certainly created a rift in the training and consulting space that has aggravated a long time rivalry between two schools of thought.&lt;br /&gt;
&lt;br /&gt;
Now, in order to run a successful and, more importantly, profitable business we need to be able to compete and use any tool at our disposal to reach our vision, this includes public debates and functions. One of the things we must keep in mind when talking about standards and certifications is that its a business, most folks know this already but if you don&#39;t now you do. And its a business whether you issue a certificate at the end of the training or not, by the way. Its a business with a bottom line just like Sears. Its a business that needs to fight for its existence or fall prey to its competition.&lt;br /&gt;
&lt;br /&gt;
Aside from a response from Stuard Reid the WG convenor, the ISO camp has been fairly quiet throughout this debacle. This hasn&#39;t been the case for the stop campaign side, however. From them we see statements used like: &quot;where is your skin in the game&quot; or &quot;if the standard is approved all testers will be forced to succumb to and abide by it&quot;. You also read some folks say &quot;you&#39;ll be forced to produce tons of wasteful documentation&quot; or &quot;before your every move you&#39;ll need to get a sign off&quot; when talking or interacting (via social media) with folks that either don&#39;t know of the petitions&#39; existence or have decided to abstain from signing it for a variety of different reasons.&lt;br /&gt;
&lt;br /&gt;
In following this debate on Twitter, LinkedIn and the web (via individual&#39;s blogs). I have noticed a pattern in the rhetoric used by the stop campaign folks which I believe its an almost perfect implementation of the &quot;Scare Tactic&quot;[*1] argument which inevitably leads to a &quot;We Have to Do &lt;i&gt;Something&lt;/i&gt;&quot;[*2] fallacy. In other words the standard is going to be so bad that we should all unite and do something, no matter what that something is. Even if the something is just to stop the darn thing. Sounds counter productive doesn&#39;t it? Why not offer a real solution rather than a call to arms? This is the part that has me, and a lot of others, baffled a bit.&lt;br /&gt;
&lt;br /&gt;
Finally, and for the record once again, I want to be clear that I am not saying that the arguments raised by James Christie based on his own experiences and knowledge is in any way shape or form invalid. I am saying, however, that the ensuing madness does appear to fall within the model of a &quot;Scare Tactic&quot; and &quot;We Have to Do Something&quot; fallacies.&lt;br /&gt;
&lt;br /&gt;
I&#39;m not advocating for just silently accepting the standard either, I&#39;m advocating for doing your own research and coming to your own conclusions based on your own independent investigation. &lt;br /&gt;
&lt;br /&gt;
Even if one believes the allegations expressed by the supporters of the stop campaign it makes you wonder why the scare tactic? As humans we are thinking creatures. We like to be presented with information and be able to analyze that information and come up with our own conclusions. But when things are framed in a way that it is meant to scare or force people into signing, it makes one wonder if there is anything more to this debate. Anything more than business profit, business market share, and of course the all important human mind share.&lt;br /&gt;
&lt;br /&gt;
What say you? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;strong&gt;[*1] &lt;/strong&gt;Scare Tactic&lt;/strong&gt; (Also Paranoia): A variety of Playing on 
 Emotions, a raw appeal to fear. A corrupted argument from Pathos.(E.g., &quot;If 
 you don&#39;t do what I say we&#39;re all gonna die! In this moment of crisis you 
 can&#39;t afford the luxury of thinking or trying to second-guess my decisions. 
 Our very lives are in peril!&amp;nbsp; We need united action, now!&quot;)&lt;br /&gt;
&lt;br /&gt;

 
 &lt;b&gt;&lt;strong&gt;[*2] &lt;/strong&gt;We Have to
    Do &lt;i&gt;Something&lt;/i&gt;&lt;/b&gt;:  The dangerous contemporary fallacy that in moments of crisis
    one must do something, &lt;i&gt;anything&lt;/i&gt;, at once, even if it is an 
    overreaction, is totally ineffective or makes the situation worse, rather 
    than &quot;just sit there doing nothing.&quot;  (E.g., &quot;Banning air passengers from carrying
    ham sandwiches onto the plane probably
    does nothing to deter potential hijackers, but we have to do &lt;i&gt;something&lt;/i&gt; 
 to respond to this crisis!&quot;) This is a corrupted argument from pathos.</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/7547741000745815029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/stop29119-campaign-or-classic-example.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/7547741000745815029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/7547741000745815029'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/stop29119-campaign-or-classic-example.html' title='#stop29119. Campaign? Or a classic example of the &amp;quot;We Have to Do Something&amp;quot; fallacy?'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-8375936442511952799</id><published>2014-10-16T16:42:00.000-04:00</published><updated>2014-11-18T10:32:44.436-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CAT"/><category scheme="http://www.blogger.com/atom/ns#" term="context-aware tester"/><title type='text'>Purpose, Mission and Vision keep testers self focused on things that matter</title><content type='html'>Purpose, Mission and Vision may sound like pointy hair&amp;nbsp; mumbo jumbo to you but what if it isn&#39;t?. In fact I believe it applies to testing and, specifically to Context Aware Testing.&lt;br /&gt;
&lt;br /&gt;
To be context aware means to adapt according to the location, the collection of nearby people, and accessible resources as well as to changes to such things over time. To be a context aware tester means that you have the capabilities to examine the computing and human environments and react to changes to the environments that may affect the product under test.&lt;br /&gt;
&lt;br /&gt;
To help guide us in our journey the Context Aware Tester always lays out his &quot;Test Pact&quot; from the onset. The pact includes the Purpose (the why), Mission (the how)&amp;nbsp;and Vision (the what) for her testing. Lets review an example:&lt;br /&gt;
&lt;br /&gt;
As a contractor she bids for and wins an assignment to test Widget A (an address book application for Windows). During a meeting with the stakeholders you find out this application is for internal use only, their main concern is stability and don&#39;t want the app to crash and cause loss of contact information.&lt;br /&gt;
&lt;br /&gt;
From this bit of information we can begin to define our Test Pact:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;You start with your &lt;b&gt;purpose&lt;/b&gt;. To make sure the contacts application is stable by testing it using real world scenarios.&lt;/li&gt;
&lt;li&gt;We then lay out what it is that we anticipate when we&#39;re done, our &lt;b&gt;vision&lt;/b&gt;.&amp;nbsp;This is our definition of done.&amp;nbsp;In this case we anticipate application stability.&lt;/li&gt;
&lt;li&gt;Next we state the &lt;b&gt;mission&lt;/b&gt;. How are we going to accomplish our goal of verifying the state of the application stability. Load testing, stress testing, volume testing.&lt;/li&gt;
&lt;/ul&gt;
By defining your purpose, mission and vision before starting your testing project (no matter how small) you&#39;d have given yourself a road map as well as a set of constraints to wrap around your testing effort&amp;nbsp;to help&amp;nbsp;keep you focused on the things that matter most (i.e. what&#39;s important). Once you start working, this is also a great way to gauge if what you are being asked to do now (an interruption)&amp;nbsp;interferes with or contradicts any of the Test Pacts you are currently&amp;nbsp;working on.&lt;br /&gt;
&lt;br /&gt;
In nutshell Test Pacts encapsulate the definition of testing for&amp;nbsp;its specific context in the form of purpose, vision and mission. This implies that for a context-aware tester, the definition&amp;nbsp;of testing is not only depending on context, but also possibly different each time.&lt;br /&gt;
&lt;br /&gt;
To a &lt;a href=&quot;http://vgp-miami.blogspot.com/2014/10/context-aware-tester.html&quot; target=&quot;_blank&quot;&gt;context aware tester&lt;/a&gt;, &lt;b&gt;purpose&lt;/b&gt; (why) is&amp;nbsp;her guide while the &lt;b&gt;mission&lt;/b&gt; (how) is what drives her towards the &lt;b&gt;vision &lt;/b&gt;(what). This keeps us closely and tightly aligned with, not only the technical aspects, but also the&amp;nbsp;vision, of the stakeholders&amp;nbsp;as captured in&amp;nbsp;the Test Pacts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/8375936442511952799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/purpose-mission-and-vision-keep-testers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8375936442511952799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8375936442511952799'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/purpose-mission-and-vision-keep-testers.html' title='Purpose, Mission and Vision keep testers self focused on things that matter'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-6544870313192728693</id><published>2014-10-15T13:39:00.000-04:00</published><updated>2014-10-16T09:04:59.559-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><title type='text'>Run a test suite using Perl</title><content type='html'>So you have a bunch of functionality you&#39;ve automated and you&#39;d like to execute the scripts unattended both on a set schedule as well as on certain triggers.&lt;br /&gt;
In this quick post (which I also did a while back &lt;a href=&quot;http://vgp-miami.blogspot.com/2011/07/how-to-create-selenium-test-suite-using.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;) I show you one way of&amp;nbsp;running a&amp;nbsp;test suite executing tests sequentially (i.e. one after the other) from the command line by using Perl. The script is appropriately named run_test_suite.pl&lt;br /&gt;
The code&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;1:  #!C:/Perl64/bin/perl  
2:  use &lt;a href=&quot;http://perldoc.perl.org/strict.html&quot; target=&quot;_blank&quot;&gt;strict&lt;/a&gt;;  
3:  use &lt;a href=&quot;http://perldoc.perl.org/warnings.html&quot; target=&quot;_blank&quot;&gt;warnings&lt;/a&gt;;  
4:    
5:   my $result_dir = &quot;C:\\Automation\\Tests\\&lt;a href=&quot;http://perldoc.perl.org/perlvar.html&quot; target=&quot;_blank&quot;&gt;$ARGV[0]&lt;/a&gt;\\&quot;;  
6:   &lt;a href=&quot;http://perldoc.perl.org/functions/opendir.html&quot; target=&quot;_blank&quot;&gt;opendir&lt;/a&gt; (my ($dh), $result_dir) or &lt;a href=&quot;http://perldoc.perl.org/functions/die.html&quot; target=&quot;_blank&quot;&gt;die&lt;/a&gt; &quot;can&#39;t open dir: $!&quot;;  
7:    
8:   &lt;a href=&quot;http://perldoc.perl.org/perlsyn.html#Compound-Statements&quot; target=&quot;_blank&quot;&gt;while&lt;/a&gt; (&lt;a href=&quot;http://perldoc.perl.org/functions/readdir.html&quot; target=&quot;_blank&quot;&gt;readdir&lt;/a&gt; $dh){  
9:    if ($_ =~ /pl$/){  
10:     &lt;a href=&quot;http://perldoc.perl.org/functions/system.html&quot; target=&quot;_blank&quot;&gt;system&lt;/a&gt; ( $result_dir . &lt;a href=&quot;http://perldoc.perl.org/perlvar.html&quot; target=&quot;_blank&quot;&gt;$_&lt;/a&gt; );  
11:    }  
12:   }  
&lt;/code&gt;&lt;/pre&gt;
This script takes one parameter [line 5], the name of directory in the C:\Automation\Tests folder which is where the test scripts should reside. We use this value to read all of the files in the directory [line 6] and, using regular expressions, only action on the ones that end in pl [line 9] (since we&#39;re looking for Perl files). Finally we use the system function to execute the script [line 10]&lt;br /&gt;
Once you have the above script, assuming you have perl.exe in your path and Perl mapped to open your pl files, to run manually type&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;1:  c:\&amp;gt;run_test_suite.pl functional_tests   
&lt;/code&gt;&lt;/pre&gt;
Alternatively you can add the Perl script, using your services manager or crontab, to the list of services to be run periodically. Or add it to your CI flow to be executed when certain conditions are met.</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/6544870313192728693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/run-test-suite-using-perl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/6544870313192728693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/6544870313192728693'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/run-test-suite-using-perl.html' title='Run a test suite using Perl'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-5874840197313894355</id><published>2014-10-09T17:27:00.000-04:00</published><updated>2014-11-05T17:38:30.368-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CAT"/><category scheme="http://www.blogger.com/atom/ns#" term="context-aware tester"/><title type='text'>The Context Aware Tester</title><content type='html'>What is Context? &lt;br /&gt;
&quot;The word &quot;context&quot; stems from a study of human &quot;text&quot;; and the idea of &quot;situated cognition,&quot; that context changes the interpretation of text&quot; ***&lt;br /&gt;
&lt;br /&gt;
What does it means to be a Context Aware Tester?&lt;br /&gt;
A Context Aware tester knows (see above) that context changes the interpretation of what &quot;testing&quot; and &quot;tests&quot; means. And, as well:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;A context-aware tester knows that each situation will most likely require a custom approach.&lt;/li&gt;
&lt;li&gt;Likewise, A context-aware tester rejects the notion that a specific approach is the only approach to all problems.&lt;/li&gt;
&lt;li&gt;A context-aware tester does not reject any practice, technique, or method (not even another 
approach) when it comes to the who, what, when, where, and why&amp;nbsp;of testing. &lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
In his 1994 paper at the Workshop on Mobile Computing Systems and 
Applications (WMCSA), Bill Schilit introduces  the concept of 
context-aware computing and describes it as follows:&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 20px; margin-left: 20px; margin-top: 20px; width: 90%;&quot;&gt;
&lt;span style=&quot;color: silver; float: left; font-family: &#39;Times New Roman&#39;, Times, serif !important; font-size: 350%; font-weight: bold; line-height: 50% !important; margin: 0px; text-indent: 0px;&quot;&gt;“&lt;/span&gt;
Such context-aware software adapts according to the location of use, the
 collection of nearby people, hosts, and accessible devices, as well as 
to changes to such things over time. A system with these capabilities 
can examine the computing environment and react to changes to the 
environment.
&lt;span style=&quot;clear: left; color: silver; float: right; font-family: &#39;Times New Roman&#39;, Times, serif !important; font-size: 350%; font-weight: bold; line-height: 50% !important; margin: 0px;&quot;&gt;”&lt;/span&gt;
        &lt;/div&gt;
&lt;div style=&quot;margin-right: 20px; margin-top: 0px; text-align: right; width: 90%;&quot;&gt;
-- &lt;span class=&quot;fakeLink&quot; style=&quot;border-bottom-color: rgb(0, 0, 0) !important; border-bottom-style: dotted !important; border-bottom-width: 1px !important; color: #0000a0;&quot;&gt;Schilit et al 1994&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
Just like Schilit describes &quot;context-aware software&quot; as adapting &quot;according to the location of use, the collection of nearby people, and accessible devices as well as to changes to such things over time.&quot;, so is a Context Aware tester and in doing so has the capabilities to examine the computing and human environment and react to changes to the environment that may affect the product under test.&lt;br /&gt;
Oh, and no, being a Context Aware tester does not mean you are now a member of a school. Context Aware is not a school. Is an approach to help solve hard, and easy, testing problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*** &lt;a href=&quot;http://en.wikipedia.org/wiki/Context_awareness#Qualities_of_context&quot;&gt;http://en.wikipedia.org/wiki/Context_awareness#Qualities_of_context&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/5874840197313894355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/context-aware-tester.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/5874840197313894355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/5874840197313894355'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/context-aware-tester.html' title='The Context Aware Tester'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-8379749154378687385</id><published>2014-10-06T17:27:00.001-04:00</published><updated>2014-10-08T08:08:51.783-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="data driven test"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="selenium"/><category scheme="http://www.blogger.com/atom/ns#" term="Webdriver"/><title type='text'>A method to Data Drive your Selenium automated tests</title><content type='html'>I was just approached by a colleague who wanted to know how I data drive my tests when automating. Since this is probably a common enough question I figured I share in my blog.&lt;br /&gt;
&lt;br /&gt;
One of my favorite approaches to data drive my tests is to use database tables to store the data. By using a database, such as MySql, you save yourself a lot of time in the maintenance and mining of the test data. You also get to, based on the query, select only certain type of data to be included during the current test run.&lt;br /&gt;
&lt;br /&gt;
Lets say for example that you want to test the login function of your web application / site. You already have a user table set up in your database that has a large amount of user names, passwords in different combinations (e.g. valid user, invalid user, male, female, etc). You can leverage MySql by constructing a query that covers the specific users you would like run the test for.&lt;br /&gt;
&lt;br /&gt;
Below is a quick example to try to illustrate the above.&lt;br /&gt;
&lt;br /&gt;
DB test_data_tbl:&lt;br /&gt;
user_id&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; password&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; gender&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; active&lt;br /&gt;
user1&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user1pw&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; male&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
user2&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; user2pw&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; male&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
user3&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; user3pw&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; female&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
&lt;br /&gt;
Pseudo code:&lt;br /&gt;
1) Query the database for all valid users that are male&lt;br /&gt;
2) For each of the users returned&lt;br /&gt;
2a) Instantiate Selenium&lt;br /&gt;
2b) Open the home / start page&lt;br /&gt;
2c) Login to the application&lt;br /&gt;
2d) Close the session&lt;br /&gt;
&lt;br /&gt;
Sample code in Perl:&lt;br /&gt;
&lt;pre style=&quot;background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;-ms-word-wrap: normal; color: black;&quot;&gt;1:  my $query = &quot;SELECT user_id, password  
2:             FROM test_data_tbl  
3:             WHERE account_active = true  
4:             AND gender = &#39;male&#39;  
5:             LIMIT 3;&quot;;  
6:    
7:  while ( my( $user_id, $password ) = $sth-&amp;gt;fetchrow_array() ) {  
8:    # SsApp is a custom module where the stuff to set up selenium has been abstracted.  
9:    my $driver = Custom::SsApp::setup_selenium( \%desired_capabilities );  
10:    $driver-&amp;gt;get( APPHOME );  
11:    $driver-&amp;gt;find_element( $user_name_target, $user_name_locator )-&amp;gt;send_keys( $user_id );  
12:    $driver-&amp;gt;find_element( $password_target, $password_locator )-&amp;gt;send_keys( $password );  
13:    $driver-&amp;gt;quit();  
14:  }  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
With this approach you can have easy access to your test data by just querying a database table. You can also replace the &lt;code&gt;while&lt;/code&gt; loop with a 
&lt;code&gt;foreach&lt;/code&gt;
loop or whatever looping construct your programming language supports. The basic idea is to iterate through your data and execute each test using each data set.</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/8379749154378687385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/i-was-just-approached-by-colleague-who.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8379749154378687385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8379749154378687385'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/10/i-was-just-approached-by-colleague-who.html' title='A method to Data Drive your Selenium automated tests'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-6521070826486893487</id><published>2014-09-26T16:35:00.001-04:00</published><updated>2014-10-06T20:57:06.193-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CDT"/><category scheme="http://www.blogger.com/atom/ns#" term="certification"/><category scheme="http://www.blogger.com/atom/ns#" term="ISO29119"/><category scheme="http://www.blogger.com/atom/ns#" term="ISTQB"/><category scheme="http://www.blogger.com/atom/ns#" term="opinion"/><category scheme="http://www.blogger.com/atom/ns#" term="Professional Testers Manifesto"/><title type='text'>Professional Testers Manifesto?</title><content type='html'>Around the same time that the #stop29119 campaign was being organized by the Context Driven Testing school of thought, a &lt;a href=&quot;http://www.professionaltestersmanifesto.org/&quot; target=&quot;_blank&quot;&gt;Professional Testers Manifesto&lt;/a&gt; was issued by the same school via Karen Johnson&#39;s blog post titled &lt;a href=&quot;http://karennicolejohnson.com/2014/08/my-thoughts-on-testing-certifications/&quot; target=&quot;_blank&quot;&gt;My Thoughts on Testing Certifications&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Below is the manifesto&#39;s text in its entirety.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;strong&gt;I, as a professional software tester, believe:&lt;/strong&gt;&lt;br /&gt;
That standards compliance is no substitute for knowledge and skills, and that possessing a certificate demonstrates neither.&lt;br /&gt;
That companies have been convinced that only certified testers should be hired.&lt;br /&gt;
That organizations who use certification as a surrogate for rigorous 
selection processes place the quality of their testing at risk.&lt;br /&gt;
That organizations who make money from creating or promoting 
standards and certifications are biased in their thinking by the 
potential financial rewards of convincing organizations that only 
certified testers are professional testers. Those organizations may 
include those who sell training, consulting or other related services.&lt;br /&gt;
That testing benefits from diversity and not homogeneity: that 
testing is not a profession that can be standardized but instead needs 
to remain an intellectual professional activity.&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;That choosing not to be certified does 
not mean I do not take my profession seriously. It is because I take my 
profession seriously that I choose not to be certified.&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
As soon as I read the first two sentences, I knew that this manifesto did not resonate with me. As I read on it became apparent that this was a continuation of the #stop29119 campaign, extended to certifications and training. It is basically a set of sentences that concentrate on discrediting as well as bashing the current certificate programs and their bearers.&lt;br /&gt;
&lt;br /&gt;
I was expecting to find, in this manifesto, a call to unity. A call to our sense of pride and professionalism that all testers, from all schools (and even the free-thinking ones that don&#39;t choose a school) can feel proud in signing. Instead what I found was yet another list of complaints against the standards and certification folks. And that, I don&#39;t subscribe to. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;Below is my reply to each point in the manifesto. My responses are in italics.&lt;br /&gt;
&lt;br /&gt;
1. I as a professional software tester, believe:&lt;br /&gt;
A. &lt;i&gt;I find this interesting. Because this can be taken many ways, depending on perspective. But my main gripe is why is the word &#39;professional&#39; included here? Are there testers that are not professionals? Do I have to sign the manifesto to be considered a professional?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
2. That standards compliance is no substitute for knowledge and skills, and that possessing a certificate demonstrates neither.&lt;br /&gt;
A. &lt;i&gt;Why do I have to declare this? Is this not known my folks in our profession already? And if not, how many do&amp;nbsp; not know? The answer is that we do not know the answer. So one cannot assume that people do not know this already.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
3. That companies have been convinced that only certified testers should be hired.&lt;br /&gt;
A. &lt;i&gt;Really? I&#39;ve worked at many companies that never even heard&amp;nbsp; of classes (ISBT, RST, etc) and courses &lt;/i&gt;&lt;i&gt;let alone &lt;/i&gt;&lt;i&gt;of a certificate. How can we assert that companies have been convinced of this?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
4. That organizations who use certification as a surrogate for rigorous 
selection processes place the quality of their testing at risk.&lt;br /&gt;
&amp;nbsp;A. &lt;i&gt;Again, why do we have to declare this? An argument can be made that companies that don&#39;t know any better can be biased by a certificate and probably no one can refute this. However, this does not invalidate courses that end up in certification.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
5. That organizations who make money from creating or promoting 
standards and certifications are biased in their thinking by the 
potential financial rewards of convincing organizations that only 
certified testers are professional testers. Those organizations may 
include those who sell training, consulting or other related services.&lt;br /&gt;
A.&amp;nbsp; &lt;i&gt;Of course a company that promotes standards and certifications would be biased in their telling their customers that they should hire certified testers. Just like the folks against certifications (mainly the CDT school) are biased in their telling their customers that they should hire CDT school of thought testers and not certified testers.&lt;/i&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
6. That testing benefits from diversity and not homogeneity: that 
testing is not a profession that can be standardized but instead needs 
to remain an intellectual professional activity.&lt;br /&gt;
A. &lt;i&gt;This echoes the stop29119 campaign. Tell me, fellow testers, how many of you do not know that testing benefits from diversity? Even if the manifesto is aimed at non-testers (i.e. managers, hr, etc) we&#39;re talking about common sense. Any human understands this concept intuitively as well.&lt;/i&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;7. That choosing not to be certified does 
not mean I do not take my profession seriously. It is because I take my 
profession seriously that I choose not to be certified.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;A. &lt;i&gt;This statement implies that the folks that are certified do not take their profession seriously. Is this the message we want to convey?&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;I find the Professional Testers Manifesto not to be inline with my values nor with my mission as a tester. I see it as another attempt to further polarize a community of very talented testers and engineers; and this does not serve any of us in the end.&lt;i&gt; &lt;/i&gt;Why should we have to choose a side? There are many of us that do not feel threatened by standards nor certifications. There are many of us that view these courses the manifesto is speaking of (whether they lead to a certification or not) to be valuable source of&amp;nbsp; information, skills, and knowledge. Another weapon in your arsenal of test tools. Another perspective, if you will. This manifesto that claimed to be for all testers, IMO, really should have been called the Context Driven School of Thought Professional Testers Manifesto. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;I am a professional tester and for the reasons given above, I abstained from signing the Professional Testers Manifesto.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/6521070826486893487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/09/i-did-not-sign-professional-testers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/6521070826486893487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/6521070826486893487'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/09/i-did-not-sign-professional-testers.html' title='Professional Testers Manifesto?'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-7294893327195983942</id><published>2014-09-24T16:19:00.025-04:00</published><updated>2021-01-29T08:22:42.324-05:00</updated><title type='text'>Opposition to 29119</title><content type='html'>&lt;p&gt;This morning, while going through some storage items, I found one of my old computers that included links to some content I created but never published; mainly because I created it for archival purposes and history. This specific one below is regarding the [futile] opposition to the testing standard that existed amongst all of the &quot;Context Driven Testing&quot; school of thought folks and their almost comical attempts to engage me in debate which was really not a debate but more of a &quot;revenge of the nerds&quot; type of attack...&amp;nbsp;&lt;/p&gt;&lt;p&gt;I kept the original publish date and time (again for archival purposes and to facilitate research of the topic within the context of the time period in which the so called &quot;debate&quot; occurred).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Anyways here is is is below in their full comical glory for your reading enjoyment!&lt;/p&gt;&lt;p&gt;&lt;b&gt;Opposition to 29119&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Some of the members of the CDT school and their views on &quot;the standard&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;
&lt;a href=&quot;https://twitter.com/james_christie&quot;&gt;@james_christie&lt;/a&gt; Although they have a right to do that, the basis that choice is deception. My methodology had no fair shot at selection.&lt;br /&gt;
— James Marcus Bach (@jamesmarcusbach) &lt;a href=&quot;https://twitter.com/jamesmarcusbach/status/504706387474395136&quot;&gt;August 27, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;//platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;In response to a comment I made on LinkedIn where I was countering the position that testers would be &quot;force to test to a specific standard&quot;, James Christie tweeted the discussion with my portion highlighted which triggered a flurry of responses from the likes of Michael Bolton (@michaelbolton), James Bach (@jamesmarcusbach) and included an insult from Curtis @cowboytesting transcript is below:&lt;br /&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;
&lt;a href=&quot;https://twitter.com/jamesmarcusbach&quot;&gt;@jamesmarcusbach&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/james_christie&quot;&gt;@james_christie&lt;/a&gt; is quoting an infamous popinjay who inhabits a few &lt;a href=&quot;https://twitter.com/hashtag/LinkedIn?src=hash&quot;&gt;#LinkedIn&lt;/a&gt; forums with the express purpose of irritation&lt;br /&gt;
— Curtis Stuehrenberg (@cowboytesting) &lt;a href=&quot;https://twitter.com/cowboytesting/status/504740614710120448&quot;&gt;August 27, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;//platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;

&lt;br /&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;
&lt;a href=&quot;https://twitter.com/vgpmiami&quot;&gt;@vgpmiami&lt;/a&gt; &lt;a href=&quot;https://twitter.com/cowboytesting&quot;&gt;@cowboytesting&lt;/a&gt; &lt;a href=&quot;https://twitter.com/james_christie&quot;&gt;@james_christie&lt;/a&gt; You get what you deserve. Don&#39;t expect decorum to save you.&lt;br /&gt;
— James Marcus Bach (@jamesmarcusbach) &lt;a href=&quot;https://twitter.com/jamesmarcusbach/status/511263634534567936&quot;&gt;September 14, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;//platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;
The above display adds substance to my theory that these folks just want to stop the standard for no other reason than they are pissed. Angry at the fact that, as James Bach puts it &quot;my standard was not included&quot;.&lt;br /&gt;
&lt;br /&gt;
In the past I have likened the&amp;nbsp;&lt;a href=&quot;https://twitter.com/hashtag/stop29119&quot; target=&quot;_blank&quot;&gt;#stop29119&lt;/a&gt; petition&amp;nbsp;to an a after school fight, where you have one side waiting for the other to come out in order to jump them. &amp;nbsp;Well if you follow social media, if you follow the numerous blog posts on the stop campaign (which almost all are from members of the CDT school) they all have a similar tone: fight! In fact some have even called it a fight!&lt;br /&gt;
&lt;br /&gt;
But please&amp;nbsp;do not take my word for it,&amp;nbsp;I urge&amp;nbsp;everyone to&amp;nbsp;follow the #stop29119 hashtag on Twitter to get an earful.&lt;br /&gt;
&lt;br /&gt;
For reference, here is my comment as posted (out of context) by James Christie that started the whole mess of personal attacks.&lt;br /&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;
Don&#39;t worry. You won&#39;t be forced to use ISO 29119. You can resign instead. &lt;a href=&quot;https://twitter.com/hashtag/stop29119?src=hash&quot;&gt;#stop29119&lt;/a&gt; &lt;a href=&quot;https://t.co/00hmicOFRh&quot;&gt;https://t.co/00hmicOFRh&lt;/a&gt;? &lt;a href=&quot;http://t.co/xBn8o0nWLr&quot;&gt;pic.twitter.com/xBn8o0nWLr&lt;/a&gt;&lt;br /&gt;
— James Christie (@james_christie) &lt;a href=&quot;https://twitter.com/james_christie/status/504700977581424640&quot;&gt;August 27, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; charset=&quot;utf-8&quot; src=&quot;//platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/7294893327195983942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/09/opposition-to-29119.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/7294893327195983942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/7294893327195983942'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/09/opposition-to-29119.html' title='Opposition to 29119'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-46302584333350028</id><published>2014-09-23T15:44:00.000-04:00</published><updated>2014-09-25T09:35:40.622-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CDT"/><category scheme="http://www.blogger.com/atom/ns#" term="certification"/><category scheme="http://www.blogger.com/atom/ns#" term="ISTQB"/><title type='text'>Regarding Course Completion Certificates</title><content type='html'>First off I&#39;d like to point out that I, in no way shape or form, support shady practices of _any_ consulting firm or training center that sells &quot;certifications&quot; without &quot;education&quot;. In other words I do not support testing houses that are just teaching to pass a test and issuing out certificates to students that want / need these certificates in order to gain employment, advance their careers or whatever it is they do with these things, and not actually providing an education.&lt;br /&gt;
&lt;br /&gt;
I am for and do support continuous learning, teaching, mentoring and advancing our community in any positive way that I can.&lt;br /&gt;
&lt;br /&gt;
That being said on to business: what is the difference between the two certificates you find below? Now I am not just talking about the obvious differences; that one is from the ISTQB and the other from the CDT folks. I am also aware of the syllabus differences, not talking about those either. I am more interested in what is the underlying principle behind both of these certificates? In other words the why.&lt;br /&gt;
&lt;br /&gt;
First we have the ISTQB Foundations Series Certificate of Completion&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://2.bp.blogspot.com/-Lnbsrgjp5XE/VCHHe457R9I/AAAAAAAAAT0/-tEumtdEc1E/s1600/ISTQB-Certificate.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-Lnbsrgjp5XE/VCHHe457R9I/AAAAAAAAAT0/-tEumtdEc1E/s1600/ISTQB-Certificate.jpg&quot; height=&quot;232&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Second we have the Rapid Software Testing class (from the CDT folks) Certificate of Completion&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-RKdI9o8r8PE/VCHH2GZw3KI/AAAAAAAAAT8/sMGwYeIjyl0/s1600/RST-Certificate-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-RKdI9o8r8PE/VCHH2GZw3KI/AAAAAAAAAT8/sMGwYeIjyl0/s1600/RST-Certificate-2.jpg&quot; height=&quot;225&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
My gut tells me that these are just two pieces of paper that probably mean something just to the bearer. But, they can also probably be used by the bearer to gain access to special clubs (probably some of them even have secret hand shakes). Or to flash at an interview in order to impress your employer and gain &quot;favorites&quot; when it comes down to choosing the &quot;right candidate&quot;. Heck you can even add this to your resume / CV in bold letters so that, before the interview, you can let prospective employers / interviewers know which &quot;special club&quot; you belong to. These are but a few of what I think are valid uses for both of these certificates; as any other certificate.&lt;br /&gt;
&lt;br /&gt;
But isn&#39;t the difference in underlying principle between both of these courses that there is no difference? Are both courses not teaching (or supposed to be teaching) skills, terminology, etc that will not only improve the knowledge of testers but also benefit their employers and customers? Are&amp;nbsp; both courses not giving you access to a network of other like minded individuals that also share a common love for testing and our profession?&lt;br /&gt;
&lt;br /&gt;
Your thoughts and comments are welcomed. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/46302584333350028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/09/regarding-course-completion-certificates.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/46302584333350028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/46302584333350028'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/09/regarding-course-completion-certificates.html' title='Regarding Course Completion Certificates'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Lnbsrgjp5XE/VCHHe457R9I/AAAAAAAAAT0/-tEumtdEc1E/s72-c/ISTQB-Certificate.jpg" height="72" width="72"/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-1421923426584162432</id><published>2014-09-21T13:40:00.002-04:00</published><updated>2021-01-29T12:50:30.255-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ISO29119"/><category scheme="http://www.blogger.com/atom/ns#" term="opinion"/><title type='text'>Open Letter to the Testing Community (re: ISO 29119 conflict)</title><content type='html'>&lt;p&gt;&lt;span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;Although&amp;nbsp;folks
 have been talking about&amp;nbsp;ISO29119&amp;nbsp;and its possible impact on the testing
 community for a while now, it wasn&#39;t until this past August at CAST 
2014 that the issue really took off. &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;James Christie, one of the speakers at the conference, gave a&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;&amp;nbsp;presentation regarding his opposition to the standard. This action is what I consider the catalyst for the&amp;nbsp;oppos&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;ition&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt; that has followed&amp;nbsp;since then.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;&amp;nbsp;But why the opposition? And why now?&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;These are&amp;nbsp;but a couple of questions I will try to answer during this writing.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/p&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;b&gt;&lt;span class=&quot;TextRun SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;Who are the opponents?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;EOP SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;The main opponents of 29119 seemed to have gathered around the newly formed&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;ISST whose mission, as stated on their website, is to &quot;Advocate for the adoption of context driven testing&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;.
 I have not yet found any opponent to&amp;nbsp;29119&amp;nbsp;that were not a member of 
the Context-Driven school of testing.&amp;nbsp;And if there are&amp;nbsp;any, they have 
not been vocal as of yet.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;b&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;
&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;span&gt;
&lt;/span&gt;&lt;/b&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;&lt;b&gt;
&lt;/b&gt;&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;b&gt;&lt;span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;Why are they opposing it?&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;In
 order to understand the opposition, one has to do a little bit of 
research and go back in history (not that long just a few years). I have
 observed that there always has&amp;nbsp;been conflict and friction&amp;nbsp;going on 
between the ISTQB and the CDT folks.&amp;nbsp;And since the creators of 
the&amp;nbsp;petition feel that there is a link between the ISTQB and ISO29119 
they must oppose it. Evidence of this&amp;nbsp;as well as t&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;his
 opposition has been brewing on many&amp;nbsp;social circles&amp;nbsp;including LinkedIn 
and&amp;nbsp;Twitter just to name a few, just do a search on any of these mediums
 and you&#39;ll find plenty of lively debates on the subject&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;.
 In all of the conversations I follow on&amp;nbsp;social media and read on blog 
posts from the many members of the CDT the common theme is basically the
 same;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;
 we must oppose the standard because we cannot standardize testing. They
 basically just oppose it but do not offer an alternative. &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;This
 leads me to believe that they are opposing it because they must! 
Picture here in the USA you are a member of the Republican party and 
they propose a bill. The Democrats will review this bill and decide they
 are against it and request that all members of their party vote against
 this bill. But wait, what about all of the members of both political 
parties individual opinion about this bill? Well, that doesn’t count as 
much as the greater&amp;nbsp;goal: to advance the parties political agendas.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;b&gt;&lt;span class=&quot;TextRun SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;Why now?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;EOP SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;Quite
 frankly the reason this&amp;nbsp;petition to&amp;nbsp;#stop29119&amp;nbsp;happened is because the 
time was right. There was a captive audience (at CAST), a presentation 
was given (regarding 29119 opposition), the response was observed and 
the opportunity taken.&amp;nbsp;And the petition was born&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;. Granted&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt; this is an over-simplif&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;ied&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;timeline, however, based on the transcripts of roundtable discussions&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;&amp;nbsp;I have read its all based on facts.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;b&gt;&lt;span class=&quot;TextRun SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;What&amp;nbsp;about us free-thinking testers that welcome input from all schools?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;EOP SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;I for one choose not join any particular school of thought.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;I
 am a free-thinking tester that believes that testing has always been a 
human function and based on context.&amp;nbsp;In fact everything we do, as 
humans, is based on context!&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;I also welcome any structure or process&amp;nbsp;offered by an organization or individual&amp;nbsp;(standard or not), why? Because if&amp;nbsp;we&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;truly
 believe that testing is based on context, then obviously one must&amp;nbsp;keep 
an open mind to _ALL_ approaches, processes and methods. Further, I 
think that opposing a specific&amp;nbsp;approach, process or method limits&amp;nbsp;our 
ability&amp;nbsp;as a tester and does not help our customer in&amp;nbsp;the long run.&amp;nbsp;This
 is why I have abstained from signing the #stop29119 petition&amp;nbsp;and 
urge&amp;nbsp;all folks in our profession to do your own research&amp;nbsp;before signing.
 Ask yourselves&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;
 how will this standard change the way I test? My answer is, if you 
believe testing is a human function and based on context,&amp;nbsp;it will not.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;
&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;b&gt;&lt;span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX60473332&quot; style=&quot;font-family: Cambria,Serif; font-size: 12pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;OutlineElement Ltr SCX60473332&quot; style=&quot;margin-left: 0px; text-indent: 0px;&quot;&gt;&lt;span&gt;
&lt;/span&gt;&lt;div class=&quot;Paragraph SCX60473332&quot; style=&quot;background-color: transparent; font-family: &amp;quot;Segoe UI&amp;quot;, Tahoma, Verdana, &amp;quot;Sans-Serif&amp;quot;; font-size: 6pt; font-style: normal; font-weight: normal; text-align: left; text-indent: 0px; vertical-align: baseline;&quot;&gt;
&lt;span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;As free-thinking testers it is our&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;
 responsibility to take charge of the direction we want our profession 
to head towards.&amp;nbsp;It is my view that keeping an open mind and 
including&amp;nbsp;everyone is the only way to stop this conflict and advance our
 profession. Everything has its place;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;standardization and&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;certification as well as no standardization or certification. As context driven testers we should know &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;TextRun SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;&lt;span class=&quot;NormalTextRun SCX60473332&quot; style=&quot;background-color: inherit;&quot;&gt;when&amp;nbsp;to choose each one.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;EOP SCX60473332&quot; face=&quot;Calibri,Sans-Serif&quot; style=&quot;font-size: 11pt; line-height: 19px;&quot;&gt;
 All this petition to #stop29119 is doing is polarizing testing and the 
members of our community. This goes against my values and my mission so I
 choose to abstain from signing the petition.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/1421923426584162432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/09/open-letter-to-testing-community-re-iso.html#comment-form' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/1421923426584162432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/1421923426584162432'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/09/open-letter-to-testing-community-re-iso.html' title='Open Letter to the Testing Community (re: ISO 29119 conflict)'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-3596092330559357239</id><published>2014-07-21T12:47:00.001-04:00</published><updated>2014-09-16T13:53:00.207-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="functional testing"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="selenium"/><category scheme="http://www.blogger.com/atom/ns#" term="Webdriver"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Interact with Windows modal dialog from your Selenium scripts</title><content type='html'>While testing web applications sometimes we encounter Windows popup 
dialogs (modal windows) that block operation until the dialog is 
cleared. Below is how I solved this issue. Please note that there are 
other options out there (e.g. AutoIt), however, I decided against 
calling an external exe and opted for integrating the tried and true 
Win32::GuiTest module for this task; mainly because it is written in the
 same language as the bindings and so there is no need to call external 
executables as well as learning a new &quot;language&quot;, simply call a method.&lt;br /&gt;
&lt;br /&gt;
NOTE: The workhorse of this solution is the SendKeys call.&lt;br /&gt;
&lt;br /&gt;
In your test script:&lt;br /&gt;
&lt;pre style=&quot;background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;1:  my $win_id = 0;  
2:  my $win_title = &#39;Test window title&#39;;  
3:  my $win_class = &#39;Class name&#39;;  
4:    
5:  $driver-&amp;gt;key_press_native( $win_id, $win_title, $win_class, &#39;ENTER&#39; );  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
In the Driver.pm OR in your page object:&lt;br /&gt;
&lt;pre style=&quot;background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;1:  sub key_press_native {  
2:    
3:    my ( $self, $win_id, $win_title, $win_class, $keycode ) = @_;  
4:    
5:    use Win32::GuiTest qw(FindWindowLike GetWindowText SetForegroundWindow SendKeys);  
6:     
7:    $Win32::GuiTest::debug = 0; # Set to &quot;1&quot; to enable verbose mode  
8:    # First find the window of interest.  
9:    my @windows = FindWindowLike( $win_id, &quot;^$win_title&quot;, &quot;^$win_class\$&quot; );  
10:    
11:    # Then we iterate through that list and send the &quot;keys&quot; to any matching window.  
12:    for (@windows) {  
13:      SetForegroundWindow($_);  
14:      SendKeys(&quot;{$keycode}&quot;);  
15:      Custom::TagSubs::wait_for(2);  
16:    }  
17:    return;  
18:  }  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
As you can see from the above, the solution requires the test 
developer to know the pertinent details of the window we will be 
interacting with (i.e. window id, window title, window class) as well as the key(s) you would like to press (i.e. keycode). Luckily Win32::GuiTest comes with a tool found in 
Recoder\Win32GuiTest.exe which you can use to get &quot;Window Hints&quot; (i.e. 
WinClass, WinTitle, etc).&lt;br /&gt;
Some caveats:&lt;br /&gt;
&lt;ul class=&quot;task-list&quot;&gt;
&lt;li&gt;The solution uses the SetForegroundWindow call which means that it 
does require the window being interacted with to be able to be brought 
to the foreground. &lt;/li&gt;
&lt;/ul&gt;
Information on Win32::GuiTest can be found here: &lt;a href=&quot;http://search.cpan.org/~karasik/Win32-GuiTest-1.60/lib/Win32/GuiTest.pm&quot; target=&quot;_blank&quot;&gt;http://search.cpan.org/~karasik/Win32-GuiTest-1.60/lib/Win32/GuiTest.pm&lt;/a&gt; you can also find key codes in the module documentation.&lt;br /&gt;
&lt;br /&gt;
Feel free to drop a line or comment.</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/3596092330559357239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/07/interact-with-windows-modal-dialog.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/3596092330559357239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/3596092330559357239'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/07/interact-with-windows-modal-dialog.html' title='Interact with Windows modal dialog from your Selenium scripts'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-8279673549435962549</id><published>2014-03-06T17:25:00.001-05:00</published><updated>2021-01-29T08:29:22.015-05:00</updated><title type='text'>Michael Bolton&#39;s view on the &quot;assertive dissenter&quot;</title><content type='html'>&lt;div class=&quot;commenter&quot;&gt;This is another one I found in my archives which I kept just for historic purposes. I find it interesting that 7 years later the B&amp;amp;B klan still has not been able to make inroads in the testing world where it counts. I mean, don&#39;t get me wrong, they do get some converts right out of college when folks are more impressionable, but these folks quickly figure out the scheme and move on to how the real world conducts themselves in the context of software testing and Quality Engineering. It is a natural progression, in my most humble opinion.&lt;/div&gt;&lt;div class=&quot;commenter&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;commenter&quot;&gt;Anyways here it is, unedited, for your full reading pleasure.&lt;/div&gt;&lt;div class=&quot;commenter&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;commenter&quot;&gt;&lt;b&gt;MB&#39;s view on the &quot;assertive dissenter&quot;&lt;/b&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;commenter&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;commenter&quot;&gt;During a not so recent debate on a LinkedIn group (&lt;a href=&quot;http://www.linkedin.com/groupItem?view=&amp;amp;gid=55636&amp;amp;type=member&amp;amp;item=94099605&amp;amp;qid=5d9d823f-bc0d-47bb-b487-96f4a6693d5f&amp;amp;trk=group_most_popular-0-b-ttl&amp;amp;goback=%2Egmp_55636&quot; target=&quot;_blank&quot;&gt;Software Testing &amp;amp; Quality Assurance&lt;/a&gt;) I asked Michael Bolton if he subscribed to the principle described by James Bach, a person whom he quoted on numerous occasions,&amp;nbsp; the reason I asked is because in the thread he was instantaneously explosive onto the scene with the following first comment:&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;It&#39;s not difficult to
 conceive of evaluating things without putting numbers anywhere near the
 centre of the study. A qualitative inquiry can reveal a significant 
amount of useful information.  For example, watch this:
&lt;br /&gt;

&lt;br /&gt;
Freddy, Donald, Eric, Griffin, Augusto, Bobby, and William:  Without 
looking anything up, and working off the top of your head, what can you 
tell this group about /construct validity/?
&lt;br /&gt;

&lt;br /&gt;
---Michael B.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;So he&#39;s jumping in here as the scientist in charge, attempting to railroad me and a few others (from both his camp and everyone else) into being lab mice for his experiment in which he wishes to prove that he is truly a mastermind. As if unaware that, somewhere, out there in this great planet, there is human life capable of not only thinking what he has already thought of, but extend it to the point where it cannot be refuted.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;He [M.B.] was presuming that, because we did not hold his point of view on the specific subject (bug counts), we had no idea about what he was proposing. Needless to say there have been 319 comments on this thread so far and its still alive and kicking.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;To me, it&#39;s obvious this is a hot issue. The way I see it, on the one hand we got one camp trying to sell folks on the idea that doing less is more. By doing so they are not realizing, I infer, that they are hurting our profession by keeping it at the &quot;craft&quot; and &quot;trade&quot; level rather than at a professional level, where IMO it should be. If we are going to move Quality Assurance and Testing into the professional realm of engineering we need to standardize the way we communicate as well as our nomenclature. There have to be global principles and guidelines followed if we are to ever become a professional organization within Engineering.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;So now that you have some background you can read below is M.B.&#39;s response to me when I asked him if he subscribed to the principle being put forth by a man he mentioned and quoted several times, James Bach. In it he describes what one needs in order to be considered by him as &quot;worthy&quot; in the Quality Assurance and Testing world. I do not mean this sarcastically. I would be greatly appreciative if you read the comment from M.B. below and let me know via the comments the tone that you detect in this post. I&#39;m I completely off base here with my sentiment?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&quot;Michael Bolton •
                        &lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;
                       @Freddy:  &quot;&#39;I don’t mind the assertive dissenter 
who has done the homework and yet has a different style and judgment 
from mine.&#39; - James Bach  
&lt;br /&gt;

&lt;br /&gt;
Michael, do you subscribe to this principle as well?&quot;
&lt;br /&gt;

&lt;br /&gt;
Yes.  And, to answer your inevitable next question, here are some of the
 elements of the homework, style, and judgement, and how I might 
evaluate them.
&lt;br /&gt;

&lt;br /&gt;
The work:
&lt;br /&gt;

&lt;br /&gt;
* Is there a body of published work for me to evaluate?  The medium 
(blog, magazine articles, conference presentations, videos, mailing 
lists or even LinkedIn forums) isn&#39;t terribly important.  What&#39;s 
important is this:  has the person produced something for me that I can 
evaluate?  This is roughly equivalent to testability for a product:  is 
the product even available to me?  Is there sufficient information for 
me to make an informed decision?
&lt;br /&gt;

&lt;br /&gt;
Reputation:
&lt;br /&gt;

&lt;br /&gt;
* If the work isn&#39;t available in published form, do I know the person 
directly?  For example, at conferences, I&#39;ve met plenty of people who 
haven&#39;t published much work of which I am aware, but they&#39;ve done 
/something/--participated in a class, engaged in conversation, played a 
testing game--that helps me to understand how they think and reason.
&lt;br /&gt;

&lt;br /&gt;
* If the work isn&#39;t available in a published form, do people that I know
 extend respect to this person, based on interactions like those in the 
point above?
&lt;br /&gt;

&lt;br /&gt;
* Are they members of a community?  Does their community seem to provide
 an endorsement?  If that&#39;s the case, what&#39;s my evaluation of the 
community?  If they&#39;re respected members of a community that I respect, 
then it&#39;s relatively easy for me to infer that the person is worthy of 
my respect, even if they have a &quot;different style and judgement from 
mine&quot;.  If they&#39;re respected members of a community that I don&#39;t 
respect, then I&#39;m obliged to consider that the community may have a 
&quot;different style and judgement from mine&quot;.  
&lt;br /&gt;

&lt;br /&gt;
* If they claim certification, is it a form of certification that I can 
respect?  How was that certification obtained?  Who is doing the 
certifying?  I have a lot of respect for many people who are ISEB/ISTQB 
certified, when they don&#39;t take that form of certification seriously. I 
also don&#39;t respect certain PhD&#39;s seriously because they don&#39;t produce 
PhD-standard work.
&lt;br /&gt;

&lt;br /&gt;
Interactions:
&lt;br /&gt;

&lt;br /&gt;
* When we engage in conversation, is the person articulate and 
well-reasoned?  Can I trace the logic of statements from premise to 
conclusion and back again?  After all, many arguments that appear to be 
about conclusions are really about premises.  When I ask a serious 
question, do they respond with an answer to that question or with a 
non-sequitur?  Do they challenge me?  Do they respond reasonably to my 
answers to their challenges?  Is the relationship symmetrical?  Do they 
answer my challenges?   
&lt;br /&gt;

&lt;br /&gt;
* Do they acknowledge controversy, or do they blow it off?  Do they 
acknowledge opposing ideas, and provide compelling and reasoned 
alternatives to them?
&lt;br /&gt;

&lt;br /&gt;
Study:
&lt;br /&gt;

&lt;br /&gt;
* Do they show evidence of having studied?  Have they read the 
literature on a given subject?  They can agree or disagree, but can they
 show signs of having evaluated it thoughtfully?  Without appealing to 
authority, can they cite work that has been done in the field?
&lt;br /&gt;

&lt;br /&gt;
* Do they present an interdisciplinary approach to their study?  Do they
 bring ideas in from other disciplines?  Innovation in most fields tends
 to come from interaction between ideas in the field and ideas outside 
of it.
&lt;br /&gt;

&lt;br /&gt;
Experience:
&lt;br /&gt;

&lt;br /&gt;
* Do they have a body of experience in the field and contexts that they&#39;re talking about?  Is that experience diversified?
&lt;br /&gt;

&lt;br /&gt;
* If they have theories or interpretations about their success (or 
failure) in their experience, have they examined them critically?  Can 
they show the link between their theory and their experience?   Do they 
acknowledge having recongized and considered alternative 
interpretations?  Have they refuted those interpretations, or if not, do
 they acknowledge them as remaining potentially valid?
&lt;br /&gt;

&lt;br /&gt;
---Michael B.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;The topic being discussed, by the way, was bug counts. He said all this, because he thought my next question was going to be to have him specify his criteria for determining an &quot;assertive dissenter&quot;. Someone has a LOT of time on their hands. :) Or do you guys think this was already written before? My vote says that he had this ready, because quite frankly, I cannot imagine him not having been challenged before and asked similar questions to which he came up with the reply a long time ago, IMO.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;Hope you enjoy this commentary. We&#39;re open for feedback, punches, throw backs. :)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;comment-body&quot; data-li-comment-text=&quot;&quot;&gt;NOTE: Quotes were unaltered, they are hence verbatim. Visit the LinkedIn group for more great debates!&amp;nbsp;&lt;/span&gt;
                  &lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/8279673549435962549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2014/03/michael-boltons-view-on-assertive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8279673549435962549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8279673549435962549'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2014/03/michael-boltons-view-on-assertive.html' title='Michael Bolton&#39;s view on the &quot;assertive dissenter&quot;'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-2510569511335994156</id><published>2013-07-04T22:58:00.001-04:00</published><updated>2014-05-03T15:32:36.687-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="data driven test"/><category scheme="http://www.blogger.com/atom/ns#" term="functional testing"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="parallelization"/><category scheme="http://www.blogger.com/atom/ns#" term="quality center"/><category scheme="http://www.blogger.com/atom/ns#" term="web test"/><category scheme="http://www.blogger.com/atom/ns#" term="Webdriver"/><title type='text'>Another Selenium system that incorporates GRID for parallel distribution of tests</title><content type='html'>&lt;h4&gt;
&lt;b&gt;System Components&lt;/b&gt;&lt;/h4&gt;
The system is made up primarily of open source components as well as custom libraries written in Perl. The Selenium Standalone Server is the browser automation portion of the system. Selenium has been around since 2004 (although it was called JavaScript TestRunner then). It is a very stable browser automation platform, from our experience. It was chosen not only because of its stability and community support, but also because it supports ALL major browsers in use today; mainly Internet Explorer, Firefox, Chrome and Safari.&lt;br /&gt;
&lt;br /&gt;
The test scripts and libraries are written using (as much as possible) the Page Object design pattern. This model gives us the capability of abstracting specific functions in a class and exposed as a method that can be accessed by the test scripts using wrapped function calls to the Selenium Perl Client Driver.&lt;br /&gt;
&lt;br /&gt;
All html objects that the user (i.e. Test Script developer) will access are also abstracted and mapped to human readable names. This is a simple process that maps Selenium element names and locator strategy, for example the human readable “menu” “database_setup” will map to “mnuMain_DXI5_T” “ID” (element name, locator strategy) respectively.&lt;br /&gt;
&lt;br /&gt;
As shown on the below diagram, we are using Selenium Grid to distribute our tests to different environments. Grid by itself does not support choosing a specific platform (i.e. you can tell it to use VISTA but you cannot specify architecture (e.g. x64), for example); we forked and modified the original code to support this functionality. Basically we are using a capability called &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;applicationName&lt;/span&gt; to pinpoint the exact node we want to execute our test against.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;b&gt;Implementation&lt;/b&gt;&lt;/h4&gt;
As shown on the below diagram, we are using Selenium Grid to distribute our tests to different environments. Grid by itself does not support choosing a specific platform (i.e. you can tell it to use VISTA but you cannot specify architecture (e.g. x64), for example); we forked and modified the original code to support this functionality. Basically we are using a capability called applicationName to pinpoint the exact node we want to execute our test against. See examples section for more details.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;System Diagram&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-Nc4gbro0bs8/UdYyh875W2I/AAAAAAAAARk/L4hOB3XMBSM/s1203/SeleniumWebTestSystem.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-Nc4gbro0bs8/UdYyh875W2I/AAAAAAAAARk/L4hOB3XMBSM/s640/SeleniumWebTestSystem.png&quot; height=&quot;486&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-Nc4gbro0bs8/UdYyh875W2I/AAAAAAAAARk/L4hOB3XMBSM/s1203/SeleniumWebTestSystem.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-Nc4gbro0bs8/UdYyh875W2I/AAAAAAAAARk/L4hOB3XMBSM/s1203/SeleniumWebTestSystem.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;h4&gt;
&lt;/h4&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
Automatically Executing the Scripts&lt;/h4&gt;
There are many options for executing the test scripts. Which one is chosen will be determined by the specific project needs. The important thing to note is that these are Perl scripts that can be executed by any system that can run a Perl interpreter. Below are some of the options:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Windows task scheduler (Windows platform)&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Windows Service Manager (Windows platform)&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Cron scheduler (Linux platform)&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Chron or Automator (MAC platforms)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
To execute the scripts use any of the above tools to “Schedule” and “Run” at specific times the automated test suite.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
&lt;b&gt;Test Script Flow&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
When a test script is launched (either manually via command line or via one of the tools listed above) the following occurs:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Test Script requests a specific environment from the Grid’s hub (Browser, OS, Arch)&lt;/li&gt;
&lt;li&gt;The hub checks for an available node that matches the desired capabilities&lt;/li&gt;
&lt;li&gt;The node then executes the script, once a matching node is found&lt;/li&gt;
&lt;li&gt;The script logic is designed to iterate through a list of browsers and platforms and execute the test against each, see &lt;a href=&quot;http://vgp-miami.blogspot.com/2012/07/web-application-automated-test-template.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; for an example.&lt;/li&gt;
&lt;li&gt;After each the test run (i.e. all steps executed on all browsers and platforms), results are stored in the Automation Results Data Store. These results are then reflected in Quality Center’s Test Lab module&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Quality Center Integration Module&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Integration with Quality Center is accomplished using the HP Quality Center Open Test Architecture. OTA is a COM API exposed by Quality Center to facilitate integration with third party (from QC’s perspective) tools. It also enables developers to code custom applications to interface with QC. As an example the QCExplorer application uses the same API.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Let us know via email or comment any feedback you may have. As well, if you&#39;d like for us to design a custom automated testing framework for Web or Client applications, please let us know.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/2510569511335994156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2013/07/another-selenium-system-that.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/2510569511335994156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/2510569511335994156'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2013/07/another-selenium-system-that.html' title='Another Selenium system that incorporates GRID for parallel distribution of tests'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Nc4gbro0bs8/UdYyh875W2I/AAAAAAAAARk/L4hOB3XMBSM/s72-c/SeleniumWebTestSystem.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-9148086980145963748</id><published>2013-06-08T18:59:00.001-04:00</published><updated>2013-06-08T18:59:50.738-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="commentary"/><category scheme="http://www.blogger.com/atom/ns#" term="qt"/><category scheme="http://www.blogger.com/atom/ns#" term="QTP"/><category scheme="http://www.blogger.com/atom/ns#" term="squish"/><category scheme="http://www.blogger.com/atom/ns#" term="TestComplete"/><title type='text'>Which automation framework should I choose?</title><content type='html'>Lately, I&#39;ve been hearing a lot of folks ask questions like &quot;which one should I choose QTP or Selenium?&quot; or &quot;which one has a better future, QTP or Selenium?&quot;. In this post I will attempt to clear up the misconceptions regarding the comparisons of QTP to Selenium.&lt;br /&gt;
&lt;br /&gt;
By far the most common argument I hear agasint QTP is that if you want to use anything other than just record and playback, you must learn VBScript (this is an easy enough task to do, however, especially if you are a novice programmer). As well you must learn some type of language in order to realize and / or get the most juice out of any framework you choose for your automation projects. Which leads me to one of the main advantages of QTP, it is a framework! What that means is that you not only get to drive your Application Under Test (AUT), you also get reporting of test results, you get support for data driven tests, you get an object repository. Basically is a framework youc an use right out of the box.&lt;br /&gt;
&lt;br /&gt;
Selenium on the other hand, is just an API, a good one at that! The reason it is so good is because all of the development efforts go into having a robust API for automation architects and programmers to use and incorporate into their own frameworks, rather than having to support all of the features a ready-to-use framework provides. And there lies the difference! With Selenium you don&#39;t get reporting, you don&#39;t get data driven capabilities, you don&#39;t get an object repository so it is not a framework. However, it IS flexible enough that you can incorporate into your own framework that already has all these features. The caveat is that you must design and build these features yourself. A lot of folks prefer to have this type of control. I am one of them :)&lt;br /&gt;
&lt;br /&gt;
A more realistic comparison would be SmartBear&#39;s TestComplete -&amp;gt; Froglogic Squish -&amp;gt; HP QTP; all three of these are frameworks that give you, right out of the box, reporting, object repositories, data driven capabilities, keyword (another type of data driven) capabilities, etc. Again, in order to realize the full potential of any of the just mentioned frameworks (not including Selenium which is not a framework) you have to learn some language (e.g. Perl, PHP, Python, Ruby, VBScript, TCL, Java).&lt;br /&gt;
&lt;br /&gt;
That being said, lets not forget about many general purpose frameworks that already exist and that are ready for you, the automation architect, to &quot;just add water&quot; (or Selenium if you wish ;), some examples:&lt;br /&gt;
&lt;br /&gt;
STAF:&amp;nbsp;&lt;a href=&quot;http://staf.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;http://staf.sourceforge.net/ &lt;/a&gt;&lt;br /&gt;
Robot Framework:&amp;nbsp;&lt;a href=&quot;http://robotframework.org/&quot; target=&quot;_blank&quot;&gt;http://robotframework.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
So there you have it, I hope this helps some folks clear up (at least in their minds) what to choose or not to choose when designing a framework to be used in any type of software verification. Contact me if you are interested in learning more or wish to secure my services to design your Automation framework.</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/9148086980145963748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2013/06/which-automation-framework-should-i.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/9148086980145963748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/9148086980145963748'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2013/06/which-automation-framework-should-i.html' title='Which automation framework should I choose?'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-639734575903337933</id><published>2013-03-16T14:00:00.001-04:00</published><updated>2013-03-16T14:00:23.715-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="qc"/><category scheme="http://www.blogger.com/atom/ns#" term="quality center"/><title type='text'>Add image to Quality Center using OTA and Perl</title><content type='html'>I thought I would share this little snippet of code that implements the adding of an image file to a specific test step in Quality Center. To accomplish this we will use HP&#39;s recommended way of interfacing with their system: Open Test Architecture (OTA). As opposed to trying to go directly to the QC DB.&lt;br /&gt;
&lt;br /&gt;
From the Perl side there are three modules needed (all available from CPAN):&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Win32::OLE qw(in valof);&lt;/li&gt;
&lt;li&gt;Win32::OLE::Enum;&lt;/li&gt;
&lt;li&gt;Win32::OLE::Variant;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
You will also need to have the OTA client installed on the computer being used to update the Test Lab. This usually gets downloaded when you first connect to QC. The file name is&amp;nbsp;OTAClient90.dll.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
First, the code:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style=&quot;background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt;1:  # ATTACH TEST STEP IMAGE IF IT EXISTS  
2:  my $step_up_count = 0;  
3:  if ($TEST_RUN_RESULTS{$test_timestamp}{step_results}-&amp;gt;[$step_up_count]{image_link} ne &#39;&#39;) {  
4:     my $file_name = &quot;$TEST_RUN_RESULTS{$test_timestamp}{step_results}-&amp;gt;[$step_up_count]{image_link}&quot;;  
5:          
6:     my $attachment_factory = $run_step-&amp;gt;Attachments;  
7:     my $attachment = $attachment_factory-&amp;gt;AddItem(Win32::OLE::Variant-&amp;gt;new(VT_NULL)); # This returns a Win32::OLE::Variant object type NULL required by AddItem()  
8:     $attachment-&amp;gt;{FileName} = &quot;$file_name&quot;;  
9:     $attachment-&amp;gt;{Type} = 1;  
10:     $attachment-&amp;gt;Post;  
11:  }  
12:  $step_up_count++;  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
We begin by keeping track of the steps we are adding to QC on line 2.&lt;br /&gt;
For attaching the images I implement an IF condition (Line 3) that checks whether an image exists for this step or not. If it does find one we get an instance of the attachment factory for the step being currently updated (Line 6).&lt;br /&gt;
&lt;br /&gt;
A very important step (as in this will not work unless you do this) is to pass Win32::OLE::Variant of type VT_NULL to AddItem. If you do not do this the image will not be updated. That is, $attachment (Line 7) must first be NULL.&lt;br /&gt;
&lt;br /&gt;
After we add the file_name and attachment type (Lines 8-9) we then Post the image and associated attributes to Quality Center Test Lab module.&lt;br /&gt;
&lt;br /&gt;
That is all it takes to add an image to the Test Lab of Quality Center via a program that uses HP&#39;s COM interface to QC, Open Test Architecture. If you would like us to implement an automated solution for your company that includes QC integration please contact us; we are happy to provide a quote.</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/639734575903337933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2013/03/add-image-to-quality-center-using-ota.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/639734575903337933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/639734575903337933'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2013/03/add-image-to-quality-center-using-ota.html' title='Add image to Quality Center using OTA and Perl'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2553431402654150871.post-8274100387323087869</id><published>2013-03-10T03:18:00.000-04:00</published><updated>2013-03-10T03:27:20.922-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automation"/><category scheme="http://www.blogger.com/atom/ns#" term="qt"/><category scheme="http://www.blogger.com/atom/ns#" term="squish"/><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting"/><title type='text'>Squishrunner error: Runner exited with value -1</title><content type='html'>I am currently involved in the implementation of a keyword based framework that will be used to verify an application currently being developed, against requirements initially, for regression detection later.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The below issue I encountered and thought I share my findings with the hopes of saving others valuable time.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. When you launch your AUT (Application Under Test) you observe that it launches the app and then close the app and the following Squish pop up is displayed:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://4.bp.blogspot.com/-bAcqxrBe66w/UTwwwCMaqRI/AAAAAAAAAQ0/7HHpVUieu8I/s1600/squish_start_app_failed1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;107&quot; src=&quot;http://4.bp.blogspot.com/-bAcqxrBe66w/UTwwwCMaqRI/AAAAAAAAAQ0/7HHpVUieu8I/s320/squish_start_app_failed1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
2. As well the following entries are displayed in the &quot;Runner/Server Log&quot; window:&lt;/div&gt;
&lt;div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
S: DLLPreload (89640001): FindEntryPoint: The parameter is incorrect.&lt;br /&gt;
S: DLLPreload (89640001): done&lt;br /&gt;
R: Runner exited with value -1&lt;/blockquote&gt;
This can be caused by, according to &lt;a href=&quot;http://kb.froglogic.com/pages/viewpage.action?pageId=3801505&quot; target=&quot;_blank&quot;&gt;Froglogic &lt;/a&gt;and verified by me, 32 bit / 64 bit mixup. For example attempting to automate (control) a 64 bit application with the 32 bit version of Squish will yield the above error. As well, the converse is true, attempting to control (automate) a 32 bit application with the 64 bit version of Squish will yield the above error.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://vgp-miami.blogspot.com/feeds/8274100387323087869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vgp-miami.blogspot.com/2013/03/squishrunner-error-runner-exited-with.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8274100387323087869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2553431402654150871/posts/default/8274100387323087869'/><link rel='alternate' type='text/html' href='http://vgp-miami.blogspot.com/2013/03/squishrunner-error-runner-exited-with.html' title='Squishrunner error: Runner exited with value -1'/><author><name>Freddy Vega</name><uri>http://www.blogger.com/profile/08333087300765042100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1X4C5qXUlgJD54K6Yko94ouVMM7XQdpKAI5Lzv9_H05K44or8c40f5d2EZklhKeTu-rh-GbAY0rx_7erMRbsP6UR38s-00vTE0ZJbTvJCSlQEQsL5Hjb3gTUS-agNtxh9xFrV942MbX1ank_RGaqjaF3oHq4-gu7jPOAAfzsXO-q4JKg/s220/IMG_7977.jpeg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-bAcqxrBe66w/UTwwwCMaqRI/AAAAAAAAAQ0/7HHpVUieu8I/s72-c/squish_start_app_failed1.png" height="72" width="72"/><thr:total>1</thr:total></entry></feed>