<div dir="ltr"><div>I&#39;ll skip straight to the conclusions in the paper:</div><div><br></div><div>&gt; • Keep regression tests around for up to a year — but most of</div><div>those will be system-level tests rather than unit tests.</div>

<div><br></div><div>I would say most of our tests qualify as regression tests, and they are system-level (they start a full cache manager, with a JGroups channel and everything).</div><div>But how would we know that they haven&#39;t failed in a year? I mean we can find which tests never failed in CI, but we can&#39;t find which tests never failed on any dev&#39;s machine (thus helping that dev find a problem in his code).</div>

<div><div><br></div></div><div>&gt; • Keep unit tests that test key algorithms for which there is a</div><div>broad, formal, independent oracle of correctness, and for</div><div>which there is ascribable business value.</div>

<div>&gt; • Except for the preceding case, if X has business value and you</div><div>can text X with either a system test or a unit test, use a system</div><div>test — context is everything.</div><div><br></div><div><div>

We have about 100 tests in the &quot;unit&quot; group, some of which should really be in the &quot;functional&quot; group (e.g. BaseStoreTest).</div><div>It shouldn&#39;t take long to walk over those and delete some that may be tested better by system tests, but it won&#39;t have a visible effect on the test suite run time either.</div>

</div><div><br></div><div>&gt; • Design a test with more care than you design the code.<br></div><div><br></div><div>I admit that when reviewing PRs I pay less attention to the tests than to the production code. I will try to change that :)</div>

<div><br></div><div>&gt; • Turn most unit tests into assertions.</div><div><br></div><div>I imagine some kinds of tests can indeed be replaced with assertions in production code, but again we don&#39;t have so many unit tests.</div>

<div><br></div><div>&gt; • Throw away tests that haven’t failed in a year.</div><div>&gt; • Testing can’t replace good development: a high test failure<br></div><div>rate suggests you should shorten development intervals,</div>

<div>perhaps radically, and make sure your architecture and design</div><div>regimens have teeth</div><div>&gt; • If you find that individual functions being tested are trivial,</div><div>double-check the way you incentivize developers’</div>

<div>performance. Rewarding coverage or other meaningless</div><div>metrics can lead to rapid architecture decay.</div><div>&gt; • Be humble about what tests can achieve. Tests don’t improve</div><div>quality: developers do.</div>

<div><br></div><div><div style="color:rgb(21,21,21);font-family:Menlo,&#39;Bitstream Vera Sans Mono&#39;,&#39;Ubuntu Mono&#39;,&#39;Courier New&#39;,Courier,monospace;font-size:12px;line-height:16.799999237060547px">
<div style="white-space:pre-wrap;color:rgb(63,63,63)"><span><br></span></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jun 10, 2014 at 6:23 PM, Galder Zamarreño <span dir="ltr">&lt;<a href="mailto:galder@redhat.com" target="_blank">galder@redhat.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Just recently I read this: <a href="http://www.rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf" target="_blank">http://www.rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf</a><br>


