Using QuickCheck and HPC - Obtaining Quality Assurance for Haskell Code Andy Gill, Kansas University Koen Claessen, Chalmers University of Technology This tutorial will show how to use QuickCheck and HPC for quality assurance of Haskell programs. QuickCheck is a tool and library for specification-based random testing. HPC is a tool and library for gathering and processing coverage information. We will focus on the latest version of QuickCheck (including features such as test data shrinking and user-definable event callbacks), the latest version of HPC, and their combination. We will concentrate on practical issues that come up when using these two tools. Topics that will be covered in the tutorial are: How do I start testing my program with QuickCheck? What properties should I write? How should I write test data generators? What are common pitfalls and how do I avoid them? How do I use shrinking to get minimal failing test data? How do I use HPC to check what parts of my program and properties have been tested? How do I use feedback from HPC to improve my properties? Can I control HPC from within my Haskell program? The form of the tutorial is three hours, consisting of a number of short lectures, interleaved by practical, hands-on excercise sessions. The tutorial will be example-driven, covering dealing with real libraries and programs. ------------------------------------------------------------------------ Andy Gill was born and educated in Scotland, and has spent his professional career in the United States. Andy received his Ph.D. from the University of Glasgow in 1996, then spent three years as a compiler developer for Hewlett Packard, Metrowerks and Semantic Designs. In 1999, he returned to academia, joining the Oregon Graduate Institute as a project scientist. He co-founded Galois in 2000, a technology transfer spin-off that was started with the conviction that people will pay for the benefits that language technologies can provide. In 2008 he left a thriving and healthy Galois to return to academia and research, joining the University of Kansas and the Information and Telecommunication Technology Center. Andy believes that functional languages are a great medium for expressing algorithms and solving problems. His research interests include optimization, language design, debugging, and dependability. The long-term goal of his research is to offer software engineers and functional language practitioners the opportunity to write clear and high-level executable specifications that can realistically be compiled into efficient implementations.