Suyash Dubey | Posted on | 2 min Read

Introduction:

In today’s digital age, mobile applications have become an integral part of our lives. We rely on them for various tasks, from socializing and entertainment to productivity and financial transactions. However, nothing is more frustrating than using an app that crashes frequently, behaves erratically, or fails to meet our expectations. Such experiences often lead users to uninstall the app and move on to alternatives.

To ensure that mobile applications meet user expectations and deliver a seamless experience, thorough testing is crucial. Testing plays a vital role in identifying and rectifying issues, thereby improving the overall quality of the app. Functional testing and non-functional testing are two key categories of testing that focus on different aspects of the application.

Section 1: Functional Testing

1.1 What is Functional Testing:

Functional testing is a process of evaluating the behavior, features, and functionality of an application to ensure that it works as intended. The primary goal of functional testing is to validate that each function of the application performs correctly according to the specified requirements. This type of testing focuses on user-friendliness and ensuring that the application meets the expectations of its intended users.

To perform functional testing, first we need to identify the test input and compute the expected outcomes with the selected test input values. Then we execute the test cases and compare the actual data to the expected result.

 

functional testing vs Non-functional testing

1.2 Types of Functional Testing:

1.2.1 Unit Testing:

Unit testing involves testing individual components or units of code in isolation to verify their functionality. It is usually performed by developers during the development phase. The purpose of unit testing is to ensure that each unit of code functions as intended and meets the specified requirements. It helps identify defects early in the development cycle, promotes code reusability, and provides a solid foundation for integration testing.

In unit testing, test cases are created to validate the behavior of individual functions, methods, or classes. Mock objects or stubs may be used to simulate dependencies and isolate the unit under test. By testing units in isolation, developers can easily identify and fix bugs, making the code more reliable and maintainable.

1.2.2 Integration Testing:

Integration testing focuses on validating the interaction between different components or modules of the application. It ensures that the integrated parts work harmoniously and produce the expected output. Integration testing can be performed using various approaches:

Top-down approach: Integration testing starts from the highest-level components, and gradually lower-level components are integrated and tested. This approach allows early identification of integration issues in major components.

Bottom-up approach: Integration testing begins with the lower-level components, and higher-level components are gradually added and tested. This approach is useful when lower-level components are more stable and critical to the application’s functionality.

Sandwich or hybrid approach: This approach combines elements of both top-down and bottom-up approaches. It aims to achieve a balanced integration of components by identifying and addressing issues at different levels simultaneously.

Integration testing verifies that components can communicate and exchange data correctly, handle errors gracefully, and maintain data integrity throughout the system.

An Autonomous Bot to Test your Apps

1.2.3 Sanity Testing:

Sanity testing, also known as smoke testing, is a quick evaluation of the application’s major functionalities after making small changes or fixes. Its primary objective is to determine if the critical functions of the application are working as expected before proceeding with further testing.

Sanity testing focuses on the most crucial features and functionality to ensure that the recent changes have not introduced any major issues. It is not an in-depth or exhaustive test but rather a superficial check to provide confidence that the application is stable enough for further testing.

By performing sanity testing, teams can catch critical issues early and avoid wasting time on extensive testing if the application’s fundamental functionality is compromised.

1.2.4 Regression Testing:

Regression testing involves retesting the previously tested functionalities of the application to ensure that any new changes or bug fixes have not introduced new defects or caused existing functionalities to fail. It aims to maintain the stability and integrity of the application.

When new features or bug fixes are introduced, regression testing helps ensure that these changes do not impact the existing functionality of the application. It involves rerunning test cases that cover the affected areas to confirm that the system behaves as expected after modifications.

Regression testing can be performed manually or through automated testing tools. Automated regression testing is often preferred for efficiency and accuracy, especially when there are frequent code changes or a large number of test cases.

1.2.5 System Testing:

