What Is Software?
Software is the set of instructions and information that makes a computer, phone or other device do a job. When you order food in an app, software shows the menu, calculates the total, takes the payment and passes the order to the restaurant. For a tester, software is more than code: it is a program, the data it works with and the configuration that controls it, running on layers of other software and hardware.
Why it matters
You cannot test well what you cannot describe. A wrong total on a checkout screen may come from the screen, a business rule on the server, a price in the database, or a setting that differs between the test and live systems. Knowing the parts lets you say where a problem appears and ask the right person.
The cost of a problem also depends on where it sits: a cut-off label annoys users, while a tax rate set too high in the configuration overcharges every customer from the moment it is deployed.
Programs, data and configuration
Every running system combines three kinds of material that change at different speeds. The same program can behave differently with other data or configuration: a checkout that works in the test environment can fail in production because production uses another payment service, or because real data holds a longer product name than any test data. So record the version, the data and the environment with every test result.
- Program (code): instructions that developers write and build into something that runs, such as the code that adds VAT to an order. It changes only with a new release.
- Data: the information the program works on and keeps, such as customers, products, prices and orders. Users change it all day, with no new release.
- Configuration: settings that change behaviour without changing code, such as the tax rate, the payment service address or the session timeout. It usually differs between environments, for example test and production.
PROGRAM total = subtotal + round(subtotal * vat_rate, 2)
CONFIGURATION vat_rate: 0.15
payment_service: https://payments.test.example.com
session_timeout_minutes: 30
DATA {"sku": "1042", "name": "Arabic coffee 250 g", "price": 38.00}Types of software you will test
The type tells you where the software runs, how it reaches users and which risks matter. Many products combine several: a bank may run a website, mobile apps, an API for partners and software in its card terminals.
- Web applications run in a browser and load their pages from a server. Users install nothing, but each page must work across browsers, screen sizes and languages.
- Mobile apps are installed on Android or iOS devices and must cope with many device models, permissions, interruptions such as calls, and weak networks.
- Desktop applications are installed on Windows, macOS or Linux, like the point-of-sale program at a shop counter. Installation, updates and local printers become part of testing.
- APIs and services have no screen: other programs call them over a network, as a shop calls a payment service. You test them by sending requests and checking the responses.
- Embedded software runs inside devices such as card terminals and smart meters, often with limited memory and always on real hardware. Updating devices in the field can be slow or hard, so a defect that reaches them is expensive to fix.
The layers of a typical web application
Most business software splits its work into layers, each with one job. Teams name them differently (presentation, application and data tiers; client and server), but a typical web application has these four. A mobile app usually shares the same back end, database and infrastructure; the app itself is another front end.
- Front end (presentation): web pages in the browser or the screens of an app. It shows information, collects input and makes first checks such as "this field is required". A tester checks layout, wording, input handling and messages.
- Back end (application logic): programs on servers that apply the business rules, such as prices, VAT, stock and permissions. The front end calls it with HTTP requests to an API. A tester checks rules and calculations, through the screen or the API.
- Database (data): keeps records such as customers, products and orders after the user leaves. A tester checks that the right records were saved, changed or deleted, and nothing else.
- Infrastructure: servers or cloud services, operating systems, networks, domain names, certificates and each environment’s configuration. A tester records which environment and version were tested.
Requests go down from the front end to the back end and the database; responses come back up
At the layer “Front end”: Seen by the userAt the layer “Infrastructure”: Out of the user’s sight
- 1Front endWeb pages in the browser or the screens of an app: shows information, collects input, makes first checks
Tester checks layout, wording, input handling and messages
- 2Back endPrograms on servers that apply the business rules: prices, VAT, stock, permissions; called with HTTP requests to an API
Tester checks rules and calculations, through the screen or the API
- 3DatabaseKeeps records such as customers, products and orders after the user leaves
Tester checks that the right records were saved, changed or deleted, and nothing else
- 4InfrastructureServers or cloud services, operating systems, networks, domain names, certificates and each environment’s configuration
Tester records which environment and version were tested
Layer names vary by team: some say presentation, application and data tiers, others client and server.
Worked example: one order through every layer
A customer buys two packs of coffee at 38.00 SAR each and taps "Place order". The front end and the back end exchange HTTP requests and responses, whose meaning is defined in RFC 9110.
The customer sees only steps 1 and 6. Everything between them happens out of sight, so a confirmation on the screen does not prove that the order was stored correctly.
1 Front end checks that the address is filled in, then sends the order
2 Request POST https://shop.example.com/api/orders
{"items": [{"sku": "1042", "qty": 2}]}
3 Back end checks stock; 2 x 38.00 = 76.00; VAT 15% = 11.40; total = 87.40
4 Database saves order 55031 with its line; reduces the stock of 1042 by 2
5 Response 201 Created {"orderId": 55031, "total": "87.40"}
6 Front end shows the confirmation: order 55031, total 87.40 SAR
Underneath infrastructure: servers, network, certificate of shop.example.comTry it: URL Parser Try it: HTTP Status Code Lookup Try it: JSON Formatter
People build software, and people make mistakes
Every part of that order was written or set up by someone. People misread requirements, forget a case, type 0.51 instead of 0.15, or build two parts that each work alone but disagree. Defects are a normal result of building complex things, not a sign of a careless team.
In ISTQB terms, a person makes an error (a mistake) that can produce a defect (also called a fault or bug) in the code or in another work product, such as a requirement or a configuration file; executing the defective part can cause a failure. A later lesson covers these terms. In the coffee order, each layer can hide its own defect while the customer sees only the screen:
- Front end: a double tap sends the order twice.
- Back end: VAT is calculated on the wrong amount.
- Database: the order is saved without its line.
- Infrastructure and configuration: the test environment points to the live payment service.
Common mistakes
- Treating software as only code and ignoring data and configuration, which can break a system without any code change.
- Judging the system by the screen: "Order confirmed" does not prove that the order was saved correctly.
- Reporting a problem without the environment, version, device and test data you used.
- Testing every type of software the same way, although a mobile app, an API and an embedded device have different risks.
- Treating a defect as proof that someone was careless rather than a normal result of building complex systems.
The QA perspective
On a new project, draw the system early: the front ends (web, Android, iOS), the back-end services and APIs they call, the databases and outside services, and the environments. Ask a developer to correct the drawing; it becomes your first map of where tests are needed and who owns each part.
In every bug report, name the layer where you saw the problem and the context that identifies the program, data and configuration: environment, build or app version, browser or device, test account and data, and the time. A developer can then go straight to the right logs.
Practice exercise
Classify the parts of a clinic booking system
A clinic lets patients book appointments on its website and sends SMS reminders. Classify each item in list A as program, data or configuration, and note which items differ between test and production. Then, for each problem in list B, name the layer you would examine first and one question you would ask the team.
A. Parts of the system
1. The code that blocks a third future appointment for the same patient
2. The list of doctors, their specialties and their working hours
3. cancellation_hours: 24
4. Every appointment that patients have booked
5. sms_service: https://sms.test.example.com
6. The code that sends a reminder SMS one day before an appointment
B. Problems reported
1. On a phone, the "Book" button is hidden behind the on-screen keyboard.
2. A patient managed to book a third future appointment.
3. Reminders arrive in the test environment but never in production.
4. The site said "Booked", but the appointment is missing the next day.- For each item in list A, ask: is it instructions (program), information the program works on (data), or a setting that changes behaviour without new code (configuration)?
- Mark the items whose content is different in the test and production environments.
- For each problem in list B, note where the symptom appears, then which layer could produce it.
- Write one question per problem for the person who owns that layer.
Show the model answer
List A: 1 program, 2 data, 3 configuration, 4 data, 5 configuration, 6 program. Item 5 certainly differs between test and production, item 3 may, and so does the data in items 2 and 4: production holds real doctors and appointments.
List B: 1 front end, the layout with the keyboard open; ask which screen sizes the page must support. 2 back end, the rule in item A1; ask whether the limit is checked on the server or only on the screen.
3 configuration and infrastructure: the program is the same in both environments, so check what differs, such as sms_service; ask what the production configuration contains. 4 database and back end: check whether the record was saved and later changed or removed; ask for the record and the server logs at the time of booking. If it was never saved, also check whether the front end showed "Booked" although the back end returned an error.
Frequently asked questions
Is configuration really part of the software?
Yes. Configuration is delivered with the program or set separately in each environment; the program reads it while running, and it changes the program’s behaviour, so it can contain defects too. A wrong setting can break a correct program, which is why a configuration change needs testing just like a code change.
Do I need to know programming to understand these layers?
No. You need to know what each layer does and how to observe it: the screen for the front end, requests and responses for the back end, stored records for the database, and environment details for the infrastructure. Later modules teach each of these with tools.
What is the difference between an API and a back end?
The back end is the program on the server that applies the rules. An API is the interface it offers to other programs: the requests it accepts and the responses it returns. The front end uses the back end through its API, and a mobile app or a partner system can use the same API.
References
- ISTQB Certified Tester Foundation Level (CTFL) v4.0The foundation syllabus of software testing: test levels and types, test design techniques, test management and tools.
- ISTQB GlossaryThe standard definitions of testing terms — test case, regression testing, severity, priority, boundary value analysis and the rest.
- RFC 9110: HTTP SemanticsThe meaning of HTTP methods, header fields, status codes and content negotiation, independent of the wire version.
- Overview of HTTP — MDNHow HTTP works: a stateless client–server protocol in which the client sends a request and the server answers with a response message.
Practise with Mutqan tools
Break a URL into protocol, host, port, path, query parameters, fragment and credentials.
Look up any HTTP status code with its meaning, RFC reference and when to use it.
Format, beautify and validate JSON instantly in your browser with custom indentation.
Explore JSON as a collapsible tree with paths, types and value counts.
Format and validate YAML with consistent indentation and quoting.
Parse User-Agent strings into browser, version, engine, OS, device type and bot detection.
Go deeper
Your progress on this topic
Not started
Mark the topic complete when you have studied it and done the exercise.
Sign in to track your progress
Mark topics complete, continue where you left off and unlock specialisation exams.
Part of the QA Roadmap
Before this topic
No prerequisites: this is a starting point.