<br>
Food for thought, and maybe we should consider doing for next major. Maybe if we’re moving to JUnit we could look at this in detail too?<br>
<br>
Cheers,<br>
<div><div class="h5"><br>
On 09 Jun 2014, at 23:06, Sanne Grinovero &lt;<a href="mailto:sanne@infinispan.org">sanne@infinispan.org</a>&gt; wrote:<br>
<br>
&gt; On 9 June 2014 14:42, Dan Berindei &lt;<a href="mailto:dan.berindei@gmail.com">dan.berindei@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Mon, Jun 9, 2014 at 12:43 PM, Sanne Grinovero &lt;<a href="mailto:sanne@infinispan.org">sanne@infinispan.org</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi Dan!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The reason is that I&#39;m making substantial API changes in the Query<br>
&gt;&gt;&gt; module, and I&#39;ve lost count on how many other modules and integration<br>
&gt;&gt;&gt; tests depend on it: I need to run all the testsuite to evaluate where<br>
&gt;&gt;&gt; I&#39;m heading.. I don&#39;t need it just as last touches but continually, to<br>
&gt;&gt;&gt; be able to make good choices while work is in progress.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Wouldn&#39;t &quot;mvn install -DskipTests&quot; be enough for testing dependencies?<br>
&gt;&gt; You could then use &quot;mvn surefire:test -pl query,lucene-directory&quot; to run<br>
&gt;&gt; just the tests you&#39;re interested in.<br>
&gt;&gt; I have a script that does just that - even for core, I don&#39;t want to think<br>
&gt;&gt; about whether I changed something in commons or not, but I almost never want<br>
&gt;&gt; to run the commons tests :)<br>
&gt;<br>
&gt; I need to run all modules, and AFAIK there is no way to run the tests<br>
&gt; on all modules except one (unless you list all of them explicitly..<br>
&gt; good luck with that).<br>
&gt;<br>
&gt; What I did to go ahead in this ball of mud is to patch the core<br>
&gt; pom.xml to add &quot;skipTests&quot; option to the surefire configuration, at<br>
&gt; least I could test my stuff.<br>
&gt;<br>
&gt;<br>
&gt;&gt;&gt; Not only I&#39;m changing API but also substantial changes in the<br>
&gt;&gt;&gt; dependency tree.. without a working testsuite I can&#39;t make progress.<br>
&gt;&gt;&gt; I&#39;m working around it by deleting core in a temporary commit... :-/<br>
&gt;&gt;&gt; (and even so the suite takes more than an hour ??!)<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 1 hour just for the core, or for everything? I used to get about 1h for<br>
&gt;&gt; everything, if just the core takes that long to fail it&#39;s definitely a<br>
&gt;&gt; problem. There was also a bit of a slowdown after the JGroups 3.5.0.Beta7<br>
&gt;&gt; upgrade (ISPN-4355), but that should be fixed now.<br>
&gt;<br>
&gt; It&#39;s 1h and 20 minutes now to test all modules. This took 12 minutes a<br>
&gt; couple of months ago. My opinion is that even 12 minutes is too slow,<br>
&gt; I would consider it acceptable if we where running some soak tests but<br>
&gt; as far as I know we&#39;re just load testing the testing framework.<br>
&gt;<br>
&gt; Sanne<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; I was also thinking of moving the failsafe plugin to the &quot;extras&quot; profile,<br>
&gt;&gt; so that we can avoid running the server integration tests in dev builds. But<br>
&gt;&gt; disabling the extras profile also disables the bundling for OSGi, so perhaps<br>
&gt;&gt; a separate profile would be better.<br>
&gt;&gt;<br>
&gt;&gt; Dan<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I&#39;ll test your PRs ASAP, thanks a lot.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Cheers,<br>
&gt;&gt;&gt; Sanne<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 9 June 2014 10:19, Dan Berindei &lt;<a href="mailto:dan.berindei@gmail.com">dan.berindei@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Fri, Jun 6, 2014 at 4:31 PM, Sanne Grinovero &lt;<a href="mailto:sanne@infinispan.org">sanne@infinispan.org</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I&#39;m having several failures, these are blocking our progress on Query.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Should I disable them all?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; You could disable them, but I&#39;m not quite sure how that would help the<br>
&gt;&gt;&gt;&gt; query<br>
&gt;&gt;&gt;&gt; module... surely you don&#39;t need to run the core tests every time you<br>
&gt;&gt;&gt;&gt; modify<br>
&gt;&gt;&gt;&gt; something in query?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Sample output of three different runs:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Failed tests:<br>
&gt;&gt;&gt;&gt;&gt;  ThreadLocalLeakTest.testCheckThreadLocalLeaks:87 IllegalState Thread<br>
&gt;&gt;&gt;&gt;&gt; locals st...<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I couldn&#39;t reproduce this failure on my machine, but I modified<br>
&gt;&gt;&gt;&gt; ThreadLocalLeakTest to ignore that particular thread-local:<br>
&gt;&gt;&gt;&gt; <a href="https://github.com/infinispan/infinispan/pull/2614" target="_blank">https://github.com/infinispan/infinispan/pull/2614</a><br>
&gt;&gt;&gt;&gt; You&#39;re the only one that reported seeing it, so please test the PR on<br>
&gt;&gt;&gt;&gt; your<br>
&gt;&gt;&gt;&gt; machine and integrate it.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; StateTransferOverwriteTest&gt;BaseTxStateTransferOverwriteTest.testStateTransferInBetweenPrepareCommitWithPutIfAbsent:104-&gt;BaseTxStateTransferOverwriteTest.doStateTransferInBetweenPrepareCommit:265<br>