System testing evaluates the entire system as a whole to verify its compliance with the specified requirements. It covers end-to-end scenarios, including various functionalities and interactions between different components.

System testing can be performed in both black box and white box testing approaches, depending on the level of access to the system’s internal workings. It tests the system’s behavior, performance, security, and other non-functional aspects to ensure it meets the desired standards and user expectations.

System testing typically involves creating comprehensive test cases that simulate real-world scenarios and user interactions. It aims to identify any discrepancies between the expected behavior and the actual behavior of the system.

1.2.6 Beta/User Acceptance Testing:

Beta testing, also known as user acceptance testing (UAT), involves releasing the application to a limited set of end-users or external testers to evaluate its performance and gather feedback. It helps validate the application’s usability, compatibility, and overall user experience.

During beta testing, real users test the application in a production-like environment, providing insights into its strengths, weaknesses, and potential areas of improvement. Feedback collected during this phase helps identify bugs, usability issues, and other areas for refinement.

Beta testing is particularly valuable for identifying user-centric issues that might not have been discovered during earlier testing phases. It allows the development team to make necessary adjustments before the application’s full release, enhancing its quality and user satisfaction.

Overall, these different types of testing play crucial roles in ensuring the quality, reliability, and usability of software applications at various stages of the development process.

Section 2: Non-Functional Testing

2.1 What is Non Functional testing?

Non-functional testing focuses on evaluating the quality attributes and performance of the application beyond its functional aspects. It aims to ensure that the application meets specific criteria related to reliability, performance, usability, security, compatibility, and other non-functional requirements.

2.2.1 Performance Testing:

Performance testing is crucial to ensure the smooth functioning of an application under expected workloads. Its primary objective is to identify performance-related issues such as reliability and resource usage, rather than focusing on finding bugs. When conducting performance testing, it is essential to consider three key aspects: quick response time, maximum user load, and stability across diverse environments. Even if you are primarily focused on mobile testing and employ online Android emulators, performance testing remains indispensable.

2.2.1.1 Endurance Testing:

Endurance testing, also known as soak testing, verifies the application’s ability to handle sustained loads over an extended period. It aims to identify any performance degradation or resource leaks that may occur during continuous usage. By subjecting the application to a prolonged workload, endurance testing helps ensure that it can sustain high usage without issues such as memory leaks, performance degradation, or resource exhaustion.

2.2.1.2 Scalability Testing:

Scalability testing measures how well the application can handle increased workload or user demand by adding more resources, such as servers or network bandwidth. It evaluates the application’s ability to scale seamlessly as the user base grows. Scalability testing helps determine the system’s capacity to handle additional load without significant performance degradation or loss of functionality.

 

2.2.1.3 Load Testing:

Load testing evaluates the application’s behavior and performance under expected and peak loads. It involves simulating user interactions and subjecting the system to high concurrent user activity or data volumes. The purpose is to determine the maximum capacity of the application and identify potential bottlenecks or performance issues. Load testing helps ensure that the application can handle the anticipated user load without crashes, slowdowns, or data inconsistencies.

2.2.2 Usability Testing:

Usability testing plays a critical role in identifying usability defects within an application. It involves a small group of users evaluating the application’s usability, primarily during the initial phase of software development when the design is proposed. The focus is on assessing the ease of use and whether the system meets its intended objectives. Usability testing can also be conducted on online Android emulators for mobile applications.


Several methods can be employed for conducting usability testing. During the design phase, one approach involves evaluating the design concept using paper prototypes or sketches. Another method involves conducting random tests once the application is developed to assess its usability. Real users can be engaged on the site to perform these tests, providing valuable feedback and results. Additionally, tools that provide statistical analysis based on design inputs and wireframes can be utilized to support usability testing efforts.


The first step in conducting structured usability testing is to identify the target users who will be interacting with the application. Users should be selected based on their characteristics, such as geography, age, gender, and other relevant factors that align with the application’s intended user base. The next step involves designing specific tasks for the users to perform, which will help evaluate the application’s usability. The results of the testing are then analyzed and interpreted.


