Papers by David Hovemeyer
CloudCoder
Proceeding of the 44th ACM technical symposium on Computer science education - SIGCSE '13, 2013
Companion to the 21st ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications - OOPSLA '06, 2006
Marmoset is a framework for storing and testing student submissions to programming assignments. I... more Marmoset is a framework for storing and testing student submissions to programming assignments. It gives students a limited ability to release test their code using an instructor's private suite of test cases. This encourages them to start early and implement their own test cases. It also provides facilities for instructors to manage the grading process and gives researchers access to fine-grained snapshots of the student development process.

Lecture Notes in Computer Science, 2002
Atomic instructions atomically access and update one or more memory locations. Because they do no... more Atomic instructions atomically access and update one or more memory locations. Because they do not incur the overhead of lock acquisition or suspend the executing thread during contention, they may allow higher levels of concurrency on multiprocessors than lock-based synchronization. Wait-free data structures are an important application of atomic instructions, and extend these performance benefits to higher level abstractions such as queues. In type-unsafe languages such as C, atomic instructions can be expressed in terms of operations on memory addresses. However, type-safe languages such as Java do not allow manipulation of arbitrary memory locations. Adding support for atomic instructions to Java is an interesting but important challenge. In this paper we consider several ways to support atomic instructions in Java. Each technique has advantages and disadvantages. We propose idiom recognition as the technique we feel has the best combination of expressiveness and simplicity. We describe techniques for recognizing instances of atomic operation idioms in the compiler of a Java Virtual Machine, and converting such instances into code utilizing atomic machine instructions. In addition, we describe a runtime technique which ensures that the semantics of multithreaded Java are preserved when atomic instructions and blocking synchronization are used in the same program. Finally, we present benchmark results showing that for concurrent queues, a wait-free algorithm implemented using atomic compareand-swap instructions yields better scalability on a large multiprocessor than a queue implemented with lock-based synchronization.
ACM SIGCSE Bulletin, 2006
Two important questions regarding automated submission and testing systems are: What kind of feed... more Two important questions regarding automated submission and testing systems are: What kind of feedback should we give students as they work on their programming assignments, and how can we study in more detail the programming assignment development process of novices?
Proceedings of the 2004 OOPSLA workshop on eclipse technology eXchange - eclipse '04, 2004
Much research has been done on techniques to teach students how to program. However, it is usuall... more Much research has been done on techniques to teach students how to program. However, it is usually difficult to quantify exactly how students work. Instructors typically only see students' work when they submit their projects or come to office hours. Another common problem in introductory programming courses is that student code is only subjected to rigorous testing once it has been submitted. Both of these problems can be viewed as a lack of feedback between students and instructors.
Proceedings of the 2005 international workshop on Mining software repositories - MSR '05, 2005
Most computer science educators hold strong opinions about the "right" approach to teaching intro... more Most computer science educators hold strong opinions about the "right" approach to teaching introductory level programming. Unfortunately, we have comparatively little hard evidence about the effectiveness of these various approaches because we generally lack the infrastructure to obtain sufficiently detailed data about novices' programming habits.
The 6th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering - PASTE '05, 2005
Using static analysis to detect memory access errors, such as null pointer dereferences, is not a... more Using static analysis to detect memory access errors, such as null pointer dereferences, is not a new problem. However, much of the previous work has used rather sophisticated analysis techniques in order to detect such errors.

Proceedings of the 2006 international workshop on Mining software repositories - MSR '06, 2006
Various static analysis tools will analyze a software artifact in order to identify potential def... more Various static analysis tools will analyze a software artifact in order to identify potential defects, such as misused APIs, race conditions and deadlocks, and security vulnerabilities. For a number of reasons, it is important to be able to track the occurrence of each potential defect over multiple versions of a software artifact under study: in other words, to determine when warnings reported in multiple versions of the software all correspond the same underlying issue. One motivation for this capability is to remember decisions about code that has been reviewed and found to be safe despite the occurrence of a warning. Another motivation is constructing warning deltas between versions, showing which warnings are new, which have persisted, and which have disappeared. This allows reviewers to focus their efforts on inspecting new warnings. Finally, tracking warnings through a series of software versions reveals where potential defects are introduced and fixed, and how long they persist, exposing interesting trends and patterns.
Uploads
Papers by David Hovemeyer