Model-based testing or MBT is a general term that signifies an approach that bases common testing tasks such as test case generation and test result evaluation. MBT has recently gained attention with the popularization of models (including UML) in software design and development. There are a number of models of software in use today, a few of which make good models for testing. Models can be used to represent the desired behavior of a SUT, or to represent testing strategies and a test environment Tests can be derived from models in different ways. Because testing is usually experimental and based on heuristics, there is no known single best approach for test derivation. It is common to consolidate all test derivation related parameters into a package. This package can contain information about those parts of a model that should be focused on, or the conditions for finishing testing. This paper discusses model-based testing tasks in general terms with models (the most popular software models) as examples. In addition, advantages, difficulties, and shortcoming of various model-based approaches are concisely presented. Finally, we close with a discussion of where model-based testing fits in the present and future of software engineering.