Usability testing can be performed in a controlled test environment with observers present. These observers closely monitor the testing process and create a comprehensive report based on the users’ assigned tasks and their interactions with the application. Another option is remote usability testing, where both the observers and the testers are located in separate locations. In remote testing, the users perform the assigned tasks from their own environment, and their reactions and interactions are recorded using automated software.


By conducting usability testing using appropriate methods and involving representative users, organizations can gain valuable insights into their application’s usability, identify potential issues, and make informed design decisions to enhance the overall user experience.

2.2.3 Security Testing:

Security testing is an integral part of the mobile app testing process and holds utmost importance in ensuring the app’s resilience against external threats, such as malware and viruses. It plays a critical role in identifying vulnerabilities and potential loopholes within the application that could lead to data loss, financial damage, or erosion of trust in the organization.


Let’s explore the key security threats that need to be addressed during security testing:
Privilege Elevation: This threat involves a hacker exploiting an existing account within your app to increase their privileges beyond what they are entitled to. For example, if the app offers credits for referring friends, the hacker might manipulate the system to obtain more credits and gain financial advantage.


Unauthorized Data Access: One of the most prevalent security breaches is unauthorized access to sensitive information. This can occur through hacking login credentials or gaining unauthorized access to the server where the data is stored. Security testing aims to identify and rectify vulnerabilities that could lead to such unauthorized access.
URL Manipulation: Hackers may manipulate the URL query string if the app or website employs the HTTP GET method for data transfer between the client and server. Security testing includes assessing if the server properly validates and rejects modified parameter values, ensuring that unauthorized manipulation of data is prevented.


Denial of Service: This type of attack disrupts app services, rendering them inaccessible to legitimate users. Hackers may exploit vulnerabilities to overwhelm the app or server, making it unstable or unavailable for use. Security testing aims to identify weaknesses in the app’s infrastructure and implement safeguards against such attacks.


By conducting comprehensive security testing, organizations can strengthen the app’s defenses, mitigate potential security risks, and safeguard user data, revenue, and the overall reputation of the organization. It is crucial to stay proactive in identifying and addressing security vulnerabilities to maintain a secure and trusted app environment.

2.2.4 Compatibility Testing:

Compatibility testing ensures that the application functions correctly across different devices, operating systems, browsers, and network environments. It helps guarantee a consistent user experience and broadens the application’s reach to a wider audience. Compatibility testing involves verifying that the application’s features, functionality, and user interface are compatible with various platforms and configurations. By conducting compatibility testing, developers can address issues related to device-specific behaviors, screen resolutions, browser compatibility, and network compatibility.

2.2.5 Accessibility Testing:

Accessibility testing verifies that the application is accessible to users with disabilities. It ensures compliance with accessibility standards and guidelines, making the application usable for individuals with visual, hearing, or mobility impairments. Accessibility testing involves evaluating factors such as screen reader compatibility, keyboard navigation, color contrast, alternative text for images, and adherence to accessibility guidelines. By conducting accessibility testing, developers can ensure that their application is inclusive and can be accessed by a wider range of users, regardless of their abilities.

These different types of non-functional testing are essential for ensuring that the application not only functions correctly but also meets performance, usability, security, compatibility, and accessibility standards. By thoroughly testing these aspects, developers can deliver a high-quality application that provides a positive user experience, addresses potential issues, and meets the needs of a diverse user base.

Functional Testing

Non-Functional Testing

Validates the actions, operations, and functionalities of an application.

Verifies the performance, reliability, and other non-functional aspects of the application.

Focuses on validating user requirements and ensuring the application functions as intended.

Focuses on evaluating user expectations, such as performance, usability, security, scalability, and other non-functional attributes.

Executed before non-functional testing to ensure basic functionality is in place.

Executed after functional testing to assess the application’s non-functional characteristics.

