Skip menu, go to main content

Software testing and quality assurance

Software testing means running software under controlled conditions to find defects before users do. At ALODEV, testing is part of every project: a test environment separate from real data, automatic checks with positive controls, a gate before code enters the history, and releases that can be rolled back with one command. We also review and test systems built by other teams.

Summary

Environment
Separate test environment with sample data
Automatic checks
Units, API, permissions, interface
Measuring tools
Verified with positive controls
Gate
Pre-commit hook inside the code repository
Release
Checked on a side port before switching, one-command rollback
After handover
Warranty per contract

Test levels

The five levels we use
LevelWhat is checkedWhoWhen
Unit testingOne function or calculation rule (pay, tax, price)The engineer writing the codeOn every change, automatically
Integration testingAPI, database, permissions, outside connectionsThe engineer writing the codeBefore merging into the shared branch
System testingWhole business flows on the test environment, at several screen sizesSomeone who did not write that partEnd of each two-week iteration
Acceptance testingThe system on real data meets the signed requirementsThe client, with our supportEnd of each stage
Regression testingOld features still work after new ones are addedAutomaticEvery release

The later a defect is found, the more it costs. A wrong pay rule caught by a unit test takes minutes to fix; one that reaches a real payroll means recalculating, explaining it to staff and correcting stored data. So most testing effort goes into the first two levels, and the last two focus on what a machine cannot answer: does the software match how the business actually works.

How we test

These are the methods we use every day on our own internal system and website, and the same ones we apply to client projects.

A separate test environment, with the live system read-only

Each system has two copies: the live one serving real users, and a test copy with its own database of fake sample data. Anything that writes data is tried on the test copy. On the live system, engineers only read while investigating a defect. Clients review each iteration on this test environment, so they never have to test on their own real data.

Automatic tests for calculation rules and permissions

The most error-prone part of business software is calculation: pay, insurance, tax, commission, dealer pricing. Each rule has test cases with hand-calculated answers, including edge cases such as contribution ceilings, public holidays next to weekends and leap years. Permissions are tested by calling each API route with an account that lacks access and requiring it to be refused. Every publicly open route must be declared in its own test, so a route cannot be opened by accident.

Positive controls: a measuring tool must catch a planted defect

A tool that reports zero defects can mean two things: there are none, or the tool cannot see. Both print the same line. So each measuring tool we write has a control mode that plants known defects where it measures, requires each to be caught, then removes them and requires silence. Until it passes the control, no number is reported.

Measure behavior, not status

A correct configuration does not mean correct behavior. A header declared sticky can still scroll away, and a process reported as running can still return an error page. So our checks do what a user does: scroll to the middle of an article and measure the position, click the button and read the result, call the public address and read the response code. An empty result is treated as a sign that the tool is broken before it is treated as proof of no defects.

A gate before every commit

A hook inside the code repository itself blocks known mistakes before code is written into the history. Because it lives in the repository, it runs for every person and machine, regardless of personal settings.

Six questions for every screen

CheckQuestion
EmptyDoes a screen with no data say so, or does it look broken?
LongDo long names, large amounts and lists of hundreds of rows break the layout?
DuplicateDoes the same information appear twice, or two places that disagree?
TextIs the text large enough on a phone and contrasted enough on a dark background?
ClickDoes every button do what it says, with feedback while it works?
TruthDo the figures on screen match the data in the database?

Releases with a way back

A new version is built and checked on its own port first, and only then switched in. The previous version stays in place so a rollback is one command. Public routes and the security checklist (SQL injection, XSS, CSRF, secret keys, HTTPS, access limits and audit logs) are reviewed for every project. For sensitive projects, the client can add an independent penetration test, and we supply the environment and fix what it finds.

What you receive

  • A shared defect list with steps to reproduce and fix status
  • A test build at the end of every two-week iteration, on a separate environment
  • The automatic test suite, kept in the code repository and handed over with the source code
  • The result of the security checklist review
  • Page speed measurements (PageSpeed, Core Web Vitals) for web projects
  • An acceptance record after running on real data

Frequently asked questions

What is software testing?

Running software under controlled conditions to find what is wrong before users do: wrong calculations, wrong display, slowness, data exposure. It has several levels, from a single calculation to a whole business flow on real data.

Is testing charged separately?

In projects we build, testing is within the project scope. Reviewing and testing a system built by another company is a separate service, quoted after we see the source code.

What is a positive control?

Running a measuring tool on a sample known to be defective and requiring it to catch the defect. If it cannot, its clean result has no value. We use this for every tool we write.

Can automatic tests replace human testers?

Not fully. Machines are good at what repeats and can be measured: calculation rules, permissions, layout overflow, broken links. People are still needed for business questions, such as whether a screen matches how accounting really works.

How does the client take part?

The client reviews the test build at the end of each iteration, logs defects in the shared list and accepts each stage on real data. The people who use the system should join acceptance because they know the exceptions.

What if a defect appears after handover?

Defects in code we delivered are covered by the warranty term stated in the contract. Incident response time follows the maintenance plan in the contract.

Ask about testing your system

Need a hand?