It is not "testing", nor it is a substitute for testing but it does play a similar role in discovering and preventing errors.
It is not "testing", nor it is a substitute for testing but it does play a similar role in discovering and preventing errors.
Weak vs. strong typing is orthogonal to static vs. dynamic.
E.g. JS is weak dynamic. Python is strong dynamic. C/C++ are weak static. Haskell, Rust are strong static.
Etc.
And the weak/strong is not binary, it's a spectrum
I find if my typing is really accurate, I introduce fewer bugs! /s
For me 99.9% of all bugs are detected at compile time.
Whereas when I go back to using Python it's more like 50%.
The overwhelming majority of bugs in software are behavioural bugs, which typing does not catch.
If you want to go down the formalism route to catch bugs then at the bare minimum you require Z formal specifications for all your code.
Do you have Z formal specifications for all your code?