Functional requirements are relatively easier to define as they directly align with user actions and expected outcomes.

Requirements for non-functional testing, such as performance targets, security standards, usability guidelines, or regulatory compliance, can be challenging to define precisely.

Example: Testing the login functionality to ensure users can successfully log into the application.

Example: Verifying that a web page loads within one second, ensuring a fast and responsive user experience.

Functional testing is often performed manually to simulate user interactions and validate functionality.

Non-functional testing, especially for aspects like performance, load, stress, and security testing, is best executed using automated tools to simulate real-world scenarios and generate accurate results.

Ensures the application meets functional requirements and performs the expected tasks correctly.

Evaluates the application’s performance, usability, reliability, compatibility, security, and other non-functional aspects.

Typically focuses on individual features, modules, or components of the application.

Takes a holistic approach, assessing the application as a whole, including its integration, performance under different conditions, and adherence to industry standards.

Regression testing is commonly performed in functional testing to ensure new changes or fixes do not impact existing functionality.

Regression testing may also be performed in non-functional testing to ensure changes or optimizations do not adversely affect non-functional attributes.

Functional testing is generally carried out by business analysts, testers, or domain experts.

Non-functional testing may involve a broader range of stakeholders, including performance testers, security analysts, usability experts, and infrastructure specialists.

Focuses on “what the system does” in terms of features and functionality.

Focuses on “how well the system performs” in terms of various non-functional attributes.

 

Section 3: Key Differences between Functional Testing and Non-Functional Testing

3.1 Focus:

The primary focus of functional testing is to validate the application’s behavior and functionality according to the specified requirements. It ensures that the application performs the intended tasks correctly. Non-functional testing, on the other hand, emphasizes assessing quality attributes, performance, and user experience beyond the functional aspects. It evaluates how well the application performs in terms of speed, scalability, security, usability, compatibility, and accessibility.

3.2 Objectives:

Functional testing aims to ensure that the application works as intended and meets user expectations in terms of features and functionalities. It focuses on validating the functional requirements and ensuring that the application delivers the desired functionality. Non-functional testing, on the other hand, focuses on evaluating aspects such as performance, usability, security, compatibility, and accessibility to enhance the overall user experience. It aims to identify any issues or limitations related to these quality attributes and improve them for a better user experience.

3.3 Timing:

Functional testing is typically performed during the development phase, starting with unit testing and progressing through integration testing and system testing. It ensures that the application’s core functionality is working as expected. Non-functional testing is often conducted after functional testing, once the application’s basic functionality has been validated. It focuses on assessing the application’s performance, usability, security, compatibility, and accessibility in different environments and scenarios.

3.4 Test Cases and Techniques:

Functional testing relies on test cases derived from functional requirements, user stories, and use cases. It involves techniques such as boundary value analysis, equivalence partitioning, and decision tables to validate the expected behavior of the application. The emphasis is on ensuring that the application meets the functional requirements and performs the desired tasks correctly. Non-functional testing requires specific test cases and techniques tailored to each quality attribute being assessed. For example, performance testing may involve the use of load testing tools to simulate heavy user loads and measure the application’s response time. Accessibility testing may involve the use of assistive technology tools to evaluate the application’s accessibility features. Each type of non-functional testing requires specialized techniques and tools to assess the specific quality attribute.

3.5 Scope:

Functional testing focuses on testing individual functions or features of the application to ensure they work correctly. It involves verifying inputs, outputs, and the expected behavior of specific functionalities. Non-functional testing, on the other hand, assesses broader aspects of the application beyond individual functions. It evaluates performance, usability, security, compatibility, and accessibility across the entire system or application.

3.6 Success Criteria:

In functional testing, the success criteria are typically defined based on whether the application performs the expected functions correctly. Test cases are designed to verify specific requirements or user stories. Non-functional testing, however, requires different success criteria depending on the quality attribute being assessed. For example, in performance testing, success criteria may include response time thresholds or maximum load capacity. In security testing, the success criteria may involve identifying and fixing vulnerabilities or achieving compliance with security standards.

 

