<?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: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-593097011401765247</id><updated>2012-01-25T09:01:59.959-08:00</updated><category term='scalable test selection google scalability conference'/><category term='test strategy'/><category term='verification'/><category term='exploratory testing body eating'/><category term='amazon web services computing cloud storage mechanical turk queue'/><category term='qa engineer job post'/><category term='haskell concurrent programming'/><category term='php static analysis tools'/><category term='cast conference meta framework'/><category term='ie ies4linux testing web'/><category term='testing laws software'/><category term='quote'/><category term='quality user expectations'/><category term='qa xobni perception'/><category term='xobni performance outlook'/><category term='wasting time microsoft source control'/><category term='vista videos michael howard'/><category term='open source chocolate'/><category term='productivity flow software'/><category term='automation problem solving'/><category term='extreme testing knowledge transfer'/><category term='humor quality'/><category term='collaborative filtering algorithms recommendations'/><category term='ubuntu installation'/><category term='GTAC google test automation conference'/><category term='performance mysql'/><category term='comfort zone testing insight'/><category term='personality traits'/><category term='testing value measurement'/><category term='testing cem kaner time trade off'/><category term='binary search'/><category term='beta quality testing'/><category term='test case design'/><category term='microsoft testing'/><category term='documentation thinking ahead planning'/><category term='build engineer testing'/><category term='bash debugger script languages'/><category term='testing layers feedback'/><category term='google london test automation conference video'/><category term='testing'/><category term='adobe apollo rich internet applications'/><category term='organizational methods'/><category term='linux low memory stress load testing'/><category term='test automation architectures patterns'/><category term='book quality problem solving'/><category term='microsoft build tools msi'/><category term='mutation testing'/><title type='text'>The Search for Quality</title><subtitle type='html'>Musings on Quality in Software by those working toward it</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-6281904495178401979</id><published>2008-12-07T01:33:00.001-08:00</published><updated>2008-12-08T23:42:01.691-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing value measurement'/><title type='text'>Measuring the Value of Testing</title><content type='html'>One of the best and most obvious ways to excel in any company is to show how your work is making the company money, or providing value that directly leads to making the company money.   The more directly you can show your connection to how much money is being made, the better position you're in.   For instance, if you can easily show that the feature you developed, or the feature you designed and brought to market, made the company $X over a time frame of Y years, you're doing well.  If you can optimize the function such that X is large and Y is small, you're on a fast track to upper-management.&lt;br /&gt;&lt;br /&gt;Showing this sort of result in testing is a much harder proposition.  It's easy to say that you tested a feature or product that made $X over a time frame of Y years, but lets be honest here: being the product manager or lead developer and making the same statement definitely carries more weight when attached to a resume.   The person generating the idea and the person originally implementing the idea will always be seen as being closer to the end result and positive cash flow than the person ensuring the value of the idea, and ensuring that the mass market can actually use your idea as expected.  I'm not saying that this is "the way things should be", I'm just stating it's the way things are.&lt;br /&gt;&lt;br /&gt;That being said, here's why I think demonstrating the value you've directly provided to a product is harder for testers: you can't show the diff between what the product would have made had the bugs you found been released to the public.  That is an alternate reality we don't have access to; it's an A-B test that can't be run.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CmI3OGWPkQU/STudEi6ibxI/AAAAAAAABb4/ajXsxH5nC3U/s1600-h/testing.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 378px; height: 223px;" src="http://2.bp.blogspot.com/_CmI3OGWPkQU/STudEi6ibxI/AAAAAAAABb4/ajXsxH5nC3U/s320/testing.png" alt="" id="BLOGGER_PHOTO_ID_5276984089812037394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If it were possible to conclusively show that the company made $Z more because of the bugs that had been found, I think testing would be taken more seriously across the industry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-6281904495178401979?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/6281904495178401979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=6281904495178401979' title='45 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6281904495178401979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6281904495178401979'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2008/12/measuring-value-of-testing.html' title='Measuring the Value of Testing'/><author><name>Ryan</name><uri>http://www.blogger.com/profile/12298403351282813576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_CmI3OGWPkQU/STudEi6ibxI/AAAAAAAABb4/ajXsxH5nC3U/s72-c/testing.png' height='72' width='72'/><thr:total>45</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-1216279467731341893</id><published>2008-12-05T00:13:00.000-08:00</published><updated>2008-12-07T02:02:06.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing layers feedback'/><title type='text'>Testing in Layers</title><content type='html'>My old boss and mentor was chatting with me over Facebook recently about a concept that he termed, "testing in layers".  It is the basic idea of slowly testing out a new release with people who are close to the code, then providing the release to people a little further away (friends/family/investors), then a little further (active members on your forums), while eventually moving out toward your normal everyday users.  This idea struck me because it provided a simple mental model for actions that I think many in the testing community are already doing at a basic level, and provided much room for complexity if need be.  It's nice to provide a concept around an existing process, so that it can be better codified and thought out.&lt;br /&gt;&lt;br /&gt;In my world, I use this idea in the following context:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Test internally with engineering (QA)&lt;/li&gt;&lt;li&gt;Test internally with non-engineering (Marketing, etc)&lt;/li&gt;&lt;li&gt;Test by releasing to trusted users on our forums&lt;/li&gt;&lt;li&gt;Test by sending the release to particular people who email into Support, whose problems may be fixed with this release&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Test by releasing to everyone on our forums&lt;/li&gt;&lt;li&gt;Test by releasing to a small number of people who download through the website&lt;/li&gt;&lt;/ul&gt;One of the issues with this idea is that a &lt;span style="font-weight: bold;"&gt;feedback loop&lt;/span&gt; needs to be in place at each layer.  If we should release a build to the forums and don't listen to the complaints and issues that this layer is having, then this testing is pointless.  However, the further out you get from the center, the harder it is to get solid feedback.  When we release to a small number of people through the website, they probably don't know that they're getting a brand-spanking new release.  In this case, how do we get their feedback?  As of right now, we simply watch to see if they uninstall, and if the stars align, they might even leave us feedback.  It's not perfect, and can use improvement, however so far it's a process that is working adequately to help us determine how the release is doing.&lt;br /&gt;&lt;br /&gt;The idea of quality feedback loops for your product will be saved for another blog post.  Lets just say that twitter has been proving quite useful in getting product feedback lately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-1216279467731341893?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/1216279467731341893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=1216279467731341893' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/1216279467731341893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/1216279467731341893'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2008/12/testing-in-layers.html' title='Testing in Layers'/><author><name>Ryan</name><uri>http://www.blogger.com/profile/12298403351282813576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-6752590811894195417</id><published>2008-12-04T23:53:00.000-08:00</published><updated>2008-12-05T00:12:40.595-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xobni performance outlook'/><title type='text'>When has Outlook "Started"?</title><content type='html'>I have recently had the opportunity to work with a small team to define and run some basic performance tests for Xobni.  If you've done some serious performance tests before, I probably don't need to tell you what a peculiar beast performance testing can be.  The fun part about this project is that we are measuring areas where are customers are having pain points, and building tools to automate the running of those measurements.  On the other side of the coin, creating a consistent and controlled environment where performance measurements can be taken without fear that something external is affecting your measurements keeps me up at nights.  No, not literally, but environmental control is one of our biggest problems.&lt;br /&gt;&lt;br /&gt;One particular measurement which we've been stuggling with for some time is simply known as "Outlook Startup Time".  How do you know when Outlook has fully, really, finally, finished starting?  Most importantly, when do our &lt;span style="font-weight: bold;"&gt;users &lt;/span&gt;think that Outlook has really "started"?  This is an important question for us: if we're going to improve Outlook startup time with Xobni installed, we have to know what that means.  Well here are a few ideas for measuring Outlook startup that we've implemented in a tool of ours:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When the "Reading Pane" is visible and has text&lt;/li&gt;&lt;li&gt;When the Xobni sidebar appears AND the Reading Pane is visible&lt;/li&gt;&lt;li&gt;When the Application.Startup event fires in Outlook&lt;/li&gt;&lt;li&gt;When Outlook has finished syncing with Exchange&lt;/li&gt;&lt;li&gt;When you are able to move to the next mail and have it load within a certain period of time&lt;/li&gt;&lt;li&gt;When the CPU usage drops back to a level on-par with usage before you started Outlook&lt;/li&gt;&lt;/ul&gt;As you can see, we're measuring a lot and trying to see what sticks.  What are your thoughts?  When is Outlook usable, by your definition?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-6752590811894195417?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/6752590811894195417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=6752590811894195417' title='282 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6752590811894195417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6752590811894195417'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2008/12/when-has-outlook-started.html' title='When has Outlook &quot;Started&quot;?'/><author><name>Ryan</name><uri>http://www.blogger.com/profile/12298403351282813576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>282</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-3432429803870723751</id><published>2008-05-29T10:08:00.000-07:00</published><updated>2008-05-29T10:09:59.334-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='qa engineer job post'/><title type='text'>A Different Kind of QA: Calling all Engineers</title><content type='html'>This is a repost of a blog post I made on the Xobni blog.  You can read the original post &lt;a href="http://www.xobni.com/blog/2008/05/27/a-different-kind-of-qa-calling-all-engineers/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It’s common for people to ask why a good engineer like myself would want to work in QA, especially when you have to fight the stigma’s of QA, namely: &lt;p&gt;1) You are in QA because you are not good enough for development&lt;/p&gt; &lt;p&gt;2) You are in QA as a stepping stone for development&lt;/p&gt; &lt;p&gt;3) You are in QA because you don’t like coding&lt;/p&gt; &lt;p&gt;My response to those statements: pish-posh. While these statements may apply to some people in the field, they certainly don’t apply to the people serious about QA. A good QA Engineer solves quality problems with an algorithmic intensity that rivals traditional programmers. They are a true hacker in the older sense of the word - they are here to find and exploit the problems in the system in any way possible.&lt;/p&gt; &lt;p&gt;Every problem has its boundaries. For most developers, the boundaries for implementing solutions are usually confined to one language, stack, or technology. The boundaries for problem solving in QA are generally much wider, simply because our solutions don’t have to be productized, exposed to the public, and aren’t necessarily even in the same language or stack.&lt;/p&gt; &lt;p&gt;This allows a much wider range of creative freedom when solving problems. Learning new languages and technologies becomes essential for your work. Having a large arsenal of tools to attack a problem becomes a necessary part of the job. This provides you with even more of a reason to learn about the latest and greatest in tech, which is something that appeals to all engineers alike.&lt;/p&gt; &lt;p&gt;At Xobni we approach QA differently than most. The people we look for are not here because they are not good enough for development. They are not here because they don’t like coding. The QA people here are expected to be at the top of their game. They are expected to build and create software that can topple the Jenga-like building blocks of our product. They are expected to be creative people who like to learn, explore, and exploit software.&lt;/p&gt; &lt;p&gt;That being said, Xobni is looking for a QA engineer!  Check out the &lt;a target="_self" href="http://www.xobni.com/about/jobs#qa_automation_engineer"&gt;job post&lt;/a&gt;, and send resumes to ryan dot gerard at xobni.com if you think you can rock our world.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-3432429803870723751?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/3432429803870723751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=3432429803870723751' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/3432429803870723751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/3432429803870723751'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2008/05/different-kind-of-qa-calling-all.html' title='A Different Kind of QA: Calling all Engineers'/><author><name>Ryan</name><uri>http://www.blogger.com/profile/12298403351282813576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-5219020660436422944</id><published>2008-03-11T23:04:00.000-07:00</published><updated>2008-03-22T17:49:41.935-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity flow software'/><title type='text'>Productivity and Flow</title><content type='html'>I've been thinking a lot recently about that state of mind where you lose track of time, focus intensely, and generally are very productive.  This state of mind is not only associated with working; it can be found when exercising, playing games, and other associated focus-intensive activities, but generally I associate it with work, mostly because my best work is done in this state of mind.  I find that if I can lose myself for a while and disassociate with reality while working, I generally come out of that state with an amazing amount of work done.&lt;br /&gt;&lt;br /&gt;I was thinking recently that if I could induce this state of mind more frequently, I could become a  more productive person.  After a short amount of googling, I discovered that there is an entire area of research in psychology devoted to this subject; it's known as "&lt;a href="http://en.wikipedia.org/wiki/Flow_%28psychology%29"&gt;flow&lt;/a&gt;".  One of the main researchers in this field is a Hungarian psychology professor named &lt;a href="http://en.wikipedia.org/wiki/Mihaly_Csikszentmihalyi"&gt;Mihaly Csikszentmihalyi&lt;/a&gt;.  He's published a few books on the subject, and the one I picked up is called "&lt;a href="http://www.amazon.com/Flow-Psychology-Experience-Mihaly-Csikszentmihalyi/dp/0060920432/"&gt;Flow: The psychology of optimal experience&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;The book itself was a little too self-helpy for my tastes (if you look carefully, you'll see that the subtitle of the book above is "Steps toward enhancing the quality of life"), however I found tidbits inside could have been taken out of any of the software management books I've read.&lt;br /&gt;&lt;br /&gt;After skimming through the bits on how and why you desire happiness, I found the core of the book: the elements of flow experiences.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.  Engaging in a Challenging Activity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;He explains that the activity you're engaged in has to be at the edge between skill and anxiety.  Even if your activity is complex, if you're too familiar with it, it won't be considered "challenging" to your psyche.  You have to find something that is within your reach to learn or finish, but isn't easy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2.  Merging of Action and Awareness&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Your attention is completely devoted to the activity, such that you have no awareness of the outside world.  It is intense concentration, but seems effortless when deeply involved.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.  Clear Goals and Feedback&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is fairly self-explanatory, and it is also where I started seeing parallels in software development and management.  On the development side, having small coding goals that are constantly achieved and iterated on is how I think many productive people program.  On the management side, providing clear feedback and goals to your employees is a staple of good management.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4.  Concentration on the task at hand&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is probably obvious, however what I found interesting was that he believes only a select range of information can be allowed into your awareness when in this state.  Irrelevant information in your mental activity can break your concentration, and hence your flow.&lt;br /&gt;&lt;br /&gt;Relating this to back to software environments, he goes on to state that &lt;span style="font-weight: bold;"&gt;quiet environments&lt;/span&gt; are essential to keeping your concentration.  Much has been written already about how loud environments are productivity killers, and this just provides more evidence to that.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;5.  The Paradox of Control&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;He says that the flow experience is strongly associated with a sense of control.  This resonates strongly with programming in my experience.  One of the psychological benefits of programming (in my non-expert opinion) is the sense of mastery and control one gains over the system you're programming against.  "Hacking" (in the Paul Graham sense, not the Kevin Mitnik sense) is merely another way of asserting your control and power over the system, by finding a non-obvious or faster solution to a specific problem.  It's a very primal feeling that I think many, if not most of us, desire.&lt;br /&gt;&lt;br /&gt;Mihaly then writes that the "paradox" of control "...is that it is not possible to feel a sense of control unless one is willing to give up the safety of protective routines".  In essence, your sense of control comes by putting yourself into situations where you actually have less control, since the unknowns are much greater than in situations that you've experienced before.  As he writes, "Only when a doubtful outcome is at stake...can a person really know whether they are in control".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6. The Loss of Self-Consciousness&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Losing your sense of self-consciousness is a phenomena typically talked about in association with meditation, or zen-like activites.  This loss is typically accompanied by, "a feeling of union with the environment".  Projected onto programmers, this environment you feel a union with is typically whatever framework, system, or specific program you're working in.&lt;br /&gt;&lt;br /&gt;Mihaly explains that what is temporarily lost is not the sense of self, but the concept of the self.  High-performing violinists are very aware of their fingers, as runners are aware of their breathing.  They haven't lost their sense of self, but the boundaries for how they define the self have temporarily vanished.  This can be a very liberating experience, as "...the feeling that the boundaries of our own being have been pushed forward".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7.  The Transformation of Time&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is normal to emerge from a flow experience and see that hours have passed without your awareness.  What you're measuring when in this activity is not time, but states or milestones.  When programming intensely, it's not uncommon to think of your progress not in terms of minutes and hours, but in terms of functions written, functionality working, and pieces integrated.  Your world turns into a state-driven world, and not a time-driven one.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For the skeptical types (like me), I want to say that these elements are conclusions drawn from many studies of people experiencing flow in many different types of activities.  While this doesn't mean that the conclusions are true, it does have more credibility than just some quack spouting off what he thinks brings about flow experiences.&lt;br /&gt;&lt;br /&gt;Hopefully this has provided you with some thought-food to chew on regarding your own productivity.  I think the main take-aways from this for me are that to really engage deeply in an activity, one needs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A challenging task&lt;/li&gt;&lt;li&gt;A quiet environment&lt;/li&gt;&lt;li&gt;Clear Feedback (usually in the form of finished functions and functionality in what I'm writing)&lt;/li&gt;&lt;li&gt;A clear mind&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enough time set aside to engage deeply with the activity&lt;/li&gt;&lt;/ul&gt;I said earlier that I found parallels with this book and other software books I've read, and these take-aways prove it.  These bullet points could be taken directly out of "Peopleware" or "Managing Humans", or any other book that deals with the topic of software productivity.  It's always interesting to find parallels between different disciplines, and I think the psychology of programming to be particularly interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-5219020660436422944?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/5219020660436422944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=5219020660436422944' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/5219020660436422944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/5219020660436422944'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2008/03/productivity-and-flow.html' title='Productivity and Flow'/><author><name>Ryan</name><uri>http://www.blogger.com/profile/12298403351282813576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-5321339727188821224</id><published>2008-01-23T09:00:00.000-08:00</published><updated>2008-01-23T09:12:44.375-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='organizational methods'/><title type='text'>The Great TODO List</title><content type='html'>Organizing and planning your work is tough.  It's not hard to list everything you need to do, but prioritizing what you need to do can be an artform.  For instance, do you focus on exploring a problem with the server (which is high-priority to your co-worker), editing a design document (which your boss wants done soon), or finding the root of that newest bug (which is really what I'm getting paid for)?  There are definitely subtle tones of politics in these decisions, but I try to keep those matters out of my head when prioritizing.&lt;br /&gt;&lt;br /&gt;I was discussing day-to-day planning tactics with some friends yesterday, and we found we all had different methods.  I thought I'd share mine with you.  I call it the Great TODO List.  It's quite simple really.  Anyone can start using this method immediately.  The low-techness of it is astounding.&lt;br /&gt;&lt;br /&gt;Step 1: Open Notepad&lt;br /&gt;Step 2: Write down everything you need to do&lt;br /&gt;Step 3: Put everything you need or want to do today at the top of the list&lt;br /&gt;&lt;br /&gt;Amazing, isn't it?&lt;br /&gt;&lt;br /&gt;Every day or so I go through the list and roughly prioritize what should be at the top that I may have forgotten about.  As I go through the day, when I start to feel like I should be working on something else, I just consult the list, and pop from the top.  Yes, the list is a stack.&lt;br /&gt;&lt;br /&gt;The one downside to this method is that the list continually grows.  I have stuff on my list from a few weeks back that I should still do at some point, but the likelihood of me doing that stuff is getting smaller and smaller by the day.  The list needs love and pruning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-5321339727188821224?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/5321339727188821224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=5321339727188821224' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/5321339727188821224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/5321339727188821224'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2008/01/great-todo-list.html' title='The Great TODO List'/><author><name>Ryan</name><uri>http://www.blogger.com/profile/12298403351282813576</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-4927434487072814917</id><published>2007-11-13T00:14:00.000-08:00</published><updated>2007-11-13T00:42:42.508-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='qa xobni perception'/><title type='text'>Quality and Perception</title><content type='html'>Well it's a new start for me.  I have a new job with &lt;a href="http://www.xobni.com"&gt;Xobni&lt;/a&gt; as their Quality Jedi, and it's a nice change.  The startup life has been something I've been talking about for a while, and the time for action presented itself in the form of a ripe opportunity.&lt;br /&gt;&lt;br /&gt;I've been thinking a lot more about product quality lately, in the general sense.  This is probably because product quality will be much more on my shoulders than before, as I'm working with a relatively new product that has already been launched (in the form of a beta).  I've been thinking about how one can attribute the status of "high quality" to any product, and I've realized that the only person who can bestow that status is the consumer.&lt;br /&gt;&lt;br /&gt;Ultimately, no matter how much a product is tested and sent through the wringers of QA, the consumer is the one who decides whether your product is of high quality.  It is the &lt;span style="font-weight: bold;"&gt;perception of quality&lt;/span&gt; that makes something of high quality.  Everyone I know who has owned a BMW has moaned a little about how often it has to be taken into the shop for repairs.  And yet BMW retains the status that their cars are of high quality, due to the fact that they are "german-engineered".&lt;br /&gt;&lt;br /&gt;The perception of quality is powerful, and can directly contribute to product success.  The first product put out by Xobni is called "Insight", and is a plug-in for Outlook that gives you a "people-centric" view of email.  Email is data that is important to the consumer (vitally important to some), and anything that builds on top of that data must provide value while not corrupting or interfering with the basic tasks (emailing) in any way. &lt;br /&gt;&lt;br /&gt;That is the quality challenge with this product, as I see it from a high-level.  What is more important than verifying the product functionality is working as expected, is making sure that the consumers current tasks and environments aren't disturbed by the product.&lt;br /&gt;&lt;br /&gt;That being said, now the question is, how can we affect the perception of quality to the user?  This is a question I'll have to ponder more.  The value we're building into Outlook will allow them to accomplish their tasks faster, and more efficiently.  I think this increase in efficiency is the key to the quality perception for our product: the users are getting more done by using our product, without having their current email environment disturbed.  This may sound quite basic and obvious, but I think it's good to reinforce these base points as to why we're building what we're building.&lt;br /&gt;&lt;br /&gt;Interesting times are ahead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-4927434487072814917?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/4927434487072814917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=4927434487072814917' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4927434487072814917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4927434487072814917'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/11/quality-and-perception.html' title='Quality and Perception'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-7001100309504055200</id><published>2007-08-23T11:47:00.000-07:00</published><updated>2007-08-23T12:02:28.659-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GTAC google test automation conference'/><title type='text'>GTAC!</title><content type='html'>Sorry for the lack of posts -- I've been out of town recently.&lt;br /&gt;&lt;br /&gt;I'm currently at the &lt;a href="http://googletesting.blogspot.com/search/label/GTAC"&gt;Google Test Automation Conference&lt;/a&gt;, at Google's New York office.  Thus far, it's been a great experience.  There are two things I've learned about (this morning) that I wanted to blog about: how to design a conference, and Google's testing philosophy.&lt;br /&gt;&lt;br /&gt;Allen Hutchinson, an engineering manager at Google, gave some good insight into how they designed the conference, and why they made the decisions they did.  I pulled lots of good insights from this talk.&lt;br /&gt;*Keep the conference to under 150 people.  Sociological research has shown this is an upper bound (and a magic number) that allows a group to keep a sense of community&lt;br /&gt;*Provide outlets for people to discuss the conference.  Their high-profile &lt;a href="http://googletesting.blogspot.com/"&gt;testing blog&lt;/a&gt; is open for unmoderated comments on this conference, and a &lt;a href="http://groups.google.com/group/ltac/"&gt;google group&lt;/a&gt; was created as well.&lt;br /&gt;*Make the talks available online after the conference&lt;br /&gt;*Try to decrease the amount of repeat speakers from past conferences.  They want fresh blood and new ideas introduced in their conference&lt;br /&gt;*Ask old speakers to help select new speakers - or just have people outside your organization help select the speakers&lt;br /&gt;&lt;br /&gt;Allen also mentioned that they kept the conference to a single track so that you can see all the talks, but to be honest I rather like the multiple track system.  It allows more speakers, and allows you to skip talks that do not interest you.&lt;br /&gt;&lt;br /&gt;Pat Copeland, a Director in Google, then spoke about the testing philosophy that Google maintains, which I found quite interesting.&lt;br /&gt;&lt;br /&gt;*&lt;span style="font-weight: bold;"&gt;Measure everything you can&lt;/span&gt;.  More data allows for more analysis.&lt;br /&gt;*Continuous builds and faster builds allow more time for testing&lt;br /&gt;*Focus on improvement of the system, and not the bits and pieces&lt;br /&gt;*Testing Goal: fully test a product in one day&lt;br /&gt;&lt;br /&gt;Pat also mentioned some challenges that they face as an organization, which I think applies to pretty much everyone:&lt;br /&gt;1.  Simulating real-world load, scale, and chaos is difficult&lt;br /&gt;2.  Deciding what to measure is difficult&lt;br /&gt;3.  Complex failure scenarios are expensive to test&lt;br /&gt;&lt;br /&gt;The talks (and more importantly, &lt;span style="font-weight: bold; font-style: italic;"&gt;the people&lt;/span&gt;) have been quite interesting thus far.  I'll hopefully have more to update after tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-7001100309504055200?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/7001100309504055200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=7001100309504055200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7001100309504055200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7001100309504055200'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/08/gtac.html' title='GTAC!'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-3751407144964632295</id><published>2007-07-24T21:41:00.000-07:00</published><updated>2007-07-24T21:50:01.306-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing laws software'/><title type='text'>My Favorite Laws of Software Development</title><content type='html'>There was a great blog on the &lt;a href="http://globalnerdy.com/2007/07/18/laws-of-software-development/"&gt;Laws of Software Development&lt;/a&gt;, and there were a few I saw as related to testing that I thought I should share.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Brooks' Law:&lt;/span&gt; Adding manpower to a late software project makes it later.  Or testers, in this case.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conway's Law:&lt;/span&gt; Any piece of software reflects the organizational structure that produced it.  Good to keep in mind when testing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Heisenbug Uncertainty Principle:&lt;/span&gt; Most production software bugs are soft: they go away when you look at them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hoare's Law of Large Programs:&lt;/span&gt; Inside every large problem is a small problem struggling to get out.  Finding those small problems is worth searching for.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lister's Law:&lt;/span&gt; People under time pressure don’t &lt;em&gt;think&lt;/em&gt; faster.  Or test faster.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nathan's First Law:&lt;/span&gt; Software is a gas; it expands to fill its container.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-3751407144964632295?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/3751407144964632295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=3751407144964632295' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/3751407144964632295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/3751407144964632295'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/07/my-favorite-laws-of-software.html' title='My Favorite Laws of Software Development'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-2159346590765424266</id><published>2007-07-15T14:08:00.000-07:00</published><updated>2007-07-15T14:30:52.080-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scalable test selection google scalability conference'/><title type='text'>Scalable Test Selection</title><content type='html'>A few weeks ago I gave a presentation at the &lt;a href="http://www.google.com/events/scalability_seattle/"&gt;Google Scalability Conference&lt;/a&gt; on the idea of Scalable Test Selection (&lt;a href="http://video.google.com/videoplay?docid=-3003538972995863248"&gt;video can be found here&lt;/a&gt;).  Now that the video is up, I thought I'd share with you all this idea developed within my team.  I must preface this by saying that this was not my idea -- the credit belongs to Amit and Fiona.&lt;br /&gt;&lt;br /&gt;As Cem Kaner has said before me, there is never enough time to do all the testing.  Time, in essence, is your scarce resource that must be allocated intelligently.  There are many test strategies one can choose from when testing a product, however the question must be raised: how do you know whether you're testing the right things, given the amount of time you have to test?  This is an impossible question to answer, however there are situations where the question is pertinent.  For instance: when a change is introduced to your product at the last minute before release, and you have to decide what to test, how do you choose?  There are probably some intelligent guesses you can make on what to test based on what has changed, but how can you know that this change hasn't broken a distant dependency?&lt;br /&gt;&lt;br /&gt;This is the situation where we believe Scalable Test Selection can help.  Given a source code change, what test cases are associated with that source code?  Essentially, how can we link test cases to source code using test artifacts?&lt;br /&gt;&lt;br /&gt;We have identified (and presented on) three ways to associate test cases with source code:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Requirements:&lt;/span&gt;  If source code is checked in to satisfy requirements, and test cases are checked in to satisfy requirements, then a connection can be made.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Defects:&lt;/span&gt;  A test case fails, which then is associated with a new defect.  When source code is checked in to fix that defect, an association is made between the code and the test case&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Build Correlation:&lt;/span&gt; For a single build, you can associate a set of source code changes with a set of test case failures.  Now iterate that over successive builds, and you have a large set of source code and test case associations&lt;/li&gt;&lt;/ul&gt;With all this data that you can use to associate source code to test cases, when future source code changes are checked in, a tool can be written that can find all the test cases that are associated with that source code.  In the case that you're in a time-crunched situation, you can have another source that suggests what test cases you should run in your limited amount of time.&lt;br /&gt;&lt;br /&gt;What we're doing is applying simple data-mining techniques to the test data.  There is much more to the idea that I'm not talking about (prioritization of test cases, implementation ideas, etc), however I hope you get the jist.  I fully recommend you &lt;a href="http://video.google.com/videoplay?docid=-3003538972995863248"&gt;watch the video&lt;/a&gt; if this topic interests you, and feel free to email me if you want the slides :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-2159346590765424266?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/2159346590765424266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=2159346590765424266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2159346590765424266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2159346590765424266'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/07/scalable-test-selection.html' title='Scalable Test Selection'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-2910889345100454954</id><published>2007-07-09T23:22:00.000-07:00</published><updated>2007-07-09T23:29:17.340-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cast conference meta framework'/><title type='text'>CAST Conference</title><content type='html'>I just finished Day 1 of the &lt;a href="http://www.associationforsoftwaretesting.org/conference/"&gt;AST Conference&lt;/a&gt; (CAST), and boy did I have a good time.  The talks were good, but the people were better.  There was definitely a general feeling of community there, which is something I haven't seen much at conferences I've been to lately.  The crowd was relatively small (~180), but all good people.&lt;br /&gt;&lt;br /&gt;Highlights for me:&lt;br /&gt;* Hearing Lee Copeland talk about the role of QA as a services group (this makes almost too much sense to me)&lt;br /&gt;* Talking to Jon Bach about the future of AST, CAST, and the other conferences that AST is hosting&lt;br /&gt;* Watching a small group gather after my talk on Meta-Frameworks to share their experience with Meta-Frameworks&lt;br /&gt;&lt;br /&gt;Anyway, now that I'm leaving tomorrow, I wish I was staying another day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-2910889345100454954?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/2910889345100454954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=2910889345100454954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2910889345100454954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2910889345100454954'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/07/cast-conference.html' title='CAST Conference'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-7053697507379639939</id><published>2007-07-07T11:03:00.000-07:00</published><updated>2007-07-07T11:09:49.890-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing cem kaner time trade off'/><title type='text'>The  Time Trade-Off</title><content type='html'>I started prepping for the &lt;a href="http://www.associationforsoftwaretesting.org/conference/index.html"&gt;CAST conference&lt;/a&gt; next week by reading up on some test patterns that the &lt;a href="http://www.associationforsoftwaretesting.org/"&gt;AST group&lt;/a&gt; has produced in the past.  I was reading some great stuff this weekend by Cem Kaner on &lt;a href="http://www.testing.com/test-patterns/patterns/pattern-scenario-testing-kaner.html"&gt;Scenario Testing&lt;/a&gt;, when I came across a fantastic quote:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"The fundamental challenge of all software testing is the time tradeoff. There is never enough time to do all of the testing, test planning, test documentation, test result reporting, and other test-related work that you rationally want to do. Any minute you spend on one task is a minute that cannot be spent on the other tasks. Once a program has become reasonably stable, you have the potential to put it through complex, challenging tests. It can take a lot of time to learn enough about the customers, the environment, the risks, the subject matter of the program, etc. in order to write truly challenging and informative tests."&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;It's so true, it's painful.  Deciding on &lt;span style="font-style: italic;"&gt;what&lt;/span&gt; to test is becoming increasingly important in my own work, as the amount of work stacks up, and the amount of time to test it decreases.  It's an interesting balancing act.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-7053697507379639939?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/7053697507379639939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=7053697507379639939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7053697507379639939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7053697507379639939'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/07/time-trade-off.html' title='The  Time Trade-Off'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-2226495025324566639</id><published>2007-06-29T06:10:00.000-07:00</published><updated>2007-11-01T23:15:41.855-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test strategy'/><category scheme='http://www.blogger.com/atom/ns#' term='verification'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='binary search'/><title type='text'>An interesting bug in Java binarySearch</title><content type='html'>Josh Bloch, author of Effective Java Programming and one of the best in the biz, blogged last summer about an &lt;a href="http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html"&gt;error in his own implementation&lt;/a&gt; of binary search within Sun's JDK.  It turns out that the most straightforward implementation admits a flaw so subtle that the version in &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html"&gt;java.util.Arrays&lt;/a&gt;, in particular, lay dormant for almost a decade.  It is one of the most interesting bugs I have seen in a long time, and in fact I didn't notice it myself.  Simplified slightly from the original:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// locate an index of key k in sorted array a[], &lt;br /&gt;// or if k is not present, return -1&lt;br /&gt;int binarySearch( int[] a, int k ){&lt;br /&gt;  int i = 0;&lt;br /&gt;  int j = a.length - 1;&lt;br /&gt;    &lt;br /&gt;  while( i &lt;= j ){&lt;br /&gt;    int m = (i + j) / 2;&lt;br /&gt;&lt;br /&gt;    if( k &lt; a[m] ){         // left half&lt;br /&gt;      j = m - 1;&lt;br /&gt;&lt;br /&gt;    } else if( a[m] &lt; k ){  // right half&lt;br /&gt;      i = m + 1;&lt;br /&gt;&lt;br /&gt;    } else {                // found&lt;br /&gt;      return m;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;  return -1;                // not present&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The culprit is sly: Operating on a large enough array, computing m = (i+j)/2 is subject to integer overflow, becoming negative due to wraparound, e.g.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  int M = 0x7fffffff;         // 2^31 - 1&lt;br /&gt;  int[] a = new int[ M ];&lt;br /&gt;  a[ M - 1 ] = 1;&lt;br /&gt;&lt;br /&gt;  // the call...&lt;br /&gt;  int r = binarySearch( a, 1 ); &lt;br /&gt;  // ...throws an ArrayIndexOutOfBoundsException !&lt;/pre&gt;&lt;br /&gt;Fortunately the midpoint can be computed safely via m = i + (j-i)/2.  Already there are many blog posts on this blemish, but none concerning quality.  What might a software engineer learn about testing from this long-hidden oversight?&lt;br /&gt;&lt;br /&gt;1.  A lesson from numerical analysis, that time-honored formulas aren't necessarily robust when copied to finite arithmetic.&lt;br /&gt;&lt;br /&gt;2.  Vary your test data.  Surely the Sun test battery for binarySearch passed, again and again, on the same sets of arrays and keys.  Fine for 9 years -- but static lists of tests become stale.  Which arrays should we select, or search for?  Read on...&lt;br /&gt;&lt;br /&gt;3.  Specialized conditions are required to pinpoint rare defects.  This flaw cannot be exposed for sizes below 2^30, about 1 billion; no wonder nobody noticed.  The truth is that the endpoints of anything almost always provide interesting insights.  Here, searching far to the left always passes, and only searching far enough to the right can throw the Exception.  Aha.  This leads to a favorite maxim...&lt;br /&gt;&lt;br /&gt;4.  &lt;i&gt;Design tests specific to the implementation&lt;/i&gt;.  The greatest of the Java &lt;tt&gt;int&lt;/tt&gt; primitives is M -- nothing to do with binary search -- instead, a boundary in the language itself!  Therefore, an array of that length makes a worthwhile test case  &lt;i&gt;in Java&lt;/i&gt; (cf. Mathematica, Python).  Something to remember when writing your own test suites.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.berkeley.edu/~wkahan"&gt;Professor Kahan&lt;/a&gt; at Berkeley once summed up his &lt;a href="http://www.cs.berkeley.edu/~wkahan/srtest/srtest"&gt;lessons about testing&lt;/a&gt; (from the infamous Pentium divide glitch) into a fitting quote: &lt;br /&gt;&lt;pre&gt;&lt;span style="font-style:italic;"&gt;Seek singularities!  There lie all the errors.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Wisely put, as are Josh's remarks about programming defensively, vigilance, code reviews, static analysis, solid proofs, and formal verification. (I would disagree with his view that there will always be bugs, but opposing formidable Dr. Bloch isn't really something one ought to do).  &lt;br /&gt;&lt;br /&gt;The paradox is that although testing can't exterminate our errors, it still needs to be done to provide corroborative evidence of correctness, even for well-proved algorithms!  Later, I'll augment this post with test strategies which might have exposed the flaw.  With test methods in mind, we might be able to expose ever more errors, and add to our QA repertoire.  &lt;br /&gt;&lt;br /&gt;An exercise: Using 32-bit two's compliment integer arithmetic, compute the average of i and j, correctly rounding to even.  Test it with i and j at the extremes.  My solution is not short.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-2226495025324566639?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/2226495025324566639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=2226495025324566639' title='89 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2226495025324566639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2226495025324566639'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/06/very-interesting-bug.html' title='An interesting bug in Java binarySearch'/><author><name>ieee754</name><uri>http://www.blogger.com/profile/02138046215862316816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>89</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-4417695108216478158</id><published>2007-06-19T23:30:00.001-07:00</published><updated>2007-06-19T23:38:46.160-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu installation'/><title type='text'>Ubuntu: A Fresh Perspective</title><content type='html'>I decided to replace the Fedora core 4 machine I had at home with the bizarrely named "Feisty Fawn" version (7.04) of Ubuntu, which has gotten oh so much attention as of late.  Having never installed Ubuntu, I wanted to know what the big deal was.&lt;br /&gt;&lt;br /&gt;There was only one disk to burn.  That was a nice surprise.  I started booting, and found that the CD I burned was actually a Live CD.  It booted me right into Ubuntu.  Naturally, I didn't read much about installing the distro, so I surmised for a minute that perhaps Ubuntu was just a Live CD.  Not so -- after I actually looked at the items on the desktop, I found a single "Install" icon.  Clicking this proceeded with the install of Ubuntu on my local hard drive.&lt;br /&gt;&lt;br /&gt;The distro has so far proved to be very usable.  There is an "Add/Remove Applications" feature which is remarkably like the "Add/Remove Programs" feature in Windows.  That is very useful for users who grew up in a Windows world.  My one complaint thus far is that I can't login as the root user.  I'm sure that if I look around the net enough I can find a way around that :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-4417695108216478158?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/4417695108216478158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=4417695108216478158' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4417695108216478158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4417695108216478158'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/06/ubuntu-fresh-perspective.html' title='Ubuntu: A Fresh Perspective'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-4073393846723826354</id><published>2007-06-09T13:53:00.000-07:00</published><updated>2007-06-09T14:06:56.202-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell concurrent programming'/><title type='text'>Concurrent Programming: The Next Best Thing</title><content type='html'>I was one of the lucky few to attend the &lt;a href="http://code.google.com/events/developerday/mv-home.html"&gt;Google Developer Day&lt;/a&gt; in San Jose last week.  It was quite interesting.  One of the best talks I went to concerned the &lt;a href="http://code.google.com/events/developerday/mv-sessions.html#behind_the_scenes"&gt;Google backend infrastructure&lt;/a&gt;.  One of the topics they've worked on extensively is storing and organizing massive amounts of information.  This probably isn't a surprise to anyone, but it highlighted to me the coming importance of &lt;a href="http://en.wikipedia.org/wiki/Concurrent_programming"&gt;concurrent programming&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a short one-line introduction to the subject: concurrent programming concerns the simultaneous execution of multiple interacting computational tasks.  O'Reilly recently pointed out that as the processor speeds remain stable, but the number of processors inside a computer continue to increase.  In 5-10 years, having a computer with 50-100 processors will probably not be unusual.  The real question is: how do you take advantage of all those processors?&lt;br /&gt;&lt;br /&gt;I think many consumers assume that all these extra processors in their computers are being leveraged.  I would say they are most likely assuming incorrectly, or at least, they are being leveraged inefficiently.  Concurrent programming languages (such as Haskell) allow multiple processors to execute tasks simultaneously, and coordinate tasks between them.  Now that's some sexy programming.&lt;br /&gt;&lt;br /&gt;It can also make good financial sense to move into this area of programming.  In O'Reilly's article, &lt;a href="http://radar.oreilly.com/archives/2007/06/the_faint_signa.html"&gt;"The Faint Signals of Concurrency"&lt;/a&gt;, utilizing an 8 CPU machine for processing data is much cheaper than buying a cluster of 8 machines for processing data.&lt;br /&gt;&lt;br /&gt;Haskell is already a "hip" programming language (stop laughing).  Among nerds, it is the cool language that wears its sunglasses at night, listens to jazz, and can recite quotes from famous philosophers.  I would say that this is a bleeding edge language, and really needs more investigation by me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-4073393846723826354?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/4073393846723826354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=4073393846723826354' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4073393846723826354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4073393846723826354'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/06/concurrent-programming-next-best-thing.html' title='Concurrent Programming: The Next Best Thing'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-767663036397531044</id><published>2007-05-22T21:23:00.000-07:00</published><updated>2007-05-22T21:30:55.963-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quality user expectations'/><title type='text'>User Expectations</title><content type='html'>Bill Higgins has recently written a fantastic post titled, &lt;a href="http://billhiggins.us/weblog/2007/05/17/the-uncanny-valley-of-user-interface-design/"&gt;"The Uncanny Valley of User Interface Design"&lt;/a&gt;.  He discusses how people have a basic mental model of how things should appear, and when they differ from that mental model, we reject them.&lt;br /&gt;&lt;br /&gt;He has a great example of this concerning the lack of an explosion of Java GUI apps:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"My own experience with using Java GUI apps of the late 1990s was that they were slow and they looked and behaved weirdly vs. standard Windows (or Mac or Linux) applications. That’s because they weren’t true Windows/Mac/Linux apps. They were &lt;a href="http://en.wikipedia.org/wiki/Java_Swing" title="Wikipedia: Swing (Java)"&gt;Java Swing&lt;/a&gt; apps which &lt;em&gt;emulated&lt;/em&gt; Windows/Mac/Linux apps. Despite the herculean efforts of the Swing designers and implementers, they couldn’t escape the Uncanny Valley of emulated user interfaces."&lt;/blockquote&gt;&lt;br /&gt;He's definitely on to something.  This got me thinking about user expectations, and how yet another thing a pursuer of quality must keep in mind is this difficult to quantity quality.  The sort of &lt;span style="font-style: italic;"&gt;je ne sais quoi&lt;/span&gt; of a web or desktop app that maybe meets all requirements, but just doesn't feel right.  Sorry, was that french phrase a bit too pretentious?  I couldn't find a better phrase to use.  It had a sort of &lt;span style="font-style: italic;"&gt;je ne sais quoi&lt;/span&gt; about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-767663036397531044?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/767663036397531044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=767663036397531044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/767663036397531044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/767663036397531044'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/05/user-expectations.html' title='User Expectations'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-2768748301634901318</id><published>2007-04-29T18:31:00.000-07:00</published><updated>2007-04-29T18:48:31.539-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance mysql'/><title type='text'>High Performance MySQL</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.amazon.com/High-Performance-MySQL-Jeremy-Zawodny/dp/0596003064/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 237px; height: 237px;" src="http://ec1.images-amazon.com/images/I/51h1DymejiL._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Databases have recently become interesting to me.  Previously, they've always seemed like these massive beasts that provide such simple and basic functionality, I didn't understand how companies such as Oracle could make billions selling &lt;span style="font-style: italic;"&gt;databases&lt;/span&gt;.  Yes, it was a dirty word in my vocabularly.  And yes, I'm now a reborn DBA in training.&lt;br /&gt;&lt;br /&gt;Recently I've been working on a small PHP project reporting statistics on some data from our network.  The small project has been collecting for some time now, and has begun to attract some attention.  It's also started to slow down considerably.  I read a few MySQL performance articles and blog entries, which had quite a few tips and tricks, but in reality I was adding indicies and making config changes without really knowing how to measure the performance differences, or how the change was really affecting my web app.  It was blind performance tuning.&lt;br /&gt;&lt;br /&gt;And then I picked up &lt;a href="http://www.amazon.com/High-Performance-MySQL-Jeremy-Zawodny/dp/0596003064/"&gt;"High Performance MySQL"&lt;/a&gt;.  This book is changing my life one page at a time.  I've noticed that most of the articles and blogs around MySQL on the web (at least, the ones I could find) were centered around the basic stuff: installation, basic configuration, and cookbook recipes.  This book goes to the next level and answers many questions that I've previously had, but didn't have an aggregated place to find. &lt;br /&gt;&lt;br /&gt;The key to that last statement is &lt;span style="font-weight: bold;"&gt;aggregated&lt;/span&gt;.  I'm sure there are articles out there that explain the differences between InnoDB, and MyISAM, various ways to benchmark your queries to measure performance differences, or methods to cache your queries to improve performance, but having them all aggregated in one place provides context that has proved valuable.&lt;br /&gt;&lt;br /&gt;If you're looking for the next level of intelligence on using MySQL in real-world environments, this book is highly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-2768748301634901318?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/2768748301634901318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=2768748301634901318' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2768748301634901318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2768748301634901318'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/04/high-performance-mysql.html' title='High Performance MySQL'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-4663322801810508934</id><published>2007-04-24T11:46:00.000-07:00</published><updated>2007-04-24T11:57:17.378-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie ies4linux testing web'/><title type='text'>Testing Old Versions of IE in Linux</title><content type='html'>As much as I wish people would move off their old versions of IE and Firefox as fast as possible, it's rather hard to induce this.  Microsoft has tried hard to move people to IE7 by making it a Windows Update.  However, the simple truth is that when developing web sites, you must support many different browsers, including those old, terrible versions that you wished had never been released.&lt;br /&gt;&lt;br /&gt;There is a small problem with this: finding these older versions of IE is rather difficult.  Oh they are out there somewhere, but it's not easy and obvious.  I usually resort to downloading some version of IE 5.5 off of a sketchy website, and then proceed to do multiple AV scans of the file I've downloaded.&lt;br /&gt;&lt;br /&gt;And what should come to the rescue...Linux, naturally!  I recently found a project called &lt;a href="http://www.tatanka.com.br/ies4linux/page/Main_Page"&gt;IEs4Linux&lt;/a&gt; that installs IE 5, 5.5, and 6 off of Wine.  It's meant to be used for web designers to test site compatibility in older IE versions.  Personally, it will be useful for my own web testing -- and now I don't have to use Windows to test IE anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-4663322801810508934?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/4663322801810508934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=4663322801810508934' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4663322801810508934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4663322801810508934'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/04/testing-old-versions-of-ie-in-linux.html' title='Testing Old Versions of IE in Linux'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-4569119797402310296</id><published>2007-04-06T20:26:00.000-07:00</published><updated>2007-04-06T20:34:49.962-07:00</updated><title type='text'>Apple Rising</title><content type='html'>&lt;span style="font-family: arial;"&gt;Paul Graham, that most prolific of writers for any tech geek, recently posted an interesting article titled "&lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.paulgraham.com/microsoft.html"&gt;Microsoft is Dead&lt;/a&gt;&lt;span style="font-family: arial;"&gt;".  I think the title was for dramatic effect, as what he means is that Microsoft is dead in the same way IBM is dead, i.e., not innovative or interesting anymore.  I believe he's right, for the most part.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;One of the reasons he touted as a sure sign of Microsoft's death piqued my interest:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;"&lt;/span&gt;&lt;span style="font-family: arial;font-size:100%;" &gt;Nearly all the people we fund at Y Combinator use Apple laptops.  It was the same in the audience at  &lt;a href="http://www.bosstalks.com/StartupSchool2007/all_macs_and_all_writing.jpg"&gt;startup school&lt;/a&gt;.  All the computer people use Macs now.  Windows is for grandmas, like Macs used to be in the 90s."&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: arial;"&gt;Without a doubt, Apple is rising.  It's something I've discussed with friends, and spent time trying to decipher.  At any tech conference I go to, there are tons of people with Macs.  Whenever I visit the Google campus, there are macs all over the place.&lt;br /&gt;&lt;br /&gt;What does this mean?  Why are people moving to Apple, rather than installing Linux on their laptops with cheaper commodity hardware?  There are a myriad of small reasons that I can come up with, but there is no denying the trend.  Or fad.  I'm not sure which it is.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-4569119797402310296?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/4569119797402310296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=4569119797402310296' title='84 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4569119797402310296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4569119797402310296'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/04/apple-rising.html' title='Apple Rising'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>84</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-9030408336533621131</id><published>2007-04-06T20:21:00.000-07:00</published><updated>2007-04-06T20:26:03.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quote'/><title type='text'>A good quote to be reminded of</title><content type='html'>A recently came across a Peter Drucker quote that struck me as very true.&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;blockquote&gt;"Growth that increases productivity is healthy, growth without an increase in productivity is fat, and growth that decreases productivity is cancer...."&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;I think it's often easy to forget that, in software at least, output is king.  If what you're doing doesn't contribute to output or productivity, you may want to rethink what you're doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-9030408336533621131?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/9030408336533621131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=9030408336533621131' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/9030408336533621131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/9030408336533621131'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/04/good-quote-to-be-reminded-of.html' title='A good quote to be reminded of'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-6740395438195910384</id><published>2007-04-05T16:21:00.000-07:00</published><updated>2007-04-05T16:29:39.091-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microsoft testing'/><title type='text'>AppVerifier</title><content type='html'>I've been introduced to a pretty interesting test tool that was released by Microsoft: &lt;a href="http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/appvrfr.mspx"&gt;AppVerifier&lt;/a&gt;.  From the intro page of the tool:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"AppVerifier encompasses areas that are specifically designed to test for commonly encountered application compatibility issues, and some very subtle kernel issues."&lt;/blockquote&gt;Pretty nice.  AppVerifier works by attaching to the program you want to test, and performing configurable tests whenever the program is accessed.  There are five main areas you can configure for testing:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Memory: This ensures that virtual memory API's are used correctly&lt;/li&gt;&lt;li&gt;Thread Local Storage: This just ensures that the TLS API's are used correctly.&lt;/li&gt;&lt;li&gt;Low Resource Simulation: This simulates a low resource environment&lt;/li&gt;&lt;li&gt;Limited User Account Predictor: This lets you know whether a non-Admin user can properly use the program&lt;/li&gt;&lt;li&gt;Misc: Dirty stacks and dangerous API's, according to the website&lt;/li&gt;&lt;/ol&gt;I'd say it's worth a look if you're testing a program on Windows XP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-6740395438195910384?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/6740395438195910384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=6740395438195910384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6740395438195910384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6740395438195910384'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/04/appverifier.html' title='AppVerifier'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-8527969921274820340</id><published>2007-03-28T13:52:00.000-07:00</published><updated>2007-03-28T14:54:46.088-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wasting time microsoft source control'/><title type='text'>Wasting time at Microsoft</title><content type='html'>&lt;a href="http://ryepup.unwashedmeme.com/blog/"&gt;Ryan's Tech Blog&lt;/a&gt; (good name) recently had a &lt;a href="http://ryepup.unwashedmeme.com/blog/2007/03/27/codeplex-wastes-six-months-reinventing-wheels/"&gt;nice ranting post&lt;/a&gt; about how Microsoft wasted 6 months of developer time re-creating a source control client for Codeplex.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"This problem is ingrained at Microsoft, which feels the need to brand everything, but it is in no way limited to them. A search on &lt;a href="http://sourceforge.net/"&gt;Sourceforge&lt;/a&gt; for “issue tracker” gives 585 results.  Sifting through those to pick a winner is difficult."&lt;/blockquote&gt;&lt;br /&gt;It's hard to argue with his logic.  He makes a strong argument about the need to work with extensible tools that can plug into each other.  I think this exemplifies one of the basic differences between Windows and Unix tools that I've noticed: Windows tools are designed as "solutions", whereas Unix tools are designed to be extensible.  It's almost unheard of to see Windows tools that are designed to be pluggable, but in the Unix world, the opposite is true.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-8527969921274820340?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/8527969921274820340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=8527969921274820340' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8527969921274820340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8527969921274820340'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/03/wasting-time-at-microsoft.html' title='Wasting time at Microsoft'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-8571000106777356676</id><published>2007-03-26T14:14:00.000-07:00</published><updated>2007-03-26T15:27:27.114-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='collaborative filtering algorithms recommendations'/><title type='text'>Collaborative Filtering: An introduction</title><content type='html'>Recommendation algorithms are hot right now.  NetFlix, Amazon, and StumbleUpon all have examples of working recommendation algorithms that are not only interesting, but useful.  &lt;a href="http://en.wikipedia.org/wiki/Collaborative_filtering"&gt;Collaborative filtering&lt;/a&gt; is the method of prediction that has been widely adopted across these sites.&lt;br /&gt;&lt;br /&gt;The underlying assumption with collaborative filtering is that your preferences in the past will help predict your preferences in the future.  Assuming that this is true, CF makes itself unique by finding users with similar preferences as you.  Once this neighborhood of users is found, it can be reasonably assumed any items they like, you will also like, and hence, an intelligent recommendation can be made.&lt;br /&gt;&lt;br /&gt;Using the NetFlix analogy, if you and another user named "Jack", who is completely unknown to you, have rated the same movies in the same way, it can be assumed that you have similar tastes.  Therefore, if Jack rates a new movie very highly, the likelihood that you will also like that movie is very high, and it can be recommended.&lt;br /&gt;&lt;br /&gt;There are issues with this algorithm, of course.  First, you have to build up a reasonable list of preferences for the algorithm to make successful matches of other users.  If you only rate 1 item ever, you can't expect great recommendations to come your way.  Second, if your tastes change, the algorithm will be able to pick it up, but only with time.  There must be time for the new change to affect the weight of your past selections.  Last, this algorithm doesn't scale very well.  For massive sites like NetFlix and Amazon, I'm sure there are some sort of caching or iterative methods involved so that the recommendations aren't recomputed everytime you login to the site.  With millions of users and millions of products, it would simply take too long to load any sort of user-specific recommendation.&lt;br /&gt;&lt;br /&gt;There is another method way to implement CF outside of the user-centric CF model described above.  You can do an item-centric recommendation too.  Rather than find a neighborhood of users with similar tastes, you can look at the specific items you've rated well and find a neighborhood of items with that share similar traits.  If you're in a world where the number of items doesn't grow as fast as the number of users, this algorithm would scale much better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-8571000106777356676?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/8571000106777356676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=8571000106777356676' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8571000106777356676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8571000106777356676'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/03/collaborative-filtering-introduction.html' title='Collaborative Filtering: An introduction'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-8038664436484058892</id><published>2007-03-19T20:58:00.000-07:00</published><updated>2007-03-19T21:06:22.639-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adobe apollo rich internet applications'/><title type='text'>Adobe Apollo Launches</title><content type='html'>Adobe Lab's project Apollo has officially launched today.  It's an interesting project that lies in the realm of creating "Rich Internet Applications", a buzzword I've been seeing a lot lately.&lt;br /&gt;&lt;br /&gt;Apollo is essentially a runtime, similar to Flash.  What makes this new and different is that the Apollo technologies are focused on bringing web functionality back to the desktop.  It tries to solve the online-offline data problem that people currently have with mail, contacts, news, etc.  Gmail is a great application, but when I'm offline (on a place, perhaps), I can't write emails in Gmail to send later.  If, however, there was a Desktop app that synced with Gmail when you were back online, that would be pretty sweet.&lt;br /&gt;&lt;br /&gt;Apollo is a recognition that as wired as we are, and as popular as the web has become, some major functionality and synchronization issues were not addressed in the jump from the Desktop to the web.  Some smooth transition apps that allow you to host your data online on central nodes, but then have that data available locally on distributed nodes, would be very nice to have.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.adobe.com/technologies/apollo/"&gt;Read more about it here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-8038664436484058892?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/8038664436484058892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=8038664436484058892' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8038664436484058892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8038664436484058892'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/03/adobe-apollo-launches.html' title='Adobe Apollo Launches'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-194541639962583728</id><published>2007-03-14T16:57:00.000-07:00</published><updated>2007-03-14T17:04:01.444-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash debugger script languages'/><title type='text'>Bash has a debugger</title><content type='html'>One of my biggest complaints with interpreted languages in general is that the debugging tools available are rather limited.  When trying to find the root of a problem, having some sexy surgical tools available to cut into your program are nice.  No, more than nice - sometimes they're necessary.&lt;br /&gt;&lt;br /&gt;To my surprise, I discovered that Bash has a &lt;a href="http://bashdb.sourceforge.net/"&gt;debugger&lt;/a&gt;!  Bashdb, where have you been all my life?  You can set breakpoints in your code, and step through the script line by line if desired.  In terms of basic functionality, it's matches gdb fairly closely.  Amazing!&lt;br /&gt;&lt;br /&gt;I've used the PHP debugger XDebug before, but I found it to be a bit intrusive into the source code.  You have to add PHP commands to the source to enable XDebug.  I've never used Python or JS debuggers.  Anyone know if good debuggers exist for those languages?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-194541639962583728?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/194541639962583728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=194541639962583728' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/194541639962583728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/194541639962583728'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/03/bash-has-debugger.html' title='Bash has a debugger'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-4293896790630670899</id><published>2007-03-07T16:02:00.000-08:00</published><updated>2007-03-08T06:12:32.807-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microsoft build tools msi'/><title type='text'>WiX: Windows Installer XML Toolset</title><content type='html'>While reading "&lt;a href="http://www.amazon.com/Build-Master-Microsofts-Configuration-Addison-Wesley/dp/0321332059/"&gt;The Build Master&lt;/a&gt;" this week, I was introduced to the tool that I find quite interesting: &lt;a href="http://wix.sourceforge.net/manual-wix2/wix_index.htm"&gt;WiX&lt;/a&gt;.  It's a MSFT produced and supported tool that has been open-sourced (&lt;span style="font-style: italic;"&gt;gasp!&lt;/span&gt;).  Open-source?  Microsoft?  Useful?  My head hurts.&lt;br /&gt;&lt;br /&gt;The WiX toolset allows you to create an MSI rather painlessly using an XML format that they've defined.  It's actually quite intuitive and useful.  The WISE and InstallShield guys have had the market on creating Windows Installers for the longest time.  In addition, the horror stories I've heard from people who have the strength to use the WISE / InstallShield tools really caused me to do a double-take when I saw this tool.&lt;br /&gt;&lt;br /&gt;In addition, there is no "setup" to speak of with this toolset.  It's literally a set of binaries that you can execute from the command-line.  There is no installation overhead, making these tools easy to store and version for build escrow purposes.&lt;br /&gt;&lt;br /&gt;There is another open-source tool called &lt;a href="http://wix.sourceforge.net/votive.html"&gt;Votive&lt;/a&gt; that ties in to Visual Studio and allows you to create and control the MSI build using WiX from within the GUI.  As Borat would say, &lt;span style="font-style: italic;"&gt;Niiice&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-4293896790630670899?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/4293896790630670899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=4293896790630670899' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4293896790630670899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4293896790630670899'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/03/wix-windows-installer-xml-toolset.html' title='WiX: Windows Installer XML Toolset'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-7207195425310453051</id><published>2007-03-04T22:54:00.000-08:00</published><updated>2007-03-04T23:07:24.969-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comfort zone testing insight'/><title type='text'>The Comfort Zone</title><content type='html'>Steve Yegge had a &lt;a href="http://steve.yegge.googlepages.com/being-the-averagest"&gt;really interesting blog post&lt;/a&gt; last week about the average programmer.  Take a looksey:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"But how do programmers compete?  Generally, they just don't.  Not in the way chess players or golfers compete, anyway.  The reason?  You can't compare programmers quantitatively, so you can't compute a score or a rank.  Competitions and competitors have to be scored.  Sure, you can set up scored programming competitions, but they're so tightly controlled that they don't resemble real-world software development anymore.  Professional programmers basically just don't compete with each other.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p&gt; Hence, you're probably not pushing yourself.  Even if you're trying to improve your programming skills, you're probably just doing it in areas you're already comfortable in.  And your improvements probably still aren't happening as fast as they would if you were &lt;em&gt;competing&lt;/em&gt; to improve them."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;Very true.  He goes on to discuss how programmers are ranked relative to each other, since there is no quantitative method of ranking programmers, which in itself is completely subjective (and hence, his complaint).  Programmers are ranked according to the context they are in.&lt;br /&gt;&lt;br /&gt;His main complaint is about the comfort zone we all find ourselves in.  He believes that since it is difficult to quantify the skill of a programmer, incentive is provided for pigeonholing yourself into an area you feel comfortable with.&lt;br /&gt;&lt;br /&gt;I think this is true in most professions, not just programming, but I find this very true in testing as well.  It is very easy to turn to the same tools and oracles to help with your problems and give advice.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"See, I always thought I was a perfectly competent programmer: as good as you can get, basically.  I was building cool stuff, doing seemingly complicated things, and I felt I knew a tremendous amount of lore about the art of programming.  I had won or placed in programming competitions, could program in Java for weeks on end without referring to the API docs, and pretty much felt on top of things.&lt;br /&gt;&lt;br /&gt;   &lt;p&gt; Every few years, I would read some critical book, or have some weighty flash of insight, and realize that I'd been operating all this time in what could only be termed "clueless mode", and that I hadn't really known what I was doing after all.  Amusingly, I was always relieved that &lt;em&gt;now&lt;/em&gt; I could consider myself to be a good programmer, since I now knew whatever it was I'd been missing before.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;   &lt;p&gt; Last year it finally dawned on me, after 16 or 17 years of this, that I just might possibly &lt;em&gt;still be clueless&lt;/em&gt; about something important that I really ought to know, something that would make me a much better programmer."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;Word.  Hopefully I'll be that inspired and insightful after 16 or 17 years of working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-7207195425310453051?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/7207195425310453051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=7207195425310453051' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7207195425310453051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7207195425310453051'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/03/comfort-zone.html' title='The Comfort Zone'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-5639971290493636453</id><published>2007-02-19T17:29:00.000-08:00</published><updated>2007-02-21T13:54:17.144-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personality traits'/><title type='text'>Test Personality Traits</title><content type='html'>I've begun to wonder what affect personality traits have in testing. The main question I pose to you is: are there specific personality traits that one should look for in good testers?  This isn't to say that there aren't people who are excellent testers who have personality traits that aren't amiable to testing, but I'm looking for some generic pattern.&lt;br /&gt;&lt;br /&gt;Take cynicism. Cynical people could be described as untrusting. I think it could be argued that this is a good trait to have in a tester.  If by nature one does not trust the very inputs, outputs, data flows, and processes of a system system under test, it is possible that one could find more problems, assuming that there is proper motivation to do so.&lt;br /&gt;&lt;br /&gt;On the opposite side of the spectrum, what about optimists? If you by nature are a very trusting person, would you unknowingly overlook problems due to your sunny outlook? Or is it possible to seperate your innate optimism from the technical job at hand?&lt;br /&gt;&lt;br /&gt;You can probably already read my biases in the writing above, but I'm curious what the world at hand thinks.  I'm not suggesting that hiring people should be based on personality traits, especially since I think it is impossible to get a good feel for someone's personality in 4-5 hours; but perhaps, just maybe, it should be taken into account.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-5639971290493636453?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/5639971290493636453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=5639971290493636453' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/5639971290493636453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/5639971290493636453'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/02/test-personality-traits.html' title='Test Personality Traits'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-6455769340245915407</id><published>2007-02-19T17:13:00.000-08:00</published><updated>2007-02-19T17:29:08.037-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='build engineer testing'/><title type='text'>The Brotherhood of Building and Testing</title><content type='html'>In the past few weeks, I've been embedded in the world of build engineering and configuration management.  It has been an eye-opening experience, believe me.  There are many splinters and specializations in the software industry, and the area of build engineering is one that I've never really paid attention to until recently.  From what I've seen thus far, there are far more connections between building and testing than I've previously known.&lt;br /&gt;&lt;br /&gt;There is a web of trust in the process of building any project that one takes a bit for granted, and indeed one &lt;em&gt;must&lt;/em&gt; take it for granted.  It's impossible to know every detail that every responsibility entails, so you must take for granted that the program manager is doing his job, and the product manager's requirements have been adequately reviewed and vetted out.  The one area where the web of trust stops is between developer and testers.  The testers are present to be cynical, and in general &lt;em&gt;not&lt;/em&gt; trust the output of the developers.  This ensures more quality in the software so that the users are not the ones consuming poor products.&lt;br /&gt;&lt;br /&gt;I've recently started to think that the web of trust should be breaking down in another place: building.  I would say that most engineers take the output of the build engineer a bit for granted.  You assume that the build is an instrumented build because the build engineer says so.  You assume that the build has the correct fixes in it because the build engineer says so.  Well what happens if the build engineer is wrong?  Having the correct build is the first step in the testing process, and depending on where you are in the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;life cycle&lt;/span&gt;, the main consumer of the build will be the testers.&lt;br /&gt;&lt;br /&gt;I don't think it's too far-fetched to say that a new specialization should open up: build test engineer.  The process of building can be complicated enough, depending on the size of your project, and can be a full-time job by itself.  Adding value on top of that could be another full-time job.  The value I'm referring to is build testing, build metrics, and build consumption.&lt;br /&gt;&lt;br /&gt;Just as testers are considered a trusted third-party that can tell you with certainty (i.e., data) the risks and issues found in a product, a build test engineer would be a trusted third-party who could tell you with certainty that the build has or contains the attributes it says it does.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-6455769340245915407?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/6455769340245915407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=6455769340245915407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6455769340245915407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6455769340245915407'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/02/brotherhood-of-building-and-testing.html' title='The Brotherhood of Building and Testing'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-7860519619038163666</id><published>2007-02-15T23:55:00.000-08:00</published><updated>2007-02-15T23:58:14.097-08:00</updated><title type='text'>Nerdiest. Comic. Ever.</title><content type='html'>This is a bit off topic, but xkcd had quite possibly the nerdiest comic ever tonight, and I thought I should share with you all. It involves Lisp, God, and Perl.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/c224.html"&gt;http://xkcd.com/c224.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Amazing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-7860519619038163666?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/7860519619038163666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=7860519619038163666' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7860519619038163666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7860519619038163666'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/02/nerdiest-comic-ever.html' title='Nerdiest. Comic. Ever.'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-8334190698313209383</id><published>2007-02-07T13:38:00.000-08:00</published><updated>2007-02-08T23:58:45.370-08:00</updated><title type='text'>The Desire to Build</title><content type='html'>My girlfriend and I had an interesting conversation last week about how so many test engineers feel the need to create and recreate tools upon more tools, even if a tool already exists that does what they need to do. This is a situation that has its own acronym: YATT (yet another test tool).&lt;br /&gt;&lt;br /&gt;It brings up an interesting question: does this desire come from the very core of what it means to be an engineer, to build and create; or is this possibly something more? Is it possible that this desire stems from deeper feelings of inadequacies at not being a "developer", at least in title? When you need a test tool to perform an action, and there are twenty tools out there already that do this, why should one create another tool?&lt;br /&gt;&lt;br /&gt;It's true that some stigma remains around the role of the tester. When people ask what I do, I feel the need to stress that I'm an &lt;em&gt;engineer&lt;/em&gt;, but in the testing field. There are times at work when I feel I should be creating something in order to be taken seriously by my fellow engineers. I feel this is true, at least in part. Doing your job, and doing it well, is an exceptional way of getting respect, but there is nothing like showing off something cool to get instant cred. It's like we're in 8th grade again.&lt;br /&gt;&lt;br /&gt;Which brings up an interesting conclusion that we came to in our coversation. The testing field needs to a mature a little before such problems will be alleviated. I think that when testing is taken as a serious discipline across the industry, testers will stop trying to be developers and start trying to be testers.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.digg.com"&gt;&lt;img height="15" alt="Digg!" src="http://digg.com/img/badges/80x15-digg-badge.gif" width="80" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-8334190698313209383?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/8334190698313209383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=8334190698313209383' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8334190698313209383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8334190698313209383'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/02/desire-to-build.html' title='The Desire to Build'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-7436377196673391521</id><published>2007-01-23T10:13:00.000-08:00</published><updated>2007-01-23T10:31:24.282-08:00</updated><title type='text'>Ethical Hacking</title><content type='html'>A common question I get from people is, "What do you like about QA?". Actually, it's also a common question I ask people during interviews, but I digress. It's a question I've thought about much during my time in the industry, and I have a few answers, but my favorite one is that I consider testing to be a form of ethical hacking.&lt;br /&gt;&lt;br /&gt;Putting the negative connotations aside, hacking (in my opinion) is understanding a system so thoroughly that you can discover weaknesses to exploit in order to gain some sort of advantage. These advantages could be an escalation of privileges, using the system for ways not intended or devised, or simply disturbing the data in the system. Not to be too picky, but the actual term for this is "cracking". The idea of hacking extends well beyond computers, as many of you know I'm sure. Using the correct combination of coupons to get a good deal at Best Buy (as seen frequently on &lt;a href="http://techbargains.com/"&gt;Techbargains&lt;/a&gt;) is using the system in a way that wasn't intended, and is a form of hacking.&lt;br /&gt;&lt;br /&gt;Since hacking unfortunately already has negative connotations with it, I like to use the phrase "ethical hacking".  As part of my job, I must understand a system well enough to exploit it.  Truly there are an infinite number of combinations of actions that one can try to exploit a system.  As members of a larger system, one must understand more than just the application under test.  You must also have knowledge of the underlying operating system(s) it may be used on, any network protocols that may be in use, the pitfalls of the underlying architecture, the caveats of the language it was written in, etc., etc.  It is the understanding of the external world housing the application that one must learn, and in that, there is so much to learn.   Which keeps life interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-7436377196673391521?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/7436377196673391521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=7436377196673391521' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7436377196673391521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7436377196673391521'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/01/ethical-hacking.html' title='Ethical Hacking'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-2343664502455582501</id><published>2007-01-19T12:14:00.000-08:00</published><updated>2007-01-19T12:56:01.082-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux low memory stress load testing'/><title type='text'>Inducing Low Memory Conditions</title><content type='html'>Testing under stress and load conditions are important for every application. Having empirical knowledge of what the breaking point is for any computer hosting an application helps you to plan for such an occaision, as well as giving you an idea of what sort of load the machine can handle before it buckles. If you're aware that having 1000 simultaneous users on a web application you've built is the down-hill tipping point for failure, and you're seeing peak usage at 1200 users a day, you know that it's time to either get another machine or tweak the code to allow for more users on the machine.&lt;br /&gt;&lt;br /&gt;Recently I did some searching for a program that would induce low memory conditions on my linux box. I wanted to do some stress testing on a web app while the machine was low in memory. Unfortunately I couldn't find a decent program, so I wrote one! Since I've found that "tutorial" sites are very popular (I visit them myself daily), I thought posting this might be good for the blog. And what's good for the blog, is good for Ryan.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;font size="2"&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#define MEGABYTE 1024*1024&lt;br /&gt;#define LOWMEMORY 30000&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&amp;nbsp;* SUMMARY: Induce low memory conditions by allocating memory in 1 MB chunks and checking free memory until there is only LOWMEMORY KB of free memory left&lt;br /&gt;&amp;nbsp;* REQUIREMENTS: Must be run on a Linux machine, and the LOWMEMORY number should be in KB&lt;br /&gt;&amp;nbsp;* AUTHOR: Ryan Gerard, ryan dot gerard at gmail dot com&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void *myblock = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int count = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int freeMem = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Allocate memory in 1 MB chunks as long as the free mem can be found and the free mem is greater than LOWMEMORY KB&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while( (freeMem = getFreeMem()) != -1 &amp;&amp; freeMem &gt; LOWMEMORY)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myblock = (void *) malloc(MEGABYTE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!myblock) break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memset(myblock,1, MEGABYTE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Currently allocating %d MB\n",++count);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("Free mem is %d KB\n", freeMem);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Print out amount of free memory left&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("%d free memory left\n", getFreeMem());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&amp;nbsp;* Parse the output of 'vmstat' to determine the amount of free memory left on the system&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;int getFreeMem()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILE *readFile;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char string[256];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int cnt = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int freeMem = -1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Output memory information to file tmpfile&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;system("vmstat -a 1 1 &gt; tmpfile");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Open the file for reading&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ( (readFile = fopen("tmpfile", "r")) != NULL )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Get the third line of text from the file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while( fgets(string, 256, readFile) &amp;&amp; cnt &lt; 2 )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cnt++&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cnt = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char* token = strtok(string, " ");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while(token != NULL &amp;&amp; cnt &lt; 3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;token = strtok(NULL, " ");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cnt++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Convert to an integer to return&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;freeMem = atoi(token);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Close the file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fclose(readFile);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return freeMem;&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-2343664502455582501?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/2343664502455582501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=2343664502455582501' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2343664502455582501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/2343664502455582501'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/01/inducing-low-memory-conditions.html' title='Inducing Low Memory Conditions'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-1482963171422412767</id><published>2007-01-15T23:06:00.000-08:00</published><updated>2007-01-15T23:46:38.312-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='amazon web services computing cloud storage mechanical turk queue'/><title type='text'>A Timeout for Amazon</title><content type='html'>I wanted to take a timeout from testing to discuss an area I find interesting: the web services platforms being built by Amazon. I am, of course, referring to &lt;a href="http://www.amazon.com/S3-AWS-home-page-Money/b/ref=sc_fe_l_2/002-0493264-1304000?ie=UTF8&amp;node=16427261&amp;amp;no=3435361"&gt;S3&lt;/a&gt;, &lt;a href="http://www.amazon.com/b/ref=sc_fe_l_2/002-0493264-1304000?ie=UTF8&amp;node=201590011&amp;amp;no=3435361"&gt;EC2&lt;/a&gt;, &lt;a href="http://www.amazon.com/Simple-Queue-Service-home-page/b/ref=sc_fe_l_2/002-0493264-1304000?ie=UTF8&amp;node=13584001&amp;amp;no=3435361"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;SQS&lt;/span&gt;&lt;/a&gt;, and &lt;a href="http://www.amazon.com/Mechanical-Turk-AWS-home-page/b/ref=sc_fe_l_2/002-0493264-1304000?ie=UTF8&amp;node=15879911&amp;amp;no=3435361"&gt;Mechanical Turk&lt;/a&gt;. I was reminded of these services by &lt;a href="http://radar.oreilly.com/archives/2007/01/amazon_s3_is_ev.html"&gt;Marc &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;Hedlund's&lt;/span&gt; post&lt;/a&gt; on the &lt;a href="http://radar.oreilly.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)"&gt;O'Reilly&lt;/span&gt; Radar&lt;/a&gt; today.&lt;br /&gt;&lt;br /&gt;The game is afoot in the race to develop the next best thing, and Amazon has released these rather interesting technologies that enable developers to build that next best thing &lt;em&gt;cheaply&lt;/em&gt;. Jeff &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3" onclick="BLOG_clickHandler(this)"&gt;Bezos&lt;/span&gt; strikes again with services that leverage the idle parts of Amazon's computing infrastructure and provides it to the people at extremely reasonable prices. Here is a quick overview of the various technologies described above.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Mechanical-Turk-AWS-home-page/b/ref=sc_fe_l_2/002-0493264-1304000?ie=UTF8&amp;node=15879911&amp;amp;no=3435361"&gt;Mechanical Turk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Developers use the Amazon Mechanical Turk web services &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4" onclick="BLOG_clickHandler(this)"&gt;API&lt;/span&gt; to submit tasks to the Amazon Mechanical Turk web site, approve completed tasks, and incorporate the answers into their software applications."&lt;/blockquote&gt;&lt;br /&gt;This web service is in reality a masked human-computer interface. Instead of humans asking computers to perform actions, computers are asking humans to perform actions, and using the results in whatever computations are being performed. The entire developing area of funnelling work off that is easy for humans to do but hard for computers (visual pattern recognition, reading obscured text, etc) is interesting, and efficient, assuming you can assemble people to actually do the work.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Simple-Queue-Service-home-page/b/ref=sc_fe_l_2/002-0493264-1304000?ie=UTF8&amp;node=13584001&amp;amp;no=3435361"&gt;S3: Simple Storage Service&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is truly a simple web service that allows you to store and retrieve any amount of data from the Amazon infrastructure, and you only pay for what you use.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"It gives any developer access to the same highly scalable, reliable, fast, inexpensive data storage infrastructure that Amazon uses to run its own global network of web sites."&lt;/blockquote&gt;&lt;br /&gt;This is a very simple idea, and easy to grasp the significance. Storage is cheap, so make is available anywhere through standardized methods. The first obvious idea around this technology, online backup, has been done by a few companies already. The cost, you ask? $0.15 per GB-month of storage used, and $0.20 per GB of data transferred.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/b/ref=sc_fe_l_2/002-0493264-1304000?ie=UTF8&amp;node=201590011&amp;amp;no=3435361"&gt;E2: Elastic &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;Computing&lt;/span&gt; Cloud&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;E2 is to computing what S3 is to storage. E2 provides a web service that allows you to increase your computing capacity on the fly.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Amazon EC2 reduces the time required to obtain and boot new server instances to minutes, allowing you to quickly scale capacity, both up and down, as your computing requirements change."&lt;/blockquote&gt;&lt;br /&gt;The first obvious idea I can see with this is reducing the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6" onclick="BLOG_clickHandler(this)"&gt;Digg&lt;/span&gt; /&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7" onclick="BLOG_clickHandler(this)"&gt;Slasdot&lt;/span&gt; / &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8" onclick="BLOG_clickHandler(this)"&gt;reddit&lt;/span&gt; effect on smaller sites. I hate clicking on a link from one of those sites to only find out that it maxed out its bandwidth limits two hours ago.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9" onclick="BLOG_clickHandler(this)"&gt;Virtualizing&lt;/span&gt; all computer resources like this is quite interesting - I'd be interested in reading a story by someone who completely runs a site from Amazon's infrastructure. Requests made to the domain would use the EC2 computing cloud to retrieve the page requested from the S3 storage service. Traffic would be monitored, and in the case of a statistical spike, more computer resources could be called within minutes to serve your new readers.&lt;br /&gt;&lt;br /&gt;Again, the cost is very reasonable. $0.10 per instance-hour consumed, $0.20 per GB of data transferred, and any associated S3 costs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Simple-Queue-Service-home-page/b/ref=sc_fe_l_2/002-0493264-1304000?ie=UTF8&amp;node=13584001&amp;amp;no=3435361"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10" onclick="BLOG_clickHandler(this)"&gt;SQS&lt;/span&gt;: Simple Queue Service&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Amazon &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11" onclick="BLOG_clickHandler(this)"&gt;SQS&lt;/span&gt; offers a reliable, highly scalable hosted queue for storing messages as they travel between computers."&lt;/blockquote&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12" onclick="BLOG_clickHandler(this)"&gt;SQS&lt;/span&gt; is a giant distributed queue using Amazon's messaging infrastructure. This service-based asynchronous message technology is a little less obvious in terms of realistic functionality, but very geeky, and hence, very interesting. It reminds me of when Google released &lt;a href="http://labs.google.com/sets"&gt;Google Sets&lt;/a&gt;. My first thought was, "What sane person would use this?", and my second thought was, "I wish I could think of a reason to use this".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-1482963171422412767?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/1482963171422412767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=1482963171422412767' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/1482963171422412767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/1482963171422412767'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/01/timeout-for-amazon.html' title='A Timeout for Amazon'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-7328889862538308220</id><published>2007-01-12T00:36:00.000-08:00</published><updated>2007-01-12T01:19:15.579-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extreme testing knowledge transfer'/><title type='text'>Extreme Testing</title><content type='html'>I'm sure many to most of you are familiar with the principles of extreme programming.  It can be quickly characterized by writing unit tests before coding and pair programming, but you can read more about it from &lt;a href="http://www.extremeprogramming.org/"&gt;this webpage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I was thinking on the way home today about possibly modifying &lt;a href="http://www.extremeprogramming.org/rules.html"&gt;the rules of engagement&lt;/a&gt; into something called Extreme Testing.  It would focus more on the relationship of the two people in the pair.  In particular, one of the two would be a QA engineer.  They would work closely together in the planning and designing phase - not much would change there.  During the coding phase, the two would spend half their time together in a modified pair programming mode; most likely the main developer would do most of the coding, and the QA person would be there making recommendations and understanding what's going on.  The other half of the time would be spent on their own: the developer doing his thing, and the QA person developing test plans, documenting the design, and creating process flows and timing analyses.  Then in the end there is a big celebration with much rejoicing.&lt;br /&gt;&lt;br /&gt;Why would one think of such a scheme?  What is the possible value of this to you?  A more effective method of &lt;strong&gt;knowledge transfer&lt;/strong&gt;.  Very loosely, here is how the software development process works today: the developer designs the component and hands you a design doc.  That developer then builds his component, and hands you (the QA person) a finished product to test.  Meanwhile, you must learn the intricacies of this component on your own, for the most part.  You have a design document, and checked it code to sift through to understand the inner magic.&lt;br /&gt;&lt;br /&gt;Being in QA, understanding the component better than the author is your quest.  You must know it so well that you can break it with your left pinky.  However, the process of transferring that understanding and knowledge is somewhat broken.  Here is the current process: developer's head --&gt; design document --&gt; QA's head.  Stuff is lost inbetween, I assure you.  Developers stereotypically dislike documenting their component, making the knowledge transfer process more difficult.  Seriously, I love a well-written design doc.  It's like crack-cocaine for me.  I would mainline a well-written design doc if I could only fit it on that little spoon.&lt;br /&gt;&lt;br /&gt;So what is the solution?  Well how about some extreme testing?  Working side by side with the developer while he's working, and documenting the component and processes involved are a better way in my opinion of guaranteeing that the knowledge is tranferred more effectively.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-7328889862538308220?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/7328889862538308220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=7328889862538308220' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7328889862538308220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/7328889862538308220'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/01/extreme-testing.html' title='Extreme Testing'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-8224494191137445060</id><published>2007-01-09T23:45:00.000-08:00</published><updated>2007-01-10T00:18:25.037-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book quality problem solving'/><title type='text'>Quality Problem Solving</title><content type='html'>All good engineers are at their roots good problems solvers.  Despite the fact that my degree is in computer science, I feel that I should have received a bachelor's in "Technical Problem Solving". This may be obvious to some of those reading this blog, but this point was definitely not emphasized going through school.  Until you're pretty deep into the program, you are led to believe that this education is in how to program, and nothing else.  I'll have to write later about the issues I have with computer science education before I digress any further, as this post is about a book.&lt;br /&gt;&lt;br /&gt;I've started a book that has turned out to be quite interesting.  The book is called &lt;a href="http://www.amazon.com/Quality-Problem-Solving-Gerald-Smith/dp/0873893948/"&gt;Quality Problem Solving&lt;/a&gt; by Gerald Smith.   Now before you laugh at the fact that I found this interesting, hear me out.   Being that I'm a member of the QA community, it is problems of quality that currently concern me.  I find the book to be very realistic in its view of quality and problem solving in general, without any hokey aphorism's or a-b-c methods of solving problems.  For instance, take this gem:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"The most common weakness in practical reasoning, as in problem solving, is incompleteness.  Poor outcomes result not so much from the mistakes we make as from the possibilities we overlook."&lt;/blockquote&gt;&lt;br /&gt;Gerald starts the book with a very sober view of the word "quality" and how it has been manipulated and had its meaning raided by corporate vandals, citing TQM and other quality fads frequently.  He rightly states that these movements had good principles and ideas behind them, and if used in the right context were very useful.  However many were applied to solve every problem known to man and beast, and hence, fell out of favor after failure in those contexts.&lt;br /&gt;&lt;br /&gt;He continues on to lay down a philosophical yet clear foundation for solving problems, discussing problem identification, problem definition, diagnosis, and alternative generation.  He discusses these topics in general terms, and provides good examples for each.&lt;br /&gt;&lt;br /&gt;The last part of the book applies the problem solving foundations to specific problems related to quality.  I can't evaluate that part of the book, as I have not yet read it, but it looks promising.  The TOC lists the topics of conformance, efficiency, product design, process design, and unstructured performance problems.&lt;br /&gt;&lt;br /&gt;Basically what I'm saying is this book is good, and I recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-8224494191137445060?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/8224494191137445060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=8224494191137445060' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8224494191137445060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8224494191137445060'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/01/quality-problem-solving.html' title='Quality Problem Solving'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-8372554187870052174</id><published>2007-01-06T23:58:00.000-08:00</published><updated>2007-01-08T01:47:50.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista videos michael howard'/><title type='text'>More learning materials</title><content type='html'>Continuing with the last past of highlighting good learning materials, I saw on Michael Howard's blog a post about &lt;a href="http://blogs.msdn.com/michael_howard/archive/2006/12/21/online-security-sessions-from-teched-it-forum-available.aspx"&gt;online security sessions from the Microsoft TechEd IT Forum&lt;/a&gt;. It looks like pretty awesome material. There are videos profiling &lt;a href="http://www.microsoft.com/emea/itsshowtime/sessionh.aspx?videoid=351"&gt;"real" hacking techniques live&lt;/a&gt;, &lt;a href="http://www.microsoft.com/emea/itsshowtime/sessionh.aspx?videoid=360"&gt;Vista UAC internals&lt;/a&gt;, and &lt;a href="http://www.microsoft.com/emea/itsshowtime/sessionh.aspx?videoid=340"&gt;Vista kernel changes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For anyone in QA that will be working on Vista, these look like good resources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-8372554187870052174?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/8372554187870052174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=8372554187870052174' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8372554187870052174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8372554187870052174'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/01/more-cowbelli-mean-learning-materials.html' title='More learning materials'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-9078325103510803034</id><published>2007-01-06T15:43:00.000-08:00</published><updated>2007-01-06T15:52:31.296-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google london test automation conference video'/><title type='text'>Google London Test Automation Conference Video's</title><content type='html'>I realize that this is old news (September 2006), but I wanted to remind people that there are some fantastic videos available through &lt;a href="http://video.google.com"&gt;Google Video&lt;/a&gt;.  Specifically, the &lt;a href="http://video.google.com/videosearch?q=london+test+automation+conference"&gt;London Test Automation Conference video's&lt;/a&gt; being hosted.  Some great stuff is covered if you have the time, including a &lt;a href="http://video.google.com/videoplay?docid=-594153467742593805"&gt;video on Selenium&lt;/a&gt; (a programmatic  cross-browser web GUI test tool), and &lt;a href="http://video.google.com/videoplay?docid=-4478242864801668108"&gt;distributed testing with SmartFrog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;These videos are highly recommended if you have the time and inclination.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-9078325103510803034?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/9078325103510803034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=9078325103510803034' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/9078325103510803034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/9078325103510803034'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/01/google-london-test-automation.html' title='Google London Test Automation Conference Video&apos;s'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-666560329197132027</id><published>2007-01-03T11:39:00.000-08:00</published><updated>2007-01-03T11:46:52.028-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='exploratory testing body eating'/><title type='text'>Exploratory Eating</title><content type='html'>My girlfriend and I sometimes perform these food experiments. For one month, we do or eat something differently just to see what happens. For instance, we were vegetarians for one month. This month of January, we're cutting all sweets and desserts out of our diet.&lt;br /&gt;&lt;br /&gt;I guess these are more like body experiments. The point is just to see what happens when we change our diet. You can call it "exploratory eating". Do we feel more energized? Healthier? More tired? Is there no change?&lt;br /&gt;&lt;br /&gt;The point I'm trying to make is that the testing mindset can (and should) be applied outside of software. Applying your skills in testing on your finances, health, and mental well-being could be a interesting (and possibly rewarding) experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-666560329197132027?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/666560329197132027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=666560329197132027' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/666560329197132027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/666560329197132027'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2007/01/exploratory-eating.html' title='Exploratory Eating'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-1557460395359042857</id><published>2006-12-31T00:38:00.000-08:00</published><updated>2006-12-31T00:52:55.413-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test automation architectures patterns'/><title type='text'>Test Automation Architectures</title><content type='html'>I recently received an email that held gold.  Well gold in the way of interesting reading material, but gold nonetheless.  It was a &lt;a href="http://www.testingeducation.org/course_notes/pettichord_bret/testautomationpatternspdf.zip"&gt;link to a PDF&lt;/a&gt; on "&lt;a href="http://www.testingeducation.org/coursenotes/pettichord_bret/cm_200207_testautomationpatterns/index.html"&gt;Test Automation Architectures&lt;/a&gt;" by &lt;a href="http://www.pettichord.com/"&gt;Bret Pettichord&lt;/a&gt;, and linked off of the famous &lt;a href="http://www.testingeducation.org/"&gt;CSTER website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The entire concept of testing and automation patterns is one that interests me, and I think is one that is ripe for some research and further investigation.  Patterns in software development are common now with the Gang of Four's famous book, &lt;a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/"&gt;Design Patterns&lt;/a&gt;.  But the development of niche patterns, in areas like testing and automation, are very interesting indeed.  I am aware that work in this field is being &lt;a href="http://www.testing.com/test-patterns/index.html"&gt;distributed and collected by testing.com&lt;/a&gt;, and I think their work is fantastic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-1557460395359042857?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/1557460395359042857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=1557460395359042857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/1557460395359042857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/1557460395359042857'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/test-automation-architectures.html' title='Test Automation Architectures'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-6867873910148475160</id><published>2006-12-24T16:17:00.000-08:00</published><updated>2006-12-25T11:12:09.053-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentation thinking ahead planning'/><title type='text'>The Absolute Need to Document</title><content type='html'>During my time in the field of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;QA&lt;/span&gt; and testing, I have learned to appreciate the need for documentation. As a student, it always seemed that commenting and documenting your code was a frivolous waste of time and energy. To be truthful, as a student, documentation &lt;em&gt;was&lt;/em&gt; a waste of time and energy. Nobody will see your code ever again after it's turned in. Nobody will be inheriting your code later on, and have to struggle to figure out what the hell you were doing with your code. Also, most of my projects simply weren't large enough to warrant thorough documentation.&lt;br /&gt;&lt;br /&gt;However, this lack of documenting creates bad habits that are passed on after one eventually graduates and enters the work force. The size and complexity of the programs one works on become much grander in scale, and yet the skill and desire for proper documentation is not present. This creates more problems than you can know, and has caused severe headaches and a lot of wasted time in my case.&lt;br /&gt;&lt;br /&gt;If an alpha-geek super programmer makes you an amazing program that does exactly what you want, is completely localized, and has very few defects, I'm happy for you. If he or she didn't document it, you're completely screwed. When the program in question needs to be updated, added to, patched, or modified in any way (which is almost a certainty), you are dependent on the original programmer to be able to remember how they implemented the program the first time (assuming that the original programmer still works for you), or you must have another programmer waste considerable amounts of time understanding how the program works. If, however, that original programmer effectively documented the program in a way that made knowledge transfer possible, you can have another programmer pick up the slack with much less ramp-up time.&lt;br /&gt;&lt;br /&gt;In this world where knowledge is king, there must be a way to transfer knowledge effectively, or it is essentially lost. Enforcing documentation is simply a smart way to protect your company assets. You cannot assume that the developers who know how something works will work for you eternally, and you must provide a way to communicate the internal workings of the program to others. Otherwise those that need to know how something works (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;QA&lt;/span&gt;, managers, other programmers) will waste the programmers time over and over again while they explain how their program works.&lt;br /&gt;&lt;br /&gt;In addition, I've found that documenting helps me to focus on what I'm working on, and flesh out implementation details that I'd put off in the back of my mind. By having it down on paper, it's like I have a map of exactly what I need to create and implement. Documenting is about looking ahead, thinking ahead, and spending time now to save it in the future. So the next time a programmer tells you he doesn't need to document his program, tell him to suck it up and do it anyway, because documenting isn't about him or her - it's about everyone else. Spending a couple hours now to document a program will save you and others hours and hours later on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-6867873910148475160?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/6867873910148475160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=6867873910148475160' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6867873910148475160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/6867873910148475160'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/absolute-need-to-document.html' title='The Absolute Need to Document'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-3182066242995233463</id><published>2006-12-22T11:25:00.000-08:00</published><updated>2006-12-25T11:12:41.261-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor quality'/><title type='text'>Despair.com takes on Testing</title><content type='html'>I couldn't help but laugh at this picture. All comedy has its roots in tragedy.&lt;br /&gt;&lt;center&gt;&lt;p&gt;&lt;br /&gt;&lt;img src="http://images.despair.com/products/demotivators/quality.jpg" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-3182066242995233463?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/3182066242995233463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=3182066242995233463' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/3182066242995233463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/3182066242995233463'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/despaircom-takes-on-testing.html' title='Despair.com takes on Testing'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-4883069950418413232</id><published>2006-12-22T10:47:00.000-08:00</published><updated>2006-12-25T11:13:30.526-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test case design'/><title type='text'>The Importance of Test Design</title><content type='html'>&lt;blockquote&gt;"More than the act of testing, the act of designing tests is one of the&lt;br /&gt;best bug preventers known. The thinking that must be done to create a useful test can discover and eliminate bugs before they are coded - indeed, test-design thinking can discover and eliminate bugs at every stage in the creation of software, from conception to specification, to design, coding and the rest."&lt;br /&gt;-Boris Beizer, Software Testing Techniques&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is so true it's almost painful. I've seen projects where thousands of tests are run, but they aren't the right tests, and hence defects are missed. Creating massive automation infrastructures and purhasing expensive commercial testing programs (or "solutions", as they like to be called), is really a worthless exercise in time and money if you're not designing intelligent tests.&lt;br /&gt;&lt;br /&gt;For example, lets say you have a function that takes in a string and returns the number of characters in that string. All the fancy test programs in the world aren't going to help you if your QA engineer doesn't test it with unicode characters, null strings, or strings with no null terminator.&lt;br /&gt;&lt;br /&gt;Test design is absolutely one of the more interesting and creative aspects of QA. The simple process of coming up with possibile ways that one can break a component is a creative process on its own, but also one that requires technical expertise. How can you know the many ways to break a product on a Windows platform if you don't have indepth technical knowledge of Windows? It's almost a philosophical question - how can you know the things you don't know? There is only one answer: keep learning and expand your knowledge boundaries.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-4883069950418413232?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/4883069950418413232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=4883069950418413232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4883069950418413232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/4883069950418413232'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/importance-of-test-design.html' title='The Importance of Test Design'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-1143798842761522993</id><published>2006-12-20T22:36:00.000-08:00</published><updated>2006-12-25T11:13:53.768-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automation problem solving'/><title type='text'>Defining Automation</title><content type='html'>I find the big problem with automation is that the word "automation" is generally used as some sort of all-encompassing silver bullet keyword. Cold feet? Try automation! Lost your sense of smell? Try automation! The very word seems to imply some sort of panacea for all your testing aches and pains.&lt;br /&gt;&lt;br /&gt;I've found that automation works best when it is solving specific problems, with a narrow scope and focus. A good problem or process to automate would be one where you want to build your program, copy it to a server, run some sanity tests against it, and then email you to tell you it's done. A bad problem to attempt to automate would be trying to run all unit, functional, and system tests on your build, across multiple operating systems, programming languages, and is extensible enough to withstand future changes in requirements. In my opinion, this type of program is too large in scope to be reliable. I'm sure there are people (or companies, rather) that have attempted and succeeded at such a project, but an automation project of that size needs its own &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;separate&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;QA&lt;/span&gt; team.&lt;br /&gt;&lt;br /&gt;What I'm trying to get at is when testing complex systems, don't use even more complex systems. Complexity will by nature introduce errors into the system. Keeping your testing systems simple will reduce the amount of errors within your test system. Obviously there is some loss of functionality, which is why I'm a fan of stringing together multiple simple systems in order to do more complex automation, when necessary. Modularity in automation is the key to success.&lt;br /&gt;&lt;br /&gt;Here are a few good blog posts on the subject that cover different ways to view the same problem:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/saraford/archive/2004/05/05/368833.aspx"&gt;Automation Testing versus Manual Testing Guidelines&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="TitleLinkStyle" href="http://www.teknologika.com/blog/TenetIfYouAreGoingToRunATestMoreThanOnceItShouldBeAutomated.aspx"&gt;Tenet: If you are going to run a test more than once, it should be automated.&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-1143798842761522993?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/1143798842761522993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=1143798842761522993' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/1143798842761522993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/1143798842761522993'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/defining-automation.html' title='Defining Automation'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-3100929608172735674</id><published>2006-12-17T17:32:00.000-08:00</published><updated>2006-12-25T11:14:16.229-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source chocolate'/><title type='text'>Open Source Chocolate Factory</title><content type='html'>I had a fantastic visit to the &lt;a href="http://www.scharffenberger.com/"&gt;Scharffen Berger&lt;/a&gt; chocolate factory in Berkeley today. They were quite generous with the samples, and even more interesting, they showed us the exact process they use to make their chocolate, recipes and all. They even let us take pictures of their equipment inside the factory. As the tour guide (Mandy) told us, "We're the only chocolate factory in the US or Europe that not only allows you inside the factory, but we let you take pictures". It's like an open source chocolate factory.&lt;br /&gt;&lt;br /&gt;Ok, not exactly. I can't start modifying their chocolate making process with my own beans and spices. But the transparency of their process and ingredients reminded me of open source software. The transparency builds trust with their clients, who are now more confident about exactly what they're eating. They are obviously confident that nobody will steal their processes, and for good reason. I may know now how they make chocolate, but investing the millions of dollars to copy them is not something I'm willing to spend the time and effort to do. As you can probably tell by now, I'm making parallels to software here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-3100929608172735674?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/3100929608172735674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=3100929608172735674' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/3100929608172735674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/3100929608172735674'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/open-source-chocolate-factory.html' title='Open Source Chocolate Factory'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-8253855193580994476</id><published>2006-12-15T20:32:00.000-08:00</published><updated>2006-12-25T11:12:59.202-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php static analysis tools'/><title type='text'>PHP Static Analysis Tools</title><content type='html'>I did some searching today for PHP static analysis tools, and came across some interesting ones.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.program-transformation.org/PHP/PhpFrontReleases"&gt;PHP-Front&lt;/a&gt;: Not yet even at v0.1 yet, but I await the release eagerly. You can download &lt;a href="http://nix.cs.uu.nl/dist/stratego/php-front-unstable-latest/"&gt;unstable releases&lt;/a&gt; if you want to test it out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.program-transformation.org/PHP/PhpSatReleases"&gt;PHP-SAT&lt;/a&gt;: Made by the same people (person?) as PHP-Front, and also not yet even at v0.1 yet. You can download &lt;a href="http://nix.cs.uu.nl/dist/stratego/php-sat-unstable-latest/"&gt;unstable releases&lt;/a&gt; if you want to test it out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://seclab.tuwien.ac.at/projects/pixy/"&gt;Pixy&lt;/a&gt;: This looks like an academic project, but at least they have something working! The analysis tool deals mainly with detecting &lt;a href="http://en.wikipedia.org/wiki/Xss"&gt;XSS&lt;/a&gt; vulnerabilities.&lt;br /&gt;&lt;br /&gt;Searching for PHP dynamic analysis tools did not turn out as fruitful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-8253855193580994476?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/8253855193580994476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=8253855193580994476' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8253855193580994476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/8253855193580994476'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/php-static-analysis-tools.html' title='PHP Static Analysis Tools'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-467967659215263463</id><published>2006-12-14T21:26:00.000-08:00</published><updated>2006-12-25T11:13:10.334-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mutation testing'/><title type='text'>Mutation Testing</title><content type='html'>When thinking of the phrase, "who polices the police?", I immediately think of testing. Indeed, who tests your tests? How does one even delve into the process of meta-testing, which seems to create an infinite loop of testing? Why would one think of such a thing?&lt;br /&gt;&lt;br /&gt;The fact is that some companies are very keen on simply having test cases pass, and don't consider whether or not those test cases were even worth executing. A coworker recently told me that on his last team, a test suite that was run on a computer that &lt;em&gt;didn't even have the software installed&lt;/em&gt; passed with an impressive rate. Why? Because they were being measured on how many test cases passed, not whether they were good test cases. As stated by Dr. Adam Kolawa,&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;"In general, there is no easy way to tell if the test suite thoroughly tests the program or not. If the program passes the test suite, one may only say that program works correctly on all the cases that are included in the test suite. The more cases a test suite contains, the higher the probability that the program will work correctly in the real world."&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Outside of fixing the reviewing process in such a company, which is absolutely a solid way to help alleviate this problem, there is a method of testing known as Mutation Testing that I'd like to discuss. Lets assume that you have a perfect test suite, and the perfect program. All test cases that can be run, are run correctly. If you change the code of the program (creating a mutant), and run the test suite against it, the suite should detect some kind of error. If the suite fails to detect the change in the code, you have another test case to create :).&lt;/p&gt;&lt;p&gt;Obviously there have to be some kind of bounds on this. First, selecting what code to change has to be the intuitive and creative task that abounds in engineers involved in testing. Changing a variable name is not inherently an interesting piece of code to change if the change is global. Changing the database calls is an interesting test case. Second, you must limit how much mutation testing you do. There is no end to the number of different mutants you create, and with a smart enough engine, I'm sure you could semi-automate this task. However, mutation testing is merely one of many types of testing one should focus on, and should not be the main focus.&lt;/p&gt;&lt;p&gt;You can read &lt;a href="http://www.stickyminds.com/sitewide.asp?Function=edetail&amp;ObjectType=ART&amp;amp;ObjectId=2011"&gt;Dr. Adam Kolawa's paper on Mutation Testing&lt;/a&gt; on &lt;a href="http://www.stickyminds.com/"&gt;StickyMinds&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-467967659215263463?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/467967659215263463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=467967659215263463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/467967659215263463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/467967659215263463'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/mutation-testing.html' title='Mutation Testing'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-593097011401765247.post-9216523395428180685</id><published>2006-12-13T23:49:00.000-08:00</published><updated>2006-12-14T00:12:00.302-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beta quality testing'/><title type='text'>The New Outsourcing of Testing</title><content type='html'>Most programmers I know that get excited about a new idea are really only interested in creating prototypes.  The creation of the initial 60-70% of the program is exciting and fun, especially if there are new languages and technologies to learn, but finishing or even *gasp* testing the program are not within their world-view of fun and exciting.  This in itself isn't a problem - I am also guilty of such facts when I have a new idea in my head. &lt;br /&gt;&lt;br /&gt;However, that doesn't excuse the person or company for releasing that prototype out to the public as a "Beta".  Yes, the new outsourcing of testing I'm referring to is the shift of the testing duties from in-house engineers to the external users.  By labelling the product or site as a "Beta", the company can reduce their own testing effort and force the burden on their users.  When users do have problems, the company can say with confidence, "Well no wonder, it's a beta!". &lt;br /&gt;&lt;br /&gt;Unfortunately, the psyche of the Beta user has decided to go along with this plan.  When using a Beta, the user feels like an early adopter, and is less likely to feel angered when the system crashes and causes their hard drive to catch fire.  I mean, it's a beta, right?&lt;br /&gt;&lt;br /&gt;Lets face it, creating quality products is a difficult task, but that's no reason to get lazy.  Beta used to mean, "it's basically done, but we want feedback on the feature sets and usability".  To be fair, some companies still operate this way.  Most of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;startups&lt;/span&gt; I know in the bay area do not operate this way.  They are in line with the "release early, release often" mantra of such greats as &lt;a href="http://www.paulgraham.com/"&gt;Paul &lt;/a&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;&lt;a href="http://www.paulgraham.com/"&gt;Graham&lt;/a&gt; a&lt;/span&gt;nd &lt;a href="http://radar.oreilly.com/"&gt;Tim &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)"&gt;O'Reilly&lt;/span&gt;&lt;/a&gt;, however for them, release early means release crap and see what happens.&lt;br /&gt;&lt;br /&gt;With the many high-profile security problems plaguing businesses across the world over the past 5-10 years, security has become a big deal in the computing industry.  I'd like to see the same push with Quality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/593097011401765247-9216523395428180685?l=searchforquality.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://searchforquality.blogspot.com/feeds/9216523395428180685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=593097011401765247&amp;postID=9216523395428180685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/9216523395428180685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/593097011401765247/posts/default/9216523395428180685'/><link rel='alternate' type='text/html' href='http://searchforquality.blogspot.com/2006/12/new-outsourcing-of-testing.html' title='The New Outsourcing of Testing'/><author><name>SearchForQuality</name><uri>http://www.blogger.com/profile/18380468388119935237</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
