It’s no secret that more and more people are gravitating towards mobile devices for their online activities. And with this trend, it has become imperative that software development organizations adopt a “mobile first” approach to application development (if they haven’t done so already). What this means is that development organizations must recognize the direction in which the world is moving and respond by aiming to deliver a superior mobile experience from the beginning of the product design process.
With that said, the two most popular operating systems for mobile devices (by far) are Android and iOS. While similar in some of the more basic senses, there are distinct differences and specific challenges related to testing applications that are designed to run on these platforms. I will identify some of the key differences in testing applications designed for Android and iOS below. In addition, I will provide insights and strategies for helping to overcome the distinct testing challenges that are encountered when working with either platform.
We all know that hybrid and mobile web applications allow for cross-platform development and also help developers bridge the gap between two competing platforms. But it is still important to understand that (from a development perspective) native application development for Android and iOS is fairly different due to differing architectures. Android, for instance, is made up of a Linux-based stack that is open-source. Native Android applications are developed using Java and development frameworks (such as Kotlin) that can leverage Android’s Java API Framework.
On the other hand, iOS from Apple can be described as more of a closed platform, as it cannot be customized to the same extent as Linux-based operating systems. When developing native applications for iOS, most organizations use Xcode as an IDE and Objective-C (older) and Swift (newer) as programming languages. In addition, all organizations must use Macs for development.
As with any application, testing plays a crucial role in ensuring high levels of both product quality and customer satisfaction. With that said, implementing an effective testing strategy for any application has its challenges. When contemplating effective software testing for mobile applications, there are specific challenges to consider; these are even more important when dealing with certain mobile operating systems.
Like all software, operating systems are updated and versioned over time. This is normally good for users since these updates introduce security and usability fixes to protect important data and improve user experience. But for an organization developing mobile technology, especially one developing for Android, this adds a layer of complexity to testing an application effectively.
The challenge lies in the fact that the global market share of Android OS versions is greatly fragmented when compared to that of iOS versions. This means that a greater variety of Android OS versions are in use on Android devices by a significant percentage of users. For example, if you look at statistics gathered by StatCounter GlobalStats for Android OS version usage, you can see that six versions of the Android OS are currently in use by around 7% or more of the total user base (at the time this article is being written). This differs from the usage of iOS versions where (as of right now) only two versions of iOS are in use by more than 6% of the total user base.
So how does this complicate the application testing process? If a large number of active devices are still running older versions of the Android OS, then it becomes critical to maintain application quality across a greater variety of versions. By extension, this increases the number of scenarios that require test coverage while also increasing the potential for issues with presentation and usability. This, in turn, can lead to greater cost for the organization in development and remediation. While this is also an issue for teams designing for iOS, they have less to account for since there is less OS fragmentation in the marketplace.
Similar to the issue of version fragmentation mentioned above, device fragmentation is a unique challenge experienced on a greater level by mobile-first development teams. Likewise, the impact that this has on testing is much greater when designing for Android than for iOS. iOS runs on a limited number of devices manufactured by Apple (such as various versions of the iPhone, iPod, iPad, etc.). In contrast, the Android operating system runs on far more devices produced by far more manufacturers. And this presents challenges for those testing mobile applications:
Screen size - While there are relatively few Apple products running iOS with relatively few screen sizes to account for, the same cannot be said for Android. When testing, the challenge will be to identify the most popular Android devices and to test thoroughly on these devices in order to ensure that your app supports as large a slice of the user population as possible.
Hardware specifications - Some applications use more resources than others, so it is important to build your application to run efficiently on as many of these devices as possible. This applies to devices running Apple’s iOS, but is especially true for devices running Android. Since more manufacturers are building different devices that run the Android OS, there are greater differences in the hardware of the mobile devices that are being developed. This means that development and QA must always account for testing against devices with differing hardware, especially for usability and performance.
Backwards compatibility - Harkening back to our earlier point about OS version fragmentation, device fragmentation can be partially to blame. As devices age and operating systems evolve, some of the older devices that are still in use will not be able to run the newer versions of the OS. Therefore, when testing, the application must be able to run on the last few OS versions (at least) to make certain that you are not phasing out potential users. In other words, ensuring backwards compatibility is a necessary component of any good testing strategy.
Distributing a native or hybrid application on the iOS and Android platforms is a bit different. For starters, applications for Android are primarily distributed via the Google Play Store, while iOS apps are distributed via the iOS App Store.
It is well known that the Google Play Store has less strict review and release processes, so it is easier and faster to get a new version of a mobile application into it than the iOS App Store. For this reason, thorough testing can be considered more important for those developing for iOS. For one, having a deployment denied by the iOS gatekeeper can prevent bug fixes and new features from reaching the user. In addition, if a bug does make its way into the iOS App Store, it’ll be a longer and more difficult process to get another release out behind it to resolve the issue. This raises the stakes for iOS developers and QA teams to get it right the first time.
What good is identifying problems without providing some solutions to help address them? While mobile testing can often be very involved with much to account for, there are steps that can be taken to help simplify the process for QA and improve efficiency in testing.
As we identified above, testing across many devices with differing hardware and software specs as well as differing screen sizes can be a challenge. For one, how can you build your test infrastructure to support this type of vast testing strategy? And won’t it take a really long time to run all the necessary test cases across all of these devices? In theory, yes it would. But to make it easier, Sauce Labs has built a cloud infrastructure platform that takes a lot of the complexity out of implementing such a strategy. The Real Device Cloud, as it’s called, eliminates the need for an organization to maintain a device lab of its own. This almost certainly increases the number of devices within your arsenal that you can test against (there are currently over 2,000 iOS and Android devices available), and it allows for parallel testing which exponentially increases testing efficiency.
In many cases, an organization will be building an application to be run on both the Android and iOS platforms. And while this inevitably leads to an increased number of test cases, nobody within the organization wishes to duplicate the number of test scripts to support both platforms. The use of popular mobile testing frameworks such as Appium helps eliminate the need for custom test scripts for differing platforms by providing support for cross-platform testing. Functionality within the Appium framework allows you to reference elements in an Android or iOS implementation of your application, allowing a single script to be run on both platforms to cover a particular test scenario. This effectively limits the amount of code that needs to be written by development and QA in order to thoroughly test an application running on multiple platforms.