3.7 Dependencies:

Functional testing can often be conducted independently of external factors or dependencies. It focuses on testing the internal behavior of the application. Non-functional testing, on the other hand, often requires external dependencies, such as specific hardware configurations, network environments, or test tools. For example, performance testing may require dedicated performance testing tools, while compatibility testing may require testing across different browsers or devices.

3.8 Test Environment:

Functional testing can typically be performed in a controlled test environment that mimics the production environment. It allows for consistent and repeatable testing. Non-functional testing, however, often requires different test environments that reflect real-world conditions. For example, performance testing may require using a production-like environment with representative user loads, while compatibility testing may involve testing on various devices, operating systems, and network configurations.

3.9 Test Data:

Functional testing usually requires specific test data that represents different scenarios and inputs relevant to the functionality being tested. Non-functional testing may require additional or specific test data related to the quality attribute being assessed. For example, in security testing, test data may include malicious inputs to test vulnerabilities, while performance testing may involve generating large datasets to simulate realistic workloads.

Conclusion:

On average, it is observed that an app tends to lose 95% of its new users within the first three months. One of the primary reasons for this high attrition rate is the presence of bugs and issues within the app, which could have been avoided with a robust testing strategy. By implementing thorough functional testing and non-functional testing, app developers can ensure a smoother user experience and reduce the likelihood of losing users.


To facilitate effective testing, tools like pCloudy offer a range of features that simplify and expedite both functional and non-functional testing processes. These tools enable testers and developers to quickly identify and rectify bugs, ensuring that the app meets the desired quality standards before its release.


By investing in reliable testing tools and adopting a proactive testing approach, developers can save valuable time and resources. Early detection and resolution of issues contribute to enhancing the overall app performance, stability, and user satisfaction. Ultimately, this helps businesses retain users, prevent revenue loss, and establish a strong reputation in the competitive app market.

Comprehensive Test Coverage

App Testing

If recent past has been any indication, then it is a certainty there are growing expectations from Testers and Developers alike, to take quality head on, as a joint feature. More so in the Mobile App Testing projects where changes are required faster than ever.

 

As part of DevOps practices, it’s has become imperative for developers to run as many tests as possible with every code check-in. These tests could be automated functional, API or Unit Tests. Some of the popular tools to used by Developers to create their tests are Espresso, XCTest and Appium.

 

Following are some the Challenges faced by developers:

  • Developers need access of right set of devices across different versions to be able to run their tests.
  • Debugging capability on those devices so that they can fix issues quickly.
  • Access to a specific model of devices to debug production issues.

Try taking a look at a typical developer’s cubicle and you will see a series of mobile devices connected with several long USB cables running into computers. It does get frustrating to see others furiously plugging USB cables in and out of the mobile devices for App Testing on various devices.

 

Many of the organizations are shifting to device cloud to provide their teams access of right Mobile Devices. Device cloud are solving the need of test teams but provide limited debugging capabilities and hence not preferred by Developers.

 

To directly address need of Developers, pCloudy recently introduced DeviceTunnel, which fully allows developers to take complete control of the device in cloud. This unique solution provides access of cloud devices through the Android Studio or Eclipse IDE and the command line tool installed in your computer.

 

It works as if Device is connected directly to your computer through a USB cable. From the point of view of tools like Android Studio or Eclipse, a cloud-based device appears physically attached. In reality, the Device Tunnel communicates with pCloudy’s servers over Internet.

 

App Testing

Access devices directly from your terminal

 

Once a connection is established, the developers can perform the following actions on these devices:

  • Issuing a range of ADB commands for debugging, shell creations, port forwarding, and viewing general information about any cloud-based Android device
  • Copying and pushing files to connected cloud-based devices
  • Installing and uninstalling applications
  • Debugging apps during development or testing by adding breakpoints, inspecting variables, analyzing run-time metrics to optimize your app and more
  • Run their tests on the device directly from their IDE

