You’re in the process of building your app, and you’ve got all the necessary requirements down. At this point, you’ll want to start thinking about quality assurance and doing extensive testing in order to make sure that you deliver the best possible experience to future users.
In this article, we’ll present an extensive list to consider if you’re looking to do in-depth manual testing of your app’s functionality and features. We’ll also address the various approaches you can take to testing and their inherent benefits and risks.
Table of Contents
Testing requirements and planning app tests
Testing is an essential part of any app development process, but it’s also the most extensive and detailed one. After all, you’ll want to make sure your app is bug-free before you release it. That’s why companies usually run closed alpha and beta tests, thereby lowering the chance of anything going wrong once the app goes live.
Having said that, testing is not a spontaneous process and requires both preparation and extensive planning. You’ll do well if you do both upfront, so here’s a list to consider:
- How many mobile devices and tablets do I need?
- Which Android and iOS versions is the app compatible with?
- Are there any special test cases I need to try out?
- Do I have an effective way to report bugs I find?
- Is the infrastructure set up to support testing and delivery?
- Do I want the testing process to scale up at some point?
Once that’s done, it’s time to create a testing plan. Here’s how:
- Define the extent of testing – You’ll want to set a clear roadmap of what you want to focus on during the testing period. For example, app functionality or its UX.
- Define a clear testing timetable – Decide how long it will take to complete the testing process and stick to it no matter what.
- Define the goal of the testing process – Define what you aim to achieve.
- Define acceptance criteria – Be clear about what’s acceptable and what’s not when it comes to issues you might discover.
Getting into the tester mindset
Before we get to the checklist, let’s take a moment and get into the right mindset. Testing often involves dedicated and meticulous work, if you want to do it right. This means you’ll want to take your time when it comes to approaching each individual test. Every detail counts.
Moreover, it’s essential to have the right tools for the job. That means you’ll have to make sure all the tools are at your disposal before you start. If you’re testing an app, one of the most important tools you want to get is a bug reporting tool. Don’t waste time writing each bug report individually.
Bug and crash reporting tool for your mobile app.
Not all of your work needs to be done manually. Automating your testing process will increase efficiency. Automation also helps when testing larger features, as you’ll be able to scale up much more quickly than before. Test smarter, not harder.
Last but not least, you’ll want to take multitasking to the next level. Most app testing will require that you try out certain cases on more than one device. This is the perfect chance to implement a systemic approach, testing the same test case on multiple devices at once. That way there’s no need to go over the same case multiple times.
If you’re a tester:
- Take your time and be meticulous.
- Always have the right tools for the job.
- Test smarter, not harder.
- Organize your work and multitask efficiently.
There are also a lot of tips and tricks you’re bound to pick up along the way. QA testing doesn’t have to be boring unless you make it so. Keep an eye out for different variations and edge cases that are bound to pop up sooner or later. Everything you catch at this point is one less thing to worry about later on. Aim for a balance between quality and quantity.
The mobile app checklist
Here’s a detailed list of things to look for when testing your app, divided into categories.
- Have this checklist near at hand
- When filling an input field, use an empty, incorrect or an extremely long input to see what happens in those edge cases.
E.g. sign up with an empty username, try changing an email to the one that doesn’t contain @, or try entering only 10 characters to a credit card field.
- Select the content of the input field and cut, copy and paste it. Does everything work as documented?
- When filling date fields, try inputting a date from the future.
E.g. in Settings, try entering a birthdate that’s in the future.
- In autofill inputs, are the correct suggestions offered?
- Do filters work as per documentation?
E.g. if you select to only see restaurants in your vicinity, other venue types should not be shown.
- Keyboard type changes depending on the field type.
E.g. if the field requires a number, a numerical keyboard should open up, not the default one.
- Check out the properties of all inputs in the app.
E.g. is an input read-only or editable? Is it a single line of text, text area, dropdown, choice (and if so, multi-choice or single-choice), time, date, number etc.
- You can move through form fields with dedicated keyboard buttons(Prev, Next and Done). The last “Done” does its intended action.
- All the input fields might be filled out correctly but the form as a whole doesn’t pass validation. Is everything as per documentation?
- An empty field shows the correct placeholder.
- All fields are correctly populated after the app loads the data.
- Input validation rules are implemented precisely as per documentation.
E.g. a password might be limited to a minimum of 8 characters without spaces and with a minimum of one number and one capitalized letter.
- Are special characters ( š ç ت ñ β Љ Д 我 ယ် ) supported?
E.g. in Settings, change your name to a common French name Naël or Ukrainian name Альберт.
- Are emojis supported?
E.g. try setting status or sending a message “Hey Mark ?♂️”
- Files can be uploaded, edited, renamed and deleted. Everything behaves according to the documentation.
E.g. you can upload, crop and remove your profile picture. Also, always try uploading various filetypes: JPG, PNG, WEBP, SVG, PDF, DOC, DOCX, PAGES, MP3, VAW, MP4, RAR, ZIP and similar. Try uploading a massive file (a few GB) and notice what happens.
- Can files be recovered?
- The list is sorted according to documentation
E.g. some lists should be sorted alphabetically, some chronologically, some by file size etc.
- Zoomable element behaves as specified in the documentation.
E.g. if you zoom out a lot on a map view, the pins don’t remain separate but start clustering together.
- Swipeable element behaves as specified in the documentation.
E.g. on a conversations list screen, if you swipe a conversation left, you get options to Mute and Delete it.
- Drag-and-drop elements can be smoothly moved around and reordered.
- Select multiple elements or rows. Delete or edit items in batches.
App speed, size and backward compatibility
- App load time is under X seconds.
- The app memory and battery usage are within agreed-upon parameters.
- The app size after the install is under X MB.
- The Android app is backward compatible with Android X.
E.g. it has to be compatible with devices running Android 9 or newer.
- The iOS app is backward compatible with iOS Y.
E.g. it has to be compatible with devices running iOS 11 or newer.
- Try out the app on the older Android and iOS versions than that. Is it OK if everything falls apart or does the documentation specify that some critical features should still work?
App flow and state changes
- Test navigation. All buttons and links lead to correct app screens or external websites.
- You receive appropriate emails as per documentation
E.g. when your invitee accepts an invitation, you receive an email about that.
- Data is automatically saved if the app is closed. It’s not lost and can be seen again on the app start.
E.g. you start typing into a chat message input and force close the app. Will the text wait for you?
- How does the flow recover after it’s been interrupted?
E.g. after the signup, you are supposed to go through 4 welcome tutorial slides. You’re looking at the 2nd one and force close the app. When you open the app again, which slide should you be on? Is the behavior as expected?
- Check out all variations of the flow.
- While offline, the screen works as per documentation.
E.g. change the username while the airplane mode is turned on. Will the app allow saving it anyway and sync it later? Or, does it warn you that you can’t do it in the first place because you’re offline?
- The status bar is or isn’t there on screen X, as per documentation.
E.g. if you open a camera when taking a new profile photo, the status bar at the top of the screen shouldn’t be shown (ie. the camera screen should be in a full-screen mode).
- All loading (waiting for a response) and processing behaviours are as specified in the documentation.
E.g. when you select a file to upload to the app, the file appears in the list with an animated spinner next to its name. Then the spinner disappears and the message “Uploading X / Y MB” appears. Eventually, the text changes to either “Uploaded successfully” or “Upload failed”.
- If you change something in the app that should be immediately visible to others, check whether it really is.
E.g. if you start following someone, do they immediately see that you’re following them? If you leave a group, do all the members immediately see that? When you start typing something, does the other person see that in real-time?
- App behaviour when rotating the screen is as specified in the documentation.
- App behaviour when switching between background and foreground is as specified in the documentation.
- The app can be used both on phones and tablets.
Content, descriptions and translations
- The app icon and the app name under the icon are as per documentation.
E.g. the app name should be “Gentoo®”, not “Gentoo”.
- The app description is up to date.
- Social share images and texts are as specified in the documentation.
- Check for typos all across the app.
- Does the UI fall apart in edge cases when the content pulled from the server is longer than usually expected?
E.g. in a fintech app a number of how much money you have is pulled from the server. Let’s say it’s $5,000.00. But what if you have $5,000,000,000.00? Will the UI falls apart, or can it handle those longer numbers, too? Should the font size become a bit smaller in those cases to allow for more numbers? Is everything according to the documentation?
- What do all empty states look like?
E.g. if you expect a list of users to be shown under Friends, what does that screen look like when you have no friends yet?
- Play, pause and stop the video. Change video settings.
- The app is correctly translated to language X.
- The app is correctly translated to language X.
- Activate the account via email link.
- Activate the account via the same link again to see what happens.
- Sign up for a new account, wait for the email link to expire, and then try to activate the account.
- Sign up with an email that’s already been used.
- Sign up using a third-party service.
E.g. sign up with Facebook.
- Sign up with passwords that don’t match.
- Sign up with all combinations of required checkboxes ticked/unticked.
- Sign up with all fields left empty.
Signing in and out
- Sign in manually using an email.
- Sign in using a third-party service and test all the edge cases there, as per documentation.
E.g. sign in with Facebook but do not allow access to your date of birth. Will the app expect mandatory data and run into an error state because of that?
- Are you signed in automatically when the app is started?
- Try to sign in with a wrong username.
- Try to sign in with a wrong password.
- Sign in using two-factor authentication.
- Use the wrong two-factor authentication code and see what happens.
- After X unsuccessful sign ins, does your account get locked? Should it?
- Unlock the account again after successful user validation.
- Sign out from all other devices.
- Sign out from your account.
E.g. should you automatically get redirected to the sign in screen?
- If there is no internet connection, does the app automatically sign you out? Should it?
Forgot password process
- Enter a valid email into the forgot password field.
- Enter a banned email into the forgot password text field.
- Enter a non-existing email in the forgot password text field.
- Change password email received.
- Enter the existing password.
- Enter a valid password.
- Enter an invalid password.
- Enter a password that doesn’t match.
- Successful login with the new password.
- Empty text field X displays placeholder text as per documentation.
- Delete your user account.
- Try purchasing an item. What if there isn’t enough money on the credit card to cover the purchase?
- After a successful purchase, can you immediately access the items you expect to access?
- Downgrade an account from a Premium to Free subscription. Should all the Premium features disappear immediately, or only after the current subscription period expires?
- Notifications are displayed as per documentation and have correct text.
- App notifications can be dismissed or muted.
- The app asks for appropriate permissions at the right moments, precisely as per documentation.
E.g. the app doesn’t ask for the camera permission as soon as the app is installed, but only if and when you tap “Take a photo” on the Settings screen. If you deny the permission, the app shows a modal “To take a photo, you have to allow the camera permission first.“
- App permissions can be modified.
- Elements are placed according to the design specifications.
What’s more important: testing speed or quality?
This one might be a classic dilemma. There’s no right or wrong answer though, as it depends on the situation you’re currently in. If you’re taking things slow and there’s no deadline you’re eager to meet, really taking your time testing is the safest possible solution — but is it the best?
Things move fast in the IT world, and any company would do well to remember that. You either go with the flow or get lost somewhere along the way. That’s something along the lines of Facebook’s original motto: Move fast and break things. Such an approach values speed over stability, but it also embraces the possibility of mistakes along the way.
Breaking stuff can be fun, but how does it affect end-users? Most of the time, very poorly. That’s why any app will have to make certain compromises if they are to be sustainable. Somewhere in the gap between delivery that’s too slow and delivery that’s too fast lies that middle ground that’s worth aiming for when testing. Don’t underpromise and overdeliver, and vice versa.
How to speed up the testing process without losing quality?
- Establish a bulletproof bug reporting process.
- Make sure each test case is well documented and described.
- Include reproduction steps for all issues.
- Estimate the complexity of your work beforehand and try to anticipate challenges.
- Define issue priority and delivery expectations.
Manual vs. automated testing?
Let’s just go ahead and say both. There really isn’t any reason to include any form of tests, however, other factors may come into play. For instance, automated tests require a decent amount of coding knowledge. If you’re missing that, trying to write and implement them may prove quite difficult.
Are automated tests generally a good idea? Well, it depends on the maturity of your product and the size of your team. The other option is manual testing, which takes time but yields very actionable results and insights. In comparison, automated tests will only take you as far as the point where a mistake might occur. In any case, both are valid options depending on the situation you’re in.
Appium An example of an open source mobile app test automation framework.
A lot of work and effort goes into making beautiful and functional apps. Whatever your role might be in creating an app, there’s no skipping ahead when it comes to quality assurance. In fact, it requires both careful planning and resources.
We’ve tested a lot of apps, and one thing is certain. You can never have too many tests. The more ground you cover, the easier it will be down the road. However, watch out for pitfalls like overpolishing or overtesting. They can easily slow the entire project down, so it’s very important to find that middle ground between two possible extremes – speed and quality.