Simulated testing offers a reasonably accurate virtual representation of the hardware's actual operation, including such (at least partially) hardware-dependent features as threading, stack operation, and caches. This allows it to uncover many potential low-level problems involving timing, conflicting priorities, and other logical bottlenecks. On the other hand, a simulator is more like a functional mockup, allowing you to test the user interface and high-level functionality, but giving you very little information about how the device is likely to interact with the real device. Real devices are used to test software that will run on actual hardware, such as mobile phones or tablets, and can uncover issues related to processor and memory ICs, physical environment, operating conditions, user experience, and more. Emulators faithfully duplicate actual hardware, but testing on a real device is still necessary to cover all aspects of the software's interaction with hardware features. The balance between simulated, emulator, and real-device testing will vary depending on the nature of your application, but it's essential for comprehensive software testing.