&gt;&gt;&gt;&gt;&gt; » Runtime<br>
&gt;&gt;&gt;&gt;&gt; Tests run: 5430, Failures: 2, Errors: 0, Skipped: 0<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I&#39;ve created <a href="https://issues.jboss.org/browse/ISPN-4368" target="_blank">https://issues.jboss.org/browse/ISPN-4368</a> for Will to look<br>
&gt;&gt;&gt;&gt; into, I&#39;m not sure we need the &quot;placeholder&quot; key that is causing the<br>
&gt;&gt;&gt;&gt; random<br>
&gt;&gt;&gt;&gt; failures.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Failed tests:<br>
&gt;&gt;&gt;&gt;&gt;  ThreadLocalLeakTest.testCheckThreadLocalLeaks:87 IllegalState Thread<br>
&gt;&gt;&gt;&gt;&gt; locals st...<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; StateTransferOverwriteTest&gt;BaseTxStateTransferOverwriteTest.testStateTransferInBetweenPrepareCommitWithPutIfAbsent:104-&gt;BaseTxStateTransferOverwriteTest.doStateTransferInBetweenPrepareCommit:265<br>


&gt;&gt;&gt;&gt;&gt; » Runtime<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; L1StateTransferOverwriteTest&gt;BaseTxStateTransferOverwriteTest.testStateTransferInBetweenPrepareCommitWithPut:84-&gt;BaseTxStateTransferOverwriteTest.doStateTransferInBetweenPrepareCommit:265<br>
&gt;&gt;&gt;&gt;&gt; » Runtime<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; The L1StateTransferOverwriteTest failure seems to have the same cause as<br>
&gt;&gt;&gt;&gt; StateTransferOverwriteTest failure.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Tests run: 5430, Failures: 3, Errors: 0, Skipped: 0<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Failed tests:<br>
&gt;&gt;&gt;&gt;&gt;  ThreadLocalLeakTest.testCheckThreadLocalLeaks:87 IllegalState Thread<br>
&gt;&gt;&gt;&gt;&gt; locals st...<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; CacheNotifierImplInitialTransferDistTest.testCreateAfterIterationBeganAndSegmentNotCompleteValueOwnerClustered:611-&gt;testIterationBeganAndSegmentNotComplete:510<br>
&gt;&gt;&gt;&gt;&gt; expected [11] but found [6]<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I&#39;ve seen this a couple times on my machine as well, I&#39;ve created<br>
&gt;&gt;&gt;&gt; <a href="https://issues.jboss.org/browse/ISPN-4370" target="_blank">https://issues.jboss.org/browse/ISPN-4370</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Tests run: 5430, Failures: 2, Errors: 0, Skipped: 0<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I&#39;d let Will investigate ISPN-4368 and ISPN-4370 for a bit before<br>
&gt;&gt;&gt;&gt; disabling<br>
&gt;&gt;&gt;&gt; those tests - he may be able to issue a PR for them quite quickly.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Still, just because I don&#39;t like disabling tests it doesn&#39;t mean I don&#39;t<br>
&gt;&gt;&gt;&gt; appreciate your stability reports - keep &#39;em coming!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Cheers<br>
&gt;&gt;&gt;&gt; Dan<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; infinispan-dev mailing list<br>
&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
<br>
<br>
</div></div>--<br>
Galder Zamarreño<br>
<a href="mailto:galder@redhat.com">galder@redhat.com</a><br>
<a href="http://twitter.com/galderz" target="_blank">twitter.com/galderz</a><br>
<div class="HOEnZb"><div class="h5"><br>
<br>
_______________________________________________<br>
infinispan-dev mailing list<br>
<a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
</div></div></blockquote></div><br></div>