What is static testing?
Static tests on computer products are an essential aspect in the early prevention of software defects. These tests encompass a series of techniques with which we detect bugs without having to run the software (contrary to what occurs in dynamic testing). Therefore, static testing focuses on evaluating how well the software is built instead of observing its behavior.
Static testing is highly important in in systems that have clear security implications such as computer systems used in hospitals or aviation software. The most common forms of static testing are code reviews and static analysis. Reviews and static analysis are can be conducted on almost anything that can read or parsed as code, epics, user stories, acceptance criteria, test automation scripts, etc.

Advantages of static testing
Static testing produces a noticeable benefit when performed in the early stages of the software development lifecycle. Bugs found by code reviews are much cheaper to fix than those detected in dynamic testing, and especially much cheaper to fix than when it has already been deployed in production.
For example, suppose that in a web application you have deployed to production a branch of code that implements a backend process and it has an important failure. Upon its detection it may be necessary to adjust the frontend code that complements the backend functionality. If static testing processes were implemented, the backend failure could be fixed before frontend teams incorporated its new code.
On the other hand, static tests in the form of reviews increase productivity in software development as it ends up improving the design and code maintenance. With static testing we detect bugs that are hardly noticeable with dynamic testing because it uncovers inconsistencies, contradictions or redundancies in the code.

Differences with dynamic testing
Static testing has the same objective as dynamic testing: to improve product’s quality. However, they complement each other. In static testing errors are uncovered directly, while the in dynamic testing we focus on evaluating software’s behavior upon execution. In this sense, static testing provides a special value since there are important flaws that go unnoticed for a long time when software is executed, possibly because the actions that provoke them are do not occur frequently. With static testing it takes way less time and effort to find these flaws.
In this regard, the following bugs are more easily detected with static testing:
- Lack of adherence to programming standards.
- Security vulnerabilities.
- Code defects like syntax errors, duplications, variables that are not used, etc.
- Defects in the requirements defined by the product owners: there are cases where the code complies with product specifications but these can be ambiguous or contradictory.
Conclusion
In a nutshell, static testing is a fundamental process to improve product quality. This type of testing will be very necessary to make the software development cheaper and more efficient. And at the same time, it allows us to find quality issues in aspects related to design and product specifications.