User:Psumichaelc956/sandbox

= Automated GUI Software Testing =

Introduction
Software testing is used during software development and deployment. There are many terminologies used to describe different testing functions but in general software testing involves creating test cases and executed on the software to validate the quality. GUI based testing is even more challenging since the outcome of test execution are dependent on its internal state, the state of other entities, and the environment. Therefore, GUI based testing is related to “generating and executing sequences of events”.

Challenges
GUI based testing can be challenging to automate since the test executions are dependent on events with various different outcome based on external factors. Software developers who may have tested the solution using the TDD (Test Driven Development) methodology, might find quality issues once it is deployed to customers. GUI testing typically require a prohibitively large number of test cases to address this concern.

Practical Application of GUI based Testing
GUI based testing typically involves manually creating unit test cases using various testing tools such as JFCUnit, Abbot, Pounder, and Jemmy Module. A unit test case makes a method call to a test instance and assertions are inserted to validate if the test was executed correctly. These cases are later executed automatically using GUI base testing later. Any assertions that did not produce correct result will be marked as failures. Manually creating test cases can be tedious and time consuming. Some applications allow testing to capture sequences of events automatically and use these as test cases later, but the quality of these cases can be questionable. There has been a lot of advancement in GUI testing techniques especially related to capturing sequences of events that can be replayed during testing.

Other Types of Testing
Unit testing

Integration testing

System testing

User acceptance testing

Installation testing

Compatibility testing

Smoke testing

Regression testing

Performance testing

Security testing