End-user programming has become the most common form of programming in use today. Despite this growth, there has been little investigation into the correctness of the programs end-users create. We have been investigating ways to address this problem via a holistic approach we call
enduser software engineering
. The concept is to bring support for aspects of software development that happen beyond the “coding” stage—such as testing and debugging—together into the support that already exists for incremental, interactive programming by end-users. In this chapter, we present our progress on three aspects of end-user software engineering: systematic “white box” testing assisted by automatic test generation, assertions in a form of postconditions that also serve as preconditions, and fault localization.We also present our strategy for motivating end-user programmers to make use of the end-user software engineering devices.