To know more on how to connect any device on pCloudy using Device Tunnel Click Here.

It is undeniable that developers and testers need quicker access to diverse devices for the brisk evaluation of app and debugging. Device Tunnel enables both sets of engineers to instantly connect to any device hosted on cloud and run faster debug sessions and thereby, maximize the quality of their build cycles.

Test your Apps

Did You Know?

Test Your Apps function differently in different Network Environments

There might be a whole set of bugs you probably are marking as “Cannot Reproduce” simply because you are thinking “Hmmm… Funny, it seems to works here”.

The App you tested in your lab environment will not work the same way when you use it in an elevator, or in a basement, or while you are travelling on a highway. These are probably a whole set of testing scenarios you probably haven’t thought of.

You Can do now

Test your Apps

Mimic different real network environments that impact app functionality and performance

networks

Create different Network Profiles and test you apps on multiple Network Environments

Test your Apps

Identify and rectify functional and performance issues

bandwidth

Modify various parameters like bandwidth, packet loss and latency during testing

Plugin for Android Studio

 

An Overview

pCloudy has released a plugin for Android Studio which provides you access to the platform for performing manual and automation testing of mobile apps from within Android Studio IDE.

For Manual Testing

Now you can build and upload your Android Apps to pCloudy devices directly from your Android Studio project workspace.

For Automation Testing

If you are using Appium as automation tool and have created your Automation scripts as a project in Android Studio, you can run the scripts directly on pCloudy devices.

Prerequisites

1. An account in pCloudy with enough credits.
2. An API Access key for authentication with pCloudy.com
3. Chrome Browser on local machine
4. Android Studio IDE
5. Android Studio pCloudy plugin

Preparation

Reference the JAR files to Eclipse
Make a note the API Username and API Access Key

How to Install the Plugin

1. Download the Android Studio plugin for pCloudy
2. Open your Android Studio > go to Setting icon of Android Studio > Select Plugins > All available plugins are shown which can be filtered with the help of Show feature as per requirement.
3. Click on Install plugin from disk > Browse and select location of your downloaded Android Studio plugin of pCloudy
4. Click on OK
5. Now, you can see that pCloudy plugin has been successfully integrated to Android Studio.

Select pcloudy plugin and click on OK to proceed. Here, we are going to install pCloudy plugin for Android Studio from local disk. Click on Install plugin from disk
install-plugin-from-disk

pCloudy plugin for Android Studio has been integrated successfully.

pcloudy-plugin-over-android-studio

Click on pCloudy plugin icon shown on Android Studio. pCloudy Login page opens. Enter your Username and Access Key and click on Login. Your login credentials are verified. Click on OK to proceed.
pcloudy-plugin-over-android-studio

Note: This is one-time task. Credentials will be valid until you logout.
Now, you are ready to use the Android Studio Plugin for pCloudy.
Manual Functional Testing of App

After successful login, upload your app screen appears. Workspace page helps you to select application path of your local machine.
successfully-authenticated

Cloud Drive page lets you to select app from the list and click on Next to proceed.
upload-your-app

Local Drive lets you to upload your app from your local machine to perform testing.
upload-a-project-file

Mobile Browser enables you to use mobile browser for testing.
use-mobile-browser-for-testing

After selecting app, the next step is choosing a device. Select and Connect to devices page provides you list of devices which can be filtered by using filter parameters (Android/iOS, Manufacturer, and OS version). Select duration of your testing. The device will get booked for selected time duration.

When you click on Next, you get a message “Please wait while we open the pCloudy Platform on your default browser for Manual Testing. Please advised that…”
select-and-connect-to-devices

Just after few seconds, you will be redirected to the connected device page over pCloudy to perform manual functional testing of your app on selected device.
briefing

Automation Testing of App

