As far as we know, software never caused any dangerous incidents for the shuttle. You can't say that about Arianespace (Ariane 4 #1) or SpaceX (a couple of crashes while trying to land - low stakes though) or Airbus ("just" some bad UX in critical situations) or Boeing (software basically killed a few hundred people).
Sure, but I imagine at least some components only really execute a small number of times per flight, or possibly never in the case of certain error handling code. Stretching the metaphor more than is probably appropriate, I'd treat launching the shuttle and having it come back as a big integration test. A system that passes it's integration test 100 times isn't necessarily particularly impressive in terms of reliability.
We run our integration test tens of times a day, and it fails once or twice a month. Our system is kinda flaky :(
A 2% failure rate isn't impressive, but I'm fine not crediting any of the shuttle issues to software. My only point is that 100 instance of use for purpose isn't enough, to my mind, to argue that a piece of software is exceptionally reliable.