In this article, we'll share 11 common reasons why app crashing happens and walk you through some tips and tools for avoiding them.
Manual software testing vs. automation: what’s the right approach?
On September 21, 1997, the United States Navy cruiser USS Yorktown suddenly came to a screeching halt during a training exercise. It sat off the coast of Virginia, unable to move for almost three hours.
The reason? A technician mistakenly entered a zero in the ship’s database. The system tried to divide by zero and crashed, taking the ship’s propulsion with it.
It’s a simple illustration of how a small error can bring down an entire system.
That’s why testing is such a vital part of any software project. Without it, you risk bugs and errors ruining the user experience.
Fortunately, developers now have access to various testing tools and methodologies, from manual to automated. But which one is better? Let’s explore a bit.
What Is Software Testing?
Software testing is a comprehensive evaluation of an app, website, or software to ensure it’s ready for the end-user.
While the usual intention is to find bugs and errors, that’s not the only purpose of testing.
The process also verifies if the software’s output aligns with the vision and objective of the project. In other words, whether it’s doing what it’s supposed to do.
The testing process is often the last step in the Software Development Life Cycle (SDLC) before deployment.
However, some methodologies, such as Agile, perform it from the beginning and throughout development.
Testing might sound simple in principle, but it’s often a complex affair.
Every scenario must be explored, and all parts of the code stress-tested with as many variables as possible.
The bigger the software project, the more complicated testing becomes.
To help testers streamline the process, they can use various automated and manual testing tools.
You’ll decide when to use one over the other depending on your project’s nature, complexity, and budget. We’ll talk about that more in a later section.
But first, what makes testing so important?
Why Is Software Testing Important?
Software testing ensures that the final software is as reliable, functional, and safe as possible.
The reality is that it’s impossible to produce software that’s 100% defect-free, no matter how good the development team is.
Even a big company like Apple isn’t immune to this fact—in 2014, they had to pull out their iOS 8 update hours after release due to critical glitches.
So, if you don’t have a formal process to catch bugs or errors, they will go undetected.
For most software projects, this will lead to a bad user experience.
Errors and crashes in an app are enough to cause most people to uninstall it entirely, negatively impacting your retention rate.
At the very least, it will reflect poorly on your company or brand.
Moreover, for many critical industries like finance and aviation, even minor errors can be catastrophic and astronomically expensive.
Take, for example, the glitch suffered by the Royal Bank of Scotland (RBS).
Back in June 2012, 6.5 million of its customers got locked out of their bank accounts due to a botched system upgrade. The bank subsequently got fined £65 million for the incident.
Even that is nothing compared to the loss of human lives when a plane encounters a critical computer error.
There are many tragic examples throughout history, but the most notable one is the faulty software of the Boeing 737 Max Jet that led to two crashes, killing 346 people in 2019.
These examples bring up another vital point—software testing shouldn’t be a one-time thing.
Even after you release your app or system, you should still continually check for bugs and errors, especially if you’re releasing updates regularly.
So far, we’ve painted a gloomy picture of what happens when you don’t do enough software testing. Now let’s go over the ways testing benefits your product.
What Are the Benefits of Software Testing?
There are multiple benefits of testing your product thoroughly, but the most important are improved safety and overall quality of the product, as well as reduced costs.
Let’s go over each of them in more detail.
It goes without saying that testing leads to safer software. Checking your software system for hacks, antivirus, and malware ensures that it’s secure for your users.
With increasing threats from cyberattacks and malware, security is now the foundation of a great user experience.
Security testing is especially crucial if your app or system connects to an outside network or handles private data. Both of these scenarios have vulnerabilities that cyber attackers can exploit.
Many testing methodologies help beef up your software security, such as penetration testing. This is where you intentionally try to hack your software to discover vulnerabilities.
By prioritizing your security with software testing, you can gain your users’ trust and confidence.
Software testing ensures that you’re delivering a quality experience to your users.
It enables you to catch errors that will impact usability, such as app crashes.
Just imagine the frustration a user will feel if a ride-hailing app goes down while booking a ride to the airport.
Testing is also designed to help protect your app from the user themselves, in case of improper use.
A critical part of testing is to check for all possible inputs and actions, no matter how unlikely or absurd.
In the USS Yorktown example, the division-by-zero error could’ve been prevented if the testers thought of entering a zero during testing.
Testing is an essential money-saving tool for your project. By helping you catch errors early on, it prevents costly product recalls, fixes, or even lawsuits.
Many startups and small development agencies skip testing, citing that they don’t have the funds or workforce to do it.
However, the reality is that by NOT testing, it will cost them much more if bugs are found later on.
You know the saying, “prevention is better than cure?” It’s the same with software development.
The rule of thumb is that fixing a mistake gets more expensive the further it is in the development cycle.
Studies show that bugs cost at least 30X more to fix during maintenance and deployment than in the design stage.
The bottom line is that testing helps both the development team and the finance department.
Stages of Software Testing
Due to its complexity, software testing is broken down into stages.
Generally, the beginning phases test only a tiny part of the code, eventually increasing the scope to the whole program towards the latter stages.
Unit testing is the foundation of your testing regimen. It verifies that individual code sections, functions, and classes work flawlessly and are error-free.
This testing stage is often done manually by the developers whenever they change something in the code, or before passing it on to the next phase.
However, increasingly, the process is automated, especially when adopting Agile and DevOps methodologies.
Once each component of the program is working, the next step is to test all components while they’re connected to each other. This is called integration testing.
The goal of integration testing is to check the interoperability of program parts and catch any bugs that might arise.
You’ll also begin to see if specific features of your software are working as intended at this stage. Integration testing uses both manual and automated tools and methodologies.
System testing refers to verifying the whole “working” program with all the components in place.
At this stage, the goal is not only to see if the software is functional but also if it’s performing optimally.
This testing phase also compares the system with the business and project requirements to ensure it’s doing what the client or company intended it to do.
Regression testing is crucial when developing bug fixes, updates, or modifications on later software versions.
This procedure is essential because you’ll never know the effect code changes have on the software until you test it.
In this phase, testing scenarios from previous releases will be rerun to ensure the program still meets them even after introducing changes to the code.
The goal is to prevent the software from regressing or causing failures that were otherwise not present in the previous release.
Acceptance testing is the final stage. It’s also often the most rigorous because it’s the last chance to fix things before the software goes live.
One of the most well-known types of acceptance testing is known as beta testing.
Like the previous phase, the software will be tested against the same technical, functional, and business requirements. However, this time, the end-user gets involved.
Games, for example, will recruit a group of gamers to act as beta testers. For corporate software, selected employees might get involved.
The aim is to evaluate the user-friendliness and stability of the software from the customer’s perspective.
You’ll also know if the software is solving their problems or fulfilling their needs.
Manual Software Testing Overview
Manual testing is the simplest and most “low tech” form of software testing because it uses no automation tools.
Instead, everything is executed and evaluated by a human tester.
Despite its primitive nature, manual testing is a methodology that every software project uses.
How It Works
All software testing, whether manual or automated, starts with test cases.
These are the set of inputs, parameters, conditions, and actions used to evaluate a specific function or result of the software.
For example, a test case for an app login feature would be to enter a valid username and password to check if the login function works.
Another test case would be to supply an invalid username and/or password to verify error checking.
Pros of manual testing
- More thorough evaluation of the end user’s perspective
- Gathering insights a computer might miss
- Testing how user-friendly the app is
- Allows on-the-fly adjustments in the testing strategy
Cons of manual testing
- Possibility of human error in the input and testing process
- Attention slips and oversights
- Requires highly developed analytical skills
- Time-consuming and labor-intensive
With manual testing, these test cases are carried out by human testers.
The results of these tests are then documented and compared against the expected results to see if they match. If they don’t, it’s flagged as a bug.
The task of writing and designing test cases usually falls on the QA team, product manager, or the tester, depending on the size of the project.
The Pros of Manual Testing
Both the advantages and disadvantages of manual testing stem from the human element.
On the one hand, human testers can be much more thorough with their testing. They can interact with the software just like an end-user would, something that automation can never simulate 100%.
Manual testers can also pick up on insights during testing that a computer will easily miss.
One example of this is testing whether an app is user-friendly or not. Since it’s a subjective element that relies on human behavior and emotion, it cannot be fully automated.
Human testers can also change testing strategies on the fly.
If a test case is not as effective, manual testers can adjust the parameters to get a more accurate result. In contrast, automated test scripts are rigid and difficult to change once executed.
The Cons of Manual Testing
On the other hand, the human element can also introduce human errors in the testing process.
Testers can enter the wrong input or not follow the test case to the letter, making the results unreliable.
Add to the fact that manual testing can get boring and repetitive, and there’s a good chance testers’ attention can slip over time.
Manual testing is also challenging and requires analytical skills, contrary to what most people think.
It’s also incredibly time-consuming and labor-intensive, requiring testers to go through hundreds of test cases to evaluate a software properly.
Tools for Manual Testing
Luckily, there are tools available that can speed or assist testers. Among the most popular tools is Shake.
Shake is a bug reporting tool for mobile apps which helps mobile developers and testers in the debugging process. It can be added to your Android, iOS, React Native, and Flutter apps.
They offer one free-forever, and one paid plan. That paid plan allows you to then collect unlimited feedback from your app testers and users, both internally and in production.
After a tester submits the bug, Shake grabs every single detail that could help an app developer to fix the bug efficiently.
The developer will receive the tester’s phone model and OS, tester’s OS memory and storage details, carrier and WiFi details, battery status, timezone and locale, app version and build number, screen resolution, and pixel density, custom metadata added by the developer, and much more.
When to Use Manual Software Testing?
Despite being tedious and time-consuming, some form of manual testing is always a part of every software project.
It often forms the foundation that verifies the results of automated testing.
That’s because testing can never be 100% automated. No automation tool can check for every possible test case and scenario, nor can it simulate the nuances of human judgment.
Subjective aspects of the software, like usability, can only be tested manually.
As mentioned, computers and algorithms can’t judge if user interface elements are placed intuitively or if the color scheme is visually pleasant.
Automated testing also requires development skills, scripting knowledge, and enough time to design automated test cases.
Smaller projects with limited resources or no access to qualified QA professionals will do better with the more time-efficient manual testing.
Finally, it’s best to do the final testing of software manually before it’s released.
Not only is designing an automated test script time-consuming for this purpose, but evaluating the user experience through acceptance and beta testing requires a human element as well.
Automated Software Testing Overview
Automated testing uses specialized tools to execute specific testing procedures.
Automation is done with a test script, which tells the tool which actions to take and the results to evaluate.
How It Works
Like manual testing, automated testing also starts with test cases.
However, instead of executing it themselves, testers will translate it into a test script.
Pros of automated testing
- Speed and precision in executing test cases
- Repeatability, reusability, and objectivity
- Enables testing during the development process
- Simplifies collaboration in larger teams
- Saves time, money, and effort
Cons of automated testing
- Software can encounter errors or fail to run a test correctly
- Subject to human error in the input or setup stage
- Requires substantial investment in tools and QA staff
This code tells the testing tool how to run the test—which actions to take, values to input, conditions to consider, and results to evaluate.
Once ready, the tester runs the script and monitors the results. The automation tool will then perform each test case, automatically reporting bugs and results as it goes.
The Pros of Automated Testing
The biggest advantage of automated testing is that it’s faster and more precise in executing test cases.
As a result, it potentially uncovers more bugs and delivers more accurate results than a human can, even after repeated tests.
One of the most valuable features of automated testing is repeatability and reusability.
A script can run multiple times to validate the consistency of test results.
It’s also incredibly beneficial for developers during the early stages, as it can automatically test their code as they’re working.
Automated testing is also best for collaboration among larger teams, as results are easier to share than with manual testing.
Most of all, automated testing can save time, money, and effort, especially for large software projects.
The Cons of Automated Testing
For all its benefits, automated testing is not 100% foolproof.
Like any piece of software, it can still encounter errors or fail to run a test correctly. Mainly, this stems from human errors when testers write the script itself.
Automated testing is also a substantial investment. Not only do you need to buy automation tools, but you also need to hire the right QA professional with knowledge of scripting and development.
Tools for Automated Testing
You have many options for automation tools, and part of the success of your testing approach is to select the right one.
Selenium is one of the most popular automation tools for web applications.
One of its many benefits is that it supports various web languages for scripting tests, such as PHP, Perl, and Java.
When to Opt for Automation?
Despite what most people think, not at all tests can be automated.
Some are simply impossible to automate (like beta testing or usability testing), while others cost too much time and money.
To know when to opt for automation, a test must fulfill the following three criteria.
One, it must be repeatable. It’s simply not worth the time and effort to automate a test that’s meant to run only once.
Second, it must be objective.
Automated testing is best for objective results, such as performance and regression tests. That means subjective tests like usability or requirements testing are out of the picture.
Lastly, it must be determinant. The results of a test must be the same, given the same input.
If you get a random output every test run, it will not be easy to form conclusions on the results.
With that being said, the time and financial investment required is an essential factor when choosing whether to automate your tests.
Generally, automation only makes sense for larger software projects.
So, What’s the Right Approach?
The quick answer is: both are.
Manual and automated approaches deal with different aspects of testing. Thus, they are not in competition with each other.
The key is to play to both their strengths.
Automate the repetitive testing procedures, then save everything else to a human tester.
By integrating the two, you’ll have a much more comprehensive regimen that delivers a polished, bug-free product.
We hope this article has armed you with the information to design the best software testing approach for your project.