What Is Software Testing?
A friendly introduction to software testing — what it is, why it matters, what a manual tester actually does, and the core ideas every tester should know.
Imagine you order a pizza through a food delivery app. You pick a large margherita, add extra olives, pay with your card, and wait. Forty minutes later a small pepperoni arrives. Somewhere between your tap and your doorbell, something went wrong.
Now imagine that problem happens to ten thousand customers on a Friday night. That is exactly the kind of mess software testing exists to prevent.
What is software testing?
Software testingSoftware testingChecking that software does what it should, and finding problems before real users do.Open in glossary → is the process of checking that an app or website does what it is supposed to do, and finding the places where it doesn’t — before real users do.
The quick version
Why it matters
Bugs cost money, trust and sometimes much more. A banking app that shows the wrong balance, a shopping cart that charges twice, or a login screen that locks everyone out can turn into angry reviews, support calls and lost customers within hours. Finding a problem early is usually far cheaper than fixing it after launch.
What a manual tester does
A manual tester uses the app the way a real person would — tapping, typing, swiping, clicking — and compares what happens with what should happen. They read requirementsRequirementA statement of what the software must do or how well it must do it.Open in glossary →, write test casesTest caseA written set of steps, data and an expected result used to check one specific behavior.Open in glossary →, run them, and write clear bug reportsBug reportA clear written description of a bug so developers can reproduce and fix it.Open in glossary → when something is wrong.
Three words people mix up
- ErrorErrorA human mistake, such as misunderstanding a requirement, that introduces a defect.Open in glossary → — a human mistake (a developer types the wrong number).
- DefectDefectA flaw in the code or documentation that can make the software fail.Open in glossary → (or bugBugA problem in the software that makes it behave differently from what is expected.Open in glossary →) — the flaw that mistake leaves in the product.
- FailureFailureWhen the software visibly does something wrong while it is running.Open in glossary → — what the user actually sees when that flaw is triggered (the app crashes).
Manual vs automated
Manual testing means a human performs the checks. Automated testing means code performs them. Both are useful: humans are great at spotting confusing screens and odd behavior; scripts are great at repeating the same checks thousands of times. This site focuses on manual testing.
Why testing matters
Software is written by people, and people make mistakes. Testing is how a team catches those mistakes while they are still cheap and private, instead of expensive and public.
Some real failures
A few well-known examples show how far a small mistake can travel:
- Mars Climate Orbiter (1999). Ground software from one team produced thruster data in imperial units (pound-force seconds), while the navigation software of another team expected metric units (newton-seconds). The mismatch went unnoticed, the spacecraft flew far too close to Mars, and the mission was lost.
- The CrowdStrike outage (July 2024). A faulty configuration update to a widely used security product made Windows computers crash and get stuck restarting. Microsoft estimated that about 8.5 million devices were affected. Airlines, hospitals, banks and broadcasters were disrupted around the world.
You probably won’t test spacecraft. But the same idea applies at every scale.
Everyday app examples
Each of these costs something: money, support time, app store ratings, and — hardest to win back — trust.
What a manual tester does day to day
There is no single “typical day”, but most manual testers spend their time on a mix of these:
- Reading and questioning requirements. Going through user storiesUser storyA short description of a feature from the user's point of view.Open in glossary → and acceptance criteriaAcceptance criteriaConditions a user story must meet to be considered done and accepted.Open in glossary → and asking “what happens if…?” before any code is written.
- Designing tests. Turning requirements into test scenariosTest scenarioA high-level idea of what to test, such as 'User resets a forgotten password'.Open in glossary → and detailed test casesTest caseA written set of steps, data and an expected result used to check one specific behavior.Open in glossary →.
- Running tests. Installing the latest buildBuildA specific compiled version of the app or website that is ready to be installed or tested.Open in glossary → on phones, tablets and browsers and working through the checks.
- Exploring. Doing exploratory testingExploratory testingLearning, designing and running tests at the same time, guided by curiosity and a goal.Open in glossary → — using the app freely and curiously to find problems nobody thought to write down.
- Reporting bugs. Writing clear, reproducibleReproducibleA bug that happens again every time you follow the same steps.Open in glossary → bug reportsBug reportA clear written description of a bug so developers can reproduce and fix it.Open in glossary → so developers can fix issues fast.
- Re-checking fixes. RetestingRetestingRunning the same test again to confirm that a reported bug is really fixed.Open in glossary → fixed bugs and running regression testingRegression testingRe-running tests to check that new changes didn't break things that used to work.Open in glossary → to make sure nothing else broke.
- Talking to people. Joining stand-ups, pairing with developers, and helping product owners decide what is ready to ship.
Error, defect, failure: three different things
These words get used interchangeably in casual chat, but in testing they mean different things. They form a chain:
| Word | What it is | Banking app example |
|---|---|---|
| ErrorErrorA human mistake, such as misunderstanding a requirement, that introduces a defect.Open in glossary → | A human mistake | A developer writes “greater than” instead of “greater than or equal to” in the transfer limit rule. |
| DefectDefectA flaw in the code or documentation that can make the software fail.Open in glossary → / BugBugA problem in the software that makes it behave differently from what is expected.Open in glossary → | The flaw that mistake leaves in the code (or document) | The app now rejects transfers of exactly $1,000, even though $1,000 is allowed. |
| FailureFailureWhen the software visibly does something wrong while it is running.Open in glossary → | What happens when the defect is triggered | A customer tries to send $1,000 and sees “Amount exceeds daily limit”. |
QA vs QC vs testing
You will see these three terms on job ads, often used as if they mean the same thing. They overlap, but they are not identical.
- Quality assurance (QA)Quality assuranceActivities that improve the process of building software so fewer defects get made in the first place.Open in glossary → is about the process. It aims to prevent defects: good requirements, code reviews, clear definitions of “done”, agreed ways of working.
- Quality control (QC)Quality controlChecking the finished product for defects; testing is the main quality control activity.Open in glossary → is about the product. It aims to find defects in what has been built, by checking it against requirements.
- TestingSoftware testingChecking that software does what it should, and finding problems before real users do.Open in glossary → is the hands-on activity of checking the product: mostly by running it, but also by reviewing documents and designs without running anything (static testing). It is the main tool of quality control.
In practice, a “QA tester” job usually involves mostly testing, with some QA work like reviewing requirements and suggesting process improvements.
The seven testing principles
These seven ideas come from the ISTQB (International Software Testing Qualifications Board), whose Foundation Level is one of the most widely recognized testing certifications. The wording below is ours; the ideas are theirs. They sound abstract at first, but each one describes something you will run into on a real project.
- Testing shows that defects are present, not that they are absent. Testing can prove a bug exists. It can never prove there are zero bugs. “We tested it and found nothing” means “we didn’t find anything with the tests we ran” — not “it’s perfect”.
- Exhaustive testing is impossible. A simple sign-up form with a name, email, password and country could be filled in billions of ways, on hundreds of devices. You can’t test them all, so you choose wisely using risk and techniques like equivalence partitioningEquivalence partitioningSplitting inputs into groups that should behave the same, then testing one value from each group.Open in glossary → and boundary value analysisBoundary value analysisTesting values at and just around the edges of valid ranges, where bugs love to hide.Open in glossary →.
- Early testing saves time and money. A missing rule caught while reading a user story costs a five-minute conversation. The same problem found after release can cost a hotfix, an app store review and a lot of unhappy users.
- Defects cluster together. Bugs are not spread evenly. A small number of areas — often the most complex ones, like payments or syncing — tend to hold most of the problems. When you find one bug, look around: its friends are often nearby.
- Tests wear out (the pesticide paradox). If you run exactly the same tests over and over, they stop finding new bugs — just like insects become resistant to the same pesticide. Keep reviewing and refreshing your tests, and mix in exploratory testing.
- Testing depends on context. Testing a banking app is different from testing a casual game. The banking app needs heavy focus on security and accuracy; the game needs more focus on performance and fun. There is no one-size-fits-all approach.
- The absence-of-defects fallacy. (Older syllabus versions say “absence-of-errors”.) An app can pass every test and still fail if it solves the wrong problem or is painful to use. A bug-free checkout flow that takes nine screens to buy a T-shirt is still a bad product.
Manual vs automated testing
Both are real, valuable jobs. They are good at different things.
| Manual testing | Automated testing | |
|---|---|---|
| Who runs the check | A human | A script or tool |
| Great for | New features, usability, exploratory testing, visual checks, “does this feel right?” | Repetitive checks, large regression suites, running the same test on many devices, every build |
| Weak at | Repeating the same 500 checks every day without getting tired | Noticing that a button is ugly, confusing or in the wrong place |
| Setup cost | Low — you can start today | Higher — someone has to write and maintain the code |
Where testing fits in development
Software is built in a sequence of stages called the software development life cycle (SDLC)Software development life cycleThe stages software goes through, from idea and requirements to release and maintenance.Open in glossary →: requirements, design, development, testing, deployment, maintenance. Testing has its own matching life cycle, the STLCSoftware testing life cycleThe phases of testing work, from analyzing requirements to closing the test cycle.Open in glossary →. Both are explained in SDLC and STLC.
In older “waterfall” projects, testing happened near the end. In modern AgileAgileA way of building software in small, frequent increments with constant feedback.Open in glossary → teams, testing happens all the time: testers review stories before a sprintSprintA short, fixed period (often two weeks) in which a team builds and tests a set of work.Open in glossary → starts, test features as soon as they are built, and keep checking until release.
Testing also happens at different levels, from small to large:
- unit testingUnit testingTesting the smallest pieces of code, like a single function, usually by developers.Open in glossary → — developers check tiny pieces of code.
- integration testingIntegration testingTesting that different parts of the system work correctly together.Open in glossary → — checking pieces work together (for example, the app and its APIAPIThe way different software parts talk to each other, like an app asking a server for data.Open in glossary →).
- system testingSystem testingTesting the complete, integrated product as a whole against its requirements.Open in glossary → — checking the whole app end to end. This is where most manual testers work.
- acceptance testingAcceptance testingTesting whether the product is ready to be accepted by the customer, users or business.Open in glossary → — checking the app meets the business and user needs, sometimes done by real users as user acceptance testingUser acceptance testingReal users or business people checking the product meets their needs before release.Open in glossary →.
We go deeper into each of these in Levels of Testing.
Mobile vs web testing at a glance
The core skills are the same, but each platform brings its own surprises.
Mobile apps run on a huge variety of phones and tablets. Things to think about:
- Device fragmentationFragmentationThe huge variety of device models, screen sizes and OS versions an app must support.Open in glossary → — different screen sizes, OS versions and manufacturers (especially on Android).
- Interruptions — phone calls, notifications, switching apps, the screen locking.
- Network changes — Wi-Fi to mobile data, tunnels, airplane mode.
- Hardware — camera, GPS, fingerprint and face unlock, battery saver.
- Gestures — swipes, long presses, pinch to zoom, and finger-sized touch targetsTouch targetThe area of the screen that responds to a tap, which should be large enough for a finger.Open in glossary →.
- Testing tools — a mix of emulatorsEmulatorSoftware that imitates a real device's hardware and OS on your computer, like the Android Emulator.Open in glossary →, simulatorsSimulatorSoftware that imitates a device's behavior on your computer, like Apple's iOS Simulator.Open in glossary → and real devicesReal deviceA physical phone or tablet used for testing, as opposed to an emulator or simulator.Open in glossary →.
Websites run in many browsers on many screen sizes. Things to think about:
- cross-browser testingCross-browser testingChecking a website works and looks right in different browsers and browser versions.Open in glossary → — Chrome, Safari, Firefox and Edge don’t always behave the same.
- responsive designResponsive designA website layout that adapts to different screen sizes, from phones to large monitors.Open in glossary → — the layout should work on a phone, a tablet and a wide monitor.
- Browser behavior — back and forward buttons, refreshing mid-checkout, multiple tabs, bookmarks.
- Forms and links — validation, broken links, keyboard navigation.
- DevToolsDevToolsDeveloper tools built into browsers for inspecting pages, network traffic and errors.Open in glossary → — built-in browser tools that let you inspect elements, see network calls and simulate slow connections.
What you will learn on Bugwise
This site takes you from “what is a bug?” to “ready for a junior QA interview”, one practical step at a time:
- Fundamentals — the core ideas, vocabulary and processes every tester needs.
- Tutorials — hands-on skills like writing test cases and writing bug reports.
- UI components — how to test real building blocks like a segmented control, with interactive “find the bug” demos.
- Mobile and web — platform-specific tips and traps.
- Glossary — every term on the site in plain English. Hover over any dotted term (like edge caseEdge caseAn unusual situation at the extreme of what the software should handle.Open in glossary →) to see a quick definition.
- Interview prep — common questions with model answers.
Check your understanding
Quick quiz
0/5 answered · 0 correct
1.A developer forgets to handle an empty address field. Later, a customer checks out with no address and the order fails. Which part of that story is the failure?
2.Your team ran 300 tests and found no bugs. What can you honestly say?
3.Which activity is the best example of quality assurance (QA) rather than quality control (QC)?
4.Why can't you test every possible input and device combination?
5.Which task is a better fit for manual testing than for automation?
Key takeaways
- Software testing means checking that an app does what it should, and finding problems before real users do.
- Bugs cost money and trust; finding them early is usually much cheaper.
- An error (human mistake) causes a defect (flaw in the product), which can cause a failure (what the user sees).
- QA improves the process, QC checks the product, and testing is the hands-on activity of checking.
- Testing can’t prove an app is bug-free, and you can’t test everything — so you choose tests wisely.
- Manual and automated testing complement each other; manual testers bring judgment, curiosity and a user’s eye.
Finished this page?Nice work, this page is complete!
Mark it as done to track your progress. It's saved in this browser, no account needed.
Its review cards are now in Bites ⚡