<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thinking Software Inc. Blog</title>
	<atom:link href="http://thinkingsoftware.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://thinkingsoftware.com/blog</link>
	<description>Software Understanding Machine® (SUM) opens Black Boxes of code</description>
	<lastBuildDate>Tue, 17 Apr 2012 17:46:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Race Conditions &#8211; silent and intermittent conditions of unpredictable results</title>
		<link>http://thinkingsoftware.com/blog/?p=170</link>
		<comments>http://thinkingsoftware.com/blog/?p=170#comments</comments>
		<pubDate>Wed, 06 Jul 2011 04:46:09 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thinking Software Posts]]></category>

		<guid isPermaLink="false">http://thinkingsoftware.com/blog/?p=170</guid>
		<description><![CDATA[Programs with Race Conditions Can Not be trusted]]></description>
			<content:encoded><![CDATA[<p><a href="http://thinkingsoftware.com/video2.mp4">Programs with Race Conditions Can Not be trusted</a></p>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=170</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://thinkingsoftware.com/video2.mp4" length="5192065" type="video/mp4" />
		</item>
		<item>
		<title>Five Years Since &#8216;Free Lunches&#8217;: Making Use of Multicore Parallelism</title>
		<link>http://thinkingsoftware.com/blog/?p=159</link>
		<comments>http://thinkingsoftware.com/blog/?p=159#comments</comments>
		<pubDate>Wed, 06 Jul 2011 04:08:36 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thinking Software Posts]]></category>

		<guid isPermaLink="false">http://thinkingsoftware.com/blog/?p=159</guid>
		<description><![CDATA["Ship is still turning"
"I always wanted time machines"]]></description>
			<content:encoded><![CDATA[<h1>Five Years Since &#8216;Free Lunches&#8217;: Making Use of Multicore Parallelism</h1>
<p><a title="Five Years Since Free Lunches" href="http://drdobbs.com/high-performance-computing/225402247">http://drdobbs.com/high-performance-computing/225402247</a></p>
<p><strong>&#8220;Ship is still turning&#8221;</strong></p>
<p><strong>&#8220;I always wanted time machines&#8221;</strong></p>
<p>By James Reinders, June 08, 2010</p>
<div><a href="http://howsoftwareisbuilt.com/about-james-reinders-chief-evangelist-software-products-division-intel/">About James Reinders – Chief Evangelist – Software Products Division – Intel</a></div>
<p>James Reinders is Chief Evangelist and Director of Marketing for  Intel’s Software Development Products.  Reinders is a senior engineer  who joined Intel Corporation in 1989 and has contributed to projects  including the world’s first TeraFLOP supercomputer (ASCI Red), compilers  and architecture work for a number of Intel processors and parallel  systems. Reinders is the author of a new book “Intel Threading Building  Blocks” from O’Reilly Media, monthly columnist for the “The Gauntlet”  found online at <a href="http://go-parallel.com/">go-parallel.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=159</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Fundamental Turn Toward Concurrency in Software</title>
		<link>http://thinkingsoftware.com/blog/?p=153</link>
		<comments>http://thinkingsoftware.com/blog/?p=153#comments</comments>
		<pubDate>Wed, 06 Jul 2011 03:47:54 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thinking Software Posts]]></category>

		<guid isPermaLink="false">http://thinkingsoftware.com/blog/?p=153</guid>
		<description><![CDATA[The Free Lunch Is Over A Fundamental Turn Toward Concurrency in Software http://www.gotw.ca/publications/concurrency-ddj.htm By Herb Sutter http://en.wikipedia.org/wiki/Herb_Sutter]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: Arial,Arial,Helvetica;"> </span></p>
<h2><span style="font-family: Verdana,Arial,Helvetica; color: #006666;">The Free Lunch Is Over<br />
A Fundamental Turn Toward Concurrency in Software</span></h2>
<p><a href="http://www.gotw.ca/publications/concurrency-ddj.htm">http://www.gotw.ca/publications/concurrency-ddj.htm</a></p>
<p><strong><span style="color: #008080;">By Herb Sutter</span></strong></p>
<p><a href="http://en.wikipedia.org/wiki/Herb_Sutter">http://en.wikipedia.org/wiki/Herb_Sutter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=153</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Race Condition – Condition for a race</title>
		<link>http://thinkingsoftware.com/blog/?p=133</link>
		<comments>http://thinkingsoftware.com/blog/?p=133#comments</comments>
		<pubDate>Sun, 26 Dec 2010 04:46:35 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Data Race and Atomic Operations - why they can coexist.]]></category>

		<guid isPermaLink="false">http://thinkingsoftware.com/blog/?p=133</guid>
		<description><![CDATA[It is important to have a clear understanding of a Race Condition (Data Race). Sometimes people make a mistake by believing that atomic variables make accesses to these variable data race free.  For example, in case of a shared between threads AtomicBoolean variable one may assume that all accesses to this variable are data race [...]]]></description>
			<content:encoded><![CDATA[<p>It is important to have a clear understanding of a <strong>Race Condition</strong> (<strong>Data Race</strong>).</p>
<p>Sometimes people make a mistake by believing that atomic variables make accesses to these variable data race free.  For example, in case of a shared between threads AtomicBoolean variable one may assume that all accesses to this variable are data race free.</p>
<p>This misconception is a result of mixing two different understandings &#8211; of <strong>data race</strong> and of <strong>atomicity</strong>.   An atomicity insures uninterrupted by some other thread sequence of  operations on the data in scope of the atomic block of code or atomic variable update.</p>
<p>Alternatively, Data Race is a race on the subject of which thread will access a shared data first.  That is, of course, in case when at least one of these threads is modifying the shared data.  Data Race is about uncertainty on the order of accesses.</p>
<p>For example, an operation <strong>U</strong> implementing a database update on a value in a table is always implemented as an atomic operation.  Some operation<strong> R</strong> &#8211; reading the data would not be permitted on the same key while <strong>U</strong> is in progress.</p>
<p>However if we now have two different methods, <strong>M1 </strong>and <strong>M2 </strong>in two different threads &#8211; one calling the method <strong>U </strong>and another calling the method <strong>R</strong> on the same database key, while these two methods, <strong>M1 </strong>and <strong>M2, </strong>are not themselves synchronized, we will have the <strong>condition of uncertainty</strong> &#8211; a <strong>Data Race</strong>.  We would not know, are we going to read the data before it has been updated or after that.</p>
<p>By the same token, reading and writing a AtomicBoolean value by two or more different methods being executed from different threads at the same time in un-synchronized manner is a Race Condition.  We would not know with any certainty, are we reading after the write or before the write.</p>
<p>The atomic nature of the variable does not take away the condition for a race on its access.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=133</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Race conditions &#8211; what if &#8220;benign&#8221; becomes &#8220;malignant&#8221;?  SUM4Java approach.</title>
		<link>http://thinkingsoftware.com/blog/?p=110</link>
		<comments>http://thinkingsoftware.com/blog/?p=110#comments</comments>
		<pubDate>Thu, 23 Dec 2010 07:53:30 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thinking Software Posts]]></category>

		<guid isPermaLink="false">http://thinkingsoftware.com/blog/?p=110</guid>
		<description><![CDATA[If you &#8220;google&#8221; on &#8220;benign data races&#8221; you will find all kind of research papers on what are &#8220;benign&#8221; and what are &#8220;harmful&#8221; races and what different approaches are tried in order to get closer to the truth while getting less &#8220;false positives&#8221;. You would run into the following classification of data races commonly used: [...]]]></description>
			<content:encoded><![CDATA[<p>If you &#8220;google&#8221; on &#8220;benign data races&#8221; you will find all kind of research papers on what are &#8220;benign&#8221; and what are &#8220;harmful&#8221; races and what different approaches are tried in order to get closer to the truth while getting less &#8220;false positives&#8221;.</p>
<p>You would run into the following classification of data races commonly used:</p>
<p style="padding-left: 30px;">- Harmful race conditions<br />
- Benign race condition<br />
- False Positive race conditions identifications</p>
<p>As far as definition of &#8220;harmful&#8221; vs. &#8220;benign&#8221; data races &#8211; we believe that the term &#8220;benign&#8221; is not really appropriate.  What is “benign” today may become very “malignant” tomorrow.  By the same token, we believe that the classification of a tool based on how many “harmful” races it finds vs. how many “benign” races it finds we believe to be not the best approach, as well.  We think it should be instead based on how many “real” races it finds vs. how many “false positive race conditions” it finds.</p>
<p>We would rather see the term &#8220;allowed data race&#8221;, which signifies a data race that was designed to be there, for example in order to generate a random number.  Computing is really an exact science, mostly about 0-s and 1-s &#8211; not so much &#8220;maybe&#8217;s&#8221;.  We believe that race is a race and not-a-race is not a race.  If a race is designed to be allowed, it would probably be more appropriate to call it &#8220;allowed data race&#8221; but not &#8220;benign&#8221;.  The one that is called &#8220;benign&#8221; is most probably called such because it does not change results in any significant way or the change in results is not significantly important.  But what happens when a new addition to a code is built assuming that the code it is based on is deterministic and contains no behavioral uncertainty?  The &#8220;data race&#8221; that was previously ignored as &#8220;benign&#8221; now may cause serious unpredictability in the result and may become “malignant”.</p>
<p>SUM4Java approach is in identifying all experienced &#8220;real data races&#8221; while never falling for &#8220;false positives&#8221; providing 0% false-positive analysis.  It is as simple as 1 is not 0 and 0 is not 1 &#8211; black and white &#8211; no gray.  If a user chooses to classify a race as &#8220;allowed data race&#8221; it is a user’s choice &#8211; only user will know that the race was designed to be there.  Then the classification becomes much simpler:</p>
<ul>
<li>race condition</li>
<li>allowed race condition</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=110</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About</title>
		<link>http://thinkingsoftware.com/blog/?p=97</link>
		<comments>http://thinkingsoftware.com/blog/?p=97#comments</comments>
		<pubDate>Wed, 15 Dec 2010 05:00:58 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thinking Software Posts]]></category>

		<guid isPermaLink="false">http://thinkingsoftware.com/blog/?p=97</guid>
		<description><![CDATA[Thinking Software, Inc. is in the business of making your software &#8220;think&#8221; &#8211; &#8220;think&#8221; of what it is doing when it is doing it. Software Understanding Machine ® (SUM) is a very sophisticated Dynamic Code Analyzer SUM4  Java is the first release of SUM &#8211; a dynamic analyzer of Java applications completely automatically analyzing all [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Thinking Software, Inc. is in the business of making your software &#8220;think&#8221; </strong><br />
<strong> &#8211; &#8220;think&#8221; of what it is doing when it is doing it.</strong></p>
<p>Software Understanding Machine ® (SUM) is a very sophisticated Dynamic Code Analyzer</p>
<p>SUM4  Java is the first release of SUM &#8211; a dynamic analyzer of Java applications completely automatically analyzing all the experienced Race Conditions with 0% False Positives rate.</p>
<p>The distinctive attributes of SUM4JTA are:</p>
<ul>
<li>Its relatively very low overhead</li>
<li>Its 0% False Positive analysis rate</li>
<li>Its original dynamic User Interface allowing to a non-programmer a level of understanding of computer programs</li>
<li>Its ability to work directly on the byte code submitted to a JVM for execution, making this tool a true addition to the Java Virtual Machine.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=97</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>0% False Positive Guarantee</title>
		<link>http://thinkingsoftware.com/blog/?p=73</link>
		<comments>http://thinkingsoftware.com/blog/?p=73#comments</comments>
		<pubDate>Tue, 14 Dec 2010 05:46:52 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thinking Software Posts]]></category>

		<guid isPermaLink="false">http://thinkingsoftware.com/blog/?p=73</guid>
		<description><![CDATA[Since we went a long way to design a tool that should not create any false positive results, we offer to you the following  guarantee. If after purchasing a license for SUM4JTA you run into a Race Condition diagnosis that you consider to be a &#8220;False Positive&#8221;, while also sending us the test case proving [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="font-family: Arial; font-size: medium;">Since we went a long way to design a tool that should not create any false positive results, we offer to you the following  guarantee.</span></strong></p>
<p><span style="font-family: Arial; font-size: medium;">If after purchasing a license for SUM4JTA you run into a Race Condition diagnosis that you consider to be a </span><span style="font-family: Arial; font-size: medium;">&#8220;False Positive&#8221;, while also sending us the test case proving your finding (this can be easily done via controlled by you built-in Email Notification mechanism), Thinking Software Inc. will not only provide you with a new version, addressing your issue, but will also extend your license for an additional month </span><span style="font-family: Arial; font-size: medium;">for free</span><span style="font-family: Arial; font-size: medium;">.</span></p>
<p><span style="font-family: Arial; font-size: x-small;"><br />
</span></p>
<p><span style="font-family: Arial; font-size: x-small;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=73</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open the Black Box of the Open Source</title>
		<link>http://thinkingsoftware.com/blog/?p=67</link>
		<comments>http://thinkingsoftware.com/blog/?p=67#comments</comments>
		<pubDate>Tue, 14 Dec 2010 05:27:00 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thinking Software Posts]]></category>

		<guid isPermaLink="false">http://thinkingsoftware.com/blog/?p=67</guid>
		<description><![CDATA[If you are in computer software field you have something to say about programs. Programs run our lives. If we create them we own them for a while and then let them out to the world, like our children. Like our children, they may grow to appreciate their creators, or they may not. We may [...]]]></description>
			<content:encoded><![CDATA[<p><strong>If you are in computer software field you have something to say about  programs.</strong></p>
<p>Programs run our lives.  If we create them we own them for a while  and then let them out to the world, like our children.   Like  our  children, they may grow to appreciate their creators, or they may not.   We may have to support them or they may learn to support  themselves.  The great thing about programs we create &#8211; they give us  back as much as we invest in them.   And you can always trust them as  you trust yourself.  It is you after all who taught your programs what  they know.</p>
<p>Open Source however is another animal, all together.  You never know where it has been.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=67</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Many Bugs are still there? Why Program Understanding?</title>
		<link>http://thinkingsoftware.com/blog/?p=53</link>
		<comments>http://thinkingsoftware.com/blog/?p=53#comments</comments>
		<pubDate>Tue, 14 Sep 2010 00:43:20 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thinking Software Posts]]></category>

		<guid isPermaLink="false">http://tsi.exoverse.com/blog/?p=53</guid>
		<description><![CDATA[Here is the question no one can answer: &#8220;How many bugs are still there?&#8221; We can not prove program correctness for any non-trivial program. If a program is automatically created from specifications, some one still has to write the specification and the cognitive, manually created bugs will then be there. Thinking Software, Inc. approach is [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the question no one can answer:  &#8220;How many bugs are still there?&#8221;</p>
<p>We can not prove program correctness for any non-trivial program.  If a program is automatically created from specifications, some one still has to write the specification and the cognitive, manually created bugs will then be there.</p>
<p>Thinking Software, Inc. approach is in constant program understanding while the program runs.  We do not call it testing.  We call it Program Understanding.  Testing tells you that a bug is found.  Program Understanding tells you how program works even if no bug is found so far.  And when a bug is found it will tell you all about the bug.  Then you will know what needs to be changed.</p>
<p>What if a specification is changed.   Testing would not help you there.   But program understanding will.  And it will tell you what needs to be changed in your program.</p>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=53</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>“black box” vs. “not so black box” tester</title>
		<link>http://thinkingsoftware.com/blog/?p=34</link>
		<comments>http://thinkingsoftware.com/blog/?p=34#comments</comments>
		<pubDate>Sun, 29 Aug 2010 01:40:49 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Why be "blind" when you can "see".]]></category>

		<guid isPermaLink="false">http://tsi.exoverse.com/blog/?p=34</guid>
		<description><![CDATA[Why not to open your &#8220;black box&#8221;? It is easy. Install &#8220;sum4jta&#8221;. Then use &#8220;jta&#8221; instead of &#8220;java&#8221; on your command line. Why be a blind &#8220;black box tester&#8221; when you can see the code you are testing? Why provide just the symptoms-like bug report when you can add to it the results of already [...]]]></description>
			<content:encoded><![CDATA[<p>Why not to open your &#8220;black box&#8221;?</p>
<p>It is easy.  Install &#8220;sum4jta&#8221;.  Then use &#8220;jta&#8221; instead of &#8220;java&#8221; on your command line.</p>
<ul>
<li>Why be a blind &#8220;black box tester&#8221; when you can see the code you are testing?</li>
</ul>
<ul>
<li>Why provide just the symptoms-like bug report when you can add to it the results of already performed analysis &#8211; no requirement for reproducing bug conditions &#8211; the code is already analyzed.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://thinkingsoftware.com/blog/?feed=rss2&amp;p=34</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

