User Interface Testing

Graphical User Interface (GUI) Testing presents software teams with significant challenges. Simple UIs reveal a surprisingly large number of possible interactions, and therefore potential bugs. A simple program like Microsoft WordPad has 325 UI operations (A.M. Memon, M.E. Pollack and M.L. Soffa. Using a Goal-driven Approach to Generate Test Cases for GUI). A complex application such as a web browser can easily have an order of magnitude more. Complicating matters further, users may have to execute several UI operations in sequence to achieve an objective. Discovering a bug may require following a (possibly obscure) sequence of UI operations. Exhaustive UI testing can quickly become an intractable problem (http://en.wikipedia.org/wiki/GUI_software_testing).

Moreover, UI testing also touches upon qualities such as consistent look and feel, intuitive interfaces, and accessibility for people with disabilities (color blindness, for instance). The large and vast field of Human Computer Interaction also comes into play in UI testing.
Again, as with other testing strategies, we should bear in mind that a focused and intelligent (rather than exhaustive) approach to this problem is the best approach to UI testing.

The first line of defense against UI bugs is not so much testing as is proper design. UI developers should follow best practices by adhering to the Model View Controller (MVC) design pattern. This strategy will achieve separation of concerns that will make it easier to isolate and correctly test the user interface.
Testing the UI should not be a substitute for testing the model or server-side of an application with a UI. In fact, testing the UI may really reveal server-side (model) problems. In this scenario, developers should improve their server-side testing by writing better unit tests, for example.

Having accomplished proper design and solid server or model-side testing, there are commercial and open-source UI testing tools that are available to software testers. Many rely on a capture and playback mechanism. Here are some UI testing tools:

For Java Swing and AWT there is:
http://abbot.sourceforge.net/doc/overview.shtml

For web browser development see:
http://www.openqa.org/selenium-ide/

For more on the field of human computer interaction (HCI), see:
http://www.programmingbooks.org/User_Interface_Design