Similarly, the first step towards performing automation testing is selecting an app from workspace/cloud drive/local drive or use mobile browser.
my-application

Select your desired device; select duration of automation testing. You can filter devices displaying devices by using filter options (Android/iOS, Manufacturer, and OS version). Click onNext to proceed.
choose-devices

Note: Here, you can select multiple devices as well.

Finally, you get corresponding pseudo code for performing Automation testing of app. You can copy this pseudo code to clipboard and use it within your Automation script…
paste-the-code-and-proceed

You will need the pCloudy java connector jar file for the above code to work. The pCloudy-java-conector.jar contains the API wrappers, classes & methods to use the pCloudy RestfulAPIs (without knowing how to call rest webservices from java). The gson.jar is a well known, opensource google library. You should add the pCloudy-java-connector.jar in its build path as a reference within your java project containing appium scripts.

“iOS 8 is the biggest iOS release ever — for developers and everyone else. But that wasn’t the goal. We simply set out to create the most natural experience. Each enhancement has a purpose. Every new feature deserves to be a new feature. Each function is more considered, each next step is more efficient. It all adds up to an even better experience — one that is pleasantly surprising at first and becomes utterly indispensable before you know it.”

What is new ?

Inter-App Communication

Inter-app communication means different things to different people. For some it’s the ability to push files from one app to another. For others it’s the ability to pull data into any field in any app. The core issue, however, is workflow. People just want an easier way to move their stuff around.

Touch ID Authentication

Touch ID is the name of Apple’s personal fingerprint identity sensor. It’s what currently lets you authenticate yourself to unlock your iPhone 5s and authorize iTunes and App Store purchases on your account.

 Custom keyboards

After years of waiting, Apple has finally brought support for third-party keyboards to iOS. Inside iOS 8, keyboards like Swiftkey and Swype, which have enjoyed huge usage on Android, will have system-wide access to all apps and services on your iPhone and iPad. Swiftkey has confirmed it’s onboard, but if you don’t fancy that, you’ll still able to enjoy Apple’s new QuickType keyboard. The company says the improved keyboard learns from the way you type and text, offering a pick of suggestions for your next word based on the content of your message or the person you’re conversing with. Planning a meal with your friend or loved one? The keyboard will auto-populate words like “dinner” or “eat” as you type. At launch, QuickType will support 14 regions including the US, UK, Canada, Australian English, Brazilian Portuguese, Chinese (that includes Hong Kong and Taiwan), French, German, Italian, Japanese, Spanish and Thai.

Family Sharing

New to iOS 8, a user can add six others as family members. Family members can share purchased apps, music, and books using the same credit card. iOS 8 can also automatically set up photo streams for all family members. Calendars may be synced between all members. Kids can also send iTunes download requests for apps, music, movies, and more to their parents provided this service is set up correctly.

Third-party widgets

iOS 7 split notifications and widgets apart, putting widgets in their own Today view, moving Weather to the Today Summary, and adding support for Calendar, Reminders, predictive location, and the Tomorrow Summary. Yet they were still limited to built-in apps and services.

iOS 8 and Extensibility take it even further, allowing App Store apps to offer up their own Today view widgets — helpful information status indicators, simple, interactive utilities, and ways to launch into the full app when and if needed — easily accessible from anywhere on the iPhone or iPad, informational and interactive.

What a new OS or device release means to the developers and Testers?

Update Your Device/OS Test Matrix

Maintaining Device /OS Test matrix is already a big challenge for organizations. It is always a big question that what device and OS combination should be included in the Test Matrix and what should be not. One way to set your Matrix in right direction is you can take the help of Google analytics that what devices your audience/users are coming from.Now each OS Device release we have to refresh this Matrix.

How should we proceed and what all areas we should focus more:-

Functional Testing

According to Apple’s developer site “iOS 8 includes over 4,000 new APIs that let you add amazing new features and capabilities to your apps. Deeper integration with iOS means you can extend the reach of your app content and functionality.”

