Okay. So diving into emulators and simulators versus real devices. To start emulators and simulators. We have emulators for Android devices and we have simulators for iOS devices. The pros of emulators and simulators are that they're free, they're easily available and open source. There is a wide range of devices and an operating excuse me, there is a wide range of devices and OS offered. It does provide rich debugging and catches any unexpected functional behavior. And more or less it is quick and convenient.
When we're looking at the timeline of testing, we're looking at the infinity loop of the software development lifecycle. Where we have nonfunctional testing kind of pre-production and I'm sorry, functional testing pre-production and nonfunctional testing, more post-production. The farthest you shift left, the more defects that can be found, the more defects found, and the cheaper it is to then correct.
Emulators and simulators are fantastic for shifting the farthest left to get started on functional testing. However, there are cons to this being that you cannot emulate and simulate real-life data or real-time data. The testing, accuracy and reliability, and speed. So with emulators and simulators, it's a very vanilla-type operating system with the wide range of devices that we currently have in the market. There is a good bit of complexity to these devices.
Emulators and simulators really fall short of being able to emulate or simulate these complex behaviors so you don't get the most accurate, reliable testing in place. And once again it does not accurately reflect real-world scenarios. So great for starting out, coding out, and making sure that your functional tests can get started as quickly as possible.
You can use emulators and simulators because they're free, easily available, and open source. But you're going to lack a lot of functionality with emulators and simulators. For real devices. It is the most reliable in testing because you're testing as if you are the user themselves using your application and you have the full testing coverage so you can shift the farthest left and use real devices right off the gate as well. And you can use real devices through the entirety of your software development lifecycle so that you do ensure that you're getting the most accurate understanding of user experience, the most accurate understanding of your application, and how it's working on real devices. And you can even go further into nonfunctional testing, such as performance testing and load testing on a real device.
At Kobiton, we like to call it kind of the exhaust your application is putting off on a real device that can only be captured on a real device, not an emulator or simulator. So a good example of that is, say, battery drainage. So how much does your application drain the battery of a real device? You obviously cannot quite test that on an emulator or simulator. The cons to real devices are that it is costly. I think devices now are almost mini computers in your pocket that cost well over 1200 dollars.
So you're very limited to the number of devices that you have, limited availability. And also it's hard to manage physical resources. So there is someone that needs to be in place to keep up on updates to ensure that everything is working as expected to begin testing. There's far more complexity with real devices and emulators and simulators that do bring a con to using real devices. However, nothing beats the real deal.
Real devices will always help in ensuring that your testing you have your full testing coverage. How I suggest using either emulators and simulators and real devices is that once again, when you ship the farthest left, use the free and open-source easily available emulator simulators. When it comes down to your maintenance testing, to your nonfunctional testing, to kind of getting more of those real-world scenarios prior to pushing to production.
I would suggest using real devices so that you once again, have the most accurate and reliable of your testing performed and you get the best understanding of your user experience. Just quickly diving into what we call device fragmentation. So there are thousands of devices in the market. It seems this fragmentation is one split off from another split off from one operating system version to the next operating system version and so on.
Here are a wide variety of devices on the market. So in addition to complexities and mobile test automation, device availability is a huge blocker for testing and automation. You don't have access to these wide ranges of devices. You have Android playing there doing their thing, you have iOS doing a completely different thing. And it's very difficult to have device availability given device fragmentation.
So with this wide range of devices stemming from Android and iOS with different OS versions and features that also come with different screen sizes, so now you have your tablets and your iPads compared to your, say, iPhone mini-screens. They're going to have different sizes and different resolutions to consider. Emulators and Simulators can help bridge that gap. But it also comes with multiple capability disadvantages.
So as I mentioned before, emulators are very vanilla. They're going to have a very basic operating system for you to test on. Real devices, help bridge the gap whenever emulators and simulators fall short of any disadvantages. But again, it comes at a cost and is hard to maintain. So why not use the best of both roads?
Again, I highly recommend using emulators and simulators to kind of be the I don't wanna say crutch but be available to you because it is free and it's a great resource to have. But of course, once again, nothing beats the real deal of testing on real devices.