Given the minimal context, here is how one might distinguish these two sentences.
The software doesn't catch errors
This probably refers to the code itself. In many languages, the software developer may catch exceptions, for example, a file not being found.
Here it doesn't catch errors would mean that the developer did not catch exceptions, and instead raised the error to the calling routine. In this example, the file-not-found error must be handled by the routine that called it.
The software doesn't catch any errors
This probably refers to how the code functioned with a given data set.
The statement it doesn't catch any errors could be good or bad, depending on context.
If the code were undergoing an integration test and didn't catch any errors, that could be good if no errors were expected. Say that all the files in the test suite were available. Not catching any errors for a file-not-found would be a good thing.
However, this would be bad if an error were expected. Say that one of the files in the test suite were missing. Not catching any errors for a file-not-found would be an incorrect behavior, and therefore a bad thing.