Inter App communication

Test if your application is able to interact seamlessly with other apps and Able to transfer Data from one app to other.

Notification center

If your app is using Notification API it is properly updated in Notification center and your application is able to customize its Notifications in Device Notification center.

Touch ID Authentication

If Your Application is using Touch ID Authentication the is it working fine as per your implementation

A/B Testing

App Login with Touch ID

In iOS 8 developers can now use Touch ID to let their users log into their app. Typing in a password introduces a lot of friction into the signup flow, but Touch ID is also a new technology that isn’t perfect every time.
Just because Touch ID is available for app login, doesn’t mean it’s the best option for every user. Set up a simple A/B test to see how leading with one option vs. another impacts sign-ins and sign-ups. Depending on who your audience is and how they use your app, you may be surprised by the results.

Let’s face it; Touch ID doesn’t always work as promised. It’s important that your app respond before your users start to get frustrated and consider abandoning. Try testing different options for help text and UI elements to guide your users to a successful entry.

Extended Sharing Options

iOS 8 now lets developers share content from their apps with a new sharing options API. This release comes a big question: where will developers embed sharing actions? and what type of actions with sharing surface?

We recommend experimenting with different places in your app you can surface the option to share. Make sure you pick a consistent place that makes sense for users as part of their interaction flow. This can be hard to know for certain, so we recommend brainstorming some options with your team and testing as many as you can.

The types of actions you surface in your sharing options is also really important. Too many actions will clutter the experience and confuse people, threatening drop off. Think about the high-value actions you want your users to take. Start by highlighting only those. Then, progressively test into adding other actions based on user feedback and team ideas. If you start to see adding actions are negatively impacting your engagement, you know you might be going too far.

UI Testing

 

Remember these points before Testing

Size Class

With iOS 8, Apple is introducing “size classes”. Size classes have vertical and horizontal dimensions called “regular” and “compact”. The iPad in both portrait and landscape defaults to the regular size class in both horizontal and vertical directions. The iPhone in portrait defaults to compact size class for horizontal and regular size class for vertical. The iPhone in landscape defaults to compact size class for both horizontal and vertical.
Apple provides some automatic behaviors based on size classes. For example, if you rotate an iPhone app that uses standard components from portrait to landscape (from compact/regular to compact/compact) the navigation bar gets condensed and the status bar disappears entirely. That’s to maximize the content on a screen that’s suddenly gone from being tall to being very, very short — like a web page on Safari.
Developers are free to customize the layout for every orientation of every device they support as well. For example, they can have two buttons stacked on top of each other in portrait orientation to take advantage of the height, and those same buttons aligned side-by-side in landscape orientation to take advantage of the width. They’re the same controls, their position and other attributes simply change as the vertical size class changes.

Split view

Apple is also bringing split views to the iPhone. That means developers no longer have to maintain two separate interface hierarchies, one for iPad that contains split view, and one for iPhone that does not. Now they can maintain one hierarchy for both and the proper screens will all be rendered based on size class.

Changed UI API’s

With iOS 8 Release Apple has removed some of the UI API’s and a list of bug fixes in UI KIT made it very essential for user’s to test the UI thoroughly.

Orientation

You need to test the rendering of their application as per the changed classes and views

UX Testing

Enhanced Multitasking

iOS 8 comes with enhanced multitasking functionalities. Testing your app user experience with this enhanced Multitasking feature of iOS 8.

iOS 8 Touch ID authentications

Testing the user experience of your application with iOS 8 Touch ID authentications functionality.

Notification Center

How Your Application Notification pushed into Device Notification center or What happens when your Device is in Locked state etc.

Performance Testing

CPU usage by Your Application on this new OS and device.
App performance during interaction of one app with others.

Security Testing

Security will also be a major focus of this release. New iOS 8 features will make it even easier to keep track of all your passwords and make sure they are as secure as possible