<ul>
<li>What types of applications have you used <a href="http://en.wikipedia.org/wiki/Model_checking" rel="noreferrer">model checking</a> for?</li>
<li>What model checking tool did you use?</li>
<li>How would you summarize your experience w/ the technique, specifically in evaluating its effectiveness in delivering higher quality software? </li>
</ul>

<p>In the course of my studies, I had a chance to use <a href="http://spinroot.com/spin/whatispin.html" rel="noreferrer">Spin</a>, and it aroused my curiosity as to how much actual model checking is going on and how much value are organizations getting out of it. In my work experience, I've worked on business applications, where there is (naturally) no consideration of applying formal verification to the logic. I'd really like to learn about SO folks model checking experience and thoughts on the subject. Will model checking ever become a more widely used developing practice that we should have in our toolkit?</p>

[{'answer_id': 25255, 'author': 'Chris Bunch', 'author_id': 422, 'author_profile': 'https://Stackoverflow.com/users/422', 'pm_score': 3, 'selected': True, 'text': '<p>I just finished a class on model checking and the big tools we used were <a href="http://spinroot.com/spin/whatispin.html" rel="nofollow noreferrer">Spin</a> and <a href="http://www.cs.cmu.edu/~modelcheck/smv.html" rel="nofollow noreferrer">SMV</a>. We ended up using them to check properties on common synchronization problems, and I found SMV just a little bit easier to use.</p>\n\n<p>Although these tools were fun to use, I think they really shine when you combine them with something that dynamically enforces constraints on your program (so that it\'s a bit easier to verify \'useful\' things about your program). We ended up taking the <a href="http://www.springframework.org/webflow" rel="nofollow noreferrer">Spring WebFlow framework</a>, which uses XML to write a state-machine like file that specifies which web pages can transition to which other ones, and using SMV to be able to perform verification on said applications (<a href="http://cs.ucsb.edu/~cgb/mvcVerification.html" rel="nofollow noreferrer">shameless plug here</a>).</p>\n\n<p>To answer your last question, I think model checking is definitely useful to have, but I lean more towards using unit testing as a technique that makes me feel comfortable about delivering my final product.</p>\n'}, {'answer_id': 319164, 'author': 'mkClark', 'author_id': 30970, 'author_profile': 'https://Stackoverflow.com/users/30970', 'pm_score': 0, 'selected': False, 'text': '<p>I used SPIN to find a concurrency issue in PLC software.  It found an unsuspected race condition that would have been very tough to find by inspection or testing.</p>\n\n<p>By the way, is there a "SPIN for Dummies" book?  I had to learn it out of "The SPIN Model Checker" book and various on-line tutorials.</p>\n'}, {'answer_id': 479690, 'author': 'Daniel Rikowski', 'author_id': 23368, 'author_profile': 'https://Stackoverflow.com/users/23368', 'pm_score': 0, 'selected': False, 'text': '<p>I\'ve done some research on that subject during my time at the university, expanding the <a href="http://steam.cs.uni-dortmund.de/" rel="nofollow noreferrer">State Exploring Assembly Model Checker</a>.</p>\n\n<p>We used a virtual machine to walk each and every possible path/state of the program, using A* and some heuristic, depending on the kind of error (deadlock, I/O errors, ...)</p>\n\n<p>It was inspired by <a href="http://javapathfinder.sourceforge.net/" rel="nofollow noreferrer">Java Pathfinder</a> and it worked with C++ code. (Everything GCC could compile)</p>\n\n<p>But in our experiences this kind of technology will not be used in business applications soon, because of GUI related problems, the work necessary for creating an initial test environment and the enormous hardware requirements. (You need lots of RAM and disc space, because of the gigantic state space)</p>\n'}, {'answer_id': 1617622, 'author': 'Joseph Kiniry', 'author_id': 193147, 'author_profile': 'https://Stackoverflow.com/users/193147', 'pm_score': 2, 'selected': False, 'text': "<p>We have used several model checkers in teaching, systems design, and systems development.  Our toolbox includes SPIN, UPPAL, Java Pathfinder, PVS, and Bogor.  Each has its strengths and weaknesses.  All find problems with models that are simply impossible for human beings to discover.  Their usability varies, though most are pushbutton automated.</p>\n\n<p>When to use a model checker?  I'd say any time you are describing a model that must have (or not have) particular properties and it is any larger than a handful of concepts.  Anyone who thinks that they can describe and understand anything larger or more complex is fooling themselves.</p>\n"}, {'answer_id': 5891836, 'author': 'BENMADANi Fayçal', 'author_id': 739042, 'author_profile': 'https://Stackoverflow.com/users/739042', 'pm_score': 2, 'selected': False, 'text': '<blockquote>\n  <p>What types of applications have you used model checking for?</p>\n</blockquote>\n\n<p>We used the Java Path Finder model checker to verify some security (deadlock, race condition) and temporal properties (using Linear temporal logic to specify them). It supports classical assertions (like NotNull) on Java (bytecode) - it is for program model checking.</p>\n\n<blockquote>\n  <p>What model checking tool did you use?</p>\n</blockquote>\n\n<p>We used <a href="http://babelfish.arc.nasa.gov/trac/jpf/wiki" rel="nofollow">Java Path Finder</a> (for academic purposes). It\'s open source software developed by NASA initially. </p>\n\n<blockquote>\n  <p>How would you summarize your experience w/ the technique, specifically in evaluating its effectiveness in delivering higher quality software?</p>\n</blockquote>\n\n<p>Program model checking has a major problem with state space explosion (memory &amp; disk usage). But there are a wide variety of techniques to reduce the problems, to handle large artifacts, such as partial order reduction, abstraction, symmetry reduction, etc.</p>\n'}]
['https://Stackoverflow.com/questions/25137', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/-1/']