UI Testing
Code level testing is not enough. Testing must include testing from the UI to ensure all the software is being exercised.
Usability Testing
Early in every project the usability of the interface needs to be validated. Just as software must be tested to know if it works,
the design of the interface must be tested against humans to know if it works.
Functional Testing
Testing the functions of the software is best done using an inteface that is not too tightly tied to the UI. For web applications this
is best done with HTTP or code level APIs. For code libraries or desktop apps this is done with code level APIs.
Performance Testing
Performance is an important aspect of any application and needs to be tested, just like the other aspects.
Complexity
For any large applicaation or web site, the combination of operations can become too numerous to test exhaustively.
There are several approaches to this issue.
A common approach is to randomly select between equivalent operations. Another approach is to
chain use cases together hoping for some interferrence from one use case to another. By combining both these approches, and performing tests
concurrently the best results can be acheived in reasonable time.
The optimum solution would be to analyze each use case for data dependencies
and then execute all combinations of operations that interact with the same data. This is not feasible with current tooling, but reamins a goal.