There are a whole bunch of thoughts surrounding this issue, and I'm gonna try to tackle some of them. Grab your popcorn, boyos - this is gonna be a long post.
The general question here is "Can software make a mistake". And this will depend on how it's interpreted. If taken at face value, then the answer could be "Yes". Software CAN make a mistake. If someone programs a piece of software that places the decimal point in a financial calculation one space too far to the left or right, then the software is going to spit out the incorrect data. Although the fault of the error or mistake is not seated with the software - it's the result of poor programming - the software doesn't know that it's incorrect and will spit it out as what it perceives to be correct. Hence, it can make a mistake.
If the question is interpreted as "Can software intentionally make a mistake or error without any outside interference or bad programming", then the answer has to be no. Software as of yet has not evolved to be either self-aware or able to learn through the process of intentionally making mistakes. As such, software cannot make a "conscious" decision to make a mistake for the purpose of doing so. Hence, it cannot make a mistake without any outside interference or bad programming.
But what if the question is interpreted as "Can software intentionally make a mistake or error WITH outside interference or bad programming"? This becomes a grey area that really cannot be completely looked at. Why? Let's start with viruses. A virus can change code and force a program to do things that it wasn't originally designed to do. But neither the virus NOR the software it affects is making a conscious decision to do so. So the answer here is both yes and no - a mistake can be made, but it isn't the reuslt of a conscious decision or intentional attempt to do so.
Another side of the above paragraph is in hardware failure. Hardware can fail for various reasons, and in some cases cause the same effects on software as a virus does. This then goes back to the fact that a mistake can be made, but not consciously or intentionally. And none of this includes situations where the programming is good, no viruses are present, the hardware is sound, and yet the end user inputs bad data causing incorrect data to be spit out.
Now, try to remember that (for the second time) software up to this point has yet to become so advanced as to be self-aware or having the ability to learn through making mistakes. But let's assume for a moment that we have. Say, for example, we have a software package that has become self-aware, and is now considered a sentient being. The only way to learn is to make mistakes, right? But machines (in the typical, classical definition) don't make mistakes - they make calculated attempts to perform a task. If they fail, that isn't a mistake - it's just an incorrect way to accomplish the task. Machines don't see themselves as making mistakes, but rather potentially taking multiple attempts at completing a task. The failures in this case are not mistakes but failed attempts that may work IF the set of variables were to be changed.
Overall, I believe that while programmers, end users, viruses, and hardware failures can cause results that aren't expected, I wouldn't say that software can make a mistake.
Priest of the Church of Joe Wood
In memory of Nanee. 9/1/1993 - 5/16/2009. Rest in Peace, little girl.