@incollection{strecker_testing, author = {Jaymie Strecker and Atif M. Memon}, title = {Testing Graphical User Interfaces}, booktitle = {Encyclopedia of Information Science and Technology, Second ed.}, publisher = {IGI Global}, year = {2009} } In recent years, an emerging trend in software products has been toward the use of graphical user interfaces (GUIs). More user-friendly than traditional, text-based interfaces, GUIs serve as the front-end for a large portion of today's software applications. Technologies like Ajax are helping to spread familiar GUI interaction styles to Web applications. With the rise of ubiquitous computing, users are interacting with GUIs in a widening range of situations—--not just with their PCs, but with their dishwashers and cars. Critical applications, such as banking systems, are moving to GUIs as well. Thus, quality assurance for GUI-based software is growing more important every day. With GUIs, users enjoy many degrees of freedom in the way they interact with the software. While this benefits users, it challenges testers. Because users may interact with a GUI in a variety of unexpected ways, it is difficult to insure that the software meets its functional requirements (correctness) and non-functional requirements (e.g., usability) for all possible interactions. The difficulties are compounded by the frequent intersection of GUIs with other emerging technologies, including component-based and service-oriented architectures. New trends in software development, such as rapid development cycles, globally distributed developers, and open-source projects, make the quality assurance process ever more challenging. This article describes the state of the art in testing GUI-based software. Traditionally, GUI testing has been performed manually or semi-manually, with the aid of capture-replay tools. Since this process may be too slow and ineffective to meet the demands of today's developers and users, recent research in GUI testing has pushed toward automation. Model-based approaches are being used to generate and execute test cases, implement test oracles, and perform regression testing of GUIs automatically. This article shows how research to date has addressed the difficulties of testing GUIs in today's rapidly evolving technological world, and it points to the many challenges that lie ahead.